5824637d1a
resolves #14190 added refreshCoreViews() call after object creation to immediately update core views state, ensuring new objects appear in the navigation drawer without requiring a refresh --------- Co-authored-by: Charles Bochet <charles@twenty.com> Co-authored-by: prastoin <paul@twenty.com>
74 lines
2.3 KiB
TypeScript
74 lines
2.3 KiB
TypeScript
import { type Field } from '~/generated-metadata/graphql';
|
|
|
|
import { formatFieldMetadataItemInput } from '../utils/formatFieldMetadataItemInput';
|
|
|
|
import { type RelationCreationPayload } from 'twenty-shared/types';
|
|
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,
|
|
| 'name'
|
|
| 'label'
|
|
| 'icon'
|
|
| 'description'
|
|
| 'defaultValue'
|
|
| 'type'
|
|
| 'options'
|
|
| 'settings'
|
|
| 'isLabelSyncedWithName'
|
|
> & {
|
|
objectMetadataId: string;
|
|
relationCreationPayload?: RelationCreationPayload;
|
|
morphRelationsCreationPayload?: RelationCreationPayload[];
|
|
},
|
|
) => {
|
|
const formattedInput = formatFieldMetadataItemInput(input);
|
|
|
|
return createOneFieldMetadataItem({
|
|
...formattedInput,
|
|
objectMetadataId: input.objectMetadataId,
|
|
type: input.type,
|
|
label: formattedInput.label ?? '',
|
|
name: formattedInput.name ?? '',
|
|
isLabelSyncedWithName: formattedInput.isLabelSyncedWithName ?? true,
|
|
relationCreationPayload: input.relationCreationPayload,
|
|
morphRelationsCreationPayload: input.morphRelationsCreationPayload,
|
|
});
|
|
};
|
|
|
|
const activateMetadataField = (
|
|
fieldMetadataId: string,
|
|
objectMetadataId: string,
|
|
) =>
|
|
updateOneFieldMetadataItem({
|
|
objectMetadataId: objectMetadataId,
|
|
fieldMetadataIdToUpdate: fieldMetadataId,
|
|
updatePayload: { isActive: true },
|
|
});
|
|
|
|
const deactivateMetadataField = (
|
|
fieldMetadataId: string,
|
|
objectMetadataId: string,
|
|
) =>
|
|
updateOneFieldMetadataItem({
|
|
objectMetadataId: objectMetadataId,
|
|
fieldMetadataIdToUpdate: fieldMetadataId,
|
|
updatePayload: { isActive: false },
|
|
});
|
|
|
|
return {
|
|
activateMetadataField,
|
|
createMetadataField,
|
|
deactivateMetadataField,
|
|
deleteMetadataField: deleteOneFieldMetadataItem,
|
|
};
|
|
};
|