45 lines
1.5 KiB
TypeScript
45 lines
1.5 KiB
TypeScript
import { useObjectMainIdentifier } from '@/object-metadata/hooks/useObjectMainIdentifier';
|
|
import { useObjectMetadataItemForSettings } from '@/object-metadata/hooks/useObjectMetadataItemForSettings';
|
|
import { useFindManyObjectRecords } from '@/object-record/hooks/useFindManyObjectRecords';
|
|
import { MainIdentifierMapper } from '@/ui/object/field/types/MainIdentifierMapper';
|
|
|
|
export const useRelationFieldPreview = ({
|
|
relationObjectMetadataId,
|
|
skipDefaultValue,
|
|
}: {
|
|
relationObjectMetadataId?: string;
|
|
skipDefaultValue: boolean;
|
|
}) => {
|
|
const { findObjectMetadataItemById } = useObjectMetadataItemForSettings();
|
|
|
|
const relationObjectMetadataItem = relationObjectMetadataId
|
|
? findObjectMetadataItemById(relationObjectMetadataId)
|
|
: undefined;
|
|
|
|
const { objects: relationObjects } = useFindManyObjectRecords({
|
|
objectNamePlural: relationObjectMetadataItem?.namePlural,
|
|
skip: skipDefaultValue || !relationObjectMetadataItem,
|
|
});
|
|
|
|
const { mainIdentifierMapper } = useObjectMainIdentifier(
|
|
relationObjectMetadataItem,
|
|
);
|
|
|
|
const recordMapper: MainIdentifierMapper | undefined =
|
|
relationObjectMetadataItem && mainIdentifierMapper
|
|
? (record: { id: string }) => {
|
|
const mappedRecord = mainIdentifierMapper(record);
|
|
|
|
return {
|
|
...mappedRecord,
|
|
name: mappedRecord.name || relationObjectMetadataItem.labelSingular,
|
|
};
|
|
}
|
|
: undefined;
|
|
|
|
return {
|
|
defaultValue: relationObjects?.[0],
|
|
recordMapper,
|
|
};
|
|
};
|