@open-mercato/core 0.4.2-canary-3b5064ce72 → 0.4.2-canary-15e78de280
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/generated/entities/api_key/index.js +2 -0
- package/dist/generated/entities/api_key/index.js.map +2 -2
- package/dist/generated/entities.ids.generated.js +1 -5
- package/dist/generated/entities.ids.generated.js.map +2 -2
- package/dist/generated/entity-fields-registry.js +0 -2
- package/dist/generated/entity-fields-registry.js.map +2 -2
- package/dist/modules/api_docs/frontend/docs/api/page.js +2 -3
- package/dist/modules/api_docs/frontend/docs/api/page.js.map +2 -2
- package/dist/modules/api_keys/backend/api-keys/page.js +1 -1
- package/dist/modules/api_keys/backend/api-keys/page.js.map +2 -2
- package/dist/modules/api_keys/data/entities.js +3 -0
- package/dist/modules/api_keys/data/entities.js.map +2 -2
- package/dist/modules/api_keys/migrations/Migration20260125204102.js +13 -0
- package/dist/modules/api_keys/migrations/Migration20260125204102.js.map +7 -0
- package/dist/modules/api_keys/services/apiKeyService.js +41 -0
- package/dist/modules/api_keys/services/apiKeyService.js.map +3 -3
- package/dist/modules/attachments/components/AttachmentLibrary.js +0 -4
- package/dist/modules/attachments/components/AttachmentLibrary.js.map +2 -2
- package/dist/modules/attachments/components/AttachmentPartitionSettings.js +0 -2
- package/dist/modules/attachments/components/AttachmentPartitionSettings.js.map +2 -2
- package/dist/modules/auth/api/admin/nav.js +3 -4
- package/dist/modules/auth/api/admin/nav.js.map +2 -2
- package/dist/modules/auth/api/login.js +6 -25
- package/dist/modules/auth/api/login.js.map +2 -2
- package/dist/modules/auth/api/reset/confirm.js +2 -25
- package/dist/modules/auth/api/reset/confirm.js.map +2 -2
- package/dist/modules/auth/api/reset.js +0 -23
- package/dist/modules/auth/api/reset.js.map +2 -2
- package/dist/modules/auth/api/sidebar/preferences/route.js +9 -14
- package/dist/modules/auth/api/sidebar/preferences/route.js.map +2 -2
- package/dist/modules/auth/api/users/route.js +2 -4
- package/dist/modules/auth/api/users/route.js.map +2 -2
- package/dist/modules/auth/backend/roles/[id]/edit/page.js +1 -4
- package/dist/modules/auth/backend/roles/[id]/edit/page.js.map +2 -2
- package/dist/modules/auth/backend/roles/page.js +3 -3
- package/dist/modules/auth/backend/roles/page.js.map +2 -2
- package/dist/modules/auth/backend/users/[id]/edit/page.js +3 -18
- package/dist/modules/auth/backend/users/[id]/edit/page.js.map +2 -2
- package/dist/modules/auth/backend/users/create/page.js +2 -15
- package/dist/modules/auth/backend/users/create/page.js.map +2 -2
- package/dist/modules/auth/backend/users/page.js +3 -3
- package/dist/modules/auth/backend/users/page.js.map +2 -2
- package/dist/modules/auth/cli.js +11 -25
- package/dist/modules/auth/cli.js.map +2 -2
- package/dist/modules/auth/commands/users.js +2 -59
- package/dist/modules/auth/commands/users.js.map +2 -2
- package/dist/modules/auth/data/validators.js +3 -6
- package/dist/modules/auth/data/validators.js.map +2 -2
- package/dist/modules/auth/frontend/login.js +3 -112
- package/dist/modules/auth/frontend/login.js.map +2 -2
- package/dist/modules/auth/frontend/reset/[token]/page.js +10 -20
- package/dist/modules/auth/frontend/reset/[token]/page.js.map +2 -2
- package/dist/modules/auth/lib/setup-app.js +8 -42
- package/dist/modules/auth/lib/setup-app.js.map +2 -2
- package/dist/modules/auth/services/authService.js +3 -24
- package/dist/modules/auth/services/authService.js.map +2 -2
- package/dist/modules/auth/services/rbacService.js.map +2 -2
- package/dist/modules/business_rules/api/execute/route.js +1 -7
- package/dist/modules/business_rules/api/execute/route.js.map +2 -2
- package/dist/modules/business_rules/backend/rules/page.js +0 -4
- package/dist/modules/business_rules/backend/rules/page.js.map +2 -2
- package/dist/modules/business_rules/backend/sets/page.js +0 -3
- package/dist/modules/business_rules/backend/sets/page.js.map +2 -2
- package/dist/modules/business_rules/cli.js +1 -2
- package/dist/modules/business_rules/cli.js.map +2 -2
- package/dist/modules/business_rules/lib/rule-engine.js +3 -33
- package/dist/modules/business_rules/lib/rule-engine.js.map +2 -2
- package/dist/modules/catalog/components/PriceKindSettings.js +0 -2
- package/dist/modules/catalog/components/PriceKindSettings.js.map +2 -2
- package/dist/modules/catalog/components/categories/CategoriesDataTable.js +2 -2
- package/dist/modules/catalog/components/categories/CategoriesDataTable.js.map +2 -2
- package/dist/modules/catalog/components/products/ProductsDataTable.js +0 -2
- package/dist/modules/catalog/components/products/ProductsDataTable.js.map +2 -2
- package/dist/modules/configs/cli.js +0 -6
- package/dist/modules/configs/cli.js.map +2 -2
- package/dist/modules/configs/components/CachePanel.js +4 -4
- package/dist/modules/configs/components/CachePanel.js.map +2 -2
- package/dist/modules/configs/lib/system-status.js +1 -48
- package/dist/modules/configs/lib/system-status.js.map +2 -2
- package/dist/modules/configs/lib/upgrade-actions.js +0 -18
- package/dist/modules/configs/lib/upgrade-actions.js.map +2 -2
- package/dist/modules/currencies/backend/currencies/page.js +0 -3
- package/dist/modules/currencies/backend/currencies/page.js.map +2 -2
- package/dist/modules/currencies/backend/exchange-rates/page.js +0 -2
- package/dist/modules/currencies/backend/exchange-rates/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies/page.js +0 -3
- package/dist/modules/customers/backend/customers/companies/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/page.js +0 -3
- package/dist/modules/customers/backend/customers/deals/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/people/page.js +0 -3
- package/dist/modules/customers/backend/customers/people/page.js.map +2 -2
- package/dist/modules/customers/commands/deals.js +0 -31
- package/dist/modules/customers/commands/deals.js.map +2 -2
- package/dist/modules/customers/components/CustomerTodosTable.js +0 -1
- package/dist/modules/customers/components/CustomerTodosTable.js.map +2 -2
- package/dist/modules/customers/widgets/dashboard/customer-todos/widget.js +1 -2
- package/dist/modules/customers/widgets/dashboard/customer-todos/widget.js.map +2 -2
- package/dist/modules/customers/widgets/dashboard/new-customers/widget.js +1 -2
- package/dist/modules/customers/widgets/dashboard/new-customers/widget.js.map +2 -2
- package/dist/modules/customers/widgets/dashboard/new-deals/widget.js +1 -2
- package/dist/modules/customers/widgets/dashboard/new-deals/widget.js.map +2 -2
- package/dist/modules/customers/widgets/dashboard/next-interactions/widget.js +1 -2
- package/dist/modules/customers/widgets/dashboard/next-interactions/widget.js.map +2 -2
- package/dist/modules/dashboards/cli.js +5 -44
- package/dist/modules/dashboards/cli.js.map +2 -2
- package/dist/modules/dashboards/components/WidgetVisibilityEditor.js +11 -16
- package/dist/modules/dashboards/components/WidgetVisibilityEditor.js.map +3 -3
- package/dist/modules/dashboards/services/widgetDataService.js +3 -139
- package/dist/modules/dashboards/services/widgetDataService.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/aov-kpi/widget.js +1 -2
- package/dist/modules/dashboards/widgets/dashboard/aov-kpi/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.js +1 -2
- package/dist/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.js +1 -2
- package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/orders-kpi/widget.js +1 -2
- package/dist/modules/dashboards/widgets/dashboard/orders-kpi/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/widget.js +1 -2
- package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/revenue-kpi/widget.js +1 -2
- package/dist/modules/dashboards/widgets/dashboard/revenue-kpi/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.js +1 -2
- package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.js +1 -2
- package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.js +1 -2
- package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/top-products/widget.js +1 -2
- package/dist/modules/dashboards/widgets/dashboard/top-products/widget.js.map +2 -2
- package/dist/modules/dictionaries/components/DictionaryTable.js +0 -2
- package/dist/modules/dictionaries/components/DictionaryTable.js.map +2 -2
- package/dist/modules/directory/backend/directory/organizations/page.js +2 -2
- package/dist/modules/directory/backend/directory/organizations/page.js.map +2 -2
- package/dist/modules/directory/backend/directory/tenants/page.js +2 -2
- package/dist/modules/directory/backend/directory/tenants/page.js.map +2 -2
- package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js +2 -2
- package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js.map +2 -2
- package/dist/modules/entities/components/SystemEntitiesTable.js +1 -1
- package/dist/modules/entities/components/SystemEntitiesTable.js.map +2 -2
- package/dist/modules/entities/components/UserEntitiesTable.js +2 -2
- package/dist/modules/entities/components/UserEntitiesTable.js.map +2 -2
- package/dist/modules/feature_toggles/components/FeatureTogglesTable.js +3 -3
- package/dist/modules/feature_toggles/components/FeatureTogglesTable.js.map +2 -2
- package/dist/modules/feature_toggles/components/OverridesTable.js +1 -1
- package/dist/modules/feature_toggles/components/OverridesTable.js.map +2 -2
- package/dist/modules/planner/backend/planner/availability-rulesets/page.js +2 -2
- package/dist/modules/planner/backend/planner/availability-rulesets/page.js.map +2 -2
- package/dist/modules/query_index/cli.js +7 -63
- package/dist/modules/query_index/cli.js.map +2 -2
- package/dist/modules/query_index/components/QueryIndexesTable.js +1 -7
- package/dist/modules/query_index/components/QueryIndexesTable.js.map +2 -2
- package/dist/modules/resources/backend/resources/resource-types/page.js +2 -2
- package/dist/modules/resources/backend/resources/resource-types/page.js.map +2 -2
- package/dist/modules/resources/backend/resources/resources/page.js +2 -2
- package/dist/modules/resources/backend/resources/resources/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/channels/offers/page.js +0 -2
- package/dist/modules/sales/backend/sales/channels/offers/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/channels/page.js +0 -2
- package/dist/modules/sales/backend/sales/channels/page.js.map +2 -2
- package/dist/modules/sales/commands/documents.js +0 -53
- package/dist/modules/sales/commands/documents.js.map +2 -2
- package/dist/modules/sales/commands/payments.js +0 -26
- package/dist/modules/sales/commands/payments.js.map +2 -2
- package/dist/modules/sales/components/AdjustmentKindSettings.js +2 -2
- package/dist/modules/sales/components/AdjustmentKindSettings.js.map +2 -2
- package/dist/modules/sales/components/PaymentMethodsSettings.js +2 -2
- package/dist/modules/sales/components/PaymentMethodsSettings.js.map +2 -2
- package/dist/modules/sales/components/ShippingMethodsSettings.js +2 -2
- package/dist/modules/sales/components/ShippingMethodsSettings.js.map +2 -2
- package/dist/modules/sales/components/TaxRatesSettings.js +2 -2
- package/dist/modules/sales/components/TaxRatesSettings.js.map +2 -2
- package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js +0 -2
- package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js.map +2 -2
- package/dist/modules/sales/components/documents/AdjustmentsSection.js +0 -2
- package/dist/modules/sales/components/documents/AdjustmentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/PaymentsSection.js +1 -2
- package/dist/modules/sales/components/documents/PaymentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/SalesDocumentsTable.js +0 -2
- package/dist/modules/sales/components/documents/SalesDocumentsTable.js.map +2 -2
- package/dist/modules/staff/backend/staff/team-members/page.js +1 -1
- package/dist/modules/staff/backend/staff/team-members/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/team-roles/page.js +2 -2
- package/dist/modules/staff/backend/staff/team-roles/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js +2 -2
- package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/teams/page.js +2 -2
- package/dist/modules/staff/backend/staff/teams/page.js.map +2 -2
- package/dist/modules/staff/commands/leave-requests.js +0 -79
- package/dist/modules/staff/commands/leave-requests.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/page.js +0 -5
- package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
- package/dist/modules/workflows/backend/instances/page.js +0 -3
- package/dist/modules/workflows/backend/instances/page.js.map +2 -2
- package/dist/modules/workflows/backend/tasks/page.js +0 -3
- package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
- package/dist/modules/workflows/cli.js +12 -12
- package/dist/modules/workflows/cli.js.map +2 -2
- package/dist/modules/workflows/lib/transition-handler.js +6 -14
- package/dist/modules/workflows/lib/transition-handler.js.map +2 -2
- package/generated/entities/api_key/index.ts +1 -0
- package/generated/entities.ids.generated.ts +1 -5
- package/generated/entity-fields-registry.ts +0 -2
- package/package.json +2 -2
- package/src/modules/api_docs/frontend/docs/api/page.tsx +2 -3
- package/src/modules/api_keys/backend/api-keys/page.tsx +1 -1
- package/src/modules/api_keys/data/entities.ts +4 -0
- package/src/modules/api_keys/migrations/.snapshot-open-mercato.json +9 -0
- package/src/modules/api_keys/migrations/Migration20260125204102.ts +13 -0
- package/src/modules/api_keys/services/apiKeyService.ts +85 -0
- package/src/modules/attachments/components/AttachmentLibrary.tsx +0 -4
- package/src/modules/attachments/components/AttachmentPartitionSettings.tsx +0 -2
- package/src/modules/auth/README.md +1 -1
- package/src/modules/auth/__tests__/cli-setup-acl.test.ts +1 -1
- package/src/modules/auth/api/__tests__/login.test.ts +0 -2
- package/src/modules/auth/api/admin/nav.ts +6 -10
- package/src/modules/auth/api/login.ts +7 -26
- package/src/modules/auth/api/reset/confirm.ts +2 -25
- package/src/modules/auth/api/reset.ts +0 -23
- package/src/modules/auth/api/sidebar/preferences/route.ts +12 -21
- package/src/modules/auth/api/users/route.ts +2 -5
- package/src/modules/auth/backend/roles/[id]/edit/page.tsx +1 -4
- package/src/modules/auth/backend/roles/page.tsx +3 -3
- package/src/modules/auth/backend/users/[id]/edit/page.tsx +3 -22
- package/src/modules/auth/backend/users/create/page.tsx +2 -19
- package/src/modules/auth/backend/users/page.tsx +3 -3
- package/src/modules/auth/cli.ts +11 -38
- package/src/modules/auth/commands/users.ts +2 -73
- package/src/modules/auth/data/validators.ts +2 -6
- package/src/modules/auth/frontend/login.tsx +5 -134
- package/src/modules/auth/frontend/reset/[token]/page.tsx +11 -24
- package/src/modules/auth/i18n/de.json +1 -48
- package/src/modules/auth/i18n/en.json +1 -48
- package/src/modules/auth/i18n/es.json +1 -48
- package/src/modules/auth/i18n/pl.json +1 -48
- package/src/modules/auth/lib/setup-app.ts +9 -58
- package/src/modules/auth/services/authService.ts +4 -27
- package/src/modules/auth/services/rbacService.ts +1 -1
- package/src/modules/business_rules/api/execute/route.ts +1 -8
- package/src/modules/business_rules/backend/rules/page.tsx +0 -4
- package/src/modules/business_rules/backend/sets/page.tsx +0 -3
- package/src/modules/business_rules/cli.ts +1 -2
- package/src/modules/business_rules/i18n/en.json +1 -3
- package/src/modules/business_rules/lib/__tests__/rule-engine.test.ts +0 -51
- package/src/modules/business_rules/lib/rule-engine.ts +3 -57
- package/src/modules/catalog/components/PriceKindSettings.tsx +0 -2
- package/src/modules/catalog/components/categories/CategoriesDataTable.tsx +2 -2
- package/src/modules/catalog/components/products/ProductsDataTable.tsx +0 -2
- package/src/modules/catalog/i18n/en.json +1 -3
- package/src/modules/configs/cli.ts +0 -6
- package/src/modules/configs/components/CachePanel.tsx +4 -4
- package/src/modules/configs/i18n/en.json +2 -12
- package/src/modules/configs/i18n/pl.json +2 -12
- package/src/modules/configs/lib/system-status.ts +1 -48
- package/src/modules/configs/lib/system-status.types.ts +0 -1
- package/src/modules/configs/lib/upgrade-actions.ts +0 -18
- package/src/modules/currencies/backend/currencies/page.tsx +0 -3
- package/src/modules/currencies/backend/exchange-rates/page.tsx +0 -2
- package/src/modules/customers/backend/customers/companies/page.tsx +0 -3
- package/src/modules/customers/backend/customers/deals/page.tsx +0 -3
- package/src/modules/customers/backend/customers/people/page.tsx +0 -3
- package/src/modules/customers/commands/deals.ts +0 -39
- package/src/modules/customers/components/CustomerTodosTable.tsx +0 -1
- package/src/modules/customers/i18n/en.json +1 -5
- package/src/modules/customers/widgets/dashboard/customer-todos/widget.ts +2 -2
- package/src/modules/customers/widgets/dashboard/new-customers/widget.ts +2 -2
- package/src/modules/customers/widgets/dashboard/new-deals/widget.ts +2 -2
- package/src/modules/customers/widgets/dashboard/next-interactions/widget.ts +2 -2
- package/src/modules/dashboards/cli.ts +5 -55
- package/src/modules/dashboards/components/WidgetVisibilityEditor.tsx +11 -22
- package/src/modules/dashboards/services/widgetDataService.ts +4 -164
- package/src/modules/dashboards/widgets/dashboard/aov-kpi/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/orders-by-status/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/orders-kpi/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/pipeline-summary/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/revenue-kpi/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/revenue-trend/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/sales-by-region/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/top-customers/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/top-products/widget.ts +2 -2
- package/src/modules/dictionaries/components/DictionaryTable.tsx +0 -2
- package/src/modules/directory/backend/directory/organizations/page.tsx +2 -2
- package/src/modules/directory/backend/directory/tenants/page.tsx +2 -2
- package/src/modules/entities/backend/entities/user/[entityId]/records/page.tsx +2 -2
- package/src/modules/entities/components/SystemEntitiesTable.tsx +1 -1
- package/src/modules/entities/components/UserEntitiesTable.tsx +2 -2
- package/src/modules/feature_toggles/components/FeatureTogglesTable.tsx +4 -3
- package/src/modules/feature_toggles/components/OverridesTable.tsx +1 -1
- package/src/modules/planner/backend/planner/availability-rulesets/page.tsx +2 -2
- package/src/modules/query_index/cli.ts +13 -82
- package/src/modules/query_index/components/QueryIndexesTable.tsx +2 -8
- package/src/modules/resources/backend/resources/resource-types/page.tsx +2 -2
- package/src/modules/resources/backend/resources/resources/page.tsx +2 -2
- package/src/modules/sales/backend/sales/channels/offers/page.tsx +0 -2
- package/src/modules/sales/backend/sales/channels/page.tsx +0 -2
- package/src/modules/sales/commands/documents.ts +0 -65
- package/src/modules/sales/commands/payments.ts +0 -33
- package/src/modules/sales/components/AdjustmentKindSettings.tsx +2 -2
- package/src/modules/sales/components/PaymentMethodsSettings.tsx +2 -2
- package/src/modules/sales/components/ShippingMethodsSettings.tsx +2 -2
- package/src/modules/sales/components/TaxRatesSettings.tsx +2 -2
- package/src/modules/sales/components/channels/SalesChannelOffersPanel.tsx +0 -2
- package/src/modules/sales/components/documents/AdjustmentsSection.tsx +0 -2
- package/src/modules/sales/components/documents/PaymentsSection.tsx +1 -2
- package/src/modules/sales/components/documents/SalesDocumentsTable.tsx +0 -2
- package/src/modules/sales/i18n/de.json +0 -20
- package/src/modules/sales/i18n/en.json +1 -25
- package/src/modules/sales/i18n/es.json +0 -20
- package/src/modules/sales/i18n/pl.json +0 -20
- package/src/modules/staff/backend/staff/team-members/page.tsx +1 -1
- package/src/modules/staff/backend/staff/team-roles/page.tsx +2 -2
- package/src/modules/staff/backend/staff/teams/[id]/edit/page.tsx +2 -2
- package/src/modules/staff/backend/staff/teams/page.tsx +2 -2
- package/src/modules/staff/commands/leave-requests.ts +0 -94
- package/src/modules/staff/i18n/de.json +0 -4
- package/src/modules/staff/i18n/en.json +1 -9
- package/src/modules/staff/i18n/es.json +0 -4
- package/src/modules/staff/i18n/pl.json +0 -4
- package/src/modules/workflows/backend/definitions/page.tsx +0 -5
- package/src/modules/workflows/backend/instances/page.tsx +1 -4
- package/src/modules/workflows/backend/tasks/page.tsx +1 -4
- package/src/modules/workflows/cli.ts +12 -12
- package/src/modules/workflows/i18n/en.json +1 -3
- package/src/modules/workflows/lib/transition-handler.ts +6 -18
- package/dist/generated/entities/notification/index.js +0 -57
- package/dist/generated/entities/notification/index.js.map +0 -7
- package/dist/modules/auth/api/profile/route.js +0 -157
- package/dist/modules/auth/api/profile/route.js.map +0 -7
- package/dist/modules/auth/backend/auth/profile/page.js +0 -141
- package/dist/modules/auth/backend/auth/profile/page.js.map +0 -7
- package/dist/modules/auth/backend/auth/profile/page.meta.js +0 -13
- package/dist/modules/auth/backend/auth/profile/page.meta.js.map +0 -7
- package/dist/modules/auth/notifications.js +0 -112
- package/dist/modules/auth/notifications.js.map +0 -7
- package/dist/modules/business_rules/notifications.js +0 -28
- package/dist/modules/business_rules/notifications.js.map +0 -7
- package/dist/modules/business_rules/subscribers/rule-execution-failed-notification.js +0 -37
- package/dist/modules/business_rules/subscribers/rule-execution-failed-notification.js.map +0 -7
- package/dist/modules/catalog/notifications.js +0 -28
- package/dist/modules/catalog/notifications.js.map +0 -7
- package/dist/modules/catalog/subscribers/low-stock-notification.js +0 -38
- package/dist/modules/catalog/subscribers/low-stock-notification.js.map +0 -7
- package/dist/modules/customers/notifications.js +0 -48
- package/dist/modules/customers/notifications.js.map +0 -7
- package/dist/modules/dashboards/lib/role-widgets.js +0 -58
- package/dist/modules/dashboards/lib/role-widgets.js.map +0 -7
- package/dist/modules/directory/api/get/tenants/lookup.js +0 -70
- package/dist/modules/directory/api/get/tenants/lookup.js.map +0 -7
- package/dist/modules/notifications/acl.js +0 -11
- package/dist/modules/notifications/acl.js.map +0 -7
- package/dist/modules/notifications/api/[id]/action/route.js +0 -74
- package/dist/modules/notifications/api/[id]/action/route.js.map +0 -7
- package/dist/modules/notifications/api/[id]/dismiss/route.js +0 -15
- package/dist/modules/notifications/api/[id]/dismiss/route.js.map +0 -7
- package/dist/modules/notifications/api/[id]/read/route.js +0 -15
- package/dist/modules/notifications/api/[id]/read/route.js.map +0 -7
- package/dist/modules/notifications/api/[id]/restore/route.js +0 -53
- package/dist/modules/notifications/api/[id]/restore/route.js.map +0 -7
- package/dist/modules/notifications/api/batch/route.js +0 -17
- package/dist/modules/notifications/api/batch/route.js.map +0 -7
- package/dist/modules/notifications/api/feature/route.js +0 -17
- package/dist/modules/notifications/api/feature/route.js.map +0 -7
- package/dist/modules/notifications/api/mark-all-read/route.js +0 -35
- package/dist/modules/notifications/api/mark-all-read/route.js.map +0 -7
- package/dist/modules/notifications/api/openapi.js +0 -76
- package/dist/modules/notifications/api/openapi.js.map +0 -7
- package/dist/modules/notifications/api/role/route.js +0 -17
- package/dist/modules/notifications/api/role/route.js.map +0 -7
- package/dist/modules/notifications/api/route.js +0 -85
- package/dist/modules/notifications/api/route.js.map +0 -7
- package/dist/modules/notifications/api/settings/route.js +0 -155
- package/dist/modules/notifications/api/settings/route.js.map +0 -7
- package/dist/modules/notifications/api/unread-count/route.js +0 -38
- package/dist/modules/notifications/api/unread-count/route.js.map +0 -7
- package/dist/modules/notifications/backend/config/notifications/page.js +0 -10
- package/dist/modules/notifications/backend/config/notifications/page.js.map +0 -7
- package/dist/modules/notifications/backend/config/notifications/page.meta.js +0 -24
- package/dist/modules/notifications/backend/config/notifications/page.meta.js.map +0 -7
- package/dist/modules/notifications/cli.js +0 -16
- package/dist/modules/notifications/cli.js.map +0 -7
- package/dist/modules/notifications/data/entities.js +0 -112
- package/dist/modules/notifications/data/entities.js.map +0 -7
- package/dist/modules/notifications/data/validators.js +0 -98
- package/dist/modules/notifications/data/validators.js.map +0 -7
- package/dist/modules/notifications/di.js +0 -13
- package/dist/modules/notifications/di.js.map +0 -7
- package/dist/modules/notifications/emails/NotificationEmail.js +0 -58
- package/dist/modules/notifications/emails/NotificationEmail.js.map +0 -7
- package/dist/modules/notifications/frontend/NotificationInboxPageClient.js +0 -44
- package/dist/modules/notifications/frontend/NotificationInboxPageClient.js.map +0 -7
- package/dist/modules/notifications/frontend/NotificationSettingsPageClient.js +0 -220
- package/dist/modules/notifications/frontend/NotificationSettingsPageClient.js.map +0 -7
- package/dist/modules/notifications/index.js +0 -14
- package/dist/modules/notifications/index.js.map +0 -7
- package/dist/modules/notifications/lib/deliveryConfig.js +0 -107
- package/dist/modules/notifications/lib/deliveryConfig.js.map +0 -7
- package/dist/modules/notifications/lib/deliveryStrategies.js +0 -14
- package/dist/modules/notifications/lib/deliveryStrategies.js.map +0 -7
- package/dist/modules/notifications/lib/events.js +0 -12
- package/dist/modules/notifications/lib/events.js.map +0 -7
- package/dist/modules/notifications/lib/notificationBuilder.js +0 -66
- package/dist/modules/notifications/lib/notificationBuilder.js.map +0 -7
- package/dist/modules/notifications/lib/notificationFactory.js +0 -54
- package/dist/modules/notifications/lib/notificationFactory.js.map +0 -7
- package/dist/modules/notifications/lib/notificationMapper.js +0 -34
- package/dist/modules/notifications/lib/notificationMapper.js.map +0 -7
- package/dist/modules/notifications/lib/notificationRecipients.js +0 -35
- package/dist/modules/notifications/lib/notificationRecipients.js.map +0 -7
- package/dist/modules/notifications/lib/notificationService.js +0 -279
- package/dist/modules/notifications/lib/notificationService.js.map +0 -7
- package/dist/modules/notifications/lib/routeHelpers.js +0 -101
- package/dist/modules/notifications/lib/routeHelpers.js.map +0 -7
- package/dist/modules/notifications/lib/safeHref.js +0 -24
- package/dist/modules/notifications/lib/safeHref.js.map +0 -7
- package/dist/modules/notifications/migrations/Migration20260123000001.js +0 -70
- package/dist/modules/notifications/migrations/Migration20260123000001.js.map +0 -7
- package/dist/modules/notifications/migrations/Migration20260126150000.js +0 -37
- package/dist/modules/notifications/migrations/Migration20260126150000.js.map +0 -7
- package/dist/modules/notifications/migrations/Migration20260129082610.js +0 -13
- package/dist/modules/notifications/migrations/Migration20260129082610.js.map +0 -7
- package/dist/modules/notifications/subscribers/deliver-notification.js +0 -165
- package/dist/modules/notifications/subscribers/deliver-notification.js.map +0 -7
- package/dist/modules/notifications/workers/create-notification.worker.js +0 -70
- package/dist/modules/notifications/workers/create-notification.worker.js.map +0 -7
- package/dist/modules/sales/notifications.client.js +0 -51
- package/dist/modules/sales/notifications.client.js.map +0 -7
- package/dist/modules/sales/notifications.js +0 -88
- package/dist/modules/sales/notifications.js.map +0 -7
- package/dist/modules/sales/subscribers/quote-expiring-notification.js +0 -38
- package/dist/modules/sales/subscribers/quote-expiring-notification.js.map +0 -7
- package/dist/modules/sales/widgets/notifications/SalesOrderCreatedRenderer.js +0 -137
- package/dist/modules/sales/widgets/notifications/SalesOrderCreatedRenderer.js.map +0 -7
- package/dist/modules/sales/widgets/notifications/SalesQuoteCreatedRenderer.js +0 -137
- package/dist/modules/sales/widgets/notifications/SalesQuoteCreatedRenderer.js.map +0 -7
- package/dist/modules/sales/widgets/notifications/index.js +0 -7
- package/dist/modules/sales/widgets/notifications/index.js.map +0 -7
- package/dist/modules/sales/widgets/notifications/useSalesDocumentTotals.js +0 -60
- package/dist/modules/sales/widgets/notifications/useSalesDocumentTotals.js.map +0 -7
- package/dist/modules/staff/notifications.js +0 -75
- package/dist/modules/staff/notifications.js.map +0 -7
- package/dist/modules/workflows/notifications.js +0 -28
- package/dist/modules/workflows/notifications.js.map +0 -7
- package/dist/modules/workflows/subscribers/task-assigned-notification.js +0 -38
- package/dist/modules/workflows/subscribers/task-assigned-notification.js.map +0 -7
- package/generated/entities/notification/index.ts +0 -27
- package/src/modules/auth/api/profile/route.ts +0 -163
- package/src/modules/auth/backend/auth/profile/page.meta.ts +0 -9
- package/src/modules/auth/backend/auth/profile/page.tsx +0 -174
- package/src/modules/auth/notifications.ts +0 -109
- package/src/modules/business_rules/notifications.ts +0 -25
- package/src/modules/business_rules/subscribers/rule-execution-failed-notification.ts +0 -50
- package/src/modules/catalog/notifications.ts +0 -25
- package/src/modules/catalog/subscribers/low-stock-notification.ts +0 -52
- package/src/modules/customers/notifications.ts +0 -44
- package/src/modules/dashboards/lib/role-widgets.ts +0 -80
- package/src/modules/directory/api/get/tenants/lookup.ts +0 -75
- package/src/modules/notifications/__tests__/deliver-notification.test.ts +0 -195
- package/src/modules/notifications/__tests__/deliveryStrategies.test.ts +0 -19
- package/src/modules/notifications/__tests__/notificationService.test.ts +0 -208
- package/src/modules/notifications/acl.ts +0 -7
- package/src/modules/notifications/api/[id]/action/route.ts +0 -75
- package/src/modules/notifications/api/[id]/dismiss/route.ts +0 -12
- package/src/modules/notifications/api/[id]/read/route.ts +0 -12
- package/src/modules/notifications/api/[id]/restore/route.ts +0 -53
- package/src/modules/notifications/api/batch/route.ts +0 -14
- package/src/modules/notifications/api/feature/route.ts +0 -14
- package/src/modules/notifications/api/mark-all-read/route.ts +0 -34
- package/src/modules/notifications/api/openapi.ts +0 -76
- package/src/modules/notifications/api/role/route.ts +0 -14
- package/src/modules/notifications/api/route.ts +0 -92
- package/src/modules/notifications/api/settings/route.ts +0 -157
- package/src/modules/notifications/api/unread-count/route.ts +0 -38
- package/src/modules/notifications/backend/config/notifications/page.meta.ts +0 -22
- package/src/modules/notifications/backend/config/notifications/page.tsx +0 -12
- package/src/modules/notifications/cli.ts +0 -18
- package/src/modules/notifications/data/entities.ts +0 -99
- package/src/modules/notifications/data/validators.ts +0 -115
- package/src/modules/notifications/di.ts +0 -11
- package/src/modules/notifications/emails/NotificationEmail.tsx +0 -98
- package/src/modules/notifications/frontend/NotificationInboxPageClient.tsx +0 -42
- package/src/modules/notifications/frontend/NotificationSettingsPageClient.tsx +0 -233
- package/src/modules/notifications/i18n/de.json +0 -50
- package/src/modules/notifications/i18n/en.json +0 -50
- package/src/modules/notifications/i18n/es.json +0 -50
- package/src/modules/notifications/i18n/pl.json +0 -50
- package/src/modules/notifications/index.ts +0 -12
- package/src/modules/notifications/lib/deliveryConfig.ts +0 -153
- package/src/modules/notifications/lib/deliveryStrategies.ts +0 -50
- package/src/modules/notifications/lib/events.ts +0 -48
- package/src/modules/notifications/lib/notificationBuilder.ts +0 -121
- package/src/modules/notifications/lib/notificationFactory.ts +0 -76
- package/src/modules/notifications/lib/notificationMapper.ts +0 -33
- package/src/modules/notifications/lib/notificationRecipients.ts +0 -83
- package/src/modules/notifications/lib/notificationService.ts +0 -414
- package/src/modules/notifications/lib/routeHelpers.ts +0 -151
- package/src/modules/notifications/lib/safeHref.ts +0 -29
- package/src/modules/notifications/migrations/.snapshot-open-mercato.json +0 -336
- package/src/modules/notifications/migrations/Migration20260123000001.ts +0 -73
- package/src/modules/notifications/migrations/Migration20260126150000.ts +0 -39
- package/src/modules/notifications/migrations/Migration20260129082610.ts +0 -13
- package/src/modules/notifications/subscribers/deliver-notification.ts +0 -204
- package/src/modules/notifications/workers/create-notification.worker.ts +0 -122
- package/src/modules/sales/notifications.client.ts +0 -65
- package/src/modules/sales/notifications.ts +0 -82
- package/src/modules/sales/subscribers/quote-expiring-notification.ts +0 -53
- package/src/modules/sales/widgets/notifications/SalesOrderCreatedRenderer.tsx +0 -156
- package/src/modules/sales/widgets/notifications/SalesQuoteCreatedRenderer.tsx +0 -156
- package/src/modules/sales/widgets/notifications/index.ts +0 -2
- package/src/modules/sales/widgets/notifications/useSalesDocumentTotals.ts +0 -81
- package/src/modules/staff/notifications.ts +0 -71
- package/src/modules/workflows/notifications.ts +0 -25
- package/src/modules/workflows/subscribers/task-assigned-notification.ts +0 -53
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
|
|
2
|
+
import CustomerTodosWidget from './widget.client'
|
|
2
3
|
import { DEFAULT_SETTINGS, hydrateCustomerTodoSettings, type CustomerTodoWidgetSettings } from './config'
|
|
3
|
-
const CustomerTodosWidget = lazyDashboardWidget(() => import('./widget.client'))
|
|
4
4
|
|
|
5
5
|
const widget: DashboardWidgetModule<CustomerTodoWidgetSettings> = {
|
|
6
6
|
metadata: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
|
|
2
|
+
import CustomerNewCustomersWidget from './widget.client'
|
|
2
3
|
import { DEFAULT_SETTINGS, hydrateNewCustomersSettings, type CustomerNewCustomersSettings } from './config'
|
|
3
|
-
const CustomerNewCustomersWidget = lazyDashboardWidget(() => import('./widget.client'))
|
|
4
4
|
|
|
5
5
|
const widget: DashboardWidgetModule<CustomerNewCustomersSettings> = {
|
|
6
6
|
metadata: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
|
|
2
|
+
import CustomerNewDealsWidget from './widget.client'
|
|
2
3
|
import { DEFAULT_SETTINGS, hydrateNewDealsSettings, type CustomerNewDealsSettings } from './config'
|
|
3
|
-
const CustomerNewDealsWidget = lazyDashboardWidget(() => import('./widget.client'))
|
|
4
4
|
|
|
5
5
|
const widget: DashboardWidgetModule<CustomerNewDealsSettings> = {
|
|
6
6
|
metadata: {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
|
|
2
|
+
import CustomerNextInteractionsWidget from './widget.client'
|
|
2
3
|
import {
|
|
3
4
|
DEFAULT_SETTINGS,
|
|
4
5
|
hydrateNextInteractionsSettings,
|
|
5
6
|
type CustomerNextInteractionsSettings,
|
|
6
7
|
} from './config'
|
|
7
|
-
const CustomerNextInteractionsWidget = lazyDashboardWidget(() => import('./widget.client'))
|
|
8
8
|
|
|
9
9
|
const widget: DashboardWidgetModule<CustomerNextInteractionsSettings> = {
|
|
10
10
|
metadata: {
|
|
@@ -4,7 +4,6 @@ import type { EntityManager } from '@mikro-orm/postgresql'
|
|
|
4
4
|
import { DashboardRoleWidgets } from '@open-mercato/core/modules/dashboards/data/entities'
|
|
5
5
|
import { Role } from '@open-mercato/core/modules/auth/data/entities'
|
|
6
6
|
import { loadAllWidgets } from '@open-mercato/core/modules/dashboards/lib/widgets'
|
|
7
|
-
import { appendWidgetsToRoles, resolveAnalyticsWidgetIds } from '@open-mercato/core/modules/dashboards/lib/role-widgets'
|
|
8
7
|
import { seedAnalyticsData } from './seed/analytics'
|
|
9
8
|
|
|
10
9
|
type Args = Record<string, string>
|
|
@@ -42,25 +41,15 @@ export async function seedDashboardDefaultsForTenant(
|
|
|
42
41
|
const widgetMap = new Map(widgets.map((widget) => [widget.metadata.id, widget]))
|
|
43
42
|
const resolvedWidgetIds = widgetIds && widgetIds.length
|
|
44
43
|
? widgetIds.filter((id) => widgetMap.has(id))
|
|
45
|
-
:
|
|
46
|
-
const defaultWidgetIds = widgets
|
|
47
|
-
.filter((widget) => widget.metadata.defaultEnabled)
|
|
48
|
-
.map((widget) => widget.metadata.id)
|
|
49
|
-
const allWidgetIds = widgets.map((widget) => widget.metadata.id)
|
|
44
|
+
: widgets.filter((widget) => widget.metadata.defaultEnabled).map((widget) => widget.metadata.id)
|
|
50
45
|
|
|
51
|
-
if (resolvedWidgetIds
|
|
46
|
+
if (!resolvedWidgetIds.length) {
|
|
52
47
|
log('No widgets resolved for dashboard seeding.')
|
|
53
48
|
return false
|
|
54
49
|
}
|
|
55
50
|
|
|
56
51
|
await em.transactional(async (tem) => {
|
|
57
52
|
for (const roleName of roleNames) {
|
|
58
|
-
const isAdminRole = roleName === 'admin' || roleName === 'superadmin'
|
|
59
|
-
const roleWidgetIds = resolvedWidgetIds ?? (isAdminRole ? allWidgetIds : defaultWidgetIds)
|
|
60
|
-
if (!roleWidgetIds.length) {
|
|
61
|
-
log(`No widgets resolved for role "${roleName}".`)
|
|
62
|
-
continue
|
|
63
|
-
}
|
|
64
53
|
const role = await tem.findOne(Role, { name: roleName })
|
|
65
54
|
if (!role) {
|
|
66
55
|
log(`Skipping role "${roleName}" (not found)`)
|
|
@@ -73,7 +62,7 @@ export async function seedDashboardDefaultsForTenant(
|
|
|
73
62
|
deletedAt: null,
|
|
74
63
|
})
|
|
75
64
|
if (existing) {
|
|
76
|
-
existing.widgetIdsJson =
|
|
65
|
+
existing.widgetIdsJson = resolvedWidgetIds
|
|
77
66
|
tem.persist(existing)
|
|
78
67
|
log(`Updated dashboard widgets for role "${roleName}"`)
|
|
79
68
|
} else {
|
|
@@ -81,7 +70,7 @@ export async function seedDashboardDefaultsForTenant(
|
|
|
81
70
|
roleId: String(role.id),
|
|
82
71
|
tenantId,
|
|
83
72
|
organizationId,
|
|
84
|
-
widgetIdsJson:
|
|
73
|
+
widgetIdsJson: resolvedWidgetIds,
|
|
85
74
|
createdAt: new Date(),
|
|
86
75
|
updatedAt: null,
|
|
87
76
|
deletedAt: null,
|
|
@@ -131,45 +120,6 @@ const seedDefaults: ModuleCli = {
|
|
|
131
120
|
},
|
|
132
121
|
}
|
|
133
122
|
|
|
134
|
-
const enableAnalyticsWidgets: ModuleCli = {
|
|
135
|
-
command: 'enable-analytics-widgets',
|
|
136
|
-
async run(rest) {
|
|
137
|
-
const args = parseArgs(rest)
|
|
138
|
-
const tenantId = args.tenant || args.tenantId || null
|
|
139
|
-
const organizationId = args.organization || args.organizationId || args.org || null
|
|
140
|
-
const roleCsv = args.roles || 'admin,employee'
|
|
141
|
-
if (!tenantId) {
|
|
142
|
-
console.error('Usage: mercato dashboards enable-analytics-widgets --tenant <tenantId> [--org <orgId>] [--roles admin,employee]')
|
|
143
|
-
return
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
const roleNames = roleCsv
|
|
147
|
-
.split(',')
|
|
148
|
-
.map((name) => name.trim())
|
|
149
|
-
.filter(Boolean)
|
|
150
|
-
|
|
151
|
-
if (!roleNames.length) {
|
|
152
|
-
console.log('No roles provided, nothing to update.')
|
|
153
|
-
return
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
const { resolve } = await createRequestContainer()
|
|
157
|
-
const em = resolve('em') as EntityManager
|
|
158
|
-
const widgetIds = await resolveAnalyticsWidgetIds()
|
|
159
|
-
|
|
160
|
-
const updated = await appendWidgetsToRoles(em, {
|
|
161
|
-
tenantId,
|
|
162
|
-
organizationId,
|
|
163
|
-
roleNames,
|
|
164
|
-
widgetIds,
|
|
165
|
-
})
|
|
166
|
-
|
|
167
|
-
if (!updated) {
|
|
168
|
-
console.log('No dashboard role widgets updated.')
|
|
169
|
-
}
|
|
170
|
-
},
|
|
171
|
-
}
|
|
172
|
-
|
|
173
123
|
const seedAnalytics: ModuleCli = {
|
|
174
124
|
command: 'seed-analytics',
|
|
175
125
|
async run(rest) {
|
|
@@ -332,4 +282,4 @@ const debugAnalytics: ModuleCli = {
|
|
|
332
282
|
},
|
|
333
283
|
}
|
|
334
284
|
|
|
335
|
-
export default [seedDefaults,
|
|
285
|
+
export default [seedDefaults, seedAnalytics, debugAnalytics]
|
|
@@ -44,13 +44,9 @@ type UserProps = BaseProps & {
|
|
|
44
44
|
|
|
45
45
|
type WidgetVisibilityEditorProps = RoleProps | UserProps
|
|
46
46
|
|
|
47
|
-
export type WidgetVisibilityEditorHandle = {
|
|
48
|
-
save: () => Promise<void>
|
|
49
|
-
}
|
|
50
|
-
|
|
51
47
|
const EMPTY: string[] = []
|
|
52
48
|
|
|
53
|
-
export
|
|
49
|
+
export function WidgetVisibilityEditor(props: WidgetVisibilityEditorProps) {
|
|
54
50
|
const t = useT()
|
|
55
51
|
const { kind, targetId, tenantId, organizationId } = props
|
|
56
52
|
const [catalog, setCatalog] = React.useState<WidgetCatalogItem[]>([])
|
|
@@ -64,15 +60,6 @@ export const WidgetVisibilityEditor = React.forwardRef<WidgetVisibilityEditorHan
|
|
|
64
60
|
const [originalMode, setOriginalMode] = React.useState<'inherit' | 'override'>('inherit')
|
|
65
61
|
const [effective, setEffective] = React.useState<string[]>(EMPTY)
|
|
66
62
|
|
|
67
|
-
const dirty = React.useMemo(() => {
|
|
68
|
-
if (kind === 'user') {
|
|
69
|
-
if (mode !== originalMode) return true
|
|
70
|
-
if (mode === 'override') return selected.join('|') !== original.join('|')
|
|
71
|
-
return false
|
|
72
|
-
}
|
|
73
|
-
return selected.join('|') !== original.join('|')
|
|
74
|
-
}, [kind, mode, original, originalMode, selected])
|
|
75
|
-
|
|
76
63
|
const loadCatalog = React.useCallback(async () => {
|
|
77
64
|
const data = await readApiResultOrThrow<{ items?: unknown[] }>(
|
|
78
65
|
'/api/dashboards/widgets/catalog',
|
|
@@ -162,9 +149,6 @@ export const WidgetVisibilityEditor = React.forwardRef<WidgetVisibilityEditorHan
|
|
|
162
149
|
}, [original, originalMode])
|
|
163
150
|
|
|
164
151
|
const save = React.useCallback(async () => {
|
|
165
|
-
if (loading) return
|
|
166
|
-
if (error && catalog.length === 0) return
|
|
167
|
-
if (!dirty) return
|
|
168
152
|
setSaving(true)
|
|
169
153
|
setError(null)
|
|
170
154
|
try {
|
|
@@ -218,9 +202,16 @@ export const WidgetVisibilityEditor = React.forwardRef<WidgetVisibilityEditorHan
|
|
|
218
202
|
} finally {
|
|
219
203
|
setSaving(false)
|
|
220
204
|
}
|
|
221
|
-
}, [
|
|
205
|
+
}, [kind, mode, organizationId, selected, t, targetId, tenantId])
|
|
222
206
|
|
|
223
|
-
React.
|
|
207
|
+
const dirty = React.useMemo(() => {
|
|
208
|
+
if (kind === 'user') {
|
|
209
|
+
if (mode !== originalMode) return true
|
|
210
|
+
if (mode === 'override') return selected.join('|') !== original.join('|')
|
|
211
|
+
return false
|
|
212
|
+
}
|
|
213
|
+
return selected.join('|') !== original.join('|')
|
|
214
|
+
}, [kind, mode, original, originalMode, selected])
|
|
224
215
|
|
|
225
216
|
if (loading) {
|
|
226
217
|
return (
|
|
@@ -306,6 +297,4 @@ export const WidgetVisibilityEditor = React.forwardRef<WidgetVisibilityEditorHan
|
|
|
306
297
|
</div>
|
|
307
298
|
</div>
|
|
308
299
|
)
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
WidgetVisibilityEditor.displayName = 'WidgetVisibilityEditor'
|
|
300
|
+
}
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
import type { EntityManager } from '@mikro-orm/postgresql'
|
|
2
2
|
import type { CacheStrategy } from '@open-mercato/cache'
|
|
3
3
|
import { createHash } from 'node:crypto'
|
|
4
|
-
import { decryptWithAesGcm } from '@open-mercato/shared/lib/encryption/aes'
|
|
5
|
-
import { resolveTenantEncryptionService } from '@open-mercato/shared/lib/encryption/customFieldValues'
|
|
6
|
-
import { resolveEntityIdFromMetadata } from '@open-mercato/shared/lib/encryption/entityIds'
|
|
7
|
-
import { findWithDecryption } from '@open-mercato/shared/lib/encryption/find'
|
|
8
4
|
import {
|
|
9
5
|
type DateRangePreset,
|
|
10
6
|
resolveDateRange,
|
|
@@ -21,8 +17,6 @@ import {
|
|
|
21
17
|
import type { AnalyticsRegistry } from './analyticsRegistry'
|
|
22
18
|
|
|
23
19
|
const WIDGET_DATA_CACHE_TTL = 120_000
|
|
24
|
-
const WIDGET_DATA_SEGMENT_TTL = 86_400_000
|
|
25
|
-
const WIDGET_DATA_SEGMENT_KEY = 'widget-data:__segment__'
|
|
26
20
|
|
|
27
21
|
const SAFE_IDENTIFIER_PATTERN = /^[a-zA-Z_][a-zA-Z0-9_]*$/
|
|
28
22
|
|
|
@@ -174,11 +168,6 @@ export class WidgetDataService {
|
|
|
174
168
|
const tags = this.getCacheTags(request.entityType)
|
|
175
169
|
try {
|
|
176
170
|
await this.cache.set(cacheKey, response, { ttl: WIDGET_DATA_CACHE_TTL, tags })
|
|
177
|
-
await this.cache.set(
|
|
178
|
-
WIDGET_DATA_SEGMENT_KEY,
|
|
179
|
-
{ updatedAt: response.metadata.fetchedAt },
|
|
180
|
-
{ ttl: WIDGET_DATA_SEGMENT_TTL, tags: ['widget-data'] },
|
|
181
|
-
)
|
|
182
171
|
} catch {
|
|
183
172
|
}
|
|
184
173
|
}
|
|
@@ -293,75 +282,6 @@ export class WidgetDataService {
|
|
|
293
282
|
assertSafeIdentifier(config.idColumn, 'id column')
|
|
294
283
|
assertSafeIdentifier(config.labelColumn, 'label column')
|
|
295
284
|
|
|
296
|
-
const meta = this.resolveEntityMetadata(config.table)
|
|
297
|
-
const idProp = meta ? this.resolveEntityPropertyName(meta, config.idColumn) : null
|
|
298
|
-
const labelProp = meta ? this.resolveEntityPropertyName(meta, config.labelColumn) : null
|
|
299
|
-
const tenantProp = meta
|
|
300
|
-
? (this.resolveEntityPropertyName(meta, 'tenant_id') ?? this.resolveEntityPropertyName(meta, 'tenantId'))
|
|
301
|
-
: null
|
|
302
|
-
const organizationProp = meta
|
|
303
|
-
? (this.resolveEntityPropertyName(meta, 'organization_id') ?? this.resolveEntityPropertyName(meta, 'organizationId'))
|
|
304
|
-
: null
|
|
305
|
-
const entityName = meta ? ((meta as any).class ?? meta.className ?? meta.name) : null
|
|
306
|
-
|
|
307
|
-
if (meta && idProp && labelProp && tenantProp && entityName) {
|
|
308
|
-
const where: Record<string, unknown> = {
|
|
309
|
-
[idProp]: { $in: uniqueIds },
|
|
310
|
-
[tenantProp]: this.scope.tenantId,
|
|
311
|
-
}
|
|
312
|
-
if (organizationProp && this.scope.organizationIds && this.scope.organizationIds.length > 0) {
|
|
313
|
-
where[organizationProp] = { $in: this.scope.organizationIds }
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
try {
|
|
317
|
-
const records = await findWithDecryption(
|
|
318
|
-
this.em,
|
|
319
|
-
entityName,
|
|
320
|
-
where,
|
|
321
|
-
{ fields: [idProp, labelProp, tenantProp, organizationProp].filter(Boolean) },
|
|
322
|
-
{ tenantId: this.scope.tenantId, organizationId: this.resolveOrganizationId() },
|
|
323
|
-
)
|
|
324
|
-
|
|
325
|
-
const encryptionService = resolveTenantEncryptionService(this.em as any)
|
|
326
|
-
const dek = encryptionService?.isEnabled() ? await encryptionService.getDek(this.scope.tenantId) : null
|
|
327
|
-
let hasEncryptedLabels = false
|
|
328
|
-
let hasDecryptedLabels = false
|
|
329
|
-
|
|
330
|
-
const labelMap = new Map<string, string>()
|
|
331
|
-
for (const record of records as Array<Record<string, unknown>>) {
|
|
332
|
-
const id = record[idProp]
|
|
333
|
-
let labelValue = record[labelProp]
|
|
334
|
-
if (typeof labelValue === 'string' && this.isEncryptedPayload(labelValue)) {
|
|
335
|
-
hasEncryptedLabels = true
|
|
336
|
-
if (dek?.key) {
|
|
337
|
-
const decrypted = this.decryptWithDek(labelValue, dek.key)
|
|
338
|
-
if (decrypted !== null) {
|
|
339
|
-
labelValue = decrypted
|
|
340
|
-
hasDecryptedLabels = true
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
} else if (labelValue != null && labelValue !== '') {
|
|
344
|
-
hasDecryptedLabels = true
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
if (typeof id === 'string' && labelValue != null && labelValue !== '') {
|
|
348
|
-
labelMap.set(id, String(labelValue))
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
if (labelMap.size > 0 && (!hasEncryptedLabels || hasDecryptedLabels)) {
|
|
353
|
-
return data.map((item) => ({
|
|
354
|
-
...item,
|
|
355
|
-
groupLabel: typeof item.groupKey === 'string' && labelMap.has(item.groupKey)
|
|
356
|
-
? labelMap.get(item.groupKey)!
|
|
357
|
-
: undefined,
|
|
358
|
-
}))
|
|
359
|
-
}
|
|
360
|
-
} catch {
|
|
361
|
-
// fall through to SQL resolution
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
|
|
365
285
|
const clauses = [`"${config.idColumn}" = ANY(?::uuid[])`, 'tenant_id = ?']
|
|
366
286
|
const params: unknown[] = [`{${uniqueIds.join(',')}}`, this.scope.tenantId]
|
|
367
287
|
|
|
@@ -370,43 +290,17 @@ export class WidgetDataService {
|
|
|
370
290
|
params.push(`{${this.scope.organizationIds.join(',')}}`)
|
|
371
291
|
}
|
|
372
292
|
|
|
373
|
-
const sql = `SELECT "${config.idColumn}" as id, "${config.labelColumn}" as label
|
|
293
|
+
const sql = `SELECT "${config.idColumn}" as id, "${config.labelColumn}" as label FROM "${config.table}" WHERE ${clauses.join(
|
|
374
294
|
' AND ',
|
|
375
295
|
)}`
|
|
376
296
|
|
|
377
297
|
try {
|
|
378
298
|
const labelRows = await this.em.getConnection().execute(sql, params)
|
|
379
|
-
const entityId = this.resolveEntityId(meta)
|
|
380
|
-
const encryptionService = resolveTenantEncryptionService(this.em as any)
|
|
381
|
-
const organizationId = this.resolveOrganizationId()
|
|
382
|
-
const dek = encryptionService?.isEnabled() ? await encryptionService.getDek(this.scope.tenantId) : null
|
|
383
299
|
|
|
384
300
|
const labelMap = new Map<string, string>()
|
|
385
|
-
for (const row of labelRows as Array<{ id: string; label: string | null
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
const rowOrgId = row.organization_id ?? organizationId ?? null
|
|
389
|
-
const decrypted = await encryptionService.decryptEntityPayload(
|
|
390
|
-
entityId,
|
|
391
|
-
{ [config.labelColumn]: labelValue },
|
|
392
|
-
this.scope.tenantId,
|
|
393
|
-
rowOrgId,
|
|
394
|
-
)
|
|
395
|
-
const resolved = decrypted[config.labelColumn]
|
|
396
|
-
if (typeof resolved === 'string' || typeof resolved === 'number') {
|
|
397
|
-
labelValue = String(resolved)
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
if (labelValue && dek?.key && this.isEncryptedPayload(labelValue)) {
|
|
402
|
-
const decrypted = this.decryptWithDek(labelValue, dek.key)
|
|
403
|
-
if (decrypted !== null) {
|
|
404
|
-
labelValue = decrypted
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
if (row.id && labelValue != null && labelValue !== '') {
|
|
409
|
-
labelMap.set(row.id, labelValue)
|
|
301
|
+
for (const row of labelRows as Array<{ id: string; label: string | null }>) {
|
|
302
|
+
if (row.id && row.label != null && row.label !== '') {
|
|
303
|
+
labelMap.set(row.id, row.label)
|
|
410
304
|
}
|
|
411
305
|
}
|
|
412
306
|
|
|
@@ -423,60 +317,6 @@ export class WidgetDataService {
|
|
|
423
317
|
}))
|
|
424
318
|
}
|
|
425
319
|
}
|
|
426
|
-
|
|
427
|
-
private resolveOrganizationId(): string | null {
|
|
428
|
-
if (!this.scope.organizationIds || this.scope.organizationIds.length !== 1) return null
|
|
429
|
-
return this.scope.organizationIds[0] ?? null
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
private resolveEntityMetadata(tableName: string): Record<string, any> | null {
|
|
433
|
-
const registry = (this.em as any)?.getMetadata?.()
|
|
434
|
-
if (!registry) return null
|
|
435
|
-
const entries =
|
|
436
|
-
(typeof registry.getAll === 'function' && registry.getAll()) ||
|
|
437
|
-
(Array.isArray(registry.metadata) ? registry.metadata : Object.values(registry.metadata ?? {}))
|
|
438
|
-
const metas = Array.isArray(entries) ? entries : Object.values(entries ?? {})
|
|
439
|
-
const match = metas.find((meta: any) => {
|
|
440
|
-
const table = meta?.tableName ?? meta?.collection
|
|
441
|
-
if (typeof table !== 'string') return false
|
|
442
|
-
if (table === tableName) return true
|
|
443
|
-
return table.split('.').pop() === tableName
|
|
444
|
-
})
|
|
445
|
-
return match ?? null
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
private resolveEntityPropertyName(meta: Record<string, any>, columnName: string): string | null {
|
|
449
|
-
const properties = meta?.properties ? Object.values(meta.properties) : []
|
|
450
|
-
for (const prop of properties as Array<Record<string, any>>) {
|
|
451
|
-
const fieldName = prop?.fieldName
|
|
452
|
-
const fieldNames = prop?.fieldNames
|
|
453
|
-
if (typeof fieldName === 'string' && fieldName === columnName) return prop?.name ?? null
|
|
454
|
-
if (Array.isArray(fieldNames) && fieldNames.includes(columnName)) return prop?.name ?? null
|
|
455
|
-
if (prop?.name === columnName) return prop?.name ?? null
|
|
456
|
-
}
|
|
457
|
-
return null
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
private resolveEntityId(meta: Record<string, any> | null): string | null {
|
|
461
|
-
if (!meta) return null
|
|
462
|
-
try {
|
|
463
|
-
return resolveEntityIdFromMetadata(meta as any)
|
|
464
|
-
} catch {
|
|
465
|
-
return null
|
|
466
|
-
}
|
|
467
|
-
}
|
|
468
|
-
|
|
469
|
-
private isEncryptedPayload(value: string): boolean {
|
|
470
|
-
const parts = value.split(':')
|
|
471
|
-
return parts.length === 4 && parts[3] === 'v1'
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
private decryptWithDek(value: string, dek: string): string | null {
|
|
475
|
-
const first = decryptWithAesGcm(value, dek)
|
|
476
|
-
if (first === null) return null
|
|
477
|
-
if (!this.isEncryptedPayload(first)) return first
|
|
478
|
-
return decryptWithAesGcm(first, dek) ?? first
|
|
479
|
-
}
|
|
480
320
|
}
|
|
481
321
|
|
|
482
322
|
export function createWidgetDataService(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
|
|
2
|
+
import AovKpiWidget from './widget.client'
|
|
2
3
|
import { DEFAULT_SETTINGS, hydrateSettings, type AovKpiSettings } from './config'
|
|
3
|
-
const AovKpiWidget = lazyDashboardWidget(() => import('./widget.client'))
|
|
4
4
|
|
|
5
5
|
const widget: DashboardWidgetModule<AovKpiSettings> = {
|
|
6
6
|
metadata: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
|
|
2
|
+
import NewCustomersKpiWidget from './widget.client'
|
|
2
3
|
import { DEFAULT_SETTINGS, hydrateSettings, type NewCustomersKpiSettings } from './config'
|
|
3
|
-
const NewCustomersKpiWidget = lazyDashboardWidget(() => import('./widget.client'))
|
|
4
4
|
|
|
5
5
|
const widget: DashboardWidgetModule<NewCustomersKpiSettings> = {
|
|
6
6
|
metadata: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
|
|
2
|
+
import OrdersByStatusWidget from './widget.client'
|
|
2
3
|
import { DEFAULT_SETTINGS, hydrateSettings, type OrdersByStatusSettings } from './config'
|
|
3
|
-
const OrdersByStatusWidget = lazyDashboardWidget(() => import('./widget.client'))
|
|
4
4
|
|
|
5
5
|
const widget: DashboardWidgetModule<OrdersByStatusSettings> = {
|
|
6
6
|
metadata: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
|
|
2
|
+
import OrdersKpiWidget from './widget.client'
|
|
2
3
|
import { DEFAULT_SETTINGS, hydrateSettings, type OrdersKpiSettings } from './config'
|
|
3
|
-
const OrdersKpiWidget = lazyDashboardWidget(() => import('./widget.client'))
|
|
4
4
|
|
|
5
5
|
const widget: DashboardWidgetModule<OrdersKpiSettings> = {
|
|
6
6
|
metadata: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
|
|
2
|
+
import PipelineSummaryWidget from './widget.client'
|
|
2
3
|
import { DEFAULT_SETTINGS, hydrateSettings, type PipelineSummarySettings } from './config'
|
|
3
|
-
const PipelineSummaryWidget = lazyDashboardWidget(() => import('./widget.client'))
|
|
4
4
|
|
|
5
5
|
const widget: DashboardWidgetModule<PipelineSummarySettings> = {
|
|
6
6
|
metadata: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
|
|
2
|
+
import RevenueKpiWidget from './widget.client'
|
|
2
3
|
import { DEFAULT_SETTINGS, hydrateSettings, type RevenueKpiSettings } from './config'
|
|
3
|
-
const RevenueKpiWidget = lazyDashboardWidget(() => import('./widget.client'))
|
|
4
4
|
|
|
5
5
|
const widget: DashboardWidgetModule<RevenueKpiSettings> = {
|
|
6
6
|
metadata: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
|
|
2
|
+
import RevenueTrendWidget from './widget.client'
|
|
2
3
|
import { DEFAULT_SETTINGS, hydrateSettings, type RevenueTrendSettings } from './config'
|
|
3
|
-
const RevenueTrendWidget = lazyDashboardWidget(() => import('./widget.client'))
|
|
4
4
|
|
|
5
5
|
const widget: DashboardWidgetModule<RevenueTrendSettings> = {
|
|
6
6
|
metadata: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
|
|
2
|
+
import SalesByRegionWidget from './widget.client'
|
|
2
3
|
import { DEFAULT_SETTINGS, hydrateSettings, type SalesByRegionSettings } from './config'
|
|
3
|
-
const SalesByRegionWidget = lazyDashboardWidget(() => import('./widget.client'))
|
|
4
4
|
|
|
5
5
|
const widget: DashboardWidgetModule<SalesByRegionSettings> = {
|
|
6
6
|
metadata: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
|
|
2
|
+
import TopCustomersWidget from './widget.client'
|
|
2
3
|
import { DEFAULT_SETTINGS, hydrateSettings, type TopCustomersSettings } from './config'
|
|
3
|
-
const TopCustomersWidget = lazyDashboardWidget(() => import('./widget.client'))
|
|
4
4
|
|
|
5
5
|
const widget: DashboardWidgetModule<TopCustomersSettings> = {
|
|
6
6
|
metadata: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
|
|
2
|
+
import TopProductsWidget from './widget.client'
|
|
2
3
|
import { DEFAULT_SETTINGS, hydrateSettings, type TopProductsSettings } from './config'
|
|
3
|
-
const TopProductsWidget = lazyDashboardWidget(() => import('./widget.client'))
|
|
4
4
|
|
|
5
5
|
const widget: DashboardWidgetModule<TopProductsSettings> = {
|
|
6
6
|
metadata: {
|
|
@@ -171,14 +171,12 @@ export function DictionaryTable({
|
|
|
171
171
|
const items: RowActionItem[] = []
|
|
172
172
|
if (onEdit) {
|
|
173
173
|
items.push({
|
|
174
|
-
id: 'edit',
|
|
175
174
|
label: translations.editLabel,
|
|
176
175
|
onSelect: () => onEdit(entry),
|
|
177
176
|
})
|
|
178
177
|
}
|
|
179
178
|
if (onDelete) {
|
|
180
179
|
items.push({
|
|
181
|
-
id: 'delete',
|
|
182
180
|
label: translations.deleteLabel,
|
|
183
181
|
onSelect: () => onDelete(entry),
|
|
184
182
|
destructive: true,
|
|
@@ -235,8 +235,8 @@ export default function DirectoryOrganizationsPage() {
|
|
|
235
235
|
canManage ? (
|
|
236
236
|
<RowActions
|
|
237
237
|
items={[
|
|
238
|
-
{
|
|
239
|
-
{
|
|
238
|
+
{ label: t('directory.organizations.list.actions.edit', 'Edit'), href: `/backend/directory/organizations/${row.id}/edit` },
|
|
239
|
+
{ label: t('directory.organizations.list.actions.delete', 'Delete'), destructive: true, onSelect: () => handleDelete(row) },
|
|
240
240
|
]}
|
|
241
241
|
/>
|
|
242
242
|
) : null
|
|
@@ -160,8 +160,8 @@ export default function DirectoryTenantsPage() {
|
|
|
160
160
|
canManage ? (
|
|
161
161
|
<RowActions
|
|
162
162
|
items={[
|
|
163
|
-
{
|
|
164
|
-
{
|
|
163
|
+
{ label: t('common.edit', 'Edit'), href: `/backend/directory/tenants/${row.id}/edit` },
|
|
164
|
+
{ label: t('common.delete', 'Delete'), destructive: true, onSelect: () => handleDelete(row) },
|
|
165
165
|
]}
|
|
166
166
|
/>
|
|
167
167
|
) : null
|
|
@@ -338,8 +338,8 @@ export RECORD_ID="<record uuid>"`}</code></pre>
|
|
|
338
338
|
rowActions={(row) => (
|
|
339
339
|
<RowActions
|
|
340
340
|
items={[
|
|
341
|
-
{
|
|
342
|
-
{
|
|
341
|
+
{ label: 'Edit', href: `/backend/entities/user/${encodeURIComponent(entityId)}/records/${encodeURIComponent(String((row as any).id))}` },
|
|
342
|
+
{ label: 'Delete', destructive: true, onSelect: async () => {
|
|
343
343
|
try {
|
|
344
344
|
if (typeof window !== 'undefined') {
|
|
345
345
|
const ok = window.confirm('Delete this record?')
|
|
@@ -88,7 +88,7 @@ export default function SystemEntitiesTable() {
|
|
|
88
88
|
rowActions={(row) => (
|
|
89
89
|
<RowActions
|
|
90
90
|
items={[
|
|
91
|
-
{
|
|
91
|
+
{ label: 'Edit', href: `/backend/entities/system/${encodeURIComponent(row.entityId)}` },
|
|
92
92
|
]}
|
|
93
93
|
/>
|
|
94
94
|
)}
|
|
@@ -110,8 +110,8 @@ export default function UserEntitiesTable() {
|
|
|
110
110
|
rowActions={(row) => (
|
|
111
111
|
<RowActions
|
|
112
112
|
items={[
|
|
113
|
-
{
|
|
114
|
-
{
|
|
113
|
+
{ label: t('common.edit', 'Edit'), href: `/backend/entities/user/${encodeURIComponent(row.entityId)}` },
|
|
114
|
+
{ label: t('entities.user.table.actions.showRecords', 'Show records'), href: `/backend/entities/user/${encodeURIComponent(row.entityId)}/records` },
|
|
115
115
|
]}
|
|
116
116
|
/>
|
|
117
117
|
)}
|
|
@@ -205,11 +205,12 @@ export function FeatureTogglesTable() {
|
|
|
205
205
|
}}
|
|
206
206
|
rowActions={(row) => (
|
|
207
207
|
<RowActions items={[
|
|
208
|
-
{
|
|
209
|
-
{
|
|
210
|
-
{
|
|
208
|
+
{ label: t('common.edit', 'Edit'), href: `/backend/feature-toggles/global/${row.id}/edit` },
|
|
209
|
+
{ label: t('common.view', 'Overrides'), href: `/backend/feature-toggles/global/${row.id}` },
|
|
210
|
+
{ label: t('common.delete', 'Delete'), destructive: true, onSelect: () => { void handleDelete(row) } },
|
|
211
211
|
]} />
|
|
212
212
|
)}
|
|
213
213
|
/>
|
|
214
214
|
)
|
|
215
215
|
}
|
|
216
|
+
|
|
@@ -161,7 +161,7 @@ export default function OverridesTable() {
|
|
|
161
161
|
}}
|
|
162
162
|
rowActions={(row) => (
|
|
163
163
|
<RowActions items={[
|
|
164
|
-
{
|
|
164
|
+
{ label: t('common.edit', 'Edit'), href: `/backend/feature-toggles/global/${row.toggleId}` },
|
|
165
165
|
]} />
|
|
166
166
|
)}
|
|
167
167
|
error={error ? error.message : undefined}
|
|
@@ -202,8 +202,8 @@ export default function PlannerAvailabilityRuleSetsPage() {
|
|
|
202
202
|
rowActions={(row) => (
|
|
203
203
|
<RowActions
|
|
204
204
|
items={[
|
|
205
|
-
{
|
|
206
|
-
{
|
|
205
|
+
{ label: labels.actions.edit, href: `/backend/planner/availability-rulesets/${row.id}` },
|
|
206
|
+
{ label: labels.actions.delete, destructive: true, onSelect: () => { void handleDelete(row) } },
|
|
207
207
|
]}
|
|
208
208
|
/>
|
|
209
209
|
)}
|