Files
twenty_crm/packages/twenty-front/src/pages/settings/data-model/hooks/useMapFieldMetadataItemToSettingsObjectDetailTableItem.ts
Anand Krishnan M J 59e14fabb4 [Issue-5772] Add sort feature on settings tables (#5787)
## Proposed Changes
-  Introduce  a new custom hook - useTableSort to sort table content
-  Add test cases for the new custom hook
- Integrate useTableSort hook on to the table in settings object and
settings object field pages

## Related Issue

https://github.com/twentyhq/twenty/issues/5772

## Evidence


https://github.com/twentyhq/twenty/assets/87609792/8be456ce-2fa5-44ec-8bbd-70fb6c8fdb30

## Evidence after addressing review comments


https://github.com/twentyhq/twenty/assets/87609792/c267e3da-72f9-4c0e-8c94-a38122d6395e

## Further comments

Apologies for the large PR. Looking forward for the review

---------

Co-authored-by: Félix Malfait <felix.malfait@gmail.com>
Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>
2024-08-14 17:11:17 +02:00

47 lines
1.7 KiB
TypeScript

import { useGetRelationMetadata } from '@/object-metadata/hooks/useGetRelationMetadata';
import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { getFieldIdentifierType } from '@/settings/data-model/utils/getFieldIdentifierType';
import { getSettingsFieldTypeConfig } from '@/settings/data-model/utils/getSettingsFieldTypeConfig';
import { SettingsObjectDetailTableItem } from '~/pages/settings/data-model/types/SettingsObjectDetailTableItem';
import { getSettingsObjectFieldType } from '~/pages/settings/data-model/utils/getSettingsObjectFieldType';
export const useMapFieldMetadataItemToSettingsObjectDetailTableItem = (
objectMetadataItem: ObjectMetadataItem,
) => {
const getRelationMetadata = useGetRelationMetadata();
const mapFieldMetadataItemToSettingsObjectDetailTableItem = (
fieldMetadataItem: FieldMetadataItem,
): SettingsObjectDetailTableItem => {
const fieldType = getSettingsObjectFieldType(
objectMetadataItem,
fieldMetadataItem,
);
const { relationObjectMetadataItem } =
getRelationMetadata({
fieldMetadataItem,
}) ?? {};
const identifierType = getFieldIdentifierType(
fieldMetadataItem,
objectMetadataItem,
);
return {
fieldMetadataItem,
fieldType: fieldType ?? '',
dataType:
relationObjectMetadataItem?.labelPlural ??
getSettingsFieldTypeConfig(fieldMetadataItem.type)?.label ??
'',
label: fieldMetadataItem.label,
identifierType: identifierType,
objectMetadataItem,
} satisfies SettingsObjectDetailTableItem;
};
return { mapFieldMetadataItemToSettingsObjectDetailTableItem };
};