50 lines
1.6 KiB
TypeScript
50 lines
1.6 KiB
TypeScript
import { RelationType } from '@/settings/data-model/types/RelationType';
|
|
import { RelationMetadataType } from '~/generated-metadata/graphql';
|
|
|
|
import { useObjectMetadataItemForSettings } from '../hooks/useObjectMetadataItemForSettings';
|
|
import { FieldMetadataItem } from '../types/FieldMetadataItem';
|
|
|
|
export const useRelationMetadata = ({
|
|
fieldMetadataItem,
|
|
}: {
|
|
fieldMetadataItem?: FieldMetadataItem;
|
|
}) => {
|
|
const { findObjectMetadataItemById } = useObjectMetadataItemForSettings();
|
|
|
|
const relationMetadata =
|
|
fieldMetadataItem?.fromRelationMetadata ||
|
|
fieldMetadataItem?.toRelationMetadata;
|
|
|
|
const relationType =
|
|
relationMetadata?.relationType === RelationMetadataType.OneToMany &&
|
|
fieldMetadataItem?.toRelationMetadata
|
|
? 'MANY_TO_ONE'
|
|
: (relationMetadata?.relationType as RelationType);
|
|
|
|
const relationObjectMetadataId =
|
|
relationMetadata && 'toObjectMetadata' in relationMetadata
|
|
? relationMetadata.toObjectMetadata.id
|
|
: relationMetadata?.fromObjectMetadata.id;
|
|
|
|
const relationObjectMetadataItem = relationObjectMetadataId
|
|
? findObjectMetadataItemById(relationObjectMetadataId)
|
|
: undefined;
|
|
|
|
const relationFieldMetadataId =
|
|
relationMetadata && 'toFieldMetadataId' in relationMetadata
|
|
? relationMetadata.toFieldMetadataId
|
|
: relationMetadata?.fromFieldMetadataId;
|
|
|
|
const relationFieldMetadataItem = relationFieldMetadataId
|
|
? relationObjectMetadataItem?.fields?.find(
|
|
(field) => field.id === relationFieldMetadataId,
|
|
)
|
|
: undefined;
|
|
|
|
return {
|
|
relationFieldMetadataItem,
|
|
relationObjectMetadataItem,
|
|
relationType,
|
|
};
|
|
};
|