Files
twenty/packages/twenty-front/src/modules/object-metadata/hooks/useFieldMetadataItem.ts
T
Vinay Arvind Badgujar 5824637d1a fix - newly added object not visible in left menu (#14202)
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>
2025-09-05 10:43:03 +02:00

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,
};
};