Files
twenty/front/src/modules/metadata/hooks/useCreateOneObject.ts
T
Charles Bochet 618513afcd Rename fieldId and objectId into fieldMetadataId and objectMetadataId (#2421)
* Rename fieldId and objectId into fieldMetadataId and objectMetadataId

* Fix tests
2023-11-10 14:35:18 +01:00

72 lines
2.2 KiB
TypeScript

import { useMutation } from '@apollo/client';
import { useOptimisticEffect } from '@/apollo/optimistic-effect/hooks/useOptimisticEffect';
import { Currency, FieldMetadataType } from '~/generated-metadata/graphql';
import { capitalize } from '~/utils/string/capitalize';
import { ObjectMetadataItemIdentifier } from '../types/ObjectMetadataItemIdentifier';
import { useFindOneObjectMetadataItem } from './useFindOneObjectMetadataItem';
const defaultFieldValues: Record<FieldMetadataType, unknown> = {
[FieldMetadataType.Money]: { amount: null, currency: Currency.Usd },
[FieldMetadataType.Boolean]: false,
[FieldMetadataType.Date]: null,
[FieldMetadataType.Email]: '',
[FieldMetadataType.Enum]: null,
[FieldMetadataType.Number]: null,
[FieldMetadataType.Relation]: null,
[FieldMetadataType.Phone]: '',
[FieldMetadataType.Text]: '',
[FieldMetadataType.Url]: { link: '', text: '' },
[FieldMetadataType.Uuid]: '',
};
export const useCreateOneObject = ({
objectNamePlural,
}: Pick<ObjectMetadataItemIdentifier, 'objectNamePlural'>) => {
const { triggerOptimisticEffects } = useOptimisticEffect();
const {
foundObjectMetadataItem,
objectNotFoundInMetadata,
createOneMutation,
} = useFindOneObjectMetadataItem({
objectNamePlural,
});
// TODO: type this with a minimal type at least with Record<string, any>
const [mutate] = useMutation(createOneMutation);
const createOneObject = foundObjectMetadataItem
? async (input: Record<string, any>) => {
const createdObject = await mutate({
variables: {
input: {
...foundObjectMetadataItem.fields.reduce(
(result, field) => ({
...result,
[field.name]: defaultFieldValues[field.type],
}),
{},
),
...input,
},
},
});
triggerOptimisticEffects(
`${capitalize(foundObjectMetadataItem.nameSingular)}Edge`,
createdObject.data[
`create${capitalize(foundObjectMetadataItem.nameSingular)}`
],
);
}
: undefined;
return {
createOneObject,
objectNotFoundInMetadata,
};
};