4bd0aafb8e
Upon schema update, sync status can change from synced to non_synced in case the update regards a table that was deleted. Let's update the sync status too to avoid displaying the table as still synchronized. https://github.com/twentyhq/twenty/assets/51697796/7ff2342b-ce9f-4179-9b76-940617cf1292
55 lines
1.7 KiB
TypeScript
55 lines
1.7 KiB
TypeScript
import { useCallback } from 'react';
|
|
import { ApolloClient, useMutation } from '@apollo/client';
|
|
|
|
import { SYNC_REMOTE_TABLE_SCHEMA_CHANGES } from '@/databases/graphql/mutations/syncRemoteTableSchemaChanges';
|
|
import { modifyRemoteTableFromCache } from '@/databases/utils/modifyRemoteTableFromCache';
|
|
import { useApolloMetadataClient } from '@/object-metadata/hooks/useApolloMetadataClient';
|
|
import {
|
|
RemoteTableInput,
|
|
SyncRemoteTableSchemaChangesMutation,
|
|
SyncRemoteTableSchemaChangesMutationVariables,
|
|
} from '~/generated-metadata/graphql';
|
|
import { isDefined } from '~/utils/isDefined';
|
|
|
|
export const useSyncRemoteTableSchemaChanges = () => {
|
|
const apolloMetadataClient = useApolloMetadataClient();
|
|
|
|
const [mutate, mutationInformation] = useMutation<
|
|
SyncRemoteTableSchemaChangesMutation,
|
|
SyncRemoteTableSchemaChangesMutationVariables
|
|
>(SYNC_REMOTE_TABLE_SCHEMA_CHANGES, {
|
|
client: apolloMetadataClient ?? ({} as ApolloClient<any>),
|
|
});
|
|
|
|
const syncRemoteTableSchemaChanges = useCallback(
|
|
async (input: RemoteTableInput) => {
|
|
const remoteTable = await mutate({
|
|
variables: {
|
|
input,
|
|
},
|
|
update: (cache, { data }) => {
|
|
if (isDefined(data)) {
|
|
modifyRemoteTableFromCache({
|
|
cache: cache,
|
|
remoteTableName: input.name,
|
|
fieldModifiers: {
|
|
schemaPendingUpdates: () =>
|
|
data.syncRemoteTableSchemaChanges.schemaPendingUpdates || [],
|
|
status: () => data.syncRemoteTableSchemaChanges.status,
|
|
},
|
|
});
|
|
}
|
|
},
|
|
});
|
|
|
|
return remoteTable;
|
|
},
|
|
[mutate],
|
|
);
|
|
|
|
return {
|
|
syncRemoteTableSchemaChanges,
|
|
isLoading: mutationInformation.loading,
|
|
};
|
|
};
|