2c9f50ecb1
This PR fixes several issues:
- enum naming should be: {tableName}_{fieldName}_enum and respecting the
case
- defaultValue format handled in the FE should respect the one in the BE
In my opinion we should refactor the defaultValue:
- we should respect backend format: "'myDefault'" for constant default
and "0" for float, "now" for expressions, "true" for booleans. we can
rename it to defaultValueExpression if it is more clear but we should
not maintain a parallel system
- we should deprecate option: isDefaultValue which is confusing
- we should re-work backend to have a more unified approach between
fields and avoid having if everywhere about select, multiselect, and
currency cases. one unified "computeDefaultValue" function should do the
job
What is still broken:
- currency default Value on creation. I think we should do the refactor
first
- select default value edition.
These cases do not break the schema but are ignored currently
99 lines
2.9 KiB
TypeScript
99 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);
|
|
|
|
debugger;
|
|
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,
|
|
};
|
|
};
|