Files
twenty/packages/twenty-front/src/modules/object-metadata/hooks/useFieldMetadataItem.ts
Sean Hellwig 5f467ab5ca Removes erroneous debugger call in twenty-front (#5311)
Erroneous debugger call throws an error in twenty-front app console

---------

Co-authored-by: Weiko <corentin@twenty.com>
2024-05-06 19:45:14 +02:00

98 lines
2.9 KiB
TypeScript

import { v4 } from 'uuid';
import { FieldMetadataOption } from '@/object-metadata/types/FieldMetadataOption';
import { getDefaultValueForBackend } from '@/object-metadata/utils/getDefaultValueForBackend';
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 createMetadataField = (
input: Pick<
Field,
'label' | 'icon' | 'description' | 'defaultValue' | 'type' | 'options'
> & {
objectMetadataId: string;
},
) => {
const formattedInput = formatFieldMetadataItemInput(input);
const defaultValue = getDefaultValueForBackend(
input.defaultValue ?? formattedInput.defaultValue,
input.type,
);
return createOneFieldMetadataItem({
...formattedInput,
defaultValue,
objectMetadataId: input.objectMetadataId,
type: input.type,
});
};
const editMetadataField = (
input: Pick<
Field,
| 'id'
| 'label'
| 'icon'
| 'description'
| 'defaultValue'
| 'type'
| 'options'
>,
) => {
// In Edit mode, all options need an id,
// so we generate an id for newly created options.
const inputOptions = input.options?.map((option: FieldMetadataOption) =>
option.id ? option : { ...option, id: v4() },
);
const formattedInput = formatFieldMetadataItemInput({
...input,
options: inputOptions,
});
const defaultValue = input.defaultValue ?? formattedInput.defaultValue;
return updateOneFieldMetadataItem({
fieldMetadataIdToUpdate: input.id,
updatePayload: {
...formattedInput,
defaultValue,
},
});
};
const activateMetadataField = (metadataField: FieldMetadataItem) =>
updateOneFieldMetadataItem({
fieldMetadataIdToUpdate: metadataField.id,
updatePayload: { isActive: true },
});
const disableMetadataField = (metadataField: FieldMetadataItem) =>
updateOneFieldMetadataItem({
fieldMetadataIdToUpdate: metadataField.id,
updatePayload: { isActive: false },
});
const eraseMetadataField = (metadataField: FieldMetadataItem) =>
deleteOneFieldMetadataItem(metadataField.id);
return {
activateMetadataField,
createMetadataField,
disableMetadataField,
eraseMetadataField,
editMetadataField,
};
};