Files
twenty_crm/packages/twenty-front/src/modules/object-metadata/hooks/useFieldMetadataItem.ts
ad-elias 092496f2db 'Display as relative date' field formatting option for dateTime and date fields #5398 (#6945)
Implements #5398.

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>
Co-authored-by: Félix Malfait <felix@twenty.com>
2024-09-25 11:42:16 +02:00

70 lines
2.3 KiB
TypeScript

import { useDeleteOneRelationMetadataItem } from '@/object-metadata/hooks/useDeleteOneRelationMetadataItem';
import { FieldMetadataType } from '~/generated-metadata/graphql';
import { Field } from '~/generated/graphql';
import { FieldMetadataItem } from '../types/FieldMetadataItem';
import { formatFieldMetadataItemInput } from '../utils/formatFieldMetadataItemInput';
import { useCreateOneFieldMetadataItem } from './useCreateOneFieldMetadataItem';
import { useDeleteOneFieldMetadataItem } from './useDeleteOneFieldMetadataItem';
import { useUpdateOneFieldMetadataItem } from './useUpdateOneFieldMetadataItem';
export const useFieldMetadataItem = () => {
const { createOneFieldMetadataItem } = useCreateOneFieldMetadataItem();
const { updateOneFieldMetadataItem } = useUpdateOneFieldMetadataItem();
const { deleteOneFieldMetadataItem } = useDeleteOneFieldMetadataItem();
const { deleteOneRelationMetadataItem } = useDeleteOneRelationMetadataItem();
const createMetadataField = (
input: Pick<
Field,
| 'label'
| 'icon'
| 'description'
| 'defaultValue'
| 'type'
| 'options'
| 'settings'
> & {
objectMetadataId: string;
},
) => {
const formattedInput = formatFieldMetadataItemInput(input);
return createOneFieldMetadataItem({
...formattedInput,
objectMetadataId: input.objectMetadataId,
type: input.type,
label: formattedInput.label ?? '',
name: formattedInput.name ?? '',
});
};
const activateMetadataField = (metadataField: FieldMetadataItem) =>
updateOneFieldMetadataItem({
fieldMetadataIdToUpdate: metadataField.id,
updatePayload: { isActive: true },
});
const deactivateMetadataField = (metadataField: FieldMetadataItem) =>
updateOneFieldMetadataItem({
fieldMetadataIdToUpdate: metadataField.id,
updatePayload: { isActive: false },
});
const deleteMetadataField = (metadataField: FieldMetadataItem) => {
return metadataField.type === FieldMetadataType.Relation
? deleteOneRelationMetadataItem(
metadataField.relationDefinition?.relationId,
)
: deleteOneFieldMetadataItem(metadataField.id);
};
return {
activateMetadataField,
createMetadataField,
deactivateMetadataField,
deleteMetadataField,
};
};