Add relation metadata seed (#2431)

* Add relation metadata seed

* Fix

* Add filtering by relation id on server

* Fix
This commit is contained in:
Charles Bochet
2023-11-10 23:53:07 +01:00
committed by GitHub
parent 73db5eb35d
commit 130a68dd26
29 changed files with 645 additions and 379 deletions

View File

@ -32,6 +32,14 @@ export const FIND_MANY_METADATA_OBJECTS = gql`
isNullable
createdAt
updatedAt
fromRelationMetadata {
id
relationType
}
toRelationMetadata {
id
relationType
}
}
}
pageInfo {

View File

@ -1,6 +1,7 @@
import { MetadataFieldDataType } from '@/settings/data-model/types/ObjectFieldDataType';
import { Field } from '~/generated/graphql';
import { FieldMetadataItem } from '../types/FieldMetadataItem';
import { formatFieldMetadataItemInput } from '../utils/formatFieldMetadataItemInput';
import { useCreateOneFieldMetadataItem } from './useCreateOneFieldMetadataItem';
@ -32,19 +33,19 @@ export const useFieldMetadataItem = () => {
updatePayload: formatFieldMetadataItemInput(input),
});
const activateMetadataField = (metadataField: Field) =>
const activateMetadataField = (metadataField: FieldMetadataItem) =>
updateOneFieldMetadataItem({
fieldMetadataIdToUpdate: metadataField.id,
updatePayload: { isActive: true },
});
const disableMetadataField = (metadataField: Field) =>
const disableMetadataField = (metadataField: FieldMetadataItem) =>
updateOneFieldMetadataItem({
fieldMetadataIdToUpdate: metadataField.id,
updatePayload: { isActive: false },
});
const eraseMetadataField = (metadataField: Field) =>
const eraseMetadataField = (metadataField: FieldMetadataItem) =>
deleteOneFieldMetadataItem(metadataField.id);
return {

View File

@ -0,0 +1,9 @@
import { Field, Relation } from '~/generated-metadata/graphql';
export type FieldMetadataItem = Omit<
Field,
'fromRelationMetadata' | 'toRelationMetadata'
> & {
fromRelationMetadata?: Pick<Relation, 'id' | 'relationType'> | null;
toRelationMetadata?: Pick<Relation, 'id' | 'relationType'> | null;
};

View File

@ -1,8 +1,10 @@
import { Field, Object as GeneratedObject } from '~/generated-metadata/graphql';
import { Object as GeneratedObject } from '~/generated-metadata/graphql';
import { FieldMetadataItem } from './FieldMetadataItem';
export type ObjectMetadataItem = Omit<
GeneratedObject,
'fields' | 'dataSourceId'
> & {
fields: Field[];
fields: FieldMetadataItem[];
};

View File

@ -1,8 +1,8 @@
import { IconComponent } from '@/ui/display/icon/types/IconComponent';
import { FieldMetadata } from '@/ui/object/field/types/FieldMetadata';
import { ColumnDefinition } from '@/ui/object/record-table/types/ColumnDefinition';
import { Field } from '~/generated-metadata/graphql';
import { FieldMetadataItem } from '../types/FieldMetadataItem';
import { ObjectMetadataItem } from '../types/ObjectMetadataItem';
import { parseFieldType } from './parseFieldType';
@ -14,7 +14,7 @@ export const formatFieldMetadataItemAsColumnDefinition = ({
icons,
}: {
position: number;
field: Field;
field: FieldMetadataItem;
objectMetadataItem: Omit<ObjectMetadataItem, 'fields'>;
icons: Record<string, IconComponent>;
}): ColumnDefinition<FieldMetadata> => ({

View File

@ -1,7 +1,8 @@
import { FieldType } from '@/ui/object/field/types/FieldType';
import { Field } from '~/generated/graphql';
export const mapFieldMetadataToGraphQLQuery = (field: Field) => {
import { FieldMetadataItem } from '../types/FieldMetadataItem';
export const mapFieldMetadataToGraphQLQuery = (field: FieldMetadataItem) => {
// TODO: parse
const fieldType = field.type as FieldType;
@ -24,6 +25,26 @@ export const mapFieldMetadataToGraphQLQuery = (field: Field) => {
if (fieldIsSimpleValue) {
return field.name;
} else if (
fieldType === 'RELATION' &&
field.toRelationMetadata?.relationType === 'ONE_TO_MANY'
) {
return `${field.name}
{
id
}`;
} else if (
fieldType === 'RELATION' &&
field.fromRelationMetadata?.relationType === 'ONE_TO_MANY'
) {
return `${field.name}
{
edges {
node {
id
}
}
}`;
} else if (fieldIsURL) {
return `
${field.name}

View File

@ -2,10 +2,10 @@ import { ReactNode } from 'react';
import { useTheme } from '@emotion/react';
import styled from '@emotion/styled';
import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
import { useLazyLoadIcon } from '@/ui/input/hooks/useLazyLoadIcon';
import { TableCell } from '@/ui/layout/table/components/TableCell';
import { TableRow } from '@/ui/layout/table/components/TableRow';
import { Field } from '~/generated-metadata/graphql';
import { dataTypes } from '../../constants/dataTypes';
import { MetadataFieldDataType } from '../../types/ObjectFieldDataType';
@ -14,7 +14,7 @@ import { SettingsObjectFieldDataType } from './SettingsObjectFieldDataType';
type SettingsObjectFieldItemTableRowProps = {
ActionIcon: ReactNode;
fieldItem: Field;
fieldItem: FieldMetadataItem;
};
export const StyledObjectFieldTableRow = styled(TableRow)`

View File

@ -67,7 +67,7 @@ export const ViewBarEffect = () => {
useFindManyObjectRecords({
skip: !currentViewId,
objectNamePlural: 'viewFieldsV2',
filter: { viewId: { eq: currentViewId } },
filter: { view: { eq: currentViewId } },
onCompleted: useRecoilCallback(
({ snapshot, set }) =>
async (data: PaginatedObjectTypeResults<ViewField>) => {

View File

@ -41,7 +41,7 @@ export const useViewFields = (viewScopeId: string) => {
variables: {
input: {
fieldMetadataId: viewField.fieldMetadataId,
viewId: viewIdToPersist,
view: viewIdToPersist,
isVisible: viewField.isVisible,
size: viewField.size,
position: viewField.position,

View File

@ -27,7 +27,7 @@ export const mapViewFieldsToBoardFieldDefinitions = (
type: correspondingFieldMetadata.type,
position: viewField.position,
isVisible: viewField.isVisible,
viewFieldMetadataId: viewField.id,
viewFieldId: viewField.id,
}
: null;
})

View File

@ -28,7 +28,7 @@ export const mapViewFieldsToColumnDefinitions = (
position: viewField.position,
size: viewField.size ?? correspondingFieldMetadata.size,
isVisible: viewField.isVisible,
viewFieldMetadataId: viewField.id,
viewFieldId: viewField.id,
}
: null;
})