From 39543872e6debaad9bd6de4269e6c4585a815249 Mon Sep 17 00:00:00 2001 From: Etienne <45695613+etiennejouan@users.noreply.github.com> Date: Thu, 27 Feb 2025 13:57:07 +0100 Subject: [PATCH] add new @WorkspaceIsSearchable decorator + updates services + add migration command (#10507) closes https://github.com/twentyhq/core-team-issues/issues/345 --- .../src/generated-metadata/gql.ts | 8 +- .../src/generated-metadata/graphql.ts | 12 +-- .../twenty-front/src/generated/graphql.tsx | 2 + .../inline-cell/hooks/useMultiObjectSearch.ts | 14 ++-- .../object-metadata/graphql/mutations.ts | 3 + .../object-metadata/graphql/queries.ts | 1 + .../useCreateOneObjectMetadataItem.ts | 2 + .../useDeleteOneObjectMetadataItem.ts | 2 + .../useLimitPerMetadataItem.test.tsx | 1 + .../objectMetadataItemSchema.ts | 1 + .../useAggregateRecordsQuery.test.tsx | 1 + .../useGenerateCombinedSearchRecordsQuery.ts | 5 +- .../__tests__/turnSortsIntoOrderBy.test.ts | 1 + ...ildRecordGqlFieldsAggregateForView.test.ts | 1 + .../__tests__/generateAggregateQuery.test.ts | 2 + .../utils/isObjectMetadataItemSearchable.ts | 17 ----- ...MetadataItemSearchableInCombinedRequest.ts | 17 ----- .../generated/mock-metadata-query-result.ts | 38 ++++++++++ ...ed-workspaces-migration-command.runner.ts} | 14 ++-- ...ed-workspaces-migration-command.runner.ts} | 10 +-- ....module.ts => migration-command.module.ts} | 0 ...fix-body-v2-view-field-position.command.ts | 12 +-- .../0-42/0-42-limit-amount-of-view-field.ts | 14 ++-- .../0-42-migrate-rich-text-field.command.ts | 14 ++-- ...ization-of-actor-composite-context-type.ts | 14 ++-- .../0-42/0-42-upgrade-version.module.ts | 2 +- ...3-add-tasks-assigned-to-me-view.command.ts | 14 ++-- ...able-for-custom-object-metadata.command.ts | 74 +++++++++++++++++++ ...ate-relations-to-field-metadata.command.ts | 14 ++-- ...ector-on-note-and-task-entities.command.ts | 14 ++-- ...ord-opening-on-workflow-objects.command.ts | 4 +- .../0-43/0-43-upgrade-version.module.ts | 4 +- ...IsSearchableColumnInObjectMetadataTable.ts | 19 +++++ .../__mocks__/mockPersonObjectMetadata.ts | 1 + .../workspace-resolver-builder.service.ts | 3 + .../billing-sync-customer-data.command.ts | 12 +-- .../object-record-changed-values.spec.ts | 1 + .../mockObjectMetadataItemsWithFieldMaps.ts | 4 + .../__tests__/global-search.service.spec.ts | 2 +- .../services/global-search.service.ts | 15 +--- .../interfaces/object-metadata.interface.ts | 1 + .../dtos/object-metadata.dto.ts | 3 + .../object-metadata/object-metadata.entity.ts | 3 + .../object-metadata.service.ts | 1 + .../decorators/workspace-entity.decorator.ts | 6 ++ .../workspace-is-searchable.decorator.ts | 11 +++ ...orkspace-entity-metadata-args.interface.ts | 5 ++ .../sync-workspace-metadata.command.ts | 12 +-- .../company.workspace-entity.ts | 2 + .../standard-objects/note.workspace-entity.ts | 2 + .../opportunity.workspace-entity.ts | 2 + .../person.workspace-entity.ts | 2 + .../standard-objects/task.workspace-entity.ts | 2 + .../twenty-server/src/utils/typed-reflect.ts | 1 + 54 files changed, 297 insertions(+), 145 deletions(-) delete mode 100644 packages/twenty-front/src/modules/object-record/utils/isObjectMetadataItemSearchable.ts delete mode 100644 packages/twenty-front/src/modules/object-record/utils/isObjectMetadataItemSearchableInCombinedRequest.ts rename packages/twenty-server/src/database/commands/migration-command/{batch-active-workspaces-migration-command.runner.ts => batch-maintained-workspaces-migration-command.runner.ts} (78%) rename packages/twenty-server/src/database/commands/migration-command/{active-workspaces-migration-command.runner.ts => maintained-workspaces-migration-command.runner.ts} (91%) rename packages/twenty-server/src/database/commands/migration-command/{miration-command.module.ts => migration-command.module.ts} (100%) create mode 100644 packages/twenty-server/src/database/commands/upgrade-version/0-43/0-43-migrate-is-searchable-for-custom-object-metadata.command.ts create mode 100644 packages/twenty-server/src/database/typeorm/metadata/migrations/1740478150675-addIsSearchableColumnInObjectMetadataTable.ts create mode 100644 packages/twenty-server/src/engine/twenty-orm/decorators/workspace-is-searchable.decorator.ts diff --git a/packages/twenty-front/src/generated-metadata/gql.ts b/packages/twenty-front/src/generated-metadata/gql.ts index 2a86398e7..6c8937042 100644 --- a/packages/twenty-front/src/generated-metadata/gql.ts +++ b/packages/twenty-front/src/generated-metadata/gql.ts @@ -24,7 +24,7 @@ const documents = { "\n \n query GetManyDatabaseConnections($input: RemoteServerTypeInput!) {\n findManyRemoteServersByType(input: $input) {\n ...RemoteServerFields\n }\n }\n": types.GetManyDatabaseConnectionsDocument, "\n \n query GetManyRemoteTables($input: FindManyRemoteTablesInput!) {\n findDistantTablesWithStatus(input: $input) {\n ...RemoteTableFields\n }\n }\n": types.GetManyRemoteTablesDocument, "\n \n query GetOneDatabaseConnection($input: RemoteServerIdInput!) {\n findOneRemoteServerById(input: $input) {\n ...RemoteServerFields\n }\n }\n": types.GetOneDatabaseConnectionDocument, - "\n mutation CreateOneObjectMetadataItem($input: CreateOneObjectInput!) {\n createOneObject(input: $input) {\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.CreateOneObjectMetadataItemDocument, + "\n mutation CreateOneObjectMetadataItem($input: CreateOneObjectInput!) {\n createOneObject(input: $input) {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isActive\n isSearchable\n createdAt\n updatedAt\n labelIdentifierFieldMetadataId\n imageIdentifierFieldMetadataId\n }\n }\n": types.CreateOneObjectMetadataItemDocument, "\n mutation CreateOneFieldMetadataItem($input: CreateOneFieldMetadataInput!) {\n createOneField(input: $input) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n settings\n defaultValue\n options\n }\n }\n": types.CreateOneFieldMetadataItemDocument, "\n mutation CreateOneRelationMetadataItem(\n $input: CreateOneRelationMetadataInput!\n ) {\n createOneRelationMetadata(input: $input) {\n id\n relationType\n fromObjectMetadataId\n toObjectMetadataId\n fromFieldMetadataId\n toFieldMetadataId\n createdAt\n updatedAt\n }\n }\n": types.CreateOneRelationMetadataItemDocument, "\n mutation UpdateOneFieldMetadataItem(\n $idToUpdate: UUID!\n $updatePayload: UpdateFieldInput!\n ) {\n updateOneField(input: { id: $idToUpdate, update: $updatePayload }) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n settings\n isLabelSyncedWithName\n }\n }\n": types.UpdateOneFieldMetadataItemDocument, @@ -32,7 +32,7 @@ const documents = { "\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 settings\n }\n }\n": types.DeleteOneFieldMetadataItemDocument, "\n mutation DeleteOneRelationMetadataItem($idToDelete: UUID!) {\n deleteOneRelation(input: { id: $idToDelete }) {\n id\n }\n }\n": types.DeleteOneRelationMetadataItemDocument, - "\n query ObjectMetadataItems {\n objects(paging: { first: 1000 }) {\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 shortcut\n isLabelSyncedWithName\n duplicateCriteria\n indexMetadatas(paging: { first: 100 }) {\n edges {\n node {\n id\n createdAt\n updatedAt\n name\n indexWhereClause\n indexType\n isUnique\n indexFieldMetadatas(paging: { first: 100 }) {\n edges {\n node {\n id\n createdAt\n updatedAt\n order\n fieldMetadataId\n }\n }\n }\n }\n }\n }\n fieldsList {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isSystem\n isNullable\n isUnique\n createdAt\n updatedAt\n defaultValue\n options\n settings\n isLabelSyncedWithName\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 }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n": types.ObjectMetadataItemsDocument, + "\n query ObjectMetadataItems {\n objects(paging: { first: 1000 }) {\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 shortcut\n isLabelSyncedWithName\n isSearchable\n duplicateCriteria\n indexMetadatas(paging: { first: 100 }) {\n edges {\n node {\n id\n createdAt\n updatedAt\n name\n indexWhereClause\n indexType\n isUnique\n indexFieldMetadatas(paging: { first: 100 }) {\n edges {\n node {\n id\n createdAt\n updatedAt\n order\n fieldMetadataId\n }\n }\n }\n }\n }\n }\n fieldsList {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isSystem\n isNullable\n isUnique\n createdAt\n updatedAt\n defaultValue\n options\n settings\n isLabelSyncedWithName\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 }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n": types.ObjectMetadataItemsDocument, "\n fragment ServerlessFunctionFields on ServerlessFunction {\n id\n name\n description\n runtime\n timeoutSeconds\n syncStatus\n latestVersion\n latestVersionInputSchema\n publishedVersions\n createdAt\n updatedAt\n }\n": types.ServerlessFunctionFieldsFragmentDoc, "\n \n mutation CreateOneServerlessFunctionItem(\n $input: CreateServerlessFunctionInput!\n ) {\n createOneServerlessFunction(input: $input) {\n ...ServerlessFunctionFields\n }\n }\n": types.CreateOneServerlessFunctionItemDocument, "\n \n mutation DeleteOneServerlessFunction($input: ServerlessFunctionIdInput!) {\n deleteOneServerlessFunction(input: $input) {\n ...ServerlessFunctionFields\n }\n }\n": types.DeleteOneServerlessFunctionDocument, @@ -106,7 +106,7 @@ export function graphql(source: "\n \n query GetOneDatabaseConnection($input: /** * 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 CreateOneObjectMetadataItem($input: CreateOneObjectInput!) {\n createOneObject(input: $input) {\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"): (typeof documents)["\n mutation CreateOneObjectMetadataItem($input: CreateOneObjectInput!) {\n createOneObject(input: $input) {\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"]; +export function graphql(source: "\n mutation CreateOneObjectMetadataItem($input: CreateOneObjectInput!) {\n createOneObject(input: $input) {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isActive\n isSearchable\n createdAt\n updatedAt\n labelIdentifierFieldMetadataId\n imageIdentifierFieldMetadataId\n }\n }\n"): (typeof documents)["\n mutation CreateOneObjectMetadataItem($input: CreateOneObjectInput!) {\n createOneObject(input: $input) {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isActive\n isSearchable\n createdAt\n updatedAt\n labelIdentifierFieldMetadataId\n imageIdentifierFieldMetadataId\n }\n }\n"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ @@ -138,7 +138,7 @@ export function graphql(source: "\n mutation DeleteOneRelationMetadataItem($idT /** * 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 objects(paging: { first: 1000 }) {\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 shortcut\n isLabelSyncedWithName\n duplicateCriteria\n indexMetadatas(paging: { first: 100 }) {\n edges {\n node {\n id\n createdAt\n updatedAt\n name\n indexWhereClause\n indexType\n isUnique\n indexFieldMetadatas(paging: { first: 100 }) {\n edges {\n node {\n id\n createdAt\n updatedAt\n order\n fieldMetadataId\n }\n }\n }\n }\n }\n }\n fieldsList {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isSystem\n isNullable\n isUnique\n createdAt\n updatedAt\n defaultValue\n options\n settings\n isLabelSyncedWithName\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 }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n"): (typeof documents)["\n query ObjectMetadataItems {\n objects(paging: { first: 1000 }) {\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 shortcut\n isLabelSyncedWithName\n duplicateCriteria\n indexMetadatas(paging: { first: 100 }) {\n edges {\n node {\n id\n createdAt\n updatedAt\n name\n indexWhereClause\n indexType\n isUnique\n indexFieldMetadatas(paging: { first: 100 }) {\n edges {\n node {\n id\n createdAt\n updatedAt\n order\n fieldMetadataId\n }\n }\n }\n }\n }\n }\n fieldsList {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isSystem\n isNullable\n isUnique\n createdAt\n updatedAt\n defaultValue\n options\n settings\n isLabelSyncedWithName\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 }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n"]; +export function graphql(source: "\n query ObjectMetadataItems {\n objects(paging: { first: 1000 }) {\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 shortcut\n isLabelSyncedWithName\n isSearchable\n duplicateCriteria\n indexMetadatas(paging: { first: 100 }) {\n edges {\n node {\n id\n createdAt\n updatedAt\n name\n indexWhereClause\n indexType\n isUnique\n indexFieldMetadatas(paging: { first: 100 }) {\n edges {\n node {\n id\n createdAt\n updatedAt\n order\n fieldMetadataId\n }\n }\n }\n }\n }\n }\n fieldsList {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isSystem\n isNullable\n isUnique\n createdAt\n updatedAt\n defaultValue\n options\n settings\n isLabelSyncedWithName\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 }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n"): (typeof documents)["\n query ObjectMetadataItems {\n objects(paging: { first: 1000 }) {\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 shortcut\n isLabelSyncedWithName\n isSearchable\n duplicateCriteria\n indexMetadatas(paging: { first: 100 }) {\n edges {\n node {\n id\n createdAt\n updatedAt\n name\n indexWhereClause\n indexType\n isUnique\n indexFieldMetadatas(paging: { first: 100 }) {\n edges {\n node {\n id\n createdAt\n updatedAt\n order\n fieldMetadataId\n }\n }\n }\n }\n }\n }\n fieldsList {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isSystem\n isNullable\n isUnique\n createdAt\n updatedAt\n defaultValue\n options\n settings\n isLabelSyncedWithName\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 }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ diff --git a/packages/twenty-front/src/generated-metadata/graphql.ts b/packages/twenty-front/src/generated-metadata/graphql.ts index 3a7b1d26e..612c95298 100644 --- a/packages/twenty-front/src/generated-metadata/graphql.ts +++ b/packages/twenty-front/src/generated-metadata/graphql.ts @@ -1228,7 +1228,7 @@ export type MutationUpdateWorkspaceFeatureFlagArgs = { export type MutationUpdateWorkspaceMemberRoleArgs = { - roleId?: InputMaybe; + roleId: Scalars['String']['input']; workspaceMemberId: Scalars['String']['input']; }; @@ -1280,6 +1280,7 @@ export type Object = { isCustom: Scalars['Boolean']['output']; isLabelSyncedWithName: Scalars['Boolean']['output']; isRemote: Scalars['Boolean']['output']; + isSearchable: Scalars['Boolean']['output']; isSystem: Scalars['Boolean']['output']; labelIdentifierFieldMetadataId?: Maybe; labelPlural: Scalars['String']['output']; @@ -1332,6 +1333,7 @@ export type ObjectFilter = { isActive?: InputMaybe; isCustom?: InputMaybe; isRemote?: InputMaybe; + isSearchable?: InputMaybe; isSystem?: InputMaybe; or?: InputMaybe>; }; @@ -2396,7 +2398,7 @@ export type CreateOneObjectMetadataItemMutationVariables = Exact<{ }>; -export type CreateOneObjectMetadataItemMutation = { __typename?: 'Mutation', createOneObject: { __typename?: 'Object', id: any, dataSourceId: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, description?: string | null, icon?: string | null, isCustom: boolean, isActive: boolean, createdAt: any, updatedAt: any, labelIdentifierFieldMetadataId?: string | null, imageIdentifierFieldMetadataId?: string | null } }; +export type CreateOneObjectMetadataItemMutation = { __typename?: 'Mutation', createOneObject: { __typename?: 'Object', id: any, dataSourceId: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, description?: string | null, icon?: string | null, isCustom: boolean, isActive: boolean, isSearchable: boolean, createdAt: any, updatedAt: any, labelIdentifierFieldMetadataId?: string | null, imageIdentifierFieldMetadataId?: string | null } }; export type CreateOneFieldMetadataItemMutationVariables = Exact<{ input: CreateOneFieldMetadataInput; @@ -2452,7 +2454,7 @@ export type DeleteOneRelationMetadataItemMutation = { __typename?: 'Mutation', d export type ObjectMetadataItemsQueryVariables = Exact<{ [key: string]: never; }>; -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, shortcut?: string | null, isLabelSyncedWithName: boolean, duplicateCriteria?: Array> | null, indexMetadatas: { __typename?: 'ObjectIndexMetadatasConnection', edges: Array<{ __typename?: 'IndexEdge', node: { __typename?: 'Index', id: any, createdAt: any, updatedAt: any, name: string, indexWhereClause?: string | null, indexType: IndexType, isUnique: boolean, indexFieldMetadatas: { __typename?: 'IndexIndexFieldMetadatasConnection', edges: Array<{ __typename?: 'IndexFieldEdge', node: { __typename?: 'IndexField', id: any, createdAt: any, updatedAt: any, order: number, fieldMetadataId: any } }> } } }> }, fieldsList: Array<{ __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, isUnique?: boolean | null, createdAt: any, updatedAt: any, defaultValue?: any | null, options?: any | null, settings?: any | null, isLabelSyncedWithName?: 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 } } }; +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, shortcut?: string | null, isLabelSyncedWithName: boolean, isSearchable: boolean, duplicateCriteria?: Array> | null, indexMetadatas: { __typename?: 'ObjectIndexMetadatasConnection', edges: Array<{ __typename?: 'IndexEdge', node: { __typename?: 'Index', id: any, createdAt: any, updatedAt: any, name: string, indexWhereClause?: string | null, indexType: IndexType, isUnique: boolean, indexFieldMetadatas: { __typename?: 'IndexIndexFieldMetadatasConnection', edges: Array<{ __typename?: 'IndexFieldEdge', node: { __typename?: 'IndexField', id: any, createdAt: any, updatedAt: any, order: number, fieldMetadataId: any } }> } } }> }, fieldsList: Array<{ __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, isUnique?: boolean | null, createdAt: any, updatedAt: any, defaultValue?: any | null, options?: any | null, settings?: any | null, isLabelSyncedWithName?: 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 } } }; export type ServerlessFunctionFieldsFragment = { __typename?: 'ServerlessFunction', id: any, name: string, description?: string | null, runtime: string, timeoutSeconds: number, syncStatus: ServerlessFunctionSyncStatus, latestVersion?: string | null, latestVersionInputSchema?: any | null, publishedVersions: Array, createdAt: any, updatedAt: any }; @@ -2529,7 +2531,7 @@ export const UpdateServerDocument = {"kind":"Document","definitions":[{"kind":"O export const GetManyDatabaseConnectionsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetManyDatabaseConnections"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"RemoteServerTypeInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"findManyRemoteServersByType"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RemoteServerFields"}}]}}]}},{"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"}},{"kind":"Field","name":{"kind":"Name","value":"label"}}]}}]} as unknown as DocumentNode; export const GetManyRemoteTablesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetManyRemoteTables"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"FindManyRemoteTablesInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"findDistantTablesWithStatus"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RemoteTableFields"}}]}}]}},{"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"}},{"kind":"Field","name":{"kind":"Name","value":"schemaPendingUpdates"}}]}}]} as unknown as DocumentNode; export const GetOneDatabaseConnectionDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetOneDatabaseConnection"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"RemoteServerIdInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"findOneRemoteServerById"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RemoteServerFields"}}]}}]}},{"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"}},{"kind":"Field","name":{"kind":"Name","value":"label"}}]}}]} as unknown as DocumentNode; -export const CreateOneObjectMetadataItemDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateOneObjectMetadataItem"},"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"}},{"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 CreateOneObjectMetadataItemDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateOneObjectMetadataItem"},"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"}},{"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":"isSearchable"}},{"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 CreateOneFieldMetadataItemDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateOneFieldMetadataItem"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CreateOneFieldMetadataInput"}}}}],"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":"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":"settings"}},{"kind":"Field","name":{"kind":"Name","value":"defaultValue"}},{"kind":"Field","name":{"kind":"Name","value":"options"}}]}}]}}]} as unknown as DocumentNode; export const CreateOneRelationMetadataItemDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateOneRelationMetadataItem"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CreateOneRelationMetadataInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createOneRelationMetadata"},"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":"relationType"}},{"kind":"Field","name":{"kind":"Name","value":"fromObjectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"toObjectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"fromFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"toFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]}}]} as unknown as DocumentNode; export const UpdateOneFieldMetadataItemDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateOneFieldMetadataItem"},"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":"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"}},{"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"}},{"kind":"Field","name":{"kind":"Name","value":"settings"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}}]}}]}}]} as unknown as DocumentNode; @@ -2537,7 +2539,7 @@ export const UpdateOneObjectMetadataItemDocument = {"kind":"Document","definitio 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"}},{"kind":"Field","name":{"kind":"Name","value":"settings"}}]}}]}}]} as unknown as DocumentNode; 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"},"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"}}]}}],"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":"shortcut"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"duplicateCriteria"}},{"kind":"Field","name":{"kind":"Name","value":"indexMetadatas"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"paging"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"100"}}]}}],"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":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"indexWhereClause"}},{"kind":"Field","name":{"kind":"Name","value":"indexType"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"indexFieldMetadatas"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"paging"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"100"}}]}}],"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":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"order"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}}]}}]}}]}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"fieldsList"},"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":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"defaultValue"}},{"kind":"Field","name":{"kind":"Name","value":"options"}},{"kind":"Field","name":{"kind":"Name","value":"settings"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"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"}}]}}]}}]}}]} as unknown as DocumentNode; +export const ObjectMetadataItemsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ObjectMetadataItems"},"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"}}]}}],"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":"shortcut"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"isSearchable"}},{"kind":"Field","name":{"kind":"Name","value":"duplicateCriteria"}},{"kind":"Field","name":{"kind":"Name","value":"indexMetadatas"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"paging"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"100"}}]}}],"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":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"indexWhereClause"}},{"kind":"Field","name":{"kind":"Name","value":"indexType"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"indexFieldMetadatas"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"paging"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"100"}}]}}],"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":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"order"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}}]}}]}}]}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"fieldsList"},"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":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"defaultValue"}},{"kind":"Field","name":{"kind":"Name","value":"options"}},{"kind":"Field","name":{"kind":"Name","value":"settings"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"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"}}]}}]}}]}}]} as unknown as DocumentNode; export const CreateOneServerlessFunctionItemDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateOneServerlessFunctionItem"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CreateServerlessFunctionInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createOneServerlessFunction"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ServerlessFunctionFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ServerlessFunctionFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ServerlessFunction"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"runtime"}},{"kind":"Field","name":{"kind":"Name","value":"timeoutSeconds"}},{"kind":"Field","name":{"kind":"Name","value":"syncStatus"}},{"kind":"Field","name":{"kind":"Name","value":"latestVersion"}},{"kind":"Field","name":{"kind":"Name","value":"latestVersionInputSchema"}},{"kind":"Field","name":{"kind":"Name","value":"publishedVersions"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]} as unknown as DocumentNode; export const DeleteOneServerlessFunctionDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteOneServerlessFunction"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ServerlessFunctionIdInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteOneServerlessFunction"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ServerlessFunctionFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ServerlessFunctionFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ServerlessFunction"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"runtime"}},{"kind":"Field","name":{"kind":"Name","value":"timeoutSeconds"}},{"kind":"Field","name":{"kind":"Name","value":"syncStatus"}},{"kind":"Field","name":{"kind":"Name","value":"latestVersion"}},{"kind":"Field","name":{"kind":"Name","value":"latestVersionInputSchema"}},{"kind":"Field","name":{"kind":"Name","value":"publishedVersions"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]} as unknown as DocumentNode; export const ExecuteOneServerlessFunctionDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"ExecuteOneServerlessFunction"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ExecuteServerlessFunctionInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"executeOneServerlessFunction"},"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":"data"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"error"}}]}}]}}]} as unknown as DocumentNode; diff --git a/packages/twenty-front/src/generated/graphql.tsx b/packages/twenty-front/src/generated/graphql.tsx index 409ce9dd5..c2ffdd9b4 100644 --- a/packages/twenty-front/src/generated/graphql.tsx +++ b/packages/twenty-front/src/generated/graphql.tsx @@ -1147,6 +1147,7 @@ export type Object = { isCustom: Scalars['Boolean']; isLabelSyncedWithName: Scalars['Boolean']; isRemote: Scalars['Boolean']; + isSearchable: Scalars['Boolean']; isSystem: Scalars['Boolean']; labelIdentifierFieldMetadataId?: Maybe; labelPlural: Scalars['String']; @@ -1199,6 +1200,7 @@ export type ObjectFilter = { isActive?: InputMaybe; isCustom?: InputMaybe; isRemote?: InputMaybe; + isSearchable?: InputMaybe; isSystem?: InputMaybe; or?: InputMaybe>; }; diff --git a/packages/twenty-front/src/modules/activities/inline-cell/hooks/useMultiObjectSearch.ts b/packages/twenty-front/src/modules/activities/inline-cell/hooks/useMultiObjectSearch.ts index f341ea052..f205bb580 100644 --- a/packages/twenty-front/src/modules/activities/inline-cell/hooks/useMultiObjectSearch.ts +++ b/packages/twenty-front/src/modules/activities/inline-cell/hooks/useMultiObjectSearch.ts @@ -7,7 +7,6 @@ import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSi import { EMPTY_QUERY } from '@/object-record/constants/EmptyQuery'; import { useGenerateCombinedSearchRecordsQuery } from '@/object-record/multiple-objects/hooks/useGenerateCombinedSearchRecordsQuery'; import { MultiObjectRecordQueryResult } from '@/object-record/multiple-objects/types/MultiObjectRecordQueryResult'; -import { isObjectMetadataItemSearchableInCombinedRequest } from '@/object-record/utils/isObjectMetadataItemSearchableInCombinedRequest'; import { isDefined } from 'twenty-shared'; export const useMultiObjectSearch = ({ @@ -21,14 +20,11 @@ export const useMultiObjectSearch = ({ }) => { const objectMetadataItems = useRecoilValue(objectMetadataItemsState); - const selectableObjectMetadataItems = objectMetadataItems - .filter(({ isSystem, isRemote }) => !isSystem && !isRemote) - .filter(({ nameSingular }) => { - return !excludedObjects?.includes(nameSingular as CoreObjectNameSingular); - }) - .filter((objectMetadataItem) => - isObjectMetadataItemSearchableInCombinedRequest(objectMetadataItem), - ); + const selectableObjectMetadataItems = objectMetadataItems.filter( + ({ nameSingular, isSearchable }) => + !excludedObjects?.includes(nameSingular as CoreObjectNameSingular) && + isSearchable, + ); const { limitPerMetadataItem } = useLimitPerMetadataItem({ objectMetadataItems, 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 d9324b77f..cc9f4ec18 100644 --- a/packages/twenty-front/src/modules/object-metadata/graphql/mutations.ts +++ b/packages/twenty-front/src/modules/object-metadata/graphql/mutations.ts @@ -13,6 +13,7 @@ export const CREATE_ONE_OBJECT_METADATA_ITEM = gql` icon isCustom isActive + isSearchable createdAt updatedAt labelIdentifierFieldMetadataId @@ -98,6 +99,7 @@ export const UPDATE_ONE_OBJECT_METADATA_ITEM = gql` icon isCustom isActive + isSearchable createdAt updatedAt labelIdentifierFieldMetadataId @@ -119,6 +121,7 @@ export const DELETE_ONE_OBJECT_METADATA_ITEM = gql` icon isCustom isActive + isSearchable createdAt updatedAt labelIdentifierFieldMetadataId 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 3229635d2..ce8e96f23 100644 --- a/packages/twenty-front/src/modules/object-metadata/graphql/queries.ts +++ b/packages/twenty-front/src/modules/object-metadata/graphql/queries.ts @@ -23,6 +23,7 @@ export const FIND_MANY_OBJECT_METADATA_ITEMS = gql` imageIdentifierFieldMetadataId shortcut isLabelSyncedWithName + isSearchable duplicateCriteria indexMetadatas(paging: { first: 100 }) { edges { diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/useCreateOneObjectMetadataItem.ts b/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/useCreateOneObjectMetadataItem.ts index 170d396b9..d6261902e 100644 --- a/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/useCreateOneObjectMetadataItem.ts +++ b/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/useCreateOneObjectMetadataItem.ts @@ -13,6 +13,7 @@ export const query = gql` icon isCustom isActive + isSearchable createdAt updatedAt labelIdentifierFieldMetadataId @@ -79,6 +80,7 @@ export const responseData = { icon: '', isCustom: false, isActive: true, + isSearchable: false, createdAt: '', updatedAt: '', labelIdentifierFieldMetadataId: '20202020-72ba-4e11-a36d-e17b544541e1', diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/useDeleteOneObjectMetadataItem.ts b/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/useDeleteOneObjectMetadataItem.ts index a580e6e4f..97a226676 100644 --- a/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/useDeleteOneObjectMetadataItem.ts +++ b/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/useDeleteOneObjectMetadataItem.ts @@ -13,6 +13,7 @@ export const query = gql` icon isCustom isActive + isSearchable createdAt updatedAt labelIdentifierFieldMetadataId @@ -34,6 +35,7 @@ export const responseData = { icon: '', isCustom: false, isActive: true, + isSearchable: false, createdAt: '', updatedAt: '', labelIdentifierFieldMetadataId: '20202020-72ba-4e11-a36d-e17b544541e1', diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useLimitPerMetadataItem.test.tsx b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useLimitPerMetadataItem.test.tsx index 6100e8adf..2125c0946 100644 --- a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useLimitPerMetadataItem.test.tsx +++ b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useLimitPerMetadataItem.test.tsx @@ -21,6 +21,7 @@ describe('useLimitPerMetadataItem', () => { isCustom: true, isSystem: true, isRemote: false, + isSearchable: true, labelPlural: 'labelPlural', labelSingular: 'labelSingular', namePlural: 'namePlural', diff --git a/packages/twenty-front/src/modules/object-metadata/validation-schemas/objectMetadataItemSchema.ts b/packages/twenty-front/src/modules/object-metadata/validation-schemas/objectMetadataItemSchema.ts index 17f8937d1..39e562a31 100644 --- a/packages/twenty-front/src/modules/object-metadata/validation-schemas/objectMetadataItemSchema.ts +++ b/packages/twenty-front/src/modules/object-metadata/validation-schemas/objectMetadataItemSchema.ts @@ -20,6 +20,7 @@ export const objectMetadataItemSchema = z.object({ isCustom: z.boolean(), isRemote: z.boolean(), isSystem: z.boolean(), + isSearchable: z.boolean(), labelIdentifierFieldMetadataId: z.string().uuid(), labelPlural: metadataLabelSchema(), labelSingular: metadataLabelSchema(), diff --git a/packages/twenty-front/src/modules/object-record/hooks/__tests__/useAggregateRecordsQuery.test.tsx b/packages/twenty-front/src/modules/object-record/hooks/__tests__/useAggregateRecordsQuery.test.tsx index 7b94218aa..0c930f0e0 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/__tests__/useAggregateRecordsQuery.test.tsx +++ b/packages/twenty-front/src/modules/object-record/hooks/__tests__/useAggregateRecordsQuery.test.tsx @@ -17,6 +17,7 @@ const mockObjectMetadataItem: ObjectMetadataItem = { labelSingular: 'Company', labelPlural: 'Companies', isCustom: false, + isSearchable: false, labelIdentifierFieldMetadataId: '20202020-dd4a-4ea4-bb7b-1c7300491b65', isActive: true, createdAt: new Date().toISOString(), diff --git a/packages/twenty-front/src/modules/object-record/multiple-objects/hooks/useGenerateCombinedSearchRecordsQuery.ts b/packages/twenty-front/src/modules/object-record/multiple-objects/hooks/useGenerateCombinedSearchRecordsQuery.ts index e5fdc7bda..a03678b38 100644 --- a/packages/twenty-front/src/modules/object-record/multiple-objects/hooks/useGenerateCombinedSearchRecordsQuery.ts +++ b/packages/twenty-front/src/modules/object-record/multiple-objects/hooks/useGenerateCombinedSearchRecordsQuery.ts @@ -6,7 +6,6 @@ import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadat import { mapObjectMetadataToGraphQLQuery } from '@/object-metadata/utils/mapObjectMetadataToGraphQLQuery'; import { RecordGqlOperationSignature } from '@/object-record/graphql/types/RecordGqlOperationSignature'; import { getSearchRecordsQueryResponseField } from '@/object-record/utils/getSearchRecordsQueryResponseField'; -import { isObjectMetadataItemSearchable } from '@/object-record/utils/isObjectMetadataItemSearchable'; import { capitalize } from 'twenty-shared'; import { isNonEmptyArray } from '~/utils/isNonEmptyArray'; @@ -55,8 +54,8 @@ export const useGenerateCombinedSearchRecordsQuery = ({ ); const filteredQueryKeyWithObjectMetadataItemArray = - queryKeyWithObjectMetadataItemArray.filter(({ objectMetadataItem }) => - isObjectMetadataItemSearchable(objectMetadataItem), + queryKeyWithObjectMetadataItemArray.filter( + ({ objectMetadataItem }) => objectMetadataItem.isSearchable, ); return gql` diff --git a/packages/twenty-front/src/modules/object-record/object-sort-dropdown/utils/__tests__/turnSortsIntoOrderBy.test.ts b/packages/twenty-front/src/modules/object-record/object-sort-dropdown/utils/__tests__/turnSortsIntoOrderBy.test.ts index abe4c0a75..33c01fbbf 100644 --- a/packages/twenty-front/src/modules/object-record/object-sort-dropdown/utils/__tests__/turnSortsIntoOrderBy.test.ts +++ b/packages/twenty-front/src/modules/object-record/object-sort-dropdown/utils/__tests__/turnSortsIntoOrderBy.test.ts @@ -29,6 +29,7 @@ const objectMetadataItemWithPositionField: ObjectMetadataItem = { isSystem: false, isCustom: false, isRemote: false, + isSearchable: false, labelPlural: 'object1s', labelSingular: 'object1', isLabelSyncedWithName: true, diff --git a/packages/twenty-front/src/modules/object-record/record-board/record-board-column/utils/__tests__/buildRecordGqlFieldsAggregateForView.test.ts b/packages/twenty-front/src/modules/object-record/record-board/record-board-column/utils/__tests__/buildRecordGqlFieldsAggregateForView.test.ts index e79eb3a3a..82f5328b9 100644 --- a/packages/twenty-front/src/modules/object-record/record-board/record-board-column/utils/__tests__/buildRecordGqlFieldsAggregateForView.test.ts +++ b/packages/twenty-front/src/modules/object-record/record-board/record-board-column/utils/__tests__/buildRecordGqlFieldsAggregateForView.test.ts @@ -18,6 +18,7 @@ describe('buildRecordGqlFieldsAggregateForView', () => { isActive: true, isSystem: false, isRemote: false, + isSearchable: false, labelIdentifierFieldMetadataId: '06b33746-5293-4d07-9f7f-ebf5ad396064', imageIdentifierFieldMetadataId: null, isLabelSyncedWithName: true, diff --git a/packages/twenty-front/src/modules/object-record/utils/__tests__/generateAggregateQuery.test.ts b/packages/twenty-front/src/modules/object-record/utils/__tests__/generateAggregateQuery.test.ts index 7cf2c38f8..226ef3d85 100644 --- a/packages/twenty-front/src/modules/object-record/utils/__tests__/generateAggregateQuery.test.ts +++ b/packages/twenty-front/src/modules/object-record/utils/__tests__/generateAggregateQuery.test.ts @@ -12,6 +12,7 @@ describe('generateAggregateQuery', () => { labelIdentifierFieldMetadataId: '20202020-72ba-4e11-a36d-e17b544541e1', isCustom: false, isActive: true, + isSearchable: false, createdAt: new Date().toISOString(), updatedAt: new Date().toISOString(), fields: [], @@ -50,6 +51,7 @@ describe('generateAggregateQuery', () => { labelIdentifierFieldMetadataId: '20202020-72ba-4e11-a36d-e17b544541e1', isCustom: false, isActive: true, + isSearchable: false, createdAt: new Date().toISOString(), updatedAt: new Date().toISOString(), fields: [], diff --git a/packages/twenty-front/src/modules/object-record/utils/isObjectMetadataItemSearchable.ts b/packages/twenty-front/src/modules/object-record/utils/isObjectMetadataItemSearchable.ts deleted file mode 100644 index 21bb1b251..000000000 --- a/packages/twenty-front/src/modules/object-record/utils/isObjectMetadataItemSearchable.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; - -const SEARCHABLE_STANDARD_OBJECTS_NAMES_PLURAL = [ - 'companies', - 'people', - 'opportunities', -]; -export const isObjectMetadataItemSearchable = ( - objectMetadataItem: ObjectMetadataItem, -) => { - return ( - objectMetadataItem.isCustom || - SEARCHABLE_STANDARD_OBJECTS_NAMES_PLURAL.includes( - objectMetadataItem.namePlural, - ) - ); -}; diff --git a/packages/twenty-front/src/modules/object-record/utils/isObjectMetadataItemSearchableInCombinedRequest.ts b/packages/twenty-front/src/modules/object-record/utils/isObjectMetadataItemSearchableInCombinedRequest.ts deleted file mode 100644 index 7b16a87ec..000000000 --- a/packages/twenty-front/src/modules/object-record/utils/isObjectMetadataItemSearchableInCombinedRequest.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; - -const SEARCHABLE_STANDARD_OBJECTS_IN_COMBINED_REQUEST_NAMES_PLURAL = [ - 'companies', - 'people', - 'opportunities', -]; -export const isObjectMetadataItemSearchableInCombinedRequest = ( - objectMetadataItem: ObjectMetadataItem, -) => { - return ( - objectMetadataItem.isCustom || - SEARCHABLE_STANDARD_OBJECTS_IN_COMBINED_REQUEST_NAMES_PLURAL.includes( - objectMetadataItem.namePlural, - ) - ); -}; diff --git a/packages/twenty-front/src/testing/mock-data/generated/mock-metadata-query-result.ts b/packages/twenty-front/src/testing/mock-data/generated/mock-metadata-query-result.ts index c0b48137c..43a2ba0b9 100644 --- a/packages/twenty-front/src/testing/mock-data/generated/mock-metadata-query-result.ts +++ b/packages/twenty-front/src/testing/mock-data/generated/mock-metadata-query-result.ts @@ -31,6 +31,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: true, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "0171f47e-f1e8-4e28-949e-b0a8e1a17356", @@ -501,6 +502,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: true, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "f8ffb39e-dafb-4b61-b2be-e5b41a548ef0", @@ -856,6 +858,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: true, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "d1d1ff00-7330-4c8d-b9b6-ae9f713e5c38", @@ -1516,6 +1519,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: true, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "61946ba1-4743-4ced-a6d7-0d06a8c12f07", @@ -2207,6 +2211,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: true, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "db996c62-eb44-4381-bcc2-46989d681f3a", @@ -3025,6 +3030,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: false, + isSearchable: true, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "585c1f2f-21d0-49d6-9d63-f830010a79da", @@ -3987,6 +3993,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: false, + isSearchable: true, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "28d93256-a262-422a-8f19-fbe1329fedfb", @@ -4434,6 +4441,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: true, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "9db27f2b-a332-4017-9f55-142d877b2fee", @@ -4925,6 +4933,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: true, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "08b10273-9750-4bc6-9f83-8cbad795bf18", @@ -5809,6 +5818,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: true, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "f14938c3-58cc-4896-85a7-cea1c6fe9d0f", @@ -5976,6 +5986,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: true, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "029ea2ee-6ffe-45a5-93f2-85cefc83f019", @@ -6372,6 +6383,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: true, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "6572b4bf-c981-4db9-8f90-309522762cc2", @@ -6686,6 +6698,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: true, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "dba26a5c-e28a-46cc-b864-6e44ccc75cc7", @@ -7601,6 +7614,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: true, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "cbf8a777-7bea-4fc6-94e5-a5183bc5567b", @@ -7807,6 +7821,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: false, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "f5dbede2-acbb-43b9-82a0-c7bff8155a3f", @@ -8288,6 +8303,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: true, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "1d9070ea-776b-4a86-b5ec-08f57d84a87d", @@ -8538,6 +8554,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: true, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "c8e0cf61-e509-4019-82a4-41482cb9f875", @@ -8906,6 +8923,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: true, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "a74894a3-4065-4b87-ab17-3252c709235b", @@ -9115,6 +9133,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: true, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "7a9d535e-6665-4de0-a301-d3ffaf94e1fb", @@ -10507,6 +10526,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: true, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "b3df551f-1afb-4a2b-b899-3b49d111b16b", @@ -10820,6 +10840,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: true, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "7a836cd1-9002-44c6-8ce4-17558bb97a34", @@ -11059,6 +11080,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: true, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "6f4cc8ad-8342-4e36-b689-2474d767885f", @@ -11719,6 +11741,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: true, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "dafe5e84-56d7-4cb8-a11e-7423e9e1c414", @@ -12063,6 +12086,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: true, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "002c37a7-caa7-48de-b453-c409528fb789", @@ -12807,6 +12831,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: true, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "321ef6c3-e01f-4080-9e8e-938810622ed8", @@ -13426,6 +13451,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: false, + isSearchable: true, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "d4ee3d39-1df1-46a4-a9aa-569119458656", @@ -14235,6 +14261,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: false, + isSearchable: true, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "9a08e8f4-4cf2-4586-b188-4542fe24c4e0", @@ -15282,6 +15309,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: true, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "91acce03-f503-4d7b-99ae-03898590baf6", @@ -16586,6 +16614,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: true, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "a325a92e-c357-43cd-9a9f-042bbb5f8cd0", @@ -17112,6 +17141,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: false, + isSearchable: true, createdAt: "2025-02-11T09:14:40.039Z", updatedAt: "2025-02-11T09:14:40.043Z", labelIdentifierFieldMetadataId: "5bdf1a3a-986b-48d0-87c4-8fa683f005f3", @@ -17722,6 +17752,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: true, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "84cc32f8-52cf-4988-873d-43860a6ca370", @@ -17905,6 +17936,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: true, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "43b566c4-0d50-47c8-818a-b2b0475181a4", @@ -18316,6 +18348,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: false, + isSearchable: true, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "f9ef48ef-c0a1-49cc-ad51-35a4e2a8a6e0", @@ -18935,6 +18968,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: false, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "ed8938cf-bb8d-46a0-8f8c-1e2132978716", @@ -19418,6 +19452,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: false, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "ed2a4301-ae23-41ad-85e7-04e7082c478e", @@ -20027,6 +20062,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: true, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "2df3fe9d-60af-46a9-917f-dec16c0a9c33", @@ -20315,6 +20351,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: false, + isSearchable: true, createdAt: "2025-02-11T09:14:39.321Z", updatedAt: "2025-02-11T09:14:39.327Z", labelIdentifierFieldMetadataId: "0c3bb20e-2d2d-4c1b-a1aa-5a44d7e55818", @@ -21261,6 +21298,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery = isRemote: false, isActive: true, isSystem: true, + isSearchable: false, createdAt: "2025-02-11T09:14:32.715Z", updatedAt: "2025-02-11T09:14:32.715Z", labelIdentifierFieldMetadataId: "251826b3-199d-44f8-93ce-5165f17701b3", diff --git a/packages/twenty-server/src/database/commands/migration-command/batch-active-workspaces-migration-command.runner.ts b/packages/twenty-server/src/database/commands/migration-command/batch-maintained-workspaces-migration-command.runner.ts similarity index 78% rename from packages/twenty-server/src/database/commands/migration-command/batch-active-workspaces-migration-command.runner.ts rename to packages/twenty-server/src/database/commands/migration-command/batch-maintained-workspaces-migration-command.runner.ts index 74a375610..bf72874ca 100644 --- a/packages/twenty-server/src/database/commands/migration-command/batch-active-workspaces-migration-command.runner.ts +++ b/packages/twenty-server/src/database/commands/migration-command/batch-maintained-workspaces-migration-command.runner.ts @@ -2,17 +2,17 @@ import chalk from 'chalk'; import { Repository } from 'typeorm'; import { - ActiveWorkspacesMigrationCommandOptions, - ActiveWorkspacesMigrationCommandRunner, -} from 'src/database/commands/migration-command/active-workspaces-migration-command.runner'; + MaintainedWorkspacesMigrationCommandOptions, + MaintainedWorkspacesMigrationCommandRunner, +} from 'src/database/commands/migration-command/maintained-workspaces-migration-command.runner'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceDataSource } from 'src/engine/twenty-orm/datasource/workspace.datasource'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; -export abstract class BatchActiveWorkspacesMigrationCommandRunner< +export abstract class BatchMaintainedWorkspacesMigrationCommandRunner< Options extends - ActiveWorkspacesMigrationCommandOptions = ActiveWorkspacesMigrationCommandOptions, -> extends ActiveWorkspacesMigrationCommandRunner { + MaintainedWorkspacesMigrationCommandOptions = MaintainedWorkspacesMigrationCommandOptions, +> extends MaintainedWorkspacesMigrationCommandRunner { constructor( protected readonly workspaceRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, @@ -20,7 +20,7 @@ export abstract class BatchActiveWorkspacesMigrationCommandRunner< super(workspaceRepository, twentyORMGlobalManager); } - async runMigrationCommandOnActiveWorkspaces( + async runMigrationCommandOnMaintainedWorkspaces( _passedParams: string[], _options: Options, activeWorkspaceIds: string[], diff --git a/packages/twenty-server/src/database/commands/migration-command/active-workspaces-migration-command.runner.ts b/packages/twenty-server/src/database/commands/migration-command/maintained-workspaces-migration-command.runner.ts similarity index 91% rename from packages/twenty-server/src/database/commands/migration-command/active-workspaces-migration-command.runner.ts rename to packages/twenty-server/src/database/commands/migration-command/maintained-workspaces-migration-command.runner.ts index 0d368e1b8..494083f69 100644 --- a/packages/twenty-server/src/database/commands/migration-command/active-workspaces-migration-command.runner.ts +++ b/packages/twenty-server/src/database/commands/migration-command/maintained-workspaces-migration-command.runner.ts @@ -10,16 +10,16 @@ import { import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; -export type ActiveWorkspacesMigrationCommandOptions = +export type MaintainedWorkspacesMigrationCommandOptions = MigrationCommandOptions & { workspaceId?: string; startFromWorkspaceId?: string; workspaceCountLimit?: number; }; -export abstract class ActiveWorkspacesMigrationCommandRunner< +export abstract class MaintainedWorkspacesMigrationCommandRunner< Options extends - ActiveWorkspacesMigrationCommandOptions = ActiveWorkspacesMigrationCommandOptions, + MaintainedWorkspacesMigrationCommandOptions = MaintainedWorkspacesMigrationCommandOptions, > extends MigrationCommandRunner { private workspaceIds: string[] = []; private startFromWorkspaceId: string | undefined; @@ -124,14 +124,14 @@ export abstract class ActiveWorkspacesMigrationCommandRunner< this.logger.log(chalk.yellow('Dry run mode: No changes will be applied')); } - await this.runMigrationCommandOnActiveWorkspaces( + await this.runMigrationCommandOnMaintainedWorkspaces( passedParams, options, activeWorkspaceIds, ); } - protected abstract runMigrationCommandOnActiveWorkspaces( + protected abstract runMigrationCommandOnMaintainedWorkspaces( passedParams: string[], options: Options, activeWorkspaceIds: string[], diff --git a/packages/twenty-server/src/database/commands/migration-command/miration-command.module.ts b/packages/twenty-server/src/database/commands/migration-command/migration-command.module.ts similarity index 100% rename from packages/twenty-server/src/database/commands/migration-command/miration-command.module.ts rename to packages/twenty-server/src/database/commands/migration-command/migration-command.module.ts diff --git a/packages/twenty-server/src/database/commands/upgrade-version/0-42/0-42-fix-body-v2-view-field-position.command.ts b/packages/twenty-server/src/database/commands/upgrade-version/0-42/0-42-fix-body-v2-view-field-position.command.ts index b01d110a2..24a0ed964 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version/0-42/0-42-fix-body-v2-view-field-position.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version/0-42/0-42-fix-body-v2-view-field-position.command.ts @@ -6,9 +6,9 @@ import { In, Repository } from 'typeorm'; import { isCommandLogger } from 'src/database/commands/logger'; import { - ActiveWorkspacesMigrationCommandOptions, - ActiveWorkspacesMigrationCommandRunner, -} from 'src/database/commands/migration-command/active-workspaces-migration-command.runner'; + MaintainedWorkspacesMigrationCommandOptions, + MaintainedWorkspacesMigrationCommandRunner, +} from 'src/database/commands/migration-command/maintained-workspaces-migration-command.runner'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { WorkspaceMetadataVersionService } from 'src/engine/metadata-modules/workspace-metadata-version/services/workspace-metadata-version.service'; @@ -20,7 +20,7 @@ import { ViewWorkspaceEntity } from 'src/modules/view/standard-objects/view.work name: 'upgrade-0.42:fix-body-v2-view-field-position', description: 'Make bodyV2 field position to match body field position', }) -export class FixBodyV2ViewFieldPositionCommand extends ActiveWorkspacesMigrationCommandRunner { +export class FixBodyV2ViewFieldPositionCommand extends MaintainedWorkspacesMigrationCommandRunner { constructor( @InjectRepository(Workspace, 'core') protected readonly workspaceRepository: Repository, @@ -32,9 +32,9 @@ export class FixBodyV2ViewFieldPositionCommand extends ActiveWorkspacesMigration super(workspaceRepository, twentyORMGlobalManager); } - async runMigrationCommandOnActiveWorkspaces( + async runMigrationCommandOnMaintainedWorkspaces( _passedParam: string[], - options: ActiveWorkspacesMigrationCommandOptions, + options: MaintainedWorkspacesMigrationCommandOptions, workspaceIds: string[], ): Promise { this.logger.log('Running command to fix bodyV2 field position'); diff --git a/packages/twenty-server/src/database/commands/upgrade-version/0-42/0-42-limit-amount-of-view-field.ts b/packages/twenty-server/src/database/commands/upgrade-version/0-42/0-42-limit-amount-of-view-field.ts index 142c3fb84..22c791aab 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version/0-42/0-42-limit-amount-of-view-field.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version/0-42/0-42-limit-amount-of-view-field.ts @@ -4,11 +4,11 @@ import chalk from 'chalk'; import { Repository } from 'typeorm'; import { CommandLogger } from 'src/database/commands/logger'; -import { - ActiveWorkspacesMigrationCommandOptions, - ActiveWorkspacesMigrationCommandRunner, -} from 'src/database/commands/migration-command/active-workspaces-migration-command.runner'; import { MigrationCommand } from 'src/database/commands/migration-command/decorators/migration-command.decorator'; +import { + MaintainedWorkspacesMigrationCommandOptions, + MaintainedWorkspacesMigrationCommandRunner, +} from 'src/database/commands/migration-command/maintained-workspaces-migration-command.runner'; import { settings } from 'src/engine/constants/settings'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; @@ -20,7 +20,7 @@ import { ViewWorkspaceEntity } from 'src/modules/view/standard-objects/view.work description: 'Limit amount of view field.', version: '0.42', }) -export class LimitAmountOfViewFieldCommand extends ActiveWorkspacesMigrationCommandRunner { +export class LimitAmountOfViewFieldCommand extends MaintainedWorkspacesMigrationCommandRunner { protected readonly logger: CommandLogger; constructor( @@ -95,9 +95,9 @@ export class LimitAmountOfViewFieldCommand extends ActiveWorkspacesMigrationComm } } - async runMigrationCommandOnActiveWorkspaces( + async runMigrationCommandOnMaintainedWorkspaces( _passedParam: string[], - options: ActiveWorkspacesMigrationCommandOptions, + options: MaintainedWorkspacesMigrationCommandOptions, workspaceIds: string[], ): Promise { this.logger.log(`Running limit-amount-of-view-field command`); diff --git a/packages/twenty-server/src/database/commands/upgrade-version/0-42/0-42-migrate-rich-text-field.command.ts b/packages/twenty-server/src/database/commands/upgrade-version/0-42/0-42-migrate-rich-text-field.command.ts index a051fe76c..df548f305 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version/0-42/0-42-migrate-rich-text-field.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version/0-42/0-42-migrate-rich-text-field.command.ts @@ -7,11 +7,11 @@ import { FieldMetadataType, isDefined } from 'twenty-shared'; import { Repository } from 'typeorm'; import { isCommandLogger } from 'src/database/commands/logger'; -import { - ActiveWorkspacesMigrationCommandOptions, - ActiveWorkspacesMigrationCommandRunner, -} from 'src/database/commands/migration-command/active-workspaces-migration-command.runner'; import { MigrationCommand } from 'src/database/commands/migration-command/decorators/migration-command.decorator'; +import { + MaintainedWorkspacesMigrationCommandOptions, + MaintainedWorkspacesMigrationCommandRunner, +} from 'src/database/commands/migration-command/maintained-workspaces-migration-command.runner'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; @@ -59,7 +59,7 @@ type ProcessRichTextFieldsArgs = { }; type MigrateRichTextFieldCommandOptions = - ActiveWorkspacesMigrationCommandOptions & { + MaintainedWorkspacesMigrationCommandOptions & { force?: boolean; }; @@ -68,7 +68,7 @@ type MigrateRichTextFieldCommandOptions = description: 'Migrate RICH_TEXT fields to new composite structure', version: '0.42', }) -export class MigrateRichTextFieldCommand extends ActiveWorkspacesMigrationCommandRunner { +export class MigrateRichTextFieldCommand extends MaintainedWorkspacesMigrationCommandRunner { private options: MigrateRichTextFieldCommandOptions; constructor( @@ -99,7 +99,7 @@ export class MigrateRichTextFieldCommand extends ActiveWorkspacesMigrationComman return val ?? false; } - async runMigrationCommandOnActiveWorkspaces( + async runMigrationCommandOnMaintainedWorkspaces( _passedParam: string[], options: MigrateRichTextFieldCommandOptions, workspaceIds: string[], diff --git a/packages/twenty-server/src/database/commands/upgrade-version/0-42/0-42-standardization-of-actor-composite-context-type.ts b/packages/twenty-server/src/database/commands/upgrade-version/0-42/0-42-standardization-of-actor-composite-context-type.ts index 48d604a08..9e215432e 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version/0-42/0-42-standardization-of-actor-composite-context-type.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version/0-42/0-42-standardization-of-actor-composite-context-type.ts @@ -5,11 +5,11 @@ import { FieldMetadataType } from 'twenty-shared'; import { IsNull, Repository } from 'typeorm'; import { CommandLogger } from 'src/database/commands/logger'; -import { - ActiveWorkspacesMigrationCommandOptions, - ActiveWorkspacesMigrationCommandRunner, -} from 'src/database/commands/migration-command/active-workspaces-migration-command.runner'; import { MigrationCommand } from 'src/database/commands/migration-command/decorators/migration-command.decorator'; +import { + MaintainedWorkspacesMigrationCommandOptions, + MaintainedWorkspacesMigrationCommandRunner, +} from 'src/database/commands/migration-command/maintained-workspaces-migration-command.runner'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { WorkspaceMetadataVersionService } from 'src/engine/metadata-modules/workspace-metadata-version/services/workspace-metadata-version.service'; @@ -20,7 +20,7 @@ import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global. description: 'Add context to actor composite type.', version: '0.42', }) -export class StandardizationOfActorCompositeContextTypeCommand extends ActiveWorkspacesMigrationCommandRunner { +export class StandardizationOfActorCompositeContextTypeCommand extends MaintainedWorkspacesMigrationCommandRunner { protected readonly logger; constructor( @@ -40,9 +40,9 @@ export class StandardizationOfActorCompositeContextTypeCommand extends ActiveWor this.logger.setVerbose(false); } - async runMigrationCommandOnActiveWorkspaces( + async runMigrationCommandOnMaintainedWorkspaces( _passedParam: string[], - options: ActiveWorkspacesMigrationCommandOptions, + options: MaintainedWorkspacesMigrationCommandOptions, workspaceIds: string[], ): Promise { this.logger.log(`Running add-context-to-actor-composite-type command`); diff --git a/packages/twenty-server/src/database/commands/upgrade-version/0-42/0-42-upgrade-version.module.ts b/packages/twenty-server/src/database/commands/upgrade-version/0-42/0-42-upgrade-version.module.ts index 7e422ec79..7774c09eb 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version/0-42/0-42-upgrade-version.module.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version/0-42/0-42-upgrade-version.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { MigrationCommandModule } from 'src/database/commands/migration-command/miration-command.module'; +import { MigrationCommandModule } from 'src/database/commands/migration-command/migration-command.module'; import { FixBodyV2ViewFieldPositionCommand } from 'src/database/commands/upgrade-version/0-42/0-42-fix-body-v2-view-field-position.command'; import { LimitAmountOfViewFieldCommand } from 'src/database/commands/upgrade-version/0-42/0-42-limit-amount-of-view-field'; import { MigrateRichTextFieldCommand } from 'src/database/commands/upgrade-version/0-42/0-42-migrate-rich-text-field.command'; diff --git a/packages/twenty-server/src/database/commands/upgrade-version/0-43/0-43-add-tasks-assigned-to-me-view.command.ts b/packages/twenty-server/src/database/commands/upgrade-version/0-43/0-43-add-tasks-assigned-to-me-view.command.ts index 01558fed3..9b934d892 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version/0-43/0-43-add-tasks-assigned-to-me-view.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version/0-43/0-43-add-tasks-assigned-to-me-view.command.ts @@ -5,11 +5,11 @@ import { Repository } from 'typeorm'; import { v4 } from 'uuid'; import { isCommandLogger } from 'src/database/commands/logger'; -import { - ActiveWorkspacesMigrationCommandOptions, - ActiveWorkspacesMigrationCommandRunner, -} from 'src/database/commands/migration-command/active-workspaces-migration-command.runner'; import { MigrationCommand } from 'src/database/commands/migration-command/decorators/migration-command.decorator'; +import { + MaintainedWorkspacesMigrationCommandOptions, + MaintainedWorkspacesMigrationCommandRunner, +} from 'src/database/commands/migration-command/maintained-workspaces-migration-command.runner'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldMetadataDefaultOption } from 'src/engine/metadata-modules/field-metadata/dtos/options.input'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; @@ -29,7 +29,7 @@ import { ViewWorkspaceEntity } from 'src/modules/view/standard-objects/view.work description: 'Add tasks assigned to me view', version: '0.43', }) -export class AddTasksAssignedToMeViewCommand extends ActiveWorkspacesMigrationCommandRunner { +export class AddTasksAssignedToMeViewCommand extends MaintainedWorkspacesMigrationCommandRunner { constructor( @InjectRepository(Workspace, 'core') protected readonly workspaceRepository: Repository, @@ -43,9 +43,9 @@ export class AddTasksAssignedToMeViewCommand extends ActiveWorkspacesMigrationCo super(workspaceRepository, twentyORMGlobalManager); } - async runMigrationCommandOnActiveWorkspaces( + async runMigrationCommandOnMaintainedWorkspaces( _passedParam: string[], - options: ActiveWorkspacesMigrationCommandOptions, + options: MaintainedWorkspacesMigrationCommandOptions, workspaceIds: string[], ): Promise { this.logger.log('Running command to create many to one relations'); diff --git a/packages/twenty-server/src/database/commands/upgrade-version/0-43/0-43-migrate-is-searchable-for-custom-object-metadata.command.ts b/packages/twenty-server/src/database/commands/upgrade-version/0-43/0-43-migrate-is-searchable-for-custom-object-metadata.command.ts new file mode 100644 index 000000000..dd5a8f666 --- /dev/null +++ b/packages/twenty-server/src/database/commands/upgrade-version/0-43/0-43-migrate-is-searchable-for-custom-object-metadata.command.ts @@ -0,0 +1,74 @@ +import { InjectRepository } from '@nestjs/typeorm'; + +import chalk from 'chalk'; +import { Repository } from 'typeorm'; + +import { MigrationCommand } from 'src/database/commands/migration-command/decorators/migration-command.decorator'; +import { + MaintainedWorkspacesMigrationCommandOptions, + MaintainedWorkspacesMigrationCommandRunner, +} from 'src/database/commands/migration-command/maintained-workspaces-migration-command.runner'; +import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; +import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; + +@MigrationCommand({ + name: 'migrate-is-searchable-for-custom-object-metadata', + description: 'Set isSearchable true for custom object metadata', + version: '0.43', +}) +export class MigrateIsSearchableForCustomObjectMetadataCommand extends MaintainedWorkspacesMigrationCommandRunner { + constructor( + @InjectRepository(Workspace, 'core') + protected readonly workspaceRepository: Repository, + protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, + @InjectRepository(ObjectMetadataEntity, 'metadata') + protected readonly objectMetadataRepository: Repository, + ) { + super(workspaceRepository, twentyORMGlobalManager); + } + + async runMigrationCommandOnMaintainedWorkspaces( + _passedParam: string[], + _options: MaintainedWorkspacesMigrationCommandOptions, + workspaceIds: string[], + ): Promise { + this.logger.log( + chalk.green( + 'Running command to set isSearchable true for custom object metadata', + ), + ); + + for (const [index, workspaceId] of workspaceIds.entries()) { + await this.processWorkspace(workspaceId, index, workspaceIds.length); + } + + this.logger.log(chalk.green('Command completed!')); + } + + private async processWorkspace( + workspaceId: string, + index: number, + total: number, + ): Promise { + try { + this.logger.log( + `Running command for workspace ${workspaceId} ${index + 1}/${total}`, + ); + + await this.objectMetadataRepository.update( + { + workspaceId, + isCustom: true, + }, + { + isSearchable: true, + }, + ); + } catch (error) { + this.logger.log( + chalk.red(`Error in workspace ${workspaceId} - ${error.message}`), + ); + } + } +} diff --git a/packages/twenty-server/src/database/commands/upgrade-version/0-43/0-43-migrate-relations-to-field-metadata.command.ts b/packages/twenty-server/src/database/commands/upgrade-version/0-43/0-43-migrate-relations-to-field-metadata.command.ts index 752a942a9..d9b2104be 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version/0-43/0-43-migrate-relations-to-field-metadata.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version/0-43/0-43-migrate-relations-to-field-metadata.command.ts @@ -7,11 +7,11 @@ import { In, Repository } from 'typeorm'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; import { isCommandLogger } from 'src/database/commands/logger'; -import { - ActiveWorkspacesMigrationCommandOptions, - ActiveWorkspacesMigrationCommandRunner, -} from 'src/database/commands/migration-command/active-workspaces-migration-command.runner'; import { MigrationCommand } from 'src/database/commands/migration-command/decorators/migration-command.decorator'; +import { + MaintainedWorkspacesMigrationCommandOptions, + MaintainedWorkspacesMigrationCommandRunner, +} from 'src/database/commands/migration-command/maintained-workspaces-migration-command.runner'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; @@ -26,7 +26,7 @@ import { isFieldMetadataOfType } from 'src/engine/utils/is-field-metadata-of-typ description: 'Migrate relations to field metadata', version: '0.43', }) -export class MigrateRelationsToFieldMetadataCommand extends ActiveWorkspacesMigrationCommandRunner { +export class MigrateRelationsToFieldMetadataCommand extends MaintainedWorkspacesMigrationCommandRunner { constructor( @InjectRepository(Workspace, 'core') protected readonly workspaceRepository: Repository, @@ -37,9 +37,9 @@ export class MigrateRelationsToFieldMetadataCommand extends ActiveWorkspacesMigr super(workspaceRepository, twentyORMGlobalManager); } - async runMigrationCommandOnActiveWorkspaces( + async runMigrationCommandOnMaintainedWorkspaces( _passedParam: string[], - options: ActiveWorkspacesMigrationCommandOptions, + options: MaintainedWorkspacesMigrationCommandOptions, workspaceIds: string[], ): Promise { this.logger.log('Running command to create many to one relations'); diff --git a/packages/twenty-server/src/database/commands/upgrade-version/0-43/0-43-migrate-search-vector-on-note-and-task-entities.command.ts b/packages/twenty-server/src/database/commands/upgrade-version/0-43/0-43-migrate-search-vector-on-note-and-task-entities.command.ts index 42d9c1f2a..3994d6a4c 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version/0-43/0-43-migrate-search-vector-on-note-and-task-entities.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version/0-43/0-43-migrate-search-vector-on-note-and-task-entities.command.ts @@ -3,11 +3,11 @@ import { InjectRepository } from '@nestjs/typeorm'; import chalk from 'chalk'; import { Repository } from 'typeorm'; -import { - ActiveWorkspacesMigrationCommandOptions, - ActiveWorkspacesMigrationCommandRunner, -} from 'src/database/commands/migration-command/active-workspaces-migration-command.runner'; import { MigrationCommand } from 'src/database/commands/migration-command/decorators/migration-command.decorator'; +import { + MaintainedWorkspacesMigrationCommandOptions, + MaintainedWorkspacesMigrationCommandRunner, +} from 'src/database/commands/migration-command/maintained-workspaces-migration-command.runner'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; @@ -24,7 +24,7 @@ import { SEARCH_FIELDS_FOR_TASKS } from 'src/modules/task/standard-objects/task. description: 'Migrate search vector on note and task entities', version: '0.43', }) -export class MigrateSearchVectorOnNoteAndTaskEntitiesCommand extends ActiveWorkspacesMigrationCommandRunner { +export class MigrateSearchVectorOnNoteAndTaskEntitiesCommand extends MaintainedWorkspacesMigrationCommandRunner { constructor( @InjectRepository(Workspace, 'core') protected readonly workspaceRepository: Repository, @@ -40,9 +40,9 @@ export class MigrateSearchVectorOnNoteAndTaskEntitiesCommand extends ActiveWorks super(workspaceRepository, twentyORMGlobalManager); } - async runMigrationCommandOnActiveWorkspaces( + async runMigrationCommandOnMaintainedWorkspaces( _passedParam: string[], - options: ActiveWorkspacesMigrationCommandOptions, + options: MaintainedWorkspacesMigrationCommandOptions, workspaceIds: string[], ): Promise { this.logger.log( diff --git a/packages/twenty-server/src/database/commands/upgrade-version/0-43/0-43-update-default-view-record-opening-on-workflow-objects.command.ts b/packages/twenty-server/src/database/commands/upgrade-version/0-43/0-43-update-default-view-record-opening-on-workflow-objects.command.ts index 8ce93b594..3524cae7b 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version/0-43/0-43-update-default-view-record-opening-on-workflow-objects.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version/0-43/0-43-update-default-view-record-opening-on-workflow-objects.command.ts @@ -3,7 +3,7 @@ import { InjectRepository } from '@nestjs/typeorm'; import chalk from 'chalk'; import { In, Repository } from 'typeorm'; -import { BatchActiveWorkspacesMigrationCommandRunner } from 'src/database/commands/migration-command/batch-active-workspaces-migration-command.runner'; +import { BatchMaintainedWorkspacesMigrationCommandRunner } from 'src/database/commands/migration-command/batch-maintained-workspaces-migration-command.runner'; import { MigrationCommand } from 'src/database/commands/migration-command/decorators/migration-command.decorator'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; @@ -17,7 +17,7 @@ import { ViewOpenRecordInType } from 'src/modules/view/standard-objects/view.wor 'Update default view record opening on workflow objects to record page', version: '0.43', }) -export class UpdateDefaultViewRecordOpeningOnWorkflowObjectsCommand extends BatchActiveWorkspacesMigrationCommandRunner { +export class UpdateDefaultViewRecordOpeningOnWorkflowObjectsCommand extends BatchMaintainedWorkspacesMigrationCommandRunner { constructor( @InjectRepository(Workspace, 'core') protected readonly workspaceRepository: Repository, diff --git a/packages/twenty-server/src/database/commands/upgrade-version/0-43/0-43-upgrade-version.module.ts b/packages/twenty-server/src/database/commands/upgrade-version/0-43/0-43-upgrade-version.module.ts index 579c101e7..4793d89cf 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version/0-43/0-43-upgrade-version.module.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version/0-43/0-43-upgrade-version.module.ts @@ -1,9 +1,10 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { MigrationCommandModule } from 'src/database/commands/migration-command/miration-command.module'; +import { MigrationCommandModule } from 'src/database/commands/migration-command/migration-command.module'; import { StandardizationOfActorCompositeContextTypeCommand } from 'src/database/commands/upgrade-version/0-42/0-42-standardization-of-actor-composite-context-type'; import { AddTasksAssignedToMeViewCommand } from 'src/database/commands/upgrade-version/0-43/0-43-add-tasks-assigned-to-me-view.command'; +import { MigrateIsSearchableForCustomObjectMetadataCommand } from 'src/database/commands/upgrade-version/0-43/0-43-migrate-is-searchable-for-custom-object-metadata.command'; import { MigrateRelationsToFieldMetadataCommand } from 'src/database/commands/upgrade-version/0-43/0-43-migrate-relations-to-field-metadata.command'; import { MigrateSearchVectorOnNoteAndTaskEntitiesCommand } from 'src/database/commands/upgrade-version/0-43/0-43-migrate-search-vector-on-note-and-task-entities.command'; import { UpdateDefaultViewRecordOpeningOnWorkflowObjectsCommand } from 'src/database/commands/upgrade-version/0-43/0-43-update-default-view-record-opening-on-workflow-objects.command'; @@ -33,6 +34,7 @@ import { WorkspaceMigrationRunnerModule } from 'src/engine/workspace-manager/wor providers: [ AddTasksAssignedToMeViewCommand, MigrateSearchVectorOnNoteAndTaskEntitiesCommand, + MigrateIsSearchableForCustomObjectMetadataCommand, UpdateDefaultViewRecordOpeningOnWorkflowObjectsCommand, StandardizationOfActorCompositeContextTypeCommand, MigrateRelationsToFieldMetadataCommand, diff --git a/packages/twenty-server/src/database/typeorm/metadata/migrations/1740478150675-addIsSearchableColumnInObjectMetadataTable.ts b/packages/twenty-server/src/database/typeorm/metadata/migrations/1740478150675-addIsSearchableColumnInObjectMetadataTable.ts new file mode 100644 index 000000000..f8cc2c958 --- /dev/null +++ b/packages/twenty-server/src/database/typeorm/metadata/migrations/1740478150675-addIsSearchableColumnInObjectMetadataTable.ts @@ -0,0 +1,19 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddIsSearchableColumnInObjectMetadataTable1740478150675 + implements MigrationInterface +{ + name = 'AddIsSearchableColumnInObjectMetadataTable1740478150675'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "metadata"."objectMetadata" ADD "isSearchable" boolean NOT NULL DEFAULT false`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "metadata"."objectMetadata" DROP COLUMN "isSearchable"`, + ); + } +} diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/__mocks__/mockPersonObjectMetadata.ts b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/__mocks__/mockPersonObjectMetadata.ts index b292e7fd4..0dad37faf 100644 --- a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/__mocks__/mockPersonObjectMetadata.ts +++ b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/__mocks__/mockPersonObjectMetadata.ts @@ -19,6 +19,7 @@ export const mockPersonObjectMetadata = ( isActive: true, isSystem: false, isAuditLogged: true, + isSearchable: true, duplicateCriteria: duplicateCriteria, fromRelations: [], toRelations: [], diff --git a/packages/twenty-server/src/engine/api/graphql/workspace-resolver-builder/workspace-resolver-builder.service.ts b/packages/twenty-server/src/engine/api/graphql/workspace-resolver-builder/workspace-resolver-builder.service.ts index f7f2cead5..f7adf270d 100644 --- a/packages/twenty-server/src/engine/api/graphql/workspace-resolver-builder/workspace-resolver-builder.service.ts +++ b/packages/twenty-server/src/engine/api/graphql/workspace-resolver-builder/workspace-resolver-builder.service.ts @@ -6,6 +6,7 @@ import { WorkspaceResolverBuilderMethodNames } from 'src/engine/api/graphql/work import { ObjectMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface'; import { FindDuplicatesResolverFactory } from 'src/engine/api/graphql/workspace-resolver-builder/factories/find-duplicates-resolver.factory'; +import { SearchResolverFactory } from 'src/engine/api/graphql/workspace-resolver-builder/factories/search-resolver-factory'; @Injectable() export class WorkspaceResolverBuilderService { @@ -18,6 +19,8 @@ export class WorkspaceResolverBuilderService { switch (methodName) { case FindDuplicatesResolverFactory.methodName: return isDefined(objectMetadata.duplicateCriteria); + case SearchResolverFactory.methodName: + return objectMetadata.isSearchable; default: return true; } diff --git a/packages/twenty-server/src/engine/core-modules/billing/commands/billing-sync-customer-data.command.ts b/packages/twenty-server/src/engine/core-modules/billing/commands/billing-sync-customer-data.command.ts index 0ce2cf8ba..b7271eff5 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/commands/billing-sync-customer-data.command.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/commands/billing-sync-customer-data.command.ts @@ -7,22 +7,22 @@ import { Command } from 'nest-commander'; import { Repository } from 'typeorm'; import { - ActiveWorkspacesMigrationCommandOptions, - ActiveWorkspacesMigrationCommandRunner, -} from 'src/database/commands/migration-command/active-workspaces-migration-command.runner'; + MaintainedWorkspacesMigrationCommandOptions, + MaintainedWorkspacesMigrationCommandRunner, +} from 'src/database/commands/migration-command/maintained-workspaces-migration-command.runner'; import { BillingCustomer } from 'src/engine/core-modules/billing/entities/billing-customer.entity'; import { StripeSubscriptionService } from 'src/engine/core-modules/billing/stripe/services/stripe-subscription.service'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; interface SyncCustomerDataCommandOptions - extends ActiveWorkspacesMigrationCommandOptions {} + extends MaintainedWorkspacesMigrationCommandOptions {} @Command({ name: 'billing:sync-customer-data', description: 'Sync customer data from Stripe for all active workspaces', }) -export class BillingSyncCustomerDataCommand extends ActiveWorkspacesMigrationCommandRunner { +export class BillingSyncCustomerDataCommand extends MaintainedWorkspacesMigrationCommandRunner { constructor( @InjectRepository(Workspace, 'core') protected readonly workspaceRepository: Repository, @@ -34,7 +34,7 @@ export class BillingSyncCustomerDataCommand extends ActiveWorkspacesMigrationCom super(workspaceRepository, twentyORMGlobalManager); } - async runMigrationCommandOnActiveWorkspaces( + async runMigrationCommandOnMaintainedWorkspaces( _passedParam: string[], options: SyncCustomerDataCommandOptions, workspaceIds: string[], diff --git a/packages/twenty-server/src/engine/core-modules/event-emitter/utils/__tests__/object-record-changed-values.spec.ts b/packages/twenty-server/src/engine/core-modules/event-emitter/utils/__tests__/object-record-changed-values.spec.ts index fbfc94cd0..05ccf8623 100644 --- a/packages/twenty-server/src/engine/core-modules/event-emitter/utils/__tests__/object-record-changed-values.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/event-emitter/utils/__tests__/object-record-changed-values.spec.ts @@ -20,6 +20,7 @@ const mockObjectMetadata: ObjectMetadataInterface = { isActive: true, isRemote: false, isAuditLogged: true, + isSearchable: true, }; describe('objectRecordChangedValues', () => { diff --git a/packages/twenty-server/src/engine/core-modules/global-search/__mocks__/mockObjectMetadataItemsWithFieldMaps.ts b/packages/twenty-server/src/engine/core-modules/global-search/__mocks__/mockObjectMetadataItemsWithFieldMaps.ts index 05be6c346..b56859a26 100644 --- a/packages/twenty-server/src/engine/core-modules/global-search/__mocks__/mockObjectMetadataItemsWithFieldMaps.ts +++ b/packages/twenty-server/src/engine/core-modules/global-search/__mocks__/mockObjectMetadataItemsWithFieldMaps.ts @@ -18,6 +18,7 @@ export const mockObjectMetadataItemsWithFieldMaps: ObjectMetadataItemWithFieldMa isActive: true, isSystem: false, isAuditLogged: true, + isSearchable: true, fromRelations: [], toRelations: [], labelIdentifierFieldMetadataId: 'nameFieldMetadataId', @@ -76,6 +77,7 @@ export const mockObjectMetadataItemsWithFieldMaps: ObjectMetadataItemWithFieldMa isActive: true, isSystem: false, isAuditLogged: true, + isSearchable: true, fromRelations: [], toRelations: [], labelIdentifierFieldMetadataId: 'nameFieldMetadataId', @@ -153,6 +155,7 @@ export const mockObjectMetadataItemsWithFieldMaps: ObjectMetadataItemWithFieldMa isActive: true, isSystem: false, isAuditLogged: true, + isSearchable: true, fromRelations: [], toRelations: [], labelIdentifierFieldMetadataId: 'nameFieldMetadataId', @@ -230,6 +233,7 @@ export const mockObjectMetadataItemsWithFieldMaps: ObjectMetadataItemWithFieldMa isActive: true, isSystem: true, isAuditLogged: true, + isSearchable: false, fromRelations: [], toRelations: [], labelIdentifierFieldMetadataId: '', diff --git a/packages/twenty-server/src/engine/core-modules/global-search/__tests__/global-search.service.spec.ts b/packages/twenty-server/src/engine/core-modules/global-search/__tests__/global-search.service.spec.ts index cda6ba3cf..e94b5a62d 100644 --- a/packages/twenty-server/src/engine/core-modules/global-search/__tests__/global-search.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/global-search/__tests__/global-search.service.spec.ts @@ -19,7 +19,7 @@ describe('GlobalSearchService', () => { }); describe('filterObjectMetadataItems', () => { - it('should return searchable object metadata items -- TODO isSearchable only', () => { + it('should return searchable object metadata items', () => { const objectMetadataItems = service.filterObjectMetadataItems( mockObjectMetadataItemsWithFieldMaps, [], diff --git a/packages/twenty-server/src/engine/core-modules/global-search/services/global-search.service.ts b/packages/twenty-server/src/engine/core-modules/global-search/services/global-search.service.ts index 5a4295d27..289c0391b 100644 --- a/packages/twenty-server/src/engine/core-modules/global-search/services/global-search.service.ts +++ b/packages/twenty-server/src/engine/core-modules/global-search/services/global-search.service.ts @@ -22,20 +22,9 @@ export class GlobalSearchService { excludedObjectNameSingulars: string[] | undefined, ) { return objectMetadataItemWithFieldMaps.filter( - ({ nameSingular, isSystem, isRemote, isCustom }) => { - if (excludedObjectNameSingulars?.includes(nameSingular)) { - return false; - } - //TODO - #345 issue - IsSearchable decorator - if (isSystem || isRemote) { - return false; - } - + ({ nameSingular, isSearchable }) => { return ( - isCustom || - ['company', 'person', 'opportunity', 'note', 'task'].includes( - nameSingular, - ) + !excludedObjectNameSingulars?.includes(nameSingular) && isSearchable ); }, ); diff --git a/packages/twenty-server/src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface.ts b/packages/twenty-server/src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface.ts index 194ccf8fd..7122b400b 100644 --- a/packages/twenty-server/src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface.ts +++ b/packages/twenty-server/src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface.ts @@ -24,6 +24,7 @@ export interface ObjectMetadataInterface { isActive: boolean; isRemote: boolean; isAuditLogged: boolean; + isSearchable: boolean; duplicateCriteria?: WorkspaceEntityDuplicateCriteria[]; labelIdentifierFieldMetadataId?: string | null; imageIdentifierFieldMetadataId?: string | null; diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/dtos/object-metadata.dto.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/dtos/object-metadata.dto.ts index 515a21224..7d3ad1ad2 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/dtos/object-metadata.dto.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/dtos/object-metadata.dto.ts @@ -69,6 +69,9 @@ export class ObjectMetadataDTO { @FilterableField() isSystem: boolean; + @FilterableField() + isSearchable: boolean; + @HideField() workspaceId: string; diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts index c60112528..f55990b96 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts @@ -70,6 +70,9 @@ export class ObjectMetadataEntity implements ObjectMetadataInterface { @Column({ default: true }) isAuditLogged: boolean; + @Column({ default: false }) + isSearchable: boolean; + @Column({ type: 'jsonb', nullable: true }) duplicateCriteria?: WorkspaceEntityDuplicateCriteria[]; diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts index 4005e63c8..29c62baa6 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts @@ -120,6 +120,7 @@ export class ObjectMetadataService extends TypeOrmQueryService, @@ -37,7 +37,7 @@ export class SyncWorkspaceMetadataCommand extends ActiveWorkspacesMigrationComma super(workspaceRepository, twentyORMGlobalManager); } - async runMigrationCommandOnActiveWorkspaces( + async runMigrationCommandOnMaintainedWorkspaces( _passedParam: string[], options: RunWorkspaceMigrationsOptions, workspaceIds: string[], diff --git a/packages/twenty-server/src/modules/company/standard-objects/company.workspace-entity.ts b/packages/twenty-server/src/modules/company/standard-objects/company.workspace-entity.ts index 3814ca23a..c6a857434 100644 --- a/packages/twenty-server/src/modules/company/standard-objects/company.workspace-entity.ts +++ b/packages/twenty-server/src/modules/company/standard-objects/company.workspace-entity.ts @@ -20,6 +20,7 @@ import { WorkspaceFieldIndex } from 'src/engine/twenty-orm/decorators/workspace- import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; import { WorkspaceIsDeprecated } from 'src/engine/twenty-orm/decorators/workspace-is-deprecated.decorator'; import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; +import { WorkspaceIsSearchable } from 'src/engine/twenty-orm/decorators/workspace-is-searchable.decorator'; import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; import { WorkspaceIsUnique } from 'src/engine/twenty-orm/decorators/workspace-is-unique.decorator'; import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator'; @@ -59,6 +60,7 @@ export const SEARCH_FIELDS_FOR_COMPANY: FieldTypeAndNameMetadata[] = [ labelIdentifierStandardId: COMPANY_STANDARD_FIELD_IDS.name, }) @WorkspaceDuplicateCriteria([['name'], ['domainNamePrimaryLinkUrl']]) +@WorkspaceIsSearchable() export class CompanyWorkspaceEntity extends BaseWorkspaceEntity { @WorkspaceField({ standardId: COMPANY_STANDARD_FIELD_IDS.name, diff --git a/packages/twenty-server/src/modules/note/standard-objects/note.workspace-entity.ts b/packages/twenty-server/src/modules/note/standard-objects/note.workspace-entity.ts index 42b260ca8..b38ec33aa 100644 --- a/packages/twenty-server/src/modules/note/standard-objects/note.workspace-entity.ts +++ b/packages/twenty-server/src/modules/note/standard-objects/note.workspace-entity.ts @@ -16,6 +16,7 @@ import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-enti import { WorkspaceFieldIndex } from 'src/engine/twenty-orm/decorators/workspace-field-index.decorator'; import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; +import { WorkspaceIsSearchable } from 'src/engine/twenty-orm/decorators/workspace-is-searchable.decorator'; import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; import { NOTE_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; @@ -48,6 +49,7 @@ export const SEARCH_FIELDS_FOR_NOTES: FieldTypeAndNameMetadata[] = [ shortcut: 'N', labelIdentifierStandardId: NOTE_STANDARD_FIELD_IDS.title, }) +@WorkspaceIsSearchable() export class NoteWorkspaceEntity extends BaseWorkspaceEntity { @WorkspaceField({ standardId: NOTE_STANDARD_FIELD_IDS.position, diff --git a/packages/twenty-server/src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts b/packages/twenty-server/src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts index f48c1219a..b827f38fc 100644 --- a/packages/twenty-server/src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts +++ b/packages/twenty-server/src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts @@ -18,6 +18,7 @@ import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field import { WorkspaceIsDeprecated } from 'src/engine/twenty-orm/decorators/workspace-is-deprecated.decorator'; import { WorkspaceIsNotAuditLogged } from 'src/engine/twenty-orm/decorators/workspace-is-not-audit-logged.decorator'; import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; +import { WorkspaceIsSearchable } from 'src/engine/twenty-orm/decorators/workspace-is-searchable.decorator'; import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator'; import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; @@ -53,6 +54,7 @@ export const SEARCH_FIELDS_FOR_OPPORTUNITY: FieldTypeAndNameMetadata[] = [ labelIdentifierStandardId: OPPORTUNITY_STANDARD_FIELD_IDS.name, }) @WorkspaceIsNotAuditLogged() +@WorkspaceIsSearchable() export class OpportunityWorkspaceEntity extends BaseWorkspaceEntity { @WorkspaceField({ standardId: OPPORTUNITY_STANDARD_FIELD_IDS.name, diff --git a/packages/twenty-server/src/modules/person/standard-objects/person.workspace-entity.ts b/packages/twenty-server/src/modules/person/standard-objects/person.workspace-entity.ts index 2ca11afad..f937c8fd0 100644 --- a/packages/twenty-server/src/modules/person/standard-objects/person.workspace-entity.ts +++ b/packages/twenty-server/src/modules/person/standard-objects/person.workspace-entity.ts @@ -21,6 +21,7 @@ import { WorkspaceFieldIndex } from 'src/engine/twenty-orm/decorators/workspace- import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; import { WorkspaceIsDeprecated } from 'src/engine/twenty-orm/decorators/workspace-is-deprecated.decorator'; import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; +import { WorkspaceIsSearchable } from 'src/engine/twenty-orm/decorators/workspace-is-searchable.decorator'; import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; import { WorkspaceIsUnique } from 'src/engine/twenty-orm/decorators/workspace-is-unique.decorator'; import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator'; @@ -68,6 +69,7 @@ export const SEARCH_FIELDS_FOR_PERSON: FieldTypeAndNameMetadata[] = [ ['linkedinLinkPrimaryLinkUrl'], ['emailsPrimaryEmail'], ]) +@WorkspaceIsSearchable() export class PersonWorkspaceEntity extends BaseWorkspaceEntity { @WorkspaceField({ standardId: PERSON_STANDARD_FIELD_IDS.name, diff --git a/packages/twenty-server/src/modules/task/standard-objects/task.workspace-entity.ts b/packages/twenty-server/src/modules/task/standard-objects/task.workspace-entity.ts index fc9476452..83ab32f26 100644 --- a/packages/twenty-server/src/modules/task/standard-objects/task.workspace-entity.ts +++ b/packages/twenty-server/src/modules/task/standard-objects/task.workspace-entity.ts @@ -16,6 +16,7 @@ import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-enti import { WorkspaceFieldIndex } from 'src/engine/twenty-orm/decorators/workspace-field-index.decorator'; import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; +import { WorkspaceIsSearchable } from 'src/engine/twenty-orm/decorators/workspace-is-searchable.decorator'; import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator'; import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; @@ -51,6 +52,7 @@ export const SEARCH_FIELDS_FOR_TASKS: FieldTypeAndNameMetadata[] = [ shortcut: 'T', labelIdentifierStandardId: TASK_STANDARD_FIELD_IDS.title, }) +@WorkspaceIsSearchable() export class TaskWorkspaceEntity extends BaseWorkspaceEntity { @WorkspaceField({ standardId: TASK_STANDARD_FIELD_IDS.position, diff --git a/packages/twenty-server/src/utils/typed-reflect.ts b/packages/twenty-server/src/utils/typed-reflect.ts index 600085632..0e8f8e99f 100644 --- a/packages/twenty-server/src/utils/typed-reflect.ts +++ b/packages/twenty-server/src/utils/typed-reflect.ts @@ -15,6 +15,7 @@ export interface ReflectMetadataTypeMap { ['workspace:is-unique-metadata-args']: true; ['workspace:duplicate-criteria-metadata-args']: WorkspaceEntityDuplicateCriteria[]; ['environment-variables']: EnvironmentVariablesMetadataMap; + ['workspace:is-searchable-metadata-args']: boolean; } export class TypedReflect {