import { Avatar, Box, ButtonBase, List, ListItem, ListItemAvatar, ListItemText, useTheme, } from '@mui/material'; import React, { useCallback } from 'react'; import { IconWrapper } from '../Desktop/DesktopFooter'; import { HubsIcon } from '../../assets/Icons/HubsIcon'; import { MessagingIcon } from '../../assets/Icons/MessagingIcon'; import { ContextMenu } from '../ContextMenu'; import { getBaseApiReact } from '../../App'; import { formatEmailDate } from './QMailMessages'; import CampaignIcon from '@mui/icons-material/Campaign'; import MarkChatUnreadIcon from '@mui/icons-material/MarkChatUnread'; import LockIcon from '@mui/icons-material/Lock'; import { CustomButton } from '../../styles/App-styles'; import AddCircleOutlineIcon from '@mui/icons-material/AddCircleOutline'; import PersonOffIcon from '@mui/icons-material/PersonOff'; import { groupAnnouncementSelector, groupChatTimestampSelector, groupPropertySelector, groupsOwnerNamesSelector, isRunningPublicNodeAtom, timestampEnterDataSelector, } from '../../atoms/global'; import { timeDifferenceForNotificationChats } from './Group'; import { useAtom, useAtomValue } from 'jotai'; import { useTranslation } from 'react-i18next'; export const GroupList = ({ selectGroupFunc, setDesktopSideView, groupChatHasUnread, groupsAnnHasUnread, desktopSideView, directChatHasUnread, chatMode, groups, selectedGroup, getUserSettings, setOpenAddGroup, setIsOpenBlockedUserModal, myAddress, }) => { const theme = useTheme(); const { t } = useTranslation(['auth', 'core', 'group']); const [isRunningPublicNode] = useAtom(isRunningPublicNodeAtom); return (
{ setDesktopSideView('groups'); }} > { setDesktopSideView('directs'); }} >
{groups.map((group: any) => ( ))}
<> { setOpenAddGroup(true); }} > {t('group:group.group', { postProcess: 'capitalizeFirstChar' })} {!isRunningPublicNode && ( { setIsOpenBlockedUserModal(true); }} sx={{ minWidth: 'unset', padding: '10px', }} > )}
); }; const GroupItem = React.memo( ({ selectGroupFunc, group, selectedGroup, getUserSettings, myAddress }) => { const theme = useTheme(); const ownerName = useAtomValue(groupsOwnerNamesSelector(group?.groupId)); const announcement = useAtomValue( groupAnnouncementSelector(group?.groupId) ); const groupProperty = useAtomValue(groupPropertySelector(group?.groupId)); const groupChatTimestamp = useAtomValue( groupChatTimestampSelector(group?.groupId) ); const timestampEnterData = useAtomValue( timestampEnterDataSelector(group?.groupId) ); const selectGroupHandler = useCallback(() => { selectGroupFunc(group); }, [group, selectGroupFunc]); return ( {ownerName ? ( {group?.groupName?.charAt(0).toUpperCase()} ) : ( {' '} {group?.groupName?.charAt(0).toUpperCase() || 'G'} )} {announcement && !announcement?.seentimestamp && ( )} {group?.data && groupChatTimestamp && group?.sender !== myAddress && group?.timestamp && ((!timestampEnterData && Date.now() - group?.timestamp < timeDifferenceForNotificationChats) || timestampEnterData < group?.timestamp) && ( )} {groupProperty?.isOpen === false && ( )} ); } );