Feat/metadata add update and delete on frontend (#2102)

* Reworked metadata creation

* Wip

* Fix from PR

* Removed consolelog

* Post merge

* Fixed seeds
This commit is contained in:
Lucas Bordeau
2023-10-18 16:48:11 +02:00
committed by GitHub
parent 21c2834f52
commit 547a17b145
23 changed files with 482 additions and 77 deletions

View File

@ -13,8 +13,10 @@ import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/
* Therefore it is highly recommended to use the babel or swc plugin for production. * Therefore it is highly recommended to use the babel or swc plugin for production.
*/ */
const documents = { const documents = {
"\n mutation CreateOneObject($input: CreateOneObjectInput!) {\n createOneObject(input: $input) {\n id\n }\n }\n": types.CreateOneObjectDocument, "\n mutation CreateOneMetadataObject($input: CreateOneObjectInput!) {\n createOneObject(input: $input) {\n id\n }\n }\n": types.CreateOneMetadataObjectDocument,
"\n mutation CreateOneField($input: CreateOneFieldInput!) {\n createOneField(input: $input) {\n id\n type\n name\n label\n description\n icon\n placeholder\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n": types.CreateOneFieldDocument, "\n mutation CreateOneMetadataField($input: CreateOneFieldInput!) {\n createOneField(input: $input) {\n id\n type\n name\n label\n description\n icon\n placeholder\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n": types.CreateOneMetadataFieldDocument,
"\n mutation UpdateOneMetadataField(\n $idToUpdate: ID!\n $updatePayload: UpdateFieldInput!\n ) {\n updateOneField(input: { id: $idToUpdate, update: $updatePayload }) {\n id\n }\n }\n": types.UpdateOneMetadataFieldDocument,
"\n mutation UpdateOneMetadataObject(\n $idToUpdate: ID!\n $updatePayload: UpdateObjectInput!\n ) {\n updateOneObject(input: { id: $idToUpdate, update: $updatePayload }) {\n id\n }\n }\n": types.UpdateOneMetadataObjectDocument,
"\n query MetadataObjects {\n objects {\n edges {\n node {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isActive\n createdAt\n updatedAt\n fields {\n edges {\n node {\n id\n type\n name\n label\n description\n icon\n placeholder\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n totalCount\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n totalCount\n }\n }\n": types.MetadataObjectsDocument, "\n query MetadataObjects {\n objects {\n edges {\n node {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isActive\n createdAt\n updatedAt\n fields {\n edges {\n node {\n id\n type\n name\n label\n description\n icon\n placeholder\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n totalCount\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n totalCount\n }\n }\n": types.MetadataObjectsDocument,
}; };
@ -35,11 +37,19 @@ export function graphql(source: string): unknown;
/** /**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/ */
export function graphql(source: "\n mutation CreateOneObject($input: CreateOneObjectInput!) {\n createOneObject(input: $input) {\n id\n }\n }\n"): (typeof documents)["\n mutation CreateOneObject($input: CreateOneObjectInput!) {\n createOneObject(input: $input) {\n id\n }\n }\n"]; export function graphql(source: "\n mutation CreateOneMetadataObject($input: CreateOneObjectInput!) {\n createOneObject(input: $input) {\n id\n }\n }\n"): (typeof documents)["\n mutation CreateOneMetadataObject($input: CreateOneObjectInput!) {\n createOneObject(input: $input) {\n id\n }\n }\n"];
/** /**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/ */
export function graphql(source: "\n mutation CreateOneField($input: CreateOneFieldInput!) {\n createOneField(input: $input) {\n id\n type\n name\n label\n description\n icon\n placeholder\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n"): (typeof documents)["\n mutation CreateOneField($input: CreateOneFieldInput!) {\n createOneField(input: $input) {\n id\n type\n name\n label\n description\n icon\n placeholder\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n"]; export function graphql(source: "\n mutation CreateOneMetadataField($input: CreateOneFieldInput!) {\n createOneField(input: $input) {\n id\n type\n name\n label\n description\n icon\n placeholder\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n"): (typeof documents)["\n mutation CreateOneMetadataField($input: CreateOneFieldInput!) {\n createOneField(input: $input) {\n id\n type\n name\n label\n description\n icon\n placeholder\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
export function graphql(source: "\n mutation UpdateOneMetadataField(\n $idToUpdate: ID!\n $updatePayload: UpdateFieldInput!\n ) {\n updateOneField(input: { id: $idToUpdate, update: $updatePayload }) {\n id\n }\n }\n"): (typeof documents)["\n mutation UpdateOneMetadataField(\n $idToUpdate: ID!\n $updatePayload: UpdateFieldInput!\n ) {\n updateOneField(input: { id: $idToUpdate, update: $updatePayload }) {\n id\n }\n }\n"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
export function graphql(source: "\n mutation UpdateOneMetadataObject(\n $idToUpdate: ID!\n $updatePayload: UpdateObjectInput!\n ) {\n updateOneObject(input: { id: $idToUpdate, update: $updatePayload }) {\n id\n }\n }\n"): (typeof documents)["\n mutation UpdateOneMetadataObject(\n $idToUpdate: ID!\n $updatePayload: UpdateObjectInput!\n ) {\n updateOneObject(input: { id: $idToUpdate, update: $updatePayload }) {\n id\n }\n }\n"];
/** /**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/ */

View File

@ -862,19 +862,35 @@ export type ObjectEdge = {
node: Object; node: Object;
}; };
export type CreateOneObjectMutationVariables = Exact<{ export type CreateOneMetadataObjectMutationVariables = Exact<{
input: CreateOneObjectInput; input: CreateOneObjectInput;
}>; }>;
export type CreateOneObjectMutation = { __typename?: 'Mutation', createOneObject: { __typename?: 'object', id: string } }; export type CreateOneMetadataObjectMutation = { __typename?: 'Mutation', createOneObject: { __typename?: 'object', id: string } };
export type CreateOneFieldMutationVariables = Exact<{ export type CreateOneMetadataFieldMutationVariables = Exact<{
input: CreateOneFieldInput; input: CreateOneFieldInput;
}>; }>;
export type CreateOneFieldMutation = { __typename?: 'Mutation', createOneField: { __typename?: 'field', id: string, type: string, name: string, label: string, description?: string | null, icon?: string | null, placeholder?: string | null, isCustom: boolean, isActive: boolean, isNullable: boolean, createdAt: any, updatedAt: any } }; export type CreateOneMetadataFieldMutation = { __typename?: 'Mutation', createOneField: { __typename?: 'field', id: string, type: string, name: string, label: string, description?: string | null, icon?: string | null, placeholder?: string | null, isCustom: boolean, isActive: boolean, isNullable: boolean, createdAt: any, updatedAt: any } };
export type UpdateOneMetadataFieldMutationVariables = Exact<{
idToUpdate: Scalars['ID']['input'];
updatePayload: UpdateFieldInput;
}>;
export type UpdateOneMetadataFieldMutation = { __typename?: 'Mutation', updateOneField: { __typename?: 'field', id: string } };
export type UpdateOneMetadataObjectMutationVariables = Exact<{
idToUpdate: Scalars['ID']['input'];
updatePayload: UpdateObjectInput;
}>;
export type UpdateOneMetadataObjectMutation = { __typename?: 'Mutation', updateOneObject: { __typename?: 'object', id: string } };
export type MetadataObjectsQueryVariables = Exact<{ [key: string]: never; }>; export type MetadataObjectsQueryVariables = Exact<{ [key: string]: never; }>;
@ -882,6 +898,8 @@ export type MetadataObjectsQueryVariables = Exact<{ [key: string]: never; }>;
export type MetadataObjectsQuery = { __typename?: 'Query', objects: { __typename?: 'ObjectConnection', totalCount: number, edges: Array<{ __typename?: 'objectEdge', node: { __typename?: 'object', id: string, dataSourceId: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, description?: string | null, icon?: string | null, isCustom: boolean, isActive: boolean, createdAt: any, updatedAt: any, fields: { __typename?: 'ObjectFieldsConnection', totalCount: number, edges: Array<{ __typename?: 'fieldEdge', node: { __typename?: 'field', id: string, type: string, name: string, label: string, description?: string | null, icon?: string | null, placeholder?: string | null, isCustom: boolean, isActive: boolean, isNullable: boolean, createdAt: any, updatedAt: any } }>, pageInfo: { __typename?: 'PageInfo', hasNextPage?: boolean | null, hasPreviousPage?: boolean | null, startCursor?: any | null, endCursor?: any | null } } } }>, pageInfo: { __typename?: 'PageInfo', hasNextPage?: boolean | null, hasPreviousPage?: boolean | null, startCursor?: any | null, endCursor?: any | null } } }; export type MetadataObjectsQuery = { __typename?: 'Query', objects: { __typename?: 'ObjectConnection', totalCount: number, edges: Array<{ __typename?: 'objectEdge', node: { __typename?: 'object', id: string, dataSourceId: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, description?: string | null, icon?: string | null, isCustom: boolean, isActive: boolean, createdAt: any, updatedAt: any, fields: { __typename?: 'ObjectFieldsConnection', totalCount: number, edges: Array<{ __typename?: 'fieldEdge', node: { __typename?: 'field', id: string, type: string, name: string, label: string, description?: string | null, icon?: string | null, placeholder?: string | null, isCustom: boolean, isActive: boolean, isNullable: boolean, createdAt: any, updatedAt: any } }>, pageInfo: { __typename?: 'PageInfo', hasNextPage?: boolean | null, hasPreviousPage?: boolean | null, startCursor?: any | null, endCursor?: any | null } } } }>, pageInfo: { __typename?: 'PageInfo', hasNextPage?: boolean | null, hasPreviousPage?: boolean | null, startCursor?: any | null, endCursor?: any | null } } };
export const CreateOneObjectDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateOneObject"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CreateOneObjectInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createOneObject"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode<CreateOneObjectMutation, CreateOneObjectMutationVariables>; export const CreateOneMetadataObjectDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateOneMetadataObject"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CreateOneObjectInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createOneObject"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode<CreateOneMetadataObjectMutation, CreateOneMetadataObjectMutationVariables>;
export const CreateOneFieldDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateOneField"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CreateOneFieldInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createOneField"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"placeholder"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]}}]} as unknown as DocumentNode<CreateOneFieldMutation, CreateOneFieldMutationVariables>; export const CreateOneMetadataFieldDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateOneMetadataField"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CreateOneFieldInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createOneField"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"placeholder"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]}}]} as unknown as DocumentNode<CreateOneMetadataFieldMutation, CreateOneMetadataFieldMutationVariables>;
export const UpdateOneMetadataFieldDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateOneMetadataField"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"idToUpdate"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"updatePayload"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UpdateFieldInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"updateOneField"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"idToUpdate"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"update"},"value":{"kind":"Variable","name":{"kind":"Name","value":"updatePayload"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode<UpdateOneMetadataFieldMutation, UpdateOneMetadataFieldMutationVariables>;
export const UpdateOneMetadataObjectDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateOneMetadataObject"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"idToUpdate"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"updatePayload"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UpdateObjectInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"updateOneObject"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"idToUpdate"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"update"},"value":{"kind":"Variable","name":{"kind":"Name","value":"updatePayload"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode<UpdateOneMetadataObjectMutation, UpdateOneMetadataObjectMutationVariables>;
export const MetadataObjectsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"MetadataObjects"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"objects"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"dataSourceId"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}},{"kind":"Field","name":{"kind":"Name","value":"labelSingular"}},{"kind":"Field","name":{"kind":"Name","value":"labelPlural"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"fields"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"placeholder"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"pageInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"hasNextPage"}},{"kind":"Field","name":{"kind":"Name","value":"hasPreviousPage"}},{"kind":"Field","name":{"kind":"Name","value":"startCursor"}},{"kind":"Field","name":{"kind":"Name","value":"endCursor"}}]}},{"kind":"Field","name":{"kind":"Name","value":"totalCount"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"pageInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"hasNextPage"}},{"kind":"Field","name":{"kind":"Name","value":"hasPreviousPage"}},{"kind":"Field","name":{"kind":"Name","value":"startCursor"}},{"kind":"Field","name":{"kind":"Name","value":"endCursor"}}]}},{"kind":"Field","name":{"kind":"Name","value":"totalCount"}}]}}]}}]} as unknown as DocumentNode<MetadataObjectsQuery, MetadataObjectsQueryVariables>; export const MetadataObjectsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"MetadataObjects"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"objects"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"dataSourceId"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}},{"kind":"Field","name":{"kind":"Name","value":"labelSingular"}},{"kind":"Field","name":{"kind":"Name","value":"labelPlural"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"fields"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"placeholder"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"pageInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"hasNextPage"}},{"kind":"Field","name":{"kind":"Name","value":"hasPreviousPage"}},{"kind":"Field","name":{"kind":"Name","value":"startCursor"}},{"kind":"Field","name":{"kind":"Name","value":"endCursor"}}]}},{"kind":"Field","name":{"kind":"Name","value":"totalCount"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"pageInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"hasNextPage"}},{"kind":"Field","name":{"kind":"Name","value":"hasPreviousPage"}},{"kind":"Field","name":{"kind":"Name","value":"startCursor"}},{"kind":"Field","name":{"kind":"Name","value":"endCursor"}}]}},{"kind":"Field","name":{"kind":"Name","value":"totalCount"}}]}}]}}]} as unknown as DocumentNode<MetadataObjectsQuery, MetadataObjectsQueryVariables>;

View File

@ -16,7 +16,7 @@ import { UserProvider } from '@/users/components/UserProvider';
import '@emotion/react'; import '@emotion/react';
import { PageChangeEffect } from './effect-components/PageChangeEffect'; import { PageChangeEffect } from './effect-components/PageChangeEffect';
import { ApolloMetadataClientProvider } from './modules/metadata/components/ApolloClientMetadataProvider'; import { ApolloMetadataClientProvider } from './modules/metadata/components/ApolloMetadataClientProvider';
import { FetchMetadataEffect } from './modules/metadata/components/FetchMetadataEffect'; import { FetchMetadataEffect } from './modules/metadata/components/FetchMetadataEffect';
import { App } from './App'; import { App } from './App';

View File

@ -1,11 +1,13 @@
import { useEffect } from 'react'; import { useEffect, useState } from 'react';
import { useRecoilState } from 'recoil'; import { useRecoilState } from 'recoil';
import { isFlexibleBackendEnabledState } from '@/client-config/states/isFlexibleBackendEnabledState'; import { isFlexibleBackendEnabledState } from '@/client-config/states/isFlexibleBackendEnabledState';
import { MetadataObjectsQuery } from '~/generated-metadata/graphql'; import { MetadataObjectsQuery } from '~/generated-metadata/graphql';
import { GET_ALL_OBJECTS } from '../graphql/queries'; import { FIND_MANY_METADATA_OBJECTS } from '../graphql/queries';
import { useApolloMetadataClient } from '../hooks/useApolloClientMetadata'; import { useApolloMetadataClient } from '../hooks/useApolloMetadataClient';
import { useCreateOneObject } from '../hooks/useCreateOneObject';
import { useFindManyObjects } from '../hooks/useFindManyObjects';
import { useSeedCustomObjectsTemp } from '../hooks/useSeedCustomObjectsTemp'; import { useSeedCustomObjectsTemp } from '../hooks/useSeedCustomObjectsTemp';
import { metadataObjectsState } from '../states/metadataObjectsState'; import { metadataObjectsState } from '../states/metadataObjectsState';
import { MetadataObject } from '../types/MetadataObject'; import { MetadataObject } from '../types/MetadataObject';
@ -20,13 +22,44 @@ export const FetchMetadataEffect = () => {
const seedCustomObjectsTemp = useSeedCustomObjectsTemp(); const seedCustomObjectsTemp = useSeedCustomObjectsTemp();
const { createOneObject } = useCreateOneObject({
objectNamePlural: 'suppliers',
});
const { objects: suppliers, loading } = useFindManyObjects({
objectNamePlural: 'suppliers',
});
const [created, setCreated] = useState(false);
useEffect(() => {
if (!created && !loading && suppliers.length === 0 && createOneObject) {
createOneObject({
name: 'Supplier 1',
city: 'City 1',
});
createOneObject({
name: 'Supplier 2',
city: 'City 2',
});
createOneObject({
name: 'Supplier 3',
city: 'City 3',
});
setCreated(true);
}
}, [suppliers, createOneObject, loading, created]);
useEffect(() => { useEffect(() => {
if (!isFlexibleBackendEnabled) return; if (!isFlexibleBackendEnabled) return;
(async () => { (async () => {
if (apolloMetadataClient && metadataObjects.length === 0) { if (apolloMetadataClient && metadataObjects.length === 0) {
const objects = await apolloMetadataClient.query<MetadataObjectsQuery>({ const objects = await apolloMetadataClient.query<MetadataObjectsQuery>({
query: GET_ALL_OBJECTS, query: FIND_MANY_METADATA_OBJECTS,
}); });
if ( if (
@ -48,7 +81,7 @@ export const FetchMetadataEffect = () => {
const objects = const objects =
await apolloMetadataClient.query<MetadataObjectsQuery>({ await apolloMetadataClient.query<MetadataObjectsQuery>({
query: GET_ALL_OBJECTS, query: FIND_MANY_METADATA_OBJECTS,
}); });
const formattedObjects: MetadataObject[] = const formattedObjects: MetadataObject[] =

View File

@ -10,7 +10,7 @@ import { savedSortsFamilyState } from '@/ui/data/view-bar/states/savedSortsFamil
import { sortsScopedState } from '@/ui/data/view-bar/states/sortsScopedState'; import { sortsScopedState } from '@/ui/data/view-bar/states/sortsScopedState';
import { useRecoilScopeId } from '@/ui/utilities/recoil-scope/hooks/useRecoilScopeId'; import { useRecoilScopeId } from '@/ui/utilities/recoil-scope/hooks/useRecoilScopeId';
import { useFindManyCustomObjects } from '../hooks/useFindManyCustomObjects'; import { useFindManyObjects } from '../hooks/useFindManyObjects';
import { useSetObjectDataTableData } from '../hooks/useSetDataTableData'; import { useSetObjectDataTableData } from '../hooks/useSetDataTableData';
export const ObjectDataTableEffect = ({ export const ObjectDataTableEffect = ({
@ -22,7 +22,7 @@ export const ObjectDataTableEffect = ({
}) => { }) => {
const setDataTableData = useSetObjectDataTableData(); const setDataTableData = useSetObjectDataTableData();
const { objects } = useFindManyCustomObjects({ const { objects } = useFindManyObjects({
objectNamePlural: objectNamePlural, objectNamePlural: objectNamePlural,
}); });

View File

@ -37,7 +37,7 @@ export const ObjectTable = ({
/> />
<ViewBarContext.Provider <ViewBarContext.Provider
value={{ value={{
defaultViewName: 'All Suppliers', defaultViewName: '???',
onCurrentViewSubmit: submitCurrentView, onCurrentViewSubmit: submitCurrentView,
onViewCreate: createView, onViewCreate: createView,
onViewEdit: updateView, onViewEdit: updateView,

View File

@ -1,15 +1,15 @@
import { gql } from '@apollo/client'; import { gql } from '@apollo/client';
export const CREATE_ONE_OBJECT = gql` export const CREATE_ONE_METADATA_OBJECT = gql`
mutation CreateOneObject($input: CreateOneObjectInput!) { mutation CreateOneMetadataObject($input: CreateOneObjectInput!) {
createOneObject(input: $input) { createOneObject(input: $input) {
id id
} }
} }
`; `;
export const CREATE_ONE_FIELD = gql` export const CREATE_ONE_METADATA_FIELD = gql`
mutation CreateOneField($input: CreateOneFieldInput!) { mutation CreateOneMetadataField($input: CreateOneFieldInput!) {
createOneField(input: $input) { createOneField(input: $input) {
id id
type type
@ -26,3 +26,25 @@ export const CREATE_ONE_FIELD = gql`
} }
} }
`; `;
export const UPDATE_ONE_METADATA_FIELD = gql`
mutation UpdateOneMetadataField(
$idToUpdate: ID!
$updatePayload: UpdateFieldInput!
) {
updateOneField(input: { id: $idToUpdate, update: $updatePayload }) {
id
}
}
`;
export const UPDATE_ONE_METADATA_OBJECT = gql`
mutation UpdateOneMetadataObject(
$idToUpdate: ID!
$updatePayload: UpdateObjectInput!
) {
updateOneObject(input: { id: $idToUpdate, update: $updatePayload }) {
id
}
}
`;

View File

@ -1,6 +1,6 @@
import { gql } from '@apollo/client'; import { gql } from '@apollo/client';
export const GET_ALL_OBJECTS = gql` export const FIND_MANY_METADATA_OBJECTS = gql`
query MetadataObjects { query MetadataObjects {
objects { objects {
edges { edges {

View File

@ -3,5 +3,7 @@ import { useContext } from 'react';
import { ApolloMetadataClientContext } from '../context/ApolloClientMetadataContext'; import { ApolloMetadataClientContext } from '../context/ApolloClientMetadataContext';
export const useApolloMetadataClient = () => { export const useApolloMetadataClient = () => {
return useContext(ApolloMetadataClientContext); const apolloMetadataClient = useContext(ApolloMetadataClientContext);
return apolloMetadataClient;
}; };

View File

@ -2,27 +2,27 @@ import { ApolloClient, useMutation } from '@apollo/client';
import { getOperationName } from '@apollo/client/utilities'; import { getOperationName } from '@apollo/client/utilities';
import { import {
CreateOneFieldMutation, CreateOneMetadataFieldMutation,
CreateOneFieldMutationVariables, CreateOneMetadataFieldMutationVariables,
} from '~/generated-metadata/graphql'; } from '~/generated-metadata/graphql';
import { CREATE_ONE_FIELD } from '../graphql/mutations'; import { CREATE_ONE_METADATA_FIELD } from '../graphql/mutations';
import { GET_ALL_OBJECTS } from '../graphql/queries'; import { FIND_MANY_METADATA_OBJECTS } from '../graphql/queries';
import { useApolloMetadataClient } from './useApolloClientMetadata'; import { useApolloMetadataClient } from './useApolloMetadataClient';
export const useCreateOneMetadataField = () => { export const useCreateOneMetadataField = () => {
const apolloMetadataClient = useApolloMetadataClient(); const apolloMetadataClient = useApolloMetadataClient();
const [mutate] = useMutation< const [mutate] = useMutation<
CreateOneFieldMutation, CreateOneMetadataFieldMutation,
CreateOneFieldMutationVariables CreateOneMetadataFieldMutationVariables
>(CREATE_ONE_FIELD, { >(CREATE_ONE_METADATA_FIELD, {
client: apolloMetadataClient ?? ({} as ApolloClient<any>), client: apolloMetadataClient ?? ({} as ApolloClient<any>),
}); });
const createOneMetadataField = ( const createOneMetadataField = (
input: CreateOneFieldMutationVariables['input']['field'], input: CreateOneMetadataFieldMutationVariables['input']['field'],
) => ) =>
mutate({ mutate({
variables: { variables: {
@ -32,7 +32,7 @@ export const useCreateOneMetadataField = () => {
}, },
}, },
}, },
refetchQueries: [getOperationName(GET_ALL_OBJECTS) ?? ''], refetchQueries: [getOperationName(FIND_MANY_METADATA_OBJECTS) ?? ''],
}); });
return { return {

View File

@ -2,27 +2,27 @@ import { ApolloClient, useMutation } from '@apollo/client';
import { getOperationName } from '@apollo/client/utilities'; import { getOperationName } from '@apollo/client/utilities';
import { import {
CreateOneObjectMutation, CreateOneMetadataObjectMutation,
CreateOneObjectMutationVariables, CreateOneMetadataObjectMutationVariables,
} from '~/generated-metadata/graphql'; } from '~/generated-metadata/graphql';
import { CREATE_ONE_OBJECT } from '../graphql/mutations'; import { CREATE_ONE_METADATA_OBJECT } from '../graphql/mutations';
import { GET_ALL_OBJECTS } from '../graphql/queries'; import { FIND_MANY_METADATA_OBJECTS } from '../graphql/queries';
import { useApolloMetadataClient } from './useApolloClientMetadata'; import { useApolloMetadataClient } from './useApolloMetadataClient';
export const useCreateOneMetadataObject = () => { export const useCreateOneMetadataObject = () => {
const apolloMetadataClient = useApolloMetadataClient(); const apolloMetadataClient = useApolloMetadataClient();
const [mutate] = useMutation< const [mutate] = useMutation<
CreateOneObjectMutation, CreateOneMetadataObjectMutation,
CreateOneObjectMutationVariables CreateOneMetadataObjectMutationVariables
>(CREATE_ONE_OBJECT, { >(CREATE_ONE_METADATA_OBJECT, {
client: apolloMetadataClient ?? ({} as ApolloClient<any>), client: apolloMetadataClient ?? ({} as ApolloClient<any>),
}); });
const createOneMetadataObject = ( const createOneMetadataObject = (
input: CreateOneObjectMutationVariables['input']['object'], input: CreateOneMetadataObjectMutationVariables['input']['object'],
) => ) =>
mutate({ mutate({
variables: { variables: {
@ -32,7 +32,7 @@ export const useCreateOneMetadataObject = () => {
}, },
}, },
}, },
refetchQueries: [getOperationName(GET_ALL_OBJECTS) ?? ''], refetchQueries: [getOperationName(FIND_MANY_METADATA_OBJECTS) ?? ''],
}); });
return { return {

View File

@ -0,0 +1,49 @@
import { gql, useMutation } from '@apollo/client';
import { generateCreateOneObjectMutation } from '../utils/generateCreateOneObjectMutation';
import { useFindManyMetadataObjects } from './useFindManyMetadataObjects';
export const useCreateOneObject = ({
objectNamePlural,
}: {
objectNamePlural: string;
}) => {
const { metadataObjects } = useFindManyMetadataObjects();
const foundMetadataObject = metadataObjects.find(
(object) => object.namePlural === objectNamePlural,
);
const generatedMutation = foundMetadataObject
? generateCreateOneObjectMutation({
metadataObject: foundMetadataObject,
})
: gql`
mutation EmptyMutation {
empty
}
`;
const [mutate] = useMutation(generatedMutation);
const createOneObject = foundMetadataObject
? (input: Record<string, any>) => {
return mutate({
variables: {
input: {
...input,
},
},
});
}
: undefined;
const objectNotFoundInMetadata =
metadataObjects.length > 0 && !foundMetadataObject;
return {
createOneObject,
objectNotFoundInMetadata,
};
};

View File

@ -0,0 +1,60 @@
import { useMemo } from 'react';
import { useQuery } from '@apollo/client';
import {
MetadataObjectsQuery,
MetadataObjectsQueryVariables,
} from '~/generated-metadata/graphql';
import { FIND_MANY_METADATA_OBJECTS } from '../graphql/queries';
import { formatPagedMetadataObjectsToMetadataObjects } from '../utils/formatPagedMetadataObjectsToMetadataObjects';
import { useApolloMetadataClient } from './useApolloMetadataClient';
// TODO: test fetchMore
export const useFindManyMetadataObjects = () => {
const apolloMetadataClient = useApolloMetadataClient();
const { data, fetchMore: fetchMoreInternal } = useQuery<
MetadataObjectsQuery,
MetadataObjectsQueryVariables
>(FIND_MANY_METADATA_OBJECTS, {
client: apolloMetadataClient ?? undefined,
skip: !apolloMetadataClient,
});
const hasMore = data?.objects?.pageInfo?.hasNextPage;
const fetchMore = () =>
fetchMoreInternal({
variables: {
afterCursor: data?.objects?.pageInfo?.endCursor,
},
});
const metadataObjects = useMemo(() => {
return formatPagedMetadataObjectsToMetadataObjects({
pagedMetadataObjects: data,
});
}, [data]);
const getMetadataObjectsFromCache = () => {
const queryResult = apolloMetadataClient?.readQuery<
MetadataObjectsQuery,
MetadataObjectsQueryVariables
>({
query: FIND_MANY_METADATA_OBJECTS,
});
return formatPagedMetadataObjectsToMetadataObjects({
pagedMetadataObjects: queryResult ?? undefined,
});
};
return {
metadataObjects,
hasMore,
fetchMore,
getMetadataObjectsFromCache,
};
};

View File

@ -5,16 +5,18 @@ import { PaginatedObjectType } from '../types/PaginatedObjectType';
import { formatPagedObjectsToObjects } from '../utils/formatPagedObjectsToObjects'; import { formatPagedObjectsToObjects } from '../utils/formatPagedObjectsToObjects';
import { generateFindManyCustomObjectsQuery } from '../utils/generateFindManyCustomObjectsQuery'; import { generateFindManyCustomObjectsQuery } from '../utils/generateFindManyCustomObjectsQuery';
import { useFindAllMetadata } from './useFindAllMetadata'; import { useFindManyMetadataObjects } from './useFindManyMetadataObjects';
// TODO: test with a wrong name // TODO: test with a wrong name
// TODO: add zod to validate that we have at least id on each object // TODO: add zod to validate that we have at least id on each object
export const useFindManyCustomObjects = <ObjectType extends { id: string }>({ export const useFindManyObjects = <
ObjectType extends { id: string } & Record<string, any>,
>({
objectNamePlural, objectNamePlural,
}: { }: {
objectNamePlural: string; objectNamePlural: string;
}) => { }) => {
const { metadataObjects } = useFindAllMetadata(); const { metadataObjects } = useFindManyMetadataObjects();
const foundMetadataObject = metadataObjects.find( const foundMetadataObject = metadataObjects.find(
(object) => object.namePlural === objectNamePlural, (object) => object.namePlural === objectNamePlural,

View File

@ -1,39 +1,75 @@
import { isNonEmptyArray } from '~/utils/isNonEmptyArray';
import { useCreateOneMetadataField } from './useCreateOneMetadataField'; import { useCreateOneMetadataField } from './useCreateOneMetadataField';
import { useCreateOneMetadataObject } from './useCreateOneMetadataObject'; import { useCreateOneMetadataObject } from './useCreateOneMetadataObject';
import { useUpdateOneMetadataField } from './useUpdateOneMetadataField';
import { useUpdateOneMetadataObject } from './useUpdateOneMetadataObject';
export const useSeedCustomObjectsTemp = () => { export const useSeedCustomObjectsTemp = () => {
const { createOneMetadataObject } = useCreateOneMetadataObject(); const { createOneMetadataObject } = useCreateOneMetadataObject();
const { createOneMetadataField } = useCreateOneMetadataField(); const { createOneMetadataField } = useCreateOneMetadataField();
const { updateOneMetadataObject } = useUpdateOneMetadataObject();
const { updateOneMetadataField } = useUpdateOneMetadataField();
return async () => { return async () => {
const createdMetadataObject = await createOneMetadataObject({ const { data: createdMetadataObject, errors } =
labelPlural: 'Suppliers', await createOneMetadataObject({
labelSingular: 'Supplier', labelPlural: 'Suppliers',
nameSingular: 'supplier', labelSingular: 'Supplier',
namePlural: 'suppliers', nameSingular: 'supplier',
description: 'Suppliers', namePlural: 'suppliers',
icon: 'IconBuilding', description: 'Suppliers',
}); icon: 'IconBuilding',
});
const supplierObjectId = if (!isNonEmptyArray(errors)) {
createdMetadataObject.data?.createOneObject?.id ?? ''; const supplierObjectId = createdMetadataObject?.createOneObject?.id ?? '';
await createOneMetadataField({ const { data: createNameFieldData } = await createOneMetadataField({
objectId: supplierObjectId, objectId: supplierObjectId,
name: 'name', name: 'name',
type: 'text', type: 'text',
description: 'Name', description: 'Name',
label: 'Name', label: 'Name',
icon: 'IconBuilding', icon: 'IconBuilding',
}); });
await createOneMetadataField({ const nameFieldId = createNameFieldData?.createOneField.id ?? '';
objectId: supplierObjectId,
label: 'City', const { data: createCityFieldData } = await createOneMetadataField({
name: 'city', objectId: supplierObjectId,
type: 'text', label: 'City',
description: 'City', name: 'city',
icon: 'IconMap', type: 'text',
}); description: 'City',
icon: 'IconMap',
});
const cityFieldId = createCityFieldData?.createOneField.id ?? '';
await updateOneMetadataObject({
idToUpdate: supplierObjectId,
updatePayload: {
labelPlural: 'Suppliers 2',
},
});
await updateOneMetadataField({
objectIdToUpdate: supplierObjectId,
fieldIdToUpdate: cityFieldId,
updatePayload: {
label: 'City 2',
},
});
await updateOneMetadataField({
objectIdToUpdate: supplierObjectId,
fieldIdToUpdate: nameFieldId,
updatePayload: {
label: 'Name 2',
},
});
}
}; };
}; };

View File

@ -0,0 +1,76 @@
import { useMutation } from '@apollo/client';
import { getOperationName } from '@apollo/client/utilities';
import {
UpdateOneMetadataFieldMutation,
UpdateOneMetadataFieldMutationVariables,
} from '~/generated-metadata/graphql';
import { UPDATE_ONE_METADATA_FIELD } from '../graphql/mutations';
import { FIND_MANY_METADATA_OBJECTS } from '../graphql/queries';
import { useApolloMetadataClient } from './useApolloMetadataClient';
import { useFindManyMetadataObjects } from './useFindManyMetadataObjects';
export const useUpdateOneMetadataField = () => {
const apolloMetadataClient = useApolloMetadataClient();
const { getMetadataObjectsFromCache } = useFindManyMetadataObjects();
const [mutate] = useMutation<
UpdateOneMetadataFieldMutation,
UpdateOneMetadataFieldMutationVariables
>(UPDATE_ONE_METADATA_FIELD, {
client: apolloMetadataClient ?? undefined,
});
const updateOneMetadataField = ({
objectIdToUpdate,
fieldIdToUpdate,
updatePayload,
}: {
objectIdToUpdate: string;
fieldIdToUpdate: UpdateOneMetadataFieldMutationVariables['idToUpdate'];
updatePayload: Partial<
Pick<
UpdateOneMetadataFieldMutationVariables['updatePayload'],
'description' | 'icon' | 'isActive' | 'label'
>
>;
}) => {
const metadataObjects = getMetadataObjectsFromCache();
const foundMetadataObject = metadataObjects.find(
(metadataObject) => metadataObject.id === objectIdToUpdate,
);
if (!foundMetadataObject)
throw new Error(`Metadata object with id ${objectIdToUpdate} not found`);
const foundMetadataField = foundMetadataObject.fields.find(
(metadataField) => metadataField.id === fieldIdToUpdate,
);
if (!foundMetadataField)
throw new Error(`Metadata field with id ${fieldIdToUpdate} not found`);
return mutate({
variables: {
idToUpdate: fieldIdToUpdate,
updatePayload: {
name: foundMetadataField.name,
description: foundMetadataField.description,
icon: foundMetadataField.icon,
isActive: foundMetadataField.isActive,
label: foundMetadataField.label,
...updatePayload,
},
},
refetchQueries: [getOperationName(FIND_MANY_METADATA_OBJECTS) ?? ''],
});
};
return {
updateOneMetadataField,
};
};

View File

@ -0,0 +1,71 @@
import { useMutation } from '@apollo/client';
import { getOperationName } from '@apollo/client/utilities';
import {
UpdateOneMetadataObjectMutation,
UpdateOneMetadataObjectMutationVariables,
} from '~/generated-metadata/graphql';
import { UPDATE_ONE_METADATA_OBJECT } from '../graphql/mutations';
import { FIND_MANY_METADATA_OBJECTS } from '../graphql/queries';
import { useApolloMetadataClient } from './useApolloMetadataClient';
import { useFindManyMetadataObjects } from './useFindManyMetadataObjects';
// TODO: Slice the Apollo store synchronously in the update function instead of subscribing, so we can use update after read in the same function call
export const useUpdateOneMetadataObject = () => {
const apolloClientMetadata = useApolloMetadataClient();
const { getMetadataObjectsFromCache: queryMetadataObjects } =
useFindManyMetadataObjects();
const [mutate] = useMutation<
UpdateOneMetadataObjectMutation,
UpdateOneMetadataObjectMutationVariables
>(UPDATE_ONE_METADATA_OBJECT, {
client: apolloClientMetadata ?? undefined,
});
const updateOneMetadataObject = ({
idToUpdate,
updatePayload,
}: {
idToUpdate: UpdateOneMetadataObjectMutationVariables['idToUpdate'];
updatePayload: Partial<
Pick<
UpdateOneMetadataObjectMutationVariables['updatePayload'],
'description' | 'icon' | 'isActive' | 'labelPlural' | 'labelSingular'
>
>;
}) => {
const metadataObjects = queryMetadataObjects();
const foundMetadataObject = metadataObjects.find(
(metadataObject) => metadataObject.id === idToUpdate,
);
if (!foundMetadataObject)
throw new Error(`Metadata object with id ${idToUpdate} not found`);
return mutate({
variables: {
idToUpdate,
updatePayload: {
namePlural: foundMetadataObject.namePlural,
nameSingular: foundMetadataObject.nameSingular,
description: foundMetadataObject.description,
icon: foundMetadataObject.icon,
isActive: foundMetadataObject.isActive,
labelPlural: foundMetadataObject.labelPlural,
labelSingular: foundMetadataObject.labelSingular,
...updatePayload,
},
},
refetchQueries: [getOperationName(FIND_MANY_METADATA_OBJECTS) ?? ''],
});
};
return {
updateOneMetadataObject,
};
};

View File

@ -1,5 +1,5 @@
export const formatPagedObjectsToObjects = < export const formatPagedObjectsToObjects = <
ObjectType extends { id: string }, ObjectType extends { id: string } & Record<string, any>,
ObjectTypeQuery extends { ObjectTypeQuery extends {
[objectNamePlural: string]: { [objectNamePlural: string]: {
edges: ObjectEdge[]; edges: ObjectEdge[];

View File

@ -0,0 +1,21 @@
import { gql } from '@apollo/client';
import { capitalize } from '~/utils/string/capitalize';
import { MetadataObject } from '../types/MetadataObject';
export const generateCreateOneObjectMutation = ({
metadataObject,
}: {
metadataObject: MetadataObject;
}) => {
const capitalizedObjectName = capitalize(metadataObject.nameSingular);
return gql`
mutation CreateOne${capitalizedObjectName}($input: ${capitalizedObjectName}CreateInput!) {
createOne${capitalizedObjectName}(data: $input) {
id
}
}
`;
};

View File

@ -24,7 +24,9 @@ export const ObjectTablePage = ({
objectNameSingular: string; objectNameSingular: string;
objectNamePlural: string; objectNamePlural: string;
}) => { }) => {
const handleAddButtonClick = async () => {}; const handleAddButtonClick = async () => {
//
};
return ( return (
<PageContainer> <PageContainer>

View File

@ -1,5 +1,5 @@
export const isNonEmptyArray = <T>( export const isNonEmptyArray = <T>(
probableArray: T[] | undefined | null, probableArray: T[] | readonly T[] | undefined | null,
): probableArray is NonNullable<T[]> => { ): probableArray is NonNullable<T[]> => {
if ( if (
Array.isArray(probableArray) && Array.isArray(probableArray) &&

View File

@ -0,0 +1,3 @@
export const capitalize = (stringToCapitalize: string) => {
return stringToCapitalize[0].toUpperCase() + stringToCapitalize.slice(1);
};