From d246010c5cd1ece234765d5584e7cd6289863ce2 Mon Sep 17 00:00:00 2001 From: Charles Bochet Date: Thu, 27 Feb 2025 09:56:03 +0100 Subject: [PATCH] RecordPicker refactoring part 3: remove effects (#10505) This PR is part 3 of RecordPicker refactoring. It aims to remove all effects from: - (low level layer) SingleRecordPicker, MultipleRecordPicker - (higher level layer) RelationPicker, RelationToOneInput, RelationFromManyInput, ActivityTargetInput... In this PR, I'm re-grouping Effects in ActivityTarget section and creating a hook that will be called on inlineCellOpen --- .../ActivityTargetInlineCellEditMode.tsx | 40 ++++--- ...etInlineCellEditModeMultiRecordsEffect.tsx | 3 + ...EditModeMultiRecordsSearchFilterEffect.tsx | 51 ++++++++ .../components/ActivityTargetsInlineCell.tsx | 9 ++ ...ltipleObjectRecordOnClickOutsideEffect.tsx | 0 ...attedAsObjectRecordForSelectArray.test.tsx | 2 +- ...ResultFormattedAsObjectRecordsMap.test.tsx | 2 +- ...ltFormattedAsObjectRecordForSelectArray.ts | 9 +- .../hooks/useMultiObjectSearch.ts | 2 +- ...hQueryResultFormattedAsObjectRecordsMap.ts | 4 +- .../useMultiObjectSearchSelectedItemsQuery.ts | 6 +- ...useOpenActivityTargetInlineCellEditMode.ts | 14 +++ .../hooks/useCombinedFindManyRecords.ts | 2 +- .../hooks/useCombinedGetTotalCount.ts | 2 +- .../types/MultiObjectRecordQueryResult.ts | 5 + .../formatMultiObjectRecordSearchResults.ts | 2 +- .../record-field/contexts/FieldContext.ts | 2 + .../components/RelationFromManyFieldInput.tsx | 1 + .../input/components/RelationPicker.tsx | 4 +- .../RelationPickerInitialValueEffect.tsx} | 2 +- .../components/RecordInlineCell.tsx | 12 +- .../components/RecordInlineCellContext.tsx | 4 + .../record-inline-cell/hooks/useInlineCell.ts | 5 + ...EditModeMultiRecordsSearchFilterEffect.tsx | 51 -------- .../components/MultipleRecordPicker.tsx | 109 ++++++++++-------- .../SingleRecordPicker.stories.tsx | 2 - .../RecordDetailRelationSection.tsx | 1 + .../decorators/RecordPickerDecorator.tsx | 10 -- 28 files changed, 207 insertions(+), 149 deletions(-) rename packages/twenty-front/src/modules/{object-record/record-picker-morph-legacy => activities/inline-cell}/components/ActivityTargetInlineCellEditModeMultiRecordsEffect.tsx (97%) create mode 100644 packages/twenty-front/src/modules/activities/inline-cell/components/ActivityTargetInlineCellEditModeMultiRecordsSearchFilterEffect.tsx rename packages/twenty-front/src/modules/{object-record/record-picker-morph-legacy => activities/inline-cell}/components/MultipleObjectRecordOnClickOutsideEffect.tsx (100%) rename packages/twenty-front/src/modules/{object-record/record-picker-morph-legacy => activities/inline-cell}/hooks/__tests__/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray.test.tsx (96%) rename packages/twenty-front/src/modules/{object-record/record-picker-morph-legacy => activities/inline-cell}/hooks/__tests__/useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap.test.tsx (96%) rename packages/twenty-front/src/modules/{object-record/record-picker-morph-legacy => activities/inline-cell}/hooks/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray.ts (87%) rename packages/twenty-front/src/modules/{object-record/record-picker-morph-legacy => activities/inline-cell}/hooks/useMultiObjectSearch.ts (93%) rename packages/twenty-front/src/modules/{object-record/record-picker-morph-legacy => activities/inline-cell}/hooks/useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap.ts (89%) rename packages/twenty-front/src/modules/{object-record/record-picker-morph-legacy => activities/inline-cell}/hooks/useMultiObjectSearchSelectedItemsQuery.ts (91%) create mode 100644 packages/twenty-front/src/modules/activities/inline-cell/hooks/useOpenActivityTargetInlineCellEditMode.ts create mode 100644 packages/twenty-front/src/modules/object-record/multiple-objects/types/MultiObjectRecordQueryResult.ts rename packages/twenty-front/src/modules/object-record/{record-picker-morph-legacy => multiple-objects}/utils/formatMultiObjectRecordSearchResults.ts (73%) rename packages/twenty-front/src/modules/object-record/{record-picker-morph-legacy/components/SearchPickerInitialValueEffect.tsx => record-field/meta-types/input/components/RelationPickerInitialValueEffect.tsx} (94%) delete mode 100644 packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/components/ActivityTargetInlineCellEditModeMultiRecordsSearchFilterEffect.tsx delete mode 100644 packages/twenty-front/src/testing/decorators/RecordPickerDecorator.tsx diff --git a/packages/twenty-front/src/modules/activities/inline-cell/components/ActivityTargetInlineCellEditMode.tsx b/packages/twenty-front/src/modules/activities/inline-cell/components/ActivityTargetInlineCellEditMode.tsx index 29ca7d900..c6daa824a 100644 --- a/packages/twenty-front/src/modules/activities/inline-cell/components/ActivityTargetInlineCellEditMode.tsx +++ b/packages/twenty-front/src/modules/activities/inline-cell/components/ActivityTargetInlineCellEditMode.tsx @@ -3,7 +3,10 @@ import { useRecoilCallback, useRecoilState, useSetRecoilState } from 'recoil'; import { v4 } from 'uuid'; import { useUpsertActivity } from '@/activities/hooks/useUpsertActivity'; +import { ActivityTargetInlineCellEditModeMultiRecordsEffect } from '@/activities/inline-cell/components/ActivityTargetInlineCellEditModeMultiRecordsEffect'; +import { ActivityTargetInlineCellEditModeMultiRecordsSearchFilterEffect } from '@/activities/inline-cell/components/ActivityTargetInlineCellEditModeMultiRecordsSearchFilterEffect'; import { ActivityTargetObjectRecordEffect } from '@/activities/inline-cell/components/ActivityTargetObjectRecordEffect'; +import { MultipleObjectRecordOnClickOutsideEffect } from '@/activities/inline-cell/components/MultipleObjectRecordOnClickOutsideEffect'; import { isActivityInCreateModeState } from '@/activities/states/isActivityInCreateModeState'; import { ActivityTargetWithTargetRecord } from '@/activities/types/ActivityTargetObject'; import { Note } from '@/activities/types/Note'; @@ -24,12 +27,10 @@ import { objectRecordMultiSelectComponentFamilyState, } from '@/object-record/record-field/states/objectRecordMultiSelectComponentFamilyState'; import { useInlineCell } from '@/object-record/record-inline-cell/hooks/useInlineCell'; -import { ActivityTargetInlineCellEditModeMultiRecordsEffect } from '@/object-record/record-picker-morph-legacy/components/ActivityTargetInlineCellEditModeMultiRecordsEffect'; -import { ActivityTargetInlineCellEditModeMultiRecordsSearchFilterEffect } from '@/object-record/record-picker-morph-legacy/components/ActivityTargetInlineCellEditModeMultiRecordsSearchFilterEffect'; import { MultipleRecordPicker } from '@/object-record/record-picker/components/MultipleRecordPicker'; -import { RecordPickerComponentInstanceContext } from '@/object-record/record-picker/states/contexts/RecordPickerComponentInstanceContext'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; import { prefillRecord } from '@/object-record/utils/prefillRecord'; +import { useRef } from 'react'; type ActivityTargetInlineCellEditModeProps = { activity: Task | Note; @@ -257,20 +258,31 @@ export const ActivityTargetInlineCellEditMode = ({ ], ); + const containerRef = useRef(null); + return ( <> - - + + + +
+ - - - - +
); }; diff --git a/packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/components/ActivityTargetInlineCellEditModeMultiRecordsEffect.tsx b/packages/twenty-front/src/modules/activities/inline-cell/components/ActivityTargetInlineCellEditModeMultiRecordsEffect.tsx similarity index 97% rename from packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/components/ActivityTargetInlineCellEditModeMultiRecordsEffect.tsx rename to packages/twenty-front/src/modules/activities/inline-cell/components/ActivityTargetInlineCellEditModeMultiRecordsEffect.tsx index 79ea56f9f..be0cf8767 100644 --- a/packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/components/ActivityTargetInlineCellEditModeMultiRecordsEffect.tsx +++ b/packages/twenty-front/src/modules/activities/inline-cell/components/ActivityTargetInlineCellEditModeMultiRecordsEffect.tsx @@ -17,12 +17,15 @@ import { isDeeplyEqual } from '~/utils/isDeeplyEqual'; // Todo: this effect should be deprecated to use sync hooks export const ActivityTargetInlineCellEditModeMultiRecordsEffect = ({ + recordPickerInstanceId, selectedObjectRecordIds, }: { + recordPickerInstanceId: string; selectedObjectRecordIds: SelectedObjectRecordId[]; }) => { const instanceId = useAvailableComponentInstanceIdOrThrow( RecordPickerComponentInstanceContext, + recordPickerInstanceId, ); const { objectRecordsIdsMultiSelectState, diff --git a/packages/twenty-front/src/modules/activities/inline-cell/components/ActivityTargetInlineCellEditModeMultiRecordsSearchFilterEffect.tsx b/packages/twenty-front/src/modules/activities/inline-cell/components/ActivityTargetInlineCellEditModeMultiRecordsSearchFilterEffect.tsx new file mode 100644 index 000000000..c06f7e4f5 --- /dev/null +++ b/packages/twenty-front/src/modules/activities/inline-cell/components/ActivityTargetInlineCellEditModeMultiRecordsSearchFilterEffect.tsx @@ -0,0 +1,51 @@ +import { useEffect } from 'react'; +import { useSetRecoilState } from 'recoil'; + +import { useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray } from '@/activities/inline-cell/hooks/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray'; +import { useMultiObjectSearch } from '@/activities/inline-cell/hooks/useMultiObjectSearch'; +import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { objectRecordMultiSelectMatchesFilterRecordsIdsComponentState } from '@/object-record/record-field/states/objectRecordMultiSelectMatchesFilterRecordsIdsComponentState'; +import { RecordPickerComponentInstanceContext } from '@/object-record/record-picker/states/contexts/RecordPickerComponentInstanceContext'; +import { recordPickerSearchFilterComponentState } from '@/object-record/record-picker/states/recordPickerSearchFilterComponentState'; +import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow'; +import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; + +// Todo: this effect should be deprecated to use sync hooks +export const ActivityTargetInlineCellEditModeMultiRecordsSearchFilterEffect = ({ + recordPickerInstanceId, +}: { + recordPickerInstanceId: string; +}) => { + const instanceId = useAvailableComponentInstanceIdOrThrow( + RecordPickerComponentInstanceContext, + recordPickerInstanceId, + ); + const setRecordMultiSelectMatchesFilterRecords = useSetRecoilState( + objectRecordMultiSelectMatchesFilterRecordsIdsComponentState({ + scopeId: instanceId, + }), + ); + + const recordPickerSearchFilter = useRecoilComponentValueV2( + recordPickerSearchFilterComponentState, + instanceId, + ); + + const { matchesSearchFilterObjectRecordsQueryResult } = useMultiObjectSearch({ + excludedObjects: [CoreObjectNameSingular.Task, CoreObjectNameSingular.Note], + searchFilterValue: recordPickerSearchFilter, + limit: 10, + }); + + const { objectRecordForSelectArray } = + useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray({ + multiObjectRecordsQueryResult: + matchesSearchFilterObjectRecordsQueryResult, + }); + + useEffect(() => { + setRecordMultiSelectMatchesFilterRecords(objectRecordForSelectArray); + }, [setRecordMultiSelectMatchesFilterRecords, objectRecordForSelectArray]); + + return <>; +}; diff --git a/packages/twenty-front/src/modules/activities/inline-cell/components/ActivityTargetsInlineCell.tsx b/packages/twenty-front/src/modules/activities/inline-cell/components/ActivityTargetsInlineCell.tsx index 9f56a3c0c..09fdaf62b 100644 --- a/packages/twenty-front/src/modules/activities/inline-cell/components/ActivityTargetsInlineCell.tsx +++ b/packages/twenty-front/src/modules/activities/inline-cell/components/ActivityTargetsInlineCell.tsx @@ -5,6 +5,7 @@ import { IconArrowUpRight, IconPencil } from 'twenty-ui'; import { ActivityTargetChips } from '@/activities/components/ActivityTargetChips'; import { useActivityTargetObjectRecords } from '@/activities/hooks/useActivityTargetObjectRecords'; import { ActivityTargetInlineCellEditMode } from '@/activities/inline-cell/components/ActivityTargetInlineCellEditMode'; +import { useOpenActivityTargetInlineCellEditMode } from '@/activities/inline-cell/hooks/useOpenActivityTargetInlineCellEditMode'; import { ActivityEditorHotkeyScope } from '@/activities/types/ActivityEditorHotkeyScope'; import { Note } from '@/activities/types/Note'; import { Task } from '@/activities/types/Task'; @@ -59,6 +60,9 @@ export const ActivityTargetsInlineCell = ({ overridenIsFieldEmpty: activityTargetObjectRecords.length === 0, }); + const { openActivityTargetInlineCellEditMode } = + useOpenActivityTargetInlineCellEditMode(); + return ( @@ -90,6 +94,11 @@ export const ActivityTargetsInlineCell = ({ maxWidth={maxWidth} /> ), + onOpenEditMode: () => { + openActivityTargetInlineCellEditMode({ + recordPickerInstanceId: `record-picker-${activity.id}`, + }); + }, }} > diff --git a/packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/components/MultipleObjectRecordOnClickOutsideEffect.tsx b/packages/twenty-front/src/modules/activities/inline-cell/components/MultipleObjectRecordOnClickOutsideEffect.tsx similarity index 100% rename from packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/components/MultipleObjectRecordOnClickOutsideEffect.tsx rename to packages/twenty-front/src/modules/activities/inline-cell/components/MultipleObjectRecordOnClickOutsideEffect.tsx diff --git a/packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/hooks/__tests__/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray.test.tsx b/packages/twenty-front/src/modules/activities/inline-cell/hooks/__tests__/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray.test.tsx similarity index 96% rename from packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/hooks/__tests__/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray.test.tsx rename to packages/twenty-front/src/modules/activities/inline-cell/hooks/__tests__/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray.test.tsx index 2e888ffa9..8c187003f 100644 --- a/packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/hooks/__tests__/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray.test.tsx +++ b/packages/twenty-front/src/modules/activities/inline-cell/hooks/__tests__/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray.test.tsx @@ -1,8 +1,8 @@ import { act, renderHook } from '@testing-library/react'; import { RecoilRoot, useSetRecoilState } from 'recoil'; +import { useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray } from '@/activities/inline-cell/hooks/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; -import { useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray } from '@/object-record/record-picker-morph-legacy/hooks/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray'; import { RecordPickerComponentInstanceContext } from '@/object-record/record-picker/states/contexts/RecordPickerComponentInstanceContext'; import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems'; diff --git a/packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/hooks/__tests__/useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap.test.tsx b/packages/twenty-front/src/modules/activities/inline-cell/hooks/__tests__/useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap.test.tsx similarity index 96% rename from packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/hooks/__tests__/useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap.test.tsx rename to packages/twenty-front/src/modules/activities/inline-cell/hooks/__tests__/useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap.test.tsx index cdde0ae38..ea9a546f1 100644 --- a/packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/hooks/__tests__/useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap.test.tsx +++ b/packages/twenty-front/src/modules/activities/inline-cell/hooks/__tests__/useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap.test.tsx @@ -1,8 +1,8 @@ import { act, renderHook } from '@testing-library/react'; import { RecoilRoot, useSetRecoilState } from 'recoil'; +import { useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap } from '@/activities/inline-cell/hooks/useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; -import { useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap } from '@/object-record/record-picker-morph-legacy/hooks/useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap'; import { RecordPickerComponentInstanceContext } from '@/object-record/record-picker/states/contexts/RecordPickerComponentInstanceContext'; import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems'; diff --git a/packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/hooks/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray.ts b/packages/twenty-front/src/modules/activities/inline-cell/hooks/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray.ts similarity index 87% rename from packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/hooks/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray.ts rename to packages/twenty-front/src/modules/activities/inline-cell/hooks/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray.ts index 124a12423..42211d086 100644 --- a/packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/hooks/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray.ts +++ b/packages/twenty-front/src/modules/activities/inline-cell/hooks/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray.ts @@ -3,15 +3,10 @@ import { useRecoilValue } from 'recoil'; import { objectMetadataItemsByNamePluralMapSelector } from '@/object-metadata/states/objectMetadataItemsByNamePluralMapSelector'; import { getObjectRecordIdentifier } from '@/object-metadata/utils/getObjectRecordIdentifier'; -import { RecordGqlConnection } from '@/object-record/graphql/types/RecordGqlConnection'; -import { formatMultiObjectRecordSearchResults } from '@/object-record/record-picker-morph-legacy/utils/formatMultiObjectRecordSearchResults'; +import { MultiObjectRecordQueryResult } from '@/object-record/multiple-objects/types/MultiObjectRecordQueryResult'; +import { formatMultiObjectRecordSearchResults } from '@/object-record/multiple-objects/utils/formatMultiObjectRecordSearchResults'; import { ObjectRecordForSelect } from '@/object-record/types/ObjectRecordForSelect'; import { isDefined } from 'twenty-shared'; - -export type MultiObjectRecordQueryResult = { - [namePlural: string]: RecordGqlConnection; -}; - export const useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray = ({ multiObjectRecordsQueryResult, diff --git a/packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/hooks/useMultiObjectSearch.ts b/packages/twenty-front/src/modules/activities/inline-cell/hooks/useMultiObjectSearch.ts similarity index 93% rename from packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/hooks/useMultiObjectSearch.ts rename to packages/twenty-front/src/modules/activities/inline-cell/hooks/useMultiObjectSearch.ts index db34a95f7..f341ea052 100644 --- a/packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/hooks/useMultiObjectSearch.ts +++ b/packages/twenty-front/src/modules/activities/inline-cell/hooks/useMultiObjectSearch.ts @@ -6,7 +6,7 @@ import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadat import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { EMPTY_QUERY } from '@/object-record/constants/EmptyQuery'; import { useGenerateCombinedSearchRecordsQuery } from '@/object-record/multiple-objects/hooks/useGenerateCombinedSearchRecordsQuery'; -import { MultiObjectRecordQueryResult } from '@/object-record/record-picker-morph-legacy/hooks/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray'; +import { MultiObjectRecordQueryResult } from '@/object-record/multiple-objects/types/MultiObjectRecordQueryResult'; import { isObjectMetadataItemSearchableInCombinedRequest } from '@/object-record/utils/isObjectMetadataItemSearchableInCombinedRequest'; import { isDefined } from 'twenty-shared'; diff --git a/packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/hooks/useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap.ts b/packages/twenty-front/src/modules/activities/inline-cell/hooks/useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap.ts similarity index 89% rename from packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/hooks/useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap.ts rename to packages/twenty-front/src/modules/activities/inline-cell/hooks/useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap.ts index 429445209..619c9e7aa 100644 --- a/packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/hooks/useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap.ts +++ b/packages/twenty-front/src/modules/activities/inline-cell/hooks/useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap.ts @@ -3,8 +3,8 @@ import { useRecoilValue } from 'recoil'; import { objectMetadataItemsByNamePluralMapSelector } from '@/object-metadata/states/objectMetadataItemsByNamePluralMapSelector'; import { getObjectRecordIdentifier } from '@/object-metadata/utils/getObjectRecordIdentifier'; -import { MultiObjectRecordQueryResult } from '@/object-record/record-picker-morph-legacy/hooks/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray'; -import { formatMultiObjectRecordSearchResults } from '@/object-record/record-picker-morph-legacy/utils/formatMultiObjectRecordSearchResults'; +import { MultiObjectRecordQueryResult } from '@/object-record/multiple-objects/types/MultiObjectRecordQueryResult'; +import { formatMultiObjectRecordSearchResults } from '@/object-record/multiple-objects/utils/formatMultiObjectRecordSearchResults'; import { ObjectRecordForSelect } from '@/object-record/types/ObjectRecordForSelect'; import { isDefined } from 'twenty-shared'; diff --git a/packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/hooks/useMultiObjectSearchSelectedItemsQuery.ts b/packages/twenty-front/src/modules/activities/inline-cell/hooks/useMultiObjectSearchSelectedItemsQuery.ts similarity index 91% rename from packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/hooks/useMultiObjectSearchSelectedItemsQuery.ts rename to packages/twenty-front/src/modules/activities/inline-cell/hooks/useMultiObjectSearchSelectedItemsQuery.ts index 29b597207..4e9869cfa 100644 --- a/packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/hooks/useMultiObjectSearchSelectedItemsQuery.ts +++ b/packages/twenty-front/src/modules/activities/inline-cell/hooks/useMultiObjectSearchSelectedItemsQuery.ts @@ -2,14 +2,12 @@ import { gql, useQuery } from '@apollo/client'; import { isNonEmptyArray } from '@sniptt/guards'; import { useRecoilValue } from 'recoil'; +import { useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray } from '@/activities/inline-cell/hooks/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray'; import { useLimitPerMetadataItem } from '@/object-metadata/hooks/useLimitPerMetadataItem'; import { useOrderByFieldPerMetadataItem } from '@/object-metadata/hooks/useOrderByFieldPerMetadataItem'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; import { useGenerateCombinedFindManyRecordsQuery } from '@/object-record/multiple-objects/hooks/useGenerateCombinedFindManyRecordsQuery'; -import { - MultiObjectRecordQueryResult, - useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray, -} from '@/object-record/record-picker-morph-legacy/hooks/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray'; +import { MultiObjectRecordQueryResult } from '@/object-record/multiple-objects/types/MultiObjectRecordQueryResult'; import { SelectedObjectRecordId } from '@/object-record/types/SelectedObjectRecordId'; import { capitalize, isDefined } from 'twenty-shared'; diff --git a/packages/twenty-front/src/modules/activities/inline-cell/hooks/useOpenActivityTargetInlineCellEditMode.ts b/packages/twenty-front/src/modules/activities/inline-cell/hooks/useOpenActivityTargetInlineCellEditMode.ts new file mode 100644 index 000000000..0f2fc711a --- /dev/null +++ b/packages/twenty-front/src/modules/activities/inline-cell/hooks/useOpenActivityTargetInlineCellEditMode.ts @@ -0,0 +1,14 @@ +type OpenActivityTargetInlineCellEditModeProps = { + recordPickerInstanceId: string; +}; + +export const useOpenActivityTargetInlineCellEditMode = () => { + const openActivityTargetInlineCellEditMode = ({ + recordPickerInstanceId, + }: OpenActivityTargetInlineCellEditModeProps) => { + // eslint-disable-next-line no-console + console.log('openActivityTargetInlineCellEditMode', recordPickerInstanceId); + }; + + return { openActivityTargetInlineCellEditMode }; +}; diff --git a/packages/twenty-front/src/modules/object-record/multiple-objects/hooks/useCombinedFindManyRecords.ts b/packages/twenty-front/src/modules/object-record/multiple-objects/hooks/useCombinedFindManyRecords.ts index 7a517ab74..bd1bf73fa 100644 --- a/packages/twenty-front/src/modules/object-record/multiple-objects/hooks/useCombinedFindManyRecords.ts +++ b/packages/twenty-front/src/modules/object-record/multiple-objects/hooks/useCombinedFindManyRecords.ts @@ -5,7 +5,7 @@ import { EMPTY_QUERY } from '@/object-record/constants/EmptyQuery'; import { RecordGqlOperationSignature } from '@/object-record/graphql/types/RecordGqlOperationSignature'; import { useCombinedFindManyRecordsQueryVariables } from '@/object-record/multiple-objects/hooks/useCombinedFindManyRecordsQueryVariables'; import { useGenerateCombinedFindManyRecordsQuery } from '@/object-record/multiple-objects/hooks/useGenerateCombinedFindManyRecordsQuery'; -import { MultiObjectRecordQueryResult } from '@/object-record/record-picker-morph-legacy/hooks/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray'; +import { MultiObjectRecordQueryResult } from '@/object-record/multiple-objects/types/MultiObjectRecordQueryResult'; export const useCombinedFindManyRecords = ({ operationSignatures, diff --git a/packages/twenty-front/src/modules/object-record/multiple-objects/hooks/useCombinedGetTotalCount.ts b/packages/twenty-front/src/modules/object-record/multiple-objects/hooks/useCombinedGetTotalCount.ts index 3185986bc..882e826d9 100644 --- a/packages/twenty-front/src/modules/object-record/multiple-objects/hooks/useCombinedGetTotalCount.ts +++ b/packages/twenty-front/src/modules/object-record/multiple-objects/hooks/useCombinedGetTotalCount.ts @@ -4,7 +4,7 @@ import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { EMPTY_QUERY } from '@/object-record/constants/EmptyQuery'; import { RecordGqlOperationSignature } from '@/object-record/graphql/types/RecordGqlOperationSignature'; import { useGenerateCombinedFindManyRecordsQuery } from '@/object-record/multiple-objects/hooks/useGenerateCombinedFindManyRecordsQuery'; -import { MultiObjectRecordQueryResult } from '@/object-record/record-picker-morph-legacy/hooks/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray'; +import { MultiObjectRecordQueryResult } from '@/object-record/multiple-objects/types/MultiObjectRecordQueryResult'; export const useCombinedGetTotalCount = ({ objectMetadataItems, diff --git a/packages/twenty-front/src/modules/object-record/multiple-objects/types/MultiObjectRecordQueryResult.ts b/packages/twenty-front/src/modules/object-record/multiple-objects/types/MultiObjectRecordQueryResult.ts new file mode 100644 index 000000000..91243623c --- /dev/null +++ b/packages/twenty-front/src/modules/object-record/multiple-objects/types/MultiObjectRecordQueryResult.ts @@ -0,0 +1,5 @@ +import { RecordGqlConnection } from '@/object-record/graphql/types/RecordGqlConnection'; + +export type MultiObjectRecordQueryResult = { + [namePlural: string]: RecordGqlConnection; +}; diff --git a/packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/utils/formatMultiObjectRecordSearchResults.ts b/packages/twenty-front/src/modules/object-record/multiple-objects/utils/formatMultiObjectRecordSearchResults.ts similarity index 73% rename from packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/utils/formatMultiObjectRecordSearchResults.ts rename to packages/twenty-front/src/modules/object-record/multiple-objects/utils/formatMultiObjectRecordSearchResults.ts index 233f02c5b..2af506a1a 100644 --- a/packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/utils/formatMultiObjectRecordSearchResults.ts +++ b/packages/twenty-front/src/modules/object-record/multiple-objects/utils/formatMultiObjectRecordSearchResults.ts @@ -1,4 +1,4 @@ -import { MultiObjectRecordQueryResult } from '@/object-record/record-picker-morph-legacy/hooks/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray'; +import { MultiObjectRecordQueryResult } from '@/object-record/multiple-objects/types/MultiObjectRecordQueryResult'; export const formatMultiObjectRecordSearchResults = ( searchResults: MultiObjectRecordQueryResult | undefined | null, diff --git a/packages/twenty-front/src/modules/object-record/record-field/contexts/FieldContext.ts b/packages/twenty-front/src/modules/object-record/record-field/contexts/FieldContext.ts index 85aedd618..da3dd5796 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/contexts/FieldContext.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/contexts/FieldContext.ts @@ -33,6 +33,8 @@ export type GenericFieldContextType = { overridenIsFieldEmpty?: boolean; displayedMaxRows?: number; isDisplayModeFixHeight?: boolean; + onOpenEditMode?: () => void; + onCloseEditMode?: () => void; }; export const FieldContext = createContext( diff --git a/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/RelationFromManyFieldInput.tsx b/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/RelationFromManyFieldInput.tsx index e846e81a7..285c50bd2 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/RelationFromManyFieldInput.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/RelationFromManyFieldInput.tsx @@ -57,6 +57,7 @@ export const RelationFromManyFieldInput = ({ > - diff --git a/packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/components/SearchPickerInitialValueEffect.tsx b/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/RelationPickerInitialValueEffect.tsx similarity index 94% rename from packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/components/SearchPickerInitialValueEffect.tsx rename to packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/RelationPickerInitialValueEffect.tsx index 4aca4ca06..130ee18b8 100644 --- a/packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/components/SearchPickerInitialValueEffect.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/RelationPickerInitialValueEffect.tsx @@ -3,7 +3,7 @@ import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-sta import { useEffect } from 'react'; // Todo: this effect should be deprecated to use sync hooks -export const SearchPickerInitialValueEffect = ({ +export const RelationPickerInitialValueEffect = ({ initialValueForSearchFilter, recordPickerInstanceId, }: { diff --git a/packages/twenty-front/src/modules/object-record/record-inline-cell/components/RecordInlineCell.tsx b/packages/twenty-front/src/modules/object-record/record-inline-cell/components/RecordInlineCell.tsx index 192ce6910..53ae070c4 100644 --- a/packages/twenty-front/src/modules/object-record/record-inline-cell/components/RecordInlineCell.tsx +++ b/packages/twenty-front/src/modules/object-record/record-inline-cell/components/RecordInlineCell.tsx @@ -31,8 +31,14 @@ type RecordInlineCellProps = { }; export const RecordInlineCell = ({ loading }: RecordInlineCellProps) => { - const { fieldDefinition, recordId, isCentered, isDisplayModeFixHeight } = - useContext(FieldContext); + const { + fieldDefinition, + recordId, + isCentered, + isDisplayModeFixHeight, + onOpenEditMode, + onCloseEditMode, + } = useContext(FieldContext); const buttonIcon = useGetButtonIcon(); const isFieldInputOnly = useIsFieldInputOnly(); @@ -129,6 +135,8 @@ export const RecordInlineCell = ({ loading }: RecordInlineCellProps) => { isDisplayModeFixHeight: isDisplayModeFixHeight, editModeContentOnly: isFieldInputOnly, loading: loading, + onOpenEditMode, + onCloseEditMode, }; return ( diff --git a/packages/twenty-front/src/modules/object-record/record-inline-cell/components/RecordInlineCellContext.tsx b/packages/twenty-front/src/modules/object-record/record-inline-cell/components/RecordInlineCellContext.tsx index 9f227be32..e3f31cba8 100644 --- a/packages/twenty-front/src/modules/object-record/record-inline-cell/components/RecordInlineCellContext.tsx +++ b/packages/twenty-front/src/modules/object-record/record-inline-cell/components/RecordInlineCellContext.tsx @@ -17,6 +17,8 @@ export type RecordInlineCellContextProps = { disableHoverEffect?: boolean; loading?: boolean; isCentered?: boolean; + onOpenEditMode?: () => void; + onCloseEditMode?: () => void; }; const defaultRecordInlineCellContextProp: RecordInlineCellContextProps = { @@ -34,6 +36,8 @@ const defaultRecordInlineCellContextProp: RecordInlineCellContextProps = { disableHoverEffect: false, loading: false, isCentered: false, + onOpenEditMode: undefined, + onCloseEditMode: undefined, }; export const RecordInlineCellContext = diff --git a/packages/twenty-front/src/modules/object-record/record-inline-cell/hooks/useInlineCell.ts b/packages/twenty-front/src/modules/object-record/record-inline-cell/hooks/useInlineCell.ts index f01084d45..02deec84c 100644 --- a/packages/twenty-front/src/modules/object-record/record-inline-cell/hooks/useInlineCell.ts +++ b/packages/twenty-front/src/modules/object-record/record-inline-cell/hooks/useInlineCell.ts @@ -7,6 +7,7 @@ import { HotkeyScope } from '@/ui/utilities/hotkey/types/HotkeyScope'; import { isDefined } from 'twenty-shared'; import { useInitDraftValueV2 } from '@/object-record/record-field/hooks/useInitDraftValueV2'; +import { useRecordInlineCellContext } from '@/object-record/record-inline-cell/components/RecordInlineCellContext'; import { getDropdownFocusIdForRecordField } from '@/object-record/utils/getDropdownFocusIdForRecordField'; import { useGoBackToPreviousDropdownFocusId } from '@/ui/layout/dropdown/hooks/useGoBackToPreviousDropdownFocusId'; import { useSetActiveDropdownFocusIdAndMemorizePrevious } from '@/ui/layout/dropdown/hooks/useSetFocusedDropdownIdAndMemorizePrevious'; @@ -24,6 +25,8 @@ export const useInlineCell = () => { isInlineCellInEditModeScopedState(recoilScopeId), ); + const { onOpenEditMode, onCloseEditMode } = useRecordInlineCellContext(); + const { setActiveDropdownFocusIdAndMemorizePrevious } = useSetActiveDropdownFocusIdAndMemorizePrevious(); const { goBackToPreviousDropdownFocusId } = @@ -37,6 +40,7 @@ export const useInlineCell = () => { const initFieldInputDraftValue = useInitDraftValueV2(); const closeInlineCell = () => { + onCloseEditMode?.(); setIsInlineCellInEditMode(false); goBackToPreviousHotkeyScope(); @@ -45,6 +49,7 @@ export const useInlineCell = () => { }; const openInlineCell = (customEditHotkeyScopeForField?: HotkeyScope) => { + onOpenEditMode?.(); setIsInlineCellInEditMode(true); initFieldInputDraftValue({ recordId, fieldDefinition }); diff --git a/packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/components/ActivityTargetInlineCellEditModeMultiRecordsSearchFilterEffect.tsx b/packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/components/ActivityTargetInlineCellEditModeMultiRecordsSearchFilterEffect.tsx deleted file mode 100644 index 04f28547b..000000000 --- a/packages/twenty-front/src/modules/object-record/record-picker-morph-legacy/components/ActivityTargetInlineCellEditModeMultiRecordsSearchFilterEffect.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import { useEffect } from 'react'; -import { useSetRecoilState } from 'recoil'; - -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; -import { objectRecordMultiSelectMatchesFilterRecordsIdsComponentState } from '@/object-record/record-field/states/objectRecordMultiSelectMatchesFilterRecordsIdsComponentState'; -import { useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray } from '@/object-record/record-picker-morph-legacy/hooks/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray'; -import { useMultiObjectSearch } from '@/object-record/record-picker-morph-legacy/hooks/useMultiObjectSearch'; -import { RecordPickerComponentInstanceContext } from '@/object-record/record-picker/states/contexts/RecordPickerComponentInstanceContext'; -import { recordPickerSearchFilterComponentState } from '@/object-record/record-picker/states/recordPickerSearchFilterComponentState'; -import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow'; -import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; - -// Todo: this effect should be deprecated to use sync hooks -export const ActivityTargetInlineCellEditModeMultiRecordsSearchFilterEffect = - () => { - const instanceId = useAvailableComponentInstanceIdOrThrow( - RecordPickerComponentInstanceContext, - ); - const setRecordMultiSelectMatchesFilterRecords = useSetRecoilState( - objectRecordMultiSelectMatchesFilterRecordsIdsComponentState({ - scopeId: instanceId, - }), - ); - - const recordPickerSearchFilter = useRecoilComponentValueV2( - recordPickerSearchFilterComponentState, - instanceId, - ); - - const { matchesSearchFilterObjectRecordsQueryResult } = - useMultiObjectSearch({ - excludedObjects: [ - CoreObjectNameSingular.Task, - CoreObjectNameSingular.Note, - ], - searchFilterValue: recordPickerSearchFilter, - limit: 10, - }); - - const { objectRecordForSelectArray } = - useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray({ - multiObjectRecordsQueryResult: - matchesSearchFilterObjectRecordsQueryResult, - }); - - useEffect(() => { - setRecordMultiSelectMatchesFilterRecords(objectRecordForSelectArray); - }, [setRecordMultiSelectMatchesFilterRecords, objectRecordForSelectArray]); - - return <>; - }; diff --git a/packages/twenty-front/src/modules/object-record/record-picker/components/MultipleRecordPicker.tsx b/packages/twenty-front/src/modules/object-record/record-picker/components/MultipleRecordPicker.tsx index c4b0a212a..0cac2d6dc 100644 --- a/packages/twenty-front/src/modules/object-record/record-picker/components/MultipleRecordPicker.tsx +++ b/packages/twenty-front/src/modules/object-record/record-picker/components/MultipleRecordPicker.tsx @@ -33,22 +33,27 @@ export const StyledSelectableItem = styled(SelectableItem)` width: 100%; `; +type MultipleRecordPickerProps = { + onChange?: (changedRecordForSelectId: string) => void; + onSubmit?: () => void; + onCreate?: ((searchInput?: string) => void) | (() => void); + dropdownPlacement?: Placement | null; + componentInstanceId: string; +}; + export const MultipleRecordPicker = ({ onChange, onSubmit, onCreate, dropdownPlacement, -}: { - onChange?: (changedRecordForSelectId: string) => void; - onSubmit?: () => void; - onCreate?: ((searchInput?: string) => void) | (() => void); - dropdownPlacement?: Placement | null; -}) => { + componentInstanceId, +}: MultipleRecordPickerProps) => { const containerRef = useRef(null); const { goBackToPreviousHotkeyScope } = usePreviousHotkeyScope(); const instanceId = useAvailableComponentInstanceIdOrThrow( RecordPickerComponentInstanceContext, + componentInstanceId, ); const { objectRecordsIdsMultiSelectState, recordMultiSelectIsLoadingState } = @@ -143,49 +148,57 @@ export const MultipleRecordPicker = ({ ); return ( - - {dropdownPlacement?.includes('end') && ( - <> - {isDefined(onCreate) && !hasObjectReadOnlyPermission && ( - - {createNewButton} - - )} - - {objectRecordsIdsMultiSelect?.length > 0 && results} - {recordMultiSelectIsLoading && !recordPickerSearchFilter && ( - <> - + + + {dropdownPlacement?.includes('end') && ( + <> + {isDefined(onCreate) && !hasObjectReadOnlyPermission && ( + + {createNewButton} + + )} + + {objectRecordsIdsMultiSelect?.length > 0 && results} + {recordMultiSelectIsLoading && !recordPickerSearchFilter && ( + <> + + + + )} + {objectRecordsIdsMultiSelect?.length > 0 && ( - - )} - {objectRecordsIdsMultiSelect?.length > 0 && } - - )} - - {(dropdownPlacement?.includes('start') || - isUndefinedOrNull(dropdownPlacement)) && ( - <> - - {recordMultiSelectIsLoading && !recordPickerSearchFilter && ( - <> - + )} + + )} + + {(dropdownPlacement?.includes('start') || + isUndefinedOrNull(dropdownPlacement)) && ( + <> + + {recordMultiSelectIsLoading && !recordPickerSearchFilter && ( + <> + + + + )} + {objectRecordsIdsMultiSelect?.length > 0 && results} + {objectRecordsIdsMultiSelect?.length > 0 && ( - - )} - {objectRecordsIdsMultiSelect?.length > 0 && results} - {objectRecordsIdsMultiSelect?.length > 0 && } - {isDefined(onCreate) && ( - - {createNewButton} - - )} - - )} - + )} + {isDefined(onCreate) && ( + + {createNewButton} + + )} + + )} + +
); }; diff --git a/packages/twenty-front/src/modules/object-record/record-picker/components/__stories__/SingleRecordPicker.stories.tsx b/packages/twenty-front/src/modules/object-record/record-picker/components/__stories__/SingleRecordPicker.stories.tsx index a3df8cf2c..4e75d91f9 100644 --- a/packages/twenty-front/src/modules/object-record/record-picker/components/__stories__/SingleRecordPicker.stories.tsx +++ b/packages/twenty-front/src/modules/object-record/record-picker/components/__stories__/SingleRecordPicker.stories.tsx @@ -5,7 +5,6 @@ import { ComponentDecorator, IconUserCircle } from 'twenty-ui'; import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { ComponentWithRecoilScopeDecorator } from '~/testing/decorators/ComponentWithRecoilScopeDecorator'; import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator'; -import { RecordPickerDecorator } from '~/testing/decorators/RecordPickerDecorator'; import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator'; import { graphqlMocks } from '~/testing/graphqlMocks'; import { getPeopleMock } from '~/testing/mock-data/people'; @@ -30,7 +29,6 @@ const meta: Meta = { decorators: [ ComponentDecorator, ComponentWithRecoilScopeDecorator, - RecordPickerDecorator, ObjectMetadataItemsDecorator, SnackBarDecorator, ], diff --git a/packages/twenty-front/src/modules/object-record/record-show/record-detail-section/components/RecordDetailRelationSection.tsx b/packages/twenty-front/src/modules/object-record/record-show/record-detail-section/components/RecordDetailRelationSection.tsx index ae2a8ce59..dc72ae32a 100644 --- a/packages/twenty-front/src/modules/object-record/record-show/record-detail-section/components/RecordDetailRelationSection.tsx +++ b/packages/twenty-front/src/modules/object-record/record-show/record-detail-section/components/RecordDetailRelationSection.tsx @@ -219,6 +219,7 @@ export const RecordDetailRelationSection = ({ <> { closeDropdown(); createNewRecordAndOpenRightDrawer?.(); diff --git a/packages/twenty-front/src/testing/decorators/RecordPickerDecorator.tsx b/packages/twenty-front/src/testing/decorators/RecordPickerDecorator.tsx deleted file mode 100644 index 338891f2c..000000000 --- a/packages/twenty-front/src/testing/decorators/RecordPickerDecorator.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { RecordPickerComponentInstanceContext } from '@/object-record/record-picker/states/contexts/RecordPickerComponentInstanceContext'; -import { Decorator } from '@storybook/react'; - -export const RecordPickerDecorator: Decorator = (Story) => ( - - - -);