Remove useUpdateOneRecordV2 (#17355)
Previously we introduced useUpdateOneRecordV2 to handle morph relations. In this PR we are removing it to only use useUpdateOneRecord which has been adapted not to requires objectMetadataNameSingular in its props.
This commit is contained in:
+2
-3
@@ -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));
|
||||
|
||||
@@ -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 },
|
||||
});
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
|
||||
@@ -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<Task>({
|
||||
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 {
|
||||
|
||||
+2
-5
@@ -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<WorkflowVersion>({
|
||||
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: {
|
||||
|
||||
@@ -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 },
|
||||
});
|
||||
|
||||
@@ -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,
|
||||
|
||||
+3
@@ -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' },
|
||||
});
|
||||
});
|
||||
|
||||
@@ -33,9 +33,7 @@ export const useFormatPreferences = () => {
|
||||
currentWorkspaceMemberState,
|
||||
);
|
||||
|
||||
const { updateOneRecord } = useUpdateOneRecord({
|
||||
objectNameSingular: CoreObjectNameSingular.WorkspaceMember,
|
||||
});
|
||||
const { updateOneRecord } = useUpdateOneRecord();
|
||||
|
||||
const updateFormatPreference = useCallback(
|
||||
async <K extends FormatPreferenceKey>(
|
||||
@@ -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,
|
||||
});
|
||||
|
||||
+6
-10
@@ -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');
|
||||
});
|
||||
});
|
||||
|
||||
+4
-6
@@ -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,
|
||||
});
|
||||
|
||||
-44
@@ -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),
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -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,
|
||||
|
||||
@@ -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<CreatedObjectRecord>[];
|
||||
@@ -239,7 +237,9 @@ export const useCreateManyRecords = <
|
||||
});
|
||||
|
||||
if (shouldRefetchAggregateQueries) {
|
||||
await refetchAggregateQueries();
|
||||
await refetchAggregateQueries({
|
||||
objectMetadataNamePlural: objectMetadataItem.namePlural,
|
||||
});
|
||||
}
|
||||
|
||||
dispatchObjectRecordOperationBrowserEvent({
|
||||
|
||||
@@ -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<CreatedObjectRecord>) => {
|
||||
setLoading(true);
|
||||
@@ -189,7 +187,9 @@ export const useCreateOneRecord = <
|
||||
throw error;
|
||||
});
|
||||
|
||||
await refetchAggregateQueries();
|
||||
await refetchAggregateQueries({
|
||||
objectMetadataNamePlural: objectMetadataItem.namePlural,
|
||||
});
|
||||
|
||||
const positionToUse =
|
||||
recordInput.position === 'first'
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
+4
-4
@@ -60,9 +60,7 @@ export const useIncrementalDeleteManyRecords = <T>({
|
||||
|
||||
const { objectMetadataItems } = useObjectMetadataItems();
|
||||
const { objectPermissionsByObjectMetadataId } = useObjectPermissions();
|
||||
const { refetchAggregateQueries } = useRefetchAggregateQueries({
|
||||
objectMetadataNamePlural: objectMetadataItem.namePlural,
|
||||
});
|
||||
const { refetchAggregateQueries } = useRefetchAggregateQueries();
|
||||
|
||||
const { incrementalFetchAndMutate, progress, isProcessing, updateProgress } =
|
||||
useIncrementalFetchAndMutateRecords<T>({
|
||||
@@ -232,7 +230,9 @@ export const useIncrementalDeleteManyRecords = <T>({
|
||||
},
|
||||
);
|
||||
|
||||
await refetchAggregateQueries();
|
||||
await refetchAggregateQueries({
|
||||
objectMetadataNamePlural: objectMetadataItem.namePlural,
|
||||
});
|
||||
|
||||
dispatchObjectRecordOperationBrowserEvent({
|
||||
objectMetadataItem,
|
||||
|
||||
+4
-4
@@ -55,9 +55,7 @@ export const useIncrementalDestroyManyRecords = <T>({
|
||||
|
||||
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 = <T>({
|
||||
},
|
||||
);
|
||||
|
||||
await refetchAggregateQueries();
|
||||
await refetchAggregateQueries({
|
||||
objectMetadataNamePlural: objectMetadataItem.namePlural,
|
||||
});
|
||||
|
||||
dispatchObjectRecordOperationBrowserEvent({
|
||||
objectMetadataItem,
|
||||
|
||||
+4
-4
@@ -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,
|
||||
|
||||
@@ -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: {
|
||||
|
||||
+2
-2
@@ -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,
|
||||
|
||||
+2
-2
@@ -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,
|
||||
|
||||
@@ -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({
|
||||
|
||||
@@ -73,9 +73,7 @@ export const useUpdateManyRecords = <T extends ObjectRecord = ObjectRecord>({
|
||||
|
||||
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 = <T extends ObjectRecord = ObjectRecord>({
|
||||
}
|
||||
|
||||
if (!skipRefetchAggregateQueries) {
|
||||
await refetchAggregateQueries();
|
||||
await refetchAggregateQueries({
|
||||
objectMetadataNamePlural: objectMetadataItem.namePlural,
|
||||
});
|
||||
}
|
||||
|
||||
if (!skipRegisterObjectOperation) {
|
||||
|
||||
@@ -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<string, any>;
|
||||
};
|
||||
type UpdateOneRecordArgs<UpdatedObjectRecord> = {
|
||||
objectNameSingular: string;
|
||||
idToUpdate: string;
|
||||
updateOneRecordInput: Partial<Omit<UpdatedObjectRecord, 'id'>>;
|
||||
optimisticRecord?: Partial<ObjectRecord>;
|
||||
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<UpdatedObjectRecord>) => {
|
||||
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<ObjectRecord>(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<ObjectRecord>({
|
||||
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 {
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
};
|
||||
@@ -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<UpdatedObjectRecord> = {
|
||||
idToUpdate: string;
|
||||
updateOneRecordInput: Partial<Omit<UpdatedObjectRecord, 'id'>>;
|
||||
optimisticRecord?: Partial<ObjectRecord>;
|
||||
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<UpdatedObjectRecord>) => {
|
||||
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<ObjectRecord>({
|
||||
record: cachedRecord,
|
||||
objectMetadataItem,
|
||||
objectMetadataItems,
|
||||
recordGqlFields: computedRecordGqlFields,
|
||||
computeReferences: false,
|
||||
});
|
||||
|
||||
const computedOptimisticRecord = {
|
||||
...cachedRecord,
|
||||
...optimisticRecordInput,
|
||||
id: idToUpdate,
|
||||
__typename: getObjectTypename(objectMetadataItem.nameSingular),
|
||||
};
|
||||
|
||||
const optimisticRecordWithConnection =
|
||||
getRecordNodeFromRecord<ObjectRecord>({
|
||||
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,
|
||||
};
|
||||
};
|
||||
+10
-1
@@ -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<string, unknown>;
|
||||
}) =>
|
||||
updateOneRecordHook({
|
||||
objectNameSingular,
|
||||
...args,
|
||||
});
|
||||
|
||||
const isRecordIndexRemoveSortingModalOpened = useRecoilComponentValue(
|
||||
isModalOpenedComponentState,
|
||||
RECORD_INDEX_REMOVE_SORTING_MODAL_ID,
|
||||
|
||||
+3
-4
@@ -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,
|
||||
});
|
||||
|
||||
+4
-3
@@ -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,
|
||||
|
||||
+5
-5
@@ -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,
|
||||
],
|
||||
);
|
||||
|
||||
|
||||
+7
-6
@@ -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,
|
||||
|
||||
+2
-3
@@ -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,
|
||||
});
|
||||
|
||||
+4
-5
@@ -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,
|
||||
});
|
||||
|
||||
+3
-4
@@ -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,
|
||||
});
|
||||
|
||||
+20
-17
@@ -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;
|
||||
|
||||
+2
-2
@@ -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,
|
||||
}),
|
||||
}));
|
||||
|
||||
+2
-2
@@ -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();
|
||||
|
||||
|
||||
+3
-3
@@ -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: {
|
||||
|
||||
+3
-4
@@ -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,
|
||||
});
|
||||
|
||||
+3
-4
@@ -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,
|
||||
});
|
||||
|
||||
+5
-4
@@ -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,
|
||||
|
||||
+3
-4
@@ -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<string, unknown>;
|
||||
};
|
||||
}) => {
|
||||
updateOneRecord?.({
|
||||
updateOneRecord({
|
||||
objectNameSingular: targetRecord.targetObjectNameSingular,
|
||||
idToUpdate: variables.where.id,
|
||||
updateOneRecordInput: variables.updateOneRecordInput,
|
||||
});
|
||||
|
||||
+3
-4
@@ -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<string, unknown>;
|
||||
};
|
||||
}) => {
|
||||
updateOneRecord?.({
|
||||
updateOneRecord({
|
||||
objectNameSingular: targetRecord.targetObjectNameSingular,
|
||||
idToUpdate: variables.where.id,
|
||||
updateOneRecordInput: variables.updateOneRecordInput,
|
||||
});
|
||||
|
||||
+6
-6
@@ -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<CalendarChannel>({
|
||||
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,
|
||||
|
||||
+6
-3
@@ -39,12 +39,11 @@ const StyledDetailsContainer = styled.div`
|
||||
export const SettingsAccountsMessageChannelDetails = ({
|
||||
messageChannel,
|
||||
}: SettingsAccountsMessageChannelDetailsProps) => {
|
||||
const { updateOneRecord } = useUpdateOneRecord<MessageChannel>({
|
||||
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 },
|
||||
});
|
||||
|
||||
@@ -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: {
|
||||
|
||||
+3
-3
@@ -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: '' },
|
||||
});
|
||||
|
||||
@@ -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 },
|
||||
});
|
||||
|
||||
@@ -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,
|
||||
],
|
||||
);
|
||||
|
||||
|
||||
+1
@@ -56,6 +56,7 @@ describe('useUpdateWorkflowVersionTrigger', () => {
|
||||
});
|
||||
expect(mockUpdateOneRecord).toHaveBeenCalledWith({
|
||||
idToUpdate: 'version-id',
|
||||
objectNameSingular: 'workflowVersion',
|
||||
updateOneRecordInput: {
|
||||
trigger,
|
||||
},
|
||||
|
||||
+3
-8
@@ -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<WorkflowVersion>({
|
||||
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,
|
||||
|
||||
@@ -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<WorkspaceMember>({
|
||||
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: {
|
||||
|
||||
@@ -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<WorkspaceMember>({
|
||||
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 },
|
||||
|
||||
+2
-3
@@ -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,
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user