@open-mercato/core 0.4.2-canary-15c0b23a3a → 0.4.2-canary-da2b080494
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.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/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/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 +2 -4
- package/dist/modules/auth/data/validators.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 +0 -1
- package/dist/modules/auth/lib/setup-app.js.map +2 -2
- package/dist/modules/auth/services/authService.js +3 -3
- package/dist/modules/auth/services/authService.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/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/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 -132
- package/dist/modules/dashboards/services/widgetDataService.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/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/lib/transition-handler.js +6 -14
- package/dist/modules/workflows/lib/transition-handler.js.map +2 -2
- 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/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/admin/nav.ts +6 -10
- 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 -5
- package/src/modules/auth/frontend/reset/[token]/page.tsx +11 -24
- package/src/modules/auth/i18n/de.json +1 -43
- package/src/modules/auth/i18n/en.json +1 -43
- package/src/modules/auth/i18n/es.json +1 -43
- package/src/modules/auth/i18n/pl.json +1 -43
- package/src/modules/auth/lib/setup-app.ts +0 -1
- package/src/modules/auth/services/authService.ts +4 -4
- 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/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/dashboards/cli.ts +5 -55
- package/src/modules/dashboards/components/WidgetVisibilityEditor.tsx +11 -22
- package/src/modules/dashboards/services/widgetDataService.ts +4 -157
- 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/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/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/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/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/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 -300
- package/src/modules/notifications/migrations/Migration20260123000001.ts +0 -73
- package/src/modules/notifications/migrations/Migration20260126150000.ts +0 -39
- 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,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,
|
|
@@ -286,75 +282,6 @@ export class WidgetDataService {
|
|
|
286
282
|
assertSafeIdentifier(config.idColumn, 'id column')
|
|
287
283
|
assertSafeIdentifier(config.labelColumn, 'label column')
|
|
288
284
|
|
|
289
|
-
const meta = this.resolveEntityMetadata(config.table)
|
|
290
|
-
const idProp = meta ? this.resolveEntityPropertyName(meta, config.idColumn) : null
|
|
291
|
-
const labelProp = meta ? this.resolveEntityPropertyName(meta, config.labelColumn) : null
|
|
292
|
-
const tenantProp = meta
|
|
293
|
-
? (this.resolveEntityPropertyName(meta, 'tenant_id') ?? this.resolveEntityPropertyName(meta, 'tenantId'))
|
|
294
|
-
: null
|
|
295
|
-
const organizationProp = meta
|
|
296
|
-
? (this.resolveEntityPropertyName(meta, 'organization_id') ?? this.resolveEntityPropertyName(meta, 'organizationId'))
|
|
297
|
-
: null
|
|
298
|
-
const entityName = meta ? ((meta as any).class ?? meta.className ?? meta.name) : null
|
|
299
|
-
|
|
300
|
-
if (meta && idProp && labelProp && tenantProp && entityName) {
|
|
301
|
-
const where: Record<string, unknown> = {
|
|
302
|
-
[idProp]: { $in: uniqueIds },
|
|
303
|
-
[tenantProp]: this.scope.tenantId,
|
|
304
|
-
}
|
|
305
|
-
if (organizationProp && this.scope.organizationIds && this.scope.organizationIds.length > 0) {
|
|
306
|
-
where[organizationProp] = { $in: this.scope.organizationIds }
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
try {
|
|
310
|
-
const records = await findWithDecryption(
|
|
311
|
-
this.em,
|
|
312
|
-
entityName,
|
|
313
|
-
where,
|
|
314
|
-
{ fields: [idProp, labelProp, tenantProp, organizationProp].filter(Boolean) },
|
|
315
|
-
{ tenantId: this.scope.tenantId, organizationId: this.resolveOrganizationId() },
|
|
316
|
-
)
|
|
317
|
-
|
|
318
|
-
const encryptionService = resolveTenantEncryptionService(this.em as any)
|
|
319
|
-
const dek = encryptionService?.isEnabled() ? await encryptionService.getDek(this.scope.tenantId) : null
|
|
320
|
-
let hasEncryptedLabels = false
|
|
321
|
-
let hasDecryptedLabels = false
|
|
322
|
-
|
|
323
|
-
const labelMap = new Map<string, string>()
|
|
324
|
-
for (const record of records as Array<Record<string, unknown>>) {
|
|
325
|
-
const id = record[idProp]
|
|
326
|
-
let labelValue = record[labelProp]
|
|
327
|
-
if (typeof labelValue === 'string' && this.isEncryptedPayload(labelValue)) {
|
|
328
|
-
hasEncryptedLabels = true
|
|
329
|
-
if (dek?.key) {
|
|
330
|
-
const decrypted = this.decryptWithDek(labelValue, dek.key)
|
|
331
|
-
if (decrypted !== null) {
|
|
332
|
-
labelValue = decrypted
|
|
333
|
-
hasDecryptedLabels = true
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
} else if (labelValue != null && labelValue !== '') {
|
|
337
|
-
hasDecryptedLabels = true
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
if (typeof id === 'string' && labelValue != null && labelValue !== '') {
|
|
341
|
-
labelMap.set(id, String(labelValue))
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
if (labelMap.size > 0 && (!hasEncryptedLabels || hasDecryptedLabels)) {
|
|
346
|
-
return data.map((item) => ({
|
|
347
|
-
...item,
|
|
348
|
-
groupLabel: typeof item.groupKey === 'string' && labelMap.has(item.groupKey)
|
|
349
|
-
? labelMap.get(item.groupKey)!
|
|
350
|
-
: undefined,
|
|
351
|
-
}))
|
|
352
|
-
}
|
|
353
|
-
} catch {
|
|
354
|
-
// fall through to SQL resolution
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
|
|
358
285
|
const clauses = [`"${config.idColumn}" = ANY(?::uuid[])`, 'tenant_id = ?']
|
|
359
286
|
const params: unknown[] = [`{${uniqueIds.join(',')}}`, this.scope.tenantId]
|
|
360
287
|
|
|
@@ -363,43 +290,17 @@ export class WidgetDataService {
|
|
|
363
290
|
params.push(`{${this.scope.organizationIds.join(',')}}`)
|
|
364
291
|
}
|
|
365
292
|
|
|
366
|
-
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(
|
|
367
294
|
' AND ',
|
|
368
295
|
)}`
|
|
369
296
|
|
|
370
297
|
try {
|
|
371
298
|
const labelRows = await this.em.getConnection().execute(sql, params)
|
|
372
|
-
const entityId = this.resolveEntityId(meta)
|
|
373
|
-
const encryptionService = resolveTenantEncryptionService(this.em as any)
|
|
374
|
-
const organizationId = this.resolveOrganizationId()
|
|
375
|
-
const dek = encryptionService?.isEnabled() ? await encryptionService.getDek(this.scope.tenantId) : null
|
|
376
299
|
|
|
377
300
|
const labelMap = new Map<string, string>()
|
|
378
|
-
for (const row of labelRows as Array<{ id: string; label: string | null
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
const rowOrgId = row.organization_id ?? organizationId ?? null
|
|
382
|
-
const decrypted = await encryptionService.decryptEntityPayload(
|
|
383
|
-
entityId,
|
|
384
|
-
{ [config.labelColumn]: labelValue },
|
|
385
|
-
this.scope.tenantId,
|
|
386
|
-
rowOrgId,
|
|
387
|
-
)
|
|
388
|
-
const resolved = decrypted[config.labelColumn]
|
|
389
|
-
if (typeof resolved === 'string' || typeof resolved === 'number') {
|
|
390
|
-
labelValue = String(resolved)
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
if (labelValue && dek?.key && this.isEncryptedPayload(labelValue)) {
|
|
395
|
-
const decrypted = this.decryptWithDek(labelValue, dek.key)
|
|
396
|
-
if (decrypted !== null) {
|
|
397
|
-
labelValue = decrypted
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
if (row.id && labelValue != null && labelValue !== '') {
|
|
402
|
-
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)
|
|
403
304
|
}
|
|
404
305
|
}
|
|
405
306
|
|
|
@@ -416,60 +317,6 @@ export class WidgetDataService {
|
|
|
416
317
|
}))
|
|
417
318
|
}
|
|
418
319
|
}
|
|
419
|
-
|
|
420
|
-
private resolveOrganizationId(): string | null {
|
|
421
|
-
if (!this.scope.organizationIds || this.scope.organizationIds.length !== 1) return null
|
|
422
|
-
return this.scope.organizationIds[0] ?? null
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
private resolveEntityMetadata(tableName: string): Record<string, any> | null {
|
|
426
|
-
const registry = (this.em as any)?.getMetadata?.()
|
|
427
|
-
if (!registry) return null
|
|
428
|
-
const entries =
|
|
429
|
-
(typeof registry.getAll === 'function' && registry.getAll()) ||
|
|
430
|
-
(Array.isArray(registry.metadata) ? registry.metadata : Object.values(registry.metadata ?? {}))
|
|
431
|
-
const metas = Array.isArray(entries) ? entries : Object.values(entries ?? {})
|
|
432
|
-
const match = metas.find((meta: any) => {
|
|
433
|
-
const table = meta?.tableName ?? meta?.collection
|
|
434
|
-
if (typeof table !== 'string') return false
|
|
435
|
-
if (table === tableName) return true
|
|
436
|
-
return table.split('.').pop() === tableName
|
|
437
|
-
})
|
|
438
|
-
return match ?? null
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
private resolveEntityPropertyName(meta: Record<string, any>, columnName: string): string | null {
|
|
442
|
-
const properties = meta?.properties ? Object.values(meta.properties) : []
|
|
443
|
-
for (const prop of properties as Array<Record<string, any>>) {
|
|
444
|
-
const fieldName = prop?.fieldName
|
|
445
|
-
const fieldNames = prop?.fieldNames
|
|
446
|
-
if (typeof fieldName === 'string' && fieldName === columnName) return prop?.name ?? null
|
|
447
|
-
if (Array.isArray(fieldNames) && fieldNames.includes(columnName)) return prop?.name ?? null
|
|
448
|
-
if (prop?.name === columnName) return prop?.name ?? null
|
|
449
|
-
}
|
|
450
|
-
return null
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
private resolveEntityId(meta: Record<string, any> | null): string | null {
|
|
454
|
-
if (!meta) return null
|
|
455
|
-
try {
|
|
456
|
-
return resolveEntityIdFromMetadata(meta as any)
|
|
457
|
-
} catch {
|
|
458
|
-
return null
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
|
|
462
|
-
private isEncryptedPayload(value: string): boolean {
|
|
463
|
-
const parts = value.split(':')
|
|
464
|
-
return parts.length === 4 && parts[3] === 'v1'
|
|
465
|
-
}
|
|
466
|
-
|
|
467
|
-
private decryptWithDek(value: string, dek: string): string | null {
|
|
468
|
-
const first = decryptWithAesGcm(value, dek)
|
|
469
|
-
if (first === null) return null
|
|
470
|
-
if (!this.isEncryptedPayload(first)) return first
|
|
471
|
-
return decryptWithAesGcm(first, dek) ?? first
|
|
472
|
-
}
|
|
473
320
|
}
|
|
474
321
|
|
|
475
322
|
export function createWidgetDataService(
|
|
@@ -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
|
)}
|
|
@@ -366,15 +366,13 @@ export default function QueryIndexesTable() {
|
|
|
366
366
|
onSortingChange={setSorting}
|
|
367
367
|
perspective={{ tableId: 'query_index.status.list' }}
|
|
368
368
|
rowActions={(row) => {
|
|
369
|
-
const items: Array<{
|
|
370
|
-
{
|
|
369
|
+
const items: Array<{ label: string; onSelect: () => void; destructive?: boolean }> = [
|
|
370
|
+
{ label: t('query_index.table.actions.reindex'), onSelect: () => trigger('reindex', row.entityId) },
|
|
371
371
|
{
|
|
372
|
-
id: 'reindex-force',
|
|
373
372
|
label: t('query_index.table.actions.reindexForce'),
|
|
374
373
|
onSelect: () => trigger('reindex', row.entityId, { force: true }),
|
|
375
374
|
},
|
|
376
375
|
{
|
|
377
|
-
id: 'purge',
|
|
378
376
|
label: t('query_index.table.actions.purge'),
|
|
379
377
|
destructive: true,
|
|
380
378
|
onSelect: () => trigger('purge', row.entityId),
|
|
@@ -384,12 +382,10 @@ export default function QueryIndexesTable() {
|
|
|
384
382
|
if (row.vectorEnabled) {
|
|
385
383
|
items.push(
|
|
386
384
|
{
|
|
387
|
-
id: 'vector-reindex',
|
|
388
385
|
label: t('query_index.table.actions.vectorReindex'),
|
|
389
386
|
onSelect: () => triggerVector('reindex', row.entityId),
|
|
390
387
|
},
|
|
391
388
|
{
|
|
392
|
-
id: 'vector-purge',
|
|
393
389
|
label: t('query_index.table.actions.vectorPurge'),
|
|
394
390
|
destructive: true,
|
|
395
391
|
onSelect: () => triggerVector('purge', row.entityId),
|
|
@@ -400,12 +396,10 @@ export default function QueryIndexesTable() {
|
|
|
400
396
|
if (row.fulltextEnabled) {
|
|
401
397
|
items.push(
|
|
402
398
|
{
|
|
403
|
-
id: 'fulltext-reindex',
|
|
404
399
|
label: t('query_index.table.actions.fulltextReindex'),
|
|
405
400
|
onSelect: () => triggerFulltext('reindex', row.entityId),
|
|
406
401
|
},
|
|
407
402
|
{
|
|
408
|
-
id: 'fulltext-purge',
|
|
409
403
|
label: t('query_index.table.actions.fulltextPurge'),
|
|
410
404
|
destructive: true,
|
|
411
405
|
onSelect: () => triggerFulltext('purge', row.entityId),
|
|
@@ -266,10 +266,10 @@ export default function ResourcesResourceTypesPage() {
|
|
|
266
266
|
rowActions={(row) => (
|
|
267
267
|
<RowActions
|
|
268
268
|
items={[
|
|
269
|
-
{
|
|
269
|
+
{ label: translations.actions.edit, href: `/backend/resources/resource-types/${row.id}/edit` },
|
|
270
270
|
...(row.resourceCount > 0
|
|
271
271
|
? []
|
|
272
|
-
: [{
|
|
272
|
+
: [{ label: translations.actions.delete, destructive: true, onSelect: () => handleDelete(row) }]),
|
|
273
273
|
]}
|
|
274
274
|
/>
|
|
275
275
|
)}
|
|
@@ -481,8 +481,8 @@ export default function ResourcesResourcesPage() {
|
|
|
481
481
|
if (!canManage || row.rowKind !== 'resource') return null
|
|
482
482
|
return (
|
|
483
483
|
<RowActions items={[
|
|
484
|
-
{
|
|
485
|
-
{
|
|
484
|
+
{ label: t('common.edit', 'Edit'), href: `/backend/resources/resources/${encodeURIComponent(row.id)}` },
|
|
485
|
+
{ label: t('common.delete', 'Delete'), destructive: true, onSelect: () => { void handleDelete(row) } },
|
|
486
486
|
]} />
|
|
487
487
|
)
|
|
488
488
|
}}
|
|
@@ -334,12 +334,10 @@ export default function SalesChannelOffersListPage() {
|
|
|
334
334
|
<RowActions
|
|
335
335
|
items={[
|
|
336
336
|
{
|
|
337
|
-
id: 'edit',
|
|
338
337
|
label: t('sales.channels.offers.actions.edit', 'Edit'),
|
|
339
338
|
href: `/backend/sales/channels/${row.channelId}/offers/${row.id}/edit`,
|
|
340
339
|
},
|
|
341
340
|
{
|
|
342
|
-
id: 'delete',
|
|
343
341
|
label: t('sales.channels.offers.actions.delete', 'Delete'),
|
|
344
342
|
onSelect: () => handleDelete(row),
|
|
345
343
|
destructive: true,
|
|
@@ -191,12 +191,10 @@ export default function SalesChannelsPage() {
|
|
|
191
191
|
<RowActions
|
|
192
192
|
items={[
|
|
193
193
|
{
|
|
194
|
-
id: 'edit',
|
|
195
194
|
label: t('sales.channels.table.actions.edit', 'Edit'),
|
|
196
195
|
href: `/backend/sales/channels/${row.id}/edit`,
|
|
197
196
|
},
|
|
198
197
|
{
|
|
199
|
-
id: 'delete',
|
|
200
198
|
label: t('sales.channels.table.actions.delete', 'Delete'),
|
|
201
199
|
onSelect: () => handleDelete(row),
|
|
202
200
|
},
|
|
@@ -11,8 +11,6 @@ import type { DataEngine } from '@open-mercato/shared/lib/data/engine'
|
|
|
11
11
|
import { CrudHttpError } from '@open-mercato/shared/lib/crud/errors'
|
|
12
12
|
import { deriveResourceFromCommandId, invalidateCrudCache } from '@open-mercato/shared/lib/crud/cache'
|
|
13
13
|
import { resolveTranslations } from '@open-mercato/shared/lib/i18n/server'
|
|
14
|
-
import { resolveNotificationService } from '../../notifications/lib/notificationService'
|
|
15
|
-
import { buildFeatureNotificationFromType } from '../../notifications/lib/notificationBuilder'
|
|
16
14
|
import { setRecordCustomFields } from '@open-mercato/core/modules/entities/lib/helpers'
|
|
17
15
|
import { loadCustomFieldValues } from '@open-mercato/shared/lib/crud/custom-fields'
|
|
18
16
|
import { normalizeCustomFieldValues } from '@open-mercato/shared/lib/custom-fields/normalize'
|
|
@@ -90,7 +88,6 @@ import { resolveDictionaryEntryValue } from '../lib/dictionaries'
|
|
|
90
88
|
import { resolveStatusEntryIdByValue } from '../lib/statusHelpers'
|
|
91
89
|
import { SalesDocumentNumberGenerator } from '../services/salesDocumentNumberGenerator'
|
|
92
90
|
import { loadSalesSettings } from './settings'
|
|
93
|
-
import { notificationTypes } from '../notifications'
|
|
94
91
|
|
|
95
92
|
type DocumentAddressSnapshot = {
|
|
96
93
|
id: string
|
|
@@ -3114,37 +3111,6 @@ const createQuoteCommand: CommandHandler<QuoteCreateInput, { quoteId: string }>
|
|
|
3114
3111
|
})
|
|
3115
3112
|
await em.flush()
|
|
3116
3113
|
|
|
3117
|
-
// Create notification for users with sales.quotes.manage feature
|
|
3118
|
-
try {
|
|
3119
|
-
const notificationService = resolveNotificationService(ctx.container)
|
|
3120
|
-
const typeDef = notificationTypes.find((type) => type.type === 'sales.quote.created')
|
|
3121
|
-
if (typeDef) {
|
|
3122
|
-
const totalAmount = quote.grandTotalGrossAmount && quote.currencyCode
|
|
3123
|
-
? `${quote.grandTotalGrossAmount} ${quote.currencyCode}`
|
|
3124
|
-
: ''
|
|
3125
|
-
const totalDisplay = totalAmount ? ` (${totalAmount})` : ''
|
|
3126
|
-
const notificationInput = buildFeatureNotificationFromType(typeDef, {
|
|
3127
|
-
requiredFeature: 'sales.quotes.manage',
|
|
3128
|
-
bodyVariables: {
|
|
3129
|
-
quoteNumber: quote.quoteNumber,
|
|
3130
|
-
total: totalDisplay,
|
|
3131
|
-
totalAmount,
|
|
3132
|
-
},
|
|
3133
|
-
sourceEntityType: 'sales:quote',
|
|
3134
|
-
sourceEntityId: quote.id,
|
|
3135
|
-
linkHref: `/backend/sales/quotes/${quote.id}`,
|
|
3136
|
-
})
|
|
3137
|
-
|
|
3138
|
-
await notificationService.createForFeature(notificationInput, {
|
|
3139
|
-
tenantId: quote.tenantId,
|
|
3140
|
-
organizationId: quote.organizationId ?? null,
|
|
3141
|
-
})
|
|
3142
|
-
}
|
|
3143
|
-
} catch (err) {
|
|
3144
|
-
// Notification creation is non-critical, don't fail the command
|
|
3145
|
-
console.error('[sales.quotes.create] Failed to create notification:', err)
|
|
3146
|
-
}
|
|
3147
|
-
|
|
3148
3114
|
return { quoteId: quote.id }
|
|
3149
3115
|
},
|
|
3150
3116
|
captureAfter: async (_input, result, ctx) => {
|
|
@@ -3816,37 +3782,6 @@ const createOrderCommand: CommandHandler<OrderCreateInput, { orderId: string }>
|
|
|
3816
3782
|
})
|
|
3817
3783
|
await em.flush()
|
|
3818
3784
|
|
|
3819
|
-
// Create notification for users with sales.orders.manage feature
|
|
3820
|
-
try {
|
|
3821
|
-
const notificationService = resolveNotificationService(ctx.container)
|
|
3822
|
-
const typeDef = notificationTypes.find((type) => type.type === 'sales.order.created')
|
|
3823
|
-
if (typeDef) {
|
|
3824
|
-
const totalAmount = order.grandTotalGrossAmount && order.currencyCode
|
|
3825
|
-
? `${order.grandTotalGrossAmount} ${order.currencyCode}`
|
|
3826
|
-
: ''
|
|
3827
|
-
const totalDisplay = totalAmount ? ` (${totalAmount})` : ''
|
|
3828
|
-
const notificationInput = buildFeatureNotificationFromType(typeDef, {
|
|
3829
|
-
requiredFeature: 'sales.orders.manage',
|
|
3830
|
-
bodyVariables: {
|
|
3831
|
-
orderNumber: order.orderNumber,
|
|
3832
|
-
total: totalDisplay,
|
|
3833
|
-
totalAmount,
|
|
3834
|
-
},
|
|
3835
|
-
sourceEntityType: 'sales:order',
|
|
3836
|
-
sourceEntityId: order.id,
|
|
3837
|
-
linkHref: `/backend/sales/orders/${order.id}`,
|
|
3838
|
-
})
|
|
3839
|
-
|
|
3840
|
-
await notificationService.createForFeature(notificationInput, {
|
|
3841
|
-
tenantId: order.tenantId,
|
|
3842
|
-
organizationId: order.organizationId ?? null,
|
|
3843
|
-
})
|
|
3844
|
-
}
|
|
3845
|
-
} catch (err) {
|
|
3846
|
-
// Notification creation is non-critical, don't fail the command
|
|
3847
|
-
console.error('[sales.orders.create] Failed to create notification:', err)
|
|
3848
|
-
}
|
|
3849
|
-
|
|
3850
3785
|
return { orderId: order.id }
|
|
3851
3786
|
},
|
|
3852
3787
|
captureAfter: async (_input, result, ctx) => {
|
|
@@ -35,9 +35,6 @@ import { invalidateCrudCache } from '@open-mercato/shared/lib/crud/cache'
|
|
|
35
35
|
import { emitCrudSideEffects } from '@open-mercato/shared/lib/commands/helpers'
|
|
36
36
|
import type { DataEngine } from '@open-mercato/shared/lib/data/engine'
|
|
37
37
|
import { findOneWithDecryption, findWithDecryption } from '@open-mercato/shared/lib/encryption/find'
|
|
38
|
-
import { resolveNotificationService } from '../../notifications/lib/notificationService'
|
|
39
|
-
import { buildFeatureNotificationFromType } from '../../notifications/lib/notificationBuilder'
|
|
40
|
-
import { notificationTypes } from '../notifications'
|
|
41
38
|
|
|
42
39
|
export type PaymentAllocationSnapshot = {
|
|
43
40
|
id: string
|
|
@@ -425,36 +422,6 @@ const createPaymentCommand: CommandHandler<
|
|
|
425
422
|
const totals = await recomputeOrderPaymentTotals(em, order)
|
|
426
423
|
await em.flush()
|
|
427
424
|
await invalidateOrderCache(ctx.container, order, ctx.auth?.tenantId ?? null)
|
|
428
|
-
|
|
429
|
-
// Create notification for payment received
|
|
430
|
-
try {
|
|
431
|
-
const notificationService = resolveNotificationService(ctx.container)
|
|
432
|
-
const typeDef = notificationTypes.find((type) => type.type === 'sales.payment.received')
|
|
433
|
-
if (typeDef) {
|
|
434
|
-
const amountDisplay = payment.amount && payment.currencyCode
|
|
435
|
-
? `${payment.currencyCode} ${payment.amount}`
|
|
436
|
-
: ''
|
|
437
|
-
const notificationInput = buildFeatureNotificationFromType(typeDef, {
|
|
438
|
-
requiredFeature: 'sales.orders.manage',
|
|
439
|
-
bodyVariables: {
|
|
440
|
-
orderNumber: order.orderNumber ?? '',
|
|
441
|
-
amount: amountDisplay,
|
|
442
|
-
},
|
|
443
|
-
sourceEntityType: 'sales:order',
|
|
444
|
-
sourceEntityId: order.id,
|
|
445
|
-
linkHref: `/backend/sales/orders/${order.id}`,
|
|
446
|
-
})
|
|
447
|
-
|
|
448
|
-
await notificationService.createForFeature(notificationInput, {
|
|
449
|
-
tenantId: payment.tenantId,
|
|
450
|
-
organizationId: payment.organizationId ?? null,
|
|
451
|
-
})
|
|
452
|
-
}
|
|
453
|
-
} catch (err) {
|
|
454
|
-
// Notification creation is non-critical, don't fail the command
|
|
455
|
-
console.error('[sales.payments.create] Failed to create notification:', err)
|
|
456
|
-
}
|
|
457
|
-
|
|
458
425
|
return { paymentId: payment.id, orderTotals: totals }
|
|
459
426
|
},
|
|
460
427
|
captureAfter: async (_input, result, ctx) => {
|
|
@@ -333,8 +333,8 @@ export function AdjustmentKindSettings() {
|
|
|
333
333
|
rowActions={(entry) => (
|
|
334
334
|
<RowActions
|
|
335
335
|
items={[
|
|
336
|
-
{
|
|
337
|
-
{
|
|
336
|
+
{ label: labels.edit, onSelect: () => openDialog({ mode: 'edit', entry }) },
|
|
337
|
+
{ label: labels.delete, destructive: true, onSelect: () => { void handleDelete(entry) } },
|
|
338
338
|
]}
|
|
339
339
|
/>
|
|
340
340
|
)}
|
|
@@ -526,8 +526,8 @@ export function PaymentMethodsSettings() {
|
|
|
526
526
|
rowActions={(row) => (
|
|
527
527
|
<RowActions
|
|
528
528
|
items={[
|
|
529
|
-
{
|
|
530
|
-
{
|
|
529
|
+
{ label: translations.actions.edit, onSelect: () => openEdit(row) },
|
|
530
|
+
{ label: translations.actions.delete, destructive: true, onSelect: () => deleteEntry(row) },
|
|
531
531
|
]}
|
|
532
532
|
/>
|
|
533
533
|
)}
|
|
@@ -820,8 +820,8 @@ export function ShippingMethodsSettings() {
|
|
|
820
820
|
rowActions={(row) => (
|
|
821
821
|
<RowActions
|
|
822
822
|
items={[
|
|
823
|
-
{
|
|
824
|
-
{
|
|
823
|
+
{ label: translations.actions.edit, onSelect: () => openEdit(row) },
|
|
824
|
+
{ label: translations.actions.delete, destructive: true, onSelect: () => deleteEntry(row) },
|
|
825
825
|
]}
|
|
826
826
|
/>
|
|
827
827
|
)}
|
|
@@ -335,8 +335,8 @@ export function TaxRatesSettings() {
|
|
|
335
335
|
rowActions={(row) => (
|
|
336
336
|
<RowActions
|
|
337
337
|
items={[
|
|
338
|
-
{
|
|
339
|
-
{
|
|
338
|
+
{ label: translations.actions.edit, onSelect: () => openEdit(row) },
|
|
339
|
+
{ label: translations.actions.delete, destructive: true, onSelect: () => deleteEntry(row) },
|
|
340
340
|
]}
|
|
341
341
|
/>
|
|
342
342
|
)}
|
|
@@ -185,12 +185,10 @@ export function SalesChannelOffersPanel({ channelId, channelName }: { channelId:
|
|
|
185
185
|
<RowActions
|
|
186
186
|
items={[
|
|
187
187
|
{
|
|
188
|
-
id: 'edit',
|
|
189
188
|
label: t('sales.channels.offers.actions.edit', 'Edit'),
|
|
190
189
|
href: `/backend/sales/channels/${channelId}/offers/${row.id}/edit`,
|
|
191
190
|
},
|
|
192
191
|
{
|
|
193
|
-
id: 'delete',
|
|
194
192
|
label: t('sales.channels.offers.actions.delete', 'Delete'),
|
|
195
193
|
onSelect: () => handleDelete(row),
|
|
196
194
|
destructive: true,
|
|
@@ -427,12 +427,10 @@ export function SalesDocumentAdjustmentsSection({
|
|
|
427
427
|
<RowActions
|
|
428
428
|
items={[
|
|
429
429
|
{
|
|
430
|
-
id: 'edit',
|
|
431
430
|
label: t('ui.actions.edit', 'Edit'),
|
|
432
431
|
onSelect: () => handleEdit(row),
|
|
433
432
|
},
|
|
434
433
|
{
|
|
435
|
-
id: 'delete',
|
|
436
434
|
label: t('ui.actions.delete', 'Delete'),
|
|
437
435
|
destructive: true,
|
|
438
436
|
onSelect: () => handleDelete(row),
|
|
@@ -295,9 +295,8 @@ export function SalesDocumentPaymentsSection({
|
|
|
295
295
|
return (
|
|
296
296
|
<RowActions
|
|
297
297
|
items={[
|
|
298
|
-
{
|
|
298
|
+
{ label: editActionLabel, onSelect: () => openEditPayment(row.original) },
|
|
299
299
|
{
|
|
300
|
-
id: 'delete',
|
|
301
300
|
label: deleteActionLabel,
|
|
302
301
|
destructive: true,
|
|
303
302
|
onSelect: () => void handleDelete(row.original),
|