Files
twenty_crm/front/src/modules/metadata/hooks/useUpdateOneMetadataObject.ts
Lucas Bordeau c590300bf1 Feat/metadata with datatable v2 (#2110)
* Reworked metadata creation

* Wip

* Fix from PR

* Removed consolelog

* Post merge

* Fixed seeds

* Wip

* Added dynamic routing

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
2023-10-18 19:41:02 +02:00

71 lines
2.3 KiB
TypeScript

import { useMutation } from '@apollo/client';
import { getOperationName } from '@apollo/client/utilities';
import {
UpdateOneMetadataObjectMutation,
UpdateOneMetadataObjectMutationVariables,
} from '~/generated-metadata/graphql';
import { UPDATE_ONE_METADATA_OBJECT } from '../graphql/mutations';
import { FIND_MANY_METADATA_OBJECTS } from '../graphql/queries';
import { useApolloMetadataClient } from './useApolloMetadataClient';
import { useFindManyMetadataObjects } from './useFindManyMetadataObjects';
// TODO: Slice the Apollo store synchronously in the update function instead of subscribing, so we can use update after read in the same function call
export const useUpdateOneMetadataObject = () => {
const apolloClientMetadata = useApolloMetadataClient();
const { getMetadataObjectsFromCache } = useFindManyMetadataObjects();
const [mutate] = useMutation<
UpdateOneMetadataObjectMutation,
UpdateOneMetadataObjectMutationVariables
>(UPDATE_ONE_METADATA_OBJECT, {
client: apolloClientMetadata ?? undefined,
});
const updateOneMetadataObject = ({
idToUpdate,
updatePayload,
}: {
idToUpdate: UpdateOneMetadataObjectMutationVariables['idToUpdate'];
updatePayload: Partial<
Pick<
UpdateOneMetadataObjectMutationVariables['updatePayload'],
'description' | 'icon' | 'isActive' | 'labelPlural' | 'labelSingular'
>
>;
}) => {
const metadataObjects = getMetadataObjectsFromCache();
const foundMetadataObject = metadataObjects.find(
(metadataObject) => metadataObject.id === idToUpdate,
);
if (!foundMetadataObject)
throw new Error(`Metadata object with id ${idToUpdate} not found`);
return mutate({
variables: {
idToUpdate,
updatePayload: {
namePlural: foundMetadataObject.namePlural,
nameSingular: foundMetadataObject.nameSingular,
description: foundMetadataObject.description,
icon: foundMetadataObject.icon,
isActive: foundMetadataObject.isActive,
labelPlural: foundMetadataObject.labelPlural,
labelSingular: foundMetadataObject.labelSingular,
...updatePayload,
},
},
refetchQueries: [getOperationName(FIND_MANY_METADATA_OBJECTS) ?? ''],
});
};
return {
updateOneMetadataObject,
};
};