feat: refactor schema builder and resolver builder (#2215)

* feat: wip refactor schema builder

* feat: wip store types and first queries generation

* feat: refactor schema-builder and resolver-builder

* fix: clean & small type fix

* fix: avoid breaking change

* fix: remove util from pg-graphql classes

* fix: required default fields

* Refactor frontend accordingly

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
Jérémy M
2023-11-03 17:16:37 +01:00
committed by GitHub
parent aba3fd454b
commit 1ed4965a95
216 changed files with 3215 additions and 2028 deletions

View File

@ -2,6 +2,7 @@ import { ApolloClient, useMutation } from '@apollo/client';
import { getOperationName } from '@apollo/client/utilities';
import { FieldType } from '@/ui/object/field/types/FieldType';
import { FieldMetadataType } from '~/generated/graphql';
import {
CreateOneMetadataFieldMutation,
CreateOneMetadataFieldMutationVariables,
@ -12,10 +13,12 @@ import { FIND_MANY_METADATA_OBJECTS } from '../graphql/queries';
import { useApolloMetadataClient } from './useApolloMetadataClient';
type CreateOneMetadataFieldArgs =
CreateOneMetadataFieldMutationVariables['input']['field'] & {
type: FieldType;
};
type CreateOneMetadataFieldArgs = Omit<
CreateOneMetadataFieldMutationVariables['input']['field'],
'type'
> & {
type: FieldType;
};
export const useCreateOneMetadataField = () => {
const apolloMetadataClient = useApolloMetadataClient();
@ -33,6 +36,7 @@ export const useCreateOneMetadataField = () => {
input: {
field: {
...input,
type: input.type as FieldMetadataType, // Todo improve typing once we have aligned backend and frontend
},
},
},

View File

@ -1,44 +0,0 @@
import { isNonEmptyArray } from '~/utils/isNonEmptyArray';
import { useCreateOneMetadataField } from './useCreateOneMetadataField';
import { useCreateOneObjectMetadataItem } from './useCreateOneObjectMetadataItem';
export const useSeedCustomObjectsTemp = () => {
const { createOneObjectMetadataItem } = useCreateOneObjectMetadataItem();
const { createOneMetadataField } = useCreateOneMetadataField();
return async () => {
const { data: createdObjectMetadataItem, errors } =
await createOneObjectMetadataItem({
labelPlural: 'Suppliers',
labelSingular: 'Supplier',
nameSingular: 'supplier',
namePlural: 'suppliers',
description: 'Suppliers',
icon: 'IconBuilding',
});
if (!isNonEmptyArray(errors)) {
const supplierObjectId =
createdObjectMetadataItem?.createOneObject?.id ?? '';
await createOneMetadataField({
objectId: supplierObjectId,
name: 'name',
type: 'text',
description: 'Name',
label: 'Name',
icon: 'IconBuilding',
});
await createOneMetadataField({
objectId: supplierObjectId,
label: 'City',
name: 'city',
type: 'text',
description: 'City',
icon: 'IconMap',
});
}
};
};

View File

@ -12,5 +12,5 @@ export const formatMetadataFieldAsFilterDefinition = ({
fieldId: field.id,
label: field.label,
Icon: icons[field.icon ?? 'Icon123'],
type: 'text',
type: 'TEXT',
});

View File

@ -13,7 +13,7 @@ export const generateCreateOneObjectMutation = ({
return gql`
mutation CreateOne${capitalizedObjectName}($input: ${capitalizedObjectName}CreateInput!) {
createOne${capitalizedObjectName}(data: $input) {
create${capitalizedObjectName}(data: $input) {
id
}
}

View File

@ -13,7 +13,7 @@ export const generateDeleteOneObjectMutation = ({
return gql`
mutation DeleteOne${capitalizedObjectName}($idToDelete: ID!) {
deleteOne${capitalizedObjectName}(id: $idToDelete) {
delete${capitalizedObjectName}(id: $idToDelete) {
id
}
}

View File

@ -18,7 +18,7 @@ export const generateFindManyCustomObjectsQuery = ({
objectMetadataItem.nameSingular,
)}FilterInput, $orderBy: ${capitalize(
objectMetadataItem.nameSingular,
)}OrderBy) {
)}OrderByInput) {
${objectMetadataItem.namePlural}(filter: $filter, orderBy: $orderBy){
edges {
node {

View File

@ -13,7 +13,7 @@ export const generateUpdateOneObjectMutation = ({
return gql`
mutation UpdateOne${capitalizedObjectName}($idToUpdate: ID!, $input: ${capitalizedObjectName}UpdateInput!) {
updateOne${capitalizedObjectName}(id: $idToUpdate, data: $input) {
update${capitalizedObjectName}(id: $idToUpdate, data: $input) {
id
}
}

View File

@ -7,20 +7,20 @@ export const mapFieldMetadataToGraphQLQuery = (field: Field) => {
const fieldIsSimpleValue = (
[
'text',
'phone',
'date',
'email',
'number',
'boolean',
'date',
'TEXT',
'PHONE',
'DATE',
'EMAIL',
'NUMBER',
'BOOLEAN',
'DATE',
] as FieldType[]
).includes(fieldType);
const fieldIsURL = fieldType === 'url' || fieldType === 'urlV2';
const fieldIsURL = fieldType === 'URL' || fieldType === 'URL_V2';
const fieldIsMoneyAmount =
fieldType === 'money' || fieldType === 'moneyAmountV2';
fieldType === 'MONEY' || fieldType === 'MONEY_AMOUNT_V2';
if (fieldIsSimpleValue) {
return field.name;

View File

@ -2,11 +2,11 @@ import { FieldType } from '@/ui/object/field/types/FieldType';
export const parseFieldType = (fieldType: string): FieldType => {
if (fieldType === 'url') {
return 'urlV2';
return 'URL_V2';
}
if (fieldType === 'money') {
return 'moneyAmountV2';
return 'MONEY_AMOUNT_V2';
}
return fieldType as FieldType;