import { LineMemberState } from '@nirvana/core/models/line.model'; import { Skeleton, Tooltip } from 'antd'; import React, { useCallback, useMemo, useState } from 'react'; import { FiActivity, FiPlus, FiSearch } from 'react-icons/fi'; import useRooms from '../../../../providers/RoomsProvider'; import NavBar from '../navbar/Navbar'; import NoTextLogo from '@nirvana/components/logo/NoTextLogo'; import LineRow from '../line/LineRow'; import useTerminalProvider from '../../../../providers/TerminalProvider'; export default function SidePanel() { // using merely for loading state...better to add to realtimeroom context? const { rooms: initialRoomsFetch } = useRooms(); const { roomsMap, handleSelectLine, selectedLineId, handleShowNewChannelForm } = useTerminalProvider(); // todo: sort const allChannels = useMemo(() => { const channels = Object.values(roomsMap); channels.sort((channelA, channelB) => { if ( channelA.currentUserMember.state === LineMemberState.TUNED && channelB.currentUserMember.state === LineMemberState.INBOX ) return -1; if ( channelB.currentUserMember.state === LineMemberState.TUNED && channelA.currentUserMember.state === LineMemberState.INBOX ) return 1; if (channelA.lineDetails.createdDate > channelB.lineDetails.createdDate) return 1; // sort also by activity return -1; }); return channels; }, [roomsMap]); const [searchQuery, setSearchQuery] = useState(''); const handleCreateNewChannel = useCallback(() => { handleShowNewChannelForm('show'); }, [handleShowNewChannelForm]); return (
setSearchQuery(e.target.value)} value={searchQuery} />
{/* tuned in header + general controls */}

Tuned In

{`${allChannels?.length || 0}/3`}

{!(allChannels.length > 0) && ( You have no lines!
Create one to connect to your team instantly.
)} {/* rest of the lines */}
{initialRoomsFetch.loading ? ( ) : ( allChannels.map((masterLineData, index) => ( )) )}
{/* user control panel */}
); }