51 lines
1.7 KiB
TypeScript
51 lines
1.7 KiB
TypeScript
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<ObjectMetadataItem>,
|
|
) => {
|
|
const activeFieldMetadataItems = useMemo(
|
|
() =>
|
|
objectMetadataItem
|
|
? objectMetadataItem.fields.filter(({ isActive }) => isActive)
|
|
: [],
|
|
[objectMetadataItem],
|
|
);
|
|
|
|
const columnDefinitions: ColumnDefinition<FieldMetadata>[] = 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,
|
|
};
|
|
};
|