From b9154f315e767566cbd95bbfcd6c36d4e9520cba Mon Sep 17 00:00:00 2001 From: Marie <51697796+ijreilly@users.noreply.github.com> Date: Mon, 13 May 2024 17:43:51 +0200 Subject: [PATCH] Enable deletion of relation fields (#5338) In this PR 1. Enable deletion of relation fields in the product and via the api (migration part was missing in the api) 3. Change wording, only use "deactivate" and "delete" everywhere (and not a mix of the two + "disable", "erase") --- .../src/generated-metadata/gql.ts | 9 +- .../src/generated-metadata/graphql.ts | 29 +++-- .../twenty-front/src/generated/graphql.tsx | 35 +++--- .../object-metadata/graphql/mutations.ts | 8 ++ .../object-metadata/graphql/queries.ts | 1 + .../useDeleteOneRelationMetadataItem.ts | 15 +++ .../hooks/__mocks__/useFieldMetadataItem.ts | 34 ++++-- .../useDeleteOneRelationMetadataItem.test.tsx | 49 +++++++++ .../__tests__/useFieldMetadataItem.test.tsx | 80 ++++++++++++-- .../hooks/useDeleteOneRelationMetadataItem.ts | 39 +++++++ .../hooks/useFieldMetadataItem.ts | 18 +++- .../types/FieldMetadataItem.ts | 2 + .../fieldMetadataItemSchema.ts | 1 + ...tingsObjectFieldDisabledActionDropdown.tsx | 19 ++-- .../SettingsObjectInactiveMenuDropDown.tsx | 12 +-- ...ingsObjectInactiveMenuDropDown.stories.tsx | 16 +-- .../data-model/SettingsObjectDetail.tsx | 33 +++--- .../data-model/SettingsObjectEdit.tsx | 4 +- .../data-model/SettingsObjectFieldEdit.tsx | 15 +-- .../SettingsObjectNewFieldStep1.tsx | 20 ++-- .../settings/data-model/SettingsObjects.tsx | 2 +- .../SettingsObjectNewFieldStep1.stories.tsx | 2 +- .../SettingsDevelopersApiKeyDetail.tsx | 2 +- .../SettingsDevelopersWebhookDetail.tsx | 2 +- .../standard-metadata-query-result.ts | 100 ++++++++++++++++++ .../src/testing/mock-data/metadata.ts | 1 + .../dtos/relation-definition.dto.ts | 6 ++ .../field-metadata/field-metadata.service.ts | 2 + .../relation-metadata.module.ts | 3 +- .../relation-metadata.service.ts | 77 +++++++++++++- 30 files changed, 519 insertions(+), 117 deletions(-) create mode 100644 packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/useDeleteOneRelationMetadataItem.ts create mode 100644 packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useDeleteOneRelationMetadataItem.test.tsx create mode 100644 packages/twenty-front/src/modules/object-metadata/hooks/useDeleteOneRelationMetadataItem.ts diff --git a/packages/twenty-front/src/generated-metadata/gql.ts b/packages/twenty-front/src/generated-metadata/gql.ts index c632dfedc..015c5054f 100644 --- a/packages/twenty-front/src/generated-metadata/gql.ts +++ b/packages/twenty-front/src/generated-metadata/gql.ts @@ -30,7 +30,8 @@ const documents = { "\n mutation UpdateOneObjectMetadataItem(\n $idToUpdate: UUID!\n $updatePayload: UpdateObjectPayload!\n ) {\n updateOneObject(input: { id: $idToUpdate, update: $updatePayload }) {\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 labelIdentifierFieldMetadataId\n imageIdentifierFieldMetadataId\n }\n }\n": types.UpdateOneObjectMetadataItemDocument, "\n mutation DeleteOneObjectMetadataItem($idToDelete: UUID!) {\n deleteOneObject(input: { id: $idToDelete }) {\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 labelIdentifierFieldMetadataId\n imageIdentifierFieldMetadataId\n }\n }\n": types.DeleteOneObjectMetadataItemDocument, "\n mutation DeleteOneFieldMetadataItem($idToDelete: UUID!) {\n deleteOneField(input: { id: $idToDelete }) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n": types.DeleteOneFieldMetadataItemDocument, - "\n query ObjectMetadataItems(\n $objectFilter: objectFilter\n $fieldFilter: fieldFilter\n ) {\n objects(paging: { first: 1000 }, filter: $objectFilter) {\n edges {\n node {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isRemote\n isActive\n isSystem\n createdAt\n updatedAt\n labelIdentifierFieldMetadataId\n imageIdentifierFieldMetadataId\n fields(paging: { first: 1000 }, filter: $fieldFilter) {\n edges {\n node {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isSystem\n isNullable\n createdAt\n updatedAt\n fromRelationMetadata {\n id\n relationType\n toObjectMetadata {\n id\n dataSourceId\n nameSingular\n namePlural\n isSystem\n isRemote\n }\n toFieldMetadataId\n }\n toRelationMetadata {\n id\n relationType\n fromObjectMetadata {\n id\n dataSourceId\n nameSingular\n namePlural\n isSystem\n isRemote\n }\n fromFieldMetadataId\n }\n defaultValue\n options\n relationDefinition {\n direction\n sourceObjectMetadata {\n id\n nameSingular\n namePlural\n }\n sourceFieldMetadata {\n id\n name\n }\n targetObjectMetadata {\n id\n nameSingular\n namePlural\n }\n targetFieldMetadata {\n id\n name\n }\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n": types.ObjectMetadataItemsDocument, + "\n mutation DeleteOneRelationMetadataItem($idToDelete: UUID!) {\n deleteOneRelation(input: { id: $idToDelete }) {\n id\n }\n }\n": types.DeleteOneRelationMetadataItemDocument, + "\n query ObjectMetadataItems(\n $objectFilter: objectFilter\n $fieldFilter: fieldFilter\n ) {\n objects(paging: { first: 1000 }, filter: $objectFilter) {\n edges {\n node {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isRemote\n isActive\n isSystem\n createdAt\n updatedAt\n labelIdentifierFieldMetadataId\n imageIdentifierFieldMetadataId\n fields(paging: { first: 1000 }, filter: $fieldFilter) {\n edges {\n node {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isSystem\n isNullable\n createdAt\n updatedAt\n fromRelationMetadata {\n id\n relationType\n toObjectMetadata {\n id\n dataSourceId\n nameSingular\n namePlural\n isSystem\n isRemote\n }\n toFieldMetadataId\n }\n toRelationMetadata {\n id\n relationType\n fromObjectMetadata {\n id\n dataSourceId\n nameSingular\n namePlural\n isSystem\n isRemote\n }\n fromFieldMetadataId\n }\n defaultValue\n options\n relationDefinition {\n relationId\n direction\n sourceObjectMetadata {\n id\n nameSingular\n namePlural\n }\n sourceFieldMetadata {\n id\n name\n }\n targetObjectMetadata {\n id\n nameSingular\n namePlural\n }\n targetFieldMetadata {\n id\n name\n }\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n": types.ObjectMetadataItemsDocument, }; /** @@ -118,7 +119,11 @@ export function graphql(source: "\n mutation DeleteOneFieldMetadataItem($idToDe /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n query ObjectMetadataItems(\n $objectFilter: objectFilter\n $fieldFilter: fieldFilter\n ) {\n objects(paging: { first: 1000 }, filter: $objectFilter) {\n edges {\n node {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isRemote\n isActive\n isSystem\n createdAt\n updatedAt\n labelIdentifierFieldMetadataId\n imageIdentifierFieldMetadataId\n fields(paging: { first: 1000 }, filter: $fieldFilter) {\n edges {\n node {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isSystem\n isNullable\n createdAt\n updatedAt\n fromRelationMetadata {\n id\n relationType\n toObjectMetadata {\n id\n dataSourceId\n nameSingular\n namePlural\n isSystem\n isRemote\n }\n toFieldMetadataId\n }\n toRelationMetadata {\n id\n relationType\n fromObjectMetadata {\n id\n dataSourceId\n nameSingular\n namePlural\n isSystem\n isRemote\n }\n fromFieldMetadataId\n }\n defaultValue\n options\n relationDefinition {\n direction\n sourceObjectMetadata {\n id\n nameSingular\n namePlural\n }\n sourceFieldMetadata {\n id\n name\n }\n targetObjectMetadata {\n id\n nameSingular\n namePlural\n }\n targetFieldMetadata {\n id\n name\n }\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n"): (typeof documents)["\n query ObjectMetadataItems(\n $objectFilter: objectFilter\n $fieldFilter: fieldFilter\n ) {\n objects(paging: { first: 1000 }, filter: $objectFilter) {\n edges {\n node {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isRemote\n isActive\n isSystem\n createdAt\n updatedAt\n labelIdentifierFieldMetadataId\n imageIdentifierFieldMetadataId\n fields(paging: { first: 1000 }, filter: $fieldFilter) {\n edges {\n node {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isSystem\n isNullable\n createdAt\n updatedAt\n fromRelationMetadata {\n id\n relationType\n toObjectMetadata {\n id\n dataSourceId\n nameSingular\n namePlural\n isSystem\n isRemote\n }\n toFieldMetadataId\n }\n toRelationMetadata {\n id\n relationType\n fromObjectMetadata {\n id\n dataSourceId\n nameSingular\n namePlural\n isSystem\n isRemote\n }\n fromFieldMetadataId\n }\n defaultValue\n options\n relationDefinition {\n direction\n sourceObjectMetadata {\n id\n nameSingular\n namePlural\n }\n sourceFieldMetadata {\n id\n name\n }\n targetObjectMetadata {\n id\n nameSingular\n namePlural\n }\n targetFieldMetadata {\n id\n name\n }\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n"]; +export function graphql(source: "\n mutation DeleteOneRelationMetadataItem($idToDelete: UUID!) {\n deleteOneRelation(input: { id: $idToDelete }) {\n id\n }\n }\n"): (typeof documents)["\n mutation DeleteOneRelationMetadataItem($idToDelete: UUID!) {\n deleteOneRelation(input: { id: $idToDelete }) {\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 query ObjectMetadataItems(\n $objectFilter: objectFilter\n $fieldFilter: fieldFilter\n ) {\n objects(paging: { first: 1000 }, filter: $objectFilter) {\n edges {\n node {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isRemote\n isActive\n isSystem\n createdAt\n updatedAt\n labelIdentifierFieldMetadataId\n imageIdentifierFieldMetadataId\n fields(paging: { first: 1000 }, filter: $fieldFilter) {\n edges {\n node {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isSystem\n isNullable\n createdAt\n updatedAt\n fromRelationMetadata {\n id\n relationType\n toObjectMetadata {\n id\n dataSourceId\n nameSingular\n namePlural\n isSystem\n isRemote\n }\n toFieldMetadataId\n }\n toRelationMetadata {\n id\n relationType\n fromObjectMetadata {\n id\n dataSourceId\n nameSingular\n namePlural\n isSystem\n isRemote\n }\n fromFieldMetadataId\n }\n defaultValue\n options\n relationDefinition {\n relationId\n direction\n sourceObjectMetadata {\n id\n nameSingular\n namePlural\n }\n sourceFieldMetadata {\n id\n name\n }\n targetObjectMetadata {\n id\n nameSingular\n namePlural\n }\n targetFieldMetadata {\n id\n name\n }\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n"): (typeof documents)["\n query ObjectMetadataItems(\n $objectFilter: objectFilter\n $fieldFilter: fieldFilter\n ) {\n objects(paging: { first: 1000 }, filter: $objectFilter) {\n edges {\n node {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isRemote\n isActive\n isSystem\n createdAt\n updatedAt\n labelIdentifierFieldMetadataId\n imageIdentifierFieldMetadataId\n fields(paging: { first: 1000 }, filter: $fieldFilter) {\n edges {\n node {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isSystem\n isNullable\n createdAt\n updatedAt\n fromRelationMetadata {\n id\n relationType\n toObjectMetadata {\n id\n dataSourceId\n nameSingular\n namePlural\n isSystem\n isRemote\n }\n toFieldMetadataId\n }\n toRelationMetadata {\n id\n relationType\n fromObjectMetadata {\n id\n dataSourceId\n nameSingular\n namePlural\n isSystem\n isRemote\n }\n fromFieldMetadataId\n }\n defaultValue\n options\n relationDefinition {\n relationId\n direction\n sourceObjectMetadata {\n id\n nameSingular\n namePlural\n }\n sourceFieldMetadata {\n id\n name\n }\n targetObjectMetadata {\n id\n nameSingular\n namePlural\n }\n targetFieldMetadata {\n id\n name\n }\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n"]; export function graphql(source: string) { return (documents as any)[source] ?? {}; diff --git a/packages/twenty-front/src/generated-metadata/graphql.ts b/packages/twenty-front/src/generated-metadata/graphql.ts index c246207ff..c1fe719fd 100644 --- a/packages/twenty-front/src/generated-metadata/graphql.ts +++ b/packages/twenty-front/src/generated-metadata/graphql.ts @@ -246,7 +246,7 @@ export type DeleteOneObjectInput = { }; export type DeleteOneRelationInput = { - /** The id of the record to delete. */ + /** The id of the relation to delete. */ id: Scalars['UUID']['input']; }; @@ -364,7 +364,7 @@ export type Mutation = { deleteCurrentWorkspace: Workspace; deleteOneField: Field; deleteOneObject: Object; - deleteOneRelation: RelationDeleteResponse; + deleteOneRelation: Relation; deleteOneRemoteServer: RemoteServer; deleteUser: User; emailPasswordResetLink: EmailPasswordResetLink; @@ -756,6 +756,7 @@ export type RelationConnection = { export type RelationDefinition = { __typename?: 'RelationDefinition'; direction: RelationDefinitionType; + relationId: Scalars['UUID']['output']; sourceFieldMetadata: Field; sourceObjectMetadata: Object; targetFieldMetadata: Field; @@ -770,18 +771,6 @@ export enum RelationDefinitionType { OneToOne = 'ONE_TO_ONE' } -export type RelationDeleteResponse = { - __typename?: 'RelationDeleteResponse'; - createdAt?: Maybe; - fromFieldMetadataId?: Maybe; - fromObjectMetadataId?: Maybe; - id?: Maybe; - relationType?: Maybe; - toFieldMetadataId?: Maybe; - toObjectMetadataId?: Maybe; - updatedAt?: Maybe; -}; - /** Type of the relation */ export enum RelationMetadataType { ManyToMany = 'MANY_TO_MANY', @@ -1365,13 +1354,20 @@ export type DeleteOneFieldMetadataItemMutationVariables = Exact<{ export type DeleteOneFieldMetadataItemMutation = { __typename?: 'Mutation', deleteOneField: { __typename?: 'field', id: any, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isCustom?: boolean | null, isActive?: boolean | null, isNullable?: boolean | null, createdAt: any, updatedAt: any } }; +export type DeleteOneRelationMetadataItemMutationVariables = Exact<{ + idToDelete: Scalars['UUID']['input']; +}>; + + +export type DeleteOneRelationMetadataItemMutation = { __typename?: 'Mutation', deleteOneRelation: { __typename?: 'relation', id: any } }; + export type ObjectMetadataItemsQueryVariables = Exact<{ objectFilter?: InputMaybe; fieldFilter?: InputMaybe; }>; -export type ObjectMetadataItemsQuery = { __typename?: 'Query', objects: { __typename?: 'ObjectConnection', edges: Array<{ __typename?: 'objectEdge', node: { __typename?: 'object', id: any, dataSourceId: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, description?: string | null, icon?: string | null, isCustom: boolean, isRemote: boolean, isActive: boolean, isSystem: boolean, createdAt: any, updatedAt: any, labelIdentifierFieldMetadataId?: string | null, imageIdentifierFieldMetadataId?: string | null, fields: { __typename?: 'ObjectFieldsConnection', edges: Array<{ __typename?: 'fieldEdge', node: { __typename?: 'field', id: any, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isCustom?: boolean | null, isActive?: boolean | null, isSystem?: boolean | null, isNullable?: boolean | null, createdAt: any, updatedAt: any, defaultValue?: any | null, options?: any | null, fromRelationMetadata?: { __typename?: 'relation', id: any, relationType: RelationMetadataType, toFieldMetadataId: string, toObjectMetadata: { __typename?: 'object', id: any, dataSourceId: string, nameSingular: string, namePlural: string, isSystem: boolean, isRemote: boolean } } | null, toRelationMetadata?: { __typename?: 'relation', id: any, relationType: RelationMetadataType, fromFieldMetadataId: string, fromObjectMetadata: { __typename?: 'object', id: any, dataSourceId: string, nameSingular: string, namePlural: string, isSystem: boolean, isRemote: boolean } } | null, relationDefinition?: { __typename?: 'RelationDefinition', direction: RelationDefinitionType, sourceObjectMetadata: { __typename?: 'object', id: any, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'field', id: any, name: string }, targetObjectMetadata: { __typename?: 'object', id: any, nameSingular: string, namePlural: string }, targetFieldMetadata: { __typename?: 'field', id: any, name: string } } | null } }>, 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 ObjectMetadataItemsQuery = { __typename?: 'Query', objects: { __typename?: 'ObjectConnection', edges: Array<{ __typename?: 'objectEdge', node: { __typename?: 'object', id: any, dataSourceId: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, description?: string | null, icon?: string | null, isCustom: boolean, isRemote: boolean, isActive: boolean, isSystem: boolean, createdAt: any, updatedAt: any, labelIdentifierFieldMetadataId?: string | null, imageIdentifierFieldMetadataId?: string | null, fields: { __typename?: 'ObjectFieldsConnection', edges: Array<{ __typename?: 'fieldEdge', node: { __typename?: 'field', id: any, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isCustom?: boolean | null, isActive?: boolean | null, isSystem?: boolean | null, isNullable?: boolean | null, createdAt: any, updatedAt: any, defaultValue?: any | null, options?: any | null, fromRelationMetadata?: { __typename?: 'relation', id: any, relationType: RelationMetadataType, toFieldMetadataId: string, toObjectMetadata: { __typename?: 'object', id: any, dataSourceId: string, nameSingular: string, namePlural: string, isSystem: boolean, isRemote: boolean } } | null, toRelationMetadata?: { __typename?: 'relation', id: any, relationType: RelationMetadataType, fromFieldMetadataId: string, fromObjectMetadata: { __typename?: 'object', id: any, dataSourceId: string, nameSingular: string, namePlural: string, isSystem: boolean, isRemote: boolean } } | null, relationDefinition?: { __typename?: 'RelationDefinition', relationId: any, direction: RelationDefinitionType, sourceObjectMetadata: { __typename?: 'object', id: any, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'field', id: any, name: string }, targetObjectMetadata: { __typename?: 'object', id: any, nameSingular: string, namePlural: string }, targetFieldMetadata: { __typename?: 'field', id: any, name: string } } | null } }>, 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 RemoteServerFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RemoteServerFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"RemoteServer"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"foreignDataWrapperId"}},{"kind":"Field","name":{"kind":"Name","value":"foreignDataWrapperOptions"}},{"kind":"Field","name":{"kind":"Name","value":"foreignDataWrapperType"}},{"kind":"Field","name":{"kind":"Name","value":"userMappingOptions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"user"}}]}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"schema"}}]}}]} as unknown as DocumentNode; export const RemoteTableFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RemoteTableFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"RemoteTable"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"schema"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]} as unknown as DocumentNode; @@ -1390,4 +1386,5 @@ export const UpdateOneFieldMetadataItemDocument = {"kind":"Document","definition export const UpdateOneObjectMetadataItemDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateOneObjectMetadataItem"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"idToUpdate"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"updatePayload"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UpdateObjectPayload"}}}}],"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"}},{"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":"labelIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"imageIdentifierFieldMetadataId"}}]}}]}}]} as unknown as DocumentNode; export const DeleteOneObjectMetadataItemDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteOneObjectMetadataItem"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"idToDelete"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteOneObject"},"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":"idToDelete"}}}]}}],"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":"labelIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"imageIdentifierFieldMetadataId"}}]}}]}}]} as unknown as DocumentNode; export const DeleteOneFieldMetadataItemDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteOneFieldMetadataItem"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"idToDelete"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteOneField"},"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":"idToDelete"}}}]}}],"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":"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; -export const ObjectMetadataItemsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ObjectMetadataItems"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectFilter"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"objectFilter"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"fieldFilter"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"fieldFilter"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"objects"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"paging"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"1000"}}]}},{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectFilter"}}}],"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":"isRemote"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"labelIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"imageIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"fields"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"paging"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"1000"}}]}},{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"fieldFilter"}}}],"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":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"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":"fromRelationMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"relationType"}},{"kind":"Field","name":{"kind":"Name","value":"toObjectMetadata"},"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":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isRemote"}}]}},{"kind":"Field","name":{"kind":"Name","value":"toFieldMetadataId"}}]}},{"kind":"Field","name":{"kind":"Name","value":"toRelationMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"relationType"}},{"kind":"Field","name":{"kind":"Name","value":"fromObjectMetadata"},"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":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isRemote"}}]}},{"kind":"Field","name":{"kind":"Name","value":"fromFieldMetadataId"}}]}},{"kind":"Field","name":{"kind":"Name","value":"defaultValue"}},{"kind":"Field","name":{"kind":"Name","value":"options"}},{"kind":"Field","name":{"kind":"Name","value":"relationDefinition"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"direction"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}}]}},{"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":"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"}}]}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file +export const DeleteOneRelationMetadataItemDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteOneRelationMetadataItem"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"idToDelete"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteOneRelation"},"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":"idToDelete"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; +export const ObjectMetadataItemsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ObjectMetadataItems"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectFilter"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"objectFilter"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"fieldFilter"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"fieldFilter"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"objects"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"paging"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"1000"}}]}},{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectFilter"}}}],"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":"isRemote"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"labelIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"imageIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"fields"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"paging"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"1000"}}]}},{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"fieldFilter"}}}],"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":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"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":"fromRelationMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"relationType"}},{"kind":"Field","name":{"kind":"Name","value":"toObjectMetadata"},"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":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isRemote"}}]}},{"kind":"Field","name":{"kind":"Name","value":"toFieldMetadataId"}}]}},{"kind":"Field","name":{"kind":"Name","value":"toRelationMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"relationType"}},{"kind":"Field","name":{"kind":"Name","value":"fromObjectMetadata"},"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":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isRemote"}}]}},{"kind":"Field","name":{"kind":"Name","value":"fromFieldMetadataId"}}]}},{"kind":"Field","name":{"kind":"Name","value":"defaultValue"}},{"kind":"Field","name":{"kind":"Name","value":"options"}},{"kind":"Field","name":{"kind":"Name","value":"relationDefinition"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"relationId"}},{"kind":"Field","name":{"kind":"Name","value":"direction"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}}]}},{"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":"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"}}]}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file diff --git a/packages/twenty-front/src/generated/graphql.tsx b/packages/twenty-front/src/generated/graphql.tsx index 69024a9dd..00405467f 100644 --- a/packages/twenty-front/src/generated/graphql.tsx +++ b/packages/twenty-front/src/generated/graphql.tsx @@ -366,6 +366,11 @@ export type MutationTrackArgs = { }; +export type MutationUpdateOneObjectArgs = { + input: UpdateOneObjectInput; +}; + + export type MutationUpdatePasswordViaResetTokenArgs = { newPassword: Scalars['String']; passwordResetToken: Scalars['String']; @@ -548,18 +553,6 @@ export enum RelationDefinitionType { OneToOne = 'ONE_TO_ONE' } -export type RelationDeleteResponse = { - __typename?: 'RelationDeleteResponse'; - createdAt?: Maybe; - fromFieldMetadataId?: Maybe; - fromObjectMetadataId?: Maybe; - id?: Maybe; - relationType?: Maybe; - toFieldMetadataId?: Maybe; - toObjectMetadataId?: Maybe; - updatedAt?: Maybe; -}; - /** Type of the relation */ export enum RelationMetadataType { ManyToMany = 'MANY_TO_MANY', @@ -728,6 +721,24 @@ export type UpdateBillingEntity = { success: Scalars['Boolean']; }; +export type UpdateObjectPayload = { + description?: InputMaybe; + icon?: InputMaybe; + imageIdentifierFieldMetadataId?: InputMaybe; + isActive?: InputMaybe; + labelIdentifierFieldMetadataId?: InputMaybe; + labelPlural?: InputMaybe; + labelSingular?: InputMaybe; + namePlural?: InputMaybe; + nameSingular?: InputMaybe; +}; + +export type UpdateOneObjectInput = { + /** The id of the object to update */ + id: Scalars['UUID']; + update: UpdateObjectPayload; +}; + export type UpdateWorkspaceInput = { allowImpersonation?: InputMaybe; displayName?: InputMaybe; diff --git a/packages/twenty-front/src/modules/object-metadata/graphql/mutations.ts b/packages/twenty-front/src/modules/object-metadata/graphql/mutations.ts index e73bcabd4..ab37d5249 100644 --- a/packages/twenty-front/src/modules/object-metadata/graphql/mutations.ts +++ b/packages/twenty-front/src/modules/object-metadata/graphql/mutations.ts @@ -139,3 +139,11 @@ export const DELETE_ONE_FIELD_METADATA_ITEM = gql` } } `; + +export const DELETE_ONE_RELATION_METADATA_ITEM = gql` + mutation DeleteOneRelationMetadataItem($idToDelete: UUID!) { + deleteOneRelation(input: { id: $idToDelete }) { + id + } + } +`; diff --git a/packages/twenty-front/src/modules/object-metadata/graphql/queries.ts b/packages/twenty-front/src/modules/object-metadata/graphql/queries.ts index fc2a1754f..729e1f96b 100644 --- a/packages/twenty-front/src/modules/object-metadata/graphql/queries.ts +++ b/packages/twenty-front/src/modules/object-metadata/graphql/queries.ts @@ -68,6 +68,7 @@ export const FIND_MANY_OBJECT_METADATA_ITEMS = gql` defaultValue options relationDefinition { + relationId direction sourceObjectMetadata { id diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/useDeleteOneRelationMetadataItem.ts b/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/useDeleteOneRelationMetadataItem.ts new file mode 100644 index 000000000..eb439e70f --- /dev/null +++ b/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/useDeleteOneRelationMetadataItem.ts @@ -0,0 +1,15 @@ +import { gql } from '@apollo/client'; + +export const query = gql` + mutation DeleteOneRelationMetadataItem($idToDelete: UUID!) { + deleteOneRelation(input: { id: $idToDelete }) { + id + } + } +`; + +export const variables = { idToDelete: 'idToDelete' }; + +export const responseData = { + id: 'idToDelete' +}; diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/useFieldMetadataItem.ts b/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/useFieldMetadataItem.ts index 669204037..0a73b0d2a 100644 --- a/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/useFieldMetadataItem.ts +++ b/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/useFieldMetadataItem.ts @@ -1,4 +1,9 @@ import { gql } from '@apollo/client'; +import { FieldMetadataType } from '~/generated/graphql'; + +export const FIELD_METADATA_ID = '2c43466a-fe9e-4005-8d08-c5836067aa6c'; +export const FIELD_RELATION_METADATA_ID = '4da0302d-358a-45cd-9973-9f92723ed3c1'; +export const RELATION_METADATA_ID = 'f81d4fae-7dec-11d0-a765-00a0c91e6bf6'; const baseFields = ` id @@ -15,13 +20,20 @@ const baseFields = ` `; export const queries = { - eraseMetadataField: gql` + deleteMetadataField: gql` mutation DeleteOneFieldMetadataItem($idToDelete: UUID!) { deleteOneField(input: { id: $idToDelete }) { ${baseFields} } } `, + deleteMetadataFieldRelation: gql` + mutation DeleteOneRelationMetadataItem($idToDelete: UUID!) { + deleteOneRelation(input: { id: $idToDelete }) { + id + } + } +`, activateMetadataField: gql` mutation UpdateOneFieldMetadataItem( $idToUpdate: UUID! @@ -43,13 +55,13 @@ export const queries = { `, }; -const fieldId = '2c43466a-fe9e-4005-8d08-c5836067aa6c'; export const objectMetadataId = '25611fce-6637-4089-b0ca-91afeec95784'; export const variables = { - eraseMetadataField: { idToDelete: fieldId }, + deleteMetadataField: { idToDelete: FIELD_METADATA_ID }, + deleteMetadataFieldRelation: { idToDelete: RELATION_METADATA_ID }, activateMetadataField: { - idToUpdate: fieldId, + idToUpdate: FIELD_METADATA_ID, updatePayload: { isActive: true, label: undefined }, }, createMetadataField: { @@ -66,14 +78,14 @@ export const variables = { }, }, }, - disableMetadataField: { - idToUpdate: fieldId, + deactivateMetadataField: { + idToUpdate: FIELD_METADATA_ID, updatePayload: { isActive: false, label: undefined }, } }; const defaultResponseData = { - id: '2c43466a-fe9e-4005-8d08-c5836067aa6c', + id: FIELD_METADATA_ID, type: 'type', name: 'name', label: 'label', @@ -86,11 +98,19 @@ const defaultResponseData = { updatedAt: '1996-10-10T08:27:57.117Z', }; +const fieldRelationResponseData = { + ...defaultResponseData, + id: FIELD_RELATION_METADATA_ID, + type: FieldMetadataType.Relation, +}; + export const responseData = { default: defaultResponseData, + fieldRelation: fieldRelationResponseData, createMetadataField: { ...defaultResponseData, defaultValue: '', options: [], }, }; + diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useDeleteOneRelationMetadataItem.test.tsx b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useDeleteOneRelationMetadataItem.test.tsx new file mode 100644 index 000000000..7c6dcf613 --- /dev/null +++ b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useDeleteOneRelationMetadataItem.test.tsx @@ -0,0 +1,49 @@ +import { ReactNode } from 'react'; +import { MockedProvider } from '@apollo/client/testing'; +import { act, renderHook } from '@testing-library/react'; +import { RecoilRoot } from 'recoil'; + +import { useDeleteOneRelationMetadataItem } from '@/object-metadata/hooks/useDeleteOneRelationMetadataItem'; + +import { + query, + responseData, + variables, +} from '../__mocks__/useDeleteOneRelationMetadataItem'; + +const mocks = [ + { + request: { + query, + variables, + }, + result: jest.fn(() => ({ + data: { + deleteOneRelation: responseData, + }, + })), + }, +]; + +const Wrapper = ({ children }: { children: ReactNode }) => ( + + + {children} + + +); + +describe('useDeleteOneRelationMetadataItem', () => { + it('should work as expected', async () => { + const { result } = renderHook(() => useDeleteOneRelationMetadataItem(), { + wrapper: Wrapper, + }); + + await act(async () => { + const res = + await result.current.deleteOneRelationMetadataItem('idToDelete'); + + expect(res.data).toEqual({ deleteOneRelation: responseData }); + }); + }); +}); diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useFieldMetadataItem.test.tsx b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useFieldMetadataItem.test.tsx index 17ca461f9..47b1a6c18 100644 --- a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useFieldMetadataItem.test.tsx +++ b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useFieldMetadataItem.test.tsx @@ -5,17 +5,20 @@ import { RecoilRoot } from 'recoil'; import { useFieldMetadataItem } from '@/object-metadata/hooks/useFieldMetadataItem'; import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; -import { FieldMetadataType } from '~/generated/graphql'; +import { FieldMetadataType, RelationDefinitionType } from '~/generated/graphql'; import { + FIELD_METADATA_ID, + FIELD_RELATION_METADATA_ID, objectMetadataId, queries, + RELATION_METADATA_ID, responseData, variables, } from '../__mocks__/useFieldMetadataItem'; const fieldMetadataItem: FieldMetadataItem = { - id: '2c43466a-fe9e-4005-8d08-c5836067aa6c', + id: FIELD_METADATA_ID, createdAt: '', label: 'label', name: 'name', @@ -23,11 +26,42 @@ const fieldMetadataItem: FieldMetadataItem = { updatedAt: '', }; +const fieldRelationMetadataItem: FieldMetadataItem = { + id: FIELD_RELATION_METADATA_ID, + createdAt: '', + label: 'label', + name: 'name', + type: FieldMetadataType.Relation, + updatedAt: '', + relationDefinition: { + relationId: RELATION_METADATA_ID, + direction: RelationDefinitionType.OneToMany, + sourceFieldMetadata: { + id: 'e5903d91-9b10-4f3e-b761-35c36e93b7c1', + name: 'sourceField', + }, + targetFieldMetadata: { + id: 'd23d82d4-690b-489f-a8e3-fc5ed01a91f6', + name: 'targetField', + }, + sourceObjectMetadata: { + id: 'bf46be8a-7c47-45a7-b2f1-30f49e14fbd9', + nameSingular: 'sourceObject', + namePlural: 'sourceObjects', + }, + targetObjectMetadata: { + id: '987c0489-2855-4a63-bb81-93692e51b2a9', + nameSingular: 'targetObject', + namePlural: 'targetObjects', + }, + }, +}; + const mocks = [ { request: { - query: queries.eraseMetadataField, - variables: variables.eraseMetadataField, + query: queries.deleteMetadataField, + variables: variables.deleteMetadataField, }, result: jest.fn(() => ({ data: { @@ -35,6 +69,17 @@ const mocks = [ }, })), }, + { + request: { + query: queries.deleteMetadataFieldRelation, + variables: variables.deleteMetadataFieldRelation, + }, + result: jest.fn(() => ({ + data: { + deleteOneRelation: responseData.fieldRelation, + }, + })), + }, { request: { query: queries.activateMetadataField, @@ -60,7 +105,7 @@ const mocks = [ { request: { query: queries.activateMetadataField, - variables: variables.disableMetadataField, + variables: variables.deactivateMetadataField, }, result: jest.fn(() => ({ data: { @@ -111,13 +156,14 @@ describe('useFieldMetadataItem', () => { }); }); - it('should disableMetadataField', async () => { + it('should deactivateMetadataField', async () => { const { result } = renderHook(() => useFieldMetadataItem(), { wrapper: Wrapper, }); await act(async () => { - const res = await result.current.disableMetadataField(fieldMetadataItem); + const res = + await result.current.deactivateMetadataField(fieldMetadataItem); expect(res.data).toEqual({ updateOneField: responseData.default, @@ -125,17 +171,33 @@ describe('useFieldMetadataItem', () => { }); }); - it('should eraseMetadataField', async () => { + it('should deleteOneFieldMetadataItem when calling deleteMetadataField for a non-relation field', async () => { const { result } = renderHook(() => useFieldMetadataItem(), { wrapper: Wrapper, }); await act(async () => { - const res = await result.current.eraseMetadataField(fieldMetadataItem); + const res = await result.current.deleteMetadataField(fieldMetadataItem); expect(res.data).toEqual({ deleteOneField: responseData.default, }); }); }); + + it('should deleteOneFieldMetadataItem when calling deleteMetadataField for a relation field', async () => { + const { result } = renderHook(() => useFieldMetadataItem(), { + wrapper: Wrapper, + }); + + await act(async () => { + const res = await result.current.deleteMetadataField( + fieldRelationMetadataItem, + ); + + expect(res.data).toEqual({ + deleteOneRelation: responseData.fieldRelation, + }); + }); + }); }); diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/useDeleteOneRelationMetadataItem.ts b/packages/twenty-front/src/modules/object-metadata/hooks/useDeleteOneRelationMetadataItem.ts new file mode 100644 index 000000000..db78dd8eb --- /dev/null +++ b/packages/twenty-front/src/modules/object-metadata/hooks/useDeleteOneRelationMetadataItem.ts @@ -0,0 +1,39 @@ +import { ApolloClient, useMutation } from '@apollo/client'; +import { getOperationName } from '@apollo/client/utilities'; + +import { DELETE_ONE_RELATION_METADATA_ITEM } from '@/object-metadata/graphql/mutations'; +import { + DeleteOneRelationMetadataItemMutation, + DeleteOneRelationMetadataItemMutationVariables, +} from '~/generated-metadata/graphql'; + +import { FIND_MANY_OBJECT_METADATA_ITEMS } from '../graphql/queries'; + +import { useApolloMetadataClient } from './useApolloMetadataClient'; + +export const useDeleteOneRelationMetadataItem = () => { + const apolloMetadataClient = useApolloMetadataClient(); + + const [mutate] = useMutation< + DeleteOneRelationMetadataItemMutation, + DeleteOneRelationMetadataItemMutationVariables + >(DELETE_ONE_RELATION_METADATA_ITEM, { + client: apolloMetadataClient ?? ({} as ApolloClient), + }); + + const deleteOneRelationMetadataItem = async ( + idToDelete: DeleteOneRelationMetadataItemMutationVariables['idToDelete'], + ) => { + return await mutate({ + variables: { + idToDelete, + }, + awaitRefetchQueries: true, + refetchQueries: [getOperationName(FIND_MANY_OBJECT_METADATA_ITEMS) ?? ''], + }); + }; + + return { + deleteOneRelationMetadataItem, + }; +}; diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/useFieldMetadataItem.ts b/packages/twenty-front/src/modules/object-metadata/hooks/useFieldMetadataItem.ts index e08e341c6..75f9f5a2e 100644 --- a/packages/twenty-front/src/modules/object-metadata/hooks/useFieldMetadataItem.ts +++ b/packages/twenty-front/src/modules/object-metadata/hooks/useFieldMetadataItem.ts @@ -1,4 +1,6 @@ +import { useDeleteOneRelationMetadataItem } from '@/object-metadata/hooks/useDeleteOneRelationMetadataItem'; import { Field } from '~/generated/graphql'; +import { FieldMetadataType } from '~/generated-metadata/graphql'; import { FieldMetadataItem } from '../types/FieldMetadataItem'; import { formatFieldMetadataItemInput } from '../utils/formatFieldMetadataItemInput'; @@ -11,6 +13,7 @@ export const useFieldMetadataItem = () => { const { createOneFieldMetadataItem } = useCreateOneFieldMetadataItem(); const { updateOneFieldMetadataItem } = useUpdateOneFieldMetadataItem(); const { deleteOneFieldMetadataItem } = useDeleteOneFieldMetadataItem(); + const { deleteOneRelationMetadataItem } = useDeleteOneRelationMetadataItem(); const createMetadataField = ( input: Pick< @@ -37,19 +40,24 @@ export const useFieldMetadataItem = () => { updatePayload: { isActive: true }, }); - const disableMetadataField = (metadataField: FieldMetadataItem) => + const deactivateMetadataField = (metadataField: FieldMetadataItem) => updateOneFieldMetadataItem({ fieldMetadataIdToUpdate: metadataField.id, updatePayload: { isActive: false }, }); - const eraseMetadataField = (metadataField: FieldMetadataItem) => - deleteOneFieldMetadataItem(metadataField.id); + const deleteMetadataField = (metadataField: FieldMetadataItem) => { + return metadataField.type === FieldMetadataType.Relation + ? deleteOneRelationMetadataItem( + metadataField.relationDefinition?.relationId, + ) + : deleteOneFieldMetadataItem(metadataField.id); + }; return { activateMetadataField, createMetadataField, - disableMetadataField, - eraseMetadataField, + deactivateMetadataField, + deleteMetadataField, }; }; diff --git a/packages/twenty-front/src/modules/object-metadata/types/FieldMetadataItem.ts b/packages/twenty-front/src/modules/object-metadata/types/FieldMetadataItem.ts index 5ba74573e..c0c4649e5 100644 --- a/packages/twenty-front/src/modules/object-metadata/types/FieldMetadataItem.ts +++ b/packages/twenty-front/src/modules/object-metadata/types/FieldMetadataItem.ts @@ -3,6 +3,7 @@ import { Field, Object as MetadataObject, Relation, + RelationDefinition, RelationDefinitionType, } from '~/generated-metadata/graphql'; @@ -44,6 +45,7 @@ export type FieldMetadataItem = Omit< defaultValue?: any; options?: FieldMetadataItemOption[]; relationDefinition?: { + relationId: RelationDefinition['relationId']; direction: RelationDefinitionType; sourceFieldMetadata: Pick; sourceObjectMetadata: Pick< diff --git a/packages/twenty-front/src/modules/object-metadata/validation-schemas/fieldMetadataItemSchema.ts b/packages/twenty-front/src/modules/object-metadata/validation-schemas/fieldMetadataItemSchema.ts index 924beaac2..7ca55d70f 100644 --- a/packages/twenty-front/src/modules/object-metadata/validation-schemas/fieldMetadataItemSchema.ts +++ b/packages/twenty-front/src/modules/object-metadata/validation-schemas/fieldMetadataItemSchema.ts @@ -55,6 +55,7 @@ export const fieldMetadataItemSchema = z.object({ relationDefinition: z .object({ __typename: z.literal('RelationDefinition').optional(), + relationId: z.string().uuid(), direction: z.nativeEnum(RelationDefinitionType), sourceFieldMetadata: z.object({ __typename: z.literal('field').optional(), diff --git a/packages/twenty-front/src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx b/packages/twenty-front/src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx index 846f27fd5..67608f689 100644 --- a/packages/twenty-front/src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx +++ b/packages/twenty-front/src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx @@ -12,14 +12,14 @@ type SettingsObjectFieldInactiveActionDropdownProps = { isCustomField?: boolean; fieldType?: FieldMetadataType; onActivate: () => void; - onErase: () => void; + onDelete: () => void; scopeKey: string; }; export const SettingsObjectFieldInactiveActionDropdown = ({ onActivate, scopeKey, - onErase, + onDelete, isCustomField, fieldType, }: SettingsObjectFieldInactiveActionDropdownProps) => { @@ -32,15 +32,12 @@ export const SettingsObjectFieldInactiveActionDropdown = ({ closeDropdown(); }; - const handleErase = () => { - onErase(); + const handleDelete = () => { + onDelete(); closeDropdown(); }; - const isErasable = - isCustomField && - fieldType !== FieldMetadataType.Relation && - fieldType !== FieldMetadataType.Address; + const isDeletable = isCustomField && fieldType !== FieldMetadataType.Address; return ( - {isErasable && ( + {isDeletable && ( )} diff --git a/packages/twenty-front/src/modules/settings/data-model/objects/SettingsObjectInactiveMenuDropDown.tsx b/packages/twenty-front/src/modules/settings/data-model/objects/SettingsObjectInactiveMenuDropDown.tsx index 107fafed7..77e39f8f1 100644 --- a/packages/twenty-front/src/modules/settings/data-model/objects/SettingsObjectInactiveMenuDropDown.tsx +++ b/packages/twenty-front/src/modules/settings/data-model/objects/SettingsObjectInactiveMenuDropDown.tsx @@ -10,14 +10,14 @@ import { MenuItem } from '@/ui/navigation/menu-item/components/MenuItem'; type SettingsObjectInactiveMenuDropDownProps = { isCustomObject: boolean; onActivate: () => void; - onErase: () => void; + onDelete: () => void; scopeKey: string; }; export const SettingsObjectInactiveMenuDropDown = ({ onActivate, scopeKey, - onErase, + onDelete, isCustomObject, }: SettingsObjectInactiveMenuDropDownProps) => { const dropdownId = `${scopeKey}-settings-object-inactive-menu-dropdown`; @@ -29,8 +29,8 @@ export const SettingsObjectInactiveMenuDropDown = ({ closeDropdown(); }; - const handleErase = () => { - onErase(); + const handleDelete = () => { + onDelete(); closeDropdown(); }; @@ -50,10 +50,10 @@ export const SettingsObjectInactiveMenuDropDown = ({ /> {isCustomObject && ( )} diff --git a/packages/twenty-front/src/modules/settings/data-model/objects/__stories__/SettingsObjectInactiveMenuDropDown.stories.tsx b/packages/twenty-front/src/modules/settings/data-model/objects/__stories__/SettingsObjectInactiveMenuDropDown.stories.tsx index ed4062926..c67607f7c 100644 --- a/packages/twenty-front/src/modules/settings/data-model/objects/__stories__/SettingsObjectInactiveMenuDropDown.stories.tsx +++ b/packages/twenty-front/src/modules/settings/data-model/objects/__stories__/SettingsObjectInactiveMenuDropDown.stories.tsx @@ -5,12 +5,12 @@ import { ComponentDecorator } from 'twenty-ui'; import { SettingsObjectInactiveMenuDropDown } from '../SettingsObjectInactiveMenuDropDown'; const handleActivateMockFunction = fn(); -const handleEraseMockFunction = fn(); +const handleDeleteMockFunction = fn(); const ClearMocksDecorator: Decorator = (Story, context) => { if (context.parameters.clearMocks === true) { handleActivateMockFunction.mockClear(); - handleEraseMockFunction.mockClear(); + handleDeleteMockFunction.mockClear(); } return ; }; @@ -21,7 +21,7 @@ const meta: Meta = { args: { scopeKey: 'settings-object-inactive-menu-dropdown', onActivate: handleActivateMockFunction, - onErase: handleEraseMockFunction, + onDelete: handleDeleteMockFunction, }, decorators: [ComponentDecorator, ClearMocksDecorator], parameters: { @@ -64,7 +64,7 @@ export const WithActivate: Story = { }, }; -export const WithErase: Story = { +export const WithDelete: Story = { args: { isCustomObject: true }, play: async ({ canvasElement }) => { const canvas = within(canvasElement); @@ -73,13 +73,13 @@ export const WithErase: Story = { await userEvent.click(dropdownButton); - await expect(handleEraseMockFunction).toHaveBeenCalledTimes(0); + await expect(handleDeleteMockFunction).toHaveBeenCalledTimes(0); - const eraseMenuItem = await canvas.getByText('Erase'); + const deleteMenuItem = await canvas.getByText('Delete'); - await userEvent.click(eraseMenuItem); + await userEvent.click(deleteMenuItem); - await expect(handleEraseMockFunction).toHaveBeenCalledTimes(1); + await expect(handleDeleteMockFunction).toHaveBeenCalledTimes(1); await userEvent.click(dropdownButton); }, diff --git a/packages/twenty-front/src/pages/settings/data-model/SettingsObjectDetail.tsx b/packages/twenty-front/src/pages/settings/data-model/SettingsObjectDetail.tsx index b7bc14310..452e550c8 100644 --- a/packages/twenty-front/src/pages/settings/data-model/SettingsObjectDetail.tsx +++ b/packages/twenty-front/src/pages/settings/data-model/SettingsObjectDetail.tsx @@ -54,15 +54,18 @@ export const SettingsObjectDetail = () => { if (!activeObjectMetadataItem) navigate(AppPath.NotFound); }, [activeObjectMetadataItem, navigate]); - const { activateMetadataField, disableMetadataField, eraseMetadataField } = - useFieldMetadataItem(); + const { + activateMetadataField, + deactivateMetadataField, + deleteMetadataField, + } = useFieldMetadataItem(); if (!activeObjectMetadataItem) return null; const activeMetadataFields = getActiveFieldMetadataItems( activeObjectMetadataItem, ); - const disabledMetadataFields = getDisabledFieldMetadataItems( + const deactivatedMetadataFields = getDisabledFieldMetadataItems( activeObjectMetadataItem, ); @@ -75,7 +78,7 @@ export const SettingsObjectDetail = () => { }; const handleDisableField = (activeFieldMetadatItem: FieldMetadataItem) => { - disableMetadataField(activeFieldMetadatItem); + deactivateMetadataField(activeFieldMetadatItem); }; const handleSetLabelIdentifierField = ( @@ -180,27 +183,27 @@ export const SettingsObjectDetail = () => { })} )} - {!!disabledMetadataFields.length && ( + {!!deactivatedMetadataFields.length && ( - {disabledMetadataFields.map((disabledMetadataField) => ( + {deactivatedMetadataFields.map((deactivatedMetadataField) => ( - activateMetadataField(disabledMetadataField) + activateMetadataField(deactivatedMetadataField) } - onErase={() => - eraseMetadataField(disabledMetadataField) + onDelete={() => + deleteMetadataField(deactivatedMetadataField) } /> } @@ -218,7 +221,7 @@ export const SettingsObjectDetail = () => { variant="secondary" onClick={() => navigate( - disabledMetadataFields.length + deactivatedMetadataFields.length ? './new-field/step-1' : './new-field/step-2', ) diff --git a/packages/twenty-front/src/pages/settings/data-model/SettingsObjectEdit.tsx b/packages/twenty-front/src/pages/settings/data-model/SettingsObjectEdit.tsx index 678036915..5bfdfd9c9 100644 --- a/packages/twenty-front/src/pages/settings/data-model/SettingsObjectEdit.tsx +++ b/packages/twenty-front/src/pages/settings/data-model/SettingsObjectEdit.tsx @@ -146,10 +146,10 @@ export const SettingsObjectEdit = () => { />
- +
{!isLabelIdentifier && (
- +
)} diff --git a/packages/twenty-front/src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldStep1.tsx b/packages/twenty-front/src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldStep1.tsx index 4ccacc014..ddd4528e9 100644 --- a/packages/twenty-front/src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldStep1.tsx +++ b/packages/twenty-front/src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldStep1.tsx @@ -44,14 +44,14 @@ export const SettingsObjectNewFieldStep1 = () => { const activeObjectMetadataItem = findActiveObjectMetadataItemBySlug(objectSlug); - const { activateMetadataField, disableMetadataField } = + const { activateMetadataField, deactivateMetadataField } = useFieldMetadataItem(); const [metadataFields, setMetadataFields] = useState( activeObjectMetadataItem?.fields ?? [], ); const activeMetadataFields = metadataFields.filter((field) => field.isActive); - const disabledMetadataFields = metadataFields.filter( + const deactivatedMetadataFields = metadataFields.filter( (field) => !field.isActive, ); @@ -93,7 +93,7 @@ export const SettingsObjectNewFieldStep1 = () => { return metadataField.isActive ? activateMetadataField(metadataField) - : disableMetadataField(metadataField); + : deactivateMetadataField(metadataField); }), ); @@ -124,8 +124,8 @@ export const SettingsObjectNewFieldStep1 = () => { @@ -159,18 +159,18 @@ export const SettingsObjectNewFieldStep1 = () => { ))} )} - {!!disabledMetadataFields.length && ( + {!!deactivatedMetadataFields.length && ( - {disabledMetadataFields.map((disabledMetadataField) => ( + {deactivatedMetadataFields.map((deactivatedMetadataField) => ( - handleToggleField(disabledMetadataField.id) + handleToggleField(deactivatedMetadataField.id) } /> } diff --git a/packages/twenty-front/src/pages/settings/data-model/SettingsObjects.tsx b/packages/twenty-front/src/pages/settings/data-model/SettingsObjects.tsx index fa239a0d6..450727be2 100644 --- a/packages/twenty-front/src/pages/settings/data-model/SettingsObjects.tsx +++ b/packages/twenty-front/src/pages/settings/data-model/SettingsObjects.tsx @@ -110,7 +110,7 @@ export const SettingsObjects = () => { updatePayload: { isActive: true }, }) } - onErase={() => + onDelete={() => deleteOneObjectMetadataItem( inactiveObjectMetadataItem.id, ) diff --git a/packages/twenty-front/src/pages/settings/data-model/__stories__/SettingsObjectNewField/SettingsObjectNewFieldStep1.stories.tsx b/packages/twenty-front/src/pages/settings/data-model/__stories__/SettingsObjectNewField/SettingsObjectNewFieldStep1.stories.tsx index 3353cc492..d54dd9f4d 100644 --- a/packages/twenty-front/src/pages/settings/data-model/__stories__/SettingsObjectNewField/SettingsObjectNewFieldStep1.stories.tsx +++ b/packages/twenty-front/src/pages/settings/data-model/__stories__/SettingsObjectNewField/SettingsObjectNewFieldStep1.stories.tsx @@ -33,7 +33,7 @@ export const Default: Story = { await canvas.findByText('Settings'); await canvas.findByText('Objects'); await canvas.findByText('Companies'); - await canvas.findByText('Check disabled fields'); + await canvas.findByText('Check deactivated fields'); await canvas.findByText('Add Custom Field'); }, }; diff --git a/packages/twenty-front/src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx b/packages/twenty-front/src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx index 1e77bd571..d272141d3 100644 --- a/packages/twenty-front/src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx +++ b/packages/twenty-front/src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx @@ -191,7 +191,7 @@ export const SettingsDevelopersApiKeyDetail = () => {