diff --git a/packages/twenty-front/src/modules/activities/calendar/components/CalendarEventDetails.tsx b/packages/twenty-front/src/modules/activities/calendar/components/CalendarEventDetails.tsx index 1363fdf6382..ecf0b557ed7 100644 --- a/packages/twenty-front/src/modules/activities/calendar/components/CalendarEventDetails.tsx +++ b/packages/twenty-front/src/modules/activities/calendar/components/CalendarEventDetails.tsx @@ -121,15 +121,14 @@ export const CalendarEventDetails = ({ const { calendarEventParticipants } = calendarEvent; - const { updateOneRecord } = useUpdateOneRecord({ - objectNameSingular: CoreObjectNameSingular.CalendarEvent, - }); + const { updateOneRecord } = useUpdateOneRecord(); const [isUpdating, setIsUpdating] = useState(false); const updateEntity = useCallback( ({ variables }: RecordUpdateHookParams) => { setIsUpdating(true); void updateOneRecord({ + objectNameSingular: CoreObjectNameSingular.CalendarEvent, idToUpdate: variables.where.id as string, updateOneRecordInput: variables.updateOneRecordInput, }).finally(() => setIsUpdating(false)); diff --git a/packages/twenty-front/src/modules/activities/files/components/AttachmentRow.tsx b/packages/twenty-front/src/modules/activities/files/components/AttachmentRow.tsx index c5d7061ac2c..5fdcc9785f2 100644 --- a/packages/twenty-front/src/modules/activities/files/components/AttachmentRow.tsx +++ b/packages/twenty-front/src/modules/activities/files/components/AttachmentRow.tsx @@ -100,9 +100,7 @@ export const AttachmentRow = ({ destroyOneAttachment(attachment.id); }; - const { updateOneRecord: updateOneAttachment } = useUpdateOneRecord({ - objectNameSingular: CoreObjectNameSingular.Attachment, - }); + const { updateOneRecord } = useUpdateOneRecord(); const handleRename = () => { setIsEditing(true); @@ -113,7 +111,8 @@ export const AttachmentRow = ({ const newFileName = `${attachmentFileName}${attachmentFileExtension}`; - updateOneAttachment({ + updateOneRecord({ + objectNameSingular: CoreObjectNameSingular.Attachment, idToUpdate: attachment.id, updateOneRecordInput: { name: newFileName }, }); diff --git a/packages/twenty-front/src/modules/activities/hooks/useUpsertActivity.ts b/packages/twenty-front/src/modules/activities/hooks/useUpsertActivity.ts index e4eee6e38fe..dc238a54a34 100644 --- a/packages/twenty-front/src/modules/activities/hooks/useUpsertActivity.ts +++ b/packages/twenty-front/src/modules/activities/hooks/useUpsertActivity.ts @@ -20,11 +20,7 @@ export const useUpsertActivity = ({ }) => { const [isActivityInCreateMode] = useRecoilState(isActivityInCreateModeState); - const { updateOneRecord: updateOneActivity } = useUpdateOneRecord< - Task | Note - >({ - objectNameSingular: activityObjectNameSingular, - }); + const { updateOneRecord: updateOneActivity } = useUpdateOneRecord(); const { createActivityInDB } = useCreateActivityInDB({ activityObjectNameSingular, @@ -64,6 +60,7 @@ export const useUpsertActivity = ({ await createActivityInDB(activityToCreate); } else { await updateOneActivity?.({ + objectNameSingular: activityObjectNameSingular, idToUpdate: activity.id, updateOneRecordInput: input, }); diff --git a/packages/twenty-front/src/modules/activities/tasks/hooks/useCompleteTask.ts b/packages/twenty-front/src/modules/activities/tasks/hooks/useCompleteTask.ts index cc261bace26..5872fc73d22 100644 --- a/packages/twenty-front/src/modules/activities/tasks/hooks/useCompleteTask.ts +++ b/packages/twenty-front/src/modules/activities/tasks/hooks/useCompleteTask.ts @@ -5,21 +5,20 @@ import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSi import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; export const useCompleteTask = (task: Task) => { - const { updateOneRecord: updateOneActivity } = useUpdateOneRecord({ - objectNameSingular: CoreObjectNameSingular.Task, - }); + const { updateOneRecord } = useUpdateOneRecord(); const completeTask = useCallback( async (value: boolean) => { const status = value ? 'DONE' : 'TODO'; - await updateOneActivity?.({ + await updateOneRecord({ + objectNameSingular: CoreObjectNameSingular.Task, idToUpdate: task.id, updateOneRecordInput: { status, }, }); }, - [task.id, updateOneActivity], + [task.id, updateOneRecord], ); return { diff --git a/packages/twenty-front/src/modules/command-menu/components/CommandMenuWorkflowStepInfo.tsx b/packages/twenty-front/src/modules/command-menu/components/CommandMenuWorkflowStepInfo.tsx index a425e8fa601..e9ed92830b9 100644 --- a/packages/twenty-front/src/modules/command-menu/components/CommandMenuWorkflowStepInfo.tsx +++ b/packages/twenty-front/src/modules/command-menu/components/CommandMenuWorkflowStepInfo.tsx @@ -9,7 +9,6 @@ import { TitleInput } from '@/ui/input/components/TitleInput'; import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue'; import { useGetUpdatableWorkflowVersionOrThrow } from '@/workflow/hooks/useGetUpdatableWorkflowVersionOrThrow'; import { useWorkflowWithCurrentVersion } from '@/workflow/hooks/useWorkflowWithCurrentVersion'; -import { type WorkflowVersion } from '@/workflow/types/Workflow'; import { getAgentIdFromStep } from '@/workflow/utils/getAgentIdFromStep'; import { getStepDefinitionOrThrow } from '@/workflow/utils/getStepDefinitionOrThrow'; import { getWorkflowVisualizerComponentInstanceId } from '@/workflow/utils/getWorkflowVisualizerComponentInstanceId'; @@ -60,10 +59,7 @@ export const CommandMenuWorkflowStepInfo = ({ useGetUpdatableWorkflowVersionOrThrow(instanceId); const { updateWorkflowVersionStep } = useUpdateWorkflowVersionStep(); - const { updateOneRecord: updateOneWorkflowVersion } = - useUpdateOneRecord({ - objectNameSingular: CoreObjectNameSingular.WorkflowVersion, - }); + const { updateOneRecord: updateOneWorkflowVersion } = useUpdateOneRecord(); const { trigger, @@ -153,6 +149,7 @@ export const CommandMenuWorkflowStepInfo = ({ if (isTrigger) { await updateOneWorkflowVersion({ + objectNameSingular: CoreObjectNameSingular.WorkflowVersion, idToUpdate: targetWorkflowVersionId, updateOneRecordInput: { trigger: { diff --git a/packages/twenty-front/src/modules/favorites/hooks/useHandleFavoriteDragAndDrop.ts b/packages/twenty-front/src/modules/favorites/hooks/useHandleFavoriteDragAndDrop.ts index 802ada21e9d..90c28f8f068 100644 --- a/packages/twenty-front/src/modules/favorites/hooks/useHandleFavoriteDragAndDrop.ts +++ b/packages/twenty-front/src/modules/favorites/hooks/useHandleFavoriteDragAndDrop.ts @@ -12,9 +12,7 @@ import { usePrefetchedFavoritesData } from './usePrefetchedFavoritesData'; export const useHandleFavoriteDragAndDrop = () => { const { favorites } = usePrefetchedFavoritesData(); const { favoritesSorted } = useSortedFavorites(); - const { updateOneRecord: updateOneFavorite } = useUpdateOneRecord({ - objectNameSingular: CoreObjectNameSingular.Favorite, - }); + const { updateOneRecord } = useUpdateOneRecord(); const setOpenFavoriteFolderIds = useSetRecoilState( openFavoriteFolderIdsState, ); @@ -67,7 +65,8 @@ export const useHandleFavoriteDragAndDrop = () => { ? 1 : folderFavorites[folderFavorites.length - 1].position + 1; - updateOneFavorite({ + updateOneRecord({ + objectNameSingular: CoreObjectNameSingular.Favorite, idToUpdate: draggableId, updateOneRecordInput: { favoriteFolderId: destinationFolderId, @@ -100,7 +99,8 @@ export const useHandleFavoriteDragAndDrop = () => { }); } - updateOneFavorite({ + updateOneRecord({ + objectNameSingular: CoreObjectNameSingular.Favorite, idToUpdate: draggableId, updateOneRecordInput: { favoriteFolderId: destinationFolderId, @@ -120,7 +120,8 @@ export const useHandleFavoriteDragAndDrop = () => { items: favoritesInSameList, }); - updateOneFavorite({ + updateOneRecord({ + objectNameSingular: CoreObjectNameSingular.Favorite, idToUpdate: draggableId, updateOneRecordInput: { position: newPosition }, }); diff --git a/packages/twenty-front/src/modules/favorites/hooks/useRenameFavoriteFolder.ts b/packages/twenty-front/src/modules/favorites/hooks/useRenameFavoriteFolder.ts index dd79091073a..2d9f52f8656 100644 --- a/packages/twenty-front/src/modules/favorites/hooks/useRenameFavoriteFolder.ts +++ b/packages/twenty-front/src/modules/favorites/hooks/useRenameFavoriteFolder.ts @@ -2,9 +2,7 @@ import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSi import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; export const useRenameFavoriteFolder = () => { - const { updateOneRecord: updateFavoriteFolder } = useUpdateOneRecord({ - objectNameSingular: CoreObjectNameSingular.FavoriteFolder, - }); + const { updateOneRecord } = useUpdateOneRecord(); const renameFavoriteFolder = async ( folderId: string, @@ -14,7 +12,8 @@ export const useRenameFavoriteFolder = () => { return; } - await updateFavoriteFolder({ + await updateOneRecord({ + objectNameSingular: CoreObjectNameSingular.FavoriteFolder, idToUpdate: folderId, updateOneRecordInput: { name: newName, diff --git a/packages/twenty-front/src/modules/localization/hooks/__tests__/useFormatPreferences.test.tsx b/packages/twenty-front/src/modules/localization/hooks/__tests__/useFormatPreferences.test.tsx index 6855cde1150..1763696ba95 100644 --- a/packages/twenty-front/src/modules/localization/hooks/__tests__/useFormatPreferences.test.tsx +++ b/packages/twenty-front/src/modules/localization/hooks/__tests__/useFormatPreferences.test.tsx @@ -145,6 +145,7 @@ describe('useFormatPreferences', () => { expect(mockUpdateOneRecord).toHaveBeenCalledWith({ idToUpdate: mockCurrentWorkspaceMember.id, + objectNameSingular: 'workspaceMember', updateOneRecordInput: { timeZone: newTimeZone }, }); }); @@ -166,6 +167,7 @@ describe('useFormatPreferences', () => { expect(mockDetectTimeZone).toHaveBeenCalled(); expect(mockUpdateOneRecord).toHaveBeenCalledWith({ idToUpdate: mockCurrentWorkspaceMember.id, + objectNameSingular: 'workspaceMember', updateOneRecordInput: { timeZone: 'SYSTEM' }, }); }); @@ -190,6 +192,7 @@ describe('useFormatPreferences', () => { expect(mockUpdateOneRecord).toHaveBeenCalledWith({ idToUpdate: mockCurrentWorkspaceMember.id, + objectNameSingular: 'workspaceMember', updateOneRecordInput: { timeZone: 'Europe/Paris' }, }); }); diff --git a/packages/twenty-front/src/modules/localization/hooks/useFormatPreferences.ts b/packages/twenty-front/src/modules/localization/hooks/useFormatPreferences.ts index 14cf203ae0c..cf2e0abd5fe 100644 --- a/packages/twenty-front/src/modules/localization/hooks/useFormatPreferences.ts +++ b/packages/twenty-front/src/modules/localization/hooks/useFormatPreferences.ts @@ -33,9 +33,7 @@ export const useFormatPreferences = () => { currentWorkspaceMemberState, ); - const { updateOneRecord } = useUpdateOneRecord({ - objectNameSingular: CoreObjectNameSingular.WorkspaceMember, - }); + const { updateOneRecord } = useUpdateOneRecord(); const updateFormatPreference = useCallback( async ( @@ -97,6 +95,7 @@ export const useFormatPreferences = () => { try { await updateOneRecord({ + objectNameSingular: CoreObjectNameSingular.WorkspaceMember, idToUpdate: currentWorkspaceMember.id, updateOneRecordInput: workspaceMemberUpdate, }); @@ -167,6 +166,7 @@ export const useFormatPreferences = () => { try { await updateOneRecord({ + objectNameSingular: CoreObjectNameSingular.WorkspaceMember, idToUpdate: currentWorkspaceMember.id, updateOneRecordInput: workspaceMemberUpdate, }); diff --git a/packages/twenty-front/src/modules/object-record/hooks/__tests__/useRefetchAggregateQueries.test.tsx b/packages/twenty-front/src/modules/object-record/hooks/__tests__/useRefetchAggregateQueries.test.tsx index a429b42affc..bf127dac927 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/__tests__/useRefetchAggregateQueries.test.tsx +++ b/packages/twenty-front/src/modules/object-record/hooks/__tests__/useRefetchAggregateQueries.test.tsx @@ -28,10 +28,8 @@ describe('useRefetchAggregateQueries', () => { }); // Act - const { result } = renderHook(() => - useRefetchAggregateQueries({ objectMetadataNamePlural }), - ); - await result.current.refetchAggregateQueries(); + const { result } = renderHook(() => useRefetchAggregateQueries()); + await result.current.refetchAggregateQueries({ objectMetadataNamePlural }); // Assert expect(mockRefetchQueries).toHaveBeenCalledTimes(1); @@ -47,13 +45,11 @@ describe('useRefetchAggregateQueries', () => { const objectMetadataNamePlural = 'opportunities'; // Act - const { result } = renderHook(() => - useRefetchAggregateQueries({ objectMetadataNamePlural }), - ); + const { result } = renderHook(() => useRefetchAggregateQueries()); // Assert - await expect(result.current.refetchAggregateQueries()).rejects.toThrow( - 'Refetch failed', - ); + await expect( + result.current.refetchAggregateQueries({ objectMetadataNamePlural }), + ).rejects.toThrow('Refetch failed'); }); }); diff --git a/packages/twenty-front/src/modules/object-record/hooks/__tests__/useUpdateOneRecord.test.tsx b/packages/twenty-front/src/modules/object-record/hooks/__tests__/useUpdateOneRecord.test.tsx index f9372f02d08..18ea4640b3c 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/__tests__/useUpdateOneRecord.test.tsx +++ b/packages/twenty-front/src/modules/object-record/hooks/__tests__/useUpdateOneRecord.test.tsx @@ -53,15 +53,13 @@ describe('useUpdateOneRecord', () => { jest.clearAllMocks(); }); it('works as expected', async () => { - const { result } = renderHook( - () => useUpdateOneRecord({ objectNameSingular: 'person' }), - { - wrapper: Wrapper, - }, - ); + const { result } = renderHook(() => useUpdateOneRecord(), { + wrapper: Wrapper, + }); await act(async () => { const res = await result.current.updateOneRecord({ + objectNameSingular: 'person', idToUpdate, updateOneRecordInput: updateInput, }); diff --git a/packages/twenty-front/src/modules/object-record/hooks/__tests__/useUpdateOneRecordMutation.test.tsx b/packages/twenty-front/src/modules/object-record/hooks/__tests__/useUpdateOneRecordMutation.test.tsx deleted file mode 100644 index 7d7cb8ab945..00000000000 --- a/packages/twenty-front/src/modules/object-record/hooks/__tests__/useUpdateOneRecordMutation.test.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { renderHook } from '@testing-library/react'; -import { print } from 'graphql'; - -import { PERSON_FRAGMENT_WITH_DEPTH_ZERO_RELATIONS } from '@/object-record/hooks/__mocks__/personFragments'; -import { useUpdateOneRecordMutation } from '@/object-record/hooks/useUpdateOneRecordMutation'; -import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper'; -import { normalizeGQLQuery } from '~/utils/normalizeGQLQuery'; - -const expectedQueryTemplate = ` -mutation UpdateOnePerson($idToUpdate: UUID!, $input: PersonUpdateInput!) { - updatePerson(id: $idToUpdate, data: $input) { - ${PERSON_FRAGMENT_WITH_DEPTH_ZERO_RELATIONS} - } -}`; - -const Wrapper = getJestMetadataAndApolloMocksWrapper({ - apolloMocks: [], -}); - -describe('useUpdateOneRecordMutation', () => { - it('should return a valid createManyRecordsMutation', () => { - const objectNameSingular = 'person'; - - const { result } = renderHook( - () => - useUpdateOneRecordMutation({ - objectNameSingular, - }), - { - wrapper: Wrapper, - }, - ); - - const { updateOneRecordMutation } = result.current; - - expect(updateOneRecordMutation).toBeDefined(); - - const printedReceivedQuery = print(updateOneRecordMutation); - - expect(normalizeGQLQuery(printedReceivedQuery)).toEqual( - normalizeGQLQuery(expectedQueryTemplate), - ); - }); -}); diff --git a/packages/twenty-front/src/modules/object-record/hooks/useBatchCreateManyRecords.ts b/packages/twenty-front/src/modules/object-record/hooks/useBatchCreateManyRecords.ts index f17621c287a..0a5891f82b0 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useBatchCreateManyRecords.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useBatchCreateManyRecords.ts @@ -39,9 +39,7 @@ export const useBatchCreateManyRecords = < objectNameSingular, }); - const { refetchAggregateQueries } = useRefetchAggregateQueries({ - objectMetadataNamePlural: objectMetadataItem.namePlural, - }); + const { refetchAggregateQueries } = useRefetchAggregateQueries(); const { enqueueWarningSnackBar } = useSnackBar(); const { formatNumber } = useNumberFormat(); @@ -96,7 +94,9 @@ export const useBatchCreateManyRecords = < } } - await refetchAggregateQueries(); + await refetchAggregateQueries({ + objectMetadataNamePlural: objectMetadataItem.namePlural, + }); dispatchObjectRecordOperationBrowserEvent({ objectMetadataItem, diff --git a/packages/twenty-front/src/modules/object-record/hooks/useCreateManyRecords.ts b/packages/twenty-front/src/modules/object-record/hooks/useCreateManyRecords.ts index d31e069d8f8..94a6075d3a9 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useCreateManyRecords.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useCreateManyRecords.ts @@ -82,9 +82,7 @@ export const useCreateManyRecords = < const { objectMetadataItems } = useObjectMetadataItems(); const { objectPermissionsByObjectMetadataId } = useObjectPermissions(); - const { refetchAggregateQueries } = useRefetchAggregateQueries({ - objectMetadataNamePlural: objectMetadataItem.namePlural, - }); + const { refetchAggregateQueries } = useRefetchAggregateQueries(); type createManyRecordsProps = { recordsToCreate: Partial[]; @@ -239,7 +237,9 @@ export const useCreateManyRecords = < }); if (shouldRefetchAggregateQueries) { - await refetchAggregateQueries(); + await refetchAggregateQueries({ + objectMetadataNamePlural: objectMetadataItem.namePlural, + }); } dispatchObjectRecordOperationBrowserEvent({ diff --git a/packages/twenty-front/src/modules/object-record/hooks/useCreateOneRecord.ts b/packages/twenty-front/src/modules/object-record/hooks/useCreateOneRecord.ts index cac40d617df..fcec8fba881 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useCreateOneRecord.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useCreateOneRecord.ts @@ -79,9 +79,7 @@ export const useCreateOneRecord = < const { objectMetadataItems } = useObjectMetadataItems(); const { objectPermissionsByObjectMetadataId } = useObjectPermissions(); - const { refetchAggregateQueries } = useRefetchAggregateQueries({ - objectMetadataNamePlural: objectMetadataItem.namePlural, - }); + const { refetchAggregateQueries } = useRefetchAggregateQueries(); const createOneRecord = async (recordInput: Partial) => { setLoading(true); @@ -189,7 +187,9 @@ export const useCreateOneRecord = < throw error; }); - await refetchAggregateQueries(); + await refetchAggregateQueries({ + objectMetadataNamePlural: objectMetadataItem.namePlural, + }); const positionToUse = recordInput.position === 'first' diff --git a/packages/twenty-front/src/modules/object-record/hooks/useDeleteManyRecords.ts b/packages/twenty-front/src/modules/object-record/hooks/useDeleteManyRecords.ts index a8d6f3f16c6..00214bf02ba 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useDeleteManyRecords.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useDeleteManyRecords.ts @@ -56,9 +56,7 @@ export const useDeleteManyRecords = ({ const { objectMetadataItems } = useObjectMetadataItems(); const { objectPermissionsByObjectMetadataId } = useObjectPermissions(); - const { refetchAggregateQueries } = useRefetchAggregateQueries({ - objectMetadataNamePlural: objectMetadataItem.namePlural, - }); + const { refetchAggregateQueries } = useRefetchAggregateQueries(); const mutationResponseField = getDeleteManyRecordsMutationResponseField( objectMetadataItem.namePlural, @@ -221,7 +219,9 @@ export const useDeleteManyRecords = ({ await sleep(delayInMsBetweenRequests); } } - await refetchAggregateQueries(); + await refetchAggregateQueries({ + objectMetadataNamePlural: objectMetadataItem.namePlural, + }); dispatchObjectRecordOperationBrowserEvent({ objectMetadataItem, diff --git a/packages/twenty-front/src/modules/object-record/hooks/useDeleteOneRecord.ts b/packages/twenty-front/src/modules/object-record/hooks/useDeleteOneRecord.ts index f5b791e7bd3..ad8b02b4812 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useDeleteOneRecord.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useDeleteOneRecord.ts @@ -43,9 +43,7 @@ export const useDeleteOneRecord = ({ const { objectMetadataItems } = useObjectMetadataItems(); const { objectPermissionsByObjectMetadataId } = useObjectPermissions(); - const { refetchAggregateQueries } = useRefetchAggregateQueries({ - objectMetadataNamePlural: objectMetadataItem.namePlural, - }); + const { refetchAggregateQueries } = useRefetchAggregateQueries(); const mutationResponseField = getDeleteOneRecordMutationResponseField(objectNameSingular); @@ -162,7 +160,9 @@ export const useDeleteOneRecord = ({ throw error; }); - await refetchAggregateQueries(); + await refetchAggregateQueries({ + objectMetadataNamePlural: objectMetadataItem.namePlural, + }); dispatchObjectRecordOperationBrowserEvent({ objectMetadataItem, diff --git a/packages/twenty-front/src/modules/object-record/hooks/useDestroyManyRecords.ts b/packages/twenty-front/src/modules/object-record/hooks/useDestroyManyRecords.ts index ffe92c29f60..8af4bd9d95c 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useDestroyManyRecords.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useDestroyManyRecords.ts @@ -51,9 +51,7 @@ export const useDestroyManyRecords = ({ const { objectMetadataItems } = useObjectMetadataItems(); const { objectPermissionsByObjectMetadataId } = useObjectPermissions(); - const { refetchAggregateQueries } = useRefetchAggregateQueries({ - objectMetadataNamePlural: objectMetadataItem.namePlural, - }); + const { refetchAggregateQueries } = useRefetchAggregateQueries(); const mutationResponseField = getDestroyManyRecordsMutationResponseField( objectMetadataItem.namePlural, @@ -142,7 +140,9 @@ export const useDestroyManyRecords = ({ } } - await refetchAggregateQueries(); + await refetchAggregateQueries({ + objectMetadataNamePlural: objectMetadataItem.namePlural, + }); dispatchObjectRecordOperationBrowserEvent({ objectMetadataItem, diff --git a/packages/twenty-front/src/modules/object-record/hooks/useIncrementalDeleteManyRecords.ts b/packages/twenty-front/src/modules/object-record/hooks/useIncrementalDeleteManyRecords.ts index 7fc99b26d47..ad110efbdd7 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useIncrementalDeleteManyRecords.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useIncrementalDeleteManyRecords.ts @@ -60,9 +60,7 @@ export const useIncrementalDeleteManyRecords = ({ const { objectMetadataItems } = useObjectMetadataItems(); const { objectPermissionsByObjectMetadataId } = useObjectPermissions(); - const { refetchAggregateQueries } = useRefetchAggregateQueries({ - objectMetadataNamePlural: objectMetadataItem.namePlural, - }); + const { refetchAggregateQueries } = useRefetchAggregateQueries(); const { incrementalFetchAndMutate, progress, isProcessing, updateProgress } = useIncrementalFetchAndMutateRecords({ @@ -232,7 +230,9 @@ export const useIncrementalDeleteManyRecords = ({ }, ); - await refetchAggregateQueries(); + await refetchAggregateQueries({ + objectMetadataNamePlural: objectMetadataItem.namePlural, + }); dispatchObjectRecordOperationBrowserEvent({ objectMetadataItem, diff --git a/packages/twenty-front/src/modules/object-record/hooks/useIncrementalDestroyManyRecords.ts b/packages/twenty-front/src/modules/object-record/hooks/useIncrementalDestroyManyRecords.ts index 384ec5b8593..b4550e9ef25 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useIncrementalDestroyManyRecords.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useIncrementalDestroyManyRecords.ts @@ -55,9 +55,7 @@ export const useIncrementalDestroyManyRecords = ({ const { objectMetadataItems } = useObjectMetadataItems(); const { objectPermissionsByObjectMetadataId } = useObjectPermissions(); - const { refetchAggregateQueries } = useRefetchAggregateQueries({ - objectMetadataNamePlural: objectMetadataItem.namePlural, - }); + const { refetchAggregateQueries } = useRefetchAggregateQueries(); const mutationResponseField = getDestroyManyRecordsMutationResponseField( objectMetadataItem.namePlural, @@ -162,7 +160,9 @@ export const useIncrementalDestroyManyRecords = ({ }, ); - await refetchAggregateQueries(); + await refetchAggregateQueries({ + objectMetadataNamePlural: objectMetadataItem.namePlural, + }); dispatchObjectRecordOperationBrowserEvent({ objectMetadataItem, diff --git a/packages/twenty-front/src/modules/object-record/hooks/useIncrementalUpdateManyRecords.ts b/packages/twenty-front/src/modules/object-record/hooks/useIncrementalUpdateManyRecords.ts index b1b39059807..fc113428fef 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useIncrementalUpdateManyRecords.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useIncrementalUpdateManyRecords.ts @@ -37,9 +37,7 @@ export const useIncrementalUpdateManyRecords = < objectNameSingular, }); - const { refetchAggregateQueries } = useRefetchAggregateQueries({ - objectMetadataNamePlural: objectMetadataItem.namePlural, - }); + const { refetchAggregateQueries } = useRefetchAggregateQueries(); const { incrementalFetchAndMutate, @@ -80,7 +78,9 @@ export const useIncrementalUpdateManyRecords = < }, ); } finally { - await refetchAggregateQueries(); + await refetchAggregateQueries({ + objectMetadataNamePlural: objectMetadataItem.namePlural, + }); dispatchObjectRecordOperationBrowserEvent({ objectMetadataItem, diff --git a/packages/twenty-front/src/modules/object-record/hooks/useMergeManyRecords.ts b/packages/twenty-front/src/modules/object-record/hooks/useMergeManyRecords.ts index 66136b2bea8..ab5a59aef14 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useMergeManyRecords.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useMergeManyRecords.ts @@ -48,9 +48,7 @@ export const useMergeManyRecords = < recordGqlFields: computedRecordGqlFields, }); - const { refetchAggregateQueries } = useRefetchAggregateQueries({ - objectMetadataNamePlural: objectMetadataItem.namePlural, - }); + const { refetchAggregateQueries } = useRefetchAggregateQueries(); const { findOneRecordQuery } = useFindOneRecordQuery({ objectNameSingular, @@ -101,7 +99,9 @@ export const useMergeManyRecords = < setLoading(false); if (!preview) { - await refetchAggregateQueries(); + await refetchAggregateQueries({ + objectMetadataNamePlural: objectMetadataItem.namePlural, + }); dispatchObjectRecordOperationBrowserEvent({ objectMetadataItem, operation: { diff --git a/packages/twenty-front/src/modules/object-record/hooks/useRecordOneToManyFieldAttachTargetRecord.ts b/packages/twenty-front/src/modules/object-record/hooks/useRecordOneToManyFieldAttachTargetRecord.ts index 5f4590f4e03..2b4af7b60b7 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useRecordOneToManyFieldAttachTargetRecord.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useRecordOneToManyFieldAttachTargetRecord.ts @@ -5,7 +5,7 @@ import { getRecordFromCache } from '@/object-record/cache/utils/getRecordFromCac import { updateRecordFromCache } from '@/object-record/cache/utils/updateRecordFromCache'; import { generateDepthRecordGqlFieldsFromRecord } from '@/object-record/graphql/record-gql-fields/utils/generateDepthRecordGqlFieldsFromRecord'; import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions'; -import { useUpdateOneRecordV2 } from '@/object-record/hooks/useUpdateOneRecordV2'; +import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { CustomError, isDefined } from 'twenty-shared/utils'; export const useRecordOneToManyFieldAttachTargetRecord = () => { @@ -13,7 +13,7 @@ export const useRecordOneToManyFieldAttachTargetRecord = () => { const { objectMetadataItems } = useObjectMetadataItems(); const { objectPermissionsByObjectMetadataId } = useObjectPermissions(); - const { updateOneRecord } = useUpdateOneRecordV2(); + const { updateOneRecord } = useUpdateOneRecord(); const recordOneToManyFieldAttachTargetRecord = async ({ sourceObjectNameSingular, diff --git a/packages/twenty-front/src/modules/object-record/hooks/useRecordOneToManyFieldDetachTargetRecord.ts b/packages/twenty-front/src/modules/object-record/hooks/useRecordOneToManyFieldDetachTargetRecord.ts index 1d47ec46481..f9a63595495 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useRecordOneToManyFieldDetachTargetRecord.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useRecordOneToManyFieldDetachTargetRecord.ts @@ -4,13 +4,13 @@ import { useApolloCoreClient } from '@/object-metadata/hooks/useApolloCoreClient import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; import { getRefName } from '@/object-record/cache/utils/getRefName'; import { modifyRecordFromCache } from '@/object-record/cache/utils/modifyRecordFromCache'; -import { useUpdateOneRecordV2 } from '@/object-record/hooks/useUpdateOneRecordV2'; +import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { CustomError } from 'twenty-shared/utils'; export const useRecordOneToManyFieldDetachTargetRecord = () => { const apolloCoreClient = useApolloCoreClient(); const { objectMetadataItems } = useObjectMetadataItems(); - const { updateOneRecord } = useUpdateOneRecordV2(); + const { updateOneRecord } = useUpdateOneRecord(); const recordOneToManyFieldDetachTargetRecord = async ({ sourceObjectNameSingular, diff --git a/packages/twenty-front/src/modules/object-record/hooks/useRefetchAggregateQueries.ts b/packages/twenty-front/src/modules/object-record/hooks/useRefetchAggregateQueries.ts index 8b667e3da3a..cffd0a83fbd 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useRefetchAggregateQueries.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useRefetchAggregateQueries.ts @@ -2,14 +2,14 @@ import { useApolloCoreClient } from '@/object-metadata/hooks/useApolloCoreClient import { getGroupByAggregateQueryName } from '@/object-record/record-aggregate/utils/getGroupByAggregateQueryName'; import { getAggregateQueryName } from '@/object-record/utils/getAggregateQueryName'; -export const useRefetchAggregateQueries = ({ - objectMetadataNamePlural, -}: { - objectMetadataNamePlural: string; -}) => { +export const useRefetchAggregateQueries = () => { const apolloCoreClient = useApolloCoreClient(); - const refetchAggregateQueries = async () => { + const refetchAggregateQueries = async ({ + objectMetadataNamePlural, + }: { + objectMetadataNamePlural: string; + }) => { const queryName = getAggregateQueryName(objectMetadataNamePlural); const groupByAggregateQueryName = getGroupByAggregateQueryName({ diff --git a/packages/twenty-front/src/modules/object-record/hooks/useUpdateManyRecords.ts b/packages/twenty-front/src/modules/object-record/hooks/useUpdateManyRecords.ts index b2bd13dfb0b..7189f4f52d2 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useUpdateManyRecords.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useUpdateManyRecords.ts @@ -73,9 +73,7 @@ export const useUpdateManyRecords = ({ const { objectMetadataItems } = useObjectMetadataItems(); const { objectPermissionsByObjectMetadataId } = useObjectPermissions(); - const { refetchAggregateQueries } = useRefetchAggregateQueries({ - objectMetadataNamePlural: objectMetadataItem.namePlural, - }); + const { refetchAggregateQueries } = useRefetchAggregateQueries(); const mutationResponseField = getUpdateManyRecordsMutationResponseField( objectMetadataItem.namePlural, @@ -261,7 +259,9 @@ export const useUpdateManyRecords = ({ } if (!skipRefetchAggregateQueries) { - await refetchAggregateQueries(); + await refetchAggregateQueries({ + objectMetadataNamePlural: objectMetadataItem.namePlural, + }); } if (!skipRegisterObjectOperation) { diff --git a/packages/twenty-front/src/modules/object-record/hooks/useUpdateOneRecord.ts b/packages/twenty-front/src/modules/object-record/hooks/useUpdateOneRecord.ts index a098865c848..2fa49b27416 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useUpdateOneRecord.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useUpdateOneRecord.ts @@ -1,18 +1,18 @@ import { triggerUpdateRecordOptimisticEffect } from '@/apollo/optimistic-effect/utils/triggerUpdateRecordOptimisticEffect'; import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState'; import { useApolloCoreClient } from '@/object-metadata/hooks/useApolloCoreClient'; -import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; -import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordFromCache'; +import { generateUpdateOneRecordMutation } from '@/object-metadata/utils/generateUpdateOneRecordMutation'; import { getObjectTypename } from '@/object-record/cache/utils/getObjectTypename'; +import { getRecordFromCache } from '@/object-record/cache/utils/getRecordFromCache'; import { getRecordFromRecordNode } from '@/object-record/cache/utils/getRecordFromRecordNode'; import { getRecordNodeFromRecord } from '@/object-record/cache/utils/getRecordNodeFromRecord'; import { updateRecordFromCache } from '@/object-record/cache/utils/updateRecordFromCache'; -import { useGenerateDepthRecordGqlFieldsFromObject } from '@/object-record/graphql/record-gql-fields/hooks/useGenerateDepthRecordGqlFieldsFromObject'; +import { type RecordGqlFields } from '@/object-record/graphql/record-gql-fields/types/RecordGqlFields'; +import { generateDepthRecordGqlFieldsFromObject } from '@/object-record/graphql/record-gql-fields/utils/generateDepthRecordGqlFieldsFromObject'; import { generateDepthRecordGqlFieldsFromRecord } from '@/object-record/graphql/record-gql-fields/utils/generateDepthRecordGqlFieldsFromRecord'; import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions'; import { useRefetchAggregateQueries } from '@/object-record/hooks/useRefetchAggregateQueries'; -import { useUpdateOneRecordMutation } from '@/object-record/hooks/useUpdateOneRecordMutation'; import { useUpsertRecordsInStore } from '@/object-record/record-store/hooks/useUpsertRecordsInStore'; import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; import { computeOptimisticRecordFromInput } from '@/object-record/utils/computeOptimisticRecordFromInput'; @@ -25,70 +25,71 @@ import { useRecoilValue } from 'recoil'; import { isDefined } from 'twenty-shared/utils'; import { buildRecordFromKeysWithSameValue } from '~/utils/array/buildRecordFromKeysWithSameValue'; -type useUpdateOneRecordProps = { - objectNameSingular: string; - recordGqlFields?: Record; -}; type UpdateOneRecordArgs = { + objectNameSingular: string; idToUpdate: string; updateOneRecordInput: Partial>; optimisticRecord?: Partial; + recordGqlFields?: RecordGqlFields; }; -export const useUpdateOneRecord = < - UpdatedObjectRecord extends ObjectRecord = ObjectRecord, ->({ - objectNameSingular, - recordGqlFields, -}: useUpdateOneRecordProps) => { - const { upsertRecordsInStore } = useUpsertRecordsInStore(); + +export const useUpdateOneRecord = () => { const apolloCoreClient = useApolloCoreClient(); - - const { objectMetadataItem } = useObjectMetadataItem({ - objectNameSingular, - }); - - const { recordGqlFields: depthOneRecordGqlFields } = - useGenerateDepthRecordGqlFieldsFromObject({ - objectNameSingular, - depth: 1, - }); - - const computedRecordGqlFields = recordGqlFields ?? depthOneRecordGqlFields; - - const getRecordFromCache = useGetRecordFromCache({ - objectNameSingular, - }); - - const { updateOneRecordMutation } = useUpdateOneRecordMutation({ - objectNameSingular, - recordGqlFields: computedRecordGqlFields, - }); + const { upsertRecordsInStore } = useUpsertRecordsInStore(); const currentWorkspaceMember = useRecoilValue(currentWorkspaceMemberState); const { objectMetadataItems } = useObjectMetadataItems(); const { objectPermissionsByObjectMetadataId } = useObjectPermissions(); + const { refetchAggregateQueries } = useRefetchAggregateQueries(); - const { refetchAggregateQueries } = useRefetchAggregateQueries({ - objectMetadataNamePlural: objectMetadataItem.namePlural, - }); - - const updateOneRecord = async ({ + const updateOneRecord = async < + UpdatedObjectRecord extends ObjectRecord = ObjectRecord, + >({ + objectNameSingular, idToUpdate, updateOneRecordInput, optimisticRecord, + recordGqlFields, }: UpdateOneRecordArgs) => { + const objectMetadataItem = objectMetadataItems.find( + (item) => item.nameSingular === objectNameSingular, + ); + + if (!objectMetadataItem) { + throw new Error( + `Object metadata item not found for ${objectNameSingular}`, + ); + } + const optimisticRecordInput = optimisticRecord ?? computeOptimisticRecordFromInput({ objectMetadataItem, - currentWorkspaceMember: currentWorkspaceMember, + currentWorkspaceMember, recordInput: updateOneRecordInput, cache: apolloCoreClient.cache, objectMetadataItems, objectPermissionsByObjectMetadataId, }); - const cachedRecord = getRecordFromCache(idToUpdate); + + const computedRecordGqlFields = + recordGqlFields ?? + generateDepthRecordGqlFieldsFromObject({ + objectMetadataItem, + objectMetadataItems, + depth: 1, + }); + + const cachedRecord = getRecordFromCache({ + cache: apolloCoreClient.cache, + objectMetadataItem, + objectMetadataItems, + recordId: idToUpdate, + recordGqlFields: computedRecordGqlFields, + objectPermissionsByObjectMetadataId, + }); + const cachedRecordWithConnection = getRecordNodeFromRecord({ record: cachedRecord, objectMetadataItem, @@ -155,6 +156,15 @@ export const useUpdateOneRecord = < recordInput: updateOneRecordInput, }), }; + + const updateOneRecordMutation = generateUpdateOneRecordMutation({ + objectMetadataItem, + objectMetadataItems, + recordGqlFields: computedRecordGqlFields, + computeReferences: false, + objectPermissionsByObjectMetadataId, + }); + const updatedRecord = await apolloCoreClient .mutate({ mutation: updateOneRecordMutation, @@ -232,9 +242,11 @@ export const useUpdateOneRecord = < throw error; }); - await refetchAggregateQueries(); + await refetchAggregateQueries({ + objectMetadataNamePlural: objectMetadataItem.namePlural, + }); - const udpatedRecord = updatedRecord?.data?.[mutationResponseField] ?? null; + const resultRecord = updatedRecord?.data?.[mutationResponseField] ?? null; dispatchObjectRecordOperationBrowserEvent({ objectMetadataItem, @@ -250,7 +262,7 @@ export const useUpdateOneRecord = < }, }); - return udpatedRecord; + return resultRecord; }; return { diff --git a/packages/twenty-front/src/modules/object-record/hooks/useUpdateOneRecordMutation.ts b/packages/twenty-front/src/modules/object-record/hooks/useUpdateOneRecordMutation.ts deleted file mode 100644 index e8a1bb4444a..00000000000 --- a/packages/twenty-front/src/modules/object-record/hooks/useUpdateOneRecordMutation.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { useRecoilValue } from 'recoil'; - -import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; -import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; -import { generateUpdateOneRecordMutation } from '@/object-metadata/utils/generateUpdateOneRecordMutation'; -import { EMPTY_MUTATION } from '@/object-record/constants/EmptyMutation'; -import { type RecordGqlOperationGqlRecordFields } from 'twenty-shared/types'; -import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions'; -import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull'; - -export const useUpdateOneRecordMutation = ({ - objectNameSingular, - recordGqlFields, - computeReferences = false, -}: { - objectNameSingular: string; - recordGqlFields?: RecordGqlOperationGqlRecordFields; - computeReferences?: boolean; -}) => { - const { objectMetadataItem } = useObjectMetadataItem({ - objectNameSingular, - }); - - const objectMetadataItems = useRecoilValue(objectMetadataItemsState); - - const { objectPermissionsByObjectMetadataId } = useObjectPermissions(); - - if (isUndefinedOrNull(objectMetadataItem)) { - return { updateOneRecordMutation: EMPTY_MUTATION }; - } - - const updateOneRecordMutation = generateUpdateOneRecordMutation({ - objectMetadataItem, - objectMetadataItems, - recordGqlFields, - computeReferences, - objectPermissionsByObjectMetadataId, - }); - - return { - updateOneRecordMutation, - }; -}; diff --git a/packages/twenty-front/src/modules/object-record/hooks/useUpdateOneRecordV2.ts b/packages/twenty-front/src/modules/object-record/hooks/useUpdateOneRecordV2.ts deleted file mode 100644 index a1f3927ed45..00000000000 --- a/packages/twenty-front/src/modules/object-record/hooks/useUpdateOneRecordV2.ts +++ /dev/null @@ -1,262 +0,0 @@ -import { triggerUpdateRecordOptimisticEffect } from '@/apollo/optimistic-effect/utils/triggerUpdateRecordOptimisticEffect'; -import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState'; -import { useApolloCoreClient } from '@/object-metadata/hooks/useApolloCoreClient'; -import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; -import { generateUpdateOneRecordMutation } from '@/object-metadata/utils/generateUpdateOneRecordMutation'; -import { getObjectTypename } from '@/object-record/cache/utils/getObjectTypename'; -import { getRecordFromCache } from '@/object-record/cache/utils/getRecordFromCache'; -import { getRecordFromRecordNode } from '@/object-record/cache/utils/getRecordFromRecordNode'; -import { getRecordNodeFromRecord } from '@/object-record/cache/utils/getRecordNodeFromRecord'; -import { updateRecordFromCache } from '@/object-record/cache/utils/updateRecordFromCache'; -import { type RecordGqlFields } from '@/object-record/graphql/record-gql-fields/types/RecordGqlFields'; -import { generateDepthRecordGqlFieldsFromObject } from '@/object-record/graphql/record-gql-fields/utils/generateDepthRecordGqlFieldsFromObject'; -import { generateDepthRecordGqlFieldsFromRecord } from '@/object-record/graphql/record-gql-fields/utils/generateDepthRecordGqlFieldsFromRecord'; -import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions'; -import { useUpsertRecordsInStore } from '@/object-record/record-store/hooks/useUpsertRecordsInStore'; -import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; -import { computeOptimisticRecordFromInput } from '@/object-record/utils/computeOptimisticRecordFromInput'; -import { dispatchObjectRecordOperationBrowserEvent } from '@/object-record/utils/dispatchObjectRecordOperationBrowserEvent'; -import { getUpdatedFieldsFromRecordInput } from '@/object-record/utils/getUpdatedFieldsFromRecordInput'; - -import { getUpdateOneRecordMutationResponseField } from '@/object-record/utils/getUpdateOneRecordMutationResponseField'; -import { sanitizeRecordInput } from '@/object-record/utils/sanitizeRecordInput'; -import { isNull } from '@sniptt/guards'; -import { useRecoilValue } from 'recoil'; -import { isDefined } from 'twenty-shared/utils'; -import { buildRecordFromKeysWithSameValue } from '~/utils/array/buildRecordFromKeysWithSameValue'; - -type UpdateOneRecordArgs = { - idToUpdate: string; - updateOneRecordInput: Partial>; - optimisticRecord?: Partial; - objectNameSingular: string; - recordGqlFields?: RecordGqlFields; -}; -export const useUpdateOneRecordV2 = () => { - const apolloCoreClient = useApolloCoreClient(); - const { upsertRecordsInStore } = useUpsertRecordsInStore(); - - const currentWorkspaceMember = useRecoilValue(currentWorkspaceMemberState); - - const { objectMetadataItems } = useObjectMetadataItems(); - const { objectPermissionsByObjectMetadataId } = useObjectPermissions(); - - const updateOneRecord = async < - UpdatedObjectRecord extends ObjectRecord = ObjectRecord, - >({ - objectNameSingular, - recordGqlFields, - idToUpdate, - updateOneRecordInput, - optimisticRecord, - }: UpdateOneRecordArgs) => { - const objectMetadataItem = objectMetadataItems.find( - (objectMetadataItem) => - objectMetadataItem.nameSingular === objectNameSingular, - ); - - if (!objectMetadataItem) { - throw new Error( - `Object metadata item not found for ${objectNameSingular}`, - ); - } - - const computedRecordGqlFields = - recordGqlFields ?? - generateDepthRecordGqlFieldsFromObject({ - objectMetadataItem, - objectMetadataItems, - depth: 1, - }); - - const optimisticRecordInput = - optimisticRecord ?? - computeOptimisticRecordFromInput({ - objectMetadataItem, - currentWorkspaceMember: currentWorkspaceMember, - recordInput: updateOneRecordInput, - cache: apolloCoreClient.cache, - objectMetadataItems, - objectPermissionsByObjectMetadataId, - }); - const cachedRecord = getRecordFromCache({ - cache: apolloCoreClient.cache, - objectMetadataItem, - objectMetadataItems, - recordId: idToUpdate, - recordGqlFields: computedRecordGqlFields, - objectPermissionsByObjectMetadataId, - }); - const cachedRecordWithConnection = getRecordNodeFromRecord({ - record: cachedRecord, - objectMetadataItem, - objectMetadataItems, - recordGqlFields: computedRecordGqlFields, - computeReferences: false, - }); - - const computedOptimisticRecord = { - ...cachedRecord, - ...optimisticRecordInput, - id: idToUpdate, - __typename: getObjectTypename(objectMetadataItem.nameSingular), - }; - - const optimisticRecordWithConnection = - getRecordNodeFromRecord({ - record: computedOptimisticRecord, - objectMetadataItem, - objectMetadataItems, - recordGqlFields: computedRecordGqlFields, - computeReferences: false, - }); - - const shouldHandleOptimisticCache = - !isNull(cachedRecord) && - isDefined(optimisticRecordWithConnection) && - isDefined(cachedRecordWithConnection); - - if (shouldHandleOptimisticCache) { - const recordGqlFields = generateDepthRecordGqlFieldsFromRecord({ - objectMetadataItem, - objectMetadataItems, - record: optimisticRecordInput, - depth: 1, - }); - - updateRecordFromCache({ - objectMetadataItems, - objectMetadataItem, - cache: apolloCoreClient.cache, - record: computedOptimisticRecord, - recordGqlFields, - objectPermissionsByObjectMetadataId, - }); - - triggerUpdateRecordOptimisticEffect({ - cache: apolloCoreClient.cache, - objectMetadataItem, - currentRecord: cachedRecordWithConnection, - updatedRecord: optimisticRecordWithConnection, - objectMetadataItems, - objectPermissionsByObjectMetadataId, - upsertRecordsInStore, - }); - } - - const mutationResponseField = - getUpdateOneRecordMutationResponseField(objectNameSingular); - - const sanitizedInput = { - ...sanitizeRecordInput({ - objectMetadataItem, - recordInput: updateOneRecordInput, - }), - }; - - const updateOneRecordMutation = generateUpdateOneRecordMutation({ - objectMetadataItem, - objectMetadataItems, - recordGqlFields, - computeReferences: false, - objectPermissionsByObjectMetadataId, - }); - - const updatedRecord = await apolloCoreClient - .mutate({ - mutation: updateOneRecordMutation, - variables: { - idToUpdate, - input: sanitizedInput, - }, - update: (cache, { data }) => { - const record = data?.[mutationResponseField]; - if (!isDefined(record)) return; - - const recordToUpsert = getRecordFromRecordNode({ - recordNode: record, - }); - upsertRecordsInStore({ partialRecords: [recordToUpsert] }); - - triggerUpdateRecordOptimisticEffect({ - cache, - objectMetadataItem, - currentRecord: computedOptimisticRecord, - updatedRecord: record, - objectMetadataItems, - objectPermissionsByObjectMetadataId, - upsertRecordsInStore, - }); - }, - }) - .catch((error: Error) => { - if (!shouldHandleOptimisticCache) { - throw error; - } - const cachedRecordKeys = new Set(Object.keys(cachedRecord)); - const recordKeysAddedByOptimisticCache = Object.keys( - optimisticRecordInput, - ).filter((diffKey) => !cachedRecordKeys.has(diffKey)); - - const recordGqlFields = { - ...generateDepthRecordGqlFieldsFromRecord({ - objectMetadataItem, - objectMetadataItems, - record: cachedRecord, - depth: 1, - }), - ...buildRecordFromKeysWithSameValue( - recordKeysAddedByOptimisticCache, - true, - ), - }; - - updateRecordFromCache({ - objectMetadataItems, - objectMetadataItem, - cache: apolloCoreClient.cache, - record: { - ...cachedRecord, - ...buildRecordFromKeysWithSameValue( - recordKeysAddedByOptimisticCache, - null, - ), - }, - recordGqlFields, - objectPermissionsByObjectMetadataId, - }); - - triggerUpdateRecordOptimisticEffect({ - cache: apolloCoreClient.cache, - objectMetadataItem, - currentRecord: optimisticRecordWithConnection, - updatedRecord: cachedRecordWithConnection, - objectMetadataItems, - upsertRecordsInStore, - objectPermissionsByObjectMetadataId, - }); - - throw error; - }); - - dispatchObjectRecordOperationBrowserEvent({ - objectMetadataItem, - operation: { - type: 'update-one', - result: { - updateInput: { - recordId: idToUpdate, - updatedFields: - getUpdatedFieldsFromRecordInput(updateOneRecordInput), - }, - }, - }, - }); - - return updatedRecord?.data?.[mutationResponseField] ?? null; - }; - - return { - updateOneRecord, - }; -}; diff --git a/packages/twenty-front/src/modules/object-record/record-board/components/RecordBoardContainer.tsx b/packages/twenty-front/src/modules/object-record/record-board/components/RecordBoardContainer.tsx index 10afdca1394..00539c80084 100644 --- a/packages/twenty-front/src/modules/object-record/record-board/components/RecordBoardContainer.tsx +++ b/packages/twenty-front/src/modules/object-record/record-board/components/RecordBoardContainer.tsx @@ -40,12 +40,21 @@ export const RecordBoardContainer = ({ ); const { deleteOneRecord } = useDeleteOneRecord({ objectNameSingular }); - const { updateOneRecord } = useUpdateOneRecord({ objectNameSingular }); + const { updateOneRecord: updateOneRecordHook } = useUpdateOneRecord(); const { createOneRecord } = useCreateOneRecord({ objectNameSingular, shouldMatchRootQueryFilter: true, }); + const updateOneRecord = (args: { + idToUpdate: string; + updateOneRecordInput: Record; + }) => + updateOneRecordHook({ + objectNameSingular, + ...args, + }); + const isRecordIndexRemoveSortingModalOpened = useRecoilComponentValue( isModalOpenedComponentState, RECORD_INDEX_REMOVE_SORTING_MODAL_ID, diff --git a/packages/twenty-front/src/modules/object-record/record-calendar/record-calendar-card/components/RecordCalendarCardBody.tsx b/packages/twenty-front/src/modules/object-record/record-calendar/record-calendar-card/components/RecordCalendarCardBody.tsx index fe01a6a3142..5bd85d27e03 100644 --- a/packages/twenty-front/src/modules/object-record/record-calendar/record-calendar-card/components/RecordCalendarCardBody.tsx +++ b/packages/twenty-front/src/modules/object-record/record-calendar/record-calendar-card/components/RecordCalendarCardBody.tsx @@ -35,13 +35,12 @@ export const RecordCalendarCardBody = ({ const { objectPermissions, objectMetadataItem } = useRecordCalendarContextOrThrow(); - const { updateOneRecord } = useUpdateOneRecord({ - objectNameSingular: objectMetadataItem.nameSingular, - }); + const { updateOneRecord } = useUpdateOneRecord(); const useUpdateOneRecordHook: RecordUpdateHook = () => { const updateEntity = ({ variables }: RecordUpdateHookParams) => { - updateOneRecord?.({ + updateOneRecord({ + objectNameSingular: objectMetadataItem.nameSingular, idToUpdate: variables.where.id as string, updateOneRecordInput: variables.updateOneRecordInput, }); diff --git a/packages/twenty-front/src/modules/object-record/record-drag/hooks/useProcessCalendarCardDrop.ts b/packages/twenty-front/src/modules/object-record/record-drag/hooks/useProcessCalendarCardDrop.ts index 7e4f0265509..b59859fc267 100644 --- a/packages/twenty-front/src/modules/object-record/record-drag/hooks/useProcessCalendarCardDrop.ts +++ b/packages/twenty-front/src/modules/object-record/record-drag/hooks/useProcessCalendarCardDrop.ts @@ -18,9 +18,7 @@ import { isDefined } from 'twenty-shared/utils'; export const useProcessCalendarCardDrop = () => { const { objectMetadataItem } = useRecordCalendarContextOrThrow(); const { currentView } = useGetCurrentViewOnly(); - const { updateOneRecord } = useUpdateOneRecord({ - objectNameSingular: objectMetadataItem.nameSingular, - }); + const { updateOneRecord } = useUpdateOneRecord(); const { userTimezone } = useUserTimezone(); @@ -107,6 +105,7 @@ export const useProcessCalendarCardDrop = () => { if (calendarFieldMetadata.type === FieldMetadataType.DATE) { await updateOneRecord({ + objectNameSingular: objectMetadataItem.nameSingular, idToUpdate: recordId, updateOneRecordInput: { [calendarFieldMetadata.name]: destinationPlainDate.toString(), @@ -127,6 +126,7 @@ export const useProcessCalendarCardDrop = () => { ); await updateOneRecord({ + objectNameSingular: objectMetadataItem.nameSingular, idToUpdate: recordId, updateOneRecordInput: { [calendarFieldMetadata.name]: newDate.toInstant().toString(), @@ -137,6 +137,7 @@ export const useProcessCalendarCardDrop = () => { }, [ currentView, + objectMetadataItem.nameSingular, objectMetadataItem.fields, calendarDayRecordIdsSelector, userTimezone, diff --git a/packages/twenty-front/src/modules/object-record/record-drag/hooks/useProcessTableWithGroupRecordDrop.ts b/packages/twenty-front/src/modules/object-record/record-drag/hooks/useProcessTableWithGroupRecordDrop.ts index 16ade268318..e572e7aa521 100644 --- a/packages/twenty-front/src/modules/object-record/record-drag/hooks/useProcessTableWithGroupRecordDrop.ts +++ b/packages/twenty-front/src/modules/object-record/record-drag/hooks/useProcessTableWithGroupRecordDrop.ts @@ -22,9 +22,7 @@ export const useProcessTableWithGroupRecordDrop = () => { const { objectNameSingular, objectMetadataItem, recordTableId } = useRecordTableContextOrThrow(); - const { updateOneRecord: updateOneRow } = useUpdateOneRecord({ - objectNameSingular, - }); + const { updateOneRecord } = useUpdateOneRecord(); const { openModal } = useModal(); @@ -105,7 +103,8 @@ export const useProcessTableWithGroupRecordDrop = () => { selectedRecordIds, recordIdsByGroupFamilyState: recordIdsByGroupFamilyState, onUpdateRecord: ({ recordId, position }) => { - updateOneRow({ + updateOneRecord({ + objectNameSingular, idToUpdate: recordId, updateOneRecordInput: { position, @@ -116,6 +115,7 @@ export const useProcessTableWithGroupRecordDrop = () => { }); }, [ + objectNameSingular, objectMetadataItem.fields, originalDragSelectionCallbackState, isDraggingRecordCallbackState, @@ -124,7 +124,7 @@ export const useProcessTableWithGroupRecordDrop = () => { recordIdsByGroupFamilyState, groupFieldMetadata?.id, openModal, - updateOneRow, + updateOneRecord, ], ); diff --git a/packages/twenty-front/src/modules/object-record/record-drag/hooks/useProcessTableWithoutGroupRecordDrop.ts b/packages/twenty-front/src/modules/object-record/record-drag/hooks/useProcessTableWithoutGroupRecordDrop.ts index 96b0d2c55fc..1af82c8e5b1 100644 --- a/packages/twenty-front/src/modules/object-record/record-drag/hooks/useProcessTableWithoutGroupRecordDrop.ts +++ b/packages/twenty-front/src/modules/object-record/record-drag/hooks/useProcessTableWithoutGroupRecordDrop.ts @@ -24,9 +24,7 @@ import { isDefined } from 'twenty-shared/utils'; export const useProcessTableWithoutGroupRecordDrop = () => { const { objectNameSingular } = useRecordTableContextOrThrow(); - const { updateOneRecord: updateOneRow } = useUpdateOneRecord({ - objectNameSingular, - }); + const { updateOneRecord } = useUpdateOneRecord(); const allRecordIdsWithoutGroupCallbackSelector = useRecoilComponentCallbackState(allRecordIdsWithoutGroupsComponentSelector); @@ -116,7 +114,8 @@ export const useProcessTableWithoutGroupRecordDrop = () => { singleDragResult, ]); - updateOneRow({ + updateOneRecord({ + objectNameSingular, idToUpdate: singleDragResult.id, updateOneRecordInput: { position: singleDragResult.position, @@ -151,7 +150,8 @@ export const useProcessTableWithoutGroupRecordDrop = () => { ); for (const update of multiDragResult.recordUpdates) { - updateOneRow({ + updateOneRecord({ + objectNameSingular, idToUpdate: update.id, updateOneRecordInput: { position: update.position, @@ -161,8 +161,9 @@ export const useProcessTableWithoutGroupRecordDrop = () => { } }, [ + objectNameSingular, selectedRowIdsSelector, - updateOneRow, + updateOneRecord, openModal, currentRecordSorts, originalDragSelectionCallbackState, diff --git a/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationRecordsListItem.tsx b/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationRecordsListItem.tsx index 03e58347b6b..3f092cb56c7 100644 --- a/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationRecordsListItem.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationRecordsListItem.tsx @@ -140,9 +140,7 @@ export const RecordDetailRelationRecordsListItem = ({ relationObjectMetadataItem.id, ); - const { updateOneRecord: updateOneRelationRecord } = useUpdateOneRecord({ - objectNameSingular: relationObjectMetadataNameSingular, - }); + const { updateOneRecord: updateOneRelationRecord } = useUpdateOneRecord(); const { deleteOneRecord: deleteOneRelationRecord } = useDeleteOneRecord({ objectNameSingular: relationObjectMetadataNameSingular, }); @@ -204,6 +202,7 @@ export const RecordDetailRelationRecordsListItem = ({ onSubmit?.({ newValue: null }); } else { updateOneRelationRecord({ + objectNameSingular: relationObjectMetadataNameSingular, idToUpdate: relationRecord.id, updateOneRecordInput, }); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/components/FieldContextProvider.tsx b/packages/twenty-front/src/modules/object-record/record-field/ui/components/FieldContextProvider.tsx index f938da17bee..9fa0db8c2aa 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/components/FieldContextProvider.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/components/FieldContextProvider.tsx @@ -42,13 +42,12 @@ export const FieldContextProvider = ({ (field) => field.name === fieldMetadataName, ); - const useUpdateOneObjectMutation: RecordUpdateHook = () => { - const { updateOneRecord } = useUpdateOneRecord({ - objectNameSingular, - }); + const { updateOneRecord } = useUpdateOneRecord(); + const useUpdateOneObjectMutation: RecordUpdateHook = () => { const updateEntity = ({ variables }: RecordUpdateHookParams) => { - updateOneRecord?.({ + updateOneRecord({ + objectNameSingular, idToUpdate: variables.where.id as string, updateOneRecordInput: variables.updateOneRecordInput, }); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/__tests__/useToggleEditOnlyInput.test.tsx b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/__tests__/useToggleEditOnlyInput.test.tsx index 5f613446a22..85322b9368a 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/__tests__/useToggleEditOnlyInput.test.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/__tests__/useToggleEditOnlyInput.test.tsx @@ -52,12 +52,11 @@ const mocks: MockedResponse[] = [ const Wrapper = ({ children }: { children: ReactNode }) => { const useUpdateOneRecordMutation: RecordUpdateHook = () => { - const { updateOneRecord } = useUpdateOneRecord({ - objectNameSingular: CoreObjectNameSingular.Company, - }); + const { updateOneRecord } = useUpdateOneRecord(); const updateEntity = ({ variables }: RecordUpdateHookParams) => { - updateOneRecord?.({ + updateOneRecord({ + objectNameSingular: CoreObjectNameSingular.Company, idToUpdate: variables.where.id as string, updateOneRecordInput: variables.updateOneRecordInput, }); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/usePersistField.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/usePersistField.ts index 827f5606e2f..29ea0aaf836 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/usePersistField.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/usePersistField.ts @@ -33,28 +33,28 @@ import { isFieldArray } from '@/object-record/record-field/ui/types/guards/isFie import { isFieldArrayValue } from '@/object-record/record-field/ui/types/guards/isFieldArrayValue'; import { isFieldFiles } from '@/object-record/record-field/ui/types/guards/isFieldFiles'; import { isFieldFilesValue } from '@/object-record/record-field/ui/types/guards/isFieldFilesValue'; -import { isFieldMorphRelationManyToOne } from '@/object-record/record-field/ui/types/guards/isFieldMorphRelationManyToOne'; -import { isFieldRelationManyToOne } from '@/object-record/record-field/ui/types/guards/isFieldRelationManyToOne'; -import { isFieldRelationManyToOneValue } from '@/object-record/record-field/ui/types/guards/isFieldRelationManyToOneValue'; -import { isFieldRichText } from '@/object-record/record-field/ui/types/guards/isFieldRichText'; -import { isFieldRichTextV2 } from '@/object-record/record-field/ui/types/guards/isFieldRichTextV2'; -import { isFieldRichTextValue } from '@/object-record/record-field/ui/types/guards/isFieldRichTextValue'; -import { isFieldRichTextV2Value } from '@/object-record/record-field/ui/types/guards/isFieldRichTextValueV2'; -import { useUpsertRecordsInStore } from '@/object-record/record-store/hooks/useUpsertRecordsInStore'; -import { getForeignKeyNameFromRelationFieldName } from '@/object-record/utils/getForeignKeyNameFromRelationFieldName'; -import { isDeeplyEqual } from '~/utils/isDeeplyEqual'; import { isFieldBoolean } from '@/object-record/record-field/ui/types/guards/isFieldBoolean'; import { isFieldBooleanValue } from '@/object-record/record-field/ui/types/guards/isFieldBooleanValue'; import { isFieldCurrency } from '@/object-record/record-field/ui/types/guards/isFieldCurrency'; import { isFieldCurrencyValue } from '@/object-record/record-field/ui/types/guards/isFieldCurrencyValue'; import { isFieldDateTime } from '@/object-record/record-field/ui/types/guards/isFieldDateTime'; import { isFieldDateTimeValue } from '@/object-record/record-field/ui/types/guards/isFieldDateTimeValue'; +import { isFieldMorphRelationManyToOne } from '@/object-record/record-field/ui/types/guards/isFieldMorphRelationManyToOne'; import { isFieldNumber } from '@/object-record/record-field/ui/types/guards/isFieldNumber'; import { isFieldNumberValue } from '@/object-record/record-field/ui/types/guards/isFieldNumberValue'; import { isFieldRating } from '@/object-record/record-field/ui/types/guards/isFieldRating'; import { isFieldRatingValue } from '@/object-record/record-field/ui/types/guards/isFieldRatingValue'; +import { isFieldRelationManyToOne } from '@/object-record/record-field/ui/types/guards/isFieldRelationManyToOne'; +import { isFieldRelationManyToOneValue } from '@/object-record/record-field/ui/types/guards/isFieldRelationManyToOneValue'; +import { isFieldRichText } from '@/object-record/record-field/ui/types/guards/isFieldRichText'; +import { isFieldRichTextV2 } from '@/object-record/record-field/ui/types/guards/isFieldRichTextV2'; +import { isFieldRichTextValue } from '@/object-record/record-field/ui/types/guards/isFieldRichTextValue'; +import { isFieldRichTextV2Value } from '@/object-record/record-field/ui/types/guards/isFieldRichTextValueV2'; import { isFieldText } from '@/object-record/record-field/ui/types/guards/isFieldText'; import { isFieldTextValue } from '@/object-record/record-field/ui/types/guards/isFieldTextValue'; +import { useUpsertRecordsInStore } from '@/object-record/record-store/hooks/useUpsertRecordsInStore'; +import { getForeignKeyNameFromRelationFieldName } from '@/object-record/utils/getForeignKeyNameFromRelationFieldName'; +import { isDeeplyEqual } from '~/utils/isDeeplyEqual'; export const usePersistField = ({ objectMetadataItemId, @@ -65,9 +65,7 @@ export const usePersistField = ({ objectId: objectMetadataItemId, }); - const { updateOneRecord } = useUpdateOneRecord({ - objectNameSingular: objectMetadataItem?.nameSingular ?? '', - }); + const { updateOneRecord } = useUpdateOneRecord(); const { upsertRecordsInStore } = useUpsertRecordsInStore(); @@ -200,7 +198,8 @@ export const usePersistField = ({ return; } - const newRecord = await updateOneRecord?.({ + const newRecord = await updateOneRecord({ + objectNameSingular: objectMetadataItem.nameSingular, idToUpdate: recordId, updateOneRecordInput: { [getForeignKeyNameFromRelationFieldName(fieldName)]: @@ -226,7 +225,8 @@ export const usePersistField = ({ return; } - const newRecord = await updateOneRecord?.({ + const newRecord = await updateOneRecord({ + objectNameSingular: objectMetadataItem.nameSingular, idToUpdate: recordId, updateOneRecordInput: { [getForeignKeyNameFromRelationFieldName(fieldName)]: @@ -241,6 +241,7 @@ export const usePersistField = ({ }), ], }); + return; } @@ -248,12 +249,14 @@ export const usePersistField = ({ return; } - updateOneRecord?.({ + updateOneRecord({ + objectNameSingular: objectMetadataItem.nameSingular, idToUpdate: recordId, updateOneRecordInput: { [fieldName]: valueToPersist, }, }); + set( recordStoreFamilySelector({ recordId, fieldName }), valueToPersist, @@ -268,7 +271,7 @@ export const usePersistField = ({ ); } }, - [updateOneRecord, upsertRecordsInStore], + [objectMetadataItem?.nameSingular, updateOneRecord, upsertRecordsInStore], ); return persistField; diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/__tests__/useMorphPersistManyToOne.test.tsx b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/__tests__/useMorphPersistManyToOne.test.tsx index febf26ca47f..2ea24000538 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/__tests__/useMorphPersistManyToOne.test.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/__tests__/useMorphPersistManyToOne.test.tsx @@ -9,8 +9,8 @@ import { FieldMetadataType, RelationType } from 'twenty-shared/types'; const mockUpdateOneRecord = jest.fn(); -jest.mock('@/object-record/hooks/useUpdateOneRecordV2', () => ({ - useUpdateOneRecordV2: () => ({ +jest.mock('@/object-record/hooks/useUpdateOneRecord', () => ({ + useUpdateOneRecord: () => ({ updateOneRecord: mockUpdateOneRecord, }), })); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useAddNewRecordAndOpenRightDrawer.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useAddNewRecordAndOpenRightDrawer.ts index 2ef825cf368..bafe9b03669 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useAddNewRecordAndOpenRightDrawer.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useAddNewRecordAndOpenRightDrawer.ts @@ -8,7 +8,7 @@ import { type FieldMetadataItem } from '@/object-metadata/types/FieldMetadataIte import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { useCreateOneRecord } from '@/object-record/hooks/useCreateOneRecord'; -import { useUpdateOneRecordV2 } from '@/object-record/hooks/useUpdateOneRecordV2'; +import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { viewableRecordIdState } from '@/object-record/record-right-drawer/states/viewableRecordIdState'; import { viewableRecordNameSingularState } from '@/object-record/record-right-drawer/states/viewableRecordNameSingularState'; import { buildRecordLabelPayload } from '@/object-record/utils/buildRecordLabelPayload'; @@ -42,7 +42,7 @@ export const useAddNewRecordAndOpenRightDrawer = ({ objectNameSingular: relationObjectMetadataNameSingular, }); - const { updateOneRecord } = useUpdateOneRecordV2(); + const { updateOneRecord } = useUpdateOneRecord(); const { openRecordInCommandMenu } = useOpenRecordInCommandMenu(); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useMorphPersistManyToOne.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useMorphPersistManyToOne.ts index 7f012160f5e..1d57e9a59fd 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useMorphPersistManyToOne.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useMorphPersistManyToOne.ts @@ -6,7 +6,7 @@ import { recordStoreFamilySelector } from '@/object-record/record-store/states/s import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; -import { useUpdateOneRecordV2 } from '@/object-record/hooks/useUpdateOneRecordV2'; +import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { assertFieldMetadata } from '@/object-record/record-field/ui/types/guards/assertFieldMetadata'; import { isFieldMorphRelation } from '@/object-record/record-field/ui/types/guards/isFieldMorphRelation'; import { buildRecordWithAllMorphObjectIdsToNull } from '@/object-record/record-field/ui/meta-types/input/utils/buildRecordWithAllMorphObjectIdsToNull'; @@ -23,7 +23,7 @@ export const useMorphPersistManyToOne = ({ }: MorphPersistManyToOneProps) => { const { objectMetadataItems } = useObjectMetadataItems(); - const { updateOneRecord } = useUpdateOneRecordV2(); + const { updateOneRecord } = useUpdateOneRecord(); const persistMorphManyToOne = useRecoilCallback( ({ snapshot }) => @@ -104,7 +104,7 @@ export const useMorphPersistManyToOne = ({ relationType: fieldDefinition.metadata.relationType, }); - updateOneRecord?.({ + updateOneRecord({ objectNameSingular: objectMetadataNameSingular, idToUpdate: recordId, updateOneRecordInput: { diff --git a/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexTableContainer.tsx b/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexTableContainer.tsx index 4caf3ac7bee..9ec4bd83a3f 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexTableContainer.tsx +++ b/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexTableContainer.tsx @@ -22,12 +22,11 @@ export const RecordIndexTableContainer = ({ RECORD_INDEX_REMOVE_SORTING_MODAL_ID, ); - const { updateOneRecord } = useUpdateOneRecord({ - objectNameSingular, - }); + const { updateOneRecord } = useUpdateOneRecord(); const updateEntity = ({ variables }: RecordUpdateHookParams) => { - updateOneRecord?.({ + updateOneRecord({ + objectNameSingular, idToUpdate: variables.where.id as string, updateOneRecordInput: variables.updateOneRecordInput, }); diff --git a/packages/twenty-front/src/modules/object-record/record-inline-cell/components/RecordInlineCellAnchoredPortal.tsx b/packages/twenty-front/src/modules/object-record/record-inline-cell/components/RecordInlineCellAnchoredPortal.tsx index a2afe362db8..4d1ed2e0a6e 100644 --- a/packages/twenty-front/src/modules/object-record/record-inline-cell/components/RecordInlineCellAnchoredPortal.tsx +++ b/packages/twenty-front/src/modules/object-record/record-inline-cell/components/RecordInlineCellAnchoredPortal.tsx @@ -52,13 +52,12 @@ export const RecordInlineCellAnchoredPortal = ({ recordId: recordId ?? '', }); - const { updateOneRecord } = useUpdateOneRecord({ - objectNameSingular: objectMetadataItem.nameSingular, - }); + const { updateOneRecord } = useUpdateOneRecord(); const useUpdateOneObjectRecordMutation: RecordUpdateHook = () => { const updateEntity = ({ variables }: RecordUpdateHookParams) => { - updateOneRecord?.({ + updateOneRecord({ + objectNameSingular: objectMetadataItem.nameSingular, idToUpdate: variables.where.id as string, updateOneRecordInput: variables.updateOneRecordInput, }); diff --git a/packages/twenty-front/src/modules/object-record/record-show/hooks/useRecordShowContainerActions.ts b/packages/twenty-front/src/modules/object-record/record-show/hooks/useRecordShowContainerActions.ts index 7f4ca029fa4..633282092a5 100644 --- a/packages/twenty-front/src/modules/object-record/record-show/hooks/useRecordShowContainerActions.ts +++ b/packages/twenty-front/src/modules/object-record/record-show/hooks/useRecordShowContainerActions.ts @@ -7,7 +7,6 @@ import { FileFolder, useUploadImageMutation, } from '~/generated-metadata/graphql'; -import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull'; interface UseRecordShowContainerActionsProps { objectNameSingular: string; @@ -19,11 +18,12 @@ export const useRecordShowContainerActions = ({ objectRecordId, }: UseRecordShowContainerActionsProps) => { const [uploadImage] = useUploadImageMutation(); - const { updateOneRecord } = useUpdateOneRecord({ objectNameSingular }); + const { updateOneRecord } = useUpdateOneRecord(); const useUpdateOneObjectRecordMutation: RecordUpdateHook = () => { const updateEntity = ({ variables }: RecordUpdateHookParams) => { - updateOneRecord?.({ + updateOneRecord({ + objectNameSingular, idToUpdate: variables.where.id as string, updateOneRecordInput: variables.updateOneRecordInput, }); @@ -46,11 +46,12 @@ export const useRecordShowContainerActions = ({ const avatarSignedFile = result?.data?.uploadImage; - if (!avatarSignedFile || isUndefinedOrNull(updateOneRecord)) { + if (!avatarSignedFile) { return; } await updateOneRecord({ + objectNameSingular, idToUpdate: objectRecordId, updateOneRecordInput: { avatarUrl: avatarSignedFile.path, diff --git a/packages/twenty-front/src/modules/page-layout/widgets/field/components/FieldWidgetMorphRelationCard.tsx b/packages/twenty-front/src/modules/page-layout/widgets/field/components/FieldWidgetMorphRelationCard.tsx index d906607eccb..d5266c60bf8 100644 --- a/packages/twenty-front/src/modules/page-layout/widgets/field/components/FieldWidgetMorphRelationCard.tsx +++ b/packages/twenty-front/src/modules/page-layout/widgets/field/components/FieldWidgetMorphRelationCard.tsx @@ -71,9 +71,7 @@ export const FieldWidgetMorphRelationCard = ({ objectNameSingular: targetRecord.targetObjectNameSingular, }); - const { updateOneRecord } = useUpdateOneRecord({ - objectNameSingular: targetRecord.targetObjectNameSingular, - }); + const { updateOneRecord } = useUpdateOneRecord(); const useUpdateOneObjectRecordMutation = () => { const updateEntity = ({ @@ -84,7 +82,8 @@ export const FieldWidgetMorphRelationCard = ({ updateOneRecordInput: Record; }; }) => { - updateOneRecord?.({ + updateOneRecord({ + objectNameSingular: targetRecord.targetObjectNameSingular, idToUpdate: variables.where.id, updateOneRecordInput: variables.updateOneRecordInput, }); diff --git a/packages/twenty-front/src/modules/page-layout/widgets/field/components/FieldWidgetRelationCard.tsx b/packages/twenty-front/src/modules/page-layout/widgets/field/components/FieldWidgetRelationCard.tsx index f6908c44adc..613998efc6e 100644 --- a/packages/twenty-front/src/modules/page-layout/widgets/field/components/FieldWidgetRelationCard.tsx +++ b/packages/twenty-front/src/modules/page-layout/widgets/field/components/FieldWidgetRelationCard.tsx @@ -72,9 +72,7 @@ export const FieldWidgetRelationCard = ({ objectNameSingular: targetRecord.targetObjectNameSingular, }); - const { updateOneRecord } = useUpdateOneRecord({ - objectNameSingular: targetRecord.targetObjectNameSingular, - }); + const { updateOneRecord } = useUpdateOneRecord(); const useUpdateOneObjectRecordMutation = () => { const updateEntity = ({ @@ -85,7 +83,8 @@ export const FieldWidgetRelationCard = ({ updateOneRecordInput: Record; }; }) => { - updateOneRecord?.({ + updateOneRecord({ + objectNameSingular: targetRecord.targetObjectNameSingular, idToUpdate: variables.where.id, updateOneRecordInput: variables.updateOneRecordInput, }); diff --git a/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsCalendarChannelDetails.tsx b/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsCalendarChannelDetails.tsx index 3610ac80696..1b71c4dfaf4 100644 --- a/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsCalendarChannelDetails.tsx +++ b/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsCalendarChannelDetails.tsx @@ -4,11 +4,11 @@ import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { SettingsAccountsEventVisibilitySettingsCard } from '@/settings/accounts/components/SettingsAccountsCalendarVisibilitySettingsCard'; import { SettingsOptionCardContentToggle } from '@/settings/components/SettingsOptions/SettingsOptionCardContentToggle'; import styled from '@emotion/styled'; -import { Section } from '@react-email/components'; -import { type CalendarChannelVisibility } from '~/generated-metadata/graphql'; import { t } from '@lingui/core/macro'; -import { Card } from 'twenty-ui/layout'; +import { Section } from '@react-email/components'; import { H2Title, IconUserPlus } from 'twenty-ui/display'; +import { Card } from 'twenty-ui/layout'; +import { type CalendarChannelVisibility } from '~/generated-metadata/graphql'; const StyledDetailsContainer = styled.div` display: flex; @@ -26,12 +26,11 @@ type SettingsAccountsCalendarChannelDetailsProps = { export const SettingsAccountsCalendarChannelDetails = ({ calendarChannel, }: SettingsAccountsCalendarChannelDetailsProps) => { - const { updateOneRecord } = useUpdateOneRecord({ - objectNameSingular: CoreObjectNameSingular.CalendarChannel, - }); + const { updateOneRecord } = useUpdateOneRecord(); const handleVisibilityChange = (value: CalendarChannelVisibility) => { updateOneRecord({ + objectNameSingular: CoreObjectNameSingular.CalendarChannel, idToUpdate: calendarChannel.id, updateOneRecordInput: { visibility: value, @@ -41,6 +40,7 @@ export const SettingsAccountsCalendarChannelDetails = ({ const handleContactAutoCreationToggle = (value: boolean) => { updateOneRecord({ + objectNameSingular: CoreObjectNameSingular.CalendarChannel, idToUpdate: calendarChannel.id, updateOneRecordInput: { isContactAutoCreationEnabled: value, diff --git a/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsMessageChannelDetails.tsx b/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsMessageChannelDetails.tsx index e335bcf87ed..776be8b0466 100644 --- a/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsMessageChannelDetails.tsx +++ b/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsMessageChannelDetails.tsx @@ -39,12 +39,11 @@ const StyledDetailsContainer = styled.div` export const SettingsAccountsMessageChannelDetails = ({ messageChannel, }: SettingsAccountsMessageChannelDetailsProps) => { - const { updateOneRecord } = useUpdateOneRecord({ - objectNameSingular: CoreObjectNameSingular.MessageChannel, - }); + const { updateOneRecord } = useUpdateOneRecord(); const handleVisibilityChange = (value: MessageChannelVisibility) => { updateOneRecord({ + objectNameSingular: CoreObjectNameSingular.MessageChannel, idToUpdate: messageChannel.id, updateOneRecordInput: { visibility: value, @@ -56,6 +55,7 @@ export const SettingsAccountsMessageChannelDetails = ({ value: MessageChannelContactAutoCreationPolicy, ) => { updateOneRecord({ + objectNameSingular: CoreObjectNameSingular.MessageChannel, idToUpdate: messageChannel.id, updateOneRecordInput: { contactAutoCreationPolicy: value, @@ -65,6 +65,7 @@ export const SettingsAccountsMessageChannelDetails = ({ const handleIsGroupEmailExcludedToggle = (value: boolean) => { updateOneRecord({ + objectNameSingular: CoreObjectNameSingular.MessageChannel, idToUpdate: messageChannel.id, updateOneRecordInput: { excludeGroupEmails: value, @@ -74,6 +75,7 @@ export const SettingsAccountsMessageChannelDetails = ({ const handleIsNonProfessionalEmailExcludedToggle = (value: boolean) => { updateOneRecord({ + objectNameSingular: CoreObjectNameSingular.MessageChannel, idToUpdate: messageChannel.id, updateOneRecordInput: { excludeNonProfessionalEmails: value, @@ -85,6 +87,7 @@ export const SettingsAccountsMessageChannelDetails = ({ value: MessageFolderImportPolicy, ) => { updateOneRecord({ + objectNameSingular: CoreObjectNameSingular.MessageChannel, idToUpdate: messageChannel.id, updateOneRecordInput: { messageFolderImportPolicy: value }, }); diff --git a/packages/twenty-front/src/modules/settings/profile/components/NameFields.tsx b/packages/twenty-front/src/modules/settings/profile/components/NameFields.tsx index a5082b0098d..045dbfe5860 100644 --- a/packages/twenty-front/src/modules/settings/profile/components/NameFields.tsx +++ b/packages/twenty-front/src/modules/settings/profile/components/NameFields.tsx @@ -40,9 +40,7 @@ export const NameFields = ({ autoSave = true }: NameFieldsProps) => { currentWorkspaceMember?.name?.lastName ?? '', ); - const { updateOneRecord } = useUpdateOneRecord({ - objectNameSingular: CoreObjectNameSingular.WorkspaceMember, - }); + const { updateOneRecord } = useUpdateOneRecord(); // TODO: Enhance this with react-web-hook-form (https://www.react-hook-form.com) const debouncedUpdate = useDebouncedCallback(async () => { @@ -53,6 +51,7 @@ export const NameFields = ({ autoSave = true }: NameFieldsProps) => { if (autoSave) { await updateOneRecord({ + objectNameSingular: CoreObjectNameSingular.WorkspaceMember, idToUpdate: currentWorkspaceMember?.id, updateOneRecordInput: { name: { diff --git a/packages/twenty-front/src/modules/settings/workspace-member/components/WorkspaceMemberPictureUploader.tsx b/packages/twenty-front/src/modules/settings/workspace-member/components/WorkspaceMemberPictureUploader.tsx index 1ec39d257fc..ffc8c994e58 100644 --- a/packages/twenty-front/src/modules/settings/workspace-member/components/WorkspaceMemberPictureUploader.tsx +++ b/packages/twenty-front/src/modules/settings/workspace-member/components/WorkspaceMemberPictureUploader.tsx @@ -38,9 +38,7 @@ export const WorkspaceMemberPictureUploader = ({ const [uploadPicture] = useMutation(UPLOAD_WORKSPACE_MEMBER_PROFILE_PICTURE); - const { updateOneRecord } = useUpdateOneRecord({ - objectNameSingular: CoreObjectNameSingular.WorkspaceMember, - }); + const { updateOneRecord } = useUpdateOneRecord(); const { canEdit: canEditProfilePicture } = useCanEditProfileField('profilePicture'); @@ -74,6 +72,7 @@ export const WorkspaceMemberPictureUploader = ({ } await updateOneRecord({ + objectNameSingular: CoreObjectNameSingular.WorkspaceMember, idToUpdate: workspaceMemberId, updateOneRecordInput: { avatarUrl: signedFile.path }, }); @@ -113,6 +112,7 @@ export const WorkspaceMemberPictureUploader = ({ try { await updateOneRecord({ + objectNameSingular: CoreObjectNameSingular.WorkspaceMember, idToUpdate: workspaceMemberId, updateOneRecordInput: { avatarUrl: '' }, }); diff --git a/packages/twenty-front/src/modules/ui/input/editor/hooks/useAttachmentSync.ts b/packages/twenty-front/src/modules/ui/input/editor/hooks/useAttachmentSync.ts index a31cb31b1d3..5c90fe71e9d 100644 --- a/packages/twenty-front/src/modules/ui/input/editor/hooks/useAttachmentSync.ts +++ b/packages/twenty-front/src/modules/ui/input/editor/hooks/useAttachmentSync.ts @@ -28,9 +28,7 @@ export const useAttachmentSync = (attachments: Attachment[]) => { }, }); - const { updateOneRecord: updateOneAttachment } = useUpdateOneRecord({ - objectNameSingular: CoreObjectNameSingular.Attachment, - }); + const { updateOneRecord } = useUpdateOneRecord(); const syncAttachments = async ( newBody: string, @@ -78,7 +76,8 @@ export const useAttachmentSync = (attachments: Attachment[]) => { for (const attachmentToUpdate of attachmentsToUpdate) { if (!attachmentToUpdate.id || !attachmentToUpdate.name) continue; - await updateOneAttachment({ + await updateOneRecord({ + objectNameSingular: CoreObjectNameSingular.Attachment, idToUpdate: attachmentToUpdate.id, updateOneRecordInput: { name: attachmentToUpdate.name }, }); diff --git a/packages/twenty-front/src/modules/ui/theme/hooks/useColorScheme.ts b/packages/twenty-front/src/modules/ui/theme/hooks/useColorScheme.ts index 631d0fb8826..c443ce9a1ac 100644 --- a/packages/twenty-front/src/modules/ui/theme/hooks/useColorScheme.ts +++ b/packages/twenty-front/src/modules/ui/theme/hooks/useColorScheme.ts @@ -18,9 +18,7 @@ export const useColorScheme = () => { currentWorkspaceMemberState, ); - const { updateOneRecord: updateOneWorkspaceMember } = useUpdateOneRecord({ - objectNameSingular: CoreObjectNameSingular.WorkspaceMember, - }); + const { updateOneRecord } = useUpdateOneRecord(); const setPersistedColorScheme = useSetRecoilState(persistedColorSchemeState); const colorScheme = currentWorkspaceMember?.colorScheme ?? 'System'; @@ -40,7 +38,8 @@ export const useColorScheme = () => { colorScheme: value, }; }); - await updateOneWorkspaceMember?.({ + await updateOneRecord({ + objectNameSingular: CoreObjectNameSingular.WorkspaceMember, idToUpdate: currentWorkspaceMember?.id, updateOneRecordInput: { colorScheme: value, @@ -51,7 +50,7 @@ export const useColorScheme = () => { currentWorkspaceMember, setCurrentWorkspaceMember, setPersistedColorScheme, - updateOneWorkspaceMember, + updateOneRecord, ], ); diff --git a/packages/twenty-front/src/modules/workflow/workflow-trigger/hooks/__tests__/useUpdateWorkflowVersionTrigger.test.ts b/packages/twenty-front/src/modules/workflow/workflow-trigger/hooks/__tests__/useUpdateWorkflowVersionTrigger.test.ts index b79f173affe..9ed5a202c43 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-trigger/hooks/__tests__/useUpdateWorkflowVersionTrigger.test.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-trigger/hooks/__tests__/useUpdateWorkflowVersionTrigger.test.ts @@ -56,6 +56,7 @@ describe('useUpdateWorkflowVersionTrigger', () => { }); expect(mockUpdateOneRecord).toHaveBeenCalledWith({ idToUpdate: 'version-id', + objectNameSingular: 'workflowVersion', updateOneRecordInput: { trigger, }, diff --git a/packages/twenty-front/src/modules/workflow/workflow-trigger/hooks/useUpdateWorkflowVersionTrigger.ts b/packages/twenty-front/src/modules/workflow/workflow-trigger/hooks/useUpdateWorkflowVersionTrigger.ts index 5d33221f629..e19c29f51f4 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-trigger/hooks/useUpdateWorkflowVersionTrigger.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-trigger/hooks/useUpdateWorkflowVersionTrigger.ts @@ -1,19 +1,13 @@ import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { useGetUpdatableWorkflowVersionOrThrow } from '@/workflow/hooks/useGetUpdatableWorkflowVersionOrThrow'; -import { - type WorkflowTrigger, - type WorkflowVersion, -} from '@/workflow/types/Workflow'; +import { type WorkflowTrigger } from '@/workflow/types/Workflow'; import { useStepsOutputSchema } from '@/workflow/workflow-variables/hooks/useStepsOutputSchema'; import { TRIGGER_STEP_ID } from 'twenty-shared/workflow'; export const useUpdateWorkflowVersionTrigger = () => { - const { updateOneRecord: updateOneWorkflowVersion } = - useUpdateOneRecord({ - objectNameSingular: CoreObjectNameSingular.WorkflowVersion, - }); + const { updateOneRecord: updateOneWorkflowVersion } = useUpdateOneRecord(); const { getUpdatableWorkflowVersion } = useGetUpdatableWorkflowVersionOrThrow(); @@ -24,6 +18,7 @@ export const useUpdateWorkflowVersionTrigger = () => { const workflowVersionId = await getUpdatableWorkflowVersion(); await updateOneWorkflowVersion({ + objectNameSingular: CoreObjectNameSingular.WorkflowVersion, idToUpdate: workflowVersionId, updateOneRecordInput: { trigger: updatedTrigger, diff --git a/packages/twenty-front/src/pages/onboarding/CreateProfile.tsx b/packages/twenty-front/src/pages/onboarding/CreateProfile.tsx index 0165ca8723d..4b87e5ad8b1 100644 --- a/packages/twenty-front/src/pages/onboarding/CreateProfile.tsx +++ b/packages/twenty-front/src/pages/onboarding/CreateProfile.tsx @@ -19,7 +19,6 @@ import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { TextInput } from '@/ui/input/components/TextInput'; import { Modal } from '@/ui/layout/modal/components/Modal'; import { useHotkeysOnFocusedElement } from '@/ui/utilities/hotkey/hooks/useHotkeysOnFocusedElement'; -import { type WorkspaceMember } from '@/workspace-member/types/WorkspaceMember'; import { ApolloError } from '@apollo/client'; import { i18n } from '@lingui/core'; import { msg } from '@lingui/core/macro'; @@ -73,9 +72,7 @@ export const CreateProfile = () => { currentWorkspaceMemberState, ); const setCurrentUser = useSetRecoilState(currentUserState); - const { updateOneRecord } = useUpdateOneRecord({ - objectNameSingular: CoreObjectNameSingular.WorkspaceMember, - }); + const { updateOneRecord } = useUpdateOneRecord(); // Form const { @@ -103,6 +100,7 @@ export const CreateProfile = () => { } await updateOneRecord({ + objectNameSingular: CoreObjectNameSingular.WorkspaceMember, idToUpdate: currentWorkspaceMember?.id, updateOneRecordInput: { name: { diff --git a/packages/twenty-front/src/pages/settings/members/SettingsWorkspaceMember.tsx b/packages/twenty-front/src/pages/settings/members/SettingsWorkspaceMember.tsx index 99a72262345..6ec9f6ce004 100644 --- a/packages/twenty-front/src/pages/settings/members/SettingsWorkspaceMember.tsx +++ b/packages/twenty-front/src/pages/settings/members/SettingsWorkspaceMember.tsx @@ -3,7 +3,6 @@ import { useDebouncedCallback } from 'use-debounce'; import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; -import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { useImpersonationAuth } from '@/settings/admin-panel/hooks/useImpersonationAuth'; import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer'; import { SettingsRolesQueryEffect } from '@/settings/roles/components/SettingsRolesQueryEffect'; @@ -24,6 +23,7 @@ import { useNavigateSettings } from '~/hooks/useNavigateSettings'; import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState'; import { isImpersonatingState } from '@/auth/states/isImpersonatingState'; +import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { MemberInfosTab } from '@/settings/members/components/MemberInfosTab'; import { MemberPermissionsTab } from '@/settings/members/components/MemberPermissionsTab'; import { useWorkspaceMemberRoles } from '@/settings/members/hooks/useWorkspaceMemberRoles'; @@ -80,9 +80,7 @@ export const SettingsWorkspaceMember = () => { tabListComponentId, ); - const { updateOneRecord } = useUpdateOneRecord({ - objectNameSingular: CoreObjectNameSingular.WorkspaceMember, - }); + const { updateOneRecord } = useUpdateOneRecord(); const [deleteUserFromWorkspace, { loading: isDeleting }] = useDeleteUserWorkspaceMutation(); @@ -98,6 +96,7 @@ export const SettingsWorkspaceMember = () => { } try { await updateOneRecord({ + objectNameSingular: CoreObjectNameSingular.WorkspaceMember, idToUpdate: member.id, updateOneRecordInput: { name: { firstName, lastName }, diff --git a/packages/twenty-front/src/pages/settings/profile/appearance/components/LocalePicker.tsx b/packages/twenty-front/src/pages/settings/profile/appearance/components/LocalePicker.tsx index 8519c4e5c4b..18cdef9322e 100644 --- a/packages/twenty-front/src/pages/settings/profile/appearance/components/LocalePicker.tsx +++ b/packages/twenty-front/src/pages/settings/profile/appearance/components/LocalePicker.tsx @@ -30,9 +30,7 @@ export const LocalePicker = () => { ); const setDateLocale = useSetRecoilState(dateLocaleState); - const { updateOneRecord } = useUpdateOneRecord({ - objectNameSingular: CoreObjectNameSingular.WorkspaceMember, - }); + const { updateOneRecord } = useUpdateOneRecord(); const { refreshObjectMetadataItems } = useRefreshObjectMetadataItems('network-only'); @@ -46,6 +44,7 @@ export const LocalePicker = () => { try { await updateOneRecord({ + objectNameSingular: CoreObjectNameSingular.WorkspaceMember, idToUpdate: currentWorkspaceMember.id, updateOneRecordInput: changedFields, });