fix: Auto Reset Opportunity Creation Search Field (#4951)

## Description

In the previous implementation, we saved the user's search field input.
However, I have introduced a new prop called `clearOnOpen`, which allows
us to reset the search field upon loading.

Closes: #4923 



https://github.com/twentyhq/twenty/assets/95065270/dd2cab30-ea47-444e-b356-d5c98087bcc6

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
Ashutosh Gupta
2024-04-17 15:01:33 +05:30
committed by GitHub
parent 6211f84de8
commit 340af9a244
4 changed files with 39 additions and 24 deletions

View File

@ -7,6 +7,7 @@ import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSi
import { RecordBoardContext } from '@/object-record/record-board/contexts/RecordBoardContext';
import { RecordBoardColumnContext } from '@/object-record/record-board/record-board-column/contexts/RecordBoardColumnContext';
import { SingleEntitySelect } from '@/object-record/relation-picker/components/SingleEntitySelect';
import { useEntitySelectSearch } from '@/object-record/relation-picker/hooks/useEntitySelectSearch';
import { EntityForSelect } from '@/object-record/relation-picker/types/EntityForSelect';
import { RelationPickerHotkeyScope } from '@/object-record/relation-picker/types/RelationPickerHotkeyScope';
import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope';
@ -41,9 +42,14 @@ export const RecordBoardColumnNewOpportunityButton = () => {
setHotkeyScopeAndMemorizePreviousScope,
} = usePreviousHotkeyScope();
const { resetSearchFilter } = useEntitySelectSearch({
relationPickerScopeId: 'relation-picker',
});
const handleEntitySelect = (company?: EntityForSelect) => {
setIsCreatingCard(false);
goBackToPreviousHotkeyScope();
resetSearchFilter();
if (!company) {
return;
@ -65,6 +71,7 @@ export const RecordBoardColumnNewOpportunityButton = () => {
}, [setIsCreatingCard, setHotkeyScopeAndMemorizePreviousScope]);
const handleCancel = () => {
resetSearchFilter();
goBackToPreviousHotkeyScope();
setIsCreatingCard(false);
};

View File

@ -1,8 +1,11 @@
import { useRecoilValue } from 'recoil';
import { ObjectMetadataItemsRelationPickerEffect } from '@/object-metadata/components/ObjectMetadataItemsRelationPickerEffect';
import {
SingleEntitySelectMenuItems,
SingleEntitySelectMenuItemsProps,
} from '@/object-record/relation-picker/components/SingleEntitySelectMenuItems';
import { useRelationPickerScopedStates } from '@/object-record/relation-picker/hooks/internal/useRelationPickerScopedStates';
import { useFilteredSearchEntityQuery } from '@/search/hooks/useFilteredSearchEntityQuery';
import { DropdownMenuSearchInput } from '@/ui/layout/dropdown/components/DropdownMenuSearchInput';
import { DropdownMenuSeparator } from '@/ui/layout/dropdown/components/DropdownMenuSeparator';
@ -37,19 +40,29 @@ export const SingleEntitySelectMenuItemsWithSearch = ({
selectedEntity,
selectedRelationRecordIds,
}: SingleEntitySelectMenuItemsWithSearchProps) => {
const { searchFilter, searchQuery, handleSearchFilterChange } =
useEntitySelectSearch({
relationPickerScopeId,
const { handleSearchFilterChange } = useEntitySelectSearch({
relationPickerScopeId,
});
const { searchQueryState, relationPickerSearchFilterState } =
useRelationPickerScopedStates({
relationPickerScopedId: relationPickerScopeId,
});
const showCreateButton = isDefined(onCreate) && searchFilter !== '';
const searchQuery = useRecoilValue(searchQueryState);
const relationPickerSearchFilter = useRecoilValue(
relationPickerSearchFilterState,
);
const showCreateButton =
isDefined(onCreate) && relationPickerSearchFilter !== '';
const entities = useFilteredSearchEntityQuery({
filters: [
{
fieldNames:
searchQuery?.computeFilterFields?.(relationObjectNameSingular) ?? [],
filter: searchFilter,
filter: relationPickerSearchFilter,
},
],
orderByField: 'createdAt',
@ -63,11 +76,7 @@ export const SingleEntitySelectMenuItemsWithSearch = ({
<ObjectMetadataItemsRelationPickerEffect
relationPickerScopeId={relationPickerScopeId}
/>
<DropdownMenuSearchInput
value={searchFilter}
onChange={handleSearchFilterChange}
autoFocus
/>
<DropdownMenuSearchInput onChange={handleSearchFilterChange} autoFocus />
<DropdownMenuSeparator />
<SingleEntitySelectMenuItems
entitiesToSelect={entities.entitiesToSelect}

View File

@ -7,12 +7,8 @@ export const useEntitySelectSearch = ({
}: {
relationPickerScopeId?: string;
} = {}) => {
const {
relationPickerSearchFilter,
searchQuery,
setRelationPickerPreselectedId,
setRelationPickerSearchFilter,
} = useRelationPicker({ relationPickerScopeId });
const { setRelationPickerSearchFilter, setRelationPickerPreselectedId } =
useRelationPicker({ relationPickerScopeId });
const debouncedSetSearchFilter = useDebouncedCallback(
setRelationPickerSearchFilter,
@ -22,6 +18,11 @@ export const useEntitySelectSearch = ({
},
);
const resetSearchFilter = () => {
debouncedSetSearchFilter('');
setRelationPickerPreselectedId('');
};
const handleSearchFilterChange = (
event: React.ChangeEvent<HTMLInputElement>,
) => {
@ -30,8 +31,7 @@ export const useEntitySelectSearch = ({
};
return {
searchFilter: relationPickerSearchFilter,
searchQuery,
handleSearchFilterChange,
resetSearchFilter,
};
};

View File

@ -1,4 +1,4 @@
import { useRecoilState } from 'recoil';
import { useRecoilState, useSetRecoilState } from 'recoil';
import { useRelationPickerScopedStates } from '@/object-record/relation-picker/hooks/internal/useRelationPickerScopedStates';
import { RelationPickerScopeInternalContext } from '@/object-record/relation-picker/scopes/scope-internal-context/RelationPickerScopeInternalContext';
@ -22,19 +22,18 @@ export const useRelationPicker = (props?: useRelationPickeProps) => {
relationPickerScopedId: scopeId,
});
const [searchQuery, setSearchQuery] = useRecoilState(searchQueryState);
const setSearchQuery = useSetRecoilState(searchQueryState);
const [relationPickerSearchFilter, setRelationPickerSearchFilter] =
useRecoilState(relationPickerSearchFilterState);
const setRelationPickerSearchFilter = useSetRecoilState(
relationPickerSearchFilterState,
);
const [relationPickerPreselectedId, setRelationPickerPreselectedId] =
useRecoilState(relationPickerPreselectedIdState);
return {
scopeId,
searchQuery,
setSearchQuery,
relationPickerSearchFilter,
setRelationPickerSearchFilter,
relationPickerPreselectedId,
setRelationPickerPreselectedId,