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'; import styled from 'styled-components'; import { SessionSearchInput } from '../../SessionSearchInput'; import { getSearchResults, isSearching } from '../../../state/selectors/search'; import { useSet } from '../../../hooks/useSet'; import { VALIDATION } from '../../../session/constants'; const StyledMemberListNoContacts = styled.div` font-family: var(--font-font-mono); background: var(--background-secondary-color); text-align: center; padding: 20px; `; const StyledGroupMemberListContainer = styled.div` padding: 2px 0px; width: 100%; max-height: 400px; overflow-y: auto; border: var(--border-color); `; const NoContacts = () => { return ( {window.i18n('noContactsForGroup')} ); }; export const OverlayClosedGroup = () => { const dispatch = useDispatch(); const privateContactsPubkeys = useSelector(getPrivateContactsPubkeys); const [groupName, setGroupName] = useState(''); const [loading, setLoading] = useState(false); const { uniqueValues: selectedMemberIds, addTo: addToSelected, removeFrom: removeFromSelected, } = useSet([]); function closeOverlay() { dispatch(resetOverlayMode()); } 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('create'); const subtitle = window.i18n('createClosedGroupNamePrompt'); const placeholder = window.i18n('createClosedGroupPlaceholder'); const noContactsForClosedGroup = privateContactsPubkeys.length === 0; const isSearch = useSelector(isSearching); const searchResultsSelected = useSelector(getSearchResults); const searchResults = isSearch ? searchResultsSelected : undefined; let sharedWithResults: Array = []; if (searchResults && searchResults.contactsAndGroups.length) { sharedWithResults = searchResults.contactsAndGroups .filter(convo => convo.isPrivate) .map(convo => convo.id); } const contactsToRender = isSearch ? sharedWithResults : privateContactsPubkeys; const disableCreateButton = !selectedMemberIds.length && !groupName.length; return (
{noContactsForClosedGroup ? ( ) : (
{contactsToRender.map((memberPubkey: string) => ( m === memberPubkey)} key={memberPubkey} onSelect={addToSelected} onUnselect={removeFromSelected} /> ))}
)}
); };