i actually like it....sidebar with messenger feel and rest of canvas with discord feel
This commit is contained in:
@@ -3,26 +3,26 @@
|
|||||||
// SINCE IT's NOT A NODE PROCESS
|
// SINCE IT's NOT A NODE PROCESS
|
||||||
|
|
||||||
enum Channels {
|
enum Channels {
|
||||||
ACTIVATE_LOG_IN = "ACTIVATE_LOG_IN",
|
ACTIVATE_LOG_IN = 'ACTIVATE_LOG_IN',
|
||||||
GOOGLE_AUTH_TOKENS = "GOOGLE_AUTH_TOKENS",
|
GOOGLE_AUTH_TOKENS = 'GOOGLE_AUTH_TOKENS',
|
||||||
RESIZE_WINDOW = "RESIZE_WINDOW",
|
RESIZE_WINDOW = 'RESIZE_WINDOW',
|
||||||
ON_WINDOW_BLUR = "ON_WINDOW_BLUR",
|
ON_WINDOW_BLUR = 'ON_WINDOW_BLUR',
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum STORE_ITEMS {
|
export enum STORE_ITEMS {
|
||||||
AUTH_SESSION_JWT = "AUTH_SESSION_JWT",
|
AUTH_SESSION_JWT = 'AUTH_SESSION_JWT',
|
||||||
}
|
}
|
||||||
|
|
||||||
export type Dimensions = { height: number; width: number };
|
export type Dimensions = { height: number; width: number };
|
||||||
|
|
||||||
export interface DimensionChangeRequest {
|
export interface DimensionChangeRequest {
|
||||||
setAlwaysOnTop: boolean;
|
setAlwaysOnTop: boolean;
|
||||||
setPosition?: "topRight" | "center";
|
setPosition?: 'topRight' | 'center';
|
||||||
dimensions: Dimensions;
|
dimensions: Dimensions;
|
||||||
addDimensions: boolean;
|
addDimensions: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const DEFAULT_APP_PRESET: Dimensions = { height: 875, width: 1210 };
|
export const DEFAULT_APP_PRESET: Dimensions = { height: 750, width: 1210 };
|
||||||
|
|
||||||
export const OVERLAY_ONLY_INITIAL_PRESET: Dimensions = {
|
export const OVERLAY_ONLY_INITIAL_PRESET: Dimensions = {
|
||||||
height: 50,
|
height: 50,
|
||||||
|
|||||||
@@ -57,13 +57,12 @@ export function StreamProvider({ children }: { children: React.ReactChild }) {
|
|||||||
const localStreamRef = useRef<HTMLVideoElement>(null);
|
const localStreamRef = useRef<HTMLVideoElement>(null);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
navigator.mediaDevices
|
// navigator.mediaDevices
|
||||||
.getUserMedia({ video: true, audio: true })
|
// .getUserMedia({ video: true, audio: true })
|
||||||
.then((localMediaStream: MediaStream) => {
|
// .then((localMediaStream: MediaStream) => {
|
||||||
setUserLocalStream(localMediaStream);
|
// setUserLocalStream(localMediaStream);
|
||||||
|
// if (localStreamRef.current) localStreamRef.current.srcObject = localMediaStream;
|
||||||
if (localStreamRef.current) localStreamRef.current.srcObject = localMediaStream;
|
// });
|
||||||
});
|
|
||||||
}, [localStreamRef]);
|
}, [localStreamRef]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
@@ -16,8 +16,6 @@ export default function Terminal() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-col flex-1">
|
<div className="flex flex-col flex-1">
|
||||||
<NavBar />
|
|
||||||
|
|
||||||
<div className="flex flex-row flex-1">
|
<div className="flex flex-row flex-1">
|
||||||
<SidePanel />
|
<SidePanel />
|
||||||
|
|
||||||
|
|||||||
@@ -96,46 +96,14 @@ export default function NavBar() {
|
|||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div className="flex flex-row gap-3 items-center bg-gray-100 p-4 pb-0" id="titlebar">
|
||||||
className="flex flex-row gap-3 items-center bg-gray-100 border-b border-b-200 p-4"
|
|
||||||
id="titlebar"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
onKeyDown={() => {
|
|
||||||
//
|
|
||||||
}}
|
|
||||||
onClick={() => {
|
|
||||||
console.log('opening main app');
|
|
||||||
}}
|
|
||||||
role="presentation"
|
|
||||||
>
|
|
||||||
<NoTextLogo type="small" />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="mx-auto flex flex-row items-center space-x-2 bg-gray-200 p-2 rounded w-[400px]">
|
|
||||||
<FiSearch className="text-xs text-gray-300" />
|
|
||||||
<input
|
|
||||||
placeholder="Search for people, channels, clips..."
|
|
||||||
className="flex-1 bg-transparent placeholder-gray-300 placeholder:text-xs focus:outline-none"
|
|
||||||
onChange={(e) => setSearchQuery(e.target.value)}
|
|
||||||
value={searchQuery}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<button
|
|
||||||
onClick={handleFlowState}
|
|
||||||
className="text-gray-300 text-xs p-3 transition-all hover:bg-gray-200"
|
|
||||||
>
|
|
||||||
flow state
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<Dropdown overlay={profileMenu}>
|
<Dropdown overlay={profileMenu}>
|
||||||
<div className={'cursor-pointer'}>
|
<div className={'cursor-pointer'}>
|
||||||
{user.picture && (
|
{user.picture && (
|
||||||
<Avatar
|
<Avatar
|
||||||
key={`userHeaderProfilePicture`}
|
key={`userHeaderProfilePicture`}
|
||||||
className="shadow-md hover:scale-110 transition-all"
|
className="shadow-md hover:scale-110 transition-all"
|
||||||
size={'large'}
|
size={'default'}
|
||||||
alt={user.name}
|
alt={user.name}
|
||||||
src={user.picture}
|
src={user.picture}
|
||||||
shape="square"
|
shape="square"
|
||||||
@@ -144,6 +112,15 @@ export default function NavBar() {
|
|||||||
</div>
|
</div>
|
||||||
</Dropdown>
|
</Dropdown>
|
||||||
|
|
||||||
|
<span className="font-semibold mx-auto">Channels</span>
|
||||||
|
|
||||||
|
<button
|
||||||
|
onClick={handleFlowState}
|
||||||
|
className="text-gray-300 text-xs p-3 transition-all hover:bg-gray-200"
|
||||||
|
>
|
||||||
|
flow
|
||||||
|
</button>
|
||||||
|
|
||||||
{/* menu for the output options */}
|
{/* menu for the output options */}
|
||||||
{/* <Menu
|
{/* <Menu
|
||||||
open={menuOpen}
|
open={menuOpen}
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ function LineDetails() {
|
|||||||
const showCreateChannel = false;
|
const showCreateChannel = false;
|
||||||
if (showCreateChannel)
|
if (showCreateChannel)
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-col flex-1 items-center p-10 bg-gray-100 border-l border-l-gray-200">
|
<div className="flex flex-col flex-1 items-center pt-10 bg-gray-100 border-l border-l-gray-200">
|
||||||
<div className="flex flex-col gap-2 max-w-lg w-full">
|
<div className="flex flex-col gap-2 max-w-lg w-full">
|
||||||
{/* people search */}
|
{/* people search */}
|
||||||
<span className="text-gray-500">People</span>
|
<span className="text-gray-500">People</span>
|
||||||
@@ -185,115 +185,36 @@ function LineDetails() {
|
|||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className="flex flex-col flex-1 bg-gray-100
|
className="flex flex-col flex-1 bg-gray-100
|
||||||
border-l border-l-gray-200 relative p-5"
|
border-l border-l-gray-200 relative"
|
||||||
>
|
>
|
||||||
{/* line timeline */}
|
{/* line details */}
|
||||||
<div className="flex flex-col items-center gap-2 my-2 mx-auto max-w-lg w-full">
|
<div
|
||||||
<span className={'text-gray-300 text-sm cursor-pointer hover:underline'}>load more</span>
|
className="p-4
|
||||||
|
flex flex-row items-center gap-2 justify-end border-b-gray-200 border-b"
|
||||||
|
>
|
||||||
|
{/* {profilePictures && <LineIcon grayscale={false} sourceImages={profilePictures} />} */}
|
||||||
|
|
||||||
<span className={'text-gray-300 text-sm'}>yesterday</span>
|
<div className="flex flex-col items-start mr-auto group">
|
||||||
|
<span className="flex flex-row gap-2 items-center">
|
||||||
|
<h2 className={`text-md text-gray-800 font-semibold`}>
|
||||||
|
{selectedLine.lineDetails.name || selectedLine.otherUserObjects[0].givenName}
|
||||||
|
</h2>
|
||||||
|
|
||||||
<div className={'rounded flex flex-row items-center gap-2 w-full p-5'}>
|
<button
|
||||||
<Avatar.Group key={`lineHistoryMessage-yesterday-afternoon}`}>
|
className={`p-1 hidden group-hover:flex justify-center items-center hover:bg-gray-300
|
||||||
{selectedLine.otherUserObjects.map((otherUser) => (
|
transition-all hover:scale-105`}
|
||||||
<Avatar
|
|
||||||
key={`linehistory-${1}`}
|
|
||||||
src={otherUser.picture}
|
|
||||||
shape="square"
|
|
||||||
size={'large'}
|
|
||||||
// grayscale if not playing?
|
|
||||||
className={`${true && 'grayscale'}`}
|
|
||||||
/>
|
|
||||||
))}
|
|
||||||
</Avatar.Group>
|
|
||||||
|
|
||||||
{selectedLine.otherUserObjects.map((otherUser) => (
|
|
||||||
<span key={`chunk-${otherUser.name}`} className="text-gray-500">
|
|
||||||
{`${otherUser.givenName}, `}
|
|
||||||
</span>
|
|
||||||
))}
|
|
||||||
|
|
||||||
<span className="ml-auto text-xs text-gray-300">{`${Math.floor(Math.random() * 10) + 1}:${
|
|
||||||
Math.floor(Math.random() * 100) + 10
|
|
||||||
}pm |`}</span>
|
|
||||||
|
|
||||||
<span className="text-gray-400 text-md">{`${
|
|
||||||
Math.floor(Math.random() * 60) + 1
|
|
||||||
} seconds`}</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<span className={'text-gray-300 text-sm'}>today</span>
|
|
||||||
|
|
||||||
<div className={'rounded flex flex-row items-center gap-2 w-full shadow-lg p-5'}>
|
|
||||||
<Avatar.Group key={`lineHistoryMessage-yesterday-afternoon}`}>
|
|
||||||
{selectedLine.otherUserObjects.map((otherUser) => (
|
|
||||||
<Avatar
|
|
||||||
key={`linehistory-${1}`}
|
|
||||||
src={otherUser.picture}
|
|
||||||
shape="square"
|
|
||||||
size={'large'}
|
|
||||||
// grayscale if not playing?
|
|
||||||
className={`${true && 'grayscale'}`}
|
|
||||||
/>
|
|
||||||
))}
|
|
||||||
</Avatar.Group>
|
|
||||||
|
|
||||||
{selectedLine.otherUserObjects.map((otherUser) => (
|
|
||||||
<span key={`chunk-${otherUser.name}`} className="text-gray-500">
|
|
||||||
{`${otherUser.givenName}, `}
|
|
||||||
</span>
|
|
||||||
))}
|
|
||||||
|
|
||||||
<span className="ml-auto text-xs text-gray-300">{`${Math.floor(Math.random() * 10) + 1}:${
|
|
||||||
Math.floor(Math.random() * 100) + 10
|
|
||||||
}pm |`}</span>
|
|
||||||
|
|
||||||
<span className="text-gray-400 text-md">{`${
|
|
||||||
Math.floor(Math.random() * 60) + 1
|
|
||||||
} seconds`}</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{/* <LineStreams broadcasters={selectedLine.tunedInMemberIds} /> */}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{/* live broadcasters */}
|
|
||||||
<div className="flex flex-col items-center gap-2 mx-auto w-full max-w-lg mt-auto">
|
|
||||||
<span className={'flex flex-row gap-2 items-center text-teal-500 text-sm'}>
|
|
||||||
<FiSun className="animate-pulse" />
|
|
||||||
<span>right now</span>
|
|
||||||
</span>
|
|
||||||
|
|
||||||
<div
|
|
||||||
className={
|
|
||||||
'rounded flex flex-col items-center gap-2 w-full p-2 shadow-2xl border border-teal-500'
|
|
||||||
}
|
|
||||||
>
|
|
||||||
{selectedLine.otherUserObjects.map((otherUser) => (
|
|
||||||
<div
|
|
||||||
key={`linehistory-${otherUser.name}`}
|
|
||||||
className={'flex flex-row gap-2 w-full items-center animate-pulse p-5'}
|
|
||||||
>
|
>
|
||||||
<Avatar src={otherUser.picture} shape="square" size={'large'} />
|
<FiSettings className="text-gray-400 text-xs" />
|
||||||
|
</button>
|
||||||
<span key={`chunk-${otherUser.name}`} className="text-gray-600 font-semibold">
|
</span>
|
||||||
{`${otherUser.name}`}
|
|
||||||
</span>
|
|
||||||
|
|
||||||
<span className="text-gray-600 text-md ml-auto">
|
|
||||||
<FiHeadphones />
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
))}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="absolute right-3 bottom-3 flex flex-row gap-3 ">
|
|
||||||
<Tooltip
|
<Tooltip
|
||||||
placement="left"
|
placement="left"
|
||||||
title={`${isUserToggleTuned ? 'click to untoggle' : 'click to stay tuned in'}`}
|
title={`${isUserToggleTuned ? 'click to untoggle' : 'click to stay tuned in'}`}
|
||||||
>
|
>
|
||||||
<button
|
<button
|
||||||
className={`p-3 flex justify-center items-center shadow-lg
|
className={`ml-2 p-2 flex justify-center items-center shadow-lg
|
||||||
hover:scale-105 transition-all animate-pulse ${
|
hover:scale-105 transition-all animate-pulse ${
|
||||||
isUserToggleTuned ? 'bg-gray-800 text-white' : 'text-black'
|
isUserToggleTuned ? 'bg-gray-800 text-white' : 'text-black'
|
||||||
}`}
|
}`}
|
||||||
@@ -309,14 +230,118 @@ function LineDetails() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<FiActivity className="text-lg" />
|
<FiActivity className="text-md" />
|
||||||
</button>
|
</button>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* main canvas */}
|
||||||
|
<div className="flex flex-row flex-1">
|
||||||
|
{/* line timeline */}
|
||||||
|
<div
|
||||||
|
className="flex flex-col justify-end items-center gap-2 p-5 mx-auto
|
||||||
|
max-w-lg w-full"
|
||||||
|
>
|
||||||
|
<span className={'text-gray-300 text-sm cursor-pointer hover:underline'}>load more</span>
|
||||||
|
|
||||||
|
<span className={'text-gray-300 text-sm'}>yesterday</span>
|
||||||
|
|
||||||
|
<div className={'rounded flex flex-row items-center gap-2 w-full p-5'}>
|
||||||
|
<Avatar.Group key={`lineHistoryMessage-yesterday-afternoon}`}>
|
||||||
|
{selectedLine.otherUserObjects.map((otherUser) => (
|
||||||
|
<Avatar
|
||||||
|
key={`linehistory-${1}`}
|
||||||
|
src={otherUser.picture}
|
||||||
|
shape="square"
|
||||||
|
size={'large'}
|
||||||
|
// grayscale if not playing?
|
||||||
|
className={`${true && 'grayscale'}`}
|
||||||
|
/>
|
||||||
|
))}
|
||||||
|
</Avatar.Group>
|
||||||
|
|
||||||
|
{selectedLine.otherUserObjects.map((otherUser) => (
|
||||||
|
<span key={`chunk-${otherUser.name}`} className="text-gray-500">
|
||||||
|
{`${otherUser.givenName}, `}
|
||||||
|
</span>
|
||||||
|
))}
|
||||||
|
|
||||||
|
<span className="ml-auto text-xs text-gray-300">{`${
|
||||||
|
Math.floor(Math.random() * 10) + 1
|
||||||
|
}:${Math.floor(Math.random() * 100) + 10}pm |`}</span>
|
||||||
|
|
||||||
|
<span className="text-gray-400 text-md">{`${
|
||||||
|
Math.floor(Math.random() * 60) + 1
|
||||||
|
} seconds`}</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<span className={'text-gray-300 text-sm'}>today</span>
|
||||||
|
|
||||||
|
<div className={'rounded flex flex-row items-center gap-2 w-full shadow-lg p-5'}>
|
||||||
|
<Avatar.Group key={`lineHistoryMessage-yesterday-afternoon}`}>
|
||||||
|
{selectedLine.otherUserObjects.map((otherUser) => (
|
||||||
|
<Avatar
|
||||||
|
key={`linehistory-${1}`}
|
||||||
|
src={otherUser.picture}
|
||||||
|
shape="square"
|
||||||
|
size={'large'}
|
||||||
|
// grayscale if not playing?
|
||||||
|
className={`${true && 'grayscale'}`}
|
||||||
|
/>
|
||||||
|
))}
|
||||||
|
</Avatar.Group>
|
||||||
|
|
||||||
|
{selectedLine.otherUserObjects.map((otherUser) => (
|
||||||
|
<span key={`chunk-${otherUser.name}`} className="text-gray-500">
|
||||||
|
{`${otherUser.givenName}, `}
|
||||||
|
</span>
|
||||||
|
))}
|
||||||
|
|
||||||
|
<span className="ml-auto text-xs text-gray-300">{`${
|
||||||
|
Math.floor(Math.random() * 10) + 1
|
||||||
|
}:${Math.floor(Math.random() * 100) + 10}pm |`}</span>
|
||||||
|
|
||||||
|
<span className="text-gray-400 text-md">{`${
|
||||||
|
Math.floor(Math.random() * 60) + 1
|
||||||
|
} seconds`}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="max w-[250px] p-4 shadow-2xl flex flex-col">
|
||||||
|
<span className="text-teal-600 text-sm flex flex-row items-center gap-2">
|
||||||
|
<FiSun /> <span>Right Now</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
{selectedLine.otherUserObjects.map((otherUser) => (
|
||||||
|
<div
|
||||||
|
key={otherUser.email}
|
||||||
|
className="flex flex-row gap-2 items-center p-2
|
||||||
|
hover:bg-gray-200 cursor-pointer rounded"
|
||||||
|
>
|
||||||
|
<Avatar
|
||||||
|
src={otherUser.picture}
|
||||||
|
size={'large'}
|
||||||
|
shape={'square'}
|
||||||
|
className={'shadow-lg'}
|
||||||
|
/>
|
||||||
|
<span className="flex flex-col gap-1">
|
||||||
|
<span className="text-md font-semibold text-gray-600">{otherUser.name}</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
|
||||||
|
<span className="text-gray-400 text-sm flex flex-row items-center gap-2">
|
||||||
|
<span>Offline</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="absolute right-5 bottom-5 flex flex-row gap-3">
|
||||||
<button
|
<button
|
||||||
className={`p-3 flex justify-center items-center shadow-2xl
|
className={`p-3 flex justify-center items-center shadow-2xl
|
||||||
hover:scale-105 transition-all ${
|
hover:scale-105 transition-all ${
|
||||||
isUserBroadcasting ? 'bg-teal-800 text-white' : 'text-teal-800 border-teal-800 border'
|
isUserBroadcasting ? 'bg-teal-800 text-white' : 'text-teal-800 border-teal-800 border'
|
||||||
}`}
|
}`}
|
||||||
>
|
>
|
||||||
<FiSun className="text-lg" />
|
<FiSun className="text-lg" />
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -32,10 +32,33 @@ export default function SidePanel() {
|
|||||||
return [tunedLines, restLines];
|
return [tunedLines, restLines];
|
||||||
}, [roomsMap]);
|
}, [roomsMap]);
|
||||||
|
|
||||||
|
const [searchQuery, setSearchQuery] = useState<string>('');
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-col w-[400px] relative group shadow-xl bg-white">
|
<div className="flex flex-col w-[350px] relative group shadow-2xl bg-white">
|
||||||
|
<NavBar />
|
||||||
|
|
||||||
|
<div className="flex flex-row p-4 items-center bg-gray-100 gap-2">
|
||||||
|
<div className="flex-1 flex flex-row items-center space-x-2 bg-gray-200 p-2 rounded">
|
||||||
|
<FiSearch className="text-xs text-gray-400" />
|
||||||
|
<input
|
||||||
|
placeholder="Search for people, channels, clips..."
|
||||||
|
className="flex-1 bg-transparent placeholder-gray-400 text-gray-500 placeholder:text-xs focus:outline-none"
|
||||||
|
onChange={(e) => setSearchQuery(e.target.value)}
|
||||||
|
value={searchQuery}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button
|
||||||
|
className="ml-auto flex flex-row items-center justify-evenly
|
||||||
|
shadow-xl bg-gray-800 p-2 text-white text-xs"
|
||||||
|
>
|
||||||
|
<FaPlus />
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
{/* tuned in lines block */}
|
{/* tuned in lines block */}
|
||||||
<div className="flex flex-col border-b border-b-gray-100 bg-gray-100 shadow-xl">
|
<div className="flex flex-col bg-gray-100 shadow-xl">
|
||||||
{/* tuned in header + general controls */}
|
{/* tuned in header + general controls */}
|
||||||
|
|
||||||
<Tooltip placement="right" title={'These are your active rooms...'}>
|
<Tooltip placement="right" title={'These are your active rooms...'}>
|
||||||
@@ -49,13 +72,6 @@ export default function SidePanel() {
|
|||||||
toggleTunedLines?.length || 0
|
toggleTunedLines?.length || 0
|
||||||
}/3`}</p>
|
}/3`}</p>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<button
|
|
||||||
className="ml-auto flex flex-row items-center justify-evenly
|
|
||||||
shadow-xl bg-gray-800 p-2 text-white text-xs"
|
|
||||||
>
|
|
||||||
<FaPlus />
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
|
|
||||||
@@ -79,7 +95,7 @@ export default function SidePanel() {
|
|||||||
)}
|
)}
|
||||||
|
|
||||||
{/* rest of the lines */}
|
{/* rest of the lines */}
|
||||||
<div className={'flex flex-col mt-5'}>
|
<div className={'flex flex-col'}>
|
||||||
{initialRoomsFetch.loading ? (
|
{initialRoomsFetch.loading ? (
|
||||||
<Skeleton />
|
<Skeleton />
|
||||||
) : (
|
) : (
|
||||||
@@ -93,6 +109,19 @@ export default function SidePanel() {
|
|||||||
))
|
))
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
className="absolute bottom-4 left-4"
|
||||||
|
onKeyDown={() => {
|
||||||
|
//
|
||||||
|
}}
|
||||||
|
onClick={() => {
|
||||||
|
console.log('opening main app');
|
||||||
|
}}
|
||||||
|
role="presentation"
|
||||||
|
>
|
||||||
|
<NoTextLogo type="small" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user