import type { FC } from '../../../lib/teact/teact'; import React, { useState, useCallback, useEffect, memo, } from '../../../lib/teact/teact'; import { getActions, withGlobal } from '../../../global'; import { ChatCreationProgress } from '../../../types'; import { selectTabState } from '../../../global/selectors'; import useLang from '../../../hooks/useLang'; import useHistoryBack from '../../../hooks/useHistoryBack'; import InputText from '../../ui/InputText'; import FloatingActionButton from '../../ui/FloatingActionButton'; import Spinner from '../../ui/Spinner'; import AvatarEditable from '../../ui/AvatarEditable'; import Button from '../../ui/Button'; import ListItem from '../../ui/ListItem'; import PrivateChatInfo from '../../common/PrivateChatInfo'; export type OwnProps = { isChannel?: boolean; isActive: boolean; memberIds: string[]; onReset: (forceReturnToChatList?: boolean) => void; }; type StateProps = { creationProgress?: ChatCreationProgress; creationError?: string; maxGroupSize?: number; }; const NewChatStep2: FC = ({ isChannel, isActive, memberIds, maxGroupSize, creationProgress, creationError, onReset, }) => { const { createGroupChat, createChannel, } = getActions(); const lang = useLang(); useHistoryBack({ isActive, onBack: onReset, }); const [title, setTitle] = useState(''); const [about, setAbout] = useState(''); const [photo, setPhoto] = useState(); const [error, setError] = useState(); const chatTitleEmptyError = 'Chat title can\'t be empty'; const channelTitleEmptyError = 'Channel title can\'t be empty'; const chatTooManyUsersError = 'Sorry, creating supergroups is not yet supported'; const isLoading = creationProgress === ChatCreationProgress.InProgress; const handleTitleChange = useCallback((e: React.ChangeEvent) => { const { value } = e.currentTarget; const newValue = value.replace(/^\s+/, ''); setTitle(newValue); if (newValue !== value) { e.currentTarget.value = newValue; } }, []); const handleDescriptionChange = useCallback((e: React.ChangeEvent) => { setAbout(e.currentTarget.value); }, []); const handleCreateGroup = useCallback(() => { if (!title.length) { setError(chatTitleEmptyError); return; } if (maxGroupSize && memberIds.length >= maxGroupSize) { setError(chatTooManyUsersError); return; } createGroupChat({ title, photo, memberIds, }); }, [title, memberIds, maxGroupSize, createGroupChat, photo]); const handleCreateChannel = useCallback(() => { if (!title.length) { setError(channelTitleEmptyError); return; } createChannel({ title, about, photo, memberIds, }); }, [title, createChannel, about, photo, memberIds, channelTitleEmptyError]); useEffect(() => { if (creationProgress === ChatCreationProgress.Complete) { onReset(true); } }, [creationProgress, onReset]); const renderedError = (creationError && lang(creationError)) || ( error !== chatTitleEmptyError && error !== channelTitleEmptyError ? error : undefined ); return (

{lang(isChannel ? 'NewChannel' : 'NewGroup')}

{isChannel && ( <>

{lang('DescriptionInfo')}

)} {renderedError && (

{renderedError}

)} {memberIds.length > 0 && ( <>

{lang('GroupInfo.ParticipantCount', memberIds.length, 'i')}

{memberIds.map((id) => ( ))}
)}
{isLoading ? ( ) : ( )}
); }; export default memo(withGlobal( (global): StateProps => { const { progress: creationProgress, error: creationError, } = selectTabState(global).chatCreation || {}; return { creationProgress, creationError, maxGroupSize: global.config?.maxGroupSize, }; }, )(NewChatStep2));