import type { FC } from '../../../lib/teact/teact'; import React, { memo, useCallback, useMemo, useState, } from '../../../lib/teact/teact'; import { getActions, getGlobal } from '../../../global'; import type { ApiChatlistInviteNew } from '../../../api/types'; import buildClassName from '../../../util/buildClassName'; import renderText from '../../common/helpers/renderText'; import useLang from '../../../hooks/useLang'; import Picker from '../../common/Picker'; import Badge from '../../ui/Badge'; import Button from '../../ui/Button'; import styles from './ChatlistModal.module.scss'; type OwnProps = { invite: ApiChatlistInviteNew; }; const ChatlistNew: FC = ({ invite }) => { const { closeChatlistModal, joinChatlistInvite } = getActions(); const lang = useLang(); const [selectedPeerIds, setSelectedPeerIds] = useState(invite.peerIds); const joinedIds = useMemo(() => { const chatsById = getGlobal().chats.byId; return invite.peerIds.filter((id) => !chatsById[id].isNotJoined); }, [invite.peerIds]); const selectedCount = selectedPeerIds.length - joinedIds.length; const badgeText = selectedCount ? selectedCount.toString() : undefined; const handleButtonClick = useCallback(() => { closeChatlistModal(); joinChatlistInvite({ invite, peerIds: selectedPeerIds, }); }, [invite, selectedPeerIds]); const handleSelectionToggle = useCallback(() => { const areAllSelected = selectedPeerIds.length === invite.peerIds.length; setSelectedPeerIds(areAllSelected ? joinedIds : invite.peerIds); }, [invite.peerIds, joinedIds, selectedPeerIds.length]); return (
{renderText(lang('FolderLinkSubtitle', invite.title), ['simple_markdown', 'emoji'])}
{lang('FolderLinkHeaderChatsJoin', selectedCount, 'i')}
{selectedPeerIds.length === invite.peerIds.length ? lang('DeselectAll') : lang('SelectAll')}
); }; export default memo(ChatlistNew);