The DX is not great when you need to do a lot of database resets/command. Should we disable Typescript validation to speed things up? With this and caching database:reset takes 1min instead of 2 on my machine. See also: https://github.com/typeorm/typeorm/issues/4136 And #9291 / #9293 --------- Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>
83 lines
2.7 KiB
TypeScript
83 lines
2.7 KiB
TypeScript
import { useMemo } from 'react';
|
|
import { Nullable } from 'twenty-ui';
|
|
|
|
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
|
import { FieldMetadata } from '@/object-record/record-field/types/FieldMetadata';
|
|
import { ColumnDefinition } from '@/object-record/record-table/types/ColumnDefinition';
|
|
import { filterAvailableTableColumns } from '@/object-record/utils/filterAvailableTableColumns';
|
|
|
|
import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled';
|
|
import { FeatureFlagKey } from '~/generated/graphql';
|
|
import { formatFieldMetadataItemAsColumnDefinition } from '../utils/formatFieldMetadataItemAsColumnDefinition';
|
|
import { formatFieldMetadataItemsAsFilterDefinitions } from '../utils/formatFieldMetadataItemsAsFilterDefinitions';
|
|
import { formatFieldMetadataItemsAsSortDefinitions } from '../utils/formatFieldMetadataItemsAsSortDefinitions';
|
|
|
|
export const useColumnDefinitionsFromFieldMetadata = (
|
|
objectMetadataItem?: Nullable<ObjectMetadataItem>,
|
|
) => {
|
|
const activeFieldMetadataItems = useMemo(
|
|
() =>
|
|
objectMetadataItem
|
|
? objectMetadataItem.fields.filter(
|
|
({ isActive, isSystem }) => isActive && !isSystem,
|
|
)
|
|
: [],
|
|
[objectMetadataItem],
|
|
);
|
|
|
|
const isJsonFilterEnabled = useIsFeatureEnabled(
|
|
FeatureFlagKey.IsJsonFilterEnabled,
|
|
);
|
|
|
|
const filterDefinitions = formatFieldMetadataItemsAsFilterDefinitions({
|
|
fields: activeFieldMetadataItems,
|
|
isJsonFilterEnabled,
|
|
});
|
|
|
|
const sortDefinitions = formatFieldMetadataItemsAsSortDefinitions({
|
|
fields: activeFieldMetadataItems,
|
|
});
|
|
|
|
const columnDefinitions: ColumnDefinition<FieldMetadata>[] = useMemo(
|
|
() =>
|
|
objectMetadataItem
|
|
? activeFieldMetadataItems
|
|
.map((field, index) =>
|
|
formatFieldMetadataItemAsColumnDefinition({
|
|
position: index,
|
|
field,
|
|
objectMetadataItem,
|
|
}),
|
|
)
|
|
.filter(filterAvailableTableColumns)
|
|
.map((column) => {
|
|
const existsInFilterDefinitions = filterDefinitions.some(
|
|
(filter) => filter.fieldMetadataId === column.fieldMetadataId,
|
|
);
|
|
|
|
const existsInSortDefinitions = sortDefinitions.some(
|
|
(sort) => sort.fieldMetadataId === column.fieldMetadataId,
|
|
);
|
|
|
|
return {
|
|
...column,
|
|
isFilterable: existsInFilterDefinitions,
|
|
isSortable: existsInSortDefinitions,
|
|
};
|
|
})
|
|
: [],
|
|
[
|
|
activeFieldMetadataItems,
|
|
objectMetadataItem,
|
|
filterDefinitions,
|
|
sortDefinitions,
|
|
],
|
|
);
|
|
|
|
return {
|
|
columnDefinitions,
|
|
filterDefinitions,
|
|
sortDefinitions,
|
|
};
|
|
};
|