From f68fc684fe4987e3036a490438f2f92e9da5715a Mon Sep 17 00:00:00 2001 From: William Grant Date: Thu, 23 May 2024 22:37:43 +1000 Subject: [PATCH] feat: improved search for create group --- .../leftpane/overlay/OverlayClosedGroup.tsx | 92 +++++++++++-------- 1 file changed, 54 insertions(+), 38 deletions(-) diff --git a/ts/components/leftpane/overlay/OverlayClosedGroup.tsx b/ts/components/leftpane/overlay/OverlayClosedGroup.tsx index 4759b2495..c45d32b8c 100644 --- a/ts/components/leftpane/overlay/OverlayClosedGroup.tsx +++ b/ts/components/leftpane/overlay/OverlayClosedGroup.tsx @@ -4,32 +4,42 @@ import { useDispatch, useSelector } from 'react-redux'; import useKey from 'react-use/lib/useKey'; import styled from 'styled-components'; +import { isEmpty } from 'lodash'; +import { MemberListItem } from '../../MemberListItem'; import { SessionButton } from '../../basic/SessionButton'; import { SessionSpinner } from '../../loading'; -import { MemberListItem } from '../../MemberListItem'; import { useSet } from '../../../hooks/useSet'; import { VALIDATION } from '../../../session/constants'; import { createClosedGroup } from '../../../session/conversations/createClosedGroup'; +import { clearSearch } from '../../../state/ducks/search'; import { resetLeftOverlayMode } from '../../../state/ducks/section'; import { getPrivateContactsPubkeys } from '../../../state/selectors/conversations'; -import { getSearchResultsContactOnly, isSearching } from '../../../state/selectors/search'; +import { + getSearchResultsContactOnly, + getSearchTerm, + isSearching, +} from '../../../state/selectors/search'; +import { SessionSearchInput } from '../../SessionSearchInput'; +import { Flex } from '../../basic/Flex'; import { SpacerLG, SpacerMD } from '../../basic/Text'; import { SessionInput } from '../../inputs'; -import { SessionSearchInput } from '../../SessionSearchInput'; import { StyledLeftPaneOverlay } from './OverlayMessage'; const StyledMemberListNoContacts = styled.div` - font-family: var(--font-mono), var(--font-default); - background: var(--background-secondary-color); text-align: center; padding: 20px; `; +const StyledNoResults = styled.div` + width: 100%; + padding: var(--margins-xl) var(--margins-sm); + text-align: center; +`; + const StyledGroupMemberListContainer = styled.div` - padding: 2px 0px; + padding: 0; width: 100%; - max-height: 400px; overflow-y: auto; border-top: 1px solid var(--border-color); border-bottom: 1px solid var(--border-color); @@ -99,9 +109,11 @@ export const OverlayClosedGroup = () => { removeFrom: removeFromSelected, } = useSet([]); const isSearch = useSelector(isSearching); + const searchTerm = useSelector(getSearchTerm); const searchResultContactsOnly = useSelector(getSearchResultsContactOnly); function closeOverlay() { + dispatch(clearSearch()); dispatch(resetLeftOverlayMode()); } @@ -126,10 +138,10 @@ export const OverlayClosedGroup = () => { useKey('Escape', closeOverlay); - const noContactsForClosedGroup = privateContactsPubkeys.length === 0; - const contactsToRender = isSearch ? searchResultContactsOnly : privateContactsPubkeys; + const noContactsForClosedGroup = isEmpty(searchTerm) && contactsToRender.length === 0; + const disableCreateButton = !selectedMemberIds.length && !groupName.length; return ( @@ -138,33 +150,36 @@ export const OverlayClosedGroup = () => { flexDirection={'column'} flexGrow={1} alignItems={'center'} - padding={'var(--margins-md)'} > - - - - + + + + + + {noContactsForClosedGroup ? ( + ) : !isEmpty(searchTerm) && contactsToRender.length === 0 ? ( + {window.i18n('noSearchResults', [searchTerm])} ) : ( - + {contactsToRender.map((memberPubkey: string) => ( { key={memberPubkey} onSelect={addToSelected} onUnselect={removeFromSelected} - disableBg={true} /> ))} )} - - + + + + );