diff --git a/package.json b/package.json index fb4070851..5bd43c8db 100644 --- a/package.json +++ b/package.json @@ -191,7 +191,6 @@ "tsup": "^8.2.4", "type-fest": "4.10.1", "typescript": "5.3.3", - "use-context-selector": "^2.0.0", "use-debounce": "^10.0.0", "uuid": "^9.0.0", "vite-tsconfig-paths": "^4.2.1", diff --git a/packages/twenty-front/src/modules/activities/calendar/components/CalendarEventDetailsEffect.tsx b/packages/twenty-front/src/modules/activities/calendar/components/CalendarEventDetailsEffect.tsx index 2f8b72a85..970cfc412 100644 --- a/packages/twenty-front/src/modules/activities/calendar/components/CalendarEventDetailsEffect.tsx +++ b/packages/twenty-front/src/modules/activities/calendar/components/CalendarEventDetailsEffect.tsx @@ -1,5 +1,4 @@ import { CalendarEvent } from '@/activities/calendar/types/CalendarEvent'; -import { useSetRecordValue } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; import { useUpsertRecordsInStore } from '@/object-record/record-store/hooks/useUpsertRecordsInStore'; import { useEffect } from 'react'; @@ -11,7 +10,6 @@ export const CalendarEventDetailsEffect = ({ record, }: CalendarEventDetailsEffectProps) => { const { upsertRecords } = useUpsertRecordsInStore(); - const setRecordValueInContextSelector = useSetRecordValue(); useEffect(() => { if (!record) { @@ -19,8 +17,7 @@ export const CalendarEventDetailsEffect = ({ } upsertRecords([record]); - setRecordValueInContextSelector(record.id, record); - }, [record, upsertRecords, setRecordValueInContextSelector]); + }, [record, upsertRecords]); return <>; }; diff --git a/packages/twenty-front/src/modules/activities/timeline-activities/rows/main-object/components/EventFieldDiff.tsx b/packages/twenty-front/src/modules/activities/timeline-activities/rows/main-object/components/EventFieldDiff.tsx index b77cd3a75..c6166b926 100644 --- a/packages/twenty-front/src/modules/activities/timeline-activities/rows/main-object/components/EventFieldDiff.tsx +++ b/packages/twenty-front/src/modules/activities/timeline-activities/rows/main-object/components/EventFieldDiff.tsx @@ -5,7 +5,6 @@ import { EventFieldDiffValue } from '@/activities/timeline-activities/rows/main- import { EventFieldDiffValueEffect } from '@/activities/timeline-activities/rows/main-object/components/EventFieldDiffValueEffect'; import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; -import { RecordFieldValueSelectorContextProvider } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; import { Trans } from '@lingui/react/macro'; type EventFieldDiffProps = { @@ -54,29 +53,27 @@ export const EventFieldDiff = ({ isObjectEmpty(diffRecord)); return ( - - - → - {isUpdatedToEmpty ? ( - - Empty - - ) : ( - <> - - - - )} - - + + → + {isUpdatedToEmpty ? ( + + Empty + + ) : ( + <> + + + + )} + ); }; diff --git a/packages/twenty-front/src/modules/activities/timeline-activities/rows/main-object/components/EventFieldDiffValueEffect.tsx b/packages/twenty-front/src/modules/activities/timeline-activities/rows/main-object/components/EventFieldDiffValueEffect.tsx index 5ce564b53..70ea7484c 100644 --- a/packages/twenty-front/src/modules/activities/timeline-activities/rows/main-object/components/EventFieldDiffValueEffect.tsx +++ b/packages/twenty-front/src/modules/activities/timeline-activities/rows/main-object/components/EventFieldDiffValueEffect.tsx @@ -3,7 +3,6 @@ import { useSetRecoilState } from 'recoil'; import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; -import { useSetRecordValue } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; import { isDefined } from 'twenty-shared/utils'; @@ -21,7 +20,6 @@ export const EventFieldDiffValueEffect = ({ const setEntity = useSetRecoilState( recordStoreFamilyState(diffArtificialRecordStoreId), ); - const setRecordValue = useSetRecordValue(); useEffect(() => { if (!isDefined(diffRecord)) return; @@ -33,14 +31,12 @@ export const EventFieldDiffValueEffect = ({ }; setEntity(forgedObjectRecord); - setRecordValue(forgedObjectRecord.id, forgedObjectRecord); }, [ diffRecord, diffArtificialRecordStoreId, fieldMetadataItem.name, mainObjectMetadataItem.nameSingular, setEntity, - setRecordValue, ]); return <>; diff --git a/packages/twenty-front/src/modules/command-menu/pages/calendar-event/components/CommandMenuCalendarEventPage.tsx b/packages/twenty-front/src/modules/command-menu/pages/calendar-event/components/CommandMenuCalendarEventPage.tsx index d1208e4bd..2e8e21f84 100644 --- a/packages/twenty-front/src/modules/command-menu/pages/calendar-event/components/CommandMenuCalendarEventPage.tsx +++ b/packages/twenty-front/src/modules/command-menu/pages/calendar-event/components/CommandMenuCalendarEventPage.tsx @@ -4,10 +4,6 @@ import { FIND_ONE_CALENDAR_EVENT_OPERATION_SIGNATURE } from '@/activities/calend import { CalendarEvent } from '@/activities/calendar/types/CalendarEvent'; import { viewableRecordIdComponentState } from '@/command-menu/pages/record-page/states/viewableRecordIdComponentState'; import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; -import { - RecordFieldValueSelectorContextProvider, - useSetRecordValue, -} from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; import { useUpsertRecordsInStore } from '@/object-record/record-store/hooks/useUpsertRecordsInStore'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; @@ -16,7 +12,6 @@ export const CommandMenuCalendarEventPage = () => { const viewableRecordId = useRecoilComponentValueV2( viewableRecordIdComponentState, ); - const setRecordValueInContextSelector = useSetRecordValue(); const { record: calendarEvent } = useFindOneRecord({ objectNameSingular: @@ -26,7 +21,6 @@ export const CommandMenuCalendarEventPage = () => { // TODO: this is not executed on sub-sequent runs, make sure that it is intended onCompleted: (record) => { upsertRecords([record]); - setRecordValueInContextSelector(record.id, record); }, }); @@ -35,9 +29,9 @@ export const CommandMenuCalendarEventPage = () => { } return ( - + <> - + ); }; diff --git a/packages/twenty-front/src/modules/command-menu/pages/record-page/components/CommandMenuRecordPage.tsx b/packages/twenty-front/src/modules/command-menu/pages/record-page/components/CommandMenuRecordPage.tsx index 55b7c2920..2409b0f45 100644 --- a/packages/twenty-front/src/modules/command-menu/pages/record-page/components/CommandMenuRecordPage.tsx +++ b/packages/twenty-front/src/modules/command-menu/pages/record-page/components/CommandMenuRecordPage.tsx @@ -10,7 +10,6 @@ import { RecordShowContainer } from '@/object-record/record-show/components/Reco import { RecordShowEffect } from '@/object-record/record-show/components/RecordShowEffect'; import { useRecordShowPage } from '@/object-record/record-show/hooks/useRecordShowPage'; import { RecordSortsComponentInstanceContext } from '@/object-record/record-sort/states/context/RecordSortsComponentInstanceContext'; -import { RecordFieldValueSelectorContextProvider } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; import { useIsMobile } from '@/ui/utilities/responsive/hooks/useIsMobile'; import { useComponentInstanceStateContext } from '@/ui/utilities/state/component-state/hooks/useComponentInstanceStateContext'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; @@ -72,24 +71,22 @@ export const CommandMenuRecordPage = () => { value={{ instanceId: commandMenuPageInstanceId }} > - - - - - - + + + + diff --git a/packages/twenty-front/src/modules/object-record/record-field/hooks/useClearField.ts b/packages/twenty-front/src/modules/object-record/record-field/hooks/useClearField.ts index 5af88f00d..4f08c4cad 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/hooks/useClearField.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/hooks/useClearField.ts @@ -2,7 +2,6 @@ import { useContext } from 'react'; import { useRecoilCallback } from 'recoil'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; -import { useSetRecordFieldValue } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { generateEmptyFieldValue } from '@/object-record/utils/generateEmptyFieldValue'; @@ -17,8 +16,6 @@ export const useClearField = () => { const [updateRecord] = useUpdateRecord(); - const setRecordFieldValue = useSetRecordFieldValue(); - const clearField = useRecoilCallback( ({ snapshot, set }) => () => { @@ -51,8 +48,6 @@ export const useClearField = () => { emptyFieldValue, ); - setRecordFieldValue(recordId, fieldName, emptyFieldValue); - updateRecord?.({ variables: { where: { id: recordId }, @@ -62,7 +57,7 @@ export const useClearField = () => { }, }); }, - [recordId, fieldDefinition, updateRecord, setRecordFieldValue], + [recordId, fieldDefinition, updateRecord], ); return clearField; diff --git a/packages/twenty-front/src/modules/object-record/record-field/hooks/useIsFieldEmpty.ts b/packages/twenty-front/src/modules/object-record/record-field/hooks/useIsFieldEmpty.ts index f4213ee3e..c6b5dcce7 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/hooks/useIsFieldEmpty.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/hooks/useIsFieldEmpty.ts @@ -1,10 +1,10 @@ import { useContext } from 'react'; import { isFieldValueEmpty } from '@/object-record/record-field/utils/isFieldValueEmpty'; -import { useRecordFieldValue } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; -import { FieldContext } from '../contexts/FieldContext'; +import { useRecordFieldValue } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; import { isDefined } from 'twenty-shared/utils'; +import { FieldContext } from '../contexts/FieldContext'; export const useIsFieldEmpty = () => { const { recordId, fieldDefinition, overridenIsFieldEmpty } = diff --git a/packages/twenty-front/src/modules/object-record/record-field/meta-types/display/components/__stories__/perf/RelationFromManyFieldDisplay.perf.stories.tsx b/packages/twenty-front/src/modules/object-record/record-field/meta-types/display/components/__stories__/perf/RelationFromManyFieldDisplay.perf.stories.tsx deleted file mode 100644 index f8a1455a1..000000000 --- a/packages/twenty-front/src/modules/object-record/record-field/meta-types/display/components/__stories__/perf/RelationFromManyFieldDisplay.perf.stories.tsx +++ /dev/null @@ -1,102 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; -import { useEffect } from 'react'; -import { useSetRecoilState } from 'recoil'; - -import { FieldContext } from '@/object-record/record-field/contexts/FieldContext'; -import { RelationFromManyFieldDisplay } from '@/object-record/record-field/meta-types/display/components/RelationFromManyFieldDisplay'; -import { FieldDefinition } from '@/object-record/record-field/types/FieldDefinition'; -import { FieldMetadata } from '@/object-record/record-field/types/FieldMetadata'; -import { - RecordFieldValueSelectorContextProvider, - useSetRecordFieldValue, -} from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; -import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; -import { ChipGeneratorsDecorator } from '~/testing/decorators/ChipGeneratorsDecorator'; -import { MemoryRouterDecorator } from '~/testing/decorators/MemoryRouterDecorator'; -import { getProfilingStory } from '~/testing/profiling/utils/getProfilingStory'; - -import { ComponentDecorator } from 'twenty-ui/testing'; -import { - fieldValue, - otherPersonMock, - relationFromManyFieldDisplayMock, -} from './relationFromManyFieldDisplayMock'; - -const RelationFieldValueSetterEffect = () => { - const setEntity = useSetRecoilState( - recordStoreFamilyState(relationFromManyFieldDisplayMock.recordId), - ); - - const setRelationEntity = useSetRecoilState( - recordStoreFamilyState(relationFromManyFieldDisplayMock.relationRecordId), - ); - - const setRecordFieldValue = useSetRecordFieldValue(); - - useEffect(() => { - setEntity(relationFromManyFieldDisplayMock.entityValue); - setRelationEntity(relationFromManyFieldDisplayMock.relationFieldValue); - - setRecordFieldValue( - relationFromManyFieldDisplayMock.entityValue.id, - 'company', - [relationFromManyFieldDisplayMock.entityValue], - ); - setRecordFieldValue(otherPersonMock.entityValue.id, 'company', [ - relationFromManyFieldDisplayMock.entityValue, - ]); - setRecordFieldValue( - relationFromManyFieldDisplayMock.relationFieldValue.id, - 'company', - relationFromManyFieldDisplayMock.relationFieldValue, - ); - }, [setEntity, setRelationEntity, setRecordFieldValue]); - - return null; -}; - -const meta: Meta = { - title: 'UI/Data/Field/Display/RelationFromManyFieldDisplay', - decorators: [ - MemoryRouterDecorator, - ChipGeneratorsDecorator, - (Story) => ( - - , - isReadOnly: false, - }} - > - - - - - ), - ComponentDecorator, - ], - component: RelationFromManyFieldDisplay, - argTypes: { value: { control: 'date' } }, - args: { fieldValue: fieldValue }, - parameters: { - chromatic: { disableSnapshot: true }, - }, -}; - -export default meta; - -type Story = StoryObj; - -export const Default: Story = {}; - -// TODO: optimize this component once we have morph many -export const Performance = getProfilingStory({ - componentName: 'RelationFromManyFieldDisplay', - averageThresholdInMs: 1, - numberOfRuns: 20, - numberOfTestsPerRun: 100, -}); diff --git a/packages/twenty-front/src/modules/object-record/record-field/meta-types/hooks/useChipFieldDisplay.ts b/packages/twenty-front/src/modules/object-record/record-field/meta-types/hooks/useChipFieldDisplay.ts index b001b5322..d6a8df62b 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/meta-types/hooks/useChipFieldDisplay.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/meta-types/hooks/useChipFieldDisplay.ts @@ -1,13 +1,13 @@ -import { isNonEmptyString } from '@sniptt/guards'; -import { useContext } from 'react'; - import { PreComputedChipGeneratorsContext } from '@/object-metadata/contexts/PreComputedChipGeneratorsContext'; import { isFieldFullName } from '@/object-record/record-field/types/guards/isFieldFullName'; import { isFieldNumber } from '@/object-record/record-field/types/guards/isFieldNumber'; import { isFieldText } from '@/object-record/record-field/types/guards/isFieldText'; -import { useRecordValue } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; +import { isNonEmptyString } from '@sniptt/guards'; +import { useContext } from 'react'; +import { useRecoilValue } from 'recoil'; import { isFieldActor } from '@/object-record/record-field/types/guards/isFieldActor'; +import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; import { isDefined } from 'twenty-shared/utils'; import { FieldContext } from '../../contexts/FieldContext'; @@ -38,7 +38,7 @@ export const useChipFieldDisplay = () => { ? fieldDefinition.metadata.objectMetadataNameSingular : undefined; - const recordValue = useRecordValue(recordId); + const recordValue = useRecoilValue(recordStoreFamilyState(recordId)); if (!isNonEmptyString(objectNameSingular)) { throw new Error('Object metadata name singular is not a non-empty string'); diff --git a/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexContainer.tsx b/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexContainer.tsx index 05aad68c6..e5dd2ce69 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexContainer.tsx +++ b/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexContainer.tsx @@ -11,7 +11,6 @@ import { recordIndexViewTypeState } from '@/object-record/record-index/states/re import { InformationBannerWrapper } from '@/information-banner/components/InformationBannerWrapper'; import { useRecordIndexContextOrThrow } from '@/object-record/record-index/contexts/RecordIndexContext'; -import { RecordFieldValueSelectorContextProvider } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; import { SpreadsheetImportProvider } from '@/spreadsheet-import/provider/components/SpreadsheetImportProvider'; import { RecordIndexFiltersToContextStoreEffect } from '@/object-record/record-index/components/RecordIndexFiltersToContextStoreEffect'; @@ -48,48 +47,46 @@ export const RecordIndexContainer = () => { <> - - - - } - /> - + + } + /> + + + + {recordIndexViewType === ViewType.Table && ( + <> + - - - {recordIndexViewType === ViewType.Table && ( - <> - - - - )} - {recordIndexViewType === ViewType.Kanban && ( - - - - - - )} - + + + )} + {recordIndexViewType === ViewType.Kanban && ( + + + + + + )} ); diff --git a/packages/twenty-front/src/modules/object-record/record-index/hooks/useLoadRecordIndexBoardColumn.ts b/packages/twenty-front/src/modules/object-record/record-index/hooks/useLoadRecordIndexBoardColumn.ts index ae1a89081..659e19ba5 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/hooks/useLoadRecordIndexBoardColumn.ts +++ b/packages/twenty-front/src/modules/object-record/record-index/hooks/useLoadRecordIndexBoardColumn.ts @@ -14,7 +14,7 @@ import { useRecordBoardRecordGqlFields } from '@/object-record/record-index/hook import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { currentRecordSortsComponentState } from '@/object-record/record-sort/states/currentRecordSortsComponentState'; -import { useSetRecordValue } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; + import { useUpsertRecordsInStore } from '@/object-record/record-store/hooks/useUpsertRecordsInStore'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { isDefined } from 'twenty-shared/utils'; @@ -32,7 +32,6 @@ export const useLoadRecordIndexBoardColumn = ({ recordBoardId, columnId, }: UseLoadRecordIndexBoardProps) => { - const setRecordValueInContextSelector = useSetRecordValue(); const { objectMetadataItem } = useObjectMetadataItem({ objectNameSingular, }); @@ -102,10 +101,7 @@ export const useLoadRecordIndexBoardColumn = ({ useEffect(() => { upsertRecordsInStore(records); - for (const record of records) { - setRecordValueInContextSelector(record.id, record); - } - }, [records, upsertRecordsInStore, setRecordValueInContextSelector]); + }, [records, upsertRecordsInStore]); return { records, diff --git a/packages/twenty-front/src/modules/object-record/record-show/components/RecordShowEffect.tsx b/packages/twenty-front/src/modules/object-record/record-show/components/RecordShowEffect.tsx index 291c375b4..036882db3 100644 --- a/packages/twenty-front/src/modules/object-record/record-show/components/RecordShowEffect.tsx +++ b/packages/twenty-front/src/modules/object-record/record-show/components/RecordShowEffect.tsx @@ -2,7 +2,6 @@ import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadata import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; import { buildFindOneRecordForShowPageOperationSignature } from '@/object-record/record-show/graphql/operations/factories/findOneRecordForShowPageOperationSignatureFactory'; -import { useSetRecordValue } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; import { useEffect } from 'react'; @@ -19,7 +18,6 @@ export const RecordShowEffect = ({ }: RecordShowEffectProps) => { const { objectMetadataItem } = useObjectMetadataItem({ objectNameSingular }); const { objectMetadataItems } = useObjectMetadataItems(); - const setRecordValueInContextSelector = useSetRecordValue(); const FIND_ONE_RECORD_FOR_SHOW_PAGE_OPERATION_SIGNATURE = buildFindOneRecordForShowPageOperationSignature({ @@ -44,10 +42,8 @@ export const RecordShowEffect = ({ if (JSON.stringify(previousRecordValue) !== JSON.stringify(newRecord)) { set(recordStoreFamilyState(recordId), newRecord); } - - setRecordValueInContextSelector(recordId, newRecord); }, - [recordId, setRecordValueInContextSelector], + [recordId], ); useEffect(() => { diff --git a/packages/twenty-front/src/modules/object-record/record-show/record-detail-section/components/RecordDetailRelationRecordsListItemEffect.tsx b/packages/twenty-front/src/modules/object-record/record-show/record-detail-section/components/RecordDetailRelationRecordsListItemEffect.tsx index 01451037b..35d01fda1 100644 --- a/packages/twenty-front/src/modules/object-record/record-show/record-detail-section/components/RecordDetailRelationRecordsListItemEffect.tsx +++ b/packages/twenty-front/src/modules/object-record/record-show/record-detail-section/components/RecordDetailRelationRecordsListItemEffect.tsx @@ -3,7 +3,7 @@ import { useContext, useEffect } from 'react'; import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; import { FieldContext } from '@/object-record/record-field/contexts/FieldContext'; import { FieldRelationMetadata } from '@/object-record/record-field/types/FieldMetadata'; -import { useSetRecordValue } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; + import { useUpsertRecordsInStore } from '@/object-record/record-store/hooks/useUpsertRecordsInStore'; import { isDefined } from 'twenty-shared/utils'; @@ -14,8 +14,6 @@ type RecordDetailRelationRecordsListItemEffectProps = { export const RecordDetailRelationRecordsListItemEffect = ({ relationRecordId, }: RecordDetailRelationRecordsListItemEffectProps) => { - const setRecordValueInContextSelector = useSetRecordValue(); - const { fieldDefinition } = useContext(FieldContext); const { relationObjectMetadataNameSingular } = @@ -31,9 +29,8 @@ export const RecordDetailRelationRecordsListItemEffect = ({ useEffect(() => { if (isDefined(record)) { upsertRecords([record]); - setRecordValueInContextSelector(record.id, record); } - }, [record, upsertRecords, setRecordValueInContextSelector]); + }, [record, upsertRecords]); return null; }; diff --git a/packages/twenty-front/src/modules/object-record/record-store/contexts/RecordFieldValueSelectorContext.tsx b/packages/twenty-front/src/modules/object-record/record-store/contexts/RecordFieldValueSelectorContext.tsx index 1a6bc529a..5fed46cb3 100644 --- a/packages/twenty-front/src/modules/object-record/record-store/contexts/RecordFieldValueSelectorContext.tsx +++ b/packages/twenty-front/src/modules/object-record/record-store/contexts/RecordFieldValueSelectorContext.tsx @@ -1,78 +1,16 @@ -import { Dispatch, SetStateAction, useState } from 'react'; -import { createContext, useContextSelector } from 'use-context-selector'; - -import { ObjectRecord } from '@/object-record/types/ObjectRecord'; - -export type RecordFieldValue = { - [recordId: string]: { - [fieldName: string]: any; - }; -}; - -export const RecordFieldValueSelectorContext = createContext< - [RecordFieldValue, Dispatch>] ->([{}, () => {}]); - -export const useSetRecordValue = () => { - const setTableValue = useContextSelector( - RecordFieldValueSelectorContext, - (value) => value[1], - ); - - return (recordId: string, newRecord: any) => { - setTableValue((currentTable) => ({ - ...currentTable, - [recordId]: newRecord, - })); - }; -}; - -export const useRecordValue = (recordId: string) => { - const tableValue = useContextSelector( - RecordFieldValueSelectorContext, - (value) => value[0]?.[recordId], - ); - - return tableValue as ObjectRecord | undefined; -}; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; +import { useRecoilValue } from 'recoil'; export const useRecordFieldValue = ( recordId: string, fieldName: string, ) => { - const recordFieldValue = useContextSelector( - RecordFieldValueSelectorContext, - (value) => value[0]?.[recordId]?.[fieldName], + const recordFieldValue = useRecoilValue( + recordStoreFamilySelector({ + recordId, + fieldName, + }), ); return recordFieldValue as T | undefined; }; - -export const useSetRecordFieldValue = () => { - const setTableValue = useContextSelector( - RecordFieldValueSelectorContext, - (value) => value[1], - ); - - return (recordId: string, fieldName: string, newValue: any) => { - setTableValue((currentTable) => ({ - ...currentTable, - [recordId]: { - ...currentTable[recordId], - [fieldName]: newValue, - }, - })); - }; -}; - -export const RecordFieldValueSelectorContextProvider = ({ - children, -}: { - children: any; -}) => ( - ({})} - > - {children} - -); diff --git a/packages/twenty-front/src/modules/object-record/record-table/components/__stories__/perf/RecordTableCell.perf.stories.tsx b/packages/twenty-front/src/modules/object-record/record-table/components/__stories__/perf/RecordTableCell.perf.stories.tsx index 5fd5335a7..ab0695314 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/components/__stories__/perf/RecordTableCell.perf.stories.tsx +++ b/packages/twenty-front/src/modules/object-record/record-table/components/__stories__/perf/RecordTableCell.perf.stories.tsx @@ -6,10 +6,6 @@ import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadat import { getBasePathToShowPage } from '@/object-metadata/utils/getBasePathToShowPage'; import { FieldContext } from '@/object-record/record-field/contexts/FieldContext'; -import { - RecordFieldValueSelectorContextProvider, - useSetRecordValue, -} from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; import { RecordTableComponentInstance } from '@/object-record/record-table/components/RecordTableComponentInstance'; import { RecordTableCellContext } from '@/object-record/record-table/contexts/RecordTableCellContext'; @@ -36,22 +32,14 @@ const RelationFieldValueSetterEffect = () => { recordStoreFamilyState(mockPerformance.relationRecordId), ); - const setRecordValue = useSetRecordValue(); - const [, setObjectMetadataItems] = useRecoilState(objectMetadataItemsState); useEffect(() => { setEntity(mockPerformance.entityValue); setRelationEntity(mockPerformance.relationFieldValue); - setRecordValue(mockPerformance.entityValue.id, mockPerformance.entityValue); - setRecordValue( - mockPerformance.relationFieldValue.id, - mockPerformance.relationFieldValue, - ); - setObjectMetadataItems(generatedMockObjectMetadataItems); - }, [setEntity, setRelationEntity, setRecordValue, setObjectMetadataItems]); + }, [setEntity, setRelationEntity, setObjectMetadataItems]); return null; }; @@ -63,95 +51,93 @@ const meta: Meta = { ChipGeneratorsDecorator, (Story) => { return ( - - '', + onIndexRecordsLoaded: () => {}, + objectNamePlural: 'companies', + objectNameSingular: 'company', + objectMetadataItem: mockPerformance.objectMetadataItem as any, + recordIndexId: 'recordIndexId', + }} + > + '', - onIndexRecordsLoaded: () => {}, - objectNamePlural: 'companies', - objectNameSingular: 'company', + recordTableId: 'recordTableId', + viewBarId: mockPerformance.recordId, objectMetadataItem: mockPerformance.objectMetadataItem as any, - recordIndexId: 'recordIndexId', + visibleTableColumns: mockPerformance.visibleTableColumns as any, + objectNameSingular: + mockPerformance.objectMetadataItem.nameSingular, }} > - {}} > - {}} + {}, + onMoveFocus: () => {}, + onCloseTableCell: () => {}, + onMoveHoverToCurrentCell: () => {}, + onActionMenuDropdownOpened: () => {}, + onCellMouseEnter: () => {}, + }} > - {}, - onMoveFocus: () => {}, - onCloseTableCell: () => {}, - onMoveHoverToCurrentCell: () => {}, - onActionMenuDropdownOpened: () => {}, - onCellMouseEnter: () => {}, + objectNameSingular: + mockPerformance.entityValue.__typename.toLocaleLowerCase(), + recordId: mockPerformance.recordId, + rowIndex: 0, + pathToShowPage: + getBasePathToShowPage({ + objectNameSingular: + mockPerformance.entityValue.__typename.toLocaleLowerCase(), + }) + mockPerformance.recordId, + isSelected: false, + inView: true, }} > - - - - - - - - - - - -
-
-
-
-
-
-
-
-
-
+ + + + + + + +
+ + + + + + + + ); }, ComponentDecorator, diff --git a/packages/twenty-front/src/modules/object-record/record-table/hooks/internal/useSetRecordTableData.ts b/packages/twenty-front/src/modules/object-record/record-table/hooks/internal/useSetRecordTableData.ts index 4c4d80991..bf969533d 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/hooks/internal/useSetRecordTableData.ts +++ b/packages/twenty-front/src/modules/object-record/record-table/hooks/internal/useSetRecordTableData.ts @@ -2,7 +2,7 @@ import { useRecoilCallback } from 'recoil'; import { recordIndexRecordIdsByGroupComponentFamilyState } from '@/object-record/record-index/states/recordIndexRecordIdsByGroupComponentFamilyState'; import { recordIndexAllRecordIdsComponentSelector } from '@/object-record/record-index/states/selectors/recordIndexAllRecordIdsComponentSelector'; -import { useSetRecordValue } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; + import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; import { useSetIsRecordTableFocusActive } from '@/object-record/record-table/record-table-cell/hooks/useSetIsRecordTableFocusActive'; import { hasUserSelectedAllRowsComponentState } from '@/object-record/record-table/record-table-row/states/hasUserSelectedAllRowsFamilyState'; @@ -27,8 +27,6 @@ export const useSetRecordTableData = ({ recordTableId, onEntityCountChange, }: useSetRecordTableDataProps) => { - const setRecordValueInContextSelector = useSetRecordValue(); - const recordIndexRecordIdsByGroupFamilyState = useRecoilComponentCallbackStateV2( recordIndexRecordIdsByGroupComponentFamilyState, @@ -82,7 +80,6 @@ export const useSetRecordTableData = ({ }; set(recordStoreFamilyState(record.id), newRecord); - setRecordValueInContextSelector(record.id, newRecord); } } @@ -130,7 +127,6 @@ export const useSetRecordTableData = ({ setRecordTableHoverPosition, onEntityCountChange, isRowSelectedFamilyState, - setRecordValueInContextSelector, ], ); }; diff --git a/packages/twenty-front/src/modules/object-record/record-title-cell/components/RecordTitleCellTextFieldDisplay.tsx b/packages/twenty-front/src/modules/object-record/record-title-cell/components/RecordTitleCellTextFieldDisplay.tsx index 31fd1db04..25a7a0d87 100644 --- a/packages/twenty-front/src/modules/object-record/record-title-cell/components/RecordTitleCellTextFieldDisplay.tsx +++ b/packages/twenty-front/src/modules/object-record/record-title-cell/components/RecordTitleCellTextFieldDisplay.tsx @@ -1,12 +1,13 @@ import { FieldContext } from '@/object-record/record-field/contexts/FieldContext'; import { INLINE_CELL_HOTKEY_SCOPE_MEMOIZE_KEY } from '@/object-record/record-inline-cell/constants/InlineCellHotkeyScopeMemoizeKey'; import { useInlineCell } from '@/object-record/record-inline-cell/hooks/useInlineCell'; -import { useRecordValue } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; +import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; import { TitleInputHotkeyScope } from '@/ui/input/types/TitleInputHotkeyScope'; import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope'; import { Theme, withTheme } from '@emotion/react'; import styled from '@emotion/styled'; import { useContext } from 'react'; +import { useRecoilValue } from 'recoil'; import { OverflowingTextWithTooltip } from 'twenty-ui/display'; const StyledDiv = styled.div` @@ -33,7 +34,9 @@ const StyledEmptyText = withTheme(styled.div<{ theme: Theme }>` export const RecordTitleCellSingleTextDisplayMode = () => { const { recordId, fieldDefinition } = useContext(FieldContext); - const recordValue = useRecordValue(recordId); + + const recordValue = useRecoilValue(recordStoreFamilyState(recordId)); + const isEmpty = recordValue?.[fieldDefinition.metadata.fieldName]?.trim() === ''; diff --git a/packages/twenty-front/src/modules/settings/data-model/fields/preview/components/SettingsDataModelFieldPreview.tsx b/packages/twenty-front/src/modules/settings/data-model/fields/preview/components/SettingsDataModelFieldPreview.tsx index 0f08e83ae..45d2b6056 100644 --- a/packages/twenty-front/src/modules/settings/data-model/fields/preview/components/SettingsDataModelFieldPreview.tsx +++ b/packages/twenty-front/src/modules/settings/data-model/fields/preview/components/SettingsDataModelFieldPreview.tsx @@ -112,10 +112,7 @@ export const SettingsDataModelFieldPreview = ({ }} > {isDefined(previewRecord) ? ( - + ) : ( { if ( @@ -37,23 +35,10 @@ export const SettingsDataModelSetFieldValueEffect = ({ !!upsertedPreviewRecord[fieldName] ) { setFieldValue(upsertedPreviewRecord[fieldName]); - setRecordFieldValue( - recordId, - fieldName, - upsertedPreviewRecord[fieldName], - ); } else { setFieldValue(value); - setRecordFieldValue(recordId, fieldName, value); } - }, [ - value, - setFieldValue, - setRecordFieldValue, - recordId, - fieldName, - upsertedPreviewRecord, - ]); + }, [value, setFieldValue, recordId, fieldName, upsertedPreviewRecord]); return null; }; diff --git a/packages/twenty-front/src/modules/settings/data-model/fields/preview/components/SettingsDataModelSetRecordEffect.tsx b/packages/twenty-front/src/modules/settings/data-model/fields/preview/components/SettingsDataModelSetRecordEffect.tsx index 331f06e19..800c00f45 100644 --- a/packages/twenty-front/src/modules/settings/data-model/fields/preview/components/SettingsDataModelSetRecordEffect.tsx +++ b/packages/twenty-front/src/modules/settings/data-model/fields/preview/components/SettingsDataModelSetRecordEffect.tsx @@ -1,4 +1,3 @@ -import { useSetRecordFieldValue } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; import { useUpsertRecordsInStore } from '@/object-record/record-store/hooks/useUpsertRecordsInStore'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; import { settingsPreviewRecordIdState } from '@/settings/data-model/fields/preview/states/settingsPreviewRecordIdState'; @@ -7,15 +6,12 @@ import { useSetRecoilState } from 'recoil'; type SettingsDataModelSetPreviewRecordEffectProps = { record: ObjectRecord; - fieldName: string; }; export const SettingsDataModelSetPreviewRecordEffect = ({ record, - fieldName, }: SettingsDataModelSetPreviewRecordEffectProps) => { const { upsertRecords: upsertRecordsInStore } = useUpsertRecordsInStore(); - const setRecordFieldValue = useSetRecordFieldValue(); const setSettingsPreviewRecordId = useSetRecoilState( settingsPreviewRecordIdState, @@ -23,15 +19,8 @@ export const SettingsDataModelSetPreviewRecordEffect = ({ useEffect(() => { upsertRecordsInStore([record]); - setRecordFieldValue(record.id, fieldName, record[fieldName]); setSettingsPreviewRecordId(record.id); - }, [ - record, - upsertRecordsInStore, - setRecordFieldValue, - fieldName, - setSettingsPreviewRecordId, - ]); + }, [record, upsertRecordsInStore, setSettingsPreviewRecordId]); return null; }; diff --git a/packages/twenty-front/src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx b/packages/twenty-front/src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx index 64f6eae00..69a83af48 100644 --- a/packages/twenty-front/src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx +++ b/packages/twenty-front/src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx @@ -1,16 +1,15 @@ import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { useUpdateOneObjectMetadataItem } from '@/object-metadata/hooks/useUpdateOneObjectMetadataItem'; -import { RecordFieldValueSelectorContextProvider } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; import { SettingsUpdateDataModelObjectAboutForm } from '@/settings/data-model/object-details/components/SettingsUpdateDataModelObjectAboutForm'; import { SettingsDataModelObjectSettingsFormCard } from '@/settings/data-model/objects/forms/components/SettingsDataModelObjectSettingsFormCard'; import { SettingsPath } from '@/types/SettingsPath'; import styled from '@emotion/styled'; import { useLingui } from '@lingui/react/macro'; -import { useNavigateSettings } from '~/hooks/useNavigateSettings'; -import { Button } from 'twenty-ui/input'; import { H2Title, IconArchive } from 'twenty-ui/display'; +import { Button } from 'twenty-ui/input'; import { Section } from 'twenty-ui/layout'; +import { useNavigateSettings } from '~/hooks/useNavigateSettings'; type ObjectSettingsProps = { objectMetadataItem: ObjectMetadataItem; @@ -39,43 +38,38 @@ export const ObjectSettings = ({ objectMetadataItem }: ObjectSettingsProps) => { }; return ( - - - + + + + + + +
- - - -
- - -
-
- -
- -
-
- - +
+
+ +
+ +
+
+
); }; diff --git a/packages/twenty-front/src/modules/sign-in-background-mock/components/SignInBackgroundMockPage.tsx b/packages/twenty-front/src/modules/sign-in-background-mock/components/SignInBackgroundMockPage.tsx index 10cbd744f..8fbdc623d 100644 --- a/packages/twenty-front/src/modules/sign-in-background-mock/components/SignInBackgroundMockPage.tsx +++ b/packages/twenty-front/src/modules/sign-in-background-mock/components/SignInBackgroundMockPage.tsx @@ -1,6 +1,5 @@ import styled from '@emotion/styled'; -import { RecordFieldValueSelectorContextProvider } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; import { SignInBackgroundMockContainer } from '@/sign-in-background-mock/components/SignInBackgroundMockContainer'; import { PageBody } from '@/ui/layout/page/components/PageBody'; import { PageContainer } from '@/ui/layout/page/components/PageContainer'; @@ -18,11 +17,9 @@ export const SignInBackgroundMockPage = () => { - - - - - + + + ); diff --git a/packages/twenty-front/src/pages/object-record/RecordShowPage.tsx b/packages/twenty-front/src/pages/object-record/RecordShowPage.tsx index 8f2402c1e..6f521617a 100644 --- a/packages/twenty-front/src/pages/object-record/RecordShowPage.tsx +++ b/packages/twenty-front/src/pages/object-record/RecordShowPage.tsx @@ -11,7 +11,6 @@ import { RecordShowContainer } from '@/object-record/record-show/components/Reco import { RecordShowEffect } from '@/object-record/record-show/components/RecordShowEffect'; import { useRecordShowPage } from '@/object-record/record-show/hooks/useRecordShowPage'; import { RecordSortsComponentInstanceContext } from '@/object-record/record-sort/states/context/RecordSortsComponentInstanceContext'; -import { RecordFieldValueSelectorContextProvider } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; import { PageHeaderToggleCommandMenuButton } from '@/ui/layout/page-header/components/PageHeaderToggleCommandMenuButton'; import { PageBody } from '@/ui/layout/page/components/PageBody'; import { PageContainer } from '@/ui/layout/page/components/PageContainer'; @@ -30,57 +29,55 @@ export const RecordShowPage = () => { ); return ( - - + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + ); }; diff --git a/packages/twenty-front/src/pages/settings/data-model/SettingsObjectFieldEdit.tsx b/packages/twenty-front/src/pages/settings/data-model/SettingsObjectFieldEdit.tsx index 28b9fbb9e..efd77b068 100644 --- a/packages/twenty-front/src/pages/settings/data-model/SettingsObjectFieldEdit.tsx +++ b/packages/twenty-front/src/pages/settings/data-model/SettingsObjectFieldEdit.tsx @@ -12,7 +12,6 @@ import { useGetRelationMetadata } from '@/object-metadata/hooks/useGetRelationMe import { useUpdateOneFieldMetadataItem } from '@/object-metadata/hooks/useUpdateOneFieldMetadataItem'; import { formatFieldMetadataItemInput } from '@/object-metadata/utils/formatFieldMetadataItemInput'; import { isLabelIdentifierField } from '@/object-metadata/utils/isLabelIdentifierField'; -import { RecordFieldValueSelectorContextProvider } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; import { SaveAndCancelButtons } from '@/settings/components/SaveAndCancelButtons/SaveAndCancelButtons'; import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer'; import { FIELD_NAME_MAXIMUM_LENGTH } from '@/settings/data-model/constants/FieldNameMaximumLength'; @@ -161,7 +160,7 @@ export const SettingsObjectFieldEdit = () => { }; return ( - + <> {/* eslint-disable-next-line react/jsx-props-no-spreading */} { - + ); }; diff --git a/packages/twenty-front/src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldConfigure.tsx b/packages/twenty-front/src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldConfigure.tsx index 1b49a9291..0fbcdabeb 100644 --- a/packages/twenty-front/src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldConfigure.tsx +++ b/packages/twenty-front/src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldConfigure.tsx @@ -3,7 +3,6 @@ import { useFieldMetadataItem } from '@/object-metadata/hooks/useFieldMetadataIt import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems'; import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; -import { RecordFieldValueSelectorContextProvider } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; import { SaveAndCancelButtons } from '@/settings/components/SaveAndCancelButtons/SaveAndCancelButtons'; import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer'; import { SettingsDataModelNewFieldBreadcrumbDropDown } from '@/settings/data-model/components/SettingsDataModelNewFieldBreadcrumbDropDown'; @@ -27,6 +26,8 @@ import pick from 'lodash.pick'; import { useEffect, useState } from 'react'; import { FormProvider, useForm } from 'react-hook-form'; import { useParams, useSearchParams } from 'react-router-dom'; +import { H2Title } from 'twenty-ui/display'; +import { Section } from 'twenty-ui/layout'; import { z } from 'zod'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { useNavigateApp } from '~/hooks/useNavigateApp'; @@ -35,8 +36,6 @@ import { DEFAULT_ICONS_BY_FIELD_TYPE } from '~/pages/settings/data-model/constan import { computeMetadataNameFromLabel } from '~/pages/settings/data-model/utils/compute-metadata-name-from-label.utils'; import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull'; import { getSettingsPath } from '~/utils/navigation/getSettingsPath'; -import { H2Title } from 'twenty-ui/display'; -import { Section } from 'twenty-ui/layout'; type SettingsDataModelNewFieldFormValues = z.infer< ReturnType @@ -200,87 +199,85 @@ export const SettingsObjectNewFieldConfigure = () => { if (!activeObjectMetadataItem) return null; return ( - - - + }, - ]} - actionButton={ - - navigate( - SettingsPath.ObjectNewFieldSelect, - { - objectNamePlural, - }, - { - fieldType, - }, - ) - } - onSave={formConfig.handleSubmit(handleSave)} + { children: }, + ]} + actionButton={ + + navigate( + SettingsPath.ObjectNewFieldSelect, + { + objectNamePlural, + }, + { + fieldType, + }, + ) + } + onSave={formConfig.handleSubmit(handleSave)} + /> + } + > + +
+ - } - > - -
- - -
-
- - -
-
- - -
-
- - - + +
+
+ + +
+
+ + +
+
+
+
); }; diff --git a/packages/twenty-front/src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldSelect.tsx b/packages/twenty-front/src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldSelect.tsx index 156795724..884918113 100644 --- a/packages/twenty-front/src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldSelect.tsx +++ b/packages/twenty-front/src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldSelect.tsx @@ -1,5 +1,4 @@ import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems'; -import { RecordFieldValueSelectorContextProvider } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer'; import { SettingsDataModelNewFieldBreadcrumbDropDown } from '@/settings/data-model/components/SettingsDataModelNewFieldBreadcrumbDropDown'; import { SETTINGS_FIELD_TYPE_CONFIGS } from '@/settings/data-model/constants/SettingsFieldTypeConfigs'; @@ -10,15 +9,15 @@ import { AppPath } from '@/types/AppPath'; import { SettingsPath } from '@/types/SettingsPath'; import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBarContainer'; import { zodResolver } from '@hookform/resolvers/zod'; +import { t } from '@lingui/core/macro'; import { useEffect } from 'react'; import { FormProvider, useForm } from 'react-hook-form'; import { useParams } from 'react-router-dom'; +import { isDefined } from 'twenty-shared/utils'; import { z } from 'zod'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { useNavigateApp } from '~/hooks/useNavigateApp'; import { getSettingsPath } from '~/utils/navigation/getSettingsPath'; -import { t } from '@lingui/core/macro'; -import { isDefined } from 'twenty-shared/utils'; export const settingsDataModelFieldTypeFormSchema = z.object({ type: z.enum( @@ -64,32 +63,30 @@ export const SettingsObjectNewFieldSelect = () => { if (!activeObjectMetadataItem) return null; return ( - - + }, + ]} > - }, - ]} - > - - - - - - + + + + + ); }; diff --git a/packages/twenty-front/src/testing/decorators/RecordTableDecorator.tsx b/packages/twenty-front/src/testing/decorators/RecordTableDecorator.tsx index 0a93ae923..037898ef5 100644 --- a/packages/twenty-front/src/testing/decorators/RecordTableDecorator.tsx +++ b/packages/twenty-front/src/testing/decorators/RecordTableDecorator.tsx @@ -10,7 +10,6 @@ import { RecordFiltersComponentInstanceContext } from '@/object-record/record-fi import { RecordIndexContextProvider } from '@/object-record/record-index/contexts/RecordIndexContext'; import { useLoadRecordIndexStates } from '@/object-record/record-index/hooks/useLoadRecordIndexStates'; import { RecordSortsComponentInstanceContext } from '@/object-record/record-sort/states/context/RecordSortsComponentInstanceContext'; -import { RecordFieldValueSelectorContextProvider } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; import { RecordTableBodyContextProvider } from '@/object-record/record-table/contexts/RecordTableBodyContext'; import { RecordTableContextProvider } from '@/object-record/record-table/contexts/RecordTableContext'; import { useRecordTable } from '@/object-record/record-table/hooks/useRecordTable'; @@ -126,41 +125,39 @@ export const RecordTableDecorator: Decorator = (Story, context) => { ); return ( - - {} }} + {} }} + > + - - - - - + - - - - - - - - - - - + + + + + + + + ); }; diff --git a/packages/twenty-front/src/testing/decorators/getFieldDecorator.tsx b/packages/twenty-front/src/testing/decorators/getFieldDecorator.tsx index 96ec4305b..064210634 100644 --- a/packages/twenty-front/src/testing/decorators/getFieldDecorator.tsx +++ b/packages/twenty-front/src/testing/decorators/getFieldDecorator.tsx @@ -6,10 +6,6 @@ import { formatFieldMetadataItemAsColumnDefinition } from '@/object-metadata/uti import { isLabelIdentifierField } from '@/object-metadata/utils/isLabelIdentifierField'; import { FieldContext } from '@/object-record/record-field/contexts/FieldContext'; import { RecordFieldComponentInstanceContext } from '@/object-record/record-field/states/contexts/RecordFieldComponentInstanceContext'; -import { - RecordFieldValueSelectorContextProvider, - useSetRecordValue, -} from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; import { isDefined } from 'twenty-shared/utils'; @@ -27,15 +23,12 @@ const RecordMockSetterEffect = ({ people: ObjectRecord[]; tasks: ObjectRecord[]; }) => { - const setRecordValue = useSetRecordValue(); - const setRecordInStores = useRecoilCallback( ({ set }) => (record: ObjectRecord) => { set(recordStoreFamilyState(record.id), record); - setRecordValue(record.id, record); }, - [setRecordValue], + [], ); useEffect(() => { @@ -130,27 +123,25 @@ export const getFieldDecorator = instanceId: 'record-field-component-instance-id', }} > - - - - - - + + + + ); }; diff --git a/yarn.lock b/yarn.lock index 3b4ffef3a..739ad78b5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -55579,7 +55579,6 @@ __metadata: tsx: "npm:^4.17.0" type-fest: "npm:4.10.1" typescript: "npm:5.3.3" - use-context-selector: "npm:^2.0.0" use-debounce: "npm:^10.0.0" uuid: "npm:^9.0.0" vite: "npm:^5.4.0" @@ -56763,16 +56762,6 @@ __metadata: languageName: node linkType: hard -"use-context-selector@npm:^2.0.0": - version: 2.0.0 - resolution: "use-context-selector@npm:2.0.0" - peerDependencies: - react: ">=18.0.0" - scheduler: ">=0.19.0" - checksum: 10c0/4eb6054ab8996ae8b3f87f9d102e576066e5a8b9db5db2c891128ae920bd64bcdcb4e93a13bc99658ef16280929a8331fc8ac45177f4acd716c425b1bc31135a - languageName: node - linkType: hard - "use-debounce@npm:^10.0.0": version: 10.0.2 resolution: "use-debounce@npm:10.0.2"