import React, { useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { SessionButton, SessionButtonColor, SessionButtonType } from '../../basic/SessionButton'; import { SessionIdEditable } from '../../basic/SessionIdEditable'; import { SessionSpinner } from '../../basic/SessionSpinner'; import { MemberListItem } from '../../MemberListItem'; import { OverlayHeader } from './OverlayHeader'; // tslint:disable: no-submodule-imports use-simple-attributes import { resetOverlayMode } from '../../../state/ducks/section'; import { getPrivateContactsPubkeys } from '../../../state/selectors/conversations'; import { SpacerLG } from '../../basic/Text'; import { MainViewController } from '../../MainViewController'; import useKey from 'react-use/lib/useKey'; export const OverlayClosedGroup = () => { const dispatch = useDispatch(); const privateContactsPubkeys = useSelector(getPrivateContactsPubkeys); // FIXME autofocus inputref on mount const [groupName, setGroupName] = useState(''); const [loading, setLoading] = useState(false); const [selectedMemberIds, setSelectedMemberIds] = useState>([]); function closeOverlay() { dispatch(resetOverlayMode()); } function handleSelectMember(memberId: string) { if (selectedMemberIds.includes(memberId)) { return; } setSelectedMemberIds([...selectedMemberIds, memberId]); } function handleUnselectMember(unselectId: string) { setSelectedMemberIds( selectedMemberIds.filter(id => { return id !== unselectId; }) ); } async function onEnterPressed() { if (loading) { window?.log?.warn('Closed group creation already in progress'); return; } setLoading(true); const groupCreated = await MainViewController.createClosedGroup(groupName, selectedMemberIds); if (groupCreated) { closeOverlay(); return; } setLoading(false); } useKey('Escape', closeOverlay); const title = window.i18n('createGroup'); const buttonText = window.i18n('done'); const subtitle = window.i18n('createClosedGroupNamePrompt'); const placeholder = window.i18n('createClosedGroupPlaceholder'); const noContactsForClosedGroup = privateContactsPubkeys.length === 0; return (
{noContactsForClosedGroup ? (
{window.i18n('noContactsForGroup')}
) : (
{privateContactsPubkeys.map((memberPubkey: string) => ( m === memberPubkey)} key={memberPubkey} onSelect={selectedMember => { handleSelectMember(selectedMember); }} onUnselect={unselectedMember => { handleUnselectMember(unselectedMember); }} /> ))}
)}
); };