* 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>
71 lines
2.3 KiB
TypeScript
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,
|
|
};
|
|
};
|