From b4e924b671315ef1f24b395a9b0dd3d3314f66f0 Mon Sep 17 00:00:00 2001 From: Thomas Trompette Date: Tue, 17 Feb 2026 16:32:41 +0100 Subject: [PATCH] Sync views and navigation items (#18003) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both objects are necessary to fully enjoy objects within applications Capture d’écran 2026-02-17 à 15 19
43 --- .../triggerUpdateRecordOptimisticEffect.ts | 3 +- .../app-dev/expected-manifest.ts | 2 + .../app-dev/expected-manifest.ts | 2 + .../__tests__/manifest-validate.spec.ts | 2 + .../build/manifest/manifest-build.ts | 37 ++++++ .../build/manifest/manifest-extract-config.ts | 7 ++ .../sdk/common/types/define-entity.type.ts | 6 +- packages/twenty-sdk/src/sdk/index.ts | 3 + .../define-navigation-menu-item.ts | 19 +++ .../twenty-sdk/src/sdk/views/define-view.ts | 67 +++++++++++ .../twenty-sdk/src/sdk/views/view-config.ts | 3 + ...ute-is-numeric-returning-aggregate.util.ts | 4 +- .../helpers/process-aggregate.helper.ts | 2 +- .../services/type-mapper.service.ts | 2 +- ...le-aggregations-from-object-fields.util.ts | 3 +- ...cation-manifest-metadata-names.constant.ts | 7 ++ ...sal-flat-navigation-menu-item.util.spec.ts | 53 ++++++++ ...-to-universal-flat-view-field.util.spec.ts | 54 +++++++++ ...to-universal-flat-view-filter.util.spec.ts | 53 ++++++++ ...nifest-to-universal-flat-view.util.spec.ts | 66 ++++++++++ ...est-all-universal-flat-entity-maps.util.ts | 113 ++++++++++++++++++ ...niversal-flat-navigation-menu-item.util.ts | 32 +++++ ...to-universal-flat-view-field-group.util.ts | 28 +++++ ...ifest-to-universal-flat-view-field.util.ts | 32 +++++ ...o-universal-flat-view-filter-group.util.ts | 31 +++++ ...fest-to-universal-flat-view-filter.util.ts | 33 +++++ ...ifest-to-universal-flat-view-group.util.ts | 27 +++++ ...ew-manifest-to-universal-flat-view.util.ts | 49 ++++++++ ...o-flat-view-filter-group-to-create.util.ts | 2 +- ...-view-input-to-flat-view-to-create.util.ts | 8 +- .../object-metadata.service.ts | 8 +- .../dtos/aggregate-chart-configuration.dto.ts | 3 +- .../dtos/bar-chart-configuration.dto.ts | 3 +- .../dtos/gauge-chart-configuration.dto.ts | 3 +- .../dtos/line-chart-configuration.dto.ts | 3 +- .../dtos/pie-chart-configuration.dto.ts | 3 +- .../dtos/inputs/create-view-field.input.ts | 2 +- .../dtos/inputs/update-view-field.input.ts | 2 +- .../view-field/dtos/view-field.dto.ts | 2 +- .../view-field/entities/view-field.entity.ts | 2 +- .../inputs/create-view-filter-group.input.ts | 3 +- .../dtos/view-filter-group.dto.ts | 2 +- .../entities/view-filter-group.entity.ts | 2 +- .../tests/view-filter-group.service.spec.ts | 2 +- .../guards/create-view-permission.guard.ts | 3 +- .../services/view-access.service.ts | 2 +- .../view/dtos/inputs/create-view.input.ts | 10 +- .../view/dtos/inputs/update-view.input.ts | 10 +- .../metadata-modules/view/dtos/view.dto.ts | 10 +- .../view/entities/view.entity.ts | 10 +- .../view/resolvers/view.resolver.ts | 2 +- .../view-query-params.service.spec.ts | 11 +- .../services/view-query-params.service.ts | 4 +- .../view/services/view.service.ts | 2 +- .../__tests__/view-tools.factory.spec.ts | 8 +- .../view/tools/view-tools.factory.ts | 8 +- ...t-page-layout-widget-data-seeds-v2.util.ts | 6 +- .../get-page-layout-widget-data-seeds.util.ts | 6 +- ...compute-my-first-dashboard-widgets.util.ts | 6 +- ...mpute-standard-company-view-fields.util.ts | 3 +- ...e-standard-opportunity-view-fields.util.ts | 3 +- ...ompute-standard-person-view-fields.util.ts | 3 +- ...-standard-view-field-flat-metadata.util.ts | 2 +- ...d-standard-flat-view-metadata-maps.util.ts | 3 +- .../compute-standard-attachment-views.util.ts | 3 +- ...pute-standard-calendar-event-views.util.ts | 3 +- .../compute-standard-company-views.util.ts | 3 +- .../compute-standard-dashboard-views.util.ts | 3 +- ...pute-standard-message-thread-views.util.ts | 3 +- .../compute-standard-message-views.util.ts | 3 +- ...compute-standard-note-target-views.util.ts | 3 +- .../view/compute-standard-note-views.util.ts | 3 +- ...compute-standard-opportunity-views.util.ts | 4 +- .../compute-standard-person-views.util.ts | 3 +- ...compute-standard-task-target-views.util.ts | 3 +- .../view/compute-standard-task-views.util.ts | 3 +- ...e-standard-timeline-activity-views.util.ts | 3 +- ...ompute-standard-workflow-run-views.util.ts | 3 +- ...te-standard-workflow-version-views.util.ts | 3 +- .../compute-standard-workflow-views.util.ts | 3 +- ...te-standard-workspace-member-views.util.ts | 3 +- ...create-standard-view-flat-metadata.util.ts | 10 +- .../services/flat-view-validator.service.ts | 3 +- .../__tests__/bar-chart-data.service.spec.ts | 3 +- .../__tests__/line-chart-data.service.spec.ts | 3 +- .../__tests__/pie-chart-data.service.spec.ts | 3 +- .../services/chart-data-query.service.ts | 2 +- .../get-group-by-order-by.util.spec.ts | 2 +- .../utils/build-aggregate-field-key.util.ts | 3 +- .../get-aggregate-operation-label.util.ts | 2 +- .../utils/get-group-by-order-by.util.ts | 2 +- .../utils/transform-aggregate-value.util.ts | 4 +- .../dashboard/tools/schemas/widget.schema.ts | 6 +- ...idget-configuration-test-data.constants.ts | 3 +- .../group-by-resolver.integration-spec.ts | 2 +- .../view/create-view.integration-spec.ts | 4 +- .../view/update-view.integration-spec.ts | 3 +- ...-filter-group-resolver.integration-spec.ts | 2 +- .../graphql/utils/view-data-factory.util.ts | 11 +- ...on-workspace-migration.integration-spec.ts | 2 + ...tivation-deletes-views.integration-spec.ts | 3 +- ...tivation-deletes-views.integration-spec.ts | 4 +- ...iews-kanban-properties.integration-spec.ts | 9 +- ...filters-side-effect-v2.integration-spec.ts | 4 +- ...-groups-side-effect-v2.integration-spec.ts | 3 +- ...layout-widget-creation.integration-spec.ts | 2 +- ...e-layout-widget-update.integration-spec.ts | 2 +- ...bs-creation-via-update.integration-spec.ts | 2 +- ...ayout-with-tabs-update.integration-spec.ts | 2 +- ...on-circular-dependency.integration-spec.ts | 4 +- ...-filter-group-creation.integration-spec.ts | 2 +- ...te-circular-dependency.integration-spec.ts | 4 +- ...ew-filter-group-update.integration-spec.ts | 3 +- ...-filter-group-creation.integration-spec.ts | 4 +- ...-filter-group-deletion.integration-spec.ts | 4 +- ...w-filter-group-destroy.integration-spec.ts | 4 +- ...ew-filter-group-update.integration-spec.ts | 4 +- ...g-view-filter-creation.integration-spec.ts | 3 +- ...-groups-side-effect-v2.integration-spec.ts | 2 +- .../view-filter-group.integration-spec.ts | 6 +- .../rest/suites/view.integration-spec.ts | 3 +- .../rest/utils/view-rest-api.util.ts | 8 +- .../test/integration/utils/view-test.util.ts | 3 +- .../src/application/fieldManifestType.ts | 3 +- .../twenty-shared/src/application/index.ts | 10 ++ .../src/application/manifestType.ts | 4 + .../navigationMenuItemManifestType.ts | 10 ++ .../src/application/viewManifestType.ts | 68 +++++++++++ .../src/types/AggregateOperations.ts} | 0 .../types/ViewFilterGroupLogicalOperator.ts} | 0 .../src/types/ViewOpenRecordIn.ts} | 0 .../src/types/ViewType.ts} | 0 .../src/types/ViewVisibility.ts} | 0 packages/twenty-shared/src/types/index.ts | 5 + 134 files changed, 1029 insertions(+), 180 deletions(-) create mode 100644 packages/twenty-sdk/src/sdk/navigation-menu-items/define-navigation-menu-item.ts create mode 100644 packages/twenty-sdk/src/sdk/views/define-view.ts create mode 100644 packages/twenty-sdk/src/sdk/views/view-config.ts create mode 100644 packages/twenty-server/src/engine/core-modules/application/utils/__tests__/from-navigation-menu-item-manifest-to-universal-flat-navigation-menu-item.util.spec.ts create mode 100644 packages/twenty-server/src/engine/core-modules/application/utils/__tests__/from-view-field-manifest-to-universal-flat-view-field.util.spec.ts create mode 100644 packages/twenty-server/src/engine/core-modules/application/utils/__tests__/from-view-filter-manifest-to-universal-flat-view-filter.util.spec.ts create mode 100644 packages/twenty-server/src/engine/core-modules/application/utils/__tests__/from-view-manifest-to-universal-flat-view.util.spec.ts create mode 100644 packages/twenty-server/src/engine/core-modules/application/utils/from-navigation-menu-item-manifest-to-universal-flat-navigation-menu-item.util.ts create mode 100644 packages/twenty-server/src/engine/core-modules/application/utils/from-view-field-group-manifest-to-universal-flat-view-field-group.util.ts create mode 100644 packages/twenty-server/src/engine/core-modules/application/utils/from-view-field-manifest-to-universal-flat-view-field.util.ts create mode 100644 packages/twenty-server/src/engine/core-modules/application/utils/from-view-filter-group-manifest-to-universal-flat-view-filter-group.util.ts create mode 100644 packages/twenty-server/src/engine/core-modules/application/utils/from-view-filter-manifest-to-universal-flat-view-filter.util.ts create mode 100644 packages/twenty-server/src/engine/core-modules/application/utils/from-view-group-manifest-to-universal-flat-view-group.util.ts create mode 100644 packages/twenty-server/src/engine/core-modules/application/utils/from-view-manifest-to-universal-flat-view.util.ts create mode 100644 packages/twenty-shared/src/application/navigationMenuItemManifestType.ts create mode 100644 packages/twenty-shared/src/application/viewManifestType.ts rename packages/{twenty-server/src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant.ts => twenty-shared/src/types/AggregateOperations.ts} (100%) rename packages/{twenty-server/src/engine/metadata-modules/view-filter-group/enums/view-filter-group-logical-operator.ts => twenty-shared/src/types/ViewFilterGroupLogicalOperator.ts} (100%) rename packages/{twenty-server/src/engine/metadata-modules/view/enums/view-open-record-in.ts => twenty-shared/src/types/ViewOpenRecordIn.ts} (100%) rename packages/{twenty-server/src/engine/metadata-modules/view/enums/view-type.enum.ts => twenty-shared/src/types/ViewType.ts} (100%) rename packages/{twenty-server/src/engine/metadata-modules/view/enums/view-visibility.enum.ts => twenty-shared/src/types/ViewVisibility.ts} (100%) diff --git a/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerUpdateRecordOptimisticEffect.ts b/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerUpdateRecordOptimisticEffect.ts index 31e76309d0..2279401728 100644 --- a/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerUpdateRecordOptimisticEffect.ts +++ b/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerUpdateRecordOptimisticEffect.ts @@ -139,7 +139,8 @@ export const triggerUpdateRecordOptimisticEffect = ({ if ( rootQueryNextEdgesShouldBeSorted && - Object.getOwnPropertyNames(rootQueryOrderBy).length > 0 + Array.isArray(rootQueryOrderBy) && + rootQueryOrderBy.length > 0 ) { rootQueryNextEdges = sortCachedObjectEdges({ edges: rootQueryNextEdges, diff --git a/packages/twenty-sdk/src/cli/__tests__/apps/rich-app/__integration__/app-dev/expected-manifest.ts b/packages/twenty-sdk/src/cli/__tests__/apps/rich-app/__integration__/app-dev/expected-manifest.ts index adfc8214df..84aaf7073b 100644 --- a/packages/twenty-sdk/src/cli/__tests__/apps/rich-app/__integration__/app-dev/expected-manifest.ts +++ b/packages/twenty-sdk/src/cli/__tests__/apps/rich-app/__integration__/app-dev/expected-manifest.ts @@ -409,6 +409,8 @@ export const EXPECTED_MANIFEST: Manifest = { universalIdentifier: 'b648f87b-1d26-4961-b974-0908fd991061', }, ], + views: [], + navigationMenuItems: [], logicFunctions: [ { builtHandlerChecksum: '[checksum]', diff --git a/packages/twenty-sdk/src/cli/__tests__/apps/root-app/__integration__/app-dev/expected-manifest.ts b/packages/twenty-sdk/src/cli/__tests__/apps/root-app/__integration__/app-dev/expected-manifest.ts index a47b83a9f7..43c333e72a 100644 --- a/packages/twenty-sdk/src/cli/__tests__/apps/root-app/__integration__/app-dev/expected-manifest.ts +++ b/packages/twenty-sdk/src/cli/__tests__/apps/root-app/__integration__/app-dev/expected-manifest.ts @@ -139,6 +139,8 @@ export const EXPECTED_MANIFEST: Manifest = { builtComponentChecksum: '[checksum]', }, ], + views: [], + navigationMenuItems: [], roles: [ { universalIdentifier: 'e1e2e3e4-e5e6-4000-8000-000000000040', diff --git a/packages/twenty-sdk/src/cli/utilities/build/manifest/__tests__/manifest-validate.spec.ts b/packages/twenty-sdk/src/cli/utilities/build/manifest/__tests__/manifest-validate.spec.ts index f67c6b4be2..7eae3d95ef 100644 --- a/packages/twenty-sdk/src/cli/utilities/build/manifest/__tests__/manifest-validate.spec.ts +++ b/packages/twenty-sdk/src/cli/utilities/build/manifest/__tests__/manifest-validate.spec.ts @@ -32,6 +32,8 @@ const validManifest: Manifest = { logicFunctions: [], roles: [], publicAssets: [], + views: [], + navigationMenuItems: [], }; describe('manifestValidate', () => { diff --git a/packages/twenty-sdk/src/cli/utilities/build/manifest/manifest-build.ts b/packages/twenty-sdk/src/cli/utilities/build/manifest/manifest-build.ts index 8cb3c24c1b..6c800b6fe3 100644 --- a/packages/twenty-sdk/src/cli/utilities/build/manifest/manifest-build.ts +++ b/packages/twenty-sdk/src/cli/utilities/build/manifest/manifest-build.ts @@ -11,6 +11,7 @@ import { type LogicFunctionConfig, } from '@/sdk'; import { type ObjectConfig } from '@/sdk/objects/object-config'; +import { type ViewConfig } from '@/sdk/views/view-config'; import { glob } from 'fast-glob'; import { readFile } from 'fs-extra'; import { basename, extname, relative } from 'path'; @@ -22,8 +23,10 @@ import { type FrontComponentManifest, type LogicFunctionManifest, type Manifest, + type NavigationMenuItemManifest, type ObjectManifest, type RoleManifest, + type ViewManifest, } from 'twenty-shared/application'; import { getInputSchemaFromSourceCode } from 'twenty-shared/logic-function'; import { assertUnreachable } from 'twenty-shared/utils'; @@ -62,6 +65,8 @@ export const buildManifest = async ( const logicFunctions: LogicFunctionManifest[] = []; const frontComponents: FrontComponentManifest[] = []; const publicAssets: AssetManifest[] = []; + const views: ViewManifest[] = []; + const navigationMenuItems: NavigationMenuItemManifest[] = []; const applicationFilePaths: string[] = []; const objectsFilePaths: string[] = []; @@ -70,6 +75,8 @@ export const buildManifest = async ( const logicFunctionsFilePaths: string[] = []; const frontComponentsFilePaths: string[] = []; const publicAssetsFilePaths: string[] = []; + const viewsFilePaths: string[] = []; + const navigationMenuItemsFilePaths: string[] = []; for (const filePath of filePaths) { const fileContent = await readFile(filePath, 'utf-8'); @@ -206,6 +213,32 @@ export const buildManifest = async ( frontComponentsFilePaths.push(relativePath); break; } + case ManifestEntityKey.Views: { + const extract = await extractManifestFromFile({ + appPath, + filePath, + }); + + const viewManifest: ViewManifest = { + ...extract.config, + }; + + views.push(viewManifest); + errors.push(...extract.errors); + viewsFilePaths.push(relativePath); + break; + } + case ManifestEntityKey.NavigationMenuItems: { + const extract = + await extractManifestFromFile({ + appPath, + filePath, + }); + navigationMenuItems.push(extract.config); + errors.push(...extract.errors); + navigationMenuItemsFilePaths.push(relativePath); + break; + } case ManifestEntityKey.PublicAssets: { // Public assets are handled below break; @@ -244,6 +277,8 @@ export const buildManifest = async ( logicFunctions, frontComponents, publicAssets, + views, + navigationMenuItems, }; const entityFilePaths: EntityFilePaths = { @@ -254,6 +289,8 @@ export const buildManifest = async ( logicFunctions: logicFunctionsFilePaths, frontComponents: frontComponentsFilePaths, publicAssets: publicAssetsFilePaths, + views: viewsFilePaths, + navigationMenuItems: navigationMenuItemsFilePaths, }; return { manifest, filePaths: entityFilePaths, errors }; diff --git a/packages/twenty-sdk/src/cli/utilities/build/manifest/manifest-extract-config.ts b/packages/twenty-sdk/src/cli/utilities/build/manifest/manifest-extract-config.ts index 012dccfce2..14b7d9b6f6 100644 --- a/packages/twenty-sdk/src/cli/utilities/build/manifest/manifest-extract-config.ts +++ b/packages/twenty-sdk/src/cli/utilities/build/manifest/manifest-extract-config.ts @@ -7,6 +7,8 @@ export enum TargetFunction { DefineObject = 'defineObject', DefineRole = 'defineRole', DefineFrontComponent = 'defineFrontComponent', + DefineView = 'defineView', + DefineNavigationMenuItem = 'defineNavigationMenuItem', } export enum ManifestEntityKey { @@ -17,6 +19,8 @@ export enum ManifestEntityKey { Roles = 'roles', FrontComponents = 'frontComponents', PublicAssets = 'publicAssets', + Views = 'views', + NavigationMenuItems = 'navigationMenuItems', } export type EntityFilePaths = Record; @@ -31,6 +35,9 @@ export const TARGET_FUNCTION_TO_ENTITY_KEY_MAPPING: Record< [TargetFunction.DefineObject]: ManifestEntityKey.Objects, [TargetFunction.DefineRole]: ManifestEntityKey.Roles, [TargetFunction.DefineFrontComponent]: ManifestEntityKey.FrontComponents, + [TargetFunction.DefineView]: ManifestEntityKey.Views, + [TargetFunction.DefineNavigationMenuItem]: + ManifestEntityKey.NavigationMenuItems, }; const computeIsTargetFunctionCall = (node: ts.Node): string | undefined => { diff --git a/packages/twenty-sdk/src/sdk/common/types/define-entity.type.ts b/packages/twenty-sdk/src/sdk/common/types/define-entity.type.ts index d541501cc6..a6a236e574 100644 --- a/packages/twenty-sdk/src/sdk/common/types/define-entity.type.ts +++ b/packages/twenty-sdk/src/sdk/common/types/define-entity.type.ts @@ -2,8 +2,10 @@ import { type ApplicationConfig } from '@/sdk/application/application-config'; import { type FrontComponentConfig } from '@/sdk/front-component-config'; import { type LogicFunctionConfig } from '@/sdk/logic-functions/logic-function-config'; import { type ObjectConfig } from '@/sdk/objects/object-config'; +import { type ViewConfig } from '@/sdk/views/view-config'; import { type FieldManifest, + type NavigationMenuItemManifest, type RoleManifest, } from 'twenty-shared/application'; @@ -19,7 +21,9 @@ export type DefinableEntity = | FieldManifest | FrontComponentConfig | LogicFunctionConfig - | RoleManifest; + | RoleManifest + | ViewConfig + | NavigationMenuItemManifest; export type DefineEntity = ( config: T, diff --git a/packages/twenty-sdk/src/sdk/index.ts b/packages/twenty-sdk/src/sdk/index.ts index fa5ebf62e1..e6963a2513 100644 --- a/packages/twenty-sdk/src/sdk/index.ts +++ b/packages/twenty-sdk/src/sdk/index.ts @@ -45,10 +45,13 @@ export type { ObjectRecordUpsertEvent, } from './logic-functions/triggers/database-event-payload-type'; export type { RoutePayload } from './logic-functions/triggers/route-payload-type'; +export { defineNavigationMenuItem } from './navigation-menu-items/define-navigation-menu-item'; export { defineObject } from './objects/define-object'; export { STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS } from './objects/standard-object-ids'; export { defineRole } from './roles/define-role'; export { PermissionFlag } from './roles/permission-flag-type'; +export { defineView } from './views/define-view'; +export type { ViewConfig } from './views/view-config'; // Front Component API exports export { diff --git a/packages/twenty-sdk/src/sdk/navigation-menu-items/define-navigation-menu-item.ts b/packages/twenty-sdk/src/sdk/navigation-menu-items/define-navigation-menu-item.ts new file mode 100644 index 0000000000..c6b0ba2ebf --- /dev/null +++ b/packages/twenty-sdk/src/sdk/navigation-menu-items/define-navigation-menu-item.ts @@ -0,0 +1,19 @@ +import { type DefineEntity } from '@/sdk/common/types/define-entity.type'; +import { createValidationResult } from '@/sdk/common/utils/create-validation-result'; +import { type NavigationMenuItemManifest } from 'twenty-shared/application'; + +export const defineNavigationMenuItem: DefineEntity< + NavigationMenuItemManifest +> = (config) => { + const errors: string[] = []; + + if (!config.universalIdentifier) { + errors.push('NavigationMenuItem must have a universalIdentifier'); + } + + if (typeof config.position !== 'number') { + errors.push('NavigationMenuItem must have a position'); + } + + return createValidationResult({ config, errors }); +}; diff --git a/packages/twenty-sdk/src/sdk/views/define-view.ts b/packages/twenty-sdk/src/sdk/views/define-view.ts new file mode 100644 index 0000000000..0dfbb80a22 --- /dev/null +++ b/packages/twenty-sdk/src/sdk/views/define-view.ts @@ -0,0 +1,67 @@ +import { type DefineEntity } from '@/sdk/common/types/define-entity.type'; +import { createValidationResult } from '@/sdk/common/utils/create-validation-result'; +import { type ViewConfig } from '@/sdk/views/view-config'; + +export const defineView: DefineEntity = (config) => { + const errors: string[] = []; + + if (!config.universalIdentifier) { + errors.push('View must have a universalIdentifier'); + } + + if (!config.name) { + errors.push('View must have a name'); + } + + if (!config.objectUniversalIdentifier) { + errors.push('View must have an objectUniversalIdentifier'); + } + + if (config.fields) { + for (const field of config.fields) { + if (!field.universalIdentifier) { + errors.push('ViewField must have a universalIdentifier'); + } + if (!field.fieldMetadataUniversalIdentifier) { + errors.push('ViewField must have a fieldMetadataUniversalIdentifier'); + } + } + } + + if (config.filters) { + for (const filter of config.filters) { + if (!filter.universalIdentifier) { + errors.push('ViewFilter must have a universalIdentifier'); + } + if (!filter.fieldMetadataUniversalIdentifier) { + errors.push('ViewFilter must have a fieldMetadataUniversalIdentifier'); + } + } + } + + if (config.filterGroups) { + for (const filterGroup of config.filterGroups) { + if (!filterGroup.universalIdentifier) { + errors.push('ViewFilterGroup must have a universalIdentifier'); + } + } + } + + if (config.groups) { + for (const group of config.groups) { + if (!group.universalIdentifier) { + errors.push('ViewGroup must have a universalIdentifier'); + } + } + } + + if (config.fieldGroups) { + for (const fieldGroup of config.fieldGroups) { + if (!fieldGroup.universalIdentifier) { + errors.push('ViewFieldGroup must have a universalIdentifier'); + } + } + } + + return createValidationResult({ config, errors }); +}; diff --git a/packages/twenty-sdk/src/sdk/views/view-config.ts b/packages/twenty-sdk/src/sdk/views/view-config.ts new file mode 100644 index 0000000000..15d8e22074 --- /dev/null +++ b/packages/twenty-sdk/src/sdk/views/view-config.ts @@ -0,0 +1,3 @@ +import { type ViewManifest } from 'twenty-shared/application'; + +export type ViewConfig = ViewManifest; diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/group-by/resolvers/utils/compute-is-numeric-returning-aggregate.util.ts b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/group-by/resolvers/utils/compute-is-numeric-returning-aggregate.util.ts index abfecb5cfb..22aa7ba75e 100644 --- a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/group-by/resolvers/utils/compute-is-numeric-returning-aggregate.util.ts +++ b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/group-by/resolvers/utils/compute-is-numeric-returning-aggregate.util.ts @@ -1,6 +1,4 @@ -import { FieldMetadataType } from 'twenty-shared/types'; - -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; +import { AggregateOperations, FieldMetadataType } from 'twenty-shared/types'; export const computeIsNumericReturningAggregate = ( operation: AggregateOperations, diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/helpers/process-aggregate.helper.ts b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/helpers/process-aggregate.helper.ts index 410c8c5e4e..92e45014b0 100644 --- a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/helpers/process-aggregate.helper.ts +++ b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/helpers/process-aggregate.helper.ts @@ -1,6 +1,6 @@ +import { AggregateOperations } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { type AggregationField } from 'src/engine/api/graphql/workspace-schema-builder/utils/get-available-aggregations-from-object-fields.util'; import { type WorkspaceSelectQueryBuilder } from 'src/engine/twenty-orm/repository/workspace-select-query-builder'; import { formatColumnNamesFromCompositeFieldAndSubfields } from 'src/engine/twenty-orm/utils/format-column-names-from-composite-field-and-subfield.util'; diff --git a/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/services/type-mapper.service.ts b/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/services/type-mapper.service.ts index 6ea852ccc3..42d624f716 100644 --- a/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/services/type-mapper.service.ts +++ b/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/services/type-mapper.service.ts @@ -16,6 +16,7 @@ import { } from 'graphql'; import GraphQLJSON from 'graphql-type-json'; import { + AggregateOperations, type FieldMetadataSettings, FieldMetadataType, NumberDataType, @@ -23,7 +24,6 @@ import { } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { OrderByDirectionType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/enum'; import { ArrayFilterType, diff --git a/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/utils/get-available-aggregations-from-object-fields.util.ts b/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/utils/get-available-aggregations-from-object-fields.util.ts index 32a3a45bb3..64258d7de0 100644 --- a/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/utils/get-available-aggregations-from-object-fields.util.ts +++ b/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/utils/get-available-aggregations-from-object-fields.util.ts @@ -2,10 +2,9 @@ import { GraphQLISODateTime } from '@nestjs/graphql'; import { GraphQLFloat, GraphQLInt, type GraphQLScalarType } from 'graphql'; import { FIELD_FOR_TOTAL_COUNT_AGGREGATE_OPERATION } from 'twenty-shared/constants'; -import { FieldMetadataType } from 'twenty-shared/types'; +import { AggregateOperations, FieldMetadataType } from 'twenty-shared/types'; import { capitalize, isFieldMetadataDateKind } from 'twenty-shared/utils'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { getSubfieldsForAggregateOperation } from 'src/engine/twenty-orm/utils/get-subfields-for-aggregate-operation.util'; diff --git a/packages/twenty-server/src/engine/core-modules/application/constants/application-manifest-metadata-names.constant.ts b/packages/twenty-server/src/engine/core-modules/application/constants/application-manifest-metadata-names.constant.ts index 715608dcce..5a1ac62976 100644 --- a/packages/twenty-server/src/engine/core-modules/application/constants/application-manifest-metadata-names.constant.ts +++ b/packages/twenty-server/src/engine/core-modules/application/constants/application-manifest-metadata-names.constant.ts @@ -6,6 +6,13 @@ export const APPLICATION_MANIFEST_METADATA_NAMES = [ 'logicFunction', 'frontComponent', 'role', + 'view', + 'viewField', + 'viewFieldGroup', + 'viewFilter', + 'viewFilterGroup', + 'viewGroup', + 'navigationMenuItem', ] as const satisfies AllMetadataName[]; export type ApplicationManifestMetadataName = diff --git a/packages/twenty-server/src/engine/core-modules/application/utils/__tests__/from-navigation-menu-item-manifest-to-universal-flat-navigation-menu-item.util.spec.ts b/packages/twenty-server/src/engine/core-modules/application/utils/__tests__/from-navigation-menu-item-manifest-to-universal-flat-navigation-menu-item.util.spec.ts new file mode 100644 index 0000000000..970078bc33 --- /dev/null +++ b/packages/twenty-server/src/engine/core-modules/application/utils/__tests__/from-navigation-menu-item-manifest-to-universal-flat-navigation-menu-item.util.spec.ts @@ -0,0 +1,53 @@ +import { fromNavigationMenuItemManifestToUniversalFlatNavigationMenuItem } from 'src/engine/core-modules/application/utils/from-navigation-menu-item-manifest-to-universal-flat-navigation-menu-item.util'; + +describe('fromNavigationMenuItemManifestToUniversalFlatNavigationMenuItem', () => { + const now = '2026-01-01T00:00:00.000Z'; + const applicationUniversalIdentifier = 'app-uuid-1'; + + it('should convert a minimal navigation menu item manifest', () => { + const result = + fromNavigationMenuItemManifestToUniversalFlatNavigationMenuItem({ + navigationMenuItemManifest: { + universalIdentifier: 'nav-uuid-1', + position: 0, + }, + applicationUniversalIdentifier, + now, + }); + + expect(result.universalIdentifier).toBe('nav-uuid-1'); + expect(result.applicationUniversalIdentifier).toBe( + applicationUniversalIdentifier, + ); + expect(result.position).toBe(0); + expect(result.name).toBeNull(); + expect(result.viewUniversalIdentifier).toBeNull(); + expect(result.link).toBeNull(); + expect(result.folderUniversalIdentifier).toBeNull(); + expect(result.targetObjectMetadataUniversalIdentifier).toBeNull(); + expect(result.targetRecordId).toBeNull(); + expect(result.userWorkspaceId).toBeNull(); + }); + + it('should convert a fully specified navigation menu item manifest', () => { + const result = + fromNavigationMenuItemManifestToUniversalFlatNavigationMenuItem({ + navigationMenuItemManifest: { + universalIdentifier: 'nav-uuid-2', + name: 'Recipes Board', + position: 1, + viewUniversalIdentifier: 'view-uuid-1', + folderUniversalIdentifier: 'nav-folder-uuid-1', + targetObjectUniversalIdentifier: 'obj-uuid-1', + }, + applicationUniversalIdentifier, + now, + }); + + expect(result.name).toBe('Recipes Board'); + expect(result.position).toBe(1); + expect(result.viewUniversalIdentifier).toBe('view-uuid-1'); + expect(result.folderUniversalIdentifier).toBe('nav-folder-uuid-1'); + expect(result.targetObjectMetadataUniversalIdentifier).toBe('obj-uuid-1'); + }); +}); diff --git a/packages/twenty-server/src/engine/core-modules/application/utils/__tests__/from-view-field-manifest-to-universal-flat-view-field.util.spec.ts b/packages/twenty-server/src/engine/core-modules/application/utils/__tests__/from-view-field-manifest-to-universal-flat-view-field.util.spec.ts new file mode 100644 index 0000000000..bdc3315515 --- /dev/null +++ b/packages/twenty-server/src/engine/core-modules/application/utils/__tests__/from-view-field-manifest-to-universal-flat-view-field.util.spec.ts @@ -0,0 +1,54 @@ +import { AggregateOperations } from 'twenty-shared/types'; + +import { fromViewFieldManifestToUniversalFlatViewField } from 'src/engine/core-modules/application/utils/from-view-field-manifest-to-universal-flat-view-field.util'; + +describe('fromViewFieldManifestToUniversalFlatViewField', () => { + const now = '2026-01-01T00:00:00.000Z'; + const applicationUniversalIdentifier = 'app-uuid-1'; + const viewUniversalIdentifier = 'view-uuid-1'; + + it('should convert a view field manifest with defaults', () => { + const result = fromViewFieldManifestToUniversalFlatViewField({ + viewFieldManifest: { + universalIdentifier: 'vf-uuid-1', + fieldMetadataUniversalIdentifier: 'field-uuid-1', + position: 0, + }, + viewUniversalIdentifier, + applicationUniversalIdentifier, + now, + }); + + expect(result.universalIdentifier).toBe('vf-uuid-1'); + expect(result.fieldMetadataUniversalIdentifier).toBe('field-uuid-1'); + expect(result.viewUniversalIdentifier).toBe(viewUniversalIdentifier); + expect(result.isVisible).toBe(true); + expect(result.size).toBe(0); + expect(result.position).toBe(0); + expect(result.aggregateOperation).toBeNull(); + expect(result.viewFieldGroupUniversalIdentifier).toBeNull(); + }); + + it('should respect explicit values', () => { + const result = fromViewFieldManifestToUniversalFlatViewField({ + viewFieldManifest: { + universalIdentifier: 'vf-uuid-2', + fieldMetadataUniversalIdentifier: 'field-uuid-2', + position: 5, + isVisible: false, + size: 200, + aggregateOperation: AggregateOperations.COUNT, + viewFieldGroupUniversalIdentifier: 'vfg-uuid-1', + }, + viewUniversalIdentifier, + applicationUniversalIdentifier, + now, + }); + + expect(result.isVisible).toBe(false); + expect(result.size).toBe(200); + expect(result.position).toBe(5); + expect(result.aggregateOperation).toBe(AggregateOperations.COUNT); + expect(result.viewFieldGroupUniversalIdentifier).toBe('vfg-uuid-1'); + }); +}); diff --git a/packages/twenty-server/src/engine/core-modules/application/utils/__tests__/from-view-filter-manifest-to-universal-flat-view-filter.util.spec.ts b/packages/twenty-server/src/engine/core-modules/application/utils/__tests__/from-view-filter-manifest-to-universal-flat-view-filter.util.spec.ts new file mode 100644 index 0000000000..91a42ef8d5 --- /dev/null +++ b/packages/twenty-server/src/engine/core-modules/application/utils/__tests__/from-view-filter-manifest-to-universal-flat-view-filter.util.spec.ts @@ -0,0 +1,53 @@ +import { ViewFilterOperand } from 'twenty-shared/types'; + +import { fromViewFilterManifestToUniversalFlatViewFilter } from 'src/engine/core-modules/application/utils/from-view-filter-manifest-to-universal-flat-view-filter.util'; + +describe('fromViewFilterManifestToUniversalFlatViewFilter', () => { + const now = '2026-01-01T00:00:00.000Z'; + const applicationUniversalIdentifier = 'app-uuid-1'; + const viewUniversalIdentifier = 'view-uuid-1'; + + it('should convert a view filter manifest with defaults', () => { + const result = fromViewFilterManifestToUniversalFlatViewFilter({ + viewFilterManifest: { + universalIdentifier: 'vfilter-uuid-1', + fieldMetadataUniversalIdentifier: 'field-uuid-1', + operand: ViewFilterOperand.CONTAINS, + value: 'test', + }, + viewUniversalIdentifier, + applicationUniversalIdentifier, + now, + }); + + expect(result.universalIdentifier).toBe('vfilter-uuid-1'); + expect(result.fieldMetadataUniversalIdentifier).toBe('field-uuid-1'); + expect(result.viewUniversalIdentifier).toBe(viewUniversalIdentifier); + expect(result.operand).toBe(ViewFilterOperand.CONTAINS); + expect(result.value).toBe('test'); + expect(result.subFieldName).toBeNull(); + expect(result.viewFilterGroupUniversalIdentifier).toBeNull(); + expect(result.positionInViewFilterGroup).toBeNull(); + }); + + it('should respect explicit optional values', () => { + const result = fromViewFilterManifestToUniversalFlatViewFilter({ + viewFilterManifest: { + universalIdentifier: 'vfilter-uuid-2', + fieldMetadataUniversalIdentifier: 'field-uuid-2', + operand: ViewFilterOperand.IS, + value: ['a', 'b'], + subFieldName: 'city', + viewFilterGroupUniversalIdentifier: 'vfg-uuid-1', + positionInViewFilterGroup: 2, + }, + viewUniversalIdentifier, + applicationUniversalIdentifier, + now, + }); + + expect(result.subFieldName).toBe('city'); + expect(result.viewFilterGroupUniversalIdentifier).toBe('vfg-uuid-1'); + expect(result.positionInViewFilterGroup).toBe(2); + }); +}); diff --git a/packages/twenty-server/src/engine/core-modules/application/utils/__tests__/from-view-manifest-to-universal-flat-view.util.spec.ts b/packages/twenty-server/src/engine/core-modules/application/utils/__tests__/from-view-manifest-to-universal-flat-view.util.spec.ts new file mode 100644 index 0000000000..193cbbe2c2 --- /dev/null +++ b/packages/twenty-server/src/engine/core-modules/application/utils/__tests__/from-view-manifest-to-universal-flat-view.util.spec.ts @@ -0,0 +1,66 @@ +import { + ViewOpenRecordIn, + ViewType, + ViewVisibility, +} from 'twenty-shared/types'; + +import { fromViewManifestToUniversalFlatView } from 'src/engine/core-modules/application/utils/from-view-manifest-to-universal-flat-view.util'; + +describe('fromViewManifestToUniversalFlatView', () => { + const now = '2026-01-01T00:00:00.000Z'; + const applicationUniversalIdentifier = 'app-uuid-1'; + + it('should convert a minimal view manifest to universal flat view', () => { + const result = fromViewManifestToUniversalFlatView({ + viewManifest: { + universalIdentifier: 'view-uuid-1', + name: 'All Records', + objectUniversalIdentifier: 'object-uuid-1', + }, + applicationUniversalIdentifier, + now, + }); + + expect(result.universalIdentifier).toBe('view-uuid-1'); + expect(result.applicationUniversalIdentifier).toBe( + applicationUniversalIdentifier, + ); + expect(result.name).toBe('All Records'); + expect(result.objectMetadataUniversalIdentifier).toBe('object-uuid-1'); + expect(result.type).toBe(ViewType.TABLE); + expect(result.icon).toBe('IconList'); + expect(result.position).toBe(0); + expect(result.isCompact).toBe(false); + expect(result.isCustom).toBe(true); + expect(result.visibility).toBe(ViewVisibility.WORKSPACE); + expect(result.openRecordIn).toBe(ViewOpenRecordIn.SIDE_PANEL); + expect(result.key).toBeNull(); + expect(result.createdAt).toBe(now); + expect(result.updatedAt).toBe(now); + }); + + it('should respect explicit values from the manifest', () => { + const result = fromViewManifestToUniversalFlatView({ + viewManifest: { + universalIdentifier: 'view-uuid-2', + name: 'Kanban Board', + objectUniversalIdentifier: 'object-uuid-1', + type: ViewType.KANBAN, + icon: 'IconLayoutKanban', + position: 3, + isCompact: true, + visibility: ViewVisibility.UNLISTED, + openRecordIn: ViewOpenRecordIn.RECORD_PAGE, + }, + applicationUniversalIdentifier, + now, + }); + + expect(result.type).toBe(ViewType.KANBAN); + expect(result.icon).toBe('IconLayoutKanban'); + expect(result.position).toBe(3); + expect(result.isCompact).toBe(true); + expect(result.visibility).toBe(ViewVisibility.UNLISTED); + expect(result.openRecordIn).toBe(ViewOpenRecordIn.RECORD_PAGE); + }); +}); diff --git a/packages/twenty-server/src/engine/core-modules/application/utils/compute-application-manifest-all-universal-flat-entity-maps.util.ts b/packages/twenty-server/src/engine/core-modules/application/utils/compute-application-manifest-all-universal-flat-entity-maps.util.ts index 3a6fb74f7e..0577641fb8 100644 --- a/packages/twenty-server/src/engine/core-modules/application/utils/compute-application-manifest-all-universal-flat-entity-maps.util.ts +++ b/packages/twenty-server/src/engine/core-modules/application/utils/compute-application-manifest-all-universal-flat-entity-maps.util.ts @@ -4,8 +4,15 @@ import { type ApplicationManifestMetadataName } from 'src/engine/core-modules/ap import { fromFieldManifestToUniversalFlatFieldMetadata } from 'src/engine/core-modules/application/utils/from-field-manifest-to-universal-flat-field-metadata.util'; import { fromFrontComponentManifestToUniversalFlatFrontComponent } from 'src/engine/core-modules/application/utils/from-front-component-manifest-to-universal-flat-front-component.util'; import { fromLogicFunctionManifestToUniversalFlatLogicFunction } from 'src/engine/core-modules/application/utils/from-logic-function-manifest-to-universal-flat-logic-function.util'; +import { fromNavigationMenuItemManifestToUniversalFlatNavigationMenuItem } from 'src/engine/core-modules/application/utils/from-navigation-menu-item-manifest-to-universal-flat-navigation-menu-item.util'; import { fromObjectManifestToUniversalFlatObjectMetadata } from 'src/engine/core-modules/application/utils/from-object-manifest-to-universal-flat-object-metadata.util'; import { fromRoleManifestToUniversalFlatRole } from 'src/engine/core-modules/application/utils/from-role-manifest-to-universal-flat-role.util'; +import { fromViewFieldGroupManifestToUniversalFlatViewFieldGroup } from 'src/engine/core-modules/application/utils/from-view-field-group-manifest-to-universal-flat-view-field-group.util'; +import { fromViewFieldManifestToUniversalFlatViewField } from 'src/engine/core-modules/application/utils/from-view-field-manifest-to-universal-flat-view-field.util'; +import { fromViewFilterGroupManifestToUniversalFlatViewFilterGroup } from 'src/engine/core-modules/application/utils/from-view-filter-group-manifest-to-universal-flat-view-filter-group.util'; +import { fromViewFilterManifestToUniversalFlatViewFilter } from 'src/engine/core-modules/application/utils/from-view-filter-manifest-to-universal-flat-view-filter.util'; +import { fromViewGroupManifestToUniversalFlatViewGroup } from 'src/engine/core-modules/application/utils/from-view-group-manifest-to-universal-flat-view-group.util'; +import { fromViewManifestToUniversalFlatView } from 'src/engine/core-modules/application/utils/from-view-manifest-to-universal-flat-view.util'; import { getEmptyApplicationManifestAllUniversalFlatEntityMaps } from 'src/engine/core-modules/application/utils/get-empty-application-manifest-all-universal-flat-entity-maps.util'; import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; import { type MetadataToFlatEntityMapsKey } from 'src/engine/metadata-modules/flat-entity/types/metadata-to-flat-entity-maps-key'; @@ -123,5 +130,111 @@ export const computeApplicationManifestAllUniversalFlatEntityMaps = ({ ); } + for (const viewManifest of manifest.views ?? []) { + addUniversalFlatEntityToUniversalFlatEntityAndRelatedEntityMapsThroughMutationOrThrow( + { + metadataName: 'view', + universalFlatEntity: fromViewManifestToUniversalFlatView({ + viewManifest, + applicationUniversalIdentifier, + now, + }), + universalFlatEntityAndRelatedMapsToMutate: allUniversalFlatEntityMaps, + }, + ); + + for (const viewFieldGroupManifest of viewManifest.fieldGroups ?? []) { + addUniversalFlatEntityToUniversalFlatEntityAndRelatedEntityMapsThroughMutationOrThrow( + { + metadataName: 'viewFieldGroup', + universalFlatEntity: + fromViewFieldGroupManifestToUniversalFlatViewFieldGroup({ + viewFieldGroupManifest, + viewUniversalIdentifier: viewManifest.universalIdentifier, + applicationUniversalIdentifier, + now, + }), + universalFlatEntityAndRelatedMapsToMutate: allUniversalFlatEntityMaps, + }, + ); + } + + for (const viewFieldManifest of viewManifest.fields ?? []) { + addUniversalFlatEntityToUniversalFlatEntityAndRelatedEntityMapsThroughMutationOrThrow( + { + metadataName: 'viewField', + universalFlatEntity: fromViewFieldManifestToUniversalFlatViewField({ + viewFieldManifest, + viewUniversalIdentifier: viewManifest.universalIdentifier, + applicationUniversalIdentifier, + now, + }), + universalFlatEntityAndRelatedMapsToMutate: allUniversalFlatEntityMaps, + }, + ); + } + + for (const viewFilterGroupManifest of viewManifest.filterGroups ?? []) { + addUniversalFlatEntityToUniversalFlatEntityAndRelatedEntityMapsThroughMutationOrThrow( + { + metadataName: 'viewFilterGroup', + universalFlatEntity: + fromViewFilterGroupManifestToUniversalFlatViewFilterGroup({ + viewFilterGroupManifest, + viewUniversalIdentifier: viewManifest.universalIdentifier, + applicationUniversalIdentifier, + now, + }), + universalFlatEntityAndRelatedMapsToMutate: allUniversalFlatEntityMaps, + }, + ); + } + + for (const viewFilterManifest of viewManifest.filters ?? []) { + addUniversalFlatEntityToUniversalFlatEntityAndRelatedEntityMapsThroughMutationOrThrow( + { + metadataName: 'viewFilter', + universalFlatEntity: fromViewFilterManifestToUniversalFlatViewFilter({ + viewFilterManifest, + viewUniversalIdentifier: viewManifest.universalIdentifier, + applicationUniversalIdentifier, + now, + }), + universalFlatEntityAndRelatedMapsToMutate: allUniversalFlatEntityMaps, + }, + ); + } + + for (const viewGroupManifest of viewManifest.groups ?? []) { + addUniversalFlatEntityToUniversalFlatEntityAndRelatedEntityMapsThroughMutationOrThrow( + { + metadataName: 'viewGroup', + universalFlatEntity: fromViewGroupManifestToUniversalFlatViewGroup({ + viewGroupManifest, + viewUniversalIdentifier: viewManifest.universalIdentifier, + applicationUniversalIdentifier, + now, + }), + universalFlatEntityAndRelatedMapsToMutate: allUniversalFlatEntityMaps, + }, + ); + } + } + + for (const navigationMenuItemManifest of manifest.navigationMenuItems ?? []) { + addUniversalFlatEntityToUniversalFlatEntityAndRelatedEntityMapsThroughMutationOrThrow( + { + metadataName: 'navigationMenuItem', + universalFlatEntity: + fromNavigationMenuItemManifestToUniversalFlatNavigationMenuItem({ + navigationMenuItemManifest, + applicationUniversalIdentifier, + now, + }), + universalFlatEntityAndRelatedMapsToMutate: allUniversalFlatEntityMaps, + }, + ); + } + return allUniversalFlatEntityMaps; }; diff --git a/packages/twenty-server/src/engine/core-modules/application/utils/from-navigation-menu-item-manifest-to-universal-flat-navigation-menu-item.util.ts b/packages/twenty-server/src/engine/core-modules/application/utils/from-navigation-menu-item-manifest-to-universal-flat-navigation-menu-item.util.ts new file mode 100644 index 0000000000..4ed6d87400 --- /dev/null +++ b/packages/twenty-server/src/engine/core-modules/application/utils/from-navigation-menu-item-manifest-to-universal-flat-navigation-menu-item.util.ts @@ -0,0 +1,32 @@ +import { type NavigationMenuItemManifest } from 'twenty-shared/application'; + +import { type UniversalFlatNavigationMenuItem } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-navigation-menu-item.type'; + +export const fromNavigationMenuItemManifestToUniversalFlatNavigationMenuItem = + ({ + navigationMenuItemManifest, + applicationUniversalIdentifier, + now, + }: { + navigationMenuItemManifest: NavigationMenuItemManifest; + applicationUniversalIdentifier: string; + now: string; + }): UniversalFlatNavigationMenuItem => { + return { + universalIdentifier: navigationMenuItemManifest.universalIdentifier, + applicationUniversalIdentifier, + name: navigationMenuItemManifest.name ?? null, + position: navigationMenuItemManifest.position, + viewUniversalIdentifier: + navigationMenuItemManifest.viewUniversalIdentifier ?? null, + link: navigationMenuItemManifest.link ?? null, + folderUniversalIdentifier: + navigationMenuItemManifest.folderUniversalIdentifier ?? null, + targetObjectMetadataUniversalIdentifier: + navigationMenuItemManifest.targetObjectUniversalIdentifier ?? null, + targetRecordId: null, + userWorkspaceId: null, + createdAt: now, + updatedAt: now, + }; + }; diff --git a/packages/twenty-server/src/engine/core-modules/application/utils/from-view-field-group-manifest-to-universal-flat-view-field-group.util.ts b/packages/twenty-server/src/engine/core-modules/application/utils/from-view-field-group-manifest-to-universal-flat-view-field-group.util.ts new file mode 100644 index 0000000000..00d9465a8a --- /dev/null +++ b/packages/twenty-server/src/engine/core-modules/application/utils/from-view-field-group-manifest-to-universal-flat-view-field-group.util.ts @@ -0,0 +1,28 @@ +import { type ViewFieldGroupManifest } from 'twenty-shared/application'; + +import { type UniversalFlatViewFieldGroup } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-view-field-group.type'; + +export const fromViewFieldGroupManifestToUniversalFlatViewFieldGroup = ({ + viewFieldGroupManifest, + viewUniversalIdentifier, + applicationUniversalIdentifier, + now, +}: { + viewFieldGroupManifest: ViewFieldGroupManifest; + viewUniversalIdentifier: string; + applicationUniversalIdentifier: string; + now: string; +}): UniversalFlatViewFieldGroup => { + return { + universalIdentifier: viewFieldGroupManifest.universalIdentifier, + applicationUniversalIdentifier, + viewUniversalIdentifier, + name: viewFieldGroupManifest.name ?? '', + position: viewFieldGroupManifest.position, + isVisible: viewFieldGroupManifest.isVisible ?? true, + viewFieldUniversalIdentifiers: [], + createdAt: now, + updatedAt: now, + deletedAt: null, + }; +}; diff --git a/packages/twenty-server/src/engine/core-modules/application/utils/from-view-field-manifest-to-universal-flat-view-field.util.ts b/packages/twenty-server/src/engine/core-modules/application/utils/from-view-field-manifest-to-universal-flat-view-field.util.ts new file mode 100644 index 0000000000..ca3466b656 --- /dev/null +++ b/packages/twenty-server/src/engine/core-modules/application/utils/from-view-field-manifest-to-universal-flat-view-field.util.ts @@ -0,0 +1,32 @@ +import { type ViewFieldManifest } from 'twenty-shared/application'; + +import { type UniversalFlatViewField } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-view-field.type'; + +export const fromViewFieldManifestToUniversalFlatViewField = ({ + viewFieldManifest, + viewUniversalIdentifier, + applicationUniversalIdentifier, + now, +}: { + viewFieldManifest: ViewFieldManifest; + viewUniversalIdentifier: string; + applicationUniversalIdentifier: string; + now: string; +}): UniversalFlatViewField => { + return { + universalIdentifier: viewFieldManifest.universalIdentifier, + applicationUniversalIdentifier, + fieldMetadataUniversalIdentifier: + viewFieldManifest.fieldMetadataUniversalIdentifier, + viewUniversalIdentifier, + viewFieldGroupUniversalIdentifier: + viewFieldManifest.viewFieldGroupUniversalIdentifier ?? null, + isVisible: viewFieldManifest.isVisible ?? true, + size: viewFieldManifest.size ?? 0, + position: viewFieldManifest.position, + aggregateOperation: viewFieldManifest.aggregateOperation ?? null, + createdAt: now, + updatedAt: now, + deletedAt: null, + }; +}; diff --git a/packages/twenty-server/src/engine/core-modules/application/utils/from-view-filter-group-manifest-to-universal-flat-view-filter-group.util.ts b/packages/twenty-server/src/engine/core-modules/application/utils/from-view-filter-group-manifest-to-universal-flat-view-filter-group.util.ts new file mode 100644 index 0000000000..982fd3e21b --- /dev/null +++ b/packages/twenty-server/src/engine/core-modules/application/utils/from-view-filter-group-manifest-to-universal-flat-view-filter-group.util.ts @@ -0,0 +1,31 @@ +import { type ViewFilterGroupManifest } from 'twenty-shared/application'; + +import { type UniversalFlatViewFilterGroup } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-view-filter-group.type'; + +export const fromViewFilterGroupManifestToUniversalFlatViewFilterGroup = ({ + viewFilterGroupManifest, + viewUniversalIdentifier, + applicationUniversalIdentifier, + now, +}: { + viewFilterGroupManifest: ViewFilterGroupManifest; + viewUniversalIdentifier: string; + applicationUniversalIdentifier: string; + now: string; +}): UniversalFlatViewFilterGroup => { + return { + universalIdentifier: viewFilterGroupManifest.universalIdentifier, + applicationUniversalIdentifier, + viewUniversalIdentifier, + parentViewFilterGroupUniversalIdentifier: + viewFilterGroupManifest.parentViewFilterGroupUniversalIdentifier ?? null, + logicalOperator: viewFilterGroupManifest.logicalOperator, + positionInViewFilterGroup: + viewFilterGroupManifest.positionInViewFilterGroup ?? null, + childViewFilterGroupUniversalIdentifiers: [], + viewFilterUniversalIdentifiers: [], + createdAt: now, + updatedAt: now, + deletedAt: null, + }; +}; diff --git a/packages/twenty-server/src/engine/core-modules/application/utils/from-view-filter-manifest-to-universal-flat-view-filter.util.ts b/packages/twenty-server/src/engine/core-modules/application/utils/from-view-filter-manifest-to-universal-flat-view-filter.util.ts new file mode 100644 index 0000000000..3eeb3d6730 --- /dev/null +++ b/packages/twenty-server/src/engine/core-modules/application/utils/from-view-filter-manifest-to-universal-flat-view-filter.util.ts @@ -0,0 +1,33 @@ +import { type ViewFilterManifest } from 'twenty-shared/application'; + +import { type UniversalFlatViewFilter } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-view-filter.type'; + +export const fromViewFilterManifestToUniversalFlatViewFilter = ({ + viewFilterManifest, + viewUniversalIdentifier, + applicationUniversalIdentifier, + now, +}: { + viewFilterManifest: ViewFilterManifest; + viewUniversalIdentifier: string; + applicationUniversalIdentifier: string; + now: string; +}): UniversalFlatViewFilter => { + return { + universalIdentifier: viewFilterManifest.universalIdentifier, + applicationUniversalIdentifier, + fieldMetadataUniversalIdentifier: + viewFilterManifest.fieldMetadataUniversalIdentifier, + viewUniversalIdentifier, + viewFilterGroupUniversalIdentifier: + viewFilterManifest.viewFilterGroupUniversalIdentifier ?? null, + operand: viewFilterManifest.operand, + value: viewFilterManifest.value, + subFieldName: viewFilterManifest.subFieldName ?? null, + positionInViewFilterGroup: + viewFilterManifest.positionInViewFilterGroup ?? null, + createdAt: now, + updatedAt: now, + deletedAt: null, + }; +}; diff --git a/packages/twenty-server/src/engine/core-modules/application/utils/from-view-group-manifest-to-universal-flat-view-group.util.ts b/packages/twenty-server/src/engine/core-modules/application/utils/from-view-group-manifest-to-universal-flat-view-group.util.ts new file mode 100644 index 0000000000..0acc1ee8fe --- /dev/null +++ b/packages/twenty-server/src/engine/core-modules/application/utils/from-view-group-manifest-to-universal-flat-view-group.util.ts @@ -0,0 +1,27 @@ +import { type ViewGroupManifest } from 'twenty-shared/application'; + +import { type UniversalFlatViewGroup } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-view-group.type'; + +export const fromViewGroupManifestToUniversalFlatViewGroup = ({ + viewGroupManifest, + viewUniversalIdentifier, + applicationUniversalIdentifier, + now, +}: { + viewGroupManifest: ViewGroupManifest; + viewUniversalIdentifier: string; + applicationUniversalIdentifier: string; + now: string; +}): UniversalFlatViewGroup => { + return { + universalIdentifier: viewGroupManifest.universalIdentifier, + applicationUniversalIdentifier, + viewUniversalIdentifier, + fieldValue: viewGroupManifest.fieldValue, + isVisible: viewGroupManifest.isVisible ?? true, + position: viewGroupManifest.position, + createdAt: now, + updatedAt: now, + deletedAt: null, + }; +}; diff --git a/packages/twenty-server/src/engine/core-modules/application/utils/from-view-manifest-to-universal-flat-view.util.ts b/packages/twenty-server/src/engine/core-modules/application/utils/from-view-manifest-to-universal-flat-view.util.ts new file mode 100644 index 0000000000..a7d35245a9 --- /dev/null +++ b/packages/twenty-server/src/engine/core-modules/application/utils/from-view-manifest-to-universal-flat-view.util.ts @@ -0,0 +1,49 @@ +import { type ViewManifest } from 'twenty-shared/application'; +import { + ViewOpenRecordIn, + ViewType, + ViewVisibility, +} from 'twenty-shared/types'; + +import { type UniversalFlatView } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-view.type'; + +export const fromViewManifestToUniversalFlatView = ({ + viewManifest, + applicationUniversalIdentifier, + now, +}: { + viewManifest: ViewManifest; + applicationUniversalIdentifier: string; + now: string; +}): UniversalFlatView => { + return { + universalIdentifier: viewManifest.universalIdentifier, + applicationUniversalIdentifier, + name: viewManifest.name, + objectMetadataUniversalIdentifier: viewManifest.objectUniversalIdentifier, + type: viewManifest.type ?? ViewType.TABLE, + icon: viewManifest.icon ?? 'IconList', + position: viewManifest.position ?? 0, + isCompact: viewManifest.isCompact ?? false, + isCustom: true, + visibility: viewManifest.visibility ?? ViewVisibility.WORKSPACE, + openRecordIn: viewManifest.openRecordIn ?? ViewOpenRecordIn.SIDE_PANEL, + key: null, + kanbanAggregateOperation: null, + kanbanAggregateOperationFieldMetadataUniversalIdentifier: null, + calendarLayout: null, + calendarFieldMetadataUniversalIdentifier: null, + mainGroupByFieldMetadataUniversalIdentifier: null, + shouldHideEmptyGroups: false, + anyFieldFilterValue: null, + createdByUserWorkspaceId: null, + viewFieldUniversalIdentifiers: [], + viewFilterUniversalIdentifiers: [], + viewFilterGroupUniversalIdentifiers: [], + viewGroupUniversalIdentifiers: [], + viewFieldGroupUniversalIdentifiers: [], + createdAt: now, + updatedAt: now, + deletedAt: null, + }; +}; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-filter-group/utils/from-create-view-filter-group-input-to-flat-view-filter-group-to-create.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-filter-group/utils/from-create-view-filter-group-input-to-flat-view-filter-group-to-create.util.ts index 988682a91b..7882529210 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-filter-group/utils/from-create-view-filter-group-input-to-flat-view-filter-group-to-create.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view-filter-group/utils/from-create-view-filter-group-input-to-flat-view-filter-group-to-create.util.ts @@ -1,11 +1,11 @@ import { trimAndRemoveDuplicatedWhitespacesFromObjectStringProperties } from 'twenty-shared/utils'; import { v4 } from 'uuid'; +import { ViewFilterGroupLogicalOperator } from 'twenty-shared/types'; import { type FlatApplication } from 'src/engine/core-modules/application/types/flat-application.type'; import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; import { resolveEntityRelationUniversalIdentifiers } from 'src/engine/metadata-modules/flat-entity/utils/resolve-entity-relation-universal-identifiers.util'; import { type CreateViewFilterGroupInput } from 'src/engine/metadata-modules/view-filter-group/dtos/inputs/create-view-filter-group.input'; -import { ViewFilterGroupLogicalOperator } from 'src/engine/metadata-modules/view-filter-group/enums/view-filter-group-logical-operator'; import { type UniversalFlatViewFilterGroup } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-view-filter-group.type'; export const fromCreateViewFilterGroupInputToFlatViewFilterGroupToCreate = ({ diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/from-create-view-input-to-flat-view-to-create.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/from-create-view-input-to-flat-view-to-create.util.ts index 4ce354fa92..0447d9579c 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/from-create-view-input-to-flat-view-to-create.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/from-create-view-input-to-flat-view-to-create.util.ts @@ -3,15 +3,17 @@ import { trimAndRemoveDuplicatedWhitespacesFromObjectStringProperties, } from 'twenty-shared/utils'; import { v4 } from 'uuid'; +import { + ViewOpenRecordIn, + ViewType, + ViewVisibility, +} from 'twenty-shared/types'; import { type FlatApplication } from 'src/engine/core-modules/application/types/flat-application.type'; import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; import { resolveEntityRelationUniversalIdentifiers } from 'src/engine/metadata-modules/flat-entity/utils/resolve-entity-relation-universal-identifiers.util'; import { computeFlatViewGroupsOnViewCreate } from 'src/engine/metadata-modules/flat-view-group/utils/compute-flat-view-groups-on-view-create.util'; import { type CreateViewInput } from 'src/engine/metadata-modules/view/dtos/inputs/create-view.input'; -import { ViewOpenRecordIn } from 'src/engine/metadata-modules/view/enums/view-open-record-in'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; -import { ViewVisibility } from 'src/engine/metadata-modules/view/enums/view-visibility.enum'; import { type UniversalFlatViewGroup } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-view-group.type'; import { type UniversalFlatView } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-view.type'; 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 7dc53ac2b4..a3b008ec5f 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 @@ -5,6 +5,11 @@ import { TypeOrmQueryService } from '@ptc-org/nestjs-query-typeorm'; import { fromArrayToUniqueKeyRecord, isDefined } from 'twenty-shared/utils'; import { FindManyOptions, FindOneOptions, Repository } from 'typeorm'; import { v4 as uuidv4, v4 } from 'uuid'; +import { + ViewOpenRecordIn, + ViewType, + ViewVisibility, +} from 'twenty-shared/types'; import { ApplicationService } from 'src/engine/core-modules/application/services/application.service'; import { type FlatApplication } from 'src/engine/core-modules/application/types/flat-application.type'; @@ -37,9 +42,6 @@ import { import { WidgetConfigurationType } from 'src/engine/metadata-modules/page-layout-widget/enums/widget-configuration-type.type'; import { PageLayoutType } from 'src/engine/metadata-modules/page-layout/enums/page-layout-type.enum'; import { ViewKey } from 'src/engine/metadata-modules/view/enums/view-key.enum'; -import { ViewOpenRecordIn } from 'src/engine/metadata-modules/view/enums/view-open-record-in'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; -import { ViewVisibility } from 'src/engine/metadata-modules/view/enums/view-visibility.enum'; import { GlobalWorkspaceOrmManager } from 'src/engine/twenty-orm/global-workspace-datasource/global-workspace-orm.manager'; import { buildSystemAuthContext } from 'src/engine/twenty-orm/utils/build-system-auth-context.util'; import { WorkspaceCacheService } from 'src/engine/workspace-cache/services/workspace-cache.service'; diff --git a/packages/twenty-server/src/engine/metadata-modules/page-layout-widget/dtos/aggregate-chart-configuration.dto.ts b/packages/twenty-server/src/engine/metadata-modules/page-layout-widget/dtos/aggregate-chart-configuration.dto.ts index 909bf7aad1..6158c78f3d 100644 --- a/packages/twenty-server/src/engine/metadata-modules/page-layout-widget/dtos/aggregate-chart-configuration.dto.ts +++ b/packages/twenty-server/src/engine/metadata-modules/page-layout-widget/dtos/aggregate-chart-configuration.dto.ts @@ -17,9 +17,8 @@ import { } from 'class-validator'; import { GraphQLJSON } from 'graphql-type-json'; import { CalendarStartDay } from 'twenty-shared/constants'; -import { SerializedRelation } from 'twenty-shared/types'; +import { AggregateOperations, SerializedRelation } from 'twenty-shared/types'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; import { RatioAggregateConfigDTO } from 'src/engine/metadata-modules/page-layout-widget/dtos/ratio-aggregate-config.dto'; import { WidgetConfigurationType } from 'src/engine/metadata-modules/page-layout-widget/enums/widget-configuration-type.type'; diff --git a/packages/twenty-server/src/engine/metadata-modules/page-layout-widget/dtos/bar-chart-configuration.dto.ts b/packages/twenty-server/src/engine/metadata-modules/page-layout-widget/dtos/bar-chart-configuration.dto.ts index 695b35a4d7..c97ce1482c 100644 --- a/packages/twenty-server/src/engine/metadata-modules/page-layout-widget/dtos/bar-chart-configuration.dto.ts +++ b/packages/twenty-server/src/engine/metadata-modules/page-layout-widget/dtos/bar-chart-configuration.dto.ts @@ -17,9 +17,8 @@ import { } from 'class-validator'; import { GraphQLJSON } from 'graphql-type-json'; import { CalendarStartDay } from 'twenty-shared/constants'; -import { SerializedRelation } from 'twenty-shared/types'; +import { AggregateOperations, SerializedRelation } from 'twenty-shared/types'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; import { AxisNameDisplay } from 'src/engine/metadata-modules/page-layout-widget/enums/axis-name-display.enum'; import { BarChartGroupMode } from 'src/engine/metadata-modules/page-layout-widget/enums/bar-chart-group-mode.enum'; diff --git a/packages/twenty-server/src/engine/metadata-modules/page-layout-widget/dtos/gauge-chart-configuration.dto.ts b/packages/twenty-server/src/engine/metadata-modules/page-layout-widget/dtos/gauge-chart-configuration.dto.ts index f18d4ed5b1..75e757d243 100644 --- a/packages/twenty-server/src/engine/metadata-modules/page-layout-widget/dtos/gauge-chart-configuration.dto.ts +++ b/packages/twenty-server/src/engine/metadata-modules/page-layout-widget/dtos/gauge-chart-configuration.dto.ts @@ -15,9 +15,8 @@ import { } from 'class-validator'; import { GraphQLJSON } from 'graphql-type-json'; import { CalendarStartDay } from 'twenty-shared/constants'; -import { SerializedRelation } from 'twenty-shared/types'; +import { AggregateOperations, SerializedRelation } from 'twenty-shared/types'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; import { WidgetConfigurationType } from 'src/engine/metadata-modules/page-layout-widget/enums/widget-configuration-type.type'; import { ChartFilter } from 'src/engine/metadata-modules/page-layout-widget/types/chart-filter.type'; diff --git a/packages/twenty-server/src/engine/metadata-modules/page-layout-widget/dtos/line-chart-configuration.dto.ts b/packages/twenty-server/src/engine/metadata-modules/page-layout-widget/dtos/line-chart-configuration.dto.ts index 440786e5ba..c5e5e3bfc0 100644 --- a/packages/twenty-server/src/engine/metadata-modules/page-layout-widget/dtos/line-chart-configuration.dto.ts +++ b/packages/twenty-server/src/engine/metadata-modules/page-layout-widget/dtos/line-chart-configuration.dto.ts @@ -17,9 +17,8 @@ import { } from 'class-validator'; import { GraphQLJSON } from 'graphql-type-json'; import { CalendarStartDay } from 'twenty-shared/constants'; -import { SerializedRelation } from 'twenty-shared/types'; +import { AggregateOperations, SerializedRelation } from 'twenty-shared/types'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; import { AxisNameDisplay } from 'src/engine/metadata-modules/page-layout-widget/enums/axis-name-display.enum'; import { ObjectRecordGroupByDateGranularity } from 'src/engine/metadata-modules/page-layout-widget/enums/date-granularity.enum'; diff --git a/packages/twenty-server/src/engine/metadata-modules/page-layout-widget/dtos/pie-chart-configuration.dto.ts b/packages/twenty-server/src/engine/metadata-modules/page-layout-widget/dtos/pie-chart-configuration.dto.ts index 1dc9e672f3..efcabb4b87 100644 --- a/packages/twenty-server/src/engine/metadata-modules/page-layout-widget/dtos/pie-chart-configuration.dto.ts +++ b/packages/twenty-server/src/engine/metadata-modules/page-layout-widget/dtos/pie-chart-configuration.dto.ts @@ -16,9 +16,8 @@ import { } from 'class-validator'; import { GraphQLJSON } from 'graphql-type-json'; import { CalendarStartDay } from 'twenty-shared/constants'; -import { SerializedRelation } from 'twenty-shared/types'; +import { AggregateOperations, SerializedRelation } from 'twenty-shared/types'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; import { ObjectRecordGroupByDateGranularity } from 'src/engine/metadata-modules/page-layout-widget/enums/date-granularity.enum'; import { GraphOrderBy } from 'src/engine/metadata-modules/page-layout-widget/enums/graph-order-by.enum'; diff --git a/packages/twenty-server/src/engine/metadata-modules/view-field/dtos/inputs/create-view-field.input.ts b/packages/twenty-server/src/engine/metadata-modules/view-field/dtos/inputs/create-view-field.input.ts index 3c09d0e969..6e1ef9f42b 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-field/dtos/inputs/create-view-field.input.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-field/dtos/inputs/create-view-field.input.ts @@ -7,8 +7,8 @@ import { IsOptional, IsUUID, } from 'class-validator'; +import { AggregateOperations } from 'twenty-shared/types'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; @InputType() diff --git a/packages/twenty-server/src/engine/metadata-modules/view-field/dtos/inputs/update-view-field.input.ts b/packages/twenty-server/src/engine/metadata-modules/view-field/dtos/inputs/update-view-field.input.ts index 24efa25828..59e0dd8d8c 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-field/dtos/inputs/update-view-field.input.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-field/dtos/inputs/update-view-field.input.ts @@ -10,8 +10,8 @@ import { IsUUID, ValidateNested, } from 'class-validator'; +import { AggregateOperations } from 'twenty-shared/types'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; @InputType() diff --git a/packages/twenty-server/src/engine/metadata-modules/view-field/dtos/view-field.dto.ts b/packages/twenty-server/src/engine/metadata-modules/view-field/dtos/view-field.dto.ts index df94709772..ea0097d7ef 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-field/dtos/view-field.dto.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-field/dtos/view-field.dto.ts @@ -1,8 +1,8 @@ import { Field, ObjectType, registerEnumType } from '@nestjs/graphql'; import { IDField } from '@ptc-org/nestjs-query-graphql'; +import { AggregateOperations } from 'twenty-shared/types'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; registerEnumType(AggregateOperations, { name: 'AggregateOperations' }); diff --git a/packages/twenty-server/src/engine/metadata-modules/view-field/entities/view-field.entity.ts b/packages/twenty-server/src/engine/metadata-modules/view-field/entities/view-field.entity.ts index ec1d61d4d6..cc67babe56 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-field/entities/view-field.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-field/entities/view-field.entity.ts @@ -10,8 +10,8 @@ import { type Relation, UpdateDateColumn, } from 'typeorm'; +import { AggregateOperations } from 'twenty-shared/types'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ViewFieldGroupEntity } from 'src/engine/metadata-modules/view-field-group/entities/view-field-group.entity'; import { ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity'; diff --git a/packages/twenty-server/src/engine/metadata-modules/view-filter-group/dtos/inputs/create-view-filter-group.input.ts b/packages/twenty-server/src/engine/metadata-modules/view-filter-group/dtos/inputs/create-view-filter-group.input.ts index 6942803df3..4c24831c72 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-filter-group/dtos/inputs/create-view-filter-group.input.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-filter-group/dtos/inputs/create-view-filter-group.input.ts @@ -1,7 +1,8 @@ import { Field, InputType } from '@nestjs/graphql'; +import { ViewFilterGroupLogicalOperator } from 'twenty-shared/types'; + import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; -import { ViewFilterGroupLogicalOperator } from 'src/engine/metadata-modules/view-filter-group/enums/view-filter-group-logical-operator'; @InputType() export class CreateViewFilterGroupInput { diff --git a/packages/twenty-server/src/engine/metadata-modules/view-filter-group/dtos/view-filter-group.dto.ts b/packages/twenty-server/src/engine/metadata-modules/view-filter-group/dtos/view-filter-group.dto.ts index 3c254c4b7b..4f620b8e98 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-filter-group/dtos/view-filter-group.dto.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-filter-group/dtos/view-filter-group.dto.ts @@ -1,9 +1,9 @@ import { Field, ObjectType, registerEnumType } from '@nestjs/graphql'; import { IDField } from '@ptc-org/nestjs-query-graphql'; +import { ViewFilterGroupLogicalOperator } from 'twenty-shared/types'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; -import { ViewFilterGroupLogicalOperator } from 'src/engine/metadata-modules/view-filter-group/enums/view-filter-group-logical-operator'; registerEnumType(ViewFilterGroupLogicalOperator, { name: 'ViewFilterGroupLogicalOperator', diff --git a/packages/twenty-server/src/engine/metadata-modules/view-filter-group/entities/view-filter-group.entity.ts b/packages/twenty-server/src/engine/metadata-modules/view-filter-group/entities/view-filter-group.entity.ts index ce7ab02d04..786fb84061 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-filter-group/entities/view-filter-group.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-filter-group/entities/view-filter-group.entity.ts @@ -11,8 +11,8 @@ import { type Relation, UpdateDateColumn, } from 'typeorm'; +import { ViewFilterGroupLogicalOperator } from 'twenty-shared/types'; -import { ViewFilterGroupLogicalOperator } from 'src/engine/metadata-modules/view-filter-group/enums/view-filter-group-logical-operator'; import { ViewFilterEntity } from 'src/engine/metadata-modules/view-filter/entities/view-filter.entity'; import { ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity'; import { SyncableEntity } from 'src/engine/workspace-manager/types/syncable-entity.interface'; diff --git a/packages/twenty-server/src/engine/metadata-modules/view-filter-group/services/tests/view-filter-group.service.spec.ts b/packages/twenty-server/src/engine/metadata-modules/view-filter-group/services/tests/view-filter-group.service.spec.ts index a1b52856cc..24a50815f4 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-filter-group/services/tests/view-filter-group.service.spec.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-filter-group/services/tests/view-filter-group.service.spec.ts @@ -2,11 +2,11 @@ import { Test, type TestingModule } from '@nestjs/testing'; import { getRepositoryToken } from '@nestjs/typeorm'; import { type Repository } from 'typeorm'; +import { ViewFilterGroupLogicalOperator } from 'twenty-shared/types'; import { ApplicationService } from 'src/engine/core-modules/application/services/application.service'; import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; import { ViewFilterGroupEntity } from 'src/engine/metadata-modules/view-filter-group/entities/view-filter-group.entity'; -import { ViewFilterGroupLogicalOperator } from 'src/engine/metadata-modules/view-filter-group/enums/view-filter-group-logical-operator'; import { ViewFilterGroupService } from 'src/engine/metadata-modules/view-filter-group/services/view-filter-group.service'; import { WorkspaceMigrationValidateBuildAndRunService } from 'src/engine/workspace-manager/workspace-migration/services/workspace-migration-validate-build-and-run-service'; diff --git a/packages/twenty-server/src/engine/metadata-modules/view-permissions/guards/create-view-permission.guard.ts b/packages/twenty-server/src/engine/metadata-modules/view-permissions/guards/create-view-permission.guard.ts index 0d267eddcf..b7a482d8ac 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-permissions/guards/create-view-permission.guard.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-permissions/guards/create-view-permission.guard.ts @@ -5,8 +5,9 @@ import { } from '@nestjs/common'; import { GqlExecutionContext } from '@nestjs/graphql'; +import { ViewVisibility } from 'twenty-shared/types'; + import { ViewAccessService } from 'src/engine/metadata-modules/view-permissions/services/view-access.service'; -import { ViewVisibility } from 'src/engine/metadata-modules/view/enums/view-visibility.enum'; @Injectable() export class CreateViewPermissionGuard implements CanActivate { diff --git a/packages/twenty-server/src/engine/metadata-modules/view-permissions/services/view-access.service.ts b/packages/twenty-server/src/engine/metadata-modules/view-permissions/services/view-access.service.ts index 42d0ce23e7..66a6e496fb 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-permissions/services/view-access.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-permissions/services/view-access.service.ts @@ -2,10 +2,10 @@ import { Injectable } from '@nestjs/common'; import { PermissionFlagType } from 'twenty-shared/constants'; import { isDefined } from 'twenty-shared/utils'; +import { ViewVisibility } from 'twenty-shared/types'; import { PermissionsService } from 'src/engine/metadata-modules/permissions/permissions.service'; import { type ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity'; -import { ViewVisibility } from 'src/engine/metadata-modules/view/enums/view-visibility.enum'; import { ViewException, ViewExceptionCode, diff --git a/packages/twenty-server/src/engine/metadata-modules/view/dtos/inputs/create-view.input.ts b/packages/twenty-server/src/engine/metadata-modules/view/dtos/inputs/create-view.input.ts index f32bea7c09..d6eae0a26d 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view/dtos/inputs/create-view.input.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view/dtos/inputs/create-view.input.ts @@ -9,15 +9,17 @@ import { IsString, IsUUID, } from 'class-validator'; +import { + AggregateOperations, + ViewOpenRecordIn, + ViewType, + ViewVisibility, +} from 'twenty-shared/types'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; import { IsValidMetadataName } from 'src/engine/decorators/metadata/is-valid-metadata-name.decorator'; import { ViewCalendarLayout } from 'src/engine/metadata-modules/view/enums/view-calendar-layout.enum'; import { ViewKey } from 'src/engine/metadata-modules/view/enums/view-key.enum'; -import { ViewOpenRecordIn } from 'src/engine/metadata-modules/view/enums/view-open-record-in'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; -import { ViewVisibility } from 'src/engine/metadata-modules/view/enums/view-visibility.enum'; @InputType() export class CreateViewInput { diff --git a/packages/twenty-server/src/engine/metadata-modules/view/dtos/inputs/update-view.input.ts b/packages/twenty-server/src/engine/metadata-modules/view/dtos/inputs/update-view.input.ts index 7367fe22c1..34ee2f6f01 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view/dtos/inputs/update-view.input.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view/dtos/inputs/update-view.input.ts @@ -8,14 +8,16 @@ import { IsString, IsUUID, } from 'class-validator'; +import { + AggregateOperations, + ViewOpenRecordIn, + ViewType, + ViewVisibility, +} from 'twenty-shared/types'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; import { IsValidMetadataName } from 'src/engine/decorators/metadata/is-valid-metadata-name.decorator'; import { ViewCalendarLayout } from 'src/engine/metadata-modules/view/enums/view-calendar-layout.enum'; -import { ViewOpenRecordIn } from 'src/engine/metadata-modules/view/enums/view-open-record-in'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; -import { ViewVisibility } from 'src/engine/metadata-modules/view/enums/view-visibility.enum'; // TODO: this should be refactored like for view-field.input.ts // This is a temporary fix as we were extending the CreateViewInput class which was adding default values for the non filled fields diff --git a/packages/twenty-server/src/engine/metadata-modules/view/dtos/view.dto.ts b/packages/twenty-server/src/engine/metadata-modules/view/dtos/view.dto.ts index 6c3595ef5d..0ddb02f458 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view/dtos/view.dto.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view/dtos/view.dto.ts @@ -1,8 +1,13 @@ import { Field, ObjectType, registerEnumType } from '@nestjs/graphql'; import { IDField } from '@ptc-org/nestjs-query-graphql'; +import { + AggregateOperations, + ViewOpenRecordIn, + ViewType, + ViewVisibility, +} from 'twenty-shared/types'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; import { ViewFieldGroupDTO } from 'src/engine/metadata-modules/view-field-group/dtos/view-field-group.dto'; import { ViewFieldDTO } from 'src/engine/metadata-modules/view-field/dtos/view-field.dto'; @@ -12,9 +17,6 @@ import { ViewGroupDTO } from 'src/engine/metadata-modules/view-group/dtos/view-g import { ViewSortDTO } from 'src/engine/metadata-modules/view-sort/dtos/view-sort.dto'; import { ViewCalendarLayout } from 'src/engine/metadata-modules/view/enums/view-calendar-layout.enum'; import { ViewKey } from 'src/engine/metadata-modules/view/enums/view-key.enum'; -import { ViewOpenRecordIn } from 'src/engine/metadata-modules/view/enums/view-open-record-in'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; -import { ViewVisibility } from 'src/engine/metadata-modules/view/enums/view-visibility.enum'; registerEnumType(ViewOpenRecordIn, { name: 'ViewOpenRecordIn' }); registerEnumType(ViewType, { name: 'ViewType' }); diff --git a/packages/twenty-server/src/engine/metadata-modules/view/entities/view.entity.ts b/packages/twenty-server/src/engine/metadata-modules/view/entities/view.entity.ts index fd0c035329..428a18d5a5 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view/entities/view.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view/entities/view.entity.ts @@ -12,8 +12,13 @@ import { type Relation, UpdateDateColumn, } from 'typeorm'; +import { + AggregateOperations, + ViewOpenRecordIn, + ViewType, + ViewVisibility, +} from 'twenty-shared/types'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; @@ -25,9 +30,6 @@ import { ViewGroupEntity } from 'src/engine/metadata-modules/view-group/entities import { ViewSortEntity } from 'src/engine/metadata-modules/view-sort/entities/view-sort.entity'; import { ViewCalendarLayout } from 'src/engine/metadata-modules/view/enums/view-calendar-layout.enum'; import { ViewKey } from 'src/engine/metadata-modules/view/enums/view-key.enum'; -import { ViewOpenRecordIn } from 'src/engine/metadata-modules/view/enums/view-open-record-in'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; -import { ViewVisibility } from 'src/engine/metadata-modules/view/enums/view-visibility.enum'; import { SyncableEntity } from 'src/engine/workspace-manager/types/syncable-entity.interface'; // We could refactor this type to be dynamic to view type diff --git a/packages/twenty-server/src/engine/metadata-modules/view/resolvers/view.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/view/resolvers/view.resolver.ts index a9cf03f384..caba306bea 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view/resolvers/view.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view/resolvers/view.resolver.ts @@ -10,6 +10,7 @@ import { import { isArray } from '@sniptt/guards'; import { isDefined } from 'twenty-shared/utils'; +import { ViewVisibility } from 'twenty-shared/types'; import { MetadataResolver } from 'src/engine/api/graphql/graphql-config/decorators/metadata-resolver.decorator'; import { I18nService } from 'src/engine/core-modules/i18n/i18n.service'; @@ -41,7 +42,6 @@ import { CreateViewInput } from 'src/engine/metadata-modules/view/dtos/inputs/cr import { UpdateViewInput } from 'src/engine/metadata-modules/view/dtos/inputs/update-view.input'; import { ViewDTO } from 'src/engine/metadata-modules/view/dtos/view.dto'; import { ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity'; -import { ViewVisibility } from 'src/engine/metadata-modules/view/enums/view-visibility.enum'; import { ViewService } from 'src/engine/metadata-modules/view/services/view.service'; import { ViewGraphqlApiExceptionFilter } from 'src/engine/metadata-modules/view/utils/view-graphql-api-exception.filter'; diff --git a/packages/twenty-server/src/engine/metadata-modules/view/services/__tests__/view-query-params.service.spec.ts b/packages/twenty-server/src/engine/metadata-modules/view/services/__tests__/view-query-params.service.spec.ts index b86ea53897..4a2af03071 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view/services/__tests__/view-query-params.service.spec.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view/services/__tests__/view-query-params.service.spec.ts @@ -1,12 +1,15 @@ import { Test, type TestingModule } from '@nestjs/testing'; -import { FieldMetadataType, ViewFilterOperand } from 'twenty-shared/types'; +import { + FieldMetadataType, + ViewFilterGroupLogicalOperator, + ViewFilterOperand, + ViewType, + ViewVisibility, +} from 'twenty-shared/types'; import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; -import { ViewFilterGroupLogicalOperator } from 'src/engine/metadata-modules/view-filter-group/enums/view-filter-group-logical-operator'; import { ViewSortDirection } from 'src/engine/metadata-modules/view-sort/enums/view-sort-direction'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; -import { ViewVisibility } from 'src/engine/metadata-modules/view/enums/view-visibility.enum'; import { ViewQueryParamsService } from 'src/engine/metadata-modules/view/services/view-query-params.service'; import { ViewService } from 'src/engine/metadata-modules/view/services/view.service'; diff --git a/packages/twenty-server/src/engine/metadata-modules/view/services/view-query-params.service.ts b/packages/twenty-server/src/engine/metadata-modules/view/services/view-query-params.service.ts index eddcccd1cb..70b586826f 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view/services/view-query-params.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view/services/view-query-params.service.ts @@ -4,6 +4,8 @@ import { OrderByDirection, RecordFilterGroupLogicalOperator, type RecordGqlOperationFilter, + ViewFilterGroupLogicalOperator, + ViewType, } from 'twenty-shared/types'; import { computeRecordGqlOperationFilter, @@ -17,9 +19,7 @@ import { type ObjectRecordOrderBy } from 'src/engine/api/graphql/workspace-query import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; -import { ViewFilterGroupLogicalOperator } from 'src/engine/metadata-modules/view-filter-group/enums/view-filter-group-logical-operator'; import { ViewSortDirection } from 'src/engine/metadata-modules/view-sort/enums/view-sort-direction'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; import { ViewService } from 'src/engine/metadata-modules/view/services/view.service'; export type ViewQueryParams = { diff --git a/packages/twenty-server/src/engine/metadata-modules/view/services/view.service.ts b/packages/twenty-server/src/engine/metadata-modules/view/services/view.service.ts index db37c5e374..ae2d4e7efd 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view/services/view.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view/services/view.service.ts @@ -4,6 +4,7 @@ import { InjectRepository } from '@nestjs/typeorm'; import { APP_LOCALES, SOURCE_LOCALE } from 'twenty-shared/translations'; import { isDefined } from 'twenty-shared/utils'; import { IsNull, Repository } from 'typeorm'; +import { ViewVisibility } from 'twenty-shared/types'; import { ApplicationService } from 'src/engine/core-modules/application/services/application.service'; import { I18nService } from 'src/engine/core-modules/i18n/i18n.service'; @@ -21,7 +22,6 @@ import { DestroyViewInput } from 'src/engine/metadata-modules/view/dtos/inputs/d import { UpdateViewInput } from 'src/engine/metadata-modules/view/dtos/inputs/update-view.input'; import { ViewDTO } from 'src/engine/metadata-modules/view/dtos/view.dto'; import { ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity'; -import { ViewVisibility } from 'src/engine/metadata-modules/view/enums/view-visibility.enum'; import { fromFlatViewToViewDto } from 'src/engine/metadata-modules/view/utils/from-flat-view-to-view-dto.util'; import { WorkspaceMigrationBuilderException } from 'src/engine/workspace-manager/workspace-migration/exceptions/workspace-migration-builder-exception'; import { WorkspaceMigrationValidateBuildAndRunService } from 'src/engine/workspace-manager/workspace-migration/services/workspace-migration-validate-build-and-run-service'; diff --git a/packages/twenty-server/src/engine/metadata-modules/view/tools/__tests__/view-tools.factory.spec.ts b/packages/twenty-server/src/engine/metadata-modules/view/tools/__tests__/view-tools.factory.spec.ts index 9d159bd630..2aaacbb606 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view/tools/__tests__/view-tools.factory.spec.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view/tools/__tests__/view-tools.factory.spec.ts @@ -1,10 +1,12 @@ import { Test, type TestingModule } from '@nestjs/testing'; -import { OrderByDirection } from 'twenty-shared/types'; +import { + OrderByDirection, + ViewType, + ViewVisibility, +} from 'twenty-shared/types'; import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; -import { ViewVisibility } from 'src/engine/metadata-modules/view/enums/view-visibility.enum'; import { ViewQueryParamsService } from 'src/engine/metadata-modules/view/services/view-query-params.service'; import { ViewService } from 'src/engine/metadata-modules/view/services/view.service'; import { ViewToolsFactory } from 'src/engine/metadata-modules/view/tools/view-tools.factory'; diff --git a/packages/twenty-server/src/engine/metadata-modules/view/tools/view-tools.factory.ts b/packages/twenty-server/src/engine/metadata-modules/view/tools/view-tools.factory.ts index 3134e1b9af..703e9f4b18 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view/tools/view-tools.factory.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view/tools/view-tools.factory.ts @@ -2,13 +2,15 @@ import { Injectable } from '@nestjs/common'; import { type ToolSet } from 'ai'; import { z } from 'zod'; +import { + AggregateOperations, + ViewType, + ViewVisibility, +} from 'twenty-shared/types'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { formatValidationErrors } from 'src/engine/core-modules/tool-provider/utils/format-validation-errors.util'; import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; import { buildObjectIdByNameMaps } from 'src/engine/metadata-modules/flat-object-metadata/utils/build-object-id-by-name-maps.util'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; -import { ViewVisibility } from 'src/engine/metadata-modules/view/enums/view-visibility.enum'; import { ViewQueryParamsService } from 'src/engine/metadata-modules/view/services/view-query-params.service'; import { ViewService } from 'src/engine/metadata-modules/view/services/view.service'; import { WorkspaceMigrationBuilderException } from 'src/engine/workspace-manager/workspace-migration/exceptions/workspace-migration-builder-exception'; diff --git a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/get-page-layout-widget-data-seeds-v2.util.ts b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/get-page-layout-widget-data-seeds-v2.util.ts index a85ef5a474..0cf2b9ba6c 100644 --- a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/get-page-layout-widget-data-seeds-v2.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/get-page-layout-widget-data-seeds-v2.util.ts @@ -1,9 +1,11 @@ import { CalendarStartDay } from 'twenty-shared/constants'; import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; -import { PageLayoutTabLayoutMode } from 'twenty-shared/types'; +import { + AggregateOperations, + PageLayoutTabLayoutMode, +} from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { type ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { AxisNameDisplay } from 'src/engine/metadata-modules/page-layout-widget/enums/axis-name-display.enum'; import { GraphOrderBy } from 'src/engine/metadata-modules/page-layout-widget/enums/graph-order-by.enum'; diff --git a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/get-page-layout-widget-data-seeds.util.ts b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/get-page-layout-widget-data-seeds.util.ts index 5958e5031e..39b7650fa1 100644 --- a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/get-page-layout-widget-data-seeds.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/get-page-layout-widget-data-seeds.util.ts @@ -1,9 +1,11 @@ import { CalendarStartDay } from 'twenty-shared/constants'; import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; -import { PageLayoutTabLayoutMode } from 'twenty-shared/types'; +import { + AggregateOperations, + PageLayoutTabLayoutMode, +} from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { type ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { AxisNameDisplay } from 'src/engine/metadata-modules/page-layout-widget/enums/axis-name-display.enum'; import { BarChartLayout } from 'src/engine/metadata-modules/page-layout-widget/enums/bar-chart-layout.enum'; diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-widget/compute-my-first-dashboard-widgets.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-widget/compute-my-first-dashboard-widgets.util.ts index a73e7a12b2..815855e15f 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-widget/compute-my-first-dashboard-widgets.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-widget/compute-my-first-dashboard-widgets.util.ts @@ -1,9 +1,11 @@ import { CalendarStartDay } from 'twenty-shared/constants'; import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; -import { PageLayoutTabLayoutMode } from 'twenty-shared/types'; +import { + AggregateOperations, + PageLayoutTabLayoutMode, +} from 'twenty-shared/types'; import { v4 } from 'uuid'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { type FlatPageLayoutWidget } from 'src/engine/metadata-modules/flat-page-layout-widget/types/flat-page-layout-widget.type'; import { AxisNameDisplay } from 'src/engine/metadata-modules/page-layout-widget/enums/axis-name-display.enum'; import { BarChartLayout } from 'src/engine/metadata-modules/page-layout-widget/enums/bar-chart-layout.enum'; diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view-field/compute-standard-company-view-fields.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view-field/compute-standard-company-view-fields.util.ts index 8b5b2902fe..d580c0b87e 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view-field/compute-standard-company-view-fields.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view-field/compute-standard-company-view-fields.util.ts @@ -1,4 +1,5 @@ -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; +import { AggregateOperations } from 'twenty-shared/types'; + import { type FlatViewField } from 'src/engine/metadata-modules/flat-view-field/types/flat-view-field.type'; import { createStandardViewFieldFlatMetadata, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view-field/compute-standard-opportunity-view-fields.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view-field/compute-standard-opportunity-view-fields.util.ts index f95ed00184..a205f30727 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view-field/compute-standard-opportunity-view-fields.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view-field/compute-standard-opportunity-view-fields.util.ts @@ -1,4 +1,5 @@ -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; +import { AggregateOperations } from 'twenty-shared/types'; + import { type FlatViewField } from 'src/engine/metadata-modules/flat-view-field/types/flat-view-field.type'; import { createStandardViewFieldFlatMetadata, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view-field/compute-standard-person-view-fields.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view-field/compute-standard-person-view-fields.util.ts index 212140d5aa..ed1a17bc5c 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view-field/compute-standard-person-view-fields.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view-field/compute-standard-person-view-fields.util.ts @@ -1,4 +1,5 @@ -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; +import { AggregateOperations } from 'twenty-shared/types'; + import { type FlatViewField } from 'src/engine/metadata-modules/flat-view-field/types/flat-view-field.type'; import { createStandardViewFieldFlatMetadata, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view-field/create-standard-view-field-flat-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view-field/create-standard-view-field-flat-metadata.util.ts index 0d25af6550..f005198b13 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view-field/create-standard-view-field-flat-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view-field/create-standard-view-field-flat-metadata.util.ts @@ -1,8 +1,8 @@ import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; import { isDefined } from 'twenty-shared/utils'; import { v4 } from 'uuid'; +import { type AggregateOperations } from 'twenty-shared/types'; -import { type AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { type FlatViewField } from 'src/engine/metadata-modules/flat-view-field/types/flat-view-field.type'; import { TWENTY_STANDARD_APPLICATION } from 'src/engine/workspace-manager/twenty-standard-application/constants/twenty-standard-applications'; import { type AllStandardObjectFieldName } from 'src/engine/workspace-manager/twenty-standard-application/types/all-standard-object-field-name.type'; diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/build-standard-flat-view-metadata-maps.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/build-standard-flat-view-metadata-maps.util.ts index 6287c232bc..992adfddab 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/build-standard-flat-view-metadata-maps.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/build-standard-flat-view-metadata-maps.util.ts @@ -1,8 +1,9 @@ +import { ViewType } from 'twenty-shared/types'; + import { createEmptyFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/constant/create-empty-flat-entity-maps.constant'; import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; import { type AllStandardObjectName } from 'src/engine/workspace-manager/twenty-standard-application/types/all-standard-object-name.type'; import { computeStandardAttachmentViews } from 'src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-attachment-views.util'; import { computeStandardCalendarEventViews } from 'src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-calendar-event-views.util'; diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-attachment-views.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-attachment-views.util.ts index 7ef8f86560..074eb9dc26 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-attachment-views.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-attachment-views.util.ts @@ -1,6 +1,7 @@ +import { ViewType } from 'twenty-shared/types'; + import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; import { ViewKey } from 'src/engine/metadata-modules/view/enums/view-key.enum'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; import { createStandardViewFlatMetadata, type CreateStandardViewArgs, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-calendar-event-views.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-calendar-event-views.util.ts index f7a17d6d80..1a4c492436 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-calendar-event-views.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-calendar-event-views.util.ts @@ -1,6 +1,7 @@ +import { ViewType } from 'twenty-shared/types'; + import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; import { ViewKey } from 'src/engine/metadata-modules/view/enums/view-key.enum'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; import { createStandardViewFlatMetadata, type CreateStandardViewArgs, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-company-views.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-company-views.util.ts index 2e6b4cd8c3..cb85c901fa 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-company-views.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-company-views.util.ts @@ -1,6 +1,7 @@ +import { ViewType } from 'twenty-shared/types'; + import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; import { ViewKey } from 'src/engine/metadata-modules/view/enums/view-key.enum'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; import { createStandardViewFlatMetadata, type CreateStandardViewArgs, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-dashboard-views.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-dashboard-views.util.ts index 533e96328c..f72e0cae7a 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-dashboard-views.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-dashboard-views.util.ts @@ -1,6 +1,7 @@ +import { ViewType } from 'twenty-shared/types'; + import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; import { ViewKey } from 'src/engine/metadata-modules/view/enums/view-key.enum'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; import { createStandardViewFlatMetadata, type CreateStandardViewArgs, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-message-thread-views.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-message-thread-views.util.ts index eecd97e2d6..1ad2f621a0 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-message-thread-views.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-message-thread-views.util.ts @@ -1,6 +1,7 @@ +import { ViewType } from 'twenty-shared/types'; + import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; import { ViewKey } from 'src/engine/metadata-modules/view/enums/view-key.enum'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; import { createStandardViewFlatMetadata, type CreateStandardViewArgs, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-message-views.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-message-views.util.ts index 826ebeef47..bd2570d0ef 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-message-views.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-message-views.util.ts @@ -1,6 +1,7 @@ +import { ViewType } from 'twenty-shared/types'; + import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; import { ViewKey } from 'src/engine/metadata-modules/view/enums/view-key.enum'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; import { createStandardViewFlatMetadata, type CreateStandardViewArgs, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-note-target-views.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-note-target-views.util.ts index 3f404d53f0..33e1b6b144 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-note-target-views.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-note-target-views.util.ts @@ -1,6 +1,7 @@ +import { ViewType } from 'twenty-shared/types'; + import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; import { ViewKey } from 'src/engine/metadata-modules/view/enums/view-key.enum'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; import { createStandardViewFlatMetadata, type CreateStandardViewArgs, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-note-views.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-note-views.util.ts index 3fab3e7b87..06ce8128fd 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-note-views.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-note-views.util.ts @@ -1,6 +1,7 @@ +import { ViewType } from 'twenty-shared/types'; + import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; import { ViewKey } from 'src/engine/metadata-modules/view/enums/view-key.enum'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; import { createStandardViewFlatMetadata, type CreateStandardViewArgs, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-opportunity-views.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-opportunity-views.util.ts index 75bf0d2f63..ed1fa1ceac 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-opportunity-views.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-opportunity-views.util.ts @@ -1,7 +1,7 @@ -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; +import { AggregateOperations, ViewType } from 'twenty-shared/types'; + import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; import { ViewKey } from 'src/engine/metadata-modules/view/enums/view-key.enum'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; import { createStandardViewFlatMetadata, type CreateStandardViewArgs, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-person-views.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-person-views.util.ts index 3e668b37f8..bfadc84451 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-person-views.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-person-views.util.ts @@ -1,6 +1,7 @@ +import { ViewType } from 'twenty-shared/types'; + import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; import { ViewKey } from 'src/engine/metadata-modules/view/enums/view-key.enum'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; import { createStandardViewFlatMetadata, type CreateStandardViewArgs, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-task-target-views.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-task-target-views.util.ts index 57ff0a45f7..58fcda981d 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-task-target-views.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-task-target-views.util.ts @@ -1,6 +1,7 @@ +import { ViewType } from 'twenty-shared/types'; + import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; import { ViewKey } from 'src/engine/metadata-modules/view/enums/view-key.enum'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; import { createStandardViewFlatMetadata, type CreateStandardViewArgs, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-task-views.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-task-views.util.ts index 8dd7210f1f..d1e98c8316 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-task-views.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-task-views.util.ts @@ -1,6 +1,7 @@ +import { ViewType } from 'twenty-shared/types'; + import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; import { ViewKey } from 'src/engine/metadata-modules/view/enums/view-key.enum'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; import { createStandardViewFlatMetadata, type CreateStandardViewArgs, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-timeline-activity-views.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-timeline-activity-views.util.ts index 51ab814926..2b30b7aebd 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-timeline-activity-views.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-timeline-activity-views.util.ts @@ -1,6 +1,7 @@ +import { ViewType } from 'twenty-shared/types'; + import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; import { ViewKey } from 'src/engine/metadata-modules/view/enums/view-key.enum'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; import { createStandardViewFlatMetadata, type CreateStandardViewArgs, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-workflow-run-views.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-workflow-run-views.util.ts index c43b572966..c19fbc531b 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-workflow-run-views.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-workflow-run-views.util.ts @@ -1,6 +1,7 @@ +import { ViewType } from 'twenty-shared/types'; + import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; import { ViewKey } from 'src/engine/metadata-modules/view/enums/view-key.enum'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; import { createStandardViewFlatMetadata, type CreateStandardViewArgs, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-workflow-version-views.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-workflow-version-views.util.ts index e7d4f96977..0aad476818 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-workflow-version-views.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-workflow-version-views.util.ts @@ -1,6 +1,7 @@ +import { ViewType } from 'twenty-shared/types'; + import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; import { ViewKey } from 'src/engine/metadata-modules/view/enums/view-key.enum'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; import { createStandardViewFlatMetadata, type CreateStandardViewArgs, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-workflow-views.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-workflow-views.util.ts index 1432a4f072..eb3613bbaf 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-workflow-views.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-workflow-views.util.ts @@ -1,6 +1,7 @@ +import { ViewType } from 'twenty-shared/types'; + import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; import { ViewKey } from 'src/engine/metadata-modules/view/enums/view-key.enum'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; import { createStandardViewFlatMetadata, type CreateStandardViewArgs, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-workspace-member-views.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-workspace-member-views.util.ts index 9a248b3da3..d85e2ce19a 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-workspace-member-views.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/compute-standard-workspace-member-views.util.ts @@ -1,6 +1,7 @@ +import { ViewType } from 'twenty-shared/types'; + import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; import { ViewKey } from 'src/engine/metadata-modules/view/enums/view-key.enum'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; import { createStandardViewFlatMetadata, type CreateStandardViewArgs, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/create-standard-view-flat-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/create-standard-view-flat-metadata.util.ts index d823889952..ed6b90489c 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/create-standard-view-flat-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/create-standard-view-flat-metadata.util.ts @@ -1,12 +1,14 @@ import { isDefined } from 'class-validator'; import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; +import { + type AggregateOperations, + type ViewType, + ViewOpenRecordIn, + ViewVisibility, +} from 'twenty-shared/types'; -import { type AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; import { type ViewKey } from 'src/engine/metadata-modules/view/enums/view-key.enum'; -import { ViewOpenRecordIn } from 'src/engine/metadata-modules/view/enums/view-open-record-in'; -import { type ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; -import { ViewVisibility } from 'src/engine/metadata-modules/view/enums/view-visibility.enum'; import { TWENTY_STANDARD_APPLICATION } from 'src/engine/workspace-manager/twenty-standard-application/constants/twenty-standard-applications'; import { type AllStandardObjectFieldName } from 'src/engine/workspace-manager/twenty-standard-application/types/all-standard-object-field-name.type'; import { type AllStandardObjectName } from 'src/engine/workspace-manager/twenty-standard-application/types/all-standard-object-name.type'; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-view-validator.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-view-validator.service.ts index a70e97d941..f375463036 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-view-validator.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-view-validator.service.ts @@ -1,10 +1,9 @@ import { msg, t } from '@lingui/core/macro'; import { type ALL_METADATA_NAME } from 'twenty-shared/metadata'; -import { FieldMetadataType } from 'twenty-shared/types'; +import { FieldMetadataType, ViewType } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; import { findFlatEntityByUniversalIdentifier } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-universal-identifier.util'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; import { type UniversalFlatView } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-view.type'; import { ViewExceptionCode } from 'src/engine/metadata-modules/view/exceptions/view.exception'; import { type FailedFlatEntityValidation } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/types/failed-flat-entity-validation.type'; diff --git a/packages/twenty-server/src/modules/dashboard/chart-data/services/__tests__/bar-chart-data.service.spec.ts b/packages/twenty-server/src/modules/dashboard/chart-data/services/__tests__/bar-chart-data.service.spec.ts index caeccfe392..cf31cbc119 100644 --- a/packages/twenty-server/src/modules/dashboard/chart-data/services/__tests__/bar-chart-data.service.spec.ts +++ b/packages/twenty-server/src/modules/dashboard/chart-data/services/__tests__/bar-chart-data.service.spec.ts @@ -1,8 +1,7 @@ import { Test, type TestingModule } from '@nestjs/testing'; -import { FieldMetadataType } from 'twenty-shared/types'; +import { AggregateOperations, FieldMetadataType } from 'twenty-shared/types'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type'; import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; import { BarChartGroupMode } from 'src/engine/metadata-modules/page-layout-widget/enums/bar-chart-group-mode.enum'; diff --git a/packages/twenty-server/src/modules/dashboard/chart-data/services/__tests__/line-chart-data.service.spec.ts b/packages/twenty-server/src/modules/dashboard/chart-data/services/__tests__/line-chart-data.service.spec.ts index 75d7f9486c..9c94d03f63 100644 --- a/packages/twenty-server/src/modules/dashboard/chart-data/services/__tests__/line-chart-data.service.spec.ts +++ b/packages/twenty-server/src/modules/dashboard/chart-data/services/__tests__/line-chart-data.service.spec.ts @@ -1,8 +1,7 @@ import { Test, type TestingModule } from '@nestjs/testing'; -import { FieldMetadataType } from 'twenty-shared/types'; +import { AggregateOperations, FieldMetadataType } from 'twenty-shared/types'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type'; import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; import { WidgetConfigurationType } from 'src/engine/metadata-modules/page-layout-widget/enums/widget-configuration-type.type'; diff --git a/packages/twenty-server/src/modules/dashboard/chart-data/services/__tests__/pie-chart-data.service.spec.ts b/packages/twenty-server/src/modules/dashboard/chart-data/services/__tests__/pie-chart-data.service.spec.ts index f2367e6e8d..e9205f370c 100644 --- a/packages/twenty-server/src/modules/dashboard/chart-data/services/__tests__/pie-chart-data.service.spec.ts +++ b/packages/twenty-server/src/modules/dashboard/chart-data/services/__tests__/pie-chart-data.service.spec.ts @@ -1,8 +1,7 @@ import { Test, type TestingModule } from '@nestjs/testing'; -import { FieldMetadataType } from 'twenty-shared/types'; +import { AggregateOperations, FieldMetadataType } from 'twenty-shared/types'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type'; import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; import { WidgetConfigurationType } from 'src/engine/metadata-modules/page-layout-widget/enums/widget-configuration-type.type'; diff --git a/packages/twenty-server/src/modules/dashboard/chart-data/services/chart-data-query.service.ts b/packages/twenty-server/src/modules/dashboard/chart-data/services/chart-data-query.service.ts index 54f44f5178..e8d2d65864 100644 --- a/packages/twenty-server/src/modules/dashboard/chart-data/services/chart-data-query.service.ts +++ b/packages/twenty-server/src/modules/dashboard/chart-data/services/chart-data-query.service.ts @@ -2,6 +2,7 @@ import { Injectable } from '@nestjs/common'; import { CalendarStartDay } from 'twenty-shared/constants'; import { + AggregateOperations, ObjectRecordGroupByDateGranularity, OrderByWithGroupBy, } from 'twenty-shared/types'; @@ -14,7 +15,6 @@ import { import { ObjectRecordGroupBy } from 'src/engine/api/graphql/workspace-query-builder/interfaces/object-record.interface'; import { CommonGroupByQueryRunnerService } from 'src/engine/api/common/common-query-runners/common-group-by-query-runner.service'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type'; import { FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; import { FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; diff --git a/packages/twenty-server/src/modules/dashboard/chart-data/utils/__tests__/get-group-by-order-by.util.spec.ts b/packages/twenty-server/src/modules/dashboard/chart-data/utils/__tests__/get-group-by-order-by.util.spec.ts index 21844e2b6b..90e829febf 100644 --- a/packages/twenty-server/src/modules/dashboard/chart-data/utils/__tests__/get-group-by-order-by.util.spec.ts +++ b/packages/twenty-server/src/modules/dashboard/chart-data/utils/__tests__/get-group-by-order-by.util.spec.ts @@ -1,10 +1,10 @@ import { + AggregateOperations, FieldMetadataType, ObjectRecordGroupByDateGranularity, OrderByDirection, } from 'twenty-shared/types'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { GraphOrderBy } from 'src/engine/metadata-modules/page-layout-widget/enums/graph-order-by.enum'; import { getGroupByOrderBy } from 'src/modules/dashboard/chart-data/utils/get-group-by-order-by.util'; diff --git a/packages/twenty-server/src/modules/dashboard/chart-data/utils/build-aggregate-field-key.util.ts b/packages/twenty-server/src/modules/dashboard/chart-data/utils/build-aggregate-field-key.util.ts index fee365119e..5d6328a5c2 100644 --- a/packages/twenty-server/src/modules/dashboard/chart-data/utils/build-aggregate-field-key.util.ts +++ b/packages/twenty-server/src/modules/dashboard/chart-data/utils/build-aggregate-field-key.util.ts @@ -1,7 +1,6 @@ -import { FieldMetadataType } from 'twenty-shared/types'; +import { AggregateOperations, FieldMetadataType } from 'twenty-shared/types'; import { capitalize } from 'twenty-shared/utils'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; type BuildAggregateFieldKeyParams = { diff --git a/packages/twenty-server/src/modules/dashboard/chart-data/utils/get-aggregate-operation-label.util.ts b/packages/twenty-server/src/modules/dashboard/chart-data/utils/get-aggregate-operation-label.util.ts index d976289f7f..31d628f718 100644 --- a/packages/twenty-server/src/modules/dashboard/chart-data/utils/get-aggregate-operation-label.util.ts +++ b/packages/twenty-server/src/modules/dashboard/chart-data/utils/get-aggregate-operation-label.util.ts @@ -1,4 +1,4 @@ -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; +import { AggregateOperations } from 'twenty-shared/types'; export const getAggregateOperationLabel = ( operation: AggregateOperations, diff --git a/packages/twenty-server/src/modules/dashboard/chart-data/utils/get-group-by-order-by.util.ts b/packages/twenty-server/src/modules/dashboard/chart-data/utils/get-group-by-order-by.util.ts index eee8faa92d..f8e7a8cbde 100644 --- a/packages/twenty-server/src/modules/dashboard/chart-data/utils/get-group-by-order-by.util.ts +++ b/packages/twenty-server/src/modules/dashboard/chart-data/utils/get-group-by-order-by.util.ts @@ -1,4 +1,5 @@ import { + type AggregateOperations, type AggregateOrderByWithGroupByField, type ObjectRecordGroupByDateGranularity, type ObjectRecordOrderByForCompositeField, @@ -8,7 +9,6 @@ import { } from 'twenty-shared/types'; import { assertUnreachable, isDefined } from 'twenty-shared/utils'; -import { type AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { GraphOrderBy } from 'src/engine/metadata-modules/page-layout-widget/enums/graph-order-by.enum'; import { buildAggregateFieldKey } from 'src/modules/dashboard/chart-data/utils/build-aggregate-field-key.util'; diff --git a/packages/twenty-server/src/modules/dashboard/chart-data/utils/transform-aggregate-value.util.ts b/packages/twenty-server/src/modules/dashboard/chart-data/utils/transform-aggregate-value.util.ts index 8275271628..105f5f8944 100644 --- a/packages/twenty-server/src/modules/dashboard/chart-data/utils/transform-aggregate-value.util.ts +++ b/packages/twenty-server/src/modules/dashboard/chart-data/utils/transform-aggregate-value.util.ts @@ -1,8 +1,6 @@ -import { FieldMetadataType } from 'twenty-shared/types'; +import { AggregateOperations, FieldMetadataType } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; - const PERCENT_AGGREGATE_OPERATIONS = new Set([ AggregateOperations.PERCENTAGE_EMPTY, AggregateOperations.PERCENTAGE_NOT_EMPTY, diff --git a/packages/twenty-server/src/modules/dashboard/tools/schemas/widget.schema.ts b/packages/twenty-server/src/modules/dashboard/tools/schemas/widget.schema.ts index 4717bd8f0f..bc304e3417 100644 --- a/packages/twenty-server/src/modules/dashboard/tools/schemas/widget.schema.ts +++ b/packages/twenty-server/src/modules/dashboard/tools/schemas/widget.schema.ts @@ -1,8 +1,10 @@ import { isNumber } from '@sniptt/guards'; -import { ObjectRecordGroupByDateGranularity } from 'twenty-shared/types'; +import { + AggregateOperations, + ObjectRecordGroupByDateGranularity, +} from 'twenty-shared/types'; import { z } from 'zod'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { AxisNameDisplay } from 'src/engine/metadata-modules/page-layout-widget/enums/axis-name-display.enum'; import { BarChartGroupMode } from 'src/engine/metadata-modules/page-layout-widget/enums/bar-chart-group-mode.enum'; import { BarChartLayout } from 'src/engine/metadata-modules/page-layout-widget/enums/bar-chart-layout.enum'; diff --git a/packages/twenty-server/test/integration/constants/widget-configuration-test-data.constants.ts b/packages/twenty-server/test/integration/constants/widget-configuration-test-data.constants.ts index ea23e77598..1e81a77f26 100644 --- a/packages/twenty-server/test/integration/constants/widget-configuration-test-data.constants.ts +++ b/packages/twenty-server/test/integration/constants/widget-configuration-test-data.constants.ts @@ -1,4 +1,5 @@ -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; +import { AggregateOperations } from 'twenty-shared/types'; + import { type AggregateChartConfigurationDTO } from 'src/engine/metadata-modules/page-layout-widget/dtos/aggregate-chart-configuration.dto'; import { type BarChartConfigurationDTO } from 'src/engine/metadata-modules/page-layout-widget/dtos/bar-chart-configuration.dto'; import { type GaugeChartConfigurationDTO } from 'src/engine/metadata-modules/page-layout-widget/dtos/gauge-chart-configuration.dto'; diff --git a/packages/twenty-server/test/integration/graphql/suites/group-by-resolver.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/group-by-resolver.integration-spec.ts index 4fa2dea5a3..9599a84c47 100644 --- a/packages/twenty-server/test/integration/graphql/suites/group-by-resolver.integration-spec.ts +++ b/packages/twenty-server/test/integration/graphql/suites/group-by-resolver.integration-spec.ts @@ -27,6 +27,7 @@ import { FieldMetadataType, OrderByDirection, RelationType, + ViewFilterGroupLogicalOperator, ViewFilterOperand, } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; @@ -35,7 +36,6 @@ import { ErrorCode } from 'src/engine/core-modules/graphql/utils/graphql-errors. import { type FieldMetadataDTO } from 'src/engine/metadata-modules/field-metadata/dtos/field-metadata.dto'; import { type ObjectMetadataDTO } from 'src/engine/metadata-modules/object-metadata/dtos/object-metadata.dto'; import { PermissionsExceptionMessage } from 'src/engine/metadata-modules/permissions/permissions.exception'; -import { ViewFilterGroupLogicalOperator } from 'src/engine/metadata-modules/view-filter-group/enums/view-filter-group-logical-operator'; import { WORKSPACE_MEMBER_DATA_SEED_IDS } from 'src/engine/workspace-manager/dev-seeder/data/constants/workspace-member-data-seeds.constant'; const client = request(`http://localhost:${APP_PORT}`); diff --git a/packages/twenty-server/test/integration/graphql/suites/view/create-view.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/view/create-view.integration-spec.ts index 43ffbd9f83..1bf39cd241 100644 --- a/packages/twenty-server/test/integration/graphql/suites/view/create-view.integration-spec.ts +++ b/packages/twenty-server/test/integration/graphql/suites/view/create-view.integration-spec.ts @@ -4,9 +4,7 @@ import { deleteOneObjectMetadata } from 'test/integration/metadata/suites/object import { updateOneObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/update-one-object-metadata.util'; import { createOneCoreView } from 'test/integration/metadata/suites/view/utils/create-one-core-view.util'; import { assertViewStructure } from 'test/integration/utils/view-test.util'; - -import { ViewOpenRecordIn } from 'src/engine/metadata-modules/view/enums/view-open-record-in'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; +import { ViewOpenRecordIn, ViewType } from 'twenty-shared/types'; describe('Create core view', () => { let testObjectMetadataId: string; diff --git a/packages/twenty-server/test/integration/graphql/suites/view/update-view.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/view/update-view.integration-spec.ts index af235ba819..be592def47 100644 --- a/packages/twenty-server/test/integration/graphql/suites/view/update-view.integration-spec.ts +++ b/packages/twenty-server/test/integration/graphql/suites/view/update-view.integration-spec.ts @@ -5,8 +5,7 @@ import { deleteOneObjectMetadata } from 'test/integration/metadata/suites/object import { updateOneObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/update-one-object-metadata.util'; import { createOneCoreView } from 'test/integration/metadata/suites/view/utils/create-one-core-view.util'; import { updateOneCoreView } from 'test/integration/metadata/suites/view/utils/update-one-core-view.util'; - -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; +import { ViewType } from 'twenty-shared/types'; const TEST_NOT_EXISTING_VIEW_ID = '20202020-0000-4000-8000-000000000000'; diff --git a/packages/twenty-server/test/integration/graphql/suites/view/view-filter-group-resolver.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/view/view-filter-group-resolver.integration-spec.ts index 309d740977..b7ca82c83d 100644 --- a/packages/twenty-server/test/integration/graphql/suites/view/view-filter-group-resolver.integration-spec.ts +++ b/packages/twenty-server/test/integration/graphql/suites/view/view-filter-group-resolver.integration-spec.ts @@ -20,10 +20,10 @@ import { updateOneObjectMetadata } from 'test/integration/metadata/suites/object import { destroyOneCoreView } from 'test/integration/metadata/suites/view/utils/destroy-one-core-view.util'; import { assertViewFilterGroupStructure } from 'test/integration/utils/view-test.util'; import { jestExpectToBeDefined } from 'test/utils/jest-expect-to-be-defined.util.test'; +import { ViewFilterGroupLogicalOperator } from 'twenty-shared/types'; import { ErrorCode } from 'src/engine/core-modules/graphql/utils/graphql-errors.util'; import { type ViewFilterGroupDTO } from 'src/engine/metadata-modules/view-filter-group/dtos/view-filter-group.dto'; -import { ViewFilterGroupLogicalOperator } from 'src/engine/metadata-modules/view-filter-group/enums/view-filter-group-logical-operator'; import { generateViewFilterGroupExceptionMessage, ViewFilterGroupExceptionMessageKey, diff --git a/packages/twenty-server/test/integration/graphql/utils/view-data-factory.util.ts b/packages/twenty-server/test/integration/graphql/utils/view-data-factory.util.ts index a86d7b512e..2f49276ca2 100644 --- a/packages/twenty-server/test/integration/graphql/utils/view-data-factory.util.ts +++ b/packages/twenty-server/test/integration/graphql/utils/view-data-factory.util.ts @@ -1,11 +1,14 @@ +import { + ViewFilterGroupLogicalOperator, + ViewOpenRecordIn, + ViewType, + ViewVisibility, +} from 'twenty-shared/types'; + import { type ViewFilterGroupEntity } from 'src/engine/metadata-modules/view-filter-group/entities/view-filter-group.entity'; -import { ViewFilterGroupLogicalOperator } from 'src/engine/metadata-modules/view-filter-group/enums/view-filter-group-logical-operator'; import { type ViewSortEntity } from 'src/engine/metadata-modules/view-sort/entities/view-sort.entity'; import { ViewSortDirection } from 'src/engine/metadata-modules/view-sort/enums/view-sort-direction'; import { type ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity'; -import { ViewOpenRecordIn } from 'src/engine/metadata-modules/view/enums/view-open-record-in'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; -import { ViewVisibility } from 'src/engine/metadata-modules/view/enums/view-visibility.enum'; export const createViewData = (overrides: Partial = {}) => ({ name: 'Test View', diff --git a/packages/twenty-server/test/integration/metadata/suites/application/successful-sync-application-workspace-migration.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/application/successful-sync-application-workspace-migration.integration-spec.ts index 9a40691d7b..b5daa8db08 100644 --- a/packages/twenty-server/test/integration/metadata/suites/application/successful-sync-application-workspace-migration.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/application/successful-sync-application-workspace-migration.integration-spec.ts @@ -105,6 +105,8 @@ describe('syncApplication', () => { logicFunctions: [], frontComponents: [], publicAssets: [], + views: [], + navigationMenuItems: [], }; const { data: firstSyncData } = await syncApplication({ diff --git a/packages/twenty-server/test/integration/metadata/suites/field-metadata/calendar-field-deactivation-deletes-views.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/field-metadata/calendar-field-deactivation-deletes-views.integration-spec.ts index b99bf2b8b5..dd1b61796c 100644 --- a/packages/twenty-server/test/integration/metadata/suites/field-metadata/calendar-field-deactivation-deletes-views.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/field-metadata/calendar-field-deactivation-deletes-views.integration-spec.ts @@ -7,11 +7,10 @@ import { updateOneObjectMetadata } from 'test/integration/metadata/suites/object import { createOneCoreView } from 'test/integration/metadata/suites/view/utils/create-one-core-view.util'; import { findOneCoreView } from 'test/integration/metadata/suites/view/utils/find-one-core-view.util'; import { generateRecordName } from 'test/integration/utils/generate-record-name'; -import { FieldMetadataType } from 'twenty-shared/types'; +import { FieldMetadataType, ViewType } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; import { ViewCalendarLayout } from 'src/engine/metadata-modules/view/enums/view-calendar-layout.enum'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; const VIEW_WITH_CALENDAR_FIELDS = ` id diff --git a/packages/twenty-server/test/integration/metadata/suites/field-metadata/field-group-by-deactivation-deletes-views.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/field-metadata/field-group-by-deactivation-deletes-views.integration-spec.ts index 4fd0e8486d..002b5db47c 100644 --- a/packages/twenty-server/test/integration/metadata/suites/field-metadata/field-group-by-deactivation-deletes-views.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/field-metadata/field-group-by-deactivation-deletes-views.integration-spec.ts @@ -6,11 +6,9 @@ import { updateOneObjectMetadata } from 'test/integration/metadata/suites/object import { createOneCoreView } from 'test/integration/metadata/suites/view/utils/create-one-core-view.util'; import { findOneCoreView } from 'test/integration/metadata/suites/view/utils/find-one-core-view.util'; import { generateRecordName } from 'test/integration/utils/generate-record-name'; -import { FieldMetadataType } from 'twenty-shared/types'; +import { FieldMetadataType, ViewType } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; - const VIEW_FIELDS = ` id name diff --git a/packages/twenty-server/test/integration/metadata/suites/field-metadata/kanban-aggregate-field-deactivation-nullifies-views-kanban-properties.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/field-metadata/kanban-aggregate-field-deactivation-nullifies-views-kanban-properties.integration-spec.ts index 6f59907bcf..58caa0988b 100644 --- a/packages/twenty-server/test/integration/metadata/suites/field-metadata/kanban-aggregate-field-deactivation-nullifies-views-kanban-properties.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/field-metadata/kanban-aggregate-field-deactivation-nullifies-views-kanban-properties.integration-spec.ts @@ -7,12 +7,13 @@ import { updateOneObjectMetadata } from 'test/integration/metadata/suites/object import { createOneCoreView } from 'test/integration/metadata/suites/view/utils/create-one-core-view.util'; import { findOneCoreView } from 'test/integration/metadata/suites/view/utils/find-one-core-view.util'; import { generateRecordName } from 'test/integration/utils/generate-record-name'; -import { FieldMetadataType } from 'twenty-shared/types'; +import { + AggregateOperations, + FieldMetadataType, + ViewType, +} from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; - const VIEW_WITH_KANBAN_FIELDS = ` id name diff --git a/packages/twenty-server/test/integration/metadata/suites/field-metadata/update-one-field-metadata-view-filters-side-effect-v2.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/field-metadata/update-one-field-metadata-view-filters-side-effect-v2.integration-spec.ts index b0dc225434..83758e487d 100644 --- a/packages/twenty-server/test/integration/metadata/suites/field-metadata/update-one-field-metadata-view-filters-side-effect-v2.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/field-metadata/update-one-field-metadata-view-filters-side-effect-v2.integration-spec.ts @@ -14,8 +14,9 @@ import { } from 'twenty-shared/testing'; import { FieldMetadataType, - ViewFilterOperand, type EnumFieldMetadataType, + ViewFilterOperand, + ViewType, } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; @@ -24,7 +25,6 @@ import { type FieldMetadataDefaultOption, } from 'src/engine/metadata-modules/field-metadata/dtos/options.input'; import { type ViewFilterValue } from 'src/engine/metadata-modules/view-filter/types/view-filter-value.type'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; type Option = FieldMetadataDefaultOption | FieldMetadataComplexOption; diff --git a/packages/twenty-server/test/integration/metadata/suites/field-metadata/update-one-field-metadata-view-groups-side-effect-v2.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/field-metadata/update-one-field-metadata-view-groups-side-effect-v2.integration-spec.ts index d6e886d191..03dd1cc552 100644 --- a/packages/twenty-server/test/integration/metadata/suites/field-metadata/update-one-field-metadata-view-groups-side-effect-v2.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/field-metadata/update-one-field-metadata-view-groups-side-effect-v2.integration-spec.ts @@ -7,13 +7,12 @@ import { getMockCreateObjectInput } from 'test/integration/metadata/suites/objec import { updateOneObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/update-one-object-metadata.util'; import { findCoreViewGroups } from 'test/integration/metadata/suites/view-group/utils/find-core-view-groups.util'; import { createOneCoreView } from 'test/integration/metadata/suites/view/utils/create-one-core-view.util'; -import { FieldMetadataType } from 'twenty-shared/types'; +import { FieldMetadataType, ViewType } from 'twenty-shared/types'; import { type FieldMetadataComplexOption, type FieldMetadataDefaultOption, } from 'src/engine/metadata-modules/field-metadata/dtos/options.input'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; type Option = FieldMetadataDefaultOption | FieldMetadataComplexOption; diff --git a/packages/twenty-server/test/integration/metadata/suites/page-layout-widget/successful-page-layout-widget-creation.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/page-layout-widget/successful-page-layout-widget-creation.integration-spec.ts index 3642c41ca8..852897fcf7 100644 --- a/packages/twenty-server/test/integration/metadata/suites/page-layout-widget/successful-page-layout-widget-creation.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/page-layout-widget/successful-page-layout-widget-creation.integration-spec.ts @@ -15,8 +15,8 @@ import { type EachTestingContext, eachTestingContextFilter, } from 'twenty-shared/testing'; +import { AggregateOperations } from 'twenty-shared/types'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { AxisNameDisplay } from 'src/engine/metadata-modules/page-layout-widget/enums/axis-name-display.enum'; import { BarChartLayout } from 'src/engine/metadata-modules/page-layout-widget/enums/bar-chart-layout.enum'; import { GraphOrderBy } from 'src/engine/metadata-modules/page-layout-widget/enums/graph-order-by.enum'; diff --git a/packages/twenty-server/test/integration/metadata/suites/page-layout-widget/successful-page-layout-widget-update.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/page-layout-widget/successful-page-layout-widget-update.integration-spec.ts index fef0e89465..7336f264b8 100644 --- a/packages/twenty-server/test/integration/metadata/suites/page-layout-widget/successful-page-layout-widget-update.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/page-layout-widget/successful-page-layout-widget-update.integration-spec.ts @@ -16,8 +16,8 @@ import { type EachTestingContext, eachTestingContextFilter, } from 'twenty-shared/testing'; +import { AggregateOperations } from 'twenty-shared/types'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { AxisNameDisplay } from 'src/engine/metadata-modules/page-layout-widget/enums/axis-name-display.enum'; import { BarChartLayout } from 'src/engine/metadata-modules/page-layout-widget/enums/bar-chart-layout.enum'; import { GraphOrderBy } from 'src/engine/metadata-modules/page-layout-widget/enums/graph-order-by.enum'; diff --git a/packages/twenty-server/test/integration/metadata/suites/page-layout/successful-page-layout-with-tabs-creation-via-update.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/page-layout/successful-page-layout-with-tabs-creation-via-update.integration-spec.ts index 7c3c4166b7..172b14dccb 100644 --- a/packages/twenty-server/test/integration/metadata/suites/page-layout/successful-page-layout-with-tabs-creation-via-update.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/page-layout/successful-page-layout-with-tabs-creation-via-update.integration-spec.ts @@ -5,9 +5,9 @@ import { createOnePageLayout } from 'test/integration/metadata/suites/page-layou import { destroyOnePageLayout } from 'test/integration/metadata/suites/page-layout/utils/destroy-one-page-layout.util'; import { updateOnePageLayoutWithTabsAndWidgets } from 'test/integration/metadata/suites/page-layout/utils/update-one-page-layout-with-tabs-and-widgets.util'; import { extractRecordIdsAndDatesAsExpectAny } from 'test/utils/extract-record-ids-and-dates-as-expect-any'; +import { AggregateOperations } from 'twenty-shared/types'; import { v4 } from 'uuid'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { WidgetConfigurationType } from 'src/engine/metadata-modules/page-layout-widget/enums/widget-configuration-type.type'; import { WidgetType } from 'src/engine/metadata-modules/page-layout-widget/enums/widget-type.enum'; import { PageLayoutType } from 'src/engine/metadata-modules/page-layout/enums/page-layout-type.enum'; diff --git a/packages/twenty-server/test/integration/metadata/suites/page-layout/successful-page-layout-with-tabs-update.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/page-layout/successful-page-layout-with-tabs-update.integration-spec.ts index 08565f57ee..7a7ce6d1b6 100644 --- a/packages/twenty-server/test/integration/metadata/suites/page-layout/successful-page-layout-with-tabs-update.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/page-layout/successful-page-layout-with-tabs-update.integration-spec.ts @@ -9,9 +9,9 @@ import { type EachTestingContext, eachTestingContextFilter, } from 'twenty-shared/testing'; +import { AggregateOperations } from 'twenty-shared/types'; import { v4 } from 'uuid'; -import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { WidgetConfigurationType } from 'src/engine/metadata-modules/page-layout-widget/enums/widget-configuration-type.type'; import { WidgetType } from 'src/engine/metadata-modules/page-layout-widget/enums/widget-type.enum'; import { type AllPageLayoutWidgetConfiguration } from 'src/engine/metadata-modules/page-layout-widget/types/all-page-layout-widget-configuration.type'; diff --git a/packages/twenty-server/test/integration/metadata/suites/view-filter-group/failing-view-filter-group-creation-circular-dependency.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/view-filter-group/failing-view-filter-group-creation-circular-dependency.integration-spec.ts index 9c3f72297e..a9dbc0b510 100644 --- a/packages/twenty-server/test/integration/metadata/suites/view-filter-group/failing-view-filter-group-creation-circular-dependency.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/view-filter-group/failing-view-filter-group-creation-circular-dependency.integration-spec.ts @@ -5,11 +5,9 @@ import { destroyOneCoreViewFilterGroup } from 'test/integration/metadata/suites/ import { createOneCoreView } from 'test/integration/metadata/suites/view/utils/create-one-core-view.util'; import { destroyOneCoreView } from 'test/integration/metadata/suites/view/utils/destroy-one-core-view.util'; import { jestExpectToBeDefined } from 'test/utils/jest-expect-to-be-defined.util.test'; +import { ViewFilterGroupLogicalOperator, ViewType } from 'twenty-shared/types'; import { v4 } from 'uuid'; -import { ViewFilterGroupLogicalOperator } from 'src/engine/metadata-modules/view-filter-group/enums/view-filter-group-logical-operator'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; - describe('View Filter Group creation should fail with circular dependency', () => { let createdViewId: string; let parentViewFilterGroupId: string; diff --git a/packages/twenty-server/test/integration/metadata/suites/view-filter-group/failing-view-filter-group-creation.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/view-filter-group/failing-view-filter-group-creation.integration-spec.ts index 460285b2b3..481f511903 100644 --- a/packages/twenty-server/test/integration/metadata/suites/view-filter-group/failing-view-filter-group-creation.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/view-filter-group/failing-view-filter-group-creation.integration-spec.ts @@ -8,10 +8,10 @@ import { eachTestingContextFilter, type EachTestingContext, } from 'twenty-shared/testing'; +import { ViewType } from 'twenty-shared/types'; import { v4 } from 'uuid'; import { type CreateViewFilterGroupInput } from 'src/engine/metadata-modules/view-filter-group/dtos/inputs/create-view-filter-group.input'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; type TestSetup = { createdViewId: string; diff --git a/packages/twenty-server/test/integration/metadata/suites/view-filter-group/failing-view-filter-group-update-circular-dependency.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/view-filter-group/failing-view-filter-group-update-circular-dependency.integration-spec.ts index 92c49e65c1..2af6e21d29 100644 --- a/packages/twenty-server/test/integration/metadata/suites/view-filter-group/failing-view-filter-group-update-circular-dependency.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/view-filter-group/failing-view-filter-group-update-circular-dependency.integration-spec.ts @@ -6,9 +6,7 @@ import { updateOneCoreViewFilterGroup } from 'test/integration/metadata/suites/v import { createOneCoreView } from 'test/integration/metadata/suites/view/utils/create-one-core-view.util'; import { destroyOneCoreView } from 'test/integration/metadata/suites/view/utils/destroy-one-core-view.util'; import { jestExpectToBeDefined } from 'test/utils/jest-expect-to-be-defined.util.test'; - -import { ViewFilterGroupLogicalOperator } from 'src/engine/metadata-modules/view-filter-group/enums/view-filter-group-logical-operator'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; +import { ViewFilterGroupLogicalOperator, ViewType } from 'twenty-shared/types'; describe('View Filter Group update should fail with circular dependency', () => { let createdViewId: string; diff --git a/packages/twenty-server/test/integration/metadata/suites/view-filter-group/failing-view-filter-group-update.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/view-filter-group/failing-view-filter-group-update.integration-spec.ts index 2837614ce6..5cf33f90c9 100644 --- a/packages/twenty-server/test/integration/metadata/suites/view-filter-group/failing-view-filter-group-update.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/view-filter-group/failing-view-filter-group-update.integration-spec.ts @@ -11,10 +11,9 @@ import { type EachTestingContext, } from 'twenty-shared/testing'; import { v4 } from 'uuid'; +import { ViewFilterGroupLogicalOperator, ViewType } from 'twenty-shared/types'; import { type UpdateViewFilterGroupInput } from 'src/engine/metadata-modules/view-filter-group/dtos/inputs/update-view-filter-group.input'; -import { ViewFilterGroupLogicalOperator } from 'src/engine/metadata-modules/view-filter-group/enums/view-filter-group-logical-operator'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; type TestContext = { id: string; diff --git a/packages/twenty-server/test/integration/metadata/suites/view-filter-group/successful-view-filter-group-creation.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/view-filter-group/successful-view-filter-group-creation.integration-spec.ts index 81e5492115..116cd45255 100644 --- a/packages/twenty-server/test/integration/metadata/suites/view-filter-group/successful-view-filter-group-creation.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/view-filter-group/successful-view-filter-group-creation.integration-spec.ts @@ -4,9 +4,7 @@ import { destroyOneCoreViewFilterGroup } from 'test/integration/metadata/suites/ import { createOneCoreView } from 'test/integration/metadata/suites/view/utils/create-one-core-view.util'; import { destroyOneCoreView } from 'test/integration/metadata/suites/view/utils/destroy-one-core-view.util'; import { jestExpectToBeDefined } from 'test/utils/jest-expect-to-be-defined.util.test'; - -import { ViewFilterGroupLogicalOperator } from 'src/engine/metadata-modules/view-filter-group/enums/view-filter-group-logical-operator'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; +import { ViewFilterGroupLogicalOperator, ViewType } from 'twenty-shared/types'; describe('View Filter Group creation should succeed', () => { let companyObjectMetadataId: string; diff --git a/packages/twenty-server/test/integration/metadata/suites/view-filter-group/successful-view-filter-group-deletion.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/view-filter-group/successful-view-filter-group-deletion.integration-spec.ts index fae89f4cb3..a270b44794 100644 --- a/packages/twenty-server/test/integration/metadata/suites/view-filter-group/successful-view-filter-group-deletion.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/view-filter-group/successful-view-filter-group-deletion.integration-spec.ts @@ -5,9 +5,7 @@ import { destroyOneCoreViewFilterGroup } from 'test/integration/metadata/suites/ import { createOneCoreView } from 'test/integration/metadata/suites/view/utils/create-one-core-view.util'; import { destroyOneCoreView } from 'test/integration/metadata/suites/view/utils/destroy-one-core-view.util'; import { jestExpectToBeDefined } from 'test/utils/jest-expect-to-be-defined.util.test'; - -import { ViewFilterGroupLogicalOperator } from 'src/engine/metadata-modules/view-filter-group/enums/view-filter-group-logical-operator'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; +import { ViewFilterGroupLogicalOperator, ViewType } from 'twenty-shared/types'; describe('View Filter Group deletion should succeed', () => { let createdViewId: string; diff --git a/packages/twenty-server/test/integration/metadata/suites/view-filter-group/successful-view-filter-group-destroy.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/view-filter-group/successful-view-filter-group-destroy.integration-spec.ts index b3d5c44188..9aa60241a3 100644 --- a/packages/twenty-server/test/integration/metadata/suites/view-filter-group/successful-view-filter-group-destroy.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/view-filter-group/successful-view-filter-group-destroy.integration-spec.ts @@ -4,9 +4,7 @@ import { destroyOneCoreViewFilterGroup } from 'test/integration/metadata/suites/ import { createOneCoreView } from 'test/integration/metadata/suites/view/utils/create-one-core-view.util'; import { destroyOneCoreView } from 'test/integration/metadata/suites/view/utils/destroy-one-core-view.util'; import { jestExpectToBeDefined } from 'test/utils/jest-expect-to-be-defined.util.test'; - -import { ViewFilterGroupLogicalOperator } from 'src/engine/metadata-modules/view-filter-group/enums/view-filter-group-logical-operator'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; +import { ViewFilterGroupLogicalOperator, ViewType } from 'twenty-shared/types'; describe('View Filter Group destroy should succeed', () => { let createdViewId: string; diff --git a/packages/twenty-server/test/integration/metadata/suites/view-filter-group/successful-view-filter-group-update.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/view-filter-group/successful-view-filter-group-update.integration-spec.ts index 0aecc39fd6..b269d81347 100644 --- a/packages/twenty-server/test/integration/metadata/suites/view-filter-group/successful-view-filter-group-update.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/view-filter-group/successful-view-filter-group-update.integration-spec.ts @@ -5,9 +5,7 @@ import { updateOneCoreViewFilterGroup } from 'test/integration/metadata/suites/v import { createOneCoreView } from 'test/integration/metadata/suites/view/utils/create-one-core-view.util'; import { destroyOneCoreView } from 'test/integration/metadata/suites/view/utils/destroy-one-core-view.util'; import { jestExpectToBeDefined } from 'test/utils/jest-expect-to-be-defined.util.test'; - -import { ViewFilterGroupLogicalOperator } from 'src/engine/metadata-modules/view-filter-group/enums/view-filter-group-logical-operator'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; +import { ViewFilterGroupLogicalOperator, ViewType } from 'twenty-shared/types'; describe('View Filter Group update should succeed', () => { let companyObjectMetadataId: string; diff --git a/packages/twenty-server/test/integration/metadata/suites/view-filter/failing-view-filter-creation.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/view-filter/failing-view-filter-creation.integration-spec.ts index 4a6ba4a64f..22902fb9a4 100644 --- a/packages/twenty-server/test/integration/metadata/suites/view-filter/failing-view-filter-creation.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/view-filter/failing-view-filter-creation.integration-spec.ts @@ -8,11 +8,10 @@ import { eachTestingContextFilter, type EachTestingContext, } from 'twenty-shared/testing'; -import { ViewFilterOperand } from 'twenty-shared/types'; +import { ViewFilterOperand, ViewType } from 'twenty-shared/types'; import { v4 } from 'uuid'; import { type CreateViewFilterInput } from 'src/engine/metadata-modules/view-filter/dtos/inputs/create-view-filter.input'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; type TestSetup = { createdViewId: string; diff --git a/packages/twenty-server/test/integration/metadata/suites/view/update-one-view-view-groups-side-effect-v2.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/view/update-one-view-view-groups-side-effect-v2.integration-spec.ts index ba1202b0e9..bfe769364b 100644 --- a/packages/twenty-server/test/integration/metadata/suites/view/update-one-view-view-groups-side-effect-v2.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/view/update-one-view-view-groups-side-effect-v2.integration-spec.ts @@ -10,13 +10,13 @@ import { updateOneCoreView } from 'test/integration/metadata/suites/view/utils/u import { FieldMetadataType, type EnumFieldMetadataType, + ViewType, } from 'twenty-shared/types'; import { type FieldMetadataComplexOption, type FieldMetadataDefaultOption, } from 'src/engine/metadata-modules/field-metadata/dtos/options.input'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; type Option = FieldMetadataDefaultOption | FieldMetadataComplexOption; diff --git a/packages/twenty-server/test/integration/rest/suites/view-filter-group.integration-spec.ts b/packages/twenty-server/test/integration/rest/suites/view-filter-group.integration-spec.ts index 3dd4b1bea5..e767bc92ab 100644 --- a/packages/twenty-server/test/integration/rest/suites/view-filter-group.integration-spec.ts +++ b/packages/twenty-server/test/integration/rest/suites/view-filter-group.integration-spec.ts @@ -15,10 +15,12 @@ import { } from 'test/integration/rest/utils/view-rest-api.util'; import { assertViewFilterGroupStructure } from 'test/integration/utils/view-test.util'; import { jestExpectToBeDefined } from 'test/utils/jest-expect-to-be-defined.util.test'; -import { FieldMetadataType } from 'twenty-shared/types'; +import { + FieldMetadataType, + ViewFilterGroupLogicalOperator, +} from 'twenty-shared/types'; import { type ViewFilterGroupDTO } from 'src/engine/metadata-modules/view-filter-group/dtos/view-filter-group.dto'; -import { ViewFilterGroupLogicalOperator } from 'src/engine/metadata-modules/view-filter-group/enums/view-filter-group-logical-operator'; import { generateViewFilterGroupExceptionMessage, ViewFilterGroupExceptionMessageKey, diff --git a/packages/twenty-server/test/integration/rest/suites/view.integration-spec.ts b/packages/twenty-server/test/integration/rest/suites/view.integration-spec.ts index 68486edb98..68e7d726bb 100644 --- a/packages/twenty-server/test/integration/rest/suites/view.integration-spec.ts +++ b/packages/twenty-server/test/integration/rest/suites/view.integration-spec.ts @@ -11,10 +11,9 @@ import { import { createTestViewWithRestApi } from 'test/integration/rest/utils/view-rest-api.util'; import { generateRecordName } from 'test/integration/utils/generate-record-name'; import { assertViewStructure } from 'test/integration/utils/view-test.util'; +import { ViewOpenRecordIn, ViewType } from 'twenty-shared/types'; import { ViewKey } from 'src/engine/metadata-modules/view/enums/view-key.enum'; -import { ViewOpenRecordIn } from 'src/engine/metadata-modules/view/enums/view-open-record-in'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; describe('View REST API', () => { let testObjectMetadataId: string; diff --git a/packages/twenty-server/test/integration/rest/utils/view-rest-api.util.ts b/packages/twenty-server/test/integration/rest/utils/view-rest-api.util.ts index 031571ebda..481597fffc 100644 --- a/packages/twenty-server/test/integration/rest/utils/view-rest-api.util.ts +++ b/packages/twenty-server/test/integration/rest/utils/view-rest-api.util.ts @@ -1,5 +1,10 @@ import { makeRestAPIRequest } from 'test/integration/rest/utils/make-rest-api-request.util'; import { generateRecordName } from 'test/integration/utils/generate-record-name'; +import { + ViewOpenRecordIn, + ViewType, + ViewVisibility, +} from 'twenty-shared/types'; import { type ViewFieldEntity } from 'src/engine/metadata-modules/view-field/entities/view-field.entity'; import { type ViewFilterGroupEntity } from 'src/engine/metadata-modules/view-filter-group/entities/view-filter-group.entity'; @@ -7,9 +12,6 @@ import { type ViewFilterEntity } from 'src/engine/metadata-modules/view-filter/e import { type ViewGroupEntity } from 'src/engine/metadata-modules/view-group/entities/view-group.entity'; import { type ViewSortEntity } from 'src/engine/metadata-modules/view-sort/entities/view-sort.entity'; import { type ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity'; -import { ViewOpenRecordIn } from 'src/engine/metadata-modules/view/enums/view-open-record-in'; -import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'; -import { ViewVisibility } from 'src/engine/metadata-modules/view/enums/view-visibility.enum'; export const findViewByIdWithRestApi = async ( viewId: string, diff --git a/packages/twenty-server/test/integration/utils/view-test.util.ts b/packages/twenty-server/test/integration/utils/view-test.util.ts index 1f89abe93d..b7dca9f1ef 100644 --- a/packages/twenty-server/test/integration/utils/view-test.util.ts +++ b/packages/twenty-server/test/integration/utils/view-test.util.ts @@ -1,7 +1,8 @@ +import { ViewFilterGroupLogicalOperator } from 'twenty-shared/types'; + import { type ViewFieldGroupDTO } from 'src/engine/metadata-modules/view-field-group/dtos/view-field-group.dto'; import { type ViewFieldEntity } from 'src/engine/metadata-modules/view-field/entities/view-field.entity'; import { type ViewFilterGroupEntity } from 'src/engine/metadata-modules/view-filter-group/entities/view-filter-group.entity'; -import { ViewFilterGroupLogicalOperator } from 'src/engine/metadata-modules/view-filter-group/enums/view-filter-group-logical-operator'; import { type ViewFilterEntity } from 'src/engine/metadata-modules/view-filter/entities/view-filter.entity'; import { type ViewGroupEntity } from 'src/engine/metadata-modules/view-group/entities/view-group.entity'; import { type ViewSortEntity } from 'src/engine/metadata-modules/view-sort/entities/view-sort.entity'; diff --git a/packages/twenty-shared/src/application/fieldManifestType.ts b/packages/twenty-shared/src/application/fieldManifestType.ts index 63e544ae3d..d3d5461434 100644 --- a/packages/twenty-shared/src/application/fieldManifestType.ts +++ b/packages/twenty-shared/src/application/fieldManifestType.ts @@ -29,7 +29,8 @@ export type RegularFieldManifest< // Relation-specific universal settings (relationType, onDelete, joinColumnName) // are provided through the `universalSettings` field. export type RelationFieldManifest< - T extends RelationAndMorphRelationFieldMetadataType = RelationAndMorphRelationFieldMetadataType, + T extends + RelationAndMorphRelationFieldMetadataType = RelationAndMorphRelationFieldMetadataType, > = RegularFieldManifest & { relationTargetFieldMetadataUniversalIdentifier: string; relationTargetObjectMetadataUniversalIdentifier: string; diff --git a/packages/twenty-shared/src/application/index.ts b/packages/twenty-shared/src/application/index.ts index 4635a4b49f..1a7bf5e27a 100644 --- a/packages/twenty-shared/src/application/index.ts +++ b/packages/twenty-shared/src/application/index.ts @@ -33,6 +33,7 @@ export type { HttpRouteTriggerSettings, } from './logicFunctionManifestType'; export type { Manifest } from './manifestType'; +export type { NavigationMenuItemManifest } from './navigationMenuItemManifestType'; export type { ObjectFieldManifest } from './objectFieldManifest.type'; export type { ObjectManifest } from './objectManifestType'; export type { @@ -41,3 +42,12 @@ export type { RoleManifest, } from './roleManifestType'; export type { SyncableEntityOptions } from './syncableEntityOptionsType'; +export type { + ViewManifestFilterValue, + ViewFieldManifest, + ViewFilterManifest, + ViewFilterGroupManifest, + ViewGroupManifest, + ViewFieldGroupManifest, + ViewManifest, +} from './viewManifestType'; diff --git a/packages/twenty-shared/src/application/manifestType.ts b/packages/twenty-shared/src/application/manifestType.ts index 5d2524d18d..40668104bf 100644 --- a/packages/twenty-shared/src/application/manifestType.ts +++ b/packages/twenty-shared/src/application/manifestType.ts @@ -3,8 +3,10 @@ import { type AssetManifest } from './assetManifestType'; import { type FieldManifest } from './fieldManifestType'; import { type FrontComponentManifest } from './frontComponentManifestType'; import { type LogicFunctionManifest } from './logicFunctionManifestType'; +import { type NavigationMenuItemManifest } from './navigationMenuItemManifestType'; import { type ObjectManifest } from './objectManifestType'; import { type RoleManifest } from './roleManifestType'; +import { type ViewManifest } from './viewManifestType'; export type Manifest = { application: ApplicationManifest; @@ -14,4 +16,6 @@ export type Manifest = { frontComponents: FrontComponentManifest[]; roles: RoleManifest[]; publicAssets: AssetManifest[]; + views: ViewManifest[]; + navigationMenuItems: NavigationMenuItemManifest[]; }; diff --git a/packages/twenty-shared/src/application/navigationMenuItemManifestType.ts b/packages/twenty-shared/src/application/navigationMenuItemManifestType.ts new file mode 100644 index 0000000000..a39eb545ce --- /dev/null +++ b/packages/twenty-shared/src/application/navigationMenuItemManifestType.ts @@ -0,0 +1,10 @@ +import { type SyncableEntityOptions } from '@/application/syncableEntityOptionsType'; + +export type NavigationMenuItemManifest = SyncableEntityOptions & { + name?: string; + position: number; + viewUniversalIdentifier?: string; + link?: string; + folderUniversalIdentifier?: string; + targetObjectUniversalIdentifier?: string; +}; diff --git a/packages/twenty-shared/src/application/viewManifestType.ts b/packages/twenty-shared/src/application/viewManifestType.ts new file mode 100644 index 0000000000..ffaaf3328d --- /dev/null +++ b/packages/twenty-shared/src/application/viewManifestType.ts @@ -0,0 +1,68 @@ +import { type SyncableEntityOptions } from '@/application/syncableEntityOptionsType'; +import { + type AggregateOperations, + type ViewFilterGroupLogicalOperator, + type ViewFilterOperand, + type ViewOpenRecordIn, + type ViewType, + type ViewVisibility, +} from '@/types'; + +export type ViewManifestFilterValue = + | string + | string[] + | boolean + | number + | Record; + +export type ViewFieldManifest = SyncableEntityOptions & { + fieldMetadataUniversalIdentifier: string; + isVisible?: boolean; + size?: number; + position: number; + aggregateOperation?: AggregateOperations; + viewFieldGroupUniversalIdentifier?: string; +}; + +export type ViewFilterManifest = SyncableEntityOptions & { + fieldMetadataUniversalIdentifier: string; + operand: ViewFilterOperand; + value: ViewManifestFilterValue; + subFieldName?: string; + viewFilterGroupUniversalIdentifier?: string; + positionInViewFilterGroup?: number; +}; + +export type ViewFilterGroupManifest = SyncableEntityOptions & { + logicalOperator: ViewFilterGroupLogicalOperator; + parentViewFilterGroupUniversalIdentifier?: string; + positionInViewFilterGroup?: number; +}; + +export type ViewGroupManifest = SyncableEntityOptions & { + fieldValue: string; + isVisible?: boolean; + position: number; +}; + +export type ViewFieldGroupManifest = SyncableEntityOptions & { + name?: string; + position: number; + isVisible?: boolean; +}; + +export type ViewManifest = SyncableEntityOptions & { + name: string; + objectUniversalIdentifier: string; + type?: ViewType; + icon?: string; + position?: number; + isCompact?: boolean; + visibility?: ViewVisibility; + openRecordIn?: ViewOpenRecordIn; + fields?: ViewFieldManifest[]; + filters?: ViewFilterManifest[]; + filterGroups?: ViewFilterGroupManifest[]; + groups?: ViewGroupManifest[]; + fieldGroups?: ViewFieldGroupManifest[]; +}; diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant.ts b/packages/twenty-shared/src/types/AggregateOperations.ts similarity index 100% rename from packages/twenty-server/src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant.ts rename to packages/twenty-shared/src/types/AggregateOperations.ts diff --git a/packages/twenty-server/src/engine/metadata-modules/view-filter-group/enums/view-filter-group-logical-operator.ts b/packages/twenty-shared/src/types/ViewFilterGroupLogicalOperator.ts similarity index 100% rename from packages/twenty-server/src/engine/metadata-modules/view-filter-group/enums/view-filter-group-logical-operator.ts rename to packages/twenty-shared/src/types/ViewFilterGroupLogicalOperator.ts diff --git a/packages/twenty-server/src/engine/metadata-modules/view/enums/view-open-record-in.ts b/packages/twenty-shared/src/types/ViewOpenRecordIn.ts similarity index 100% rename from packages/twenty-server/src/engine/metadata-modules/view/enums/view-open-record-in.ts rename to packages/twenty-shared/src/types/ViewOpenRecordIn.ts diff --git a/packages/twenty-server/src/engine/metadata-modules/view/enums/view-type.enum.ts b/packages/twenty-shared/src/types/ViewType.ts similarity index 100% rename from packages/twenty-server/src/engine/metadata-modules/view/enums/view-type.enum.ts rename to packages/twenty-shared/src/types/ViewType.ts diff --git a/packages/twenty-server/src/engine/metadata-modules/view/enums/view-visibility.enum.ts b/packages/twenty-shared/src/types/ViewVisibility.ts similarity index 100% rename from packages/twenty-server/src/engine/metadata-modules/view/enums/view-visibility.enum.ts rename to packages/twenty-shared/src/types/ViewVisibility.ts diff --git a/packages/twenty-shared/src/types/index.ts b/packages/twenty-shared/src/types/index.ts index fecfb95ea6..6e8cb9de87 100644 --- a/packages/twenty-shared/src/types/index.ts +++ b/packages/twenty-shared/src/types/index.ts @@ -9,6 +9,7 @@ export type { AllowedAddressSubField } from './AddressFieldsType'; export { ALLOWED_ADDRESS_SUBFIELDS } from './AddressFieldsType'; +export { AggregateOperations } from './AggregateOperations'; export { AppBasePath } from './AppBasePath'; export { AppPath } from './AppPath'; export type { Arrayable } from './Arrayable'; @@ -215,5 +216,9 @@ export type { export { StepLogicalOperator } from './StepFilters'; export { TwoFactorAuthenticationStrategy } from './TwoFactorAuthenticationStrategy'; export { IsValidGraphQLEnumName } from './validators/is-valid-graphql-enum-name.validator'; +export { ViewFilterGroupLogicalOperator } from './ViewFilterGroupLogicalOperator'; export { ViewFilterOperand } from './ViewFilterOperand'; export { ViewFilterOperandDeprecated } from './ViewFilterOperandDeprecated'; +export { ViewOpenRecordIn } from './ViewOpenRecordIn'; +export { ViewType } from './ViewType'; +export { ViewVisibility } from './ViewVisibility';