In this PR: 1. Refactor guards to avoid duplicated queries: WorkspaceAuthGuard and UserAuthGuard only check for existence of workspace and user in the request without querying the database
51 lines
1.5 KiB
TypeScript
51 lines
1.5 KiB
TypeScript
import { useRecoilCallback } from 'recoil';
|
|
|
|
import { objectMetadataItemFamilySelector } from '@/object-metadata/states/objectMetadataItemFamilySelector';
|
|
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
|
|
|
import { FieldMetadataItem } from '../types/FieldMetadataItem';
|
|
|
|
export const useGetRelationMetadata = () =>
|
|
useRecoilCallback(
|
|
({ snapshot }) =>
|
|
({
|
|
fieldMetadataItem,
|
|
}: {
|
|
fieldMetadataItem: Pick<
|
|
FieldMetadataItem,
|
|
'type' | 'relationDefinition'
|
|
>;
|
|
}) => {
|
|
if (fieldMetadataItem.type !== FieldMetadataType.Relation) return null;
|
|
|
|
const relationDefinition = fieldMetadataItem.relationDefinition;
|
|
|
|
if (!relationDefinition) return null;
|
|
|
|
const relationObjectMetadataItem = snapshot
|
|
.getLoadable(
|
|
objectMetadataItemFamilySelector({
|
|
objectName: relationDefinition.targetObjectMetadata.nameSingular,
|
|
objectNameType: 'singular',
|
|
}),
|
|
)
|
|
.getValue();
|
|
|
|
if (!relationObjectMetadataItem) return null;
|
|
|
|
const relationFieldMetadataItem =
|
|
relationObjectMetadataItem.fields.find(
|
|
(field) => field.id === relationDefinition.targetFieldMetadata.id,
|
|
);
|
|
|
|
if (!relationFieldMetadataItem) return null;
|
|
|
|
return {
|
|
relationFieldMetadataItem,
|
|
relationObjectMetadataItem,
|
|
relationType: relationDefinition.direction,
|
|
};
|
|
},
|
|
[],
|
|
);
|