import { useMemo } from 'react'; import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { FieldMetadata } from '@/ui/object/field/types/FieldMetadata'; import { ColumnDefinition } from '@/ui/object/record-table/types/ColumnDefinition'; import { Nullable } from '~/types/Nullable'; import { formatFieldMetadataItemAsColumnDefinition } from '../utils/formatFieldMetadataItemAsColumnDefinition'; import { formatFieldMetadataItemsAsFilterDefinitions } from '../utils/formatFieldMetadataItemsAsFilterDefinitions'; import { formatFieldMetadataItemsAsSortDefinitions } from '../utils/formatFieldMetadataItemsAsSortDefinitions'; export const useComputeDefinitionsFromFieldMetadata = ( objectMetadataItem?: Nullable, ) => { const activeFieldMetadataItems = useMemo( () => objectMetadataItem ? objectMetadataItem.fields.filter(({ isActive }) => isActive) : [], [objectMetadataItem], ); const columnDefinitions: ColumnDefinition[] = useMemo( () => objectMetadataItem ? activeFieldMetadataItems.map((field, index) => formatFieldMetadataItemAsColumnDefinition({ position: index, field, objectMetadataItem, }), ) : [], [activeFieldMetadataItems, objectMetadataItem], ); const filterDefinitions = formatFieldMetadataItemsAsFilterDefinitions({ fields: activeFieldMetadataItems, }); const sortDefinitions = formatFieldMetadataItemsAsSortDefinitions({ fields: activeFieldMetadataItems, }); return { columnDefinitions, filterDefinitions, sortDefinitions, }; };