import { ApolloClient, useApolloClient, useMutation } from '@apollo/client'; import { getOperationName } from '@apollo/client/utilities'; import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { useFindManyRecordsQuery } from '@/object-record/hooks/useFindManyRecordsQuery'; import { CreateObjectInput, CreateOneObjectMetadataItemMutation, CreateOneObjectMetadataItemMutationVariables, } from '~/generated-metadata/graphql'; import { CREATE_ONE_OBJECT_METADATA_ITEM } from '../graphql/mutations'; import { FIND_MANY_OBJECT_METADATA_ITEMS } from '../graphql/queries'; import { useApolloMetadataClient } from './useApolloMetadataClient'; export const useCreateOneObjectMetadataItem = () => { const apolloMetadataClient = useApolloMetadataClient(); const apolloClient = useApolloClient(); const { findManyRecordsQuery } = useFindManyRecordsQuery({ objectNameSingular: CoreObjectNameSingular.View, }); const [mutate] = useMutation< CreateOneObjectMetadataItemMutation, CreateOneObjectMetadataItemMutationVariables >(CREATE_ONE_OBJECT_METADATA_ITEM, { client: apolloMetadataClient ?? ({} as ApolloClient), }); const createOneObjectMetadataItem = async (input: CreateObjectInput) => { const createdObjectMetadata = await mutate({ variables: { input: { object: input }, }, awaitRefetchQueries: true, refetchQueries: [getOperationName(FIND_MANY_OBJECT_METADATA_ITEMS) ?? ''], }); return createdObjectMetadata; }; const findManyRecordsCache = async () => { await apolloClient.query({ query: findManyRecordsQuery, fetchPolicy: 'network-only', }); }; return { createOneObjectMetadataItem, findManyRecordsCache, }; };