From 08eb1f7a1dbc32288cf63fb72525aeccb5c687d7 Mon Sep 17 00:00:00 2001 From: Mike Date: Mon, 1 Sep 2025 14:24:17 +0200 Subject: [PATCH] Feat: Bashboards in app (#5333) --- packages/frontend-2/.env.example | 3 + .../components/common/ConfirmDialog.vue | 8 +- .../components/dashboard/Sidebar.vue | 49 +++- .../frontend-2/components/dashboards/Card.vue | 103 +++++++ .../components/dashboards/CreateDialog.vue | 70 +++++ .../components/dashboards/EditDialog.vue | 85 ++++++ .../frontend-2/components/dashboards/List.vue | 105 +++++++ .../components/dashboards/Share.vue | 133 +++++++++ .../frontend-2/components/header/Empty.vue | 3 + .../frontend-2/components/header/nav/Bar.vue | 6 +- .../components/header/nav/Share.vue | 18 +- packages/frontend-2/composables/globals.ts | 7 + packages/frontend-2/layouts/dashboard.vue | 28 ++ .../frontend-2/lib/auth/composables/auth.ts | 11 +- .../lib/common/generated/gql/gql.ts | 72 +++++ .../lib/common/generated/gql/graphql.ts | 275 +++++++++++++++++- .../frontend-2/lib/common/helpers/route.ts | 9 +- .../lib/dashboards/composables/embed.ts | 52 ++++ .../lib/dashboards/composables/management.ts | 148 ++++++++++ .../lib/dashboards/graphql/mutations.ts | 36 +++ .../lib/dashboards/graphql/queries.ts | 25 ++ packages/frontend-2/nuxt.config.ts | 1 + .../workspaces/[slug]/dashboards/[id].vue | 126 ++++++++ .../workspaces/[slug]/dashboards/index.vue | 29 ++ .../dashboards/typedefs/dashboards.graphql | 47 +++ .../dashboards/typedefs/permissions.graphql | 15 + .../assets/dashboards/typedefs/tokens.graphql | 33 +++ .../typedefs/workspaces.graphql | 5 + packages/server/codegen.ts | 9 +- .../modules/core/graph/generated/graphql.ts | 219 ++++++++++++++ .../modules/dashboards/authz/loaders/index.ts | 13 + .../server/modules/dashboards/dbSchema.ts | 18 ++ .../modules/dashboards/domain/operations.ts | 22 ++ .../dashboards/domain/tokens/operations.ts | 6 + .../modules/dashboards/domain/tokens/types.ts | 11 + .../server/modules/dashboards/domain/types.ts | 13 + .../modules/dashboards/errors/dashboards.ts | 26 ++ .../dashboards/graph/resolvers/dashboards.ts | 155 ++++++++++ .../dashboards/graph/resolvers/permissions.ts | 56 ++++ .../dashboards/graph/resolvers/tokens.ts | 90 ++++++ .../modules/dashboards/helpers/graphTypes.ts | 8 + packages/server/modules/dashboards/index.ts | 14 + .../migrations/20250826113850_dashboards.ts | 23 ++ .../20250826161638_dashboard_tokens.ts | 29 ++ .../dashboards/repositories/management.ts | 75 +++++ .../modules/dashboards/repositories/tokens.ts | 21 ++ .../modules/dashboards/services/management.ts | 132 +++++++++ .../modules/dashboards/services/tokens.ts | 80 +++++ .../tests/integration/management.spec.ts | 100 +++++++ .../dashboards/tests/unit/management.spec.ts | 47 +++ .../dashboards/tests/unit/tokens.spec.ts | 79 +++++ packages/server/modules/index.ts | 1 + .../modules/shared/helpers/errorHelper.ts | 6 + .../workspacesCore/helpers/graphHelpers.ts | 32 ++ .../src/authz/checks/dashboards.spec.ts | 46 +++ .../shared/src/authz/checks/dashboards.ts | 14 + .../shared/src/authz/domain/authErrors.ts | 25 ++ packages/shared/src/authz/domain/context.ts | 2 + .../src/authz/domain/dashboards/operations.ts | 3 + .../src/authz/domain/dashboards/types.ts | 6 + packages/shared/src/authz/domain/loaders.ts | 3 + .../shared/src/authz/fragments/dashboards.ts | 90 ++++++ .../policies/dashboard/canCreateToken.ts | 86 ++++++ .../src/authz/policies/dashboard/canDelete.ts | 76 +++++ .../src/authz/policies/dashboard/canEdit.ts | 71 +++++ .../src/authz/policies/dashboard/canRead.ts | 61 ++++ packages/shared/src/authz/policies/index.ts | 16 +- .../policies/workspace/canCreateDashboards.ts | 63 ++++ .../policies/workspace/canListDashboards.ts | 53 ++++ .../shared/src/environment/featureFlags.ts | 1 + packages/shared/src/environment/index.ts | 5 + .../speckle-server/templates/_helpers.tpl | 3 + .../templates/frontend_2/deployment.yml | 2 + utils/helm/speckle-server/values.schema.json | 5 + utils/helm/speckle-server/values.yaml | 2 + 75 files changed, 3400 insertions(+), 20 deletions(-) create mode 100644 packages/frontend-2/components/dashboards/Card.vue create mode 100644 packages/frontend-2/components/dashboards/CreateDialog.vue create mode 100644 packages/frontend-2/components/dashboards/EditDialog.vue create mode 100644 packages/frontend-2/components/dashboards/List.vue create mode 100644 packages/frontend-2/components/dashboards/Share.vue create mode 100644 packages/frontend-2/layouts/dashboard.vue create mode 100644 packages/frontend-2/lib/dashboards/composables/embed.ts create mode 100644 packages/frontend-2/lib/dashboards/composables/management.ts create mode 100644 packages/frontend-2/lib/dashboards/graphql/mutations.ts create mode 100644 packages/frontend-2/lib/dashboards/graphql/queries.ts create mode 100644 packages/frontend-2/pages/workspaces/[slug]/dashboards/[id].vue create mode 100644 packages/frontend-2/pages/workspaces/[slug]/dashboards/index.vue create mode 100644 packages/server/assets/dashboards/typedefs/dashboards.graphql create mode 100644 packages/server/assets/dashboards/typedefs/permissions.graphql create mode 100644 packages/server/assets/dashboards/typedefs/tokens.graphql create mode 100644 packages/server/modules/dashboards/authz/loaders/index.ts create mode 100644 packages/server/modules/dashboards/dbSchema.ts create mode 100644 packages/server/modules/dashboards/domain/operations.ts create mode 100644 packages/server/modules/dashboards/domain/tokens/operations.ts create mode 100644 packages/server/modules/dashboards/domain/tokens/types.ts create mode 100644 packages/server/modules/dashboards/domain/types.ts create mode 100644 packages/server/modules/dashboards/errors/dashboards.ts create mode 100644 packages/server/modules/dashboards/graph/resolvers/dashboards.ts create mode 100644 packages/server/modules/dashboards/graph/resolvers/permissions.ts create mode 100644 packages/server/modules/dashboards/graph/resolvers/tokens.ts create mode 100644 packages/server/modules/dashboards/helpers/graphTypes.ts create mode 100644 packages/server/modules/dashboards/index.ts create mode 100644 packages/server/modules/dashboards/migrations/20250826113850_dashboards.ts create mode 100644 packages/server/modules/dashboards/migrations/20250826161638_dashboard_tokens.ts create mode 100644 packages/server/modules/dashboards/repositories/management.ts create mode 100644 packages/server/modules/dashboards/repositories/tokens.ts create mode 100644 packages/server/modules/dashboards/services/management.ts create mode 100644 packages/server/modules/dashboards/services/tokens.ts create mode 100644 packages/server/modules/dashboards/tests/integration/management.spec.ts create mode 100644 packages/server/modules/dashboards/tests/unit/management.spec.ts create mode 100644 packages/server/modules/dashboards/tests/unit/tokens.spec.ts create mode 100644 packages/server/modules/workspacesCore/helpers/graphHelpers.ts create mode 100644 packages/shared/src/authz/checks/dashboards.spec.ts create mode 100644 packages/shared/src/authz/checks/dashboards.ts create mode 100644 packages/shared/src/authz/domain/dashboards/operations.ts create mode 100644 packages/shared/src/authz/domain/dashboards/types.ts create mode 100644 packages/shared/src/authz/fragments/dashboards.ts create mode 100644 packages/shared/src/authz/policies/dashboard/canCreateToken.ts create mode 100644 packages/shared/src/authz/policies/dashboard/canDelete.ts create mode 100644 packages/shared/src/authz/policies/dashboard/canEdit.ts create mode 100644 packages/shared/src/authz/policies/dashboard/canRead.ts create mode 100644 packages/shared/src/authz/policies/workspace/canCreateDashboards.ts create mode 100644 packages/shared/src/authz/policies/workspace/canListDashboards.ts diff --git a/packages/frontend-2/.env.example b/packages/frontend-2/.env.example index a96acaa88..4a36b7b4b 100644 --- a/packages/frontend-2/.env.example +++ b/packages/frontend-2/.env.example @@ -40,6 +40,9 @@ NUXT_PUBLIC_INTERCOM_APP_ID= # Enable Autodesk construction cloud integration NUXT_PUBLIC_FF_ACC_INTEGRATION_ENABLED=false +# Local or remote URL for dashboards +NUXT_PUBLIC_DASHBOARDS_ORIGIN=http://localhost:8083 + ########################################################## # Local dev settings ########################################################## diff --git a/packages/frontend-2/components/common/ConfirmDialog.vue b/packages/frontend-2/components/common/ConfirmDialog.vue index 8011670ee..f8bc9ac30 100644 --- a/packages/frontend-2/components/common/ConfirmDialog.vue +++ b/packages/frontend-2/components/common/ConfirmDialog.vue @@ -1,6 +1,6 @@