@open-mercato/core 0.6.8-develop.7100.1.fbf66fca35 → 0.7.0
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/.turbo/turbo-build.log +1 -1
- package/dist/helpers/integration/api.js +1 -13
- package/dist/helpers/integration/api.js.map +2 -2
- package/dist/helpers/integration/communicationChannelsFixtures.js +0 -19
- package/dist/helpers/integration/communicationChannelsFixtures.js.map +2 -2
- package/dist/modules/api_keys/api/keys/route.js +1 -1
- package/dist/modules/api_keys/api/keys/route.js.map +2 -2
- package/dist/modules/api_keys/backend/api-keys/page.js +1 -3
- package/dist/modules/api_keys/backend/api-keys/page.js.map +2 -2
- package/dist/modules/attachments/api/route.js +2 -2
- package/dist/modules/attachments/api/route.js.map +2 -2
- package/dist/modules/attachments/components/AttachmentLibrary.js +0 -2
- package/dist/modules/attachments/components/AttachmentLibrary.js.map +2 -2
- package/dist/modules/attachments/di.js +1 -11
- package/dist/modules/attachments/di.js.map +2 -2
- package/dist/modules/attachments/index.js.map +1 -1
- package/dist/modules/attachments/lib/scoped-upload-service.js +2 -15
- package/dist/modules/attachments/lib/scoped-upload-service.js.map +2 -2
- package/dist/modules/attachments/lib/upload-limits.js +2 -6
- package/dist/modules/attachments/lib/upload-limits.js.map +2 -2
- package/dist/modules/audit_logs/backend/audit-logs/page.js +0 -6
- package/dist/modules/audit_logs/backend/audit-logs/page.js.map +2 -2
- package/dist/modules/audit_logs/lib/display-helpers.js +11 -19
- package/dist/modules/audit_logs/lib/display-helpers.js.map +2 -2
- package/dist/modules/audit_logs/services/actionLogService.js +12 -57
- package/dist/modules/audit_logs/services/actionLogService.js.map +3 -3
- package/dist/modules/auth/acl.js +5 -30
- package/dist/modules/auth/acl.js.map +2 -2
- package/dist/modules/auth/api/feature-check.js +2 -8
- package/dist/modules/auth/api/feature-check.js.map +2 -2
- package/dist/modules/auth/api/login.js +20 -4
- package/dist/modules/auth/api/login.js.map +2 -2
- package/dist/modules/auth/api/roles/acl/route.js +33 -28
- package/dist/modules/auth/api/roles/acl/route.js.map +2 -2
- package/dist/modules/auth/api/routeError.js +11 -0
- package/dist/modules/auth/api/routeError.js.map +7 -0
- package/dist/modules/auth/api/session/refresh.js +1 -25
- package/dist/modules/auth/api/session/refresh.js.map +2 -2
- package/dist/modules/auth/api/users/acl/route.js +73 -102
- package/dist/modules/auth/api/users/acl/route.js.map +2 -2
- package/dist/modules/auth/api/users/route.js +5 -13
- package/dist/modules/auth/api/users/route.js.map +2 -2
- package/dist/modules/auth/backend/roles/[id]/edit/page.meta.js +1 -5
- package/dist/modules/auth/backend/roles/[id]/edit/page.meta.js.map +2 -2
- package/dist/modules/auth/backend/roles/page.js +1 -3
- package/dist/modules/auth/backend/roles/page.js.map +2 -2
- package/dist/modules/auth/backend/users/[id]/edit/page.meta.js +1 -5
- package/dist/modules/auth/backend/users/[id]/edit/page.meta.js.map +2 -2
- package/dist/modules/auth/backend/users/page.js +1 -2
- package/dist/modules/auth/backend/users/page.js.map +2 -2
- package/dist/modules/auth/components/AclEditor.js +30 -39
- package/dist/modules/auth/components/AclEditor.js.map +2 -2
- package/dist/modules/auth/data/entities.js.map +2 -2
- package/dist/modules/auth/data/validators.js +1 -5
- package/dist/modules/auth/data/validators.js.map +2 -2
- package/dist/modules/auth/di.js +9 -35
- package/dist/modules/auth/di.js.map +2 -2
- package/dist/modules/auth/frontend/reset/[token]/page.js +0 -46
- package/dist/modules/auth/frontend/reset/[token]/page.js.map +2 -2
- package/dist/modules/auth/lib/grantChecks.js.map +2 -2
- package/dist/modules/auth/services/authService.js +2 -16
- package/dist/modules/auth/services/authService.js.map +2 -2
- package/dist/modules/auth/services/rbacService.js +24 -67
- package/dist/modules/auth/services/rbacService.js.map +3 -3
- package/dist/modules/business_rules/backend/logs/page.js +1 -3
- package/dist/modules/business_rules/backend/logs/page.js.map +2 -2
- package/dist/modules/business_rules/backend/rules/[id]/page.meta.js +6 -1
- package/dist/modules/business_rules/backend/rules/[id]/page.meta.js.map +2 -2
- package/dist/modules/business_rules/backend/rules/create/page.meta.js +5 -1
- package/dist/modules/business_rules/backend/rules/create/page.meta.js.map +2 -2
- package/dist/modules/business_rules/backend/rules/page.js +1 -3
- package/dist/modules/business_rules/backend/rules/page.js.map +2 -2
- package/dist/modules/business_rules/backend/sets/[id]/page.meta.js +6 -1
- package/dist/modules/business_rules/backend/sets/[id]/page.meta.js.map +2 -2
- package/dist/modules/business_rules/backend/sets/create/page.meta.js +5 -1
- package/dist/modules/business_rules/backend/sets/create/page.meta.js.map +2 -2
- package/dist/modules/business_rules/backend/sets/page.js +1 -3
- package/dist/modules/business_rules/backend/sets/page.js.map +2 -2
- package/dist/modules/business_rules/lib/expression-evaluator.js +9 -9
- package/dist/modules/business_rules/lib/expression-evaluator.js.map +2 -2
- package/dist/modules/business_rules/lib/rule-evaluator.js +9 -10
- package/dist/modules/business_rules/lib/rule-evaluator.js.map +2 -2
- package/dist/modules/catalog/ai-agents.js +1 -1
- package/dist/modules/catalog/ai-agents.js.map +1 -1
- package/dist/modules/catalog/ai-tools/merchandising-pack.js +2 -2
- package/dist/modules/catalog/ai-tools/merchandising-pack.js.map +2 -2
- package/dist/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.js +2 -5
- package/dist/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.js.map +2 -2
- package/dist/modules/catalog/components/categories/CategoriesDataTable.js +0 -2
- package/dist/modules/catalog/components/categories/CategoriesDataTable.js.map +2 -2
- package/dist/modules/catalog/components/products/ProductsDataTable.js +1 -7
- package/dist/modules/catalog/components/products/ProductsDataTable.js.map +2 -2
- package/dist/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.js +0 -2
- package/dist/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.js.map +2 -2
- package/dist/modules/communication_channels/api/post/channels/[id]/test-send/route.js +1 -9
- package/dist/modules/communication_channels/api/post/channels/[id]/test-send/route.js.map +2 -2
- package/dist/modules/communication_channels/api/post/test-seed/route.js +10 -95
- package/dist/modules/communication_channels/api/post/test-seed/route.js.map +2 -2
- package/dist/modules/communication_channels/backend/communication_channels/channels/page.js +0 -3
- package/dist/modules/communication_channels/backend/communication_channels/channels/page.js.map +2 -2
- package/dist/modules/communication_channels/commands/ingest-inbound-message.js +1 -14
- package/dist/modules/communication_channels/commands/ingest-inbound-message.js.map +2 -2
- package/dist/modules/communication_channels/di.js +1 -7
- package/dist/modules/communication_channels/di.js.map +2 -2
- package/dist/modules/communication_channels/lib/email-capabilities.js +1 -4
- package/dist/modules/communication_channels/lib/email-capabilities.js.map +2 -2
- package/dist/modules/communication_channels/lib/test-seed.js +2 -41
- package/dist/modules/communication_channels/lib/test-seed.js.map +2 -2
- package/dist/modules/configs/lib/system-status.js +0 -9
- package/dist/modules/configs/lib/system-status.js.map +2 -2
- package/dist/modules/currencies/backend/currencies/page.js +1 -3
- package/dist/modules/currencies/backend/currencies/page.js.map +2 -2
- package/dist/modules/currencies/backend/exchange-rates/page.js +1 -3
- package/dist/modules/currencies/backend/exchange-rates/page.js.map +2 -2
- package/dist/modules/customer_accounts/api/admin/domain-mappings.js +0 -9
- package/dist/modules/customer_accounts/api/admin/domain-mappings.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js +1 -3
- package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/settings/CustomerAccountsSettingsPageClient.js +84 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/settings/CustomerAccountsSettingsPageClient.js.map +7 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/settings/page.js +7 -81
- package/dist/modules/customer_accounts/backend/customer_accounts/settings/page.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.js +523 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.js.map +7 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/PortalUserDetailPageClient.js +731 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/PortalUserDetailPageClient.js.map +7 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js +7 -727
- package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js +7 -521
- package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js.map +2 -2
- package/dist/modules/customer_accounts/extension-points.js +1 -1
- package/dist/modules/customer_accounts/extension-points.js.map +2 -2
- package/dist/modules/customer_accounts/lib/portalUrl.js +69 -0
- package/dist/modules/customer_accounts/lib/portalUrl.js.map +7 -0
- package/dist/modules/customer_accounts/services/domainMappingService.js +0 -10
- package/dist/modules/customer_accounts/services/domainMappingService.js.map +2 -2
- package/dist/modules/customers/ai-tools/companies-pack.js +1 -4
- package/dist/modules/customers/ai-tools/companies-pack.js.map +2 -2
- package/dist/modules/customers/ai-tools/deal-analyzer-pack.js +2 -13
- package/dist/modules/customers/ai-tools/deal-analyzer-pack.js.map +2 -2
- package/dist/modules/customers/ai-tools/deals-pack.js +6 -52
- package/dist/modules/customers/ai-tools/deals-pack.js.map +2 -2
- package/dist/modules/customers/ai-tools/people-pack.js +1 -4
- package/dist/modules/customers/ai-tools/people-pack.js.map +2 -2
- package/dist/modules/customers/api/activities/route.js +6 -48
- package/dist/modules/customers/api/activities/route.js.map +2 -2
- package/dist/modules/customers/api/companies/[id]/people/route.js +64 -20
- package/dist/modules/customers/api/companies/[id]/people/route.js.map +2 -2
- package/dist/modules/customers/api/companies/[id]/route.js +94 -17
- package/dist/modules/customers/api/companies/[id]/route.js.map +2 -2
- package/dist/modules/customers/api/dashboard/widgets/customer-todos/route.js +5 -8
- package/dist/modules/customers/api/dashboard/widgets/customer-todos/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/companies/route.js +1 -1
- package/dist/modules/customers/api/deals/[id]/companies/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/people/route.js +1 -1
- package/dist/modules/customers/api/deals/[id]/people/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/route.js +25 -8
- package/dist/modules/customers/api/deals/[id]/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/stats/route.js +22 -3
- package/dist/modules/customers/api/deals/[id]/stats/route.js.map +2 -2
- package/dist/modules/customers/api/deals/aggregate/route.js +4 -11
- package/dist/modules/customers/api/deals/aggregate/route.js.map +2 -2
- package/dist/modules/customers/api/deals/map/route.js +1 -2
- package/dist/modules/customers/api/deals/map/route.js.map +2 -2
- package/dist/modules/customers/api/deals/route.js +1 -38
- package/dist/modules/customers/api/deals/route.js.map +2 -2
- package/dist/modules/customers/api/entity-roles-factory.js +4 -4
- package/dist/modules/customers/api/entity-roles-factory.js.map +2 -2
- package/dist/modules/customers/api/interactions/route.js +1 -3
- package/dist/modules/customers/api/interactions/route.js.map +2 -2
- package/dist/modules/customers/api/interactions/tasks/route.js +4 -27
- package/dist/modules/customers/api/interactions/tasks/route.js.map +2 -2
- package/dist/modules/customers/api/people/[id]/companies/[linkId]/route.js +3 -4
- package/dist/modules/customers/api/people/[id]/companies/[linkId]/route.js.map +2 -2
- package/dist/modules/customers/api/people/[id]/companies/context.js +1 -1
- package/dist/modules/customers/api/people/[id]/companies/context.js.map +2 -2
- package/dist/modules/customers/api/people/[id]/companies/enriched/route.js +1 -1
- package/dist/modules/customers/api/people/[id]/companies/enriched/route.js.map +2 -2
- package/dist/modules/customers/api/people/[id]/route.js +10 -11
- package/dist/modules/customers/api/people/[id]/route.js.map +2 -2
- package/dist/modules/customers/api/people/check-phone/route.js +9 -51
- package/dist/modules/customers/api/people/check-phone/route.js.map +2 -2
- package/dist/modules/customers/api/todos/route.js +5 -30
- package/dist/modules/customers/api/todos/route.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies/page.js +4 -6
- package/dist/modules/customers/backend/customers/companies/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/[id]/page.js +1 -6
- package/dist/modules/customers/backend/customers/deals/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/page.js +4 -7
- package/dist/modules/customers/backend/customers/deals/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/pipeline/components/Lane.js +13 -4
- package/dist/modules/customers/backend/customers/deals/pipeline/components/Lane.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/pipeline/components/StatusFilterPopover.js +14 -85
- package/dist/modules/customers/backend/customers/deals/pipeline/components/StatusFilterPopover.js.map +2 -2
- package/dist/modules/customers/backend/customers/people/page.js +4 -6
- package/dist/modules/customers/backend/customers/people/page.js.map +2 -2
- package/dist/modules/customers/backend/hooks/useEmailDuplicateCheck.js +3 -9
- package/dist/modules/customers/backend/hooks/useEmailDuplicateCheck.js.map +2 -2
- package/dist/modules/customers/commands/deals.js +34 -21
- package/dist/modules/customers/commands/deals.js.map +2 -2
- package/dist/modules/customers/commands/interactions.js.map +1 -1
- package/dist/modules/customers/commands/personCompanyLinks.js +2 -131
- package/dist/modules/customers/commands/personCompanyLinks.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/components/DealsKpiStrip.js +6 -7
- package/dist/modules/customers/components/DealsKpiStrip.js.map +2 -2
- package/dist/modules/customers/components/calendar/AgendaList.js +2 -2
- package/dist/modules/customers/components/calendar/AgendaList.js.map +2 -2
- package/dist/modules/customers/components/calendar/CalendarEventEditor.js +1 -1
- package/dist/modules/customers/components/calendar/CalendarEventEditor.js.map +2 -2
- package/dist/modules/customers/components/calendar/CalendarScreen.js +1 -1
- package/dist/modules/customers/components/calendar/CalendarScreen.js.map +2 -2
- package/dist/modules/customers/components/calendar/CalendarSettingsModal.js +1 -1
- package/dist/modules/customers/components/calendar/CalendarSettingsModal.js.map +2 -2
- package/dist/modules/customers/components/calendar/EventBlock.js +1 -1
- package/dist/modules/customers/components/calendar/EventBlock.js.map +2 -2
- package/dist/modules/customers/components/calendar/EventPeekPopover.js +2 -3
- package/dist/modules/customers/components/calendar/EventPeekPopover.js.map +2 -2
- package/dist/modules/customers/components/calendar/editor/PeopleField.js +5 -40
- package/dist/modules/customers/components/calendar/editor/PeopleField.js.map +2 -2
- package/dist/modules/customers/components/calendar/editor/hooks.js +1 -2
- package/dist/modules/customers/components/calendar/editor/hooks.js.map +2 -2
- package/dist/modules/customers/components/calendar/types.js +1 -1
- package/dist/modules/customers/components/calendar/types.js.map +2 -2
- package/dist/modules/customers/components/detail/AssignRoleDialog.js +33 -28
- package/dist/modules/customers/components/detail/AssignRoleDialog.js.map +2 -2
- package/dist/modules/customers/components/detail/CompanyKpiBar.js +4 -5
- package/dist/modules/customers/components/detail/CompanyKpiBar.js.map +2 -2
- package/dist/modules/customers/components/detail/CompanyPeopleSection.js +1 -3
- package/dist/modules/customers/components/detail/CompanyPeopleSection.js.map +2 -2
- package/dist/modules/customers/components/detail/DealForm.js +7 -19
- package/dist/modules/customers/components/detail/DealForm.js.map +2 -2
- package/dist/modules/customers/components/detail/DealsSection.js +5 -6
- package/dist/modules/customers/components/detail/DealsSection.js.map +2 -2
- package/dist/modules/customers/components/detail/EntityTagsDialog.js +11 -35
- package/dist/modules/customers/components/detail/EntityTagsDialog.js.map +2 -2
- package/dist/modules/customers/components/detail/PersonCompaniesSection.js +1 -3
- package/dist/modules/customers/components/detail/PersonCompaniesSection.js.map +2 -2
- package/dist/modules/customers/components/detail/hooks/usePersonTasks.js +13 -19
- package/dist/modules/customers/components/detail/hooks/usePersonTasks.js.map +2 -2
- package/dist/modules/customers/components/detail/schedule/ParticipantsField.js +4 -4
- package/dist/modules/customers/components/detail/schedule/ParticipantsField.js.map +2 -2
- package/dist/modules/customers/components/detail/schedule/useScheduleFormState.js +3 -3
- package/dist/modules/customers/components/detail/schedule/useScheduleFormState.js.map +2 -2
- package/dist/modules/customers/components/detail/utils.js +5 -5
- package/dist/modules/customers/components/detail/utils.js.map +2 -2
- package/dist/modules/customers/data/entities.js.map +1 -1
- package/dist/modules/customers/data/validators.js +3 -32
- package/dist/modules/customers/data/validators.js.map +2 -2
- package/dist/modules/customers/events.js +0 -5
- package/dist/modules/customers/events.js.map +2 -2
- package/dist/modules/customers/lib/calendar/conflicts.js +2 -8
- package/dist/modules/customers/lib/calendar/conflicts.js.map +2 -2
- package/dist/modules/customers/lib/calendar/editorPayload.js +2 -3
- package/dist/modules/customers/lib/calendar/editorPayload.js.map +2 -2
- package/dist/modules/customers/lib/calendar/mapItem.js +3 -8
- package/dist/modules/customers/lib/calendar/mapItem.js.map +2 -2
- package/dist/modules/customers/lib/dealStatus.js +0 -30
- package/dist/modules/customers/lib/dealStatus.js.map +2 -2
- package/dist/modules/customers/lib/findPeopleByAddresses.js +0 -1
- package/dist/modules/customers/lib/findPeopleByAddresses.js.map +2 -2
- package/dist/modules/customers/lib/personCompanies.js +2 -100
- package/dist/modules/customers/lib/personCompanies.js.map +2 -2
- package/dist/modules/customers/lib/todoCompatibility.js +0 -12
- package/dist/modules/customers/lib/todoCompatibility.js.map +2 -2
- package/dist/modules/dashboards/lib/widgetScope.js +1 -6
- package/dist/modules/dashboards/lib/widgetScope.js.map +2 -2
- package/dist/modules/data_sync/backend/data-sync/page.js +1 -3
- package/dist/modules/data_sync/backend/data-sync/page.js.map +2 -2
- package/dist/modules/data_sync/lib/sync-engine.js +6 -72
- package/dist/modules/data_sync/lib/sync-engine.js.map +2 -2
- package/dist/modules/data_sync/workers/sync-export.js +1 -5
- package/dist/modules/data_sync/workers/sync-export.js.map +2 -2
- package/dist/modules/data_sync/workers/sync-import.js +1 -5
- package/dist/modules/data_sync/workers/sync-import.js.map +2 -2
- package/dist/modules/devices/acl.js +1 -9
- package/dist/modules/devices/acl.js.map +2 -2
- package/dist/modules/devices/api/admin/devices/[id]/route.js +32 -5
- package/dist/modules/devices/api/admin/devices/[id]/route.js.map +2 -2
- package/dist/modules/devices/api/admin/devices/route.js +1 -14
- package/dist/modules/devices/api/admin/devices/route.js.map +2 -2
- package/dist/modules/devices/api/deviceList.js +12 -99
- package/dist/modules/devices/api/deviceList.js.map +2 -2
- package/dist/modules/devices/api/openapi.js +1 -3
- package/dist/modules/devices/api/openapi.js.map +2 -2
- package/dist/modules/devices/api/route.js +1 -9
- package/dist/modules/devices/api/route.js.map +2 -2
- package/dist/modules/devices/backend/devices/[id]/page.js +26 -10
- package/dist/modules/devices/backend/devices/[id]/page.js.map +2 -2
- package/dist/modules/devices/backend/devices/create/page.js +1 -17
- package/dist/modules/devices/backend/devices/create/page.js.map +2 -2
- package/dist/modules/devices/backend/devices/page.js +34 -28
- package/dist/modules/devices/backend/devices/page.js.map +2 -2
- package/dist/modules/devices/setup.js +2 -6
- package/dist/modules/devices/setup.js.map +2 -2
- package/dist/modules/directory/backend/directory/organizations/page.js +1 -2
- package/dist/modules/directory/backend/directory/organizations/page.js.map +2 -2
- package/dist/modules/directory/backend/directory/tenants/page.js +1 -2
- package/dist/modules/directory/backend/directory/tenants/page.js.map +2 -2
- package/dist/modules/directory/di.js +0 -9
- package/dist/modules/directory/di.js.map +2 -2
- package/dist/modules/directory/utils/organizationScope.js.map +2 -2
- package/dist/modules/entities/api/records.js +2 -4
- package/dist/modules/entities/api/records.js.map +2 -2
- package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js +1 -3
- package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js.map +2 -2
- package/dist/modules/eudr/api/plots/route.js +1 -5
- package/dist/modules/eudr/api/plots/route.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.js +3 -1
- package/dist/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.js +1 -0
- package/dist/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/evidence-submissions/page.js +0 -3
- package/dist/modules/eudr/backend/eudr/evidence-submissions/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/evidence-submissions/page.meta.js +4 -1
- package/dist/modules/eudr/backend/eudr/evidence-submissions/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/page.meta.js +2 -2
- package/dist/modules/eudr/backend/eudr/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/[id]/page.js +8 -2
- package/dist/modules/eudr/backend/eudr/plots/[id]/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/[id]/page.meta.js +3 -1
- package/dist/modules/eudr/backend/eudr/plots/[id]/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/create/page.js +8 -2
- package/dist/modules/eudr/backend/eudr/plots/create/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/create/page.meta.js +1 -0
- package/dist/modules/eudr/backend/eudr/plots/create/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/page.js +0 -3
- package/dist/modules/eudr/backend/eudr/plots/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/page.meta.js +4 -1
- package/dist/modules/eudr/backend/eudr/plots/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.js +3 -1
- package/dist/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/product-mappings/create/page.meta.js +1 -0
- package/dist/modules/eudr/backend/eudr/product-mappings/create/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/product-mappings/page.js +0 -3
- package/dist/modules/eudr/backend/eudr/product-mappings/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/product-mappings/page.meta.js +4 -1
- package/dist/modules/eudr/backend/eudr/product-mappings/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.js +3 -1
- package/dist/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/risk-assessments/create/page.meta.js +1 -0
- package/dist/modules/eudr/backend/eudr/risk-assessments/create/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/risk-assessments/page.js +0 -3
- package/dist/modules/eudr/backend/eudr/risk-assessments/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/risk-assessments/page.meta.js +4 -1
- package/dist/modules/eudr/backend/eudr/risk-assessments/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/statements/[id]/page.js +2 -0
- package/dist/modules/eudr/backend/eudr/statements/[id]/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/statements/[id]/page.meta.js +3 -1
- package/dist/modules/eudr/backend/eudr/statements/[id]/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/statements/create/page.meta.js +1 -0
- package/dist/modules/eudr/backend/eudr/statements/create/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/statements/page.js +30 -28
- package/dist/modules/eudr/backend/eudr/statements/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/statements/page.meta.js +4 -1
- package/dist/modules/eudr/backend/eudr/statements/page.meta.js.map +2 -2
- package/dist/modules/eudr/commands/statements.js +8 -3
- package/dist/modules/eudr/commands/statements.js.map +2 -2
- package/dist/modules/eudr/components/crudErrorI18n.js +21 -1
- package/dist/modules/eudr/components/crudErrorI18n.js.map +2 -2
- package/dist/modules/eudr/components/formConfig.js +6 -2
- package/dist/modules/eudr/components/formConfig.js.map +2 -2
- package/dist/modules/eudr/data/validators.js +1 -4
- package/dist/modules/eudr/data/validators.js.map +2 -2
- package/dist/modules/eudr/lib/statement-lifecycle.js +9 -1
- package/dist/modules/eudr/lib/statement-lifecycle.js.map +2 -2
- package/dist/modules/feature_toggles/components/FeatureTogglesTable.js +0 -1
- package/dist/modules/feature_toggles/components/FeatureTogglesTable.js.map +2 -2
- package/dist/modules/feature_toggles/components/OverridesTable.js +0 -1
- package/dist/modules/feature_toggles/components/OverridesTable.js.map +2 -2
- package/dist/modules/feature_toggles/defaults.json +8 -0
- package/dist/modules/inbox_ops/backend/inbox-ops/log/page.js +0 -3
- package/dist/modules/inbox_ops/backend/inbox-ops/log/page.js.map +2 -2
- package/dist/modules/inbox_ops/backend/inbox-ops/page.js +0 -3
- package/dist/modules/inbox_ops/backend/inbox-ops/page.js.map +2 -2
- package/dist/modules/inbox_ops/lib/htmlToPlainText.js +12 -1
- package/dist/modules/inbox_ops/lib/htmlToPlainText.js.map +2 -2
- package/dist/modules/integrations/api/[id]/credentials/route.js +1 -6
- package/dist/modules/integrations/api/[id]/credentials/route.js.map +2 -2
- package/dist/modules/integrations/backend/integrations/[id]/page.js +29 -38
- package/dist/modules/integrations/backend/integrations/[id]/page.js.map +2 -2
- package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js +9 -36
- package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js.map +2 -2
- package/dist/modules/integrations/data/validators.js +3 -11
- package/dist/modules/integrations/data/validators.js.map +2 -2
- package/dist/modules/integrations/lib/credentials-masking.js +2 -6
- package/dist/modules/integrations/lib/credentials-masking.js.map +2 -2
- package/dist/modules/messages/api/[id]/route.js +1 -29
- package/dist/modules/messages/api/[id]/route.js.map +2 -2
- package/dist/modules/messages/api/openapi.js +2 -17
- package/dist/modules/messages/api/openapi.js.map +2 -2
- package/dist/modules/messages/api/route.js +2 -17
- package/dist/modules/messages/api/route.js.map +2 -2
- package/dist/modules/messages/components/MessagesInboxPageClient.js +14 -7
- package/dist/modules/messages/components/MessagesInboxPageClient.js.map +2 -2
- package/dist/modules/messages/components/inboxFilters.js +0 -15
- package/dist/modules/messages/components/inboxFilters.js.map +2 -2
- package/dist/modules/messages/components/message-detail/hooks/useMessageDetailsConversation.js +1 -11
- package/dist/modules/messages/components/message-detail/hooks/useMessageDetailsConversation.js.map +2 -2
- package/dist/modules/messages/components/message-detail/panels/MessageHeader.js +1 -3
- package/dist/modules/messages/components/message-detail/panels/MessageHeader.js.map +2 -2
- package/dist/modules/messages/components/message-detail/panels/thread-panel.js +1 -2
- package/dist/modules/messages/components/message-detail/panels/thread-panel.js.map +2 -2
- package/dist/modules/messages/components/messageListLabels.js +2 -14
- package/dist/modules/messages/components/messageListLabels.js.map +2 -2
- package/dist/modules/messages/data/validators.js +4 -18
- package/dist/modules/messages/data/validators.js.map +2 -2
- package/dist/modules/payment_gateways/api/webhook/[provider]/route.js +6 -4
- package/dist/modules/payment_gateways/api/webhook/[provider]/route.js.map +2 -2
- package/dist/modules/payment_gateways/backend/payment-gateways/page.js +1 -3
- package/dist/modules/payment_gateways/backend/payment-gateways/page.js.map +2 -2
- package/dist/modules/payment_gateways/lib/webhook-processor.js +0 -7
- package/dist/modules/payment_gateways/lib/webhook-processor.js.map +2 -2
- package/dist/modules/planner/backend/planner/availability-rulesets/page.js +0 -3
- package/dist/modules/planner/backend/planner/availability-rulesets/page.js.map +2 -2
- package/dist/modules/push_notifications/backend/push_notifications/page.js +1 -3
- package/dist/modules/push_notifications/backend/push_notifications/page.js.map +2 -2
- package/dist/modules/push_notifications/backend/push_notifications/send/page.js +1 -1
- package/dist/modules/push_notifications/backend/push_notifications/send/page.js.map +2 -2
- package/dist/modules/query_index/lib/engine.js +51 -150
- package/dist/modules/query_index/lib/engine.js.map +2 -2
- package/dist/modules/query_index/lib/search-tokens.js +3 -79
- package/dist/modules/query_index/lib/search-tokens.js.map +2 -2
- package/dist/modules/resources/backend/resources/resource-types/page.js +1 -3
- package/dist/modules/resources/backend/resources/resource-types/page.js.map +2 -2
- package/dist/modules/resources/backend/resources/resources/page.js +1 -3
- package/dist/modules/resources/backend/resources/resources/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/channels/offers/page.js +0 -3
- package/dist/modules/sales/backend/sales/channels/offers/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/channels/page.js +0 -3
- package/dist/modules/sales/backend/sales/channels/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/documents/[id]/page.js +8 -10
- package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
- package/dist/modules/sales/commands/documents.js +1 -79
- package/dist/modules/sales/commands/documents.js.map +2 -2
- package/dist/modules/sales/components/PriceWithCurrency.js +5 -7
- package/dist/modules/sales/components/PriceWithCurrency.js.map +2 -2
- package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js +0 -3
- package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js.map +2 -2
- package/dist/modules/sales/components/documents/AdjustmentsSection.js +6 -8
- package/dist/modules/sales/components/documents/AdjustmentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/ItemsSection.js +22 -51
- package/dist/modules/sales/components/documents/ItemsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/LineItemDialog.js +19 -84
- package/dist/modules/sales/components/documents/LineItemDialog.js.map +2 -2
- package/dist/modules/sales/components/documents/PaymentsSection.js +9 -23
- package/dist/modules/sales/components/documents/PaymentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/ReturnsSection.js +6 -8
- package/dist/modules/sales/components/documents/ReturnsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/SalesDocumentsTable.js +14 -68
- package/dist/modules/sales/components/documents/SalesDocumentsTable.js.map +2 -2
- package/dist/modules/sales/components/documents/SalesOrderDraftLines.js +5 -6
- package/dist/modules/sales/components/documents/SalesOrderDraftLines.js.map +2 -2
- package/dist/modules/sales/components/documents/ShipmentDialog.js +4 -5
- package/dist/modules/sales/components/documents/ShipmentDialog.js.map +2 -2
- package/dist/modules/sales/components/documents/ShipmentsSection.js +6 -8
- package/dist/modules/sales/components/documents/ShipmentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/lineItemUtils.js +2 -2
- package/dist/modules/sales/components/documents/lineItemUtils.js.map +2 -2
- package/dist/modules/sales/data/entities.js +2 -8
- package/dist/modules/sales/data/entities.js.map +2 -2
- package/dist/modules/sales/extension-points.js +0 -1
- package/dist/modules/sales/extension-points.js.map +2 -2
- package/dist/modules/sales/setup.js +0 -2
- package/dist/modules/sales/setup.js.map +2 -2
- package/dist/modules/sales/widgets/injection/document-history/widget.client.js +44 -2
- package/dist/modules/sales/widgets/injection/document-history/widget.client.js.map +2 -2
- package/dist/modules/sales/widgets/injection/payment-gateway-status-column/widget.js +2 -10
- package/dist/modules/sales/widgets/injection/payment-gateway-status-column/widget.js.map +2 -2
- package/dist/modules/sales/widgets/injection-table.js +7 -4
- package/dist/modules/sales/widgets/injection-table.js.map +2 -2
- package/dist/modules/staff/backend/staff/leave-requests/page.js +0 -3
- package/dist/modules/staff/backend/staff/leave-requests/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/my-leave-requests/page.js +0 -3
- package/dist/modules/staff/backend/staff/my-leave-requests/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/team-members/page.js +0 -3
- package/dist/modules/staff/backend/staff/team-members/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/team-roles/page.js +0 -3
- package/dist/modules/staff/backend/staff/team-roles/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js +0 -3
- package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/teams/page.js +0 -3
- package/dist/modules/staff/backend/staff/teams/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/timesheets/page.js +18 -29
- package/dist/modules/staff/backend/staff/timesheets/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/timesheets/projects/page.js +0 -3
- package/dist/modules/staff/backend/staff/timesheets/projects/page.js.map +2 -2
- package/dist/modules/sync_excel/lib/adapters/customers.js +0 -1
- package/dist/modules/sync_excel/lib/adapters/customers.js.map +2 -2
- package/dist/modules/warranty_claims/api/assignees/route.js +3 -3
- package/dist/modules/warranty_claims/api/assignees/route.js.map +2 -2
- package/dist/modules/warranty_claims/api/portal/attachments/route.js +2 -2
- package/dist/modules/warranty_claims/api/portal/attachments/route.js.map +2 -2
- package/dist/modules/warranty_claims/api/portal/claims/route.js +9 -12
- package/dist/modules/warranty_claims/api/portal/claims/route.js.map +2 -2
- package/dist/modules/warranty_claims/backend/page.js +0 -3
- package/dist/modules/warranty_claims/backend/page.js.map +2 -2
- package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.js +0 -3
- package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.js.map +2 -2
- package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.js +0 -3
- package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.js.map +2 -2
- package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.js +0 -3
- package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.js.map +2 -2
- package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.js +0 -3
- package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.js.map +2 -2
- package/dist/modules/wms/api/warehouses/route.js +9 -13
- package/dist/modules/wms/api/warehouses/route.js.map +2 -2
- package/dist/modules/wms/api/zones/route.js +2 -15
- package/dist/modules/wms/api/zones/route.js.map +2 -2
- package/dist/modules/wms/commands/configuration.js +9 -121
- package/dist/modules/wms/commands/configuration.js.map +2 -2
- package/dist/modules/wms/commands/inventory-actions.js +0 -3
- package/dist/modules/wms/commands/inventory-actions.js.map +2 -2
- package/dist/modules/wms/commands/shared.js +1 -9
- package/dist/modules/wms/commands/shared.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsConfigurationPage.js +111 -76
- package/dist/modules/wms/components/backend/WmsConfigurationPage.js.map +3 -3
- package/dist/modules/wms/components/backend/WmsInventoryConsolePage.js +0 -1
- package/dist/modules/wms/components/backend/WmsInventoryConsolePage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsLocationDetailPage.js +20 -16
- package/dist/modules/wms/components/backend/WmsLocationDetailPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsLotDetailPage.js +10 -6
- package/dist/modules/wms/components/backend/WmsLotDetailPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsLotsListPage.js +0 -1
- package/dist/modules/wms/components/backend/WmsLotsListPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsOperationalDashboardPage.js +11 -7
- package/dist/modules/wms/components/backend/WmsOperationalDashboardPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsSkuDetailPage.js +10 -6
- package/dist/modules/wms/components/backend/WmsSkuDetailPage.js.map +2 -2
- package/dist/modules/wms/components/backend/inventoryMutationLoaders.js +20 -27
- package/dist/modules/wms/components/backend/inventoryMutationLoaders.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/page.js +1 -3
- package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
- package/dist/modules/workflows/backend/events/page.js +1 -3
- package/dist/modules/workflows/backend/events/page.js.map +2 -2
- package/dist/modules/workflows/backend/instances/page.js +1 -3
- package/dist/modules/workflows/backend/instances/page.js.map +2 -2
- package/dist/modules/workflows/backend/tasks/page.js +1 -3
- package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
- package/dist/modules/workflows/lib/activity-executor.js +0 -4
- package/dist/modules/workflows/lib/activity-executor.js.map +2 -2
- package/package.json +10 -9
- package/src/helpers/integration/api.ts +1 -33
- package/src/helpers/integration/communicationChannelsFixtures.ts +1 -69
- package/src/modules/api_keys/api/keys/route.ts +1 -3
- package/src/modules/api_keys/backend/api-keys/page.tsx +1 -4
- package/src/modules/attachments/AGENTS.md +0 -15
- package/src/modules/attachments/api/route.ts +2 -2
- package/src/modules/attachments/components/AttachmentLibrary.tsx +0 -3
- package/src/modules/attachments/di.ts +0 -16
- package/src/modules/attachments/i18n/de.json +0 -5
- package/src/modules/attachments/i18n/en.json +0 -5
- package/src/modules/attachments/i18n/es.json +0 -5
- package/src/modules/attachments/i18n/ko.json +0 -5
- package/src/modules/attachments/i18n/pl.json +0 -5
- package/src/modules/attachments/index.ts +0 -10
- package/src/modules/attachments/lib/scoped-upload-service.ts +0 -46
- package/src/modules/attachments/lib/upload-limits.ts +2 -6
- package/src/modules/audit_logs/backend/audit-logs/page.tsx +0 -8
- package/src/modules/audit_logs/lib/display-helpers.tsx +32 -42
- package/src/modules/audit_logs/services/actionLogService.ts +11 -74
- package/src/modules/auth/acl.ts +6 -30
- package/src/modules/auth/api/feature-check.ts +3 -10
- package/src/modules/auth/api/login.ts +24 -9
- package/src/modules/auth/api/roles/acl/route.ts +39 -42
- package/src/modules/auth/api/routeError.ts +30 -0
- package/src/modules/auth/api/session/refresh.ts +1 -32
- package/src/modules/auth/api/users/acl/route.ts +101 -185
- package/src/modules/auth/api/users/route.ts +5 -18
- package/src/modules/auth/backend/roles/[id]/edit/page.meta.ts +2 -5
- package/src/modules/auth/backend/roles/page.tsx +2 -4
- package/src/modules/auth/backend/users/[id]/edit/page.meta.ts +2 -5
- package/src/modules/auth/backend/users/page.tsx +2 -3
- package/src/modules/auth/components/AclEditor.tsx +33 -63
- package/src/modules/auth/data/entities.ts +1 -4
- package/src/modules/auth/data/validators.ts +0 -5
- package/src/modules/auth/di.ts +16 -46
- package/src/modules/auth/frontend/reset/[token]/page.tsx +0 -74
- package/src/modules/auth/i18n/de.json +0 -389
- package/src/modules/auth/i18n/en.json +0 -389
- package/src/modules/auth/i18n/es.json +0 -389
- package/src/modules/auth/i18n/ko.json +0 -389
- package/src/modules/auth/i18n/pl.json +2 -391
- package/src/modules/auth/lib/grantChecks.ts +0 -6
- package/src/modules/auth/services/authService.ts +2 -18
- package/src/modules/auth/services/rbacService.ts +24 -110
- package/src/modules/business_rules/backend/logs/page.tsx +1 -4
- package/src/modules/business_rules/backend/rules/[id]/page.meta.ts +5 -0
- package/src/modules/business_rules/backend/rules/create/page.meta.ts +5 -1
- package/src/modules/business_rules/backend/rules/page.tsx +1 -4
- package/src/modules/business_rules/backend/sets/[id]/page.meta.ts +5 -0
- package/src/modules/business_rules/backend/sets/create/page.meta.ts +5 -1
- package/src/modules/business_rules/backend/sets/page.tsx +1 -4
- package/src/modules/business_rules/lib/expression-evaluator.ts +9 -9
- package/src/modules/business_rules/lib/rule-evaluator.ts +9 -10
- package/src/modules/catalog/ai-agents.ts +1 -1
- package/src/modules/catalog/ai-tools/merchandising-pack.ts +2 -2
- package/src/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.tsx +5 -12
- package/src/modules/catalog/components/categories/CategoriesDataTable.tsx +0 -3
- package/src/modules/catalog/components/products/ProductsDataTable.tsx +0 -7
- package/src/modules/catalog/i18n/de.json +0 -1
- package/src/modules/catalog/i18n/en.json +0 -1
- package/src/modules/catalog/i18n/es.json +0 -1
- package/src/modules/catalog/i18n/ko.json +0 -1
- package/src/modules/catalog/i18n/pl.json +0 -1
- package/src/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.tsx +0 -4
- package/src/modules/communication_channels/api/post/channels/[id]/test-send/route.ts +1 -17
- package/src/modules/communication_channels/api/post/test-seed/route.ts +16 -155
- package/src/modules/communication_channels/backend/communication_channels/channels/page.tsx +0 -4
- package/src/modules/communication_channels/commands/ingest-inbound-message.ts +1 -38
- package/src/modules/communication_channels/di.ts +0 -7
- package/src/modules/communication_channels/lib/adapter.ts +0 -14
- package/src/modules/communication_channels/lib/email-capabilities.ts +0 -4
- package/src/modules/communication_channels/lib/test-seed.ts +4 -64
- package/src/modules/configs/i18n/de.json +0 -2
- package/src/modules/configs/i18n/en.json +0 -2
- package/src/modules/configs/i18n/es.json +0 -2
- package/src/modules/configs/i18n/ko.json +0 -2
- package/src/modules/configs/i18n/pl.json +0 -2
- package/src/modules/configs/lib/system-status.ts +0 -9
- package/src/modules/currencies/backend/currencies/page.tsx +1 -4
- package/src/modules/currencies/backend/exchange-rates/page.tsx +1 -4
- package/src/modules/customer_accounts/api/admin/domain-mappings.ts +0 -7
- package/src/modules/customer_accounts/backend/customer_accounts/roles/page.tsx +1 -4
- package/src/modules/customer_accounts/backend/customer_accounts/settings/CustomerAccountsSettingsPageClient.tsx +138 -0
- package/src/modules/customer_accounts/backend/customer_accounts/settings/page.tsx +8 -132
- package/src/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.tsx +598 -0
- package/src/modules/customer_accounts/backend/customer_accounts/users/[id]/PortalUserDetailPageClient.tsx +838 -0
- package/src/modules/customer_accounts/backend/customer_accounts/users/[id]/page.tsx +6 -838
- package/src/modules/customer_accounts/backend/customer_accounts/users/page.tsx +6 -590
- package/src/modules/customer_accounts/extension-points.ts +1 -1
- package/src/modules/customer_accounts/lib/portalUrl.ts +112 -0
- package/src/modules/customer_accounts/services/domainMappingService.ts +0 -10
- package/src/modules/customers/ai-tools/companies-pack.ts +1 -4
- package/src/modules/customers/ai-tools/deal-analyzer-pack.ts +2 -17
- package/src/modules/customers/ai-tools/deals-pack.ts +1 -66
- package/src/modules/customers/ai-tools/people-pack.ts +1 -4
- package/src/modules/customers/api/activities/route.ts +0 -45
- package/src/modules/customers/api/companies/[id]/people/route.ts +73 -24
- package/src/modules/customers/api/companies/[id]/route.ts +107 -24
- package/src/modules/customers/api/dashboard/widgets/customer-todos/route.ts +8 -16
- package/src/modules/customers/api/deals/[id]/companies/route.ts +1 -4
- package/src/modules/customers/api/deals/[id]/people/route.ts +1 -4
- package/src/modules/customers/api/deals/[id]/route.ts +28 -17
- package/src/modules/customers/api/deals/[id]/stats/route.ts +25 -10
- package/src/modules/customers/api/deals/aggregate/route.ts +4 -14
- package/src/modules/customers/api/deals/map/route.ts +0 -1
- package/src/modules/customers/api/deals/route.ts +1 -50
- package/src/modules/customers/api/entity-roles-factory.ts +4 -8
- package/src/modules/customers/api/interactions/route.ts +2 -8
- package/src/modules/customers/api/interactions/tasks/route.ts +1 -24
- package/src/modules/customers/api/people/[id]/companies/[linkId]/route.ts +4 -12
- package/src/modules/customers/api/people/[id]/companies/context.ts +1 -4
- package/src/modules/customers/api/people/[id]/companies/enriched/route.ts +1 -4
- package/src/modules/customers/api/people/[id]/route.ts +11 -16
- package/src/modules/customers/api/people/check-phone/route.ts +10 -75
- package/src/modules/customers/api/todos/route.ts +2 -27
- package/src/modules/customers/backend/customers/companies/page.tsx +4 -7
- package/src/modules/customers/backend/customers/deals/[id]/page.tsx +2 -7
- package/src/modules/customers/backend/customers/deals/page.tsx +4 -10
- package/src/modules/customers/backend/customers/deals/pipeline/components/Lane.tsx +14 -5
- package/src/modules/customers/backend/customers/deals/pipeline/components/StatusFilterPopover.tsx +27 -109
- package/src/modules/customers/backend/customers/people/page.tsx +4 -7
- package/src/modules/customers/backend/hooks/useEmailDuplicateCheck.ts +4 -12
- package/src/modules/customers/commands/deals.ts +59 -34
- package/src/modules/customers/commands/interactions.ts +1 -1
- package/src/modules/customers/commands/personCompanyLinks.ts +8 -224
- package/src/modules/customers/components/CustomerTodosTable.tsx +0 -2
- package/src/modules/customers/components/DealsKpiStrip.tsx +7 -7
- package/src/modules/customers/components/calendar/AgendaList.tsx +3 -3
- package/src/modules/customers/components/calendar/CalendarEventEditor.tsx +1 -1
- package/src/modules/customers/components/calendar/CalendarScreen.tsx +1 -1
- package/src/modules/customers/components/calendar/CalendarSettingsModal.tsx +1 -1
- package/src/modules/customers/components/calendar/EventBlock.tsx +2 -2
- package/src/modules/customers/components/calendar/EventPeekPopover.tsx +2 -4
- package/src/modules/customers/components/calendar/editor/PeopleField.tsx +5 -61
- package/src/modules/customers/components/calendar/editor/hooks.ts +1 -7
- package/src/modules/customers/components/calendar/types.ts +2 -2
- package/src/modules/customers/components/detail/AssignRoleDialog.tsx +12 -7
- package/src/modules/customers/components/detail/CompanyKpiBar.tsx +4 -5
- package/src/modules/customers/components/detail/CompanyPeopleSection.tsx +1 -8
- package/src/modules/customers/components/detail/DealForm.tsx +2 -22
- package/src/modules/customers/components/detail/DealsSection.tsx +5 -11
- package/src/modules/customers/components/detail/EntityTagsDialog.tsx +12 -58
- package/src/modules/customers/components/detail/PersonCompaniesSection.tsx +1 -8
- package/src/modules/customers/components/detail/hooks/usePersonTasks.ts +14 -23
- package/src/modules/customers/components/detail/schedule/ParticipantsField.tsx +5 -5
- package/src/modules/customers/components/detail/schedule/useScheduleFormState.ts +5 -5
- package/src/modules/customers/components/detail/types.ts +1 -1
- package/src/modules/customers/components/detail/utils.ts +5 -15
- package/src/modules/customers/data/entities.ts +1 -1
- package/src/modules/customers/data/validators.ts +9 -50
- package/src/modules/customers/events.ts +0 -5
- package/src/modules/customers/i18n/de.json +1 -9
- package/src/modules/customers/i18n/en.json +1 -9
- package/src/modules/customers/i18n/es.json +1 -9
- package/src/modules/customers/i18n/ko.json +1 -9
- package/src/modules/customers/i18n/pl.json +1 -9
- package/src/modules/customers/lib/calendar/conflicts.ts +2 -10
- package/src/modules/customers/lib/calendar/editorPayload.ts +3 -4
- package/src/modules/customers/lib/calendar/mapItem.ts +3 -8
- package/src/modules/customers/lib/dealStatus.ts +0 -42
- package/src/modules/customers/lib/findPeopleByAddresses.ts +6 -8
- package/src/modules/customers/lib/personCompanies.ts +1 -136
- package/src/modules/customers/lib/todoCompatibility.ts +1 -19
- package/src/modules/dashboards/i18n/es.json +4 -4
- package/src/modules/dashboards/i18n/pl.json +7 -7
- package/src/modules/dashboards/lib/widgetScope.ts +0 -6
- package/src/modules/data_sync/AGENTS.md +1 -1
- package/src/modules/data_sync/backend/data-sync/page.tsx +1 -4
- package/src/modules/data_sync/lib/adapter.ts +0 -36
- package/src/modules/data_sync/lib/sync-engine.ts +5 -113
- package/src/modules/data_sync/workers/sync-export.ts +0 -4
- package/src/modules/data_sync/workers/sync-import.ts +0 -4
- package/src/modules/devices/AGENTS.md +1 -20
- package/src/modules/devices/acl.ts +1 -9
- package/src/modules/devices/api/admin/devices/[id]/route.ts +34 -5
- package/src/modules/devices/api/admin/devices/route.ts +1 -14
- package/src/modules/devices/api/deviceList.ts +11 -135
- package/src/modules/devices/api/openapi.ts +1 -9
- package/src/modules/devices/api/route.ts +1 -9
- package/src/modules/devices/backend/devices/[id]/page.tsx +32 -18
- package/src/modules/devices/backend/devices/create/page.tsx +1 -17
- package/src/modules/devices/backend/devices/page.tsx +45 -44
- package/src/modules/devices/i18n/de.json +2 -3
- package/src/modules/devices/i18n/en.json +2 -3
- package/src/modules/devices/i18n/es.json +2 -3
- package/src/modules/devices/i18n/ko.json +2 -3
- package/src/modules/devices/i18n/pl.json +2 -3
- package/src/modules/devices/setup.ts +2 -6
- package/src/modules/directory/backend/directory/organizations/page.tsx +1 -3
- package/src/modules/directory/backend/directory/tenants/page.tsx +1 -3
- package/src/modules/directory/di.ts +2 -14
- package/src/modules/directory/utils/organizationScope.ts +15 -4
- package/src/modules/entities/api/records.ts +0 -2
- package/src/modules/entities/backend/entities/user/[entityId]/records/page.tsx +1 -4
- package/src/modules/eudr/api/plots/route.ts +0 -4
- package/src/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.ts +2 -0
- package/src/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.ts +1 -0
- package/src/modules/eudr/backend/eudr/evidence-submissions/page.meta.ts +4 -1
- package/src/modules/eudr/backend/eudr/evidence-submissions/page.tsx +0 -4
- package/src/modules/eudr/backend/eudr/page.meta.ts +2 -2
- package/src/modules/eudr/backend/eudr/plots/[id]/page.meta.ts +2 -0
- package/src/modules/eudr/backend/eudr/plots/[id]/page.tsx +8 -2
- package/src/modules/eudr/backend/eudr/plots/create/page.meta.ts +1 -0
- package/src/modules/eudr/backend/eudr/plots/create/page.tsx +8 -2
- package/src/modules/eudr/backend/eudr/plots/page.meta.ts +4 -1
- package/src/modules/eudr/backend/eudr/plots/page.tsx +0 -4
- package/src/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.ts +2 -0
- package/src/modules/eudr/backend/eudr/product-mappings/create/page.meta.ts +1 -0
- package/src/modules/eudr/backend/eudr/product-mappings/page.meta.ts +4 -1
- package/src/modules/eudr/backend/eudr/product-mappings/page.tsx +0 -4
- package/src/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.ts +2 -0
- package/src/modules/eudr/backend/eudr/risk-assessments/create/page.meta.ts +1 -0
- package/src/modules/eudr/backend/eudr/risk-assessments/page.meta.ts +4 -1
- package/src/modules/eudr/backend/eudr/risk-assessments/page.tsx +0 -4
- package/src/modules/eudr/backend/eudr/statements/[id]/page.meta.ts +2 -0
- package/src/modules/eudr/backend/eudr/statements/[id]/page.tsx +2 -0
- package/src/modules/eudr/backend/eudr/statements/create/page.meta.ts +1 -0
- package/src/modules/eudr/backend/eudr/statements/page.meta.ts +4 -1
- package/src/modules/eudr/backend/eudr/statements/page.tsx +32 -30
- package/src/modules/eudr/commands/statements.ts +7 -2
- package/src/modules/eudr/components/crudErrorI18n.ts +31 -0
- package/src/modules/eudr/components/formConfig.tsx +9 -1
- package/src/modules/eudr/data/validators.ts +1 -16
- package/src/modules/eudr/i18n/de.json +3 -2
- package/src/modules/eudr/i18n/en.json +3 -2
- package/src/modules/eudr/i18n/es.json +3 -2
- package/src/modules/eudr/i18n/ko.json +3 -2
- package/src/modules/eudr/i18n/pl.json +3 -2
- package/src/modules/eudr/lib/statement-lifecycle.ts +8 -0
- package/src/modules/feature_toggles/components/FeatureTogglesTable.tsx +1 -2
- package/src/modules/feature_toggles/components/OverridesTable.tsx +1 -2
- package/src/modules/feature_toggles/defaults.json +8 -0
- package/src/modules/inbox_ops/backend/inbox-ops/log/page.tsx +0 -4
- package/src/modules/inbox_ops/backend/inbox-ops/page.tsx +0 -4
- package/src/modules/inbox_ops/lib/htmlToPlainText.ts +17 -1
- package/src/modules/integrations/api/[id]/credentials/route.ts +4 -6
- package/src/modules/integrations/backend/integrations/[id]/page.tsx +31 -61
- package/src/modules/integrations/backend/integrations/bundle/[id]/page.tsx +9 -44
- package/src/modules/integrations/data/validators.ts +2 -12
- package/src/modules/integrations/i18n/de.json +0 -1
- package/src/modules/integrations/i18n/en.json +0 -1
- package/src/modules/integrations/i18n/es.json +0 -1
- package/src/modules/integrations/i18n/ko.json +0 -1
- package/src/modules/integrations/i18n/pl.json +0 -1
- package/src/modules/integrations/lib/credentials-masking.ts +6 -10
- package/src/modules/messages/api/[id]/route.ts +1 -55
- package/src/modules/messages/api/openapi.ts +0 -20
- package/src/modules/messages/api/route.ts +2 -31
- package/src/modules/messages/components/MessagesInboxPageClient.tsx +16 -9
- package/src/modules/messages/components/inboxFilters.ts +0 -36
- package/src/modules/messages/components/message-detail/hooks/useMessageDetailsConversation.ts +1 -14
- package/src/modules/messages/components/message-detail/panels/MessageHeader.tsx +1 -3
- package/src/modules/messages/components/message-detail/panels/thread-panel.tsx +1 -2
- package/src/modules/messages/components/message-detail/types.ts +0 -3
- package/src/modules/messages/components/messageListLabels.ts +3 -52
- package/src/modules/messages/data/validators.ts +4 -43
- package/src/modules/payment_gateways/api/webhook/[provider]/route.ts +6 -4
- package/src/modules/payment_gateways/backend/payment-gateways/page.tsx +1 -4
- package/src/modules/payment_gateways/lib/webhook-processor.ts +0 -11
- package/src/modules/planner/backend/planner/availability-rulesets/page.tsx +0 -4
- package/src/modules/push_notifications/backend/push_notifications/page.tsx +1 -4
- package/src/modules/push_notifications/backend/push_notifications/send/page.tsx +4 -4
- package/src/modules/query_index/lib/engine.ts +61 -249
- package/src/modules/query_index/lib/search-tokens.ts +3 -135
- package/src/modules/resources/backend/resources/resource-types/page.tsx +1 -4
- package/src/modules/resources/backend/resources/resources/page.tsx +1 -4
- package/src/modules/sales/backend/sales/channels/offers/page.tsx +0 -4
- package/src/modules/sales/backend/sales/channels/page.tsx +0 -4
- package/src/modules/sales/backend/sales/documents/[id]/page.tsx +8 -14
- package/src/modules/sales/commands/documents.ts +0 -93
- package/src/modules/sales/components/PriceWithCurrency.tsx +5 -17
- package/src/modules/sales/components/channels/SalesChannelOffersPanel.tsx +0 -4
- package/src/modules/sales/components/documents/AdjustmentsSection.tsx +5 -6
- package/src/modules/sales/components/documents/ItemsSection.tsx +18 -56
- package/src/modules/sales/components/documents/LineItemDialog.tsx +21 -138
- package/src/modules/sales/components/documents/PaymentsSection.tsx +9 -20
- package/src/modules/sales/components/documents/ReturnsSection.tsx +5 -6
- package/src/modules/sales/components/documents/SalesDocumentsTable.tsx +14 -106
- package/src/modules/sales/components/documents/SalesOrderDraftLines.tsx +5 -6
- package/src/modules/sales/components/documents/ShipmentDialog.tsx +4 -5
- package/src/modules/sales/components/documents/ShipmentsSection.tsx +5 -6
- package/src/modules/sales/components/documents/lineItemUtils.ts +2 -7
- package/src/modules/sales/data/entities.ts +0 -6
- package/src/modules/sales/extension-points.ts +0 -1
- package/src/modules/sales/i18n/de.json +37 -8
- package/src/modules/sales/i18n/en.json +37 -8
- package/src/modules/sales/i18n/es.json +37 -8
- package/src/modules/sales/i18n/ko.json +37 -8
- package/src/modules/sales/i18n/pl.json +37 -8
- package/src/modules/sales/migrations/.snapshot-open-mercato.json +0 -60
- package/src/modules/sales/setup.ts +0 -2
- package/src/modules/sales/widgets/injection/document-history/widget.client.tsx +42 -2
- package/src/modules/sales/widgets/injection/payment-gateway-status-column/widget.ts +1 -9
- package/src/modules/sales/widgets/injection-table.ts +7 -4
- package/src/modules/staff/backend/staff/leave-requests/page.tsx +0 -4
- package/src/modules/staff/backend/staff/my-leave-requests/page.tsx +0 -4
- package/src/modules/staff/backend/staff/team-members/page.tsx +0 -6
- package/src/modules/staff/backend/staff/team-roles/page.tsx +0 -4
- package/src/modules/staff/backend/staff/teams/[id]/edit/page.tsx +0 -4
- package/src/modules/staff/backend/staff/teams/page.tsx +0 -4
- package/src/modules/staff/backend/staff/timesheets/page.tsx +1 -12
- package/src/modules/staff/backend/staff/timesheets/projects/page.tsx +0 -4
- package/src/modules/sync_excel/lib/adapters/customers.ts +0 -5
- package/src/modules/warranty_claims/api/assignees/route.ts +3 -3
- package/src/modules/warranty_claims/api/portal/attachments/route.ts +2 -2
- package/src/modules/warranty_claims/api/portal/claims/route.ts +9 -12
- package/src/modules/warranty_claims/backend/page.tsx +0 -4
- package/src/modules/warranty_claims/backend/warranty_claims/registrations/page.tsx +0 -4
- package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.tsx +0 -4
- package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.tsx +0 -4
- package/src/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.tsx +0 -4
- package/src/modules/wms/api/warehouses/route.ts +9 -13
- package/src/modules/wms/api/zones/route.ts +0 -16
- package/src/modules/wms/commands/configuration.ts +10 -159
- package/src/modules/wms/commands/inventory-actions.ts +0 -3
- package/src/modules/wms/commands/shared.ts +0 -17
- package/src/modules/wms/components/backend/WmsConfigurationPage.tsx +141 -95
- package/src/modules/wms/components/backend/WmsInventoryConsolePage.tsx +0 -2
- package/src/modules/wms/components/backend/WmsLocationDetailPage.tsx +30 -26
- package/src/modules/wms/components/backend/WmsLotDetailPage.tsx +21 -17
- package/src/modules/wms/components/backend/WmsLotsListPage.tsx +0 -2
- package/src/modules/wms/components/backend/WmsOperationalDashboardPage.tsx +17 -13
- package/src/modules/wms/components/backend/WmsSkuDetailPage.tsx +16 -12
- package/src/modules/wms/components/backend/inventoryMutationLoaders.ts +20 -36
- package/src/modules/wms/i18n/de.json +0 -2
- package/src/modules/wms/i18n/en.json +0 -2
- package/src/modules/wms/i18n/es.json +0 -2
- package/src/modules/wms/i18n/ko.json +0 -2
- package/src/modules/wms/i18n/pl.json +0 -2
- package/src/modules/workflows/backend/definitions/page.tsx +1 -4
- package/src/modules/workflows/backend/events/page.tsx +1 -4
- package/src/modules/workflows/backend/instances/page.tsx +1 -4
- package/src/modules/workflows/backend/tasks/page.tsx +1 -4
- package/src/modules/workflows/lib/activity-executor.ts +0 -9
- package/dist/modules/api_keys/di.js +0 -9
- package/dist/modules/api_keys/di.js.map +0 -7
- package/dist/modules/api_keys/services/principalService.js +0 -31
- package/dist/modules/api_keys/services/principalService.js.map +0 -7
- package/dist/modules/attachments/lib/attachment-service.js +0 -313
- package/dist/modules/attachments/lib/attachment-service.js.map +0 -7
- package/dist/modules/auth/api/reset/validate.js +0 -55
- package/dist/modules/auth/api/reset/validate.js.map +0 -7
- package/dist/modules/auth/commands/acl.js +0 -254
- package/dist/modules/auth/commands/acl.js.map +0 -7
- package/dist/modules/auth/lib/userIdFilter.js +0 -16
- package/dist/modules/auth/lib/userIdFilter.js.map +0 -7
- package/dist/modules/auth/services/principalService.js +0 -200
- package/dist/modules/auth/services/principalService.js.map +0 -7
- package/dist/modules/auth/services/roleOrganizationScope.js +0 -41
- package/dist/modules/auth/services/roleOrganizationScope.js.map +0 -7
- package/dist/modules/communication_channels/lib/outbound-recipient.js +0 -33
- package/dist/modules/communication_channels/lib/outbound-recipient.js.map +0 -7
- package/dist/modules/communication_channels/lib/resolve-channel-type.js +0 -51
- package/dist/modules/communication_channels/lib/resolve-channel-type.js.map +0 -7
- package/dist/modules/customers/backend/customers/deals/pipeline/components/toneClasses.js +0 -18
- package/dist/modules/customers/backend/customers/deals/pipeline/components/toneClasses.js.map +0 -7
- package/dist/modules/customers/lib/calendar/participantIdentity.js +0 -9
- package/dist/modules/customers/lib/calendar/participantIdentity.js.map +0 -7
- package/dist/modules/customers/lib/closureStage.js +0 -45
- package/dist/modules/customers/lib/closureStage.js.map +0 -7
- package/dist/modules/customers/lib/detailReadAccess.js +0 -12
- package/dist/modules/customers/lib/detailReadAccess.js.map +0 -7
- package/dist/modules/data_sync/lib/abandoned-run.js +0 -19
- package/dist/modules/data_sync/lib/abandoned-run.js.map +0 -7
- package/dist/modules/devices/api/deviceSerialization.js +0 -46
- package/dist/modules/devices/api/deviceSerialization.js.map +0 -7
- package/dist/modules/devices/backend/devices/useDeviceUserLabels.js +0 -34
- package/dist/modules/devices/backend/devices/useDeviceUserLabels.js.map +0 -7
- package/dist/modules/devices/backend/devices/userOptions.js +0 -52
- package/dist/modules/devices/backend/devices/userOptions.js.map +0 -7
- package/dist/modules/directory/services/organizationHierarchyService.js +0 -29
- package/dist/modules/directory/services/organizationHierarchyService.js.map +0 -7
- package/dist/modules/directory/services/organizationScopeService.js +0 -56
- package/dist/modules/directory/services/organizationScopeService.js.map +0 -7
- package/dist/modules/integrations/backend/integrations/credential-secret-fields.js +0 -55
- package/dist/modules/integrations/backend/integrations/credential-secret-fields.js.map +0 -7
- package/dist/modules/messages/lib/channel-sender-identity.js +0 -26
- package/dist/modules/messages/lib/channel-sender-identity.js.map +0 -7
- package/dist/modules/messages/lib/composeSourceChannelType.js +0 -41
- package/dist/modules/messages/lib/composeSourceChannelType.js.map +0 -7
- package/dist/modules/query_index/lib/search-entity-policy.js +0 -14
- package/dist/modules/query_index/lib/search-entity-policy.js.map +0 -7
- package/dist/modules/sales/components/documents/lineItemShipmentLock.js +0 -54
- package/dist/modules/sales/components/documents/lineItemShipmentLock.js.map +0 -7
- package/dist/modules/sales/lib/salesChannelsToggleSeed.js +0 -33
- package/dist/modules/sales/lib/salesChannelsToggleSeed.js.map +0 -7
- package/dist/modules/sales/migrations/Migration20260821120000_sales_notes_addresses_context_idx.js +0 -32
- package/dist/modules/sales/migrations/Migration20260821120000_sales_notes_addresses_context_idx.js.map +0 -7
- package/dist/modules/wms/api/warehouseSearch.js +0 -21
- package/dist/modules/wms/api/warehouseSearch.js.map +0 -7
- package/dist/modules/wms/components/backend/WarehouseEditDialog.js +0 -158
- package/dist/modules/wms/components/backend/WarehouseEditDialog.js.map +0 -7
- package/dist/modules/wms/components/backend/warehouseFormOptions.js +0 -66
- package/dist/modules/wms/components/backend/warehouseFormOptions.js.map +0 -7
- package/src/modules/api_keys/di.ts +0 -7
- package/src/modules/api_keys/services/principalService.ts +0 -33
- package/src/modules/attachments/lib/attachment-service.ts +0 -468
- package/src/modules/auth/api/reset/validate.ts +0 -57
- package/src/modules/auth/commands/acl.ts +0 -495
- package/src/modules/auth/lib/userIdFilter.ts +0 -31
- package/src/modules/auth/services/principalService.ts +0 -266
- package/src/modules/auth/services/roleOrganizationScope.ts +0 -70
- package/src/modules/communication_channels/lib/outbound-recipient.ts +0 -71
- package/src/modules/communication_channels/lib/resolve-channel-type.ts +0 -99
- package/src/modules/customers/backend/customers/deals/pipeline/components/toneClasses.ts +0 -21
- package/src/modules/customers/lib/calendar/participantIdentity.ts +0 -17
- package/src/modules/customers/lib/closureStage.ts +0 -76
- package/src/modules/customers/lib/detailReadAccess.ts +0 -35
- package/src/modules/data_sync/lib/abandoned-run.ts +0 -56
- package/src/modules/devices/api/deviceSerialization.ts +0 -50
- package/src/modules/devices/backend/devices/useDeviceUserLabels.ts +0 -45
- package/src/modules/devices/backend/devices/userOptions.ts +0 -99
- package/src/modules/directory/services/organizationHierarchyService.ts +0 -34
- package/src/modules/directory/services/organizationScopeService.ts +0 -85
- package/src/modules/integrations/backend/integrations/credential-secret-fields.ts +0 -84
- package/src/modules/messages/lib/channel-sender-identity.ts +0 -55
- package/src/modules/messages/lib/composeSourceChannelType.ts +0 -95
- package/src/modules/query_index/lib/search-entity-policy.ts +0 -46
- package/src/modules/sales/components/documents/lineItemShipmentLock.ts +0 -74
- package/src/modules/sales/lib/salesChannelsToggleSeed.ts +0 -42
- package/src/modules/sales/migrations/Migration20260821120000_sales_notes_addresses_context_idx.ts +0 -87
- package/src/modules/wms/api/warehouseSearch.ts +0 -23
- package/src/modules/wms/components/backend/WarehouseEditDialog.tsx +0 -216
- package/src/modules/wms/components/backend/warehouseFormOptions.ts +0 -72
|
@@ -39,7 +39,6 @@ function WarrantyClaimsPortalListPage({ params }) {
|
|
|
39
39
|
const [pageSize, setPageSize] = React.useState(20);
|
|
40
40
|
const [total, setTotal] = React.useState(0);
|
|
41
41
|
const [totalPages, setTotalPages] = React.useState(1);
|
|
42
|
-
const [totalIsCapped, setTotalIsCapped] = React.useState(false);
|
|
43
42
|
const [isLoading, setIsLoading] = React.useState(true);
|
|
44
43
|
const [error, setError] = React.useState(null);
|
|
45
44
|
const [search, setSearch] = React.useState("");
|
|
@@ -75,7 +74,6 @@ function WarrantyClaimsPortalListPage({ params }) {
|
|
|
75
74
|
setRows(res.result.items);
|
|
76
75
|
setTotal(res.result.total);
|
|
77
76
|
setTotalPages(res.result.totalPages);
|
|
78
|
-
setTotalIsCapped(res.result.totalIsCapped === true);
|
|
79
77
|
}).catch(() => {
|
|
80
78
|
if (!cancelled) {
|
|
81
79
|
setError(t("warranty_claims.portal.error.loadList"));
|
|
@@ -222,7 +220,6 @@ function WarrantyClaimsPortalListPage({ params }) {
|
|
|
222
220
|
pageSize,
|
|
223
221
|
total,
|
|
224
222
|
totalPages,
|
|
225
|
-
totalIsCapped,
|
|
226
223
|
onPageChange: setPage,
|
|
227
224
|
onPageSizeChange: (nextPageSize) => {
|
|
228
225
|
setPageSize(nextPageSize);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../src/modules/warranty_claims/frontend/%5BorgSlug%5D/portal/claims/page.tsx"],
|
|
4
|
-
"sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport Link from 'next/link'\nimport { useRouter } from 'next/navigation'\nimport type { LegacyColumnDef as ColumnDef } from '@tanstack/react-table/legacy'\nimport { ChevronRight, Plus, ShieldCheck } from 'lucide-react'\nimport { useLocale, useT } from '@open-mercato/shared/lib/i18n/context'\nimport { formatRelativeTime } from '@open-mercato/shared/lib/time'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { Tabs, TabsList, TabsTrigger } from '@open-mercato/ui/primitives/tabs'\nimport { Spinner } from '@open-mercato/ui/primitives/spinner'\nimport { DataTable } from '@open-mercato/ui'\nimport type { FilterDef, FilterValues } from '@open-mercato/ui/backend/FilterBar'\nimport { ErrorMessage } from '@open-mercato/ui/backend/detail'\nimport { apiCall } from '@open-mercato/ui/backend/utils/apiCall'\nimport { usePortalContext } from '@open-mercato/ui/portal/PortalContext'\nimport { PortalEmptyState } from '@open-mercato/ui/portal/components/PortalEmptyState'\nimport {\n ClaimStatusBadge,\n CLAIM_STATUS_BADGE_VARIANTS,\n type ClaimStatus,\n} from '../../../../backend/components/ClaimStatusBadge'\n\ntype Props = { params: { orgSlug: string } }\n\ntype PortalClaimRow = {\n id: string\n claimNumber: string\n claimType: string\n status: string\n createdAt: string | null\n updatedAt: string | null\n}\n\ntype PortalClaimsResponse = {\n items: PortalClaimRow[]\n total: number\n page: number\n pageSize: number\n totalPages: number\n totalIsCapped?: boolean\n}\n\nfunction formatDate(value: string | null, fallback: string, locale: string): string {\n if (!value) return fallback\n const date = new Date(value)\n if (Number.isNaN(date.getTime())) return value\n return date.toLocaleDateString(locale || undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n })\n}\n\nexport default function WarrantyClaimsPortalListPage({ params }: Props) {\n const t = useT()\n const locale = useLocale()\n const router = useRouter()\n const { auth } = usePortalContext()\n const { user, loading } = auth\n const [rows, setRows] = React.useState<PortalClaimRow[]>([])\n const [page, setPage] = React.useState(1)\n const [pageSize, setPageSize] = React.useState(20)\n const [total, setTotal] = React.useState(0)\n const [totalPages, setTotalPages] = React.useState(1)\n const [totalIsCapped, setTotalIsCapped] = React.useState(false)\n const [isLoading, setIsLoading] = React.useState(true)\n const [error, setError] = React.useState<string | null>(null)\n const [search, setSearch] = React.useState('')\n const [filterValues, setFilterValues] = React.useState<FilterValues>({})\n const [stateGroup, setStateGroup] = React.useState<'all' | 'open' | 'resolved'>('all')\n const [tabCounts, setTabCounts] = React.useState<Partial<Record<'all' | 'open' | 'resolved', number>>>({})\n\n React.useEffect(() => {\n if (!loading && !user) {\n router.replace(`/${params.orgSlug}/portal/login`)\n }\n }, [loading, user, router, params.orgSlug])\n\n const statusFilter = typeof filterValues.status === 'string' ? filterValues.status : ''\n\n React.useEffect(() => {\n if (!user) return\n let cancelled = false\n setIsLoading(true)\n setError(null)\n const queryParams = new URLSearchParams({ page: String(page), pageSize: String(pageSize) })\n if (search.trim()) queryParams.set('search', search.trim())\n if (statusFilter) queryParams.set('status', statusFilter)\n else if (stateGroup !== 'all') queryParams.set('stateGroup', stateGroup)\n apiCall<PortalClaimsResponse>(\n `/api/warranty_claims/portal/claims?${queryParams.toString()}`,\n )\n .then((res) => {\n if (cancelled) return\n if (!res.ok || !res.result) {\n setError(t('warranty_claims.portal.error.loadList'))\n setRows([])\n setTotal(0)\n setTotalPages(1)\n return\n }\n setRows(res.result.items)\n setTotal(res.result.total)\n setTotalPages(res.result.totalPages)\n setTotalIsCapped(res.result.totalIsCapped === true)\n })\n .catch(() => {\n if (!cancelled) {\n setError(t('warranty_claims.portal.error.loadList'))\n setRows([])\n setTotal(0)\n setTotalPages(1)\n }\n })\n .finally(() => {\n if (!cancelled) setIsLoading(false)\n })\n return () => {\n cancelled = true\n }\n }, [page, pageSize, search, stateGroup, statusFilter, t, user])\n\n React.useEffect(() => {\n if (!user) return\n const controller = new AbortController()\n const segments: Array<readonly ['all' | 'open' | 'resolved', string | null]> = [\n ['all', null],\n ['open', 'open'],\n ['resolved', 'resolved'],\n ]\n Promise.all(segments.map(async ([segment, state]) => {\n const query = new URLSearchParams({ page: '1', pageSize: '1' })\n if (state) query.set('stateGroup', state)\n const response = await apiCall<PortalClaimsResponse>(\n `/api/warranty_claims/portal/claims?${query.toString()}`,\n { signal: controller.signal },\n )\n if (!response.ok || !response.result) throw new Error('[internal] Failed to load portal claim counts')\n return [segment, response.result.total] as const\n }))\n .then((entries) => {\n if (!controller.signal.aborted) setTabCounts(Object.fromEntries(entries))\n })\n .catch(() => {\n if (!controller.signal.aborted) setTabCounts({})\n })\n return () => controller.abort()\n }, [user])\n\n const statusOptions = React.useMemo(\n () => (Object.keys(CLAIM_STATUS_BADGE_VARIANTS) as ClaimStatus[]).map((status) => ({\n value: status,\n label: t(`warranty_claims.status.${status}`),\n })),\n [t],\n )\n\n const filters = React.useMemo<FilterDef[]>(() => [\n {\n id: 'status',\n label: t('warranty_claims.list.filter.status'),\n type: 'select',\n options: statusOptions,\n },\n ], [statusOptions, t])\n\n const columns = React.useMemo<ColumnDef<PortalClaimRow>[]>(() => [\n {\n id: 'claim',\n header: t('warranty_claims.portal.list.column.claim', 'Claim'),\n cell: ({ row }) => (\n <span className=\"block min-w-0\">\n <span className=\"block truncate font-medium text-foreground\">\n {t(`warranty_claims.claimType.${row.original.claimType}`)}\n </span>\n <span className=\"block text-overline font-normal text-muted-foreground\">{row.original.claimNumber}</span>\n </span>\n ),\n meta: { truncate: true, maxWidth: 360 },\n },\n {\n accessorKey: 'status',\n header: t('warranty_claims.list.column.status'),\n cell: ({ row }) => <ClaimStatusBadge status={row.original.status} />,\n meta: { maxWidth: 180 },\n },\n {\n accessorKey: 'createdAt',\n header: t('warranty_claims.portal.list.column.submittedAt', 'Submitted'),\n cell: ({ row }) => formatDate(row.original.createdAt, t('warranty_claims.portal.value.notAvailable'), locale),\n meta: { maxWidth: 160 },\n },\n {\n accessorKey: 'updatedAt',\n header: t('warranty_claims.list.column.updatedAt'),\n cell: ({ row }) => formatRelativeTime(row.original.updatedAt, { locale }) ?? t('warranty_claims.portal.value.notAvailable'),\n meta: { maxWidth: 160 },\n },\n {\n id: 'open',\n header: '',\n meta: { maxWidth: 48 },\n cell: () => <ChevronRight aria-hidden=\"true\" className=\"size-4 text-muted-foreground\" />,\n },\n ], [locale, t])\n\n if (loading) {\n return <div className=\"flex items-center justify-center py-20\"><Spinner /></div>\n }\n\n if (!user) return null\n\n return (\n <div className=\"mx-auto flex w-full max-w-5xl flex-col gap-5 pt-2\">\n <div className=\"flex items-center justify-between gap-4\">\n <h1 className=\"text-2xl font-bold tracking-tight text-foreground\">{t('warranty_claims.portal.listTitle')}</h1>\n <div className=\"shrink-0\">\n <Button asChild>\n <Link href={`/${params.orgSlug}/portal/claims/new`}>\n {t('warranty_claims.portal.newClaim')}\n </Link>\n </Button>\n </div>\n </div>\n\n {error ? (\n <ErrorMessage label={error} />\n ) : null}\n\n <section className=\"overflow-hidden rounded-xl border border-border bg-card\">\n <Tabs\n value={stateGroup}\n onValueChange={(value) => {\n setStateGroup(value === 'open' || value === 'resolved' ? value : 'all')\n setFilterValues({})\n setPage(1)\n }}\n variant=\"underline\"\n >\n <TabsList className=\"flex h-auto w-full gap-1 px-7\" aria-label={t('warranty_claims.portal.list.tabs.label', 'Claim status')}>\n <TabsTrigger value=\"all\" count={tabCounts.all} className=\"gap-2 px-4 pb-2 pt-3 [&_[data-slot=tabs-trigger-count]]:h-auto [&_[data-slot=tabs-trigger-count]]:min-w-0 [&_[data-slot=tabs-trigger-count]]:rounded-md [&_[data-slot=tabs-trigger-count]]:bg-muted [&_[data-slot=tabs-trigger-count]]:px-1.5 [&_[data-slot=tabs-trigger-count]]:py-0.5 [&_[data-slot=tabs-trigger-count]]:text-overline [&_[data-slot=tabs-trigger-count]]:text-muted-foreground\">{t('warranty_claims.portal.list.tabs.all', 'All')}</TabsTrigger>\n <TabsTrigger value=\"open\" count={tabCounts.open} className=\"gap-2 px-4 pb-2 pt-3 [&_[data-slot=tabs-trigger-count]]:h-auto [&_[data-slot=tabs-trigger-count]]:min-w-0 [&_[data-slot=tabs-trigger-count]]:rounded-md [&_[data-slot=tabs-trigger-count]]:bg-muted [&_[data-slot=tabs-trigger-count]]:px-1.5 [&_[data-slot=tabs-trigger-count]]:py-0.5 [&_[data-slot=tabs-trigger-count]]:text-overline [&_[data-slot=tabs-trigger-count]]:text-muted-foreground\">{t('warranty_claims.portal.list.tabs.open', 'Open')}</TabsTrigger>\n <TabsTrigger value=\"resolved\" count={tabCounts.resolved} className=\"gap-2 px-4 pb-2 pt-3 [&_[data-slot=tabs-trigger-count]]:h-auto [&_[data-slot=tabs-trigger-count]]:min-w-0 [&_[data-slot=tabs-trigger-count]]:rounded-md [&_[data-slot=tabs-trigger-count]]:bg-muted [&_[data-slot=tabs-trigger-count]]:px-1.5 [&_[data-slot=tabs-trigger-count]]:py-0.5 [&_[data-slot=tabs-trigger-count]]:text-overline [&_[data-slot=tabs-trigger-count]]:text-muted-foreground\">{t('warranty_claims.portal.list.tabs.resolved', 'Resolved')}</TabsTrigger>\n </TabsList>\n </Tabs>\n <div className=\"[&>[data-component-handle]>div:first-child]:px-7 [&>[data-component-handle]>div:first-child]:py-4 [&>[data-component-handle]>div:first-child_[data-slot=button]]:h-8 [&>[data-component-handle]>div:first-child_[data-slot=search-input-wrapper]]:h-8 [&_[data-slot=table-header]_[data-slot=table-row]]:h-9 [&_[data-slot=table-body]_[data-slot=table-row]]:h-16 [&_:has(>[data-slot=search-input-wrapper])]:lg:w-56\">\n <DataTable<PortalClaimRow>\n embedded\n columns={columns}\n data={rows}\n isLoading={isLoading}\n error={error}\n searchValue={search}\n onSearchChange={(value) => {\n setSearch(value)\n setPage(1)\n }}\n searchPlaceholder={t('warranty_claims.portal.list.searchPlaceholder')}\n filters={filters}\n filterValues={filterValues}\n onFiltersApply={(values) => {\n setFilterValues(values)\n if (typeof values.status === 'string' && values.status) setStateGroup('all')\n setPage(1)\n }}\n onFiltersClear={() => {\n setFilterValues({})\n setPage(1)\n }}\n pagination={{\n page,\n pageSize,\n total,\n totalPages,\n totalIsCapped,\n onPageChange: setPage,\n onPageSizeChange: (nextPageSize) => {\n setPageSize(nextPageSize)\n setPage(1)\n },\n }}\n onRowClick={(row) => {\n router.push(`/${params.orgSlug}/portal/claims/${row.id}`)\n }}\n rowClickActionIds={['open']}\n emptyState={(\n <PortalEmptyState\n icon={<ShieldCheck className=\"size-5\" />}\n title={t('warranty_claims.portal.empty.title')}\n description={t('warranty_claims.portal.empty.description')}\n action={\n <Button asChild>\n <Link href={`/${params.orgSlug}/portal/claims/new`}>\n <Plus className=\"size-4\" aria-hidden=\"true\" />\n {t('warranty_claims.portal.newClaim')}\n </Link>\n </Button>\n }\n />\n )}\n />\n </div>\n </section>\n </div>\n )\n}\n"],
|
|
5
|
-
"mappings": ";
|
|
4
|
+
"sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport Link from 'next/link'\nimport { useRouter } from 'next/navigation'\nimport type { LegacyColumnDef as ColumnDef } from '@tanstack/react-table/legacy'\nimport { ChevronRight, Plus, ShieldCheck } from 'lucide-react'\nimport { useLocale, useT } from '@open-mercato/shared/lib/i18n/context'\nimport { formatRelativeTime } from '@open-mercato/shared/lib/time'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { Tabs, TabsList, TabsTrigger } from '@open-mercato/ui/primitives/tabs'\nimport { Spinner } from '@open-mercato/ui/primitives/spinner'\nimport { DataTable } from '@open-mercato/ui'\nimport type { FilterDef, FilterValues } from '@open-mercato/ui/backend/FilterBar'\nimport { ErrorMessage } from '@open-mercato/ui/backend/detail'\nimport { apiCall } from '@open-mercato/ui/backend/utils/apiCall'\nimport { usePortalContext } from '@open-mercato/ui/portal/PortalContext'\nimport { PortalEmptyState } from '@open-mercato/ui/portal/components/PortalEmptyState'\nimport {\n ClaimStatusBadge,\n CLAIM_STATUS_BADGE_VARIANTS,\n type ClaimStatus,\n} from '../../../../backend/components/ClaimStatusBadge'\n\ntype Props = { params: { orgSlug: string } }\n\ntype PortalClaimRow = {\n id: string\n claimNumber: string\n claimType: string\n status: string\n createdAt: string | null\n updatedAt: string | null\n}\n\ntype PortalClaimsResponse = {\n items: PortalClaimRow[]\n total: number\n page: number\n pageSize: number\n totalPages: number\n}\n\nfunction formatDate(value: string | null, fallback: string, locale: string): string {\n if (!value) return fallback\n const date = new Date(value)\n if (Number.isNaN(date.getTime())) return value\n return date.toLocaleDateString(locale || undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n })\n}\n\nexport default function WarrantyClaimsPortalListPage({ params }: Props) {\n const t = useT()\n const locale = useLocale()\n const router = useRouter()\n const { auth } = usePortalContext()\n const { user, loading } = auth\n const [rows, setRows] = React.useState<PortalClaimRow[]>([])\n const [page, setPage] = React.useState(1)\n const [pageSize, setPageSize] = React.useState(20)\n const [total, setTotal] = React.useState(0)\n const [totalPages, setTotalPages] = React.useState(1)\n const [isLoading, setIsLoading] = React.useState(true)\n const [error, setError] = React.useState<string | null>(null)\n const [search, setSearch] = React.useState('')\n const [filterValues, setFilterValues] = React.useState<FilterValues>({})\n const [stateGroup, setStateGroup] = React.useState<'all' | 'open' | 'resolved'>('all')\n const [tabCounts, setTabCounts] = React.useState<Partial<Record<'all' | 'open' | 'resolved', number>>>({})\n\n React.useEffect(() => {\n if (!loading && !user) {\n router.replace(`/${params.orgSlug}/portal/login`)\n }\n }, [loading, user, router, params.orgSlug])\n\n const statusFilter = typeof filterValues.status === 'string' ? filterValues.status : ''\n\n React.useEffect(() => {\n if (!user) return\n let cancelled = false\n setIsLoading(true)\n setError(null)\n const queryParams = new URLSearchParams({ page: String(page), pageSize: String(pageSize) })\n if (search.trim()) queryParams.set('search', search.trim())\n if (statusFilter) queryParams.set('status', statusFilter)\n else if (stateGroup !== 'all') queryParams.set('stateGroup', stateGroup)\n apiCall<PortalClaimsResponse>(\n `/api/warranty_claims/portal/claims?${queryParams.toString()}`,\n )\n .then((res) => {\n if (cancelled) return\n if (!res.ok || !res.result) {\n setError(t('warranty_claims.portal.error.loadList'))\n setRows([])\n setTotal(0)\n setTotalPages(1)\n return\n }\n setRows(res.result.items)\n setTotal(res.result.total)\n setTotalPages(res.result.totalPages)\n })\n .catch(() => {\n if (!cancelled) {\n setError(t('warranty_claims.portal.error.loadList'))\n setRows([])\n setTotal(0)\n setTotalPages(1)\n }\n })\n .finally(() => {\n if (!cancelled) setIsLoading(false)\n })\n return () => {\n cancelled = true\n }\n }, [page, pageSize, search, stateGroup, statusFilter, t, user])\n\n React.useEffect(() => {\n if (!user) return\n const controller = new AbortController()\n const segments: Array<readonly ['all' | 'open' | 'resolved', string | null]> = [\n ['all', null],\n ['open', 'open'],\n ['resolved', 'resolved'],\n ]\n Promise.all(segments.map(async ([segment, state]) => {\n const query = new URLSearchParams({ page: '1', pageSize: '1' })\n if (state) query.set('stateGroup', state)\n const response = await apiCall<PortalClaimsResponse>(\n `/api/warranty_claims/portal/claims?${query.toString()}`,\n { signal: controller.signal },\n )\n if (!response.ok || !response.result) throw new Error('[internal] Failed to load portal claim counts')\n return [segment, response.result.total] as const\n }))\n .then((entries) => {\n if (!controller.signal.aborted) setTabCounts(Object.fromEntries(entries))\n })\n .catch(() => {\n if (!controller.signal.aborted) setTabCounts({})\n })\n return () => controller.abort()\n }, [user])\n\n const statusOptions = React.useMemo(\n () => (Object.keys(CLAIM_STATUS_BADGE_VARIANTS) as ClaimStatus[]).map((status) => ({\n value: status,\n label: t(`warranty_claims.status.${status}`),\n })),\n [t],\n )\n\n const filters = React.useMemo<FilterDef[]>(() => [\n {\n id: 'status',\n label: t('warranty_claims.list.filter.status'),\n type: 'select',\n options: statusOptions,\n },\n ], [statusOptions, t])\n\n const columns = React.useMemo<ColumnDef<PortalClaimRow>[]>(() => [\n {\n id: 'claim',\n header: t('warranty_claims.portal.list.column.claim', 'Claim'),\n cell: ({ row }) => (\n <span className=\"block min-w-0\">\n <span className=\"block truncate font-medium text-foreground\">\n {t(`warranty_claims.claimType.${row.original.claimType}`)}\n </span>\n <span className=\"block text-overline font-normal text-muted-foreground\">{row.original.claimNumber}</span>\n </span>\n ),\n meta: { truncate: true, maxWidth: 360 },\n },\n {\n accessorKey: 'status',\n header: t('warranty_claims.list.column.status'),\n cell: ({ row }) => <ClaimStatusBadge status={row.original.status} />,\n meta: { maxWidth: 180 },\n },\n {\n accessorKey: 'createdAt',\n header: t('warranty_claims.portal.list.column.submittedAt', 'Submitted'),\n cell: ({ row }) => formatDate(row.original.createdAt, t('warranty_claims.portal.value.notAvailable'), locale),\n meta: { maxWidth: 160 },\n },\n {\n accessorKey: 'updatedAt',\n header: t('warranty_claims.list.column.updatedAt'),\n cell: ({ row }) => formatRelativeTime(row.original.updatedAt, { locale }) ?? t('warranty_claims.portal.value.notAvailable'),\n meta: { maxWidth: 160 },\n },\n {\n id: 'open',\n header: '',\n meta: { maxWidth: 48 },\n cell: () => <ChevronRight aria-hidden=\"true\" className=\"size-4 text-muted-foreground\" />,\n },\n ], [locale, t])\n\n if (loading) {\n return <div className=\"flex items-center justify-center py-20\"><Spinner /></div>\n }\n\n if (!user) return null\n\n return (\n <div className=\"mx-auto flex w-full max-w-5xl flex-col gap-5 pt-2\">\n <div className=\"flex items-center justify-between gap-4\">\n <h1 className=\"text-2xl font-bold tracking-tight text-foreground\">{t('warranty_claims.portal.listTitle')}</h1>\n <div className=\"shrink-0\">\n <Button asChild>\n <Link href={`/${params.orgSlug}/portal/claims/new`}>\n {t('warranty_claims.portal.newClaim')}\n </Link>\n </Button>\n </div>\n </div>\n\n {error ? (\n <ErrorMessage label={error} />\n ) : null}\n\n <section className=\"overflow-hidden rounded-xl border border-border bg-card\">\n <Tabs\n value={stateGroup}\n onValueChange={(value) => {\n setStateGroup(value === 'open' || value === 'resolved' ? value : 'all')\n setFilterValues({})\n setPage(1)\n }}\n variant=\"underline\"\n >\n <TabsList className=\"flex h-auto w-full gap-1 px-7\" aria-label={t('warranty_claims.portal.list.tabs.label', 'Claim status')}>\n <TabsTrigger value=\"all\" count={tabCounts.all} className=\"gap-2 px-4 pb-2 pt-3 [&_[data-slot=tabs-trigger-count]]:h-auto [&_[data-slot=tabs-trigger-count]]:min-w-0 [&_[data-slot=tabs-trigger-count]]:rounded-md [&_[data-slot=tabs-trigger-count]]:bg-muted [&_[data-slot=tabs-trigger-count]]:px-1.5 [&_[data-slot=tabs-trigger-count]]:py-0.5 [&_[data-slot=tabs-trigger-count]]:text-overline [&_[data-slot=tabs-trigger-count]]:text-muted-foreground\">{t('warranty_claims.portal.list.tabs.all', 'All')}</TabsTrigger>\n <TabsTrigger value=\"open\" count={tabCounts.open} className=\"gap-2 px-4 pb-2 pt-3 [&_[data-slot=tabs-trigger-count]]:h-auto [&_[data-slot=tabs-trigger-count]]:min-w-0 [&_[data-slot=tabs-trigger-count]]:rounded-md [&_[data-slot=tabs-trigger-count]]:bg-muted [&_[data-slot=tabs-trigger-count]]:px-1.5 [&_[data-slot=tabs-trigger-count]]:py-0.5 [&_[data-slot=tabs-trigger-count]]:text-overline [&_[data-slot=tabs-trigger-count]]:text-muted-foreground\">{t('warranty_claims.portal.list.tabs.open', 'Open')}</TabsTrigger>\n <TabsTrigger value=\"resolved\" count={tabCounts.resolved} className=\"gap-2 px-4 pb-2 pt-3 [&_[data-slot=tabs-trigger-count]]:h-auto [&_[data-slot=tabs-trigger-count]]:min-w-0 [&_[data-slot=tabs-trigger-count]]:rounded-md [&_[data-slot=tabs-trigger-count]]:bg-muted [&_[data-slot=tabs-trigger-count]]:px-1.5 [&_[data-slot=tabs-trigger-count]]:py-0.5 [&_[data-slot=tabs-trigger-count]]:text-overline [&_[data-slot=tabs-trigger-count]]:text-muted-foreground\">{t('warranty_claims.portal.list.tabs.resolved', 'Resolved')}</TabsTrigger>\n </TabsList>\n </Tabs>\n <div className=\"[&>[data-component-handle]>div:first-child]:px-7 [&>[data-component-handle]>div:first-child]:py-4 [&>[data-component-handle]>div:first-child_[data-slot=button]]:h-8 [&>[data-component-handle]>div:first-child_[data-slot=search-input-wrapper]]:h-8 [&_[data-slot=table-header]_[data-slot=table-row]]:h-9 [&_[data-slot=table-body]_[data-slot=table-row]]:h-16 [&_:has(>[data-slot=search-input-wrapper])]:lg:w-56\">\n <DataTable<PortalClaimRow>\n embedded\n columns={columns}\n data={rows}\n isLoading={isLoading}\n error={error}\n searchValue={search}\n onSearchChange={(value) => {\n setSearch(value)\n setPage(1)\n }}\n searchPlaceholder={t('warranty_claims.portal.list.searchPlaceholder')}\n filters={filters}\n filterValues={filterValues}\n onFiltersApply={(values) => {\n setFilterValues(values)\n if (typeof values.status === 'string' && values.status) setStateGroup('all')\n setPage(1)\n }}\n onFiltersClear={() => {\n setFilterValues({})\n setPage(1)\n }}\n pagination={{\n page,\n pageSize,\n total,\n totalPages,\n onPageChange: setPage,\n onPageSizeChange: (nextPageSize) => {\n setPageSize(nextPageSize)\n setPage(1)\n },\n }}\n onRowClick={(row) => {\n router.push(`/${params.orgSlug}/portal/claims/${row.id}`)\n }}\n rowClickActionIds={['open']}\n emptyState={(\n <PortalEmptyState\n icon={<ShieldCheck className=\"size-5\" />}\n title={t('warranty_claims.portal.empty.title')}\n description={t('warranty_claims.portal.empty.description')}\n action={\n <Button asChild>\n <Link href={`/${params.orgSlug}/portal/claims/new`}>\n <Plus className=\"size-4\" aria-hidden=\"true\" />\n {t('warranty_claims.portal.newClaim')}\n </Link>\n </Button>\n }\n />\n )}\n />\n </div>\n </section>\n </div>\n )\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,9 +2,9 @@ import { z } from "zod";
|
|
|
2
2
|
import { makeCrudRoute } from "@open-mercato/shared/lib/crud/factory";
|
|
3
3
|
import { resolveTranslations } from "@open-mercato/shared/lib/i18n/server";
|
|
4
4
|
import { parseScopedCommandInput, resolveCrudRecordId } from "@open-mercato/shared/lib/api/scoped";
|
|
5
|
+
import { escapeLikePattern } from "@open-mercato/shared/lib/db/escapeLikePattern";
|
|
5
6
|
import { parseBooleanToken } from "@open-mercato/shared/lib/boolean";
|
|
6
7
|
import { E } from "../../../../generated/entities.ids.generated.js";
|
|
7
|
-
import { buildWarehouseListSearchOr } from "../warehouseSearch.js";
|
|
8
8
|
import { Warehouse } from "../../data/entities.js";
|
|
9
9
|
import { warehouseCreateSchema, warehouseUpdateSchema } from "../../data/validators.js";
|
|
10
10
|
import { createPagedListResponseSchema, createWmsCrudOpenApi, defaultOkResponseSchema } from "../openapi.js";
|
|
@@ -71,9 +71,6 @@ const crud = makeCrudRoute({
|
|
|
71
71
|
F.created_at,
|
|
72
72
|
F.updated_at
|
|
73
73
|
],
|
|
74
|
-
decorateCustomFields: {
|
|
75
|
-
entityIds: E.wms.warehouse
|
|
76
|
-
},
|
|
77
74
|
sortFieldMap: {
|
|
78
75
|
name: F.name,
|
|
79
76
|
code: F.code,
|
|
@@ -91,7 +88,13 @@ const crud = makeCrudRoute({
|
|
|
91
88
|
if (isActive !== null) filters[F.is_active] = { $eq: isActive };
|
|
92
89
|
const term = query.search?.trim();
|
|
93
90
|
if (term) {
|
|
94
|
-
|
|
91
|
+
const like = `%${escapeLikePattern(term)}%`;
|
|
92
|
+
filters.$or = [
|
|
93
|
+
{ [F.name]: { $ilike: like } },
|
|
94
|
+
{ [F.code]: { $ilike: like } },
|
|
95
|
+
{ [F.city]: { $ilike: like } },
|
|
96
|
+
{ [F.country]: { $ilike: like } }
|
|
97
|
+
];
|
|
95
98
|
}
|
|
96
99
|
return filters;
|
|
97
100
|
}
|
|
@@ -104,10 +107,7 @@ const crud = makeCrudRoute({
|
|
|
104
107
|
const { translate } = await resolveTranslations();
|
|
105
108
|
return parseScopedCommandInput(warehouseCreateSchema, raw ?? {}, ctx, translate);
|
|
106
109
|
},
|
|
107
|
-
response: ({ result }) => ({
|
|
108
|
-
id: result?.warehouseId ?? null,
|
|
109
|
-
updatedAt: result?.updatedAt ?? null
|
|
110
|
-
}),
|
|
110
|
+
response: ({ result }) => ({ id: result?.warehouseId ?? null }),
|
|
111
111
|
status: 201
|
|
112
112
|
},
|
|
113
113
|
update: {
|
|
@@ -157,10 +157,6 @@ const openApi = createWmsCrudOpenApi({
|
|
|
157
157
|
listResponseSchema: createPagedListResponseSchema(warehouseListItemSchema),
|
|
158
158
|
create: {
|
|
159
159
|
schema: warehouseCreateSchema,
|
|
160
|
-
responseSchema: z.object({
|
|
161
|
-
id: z.string().uuid().nullable(),
|
|
162
|
-
updatedAt: z.string().nullable()
|
|
163
|
-
}),
|
|
164
160
|
description: "Creates a warehouse for inventory operations."
|
|
165
161
|
},
|
|
166
162
|
update: {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/modules/wms/api/warehouses/route.ts"],
|
|
4
|
-
"sourcesContent": ["import { z } from 'zod'\nimport { makeCrudRoute } from '@open-mercato/shared/lib/crud/factory'\nimport { resolveTranslations } from '@open-mercato/shared/lib/i18n/server'\nimport { parseScopedCommandInput, resolveCrudRecordId } from '@open-mercato/shared/lib/api/scoped'\nimport {
|
|
5
|
-
"mappings": "AAAA,SAAS,SAAS;AAClB,SAAS,qBAAqB;AAC9B,SAAS,2BAA2B;AACpC,SAAS,yBAAyB,2BAA2B;AAC7D,SAAS,yBAAyB;AAClC,SAAS,
|
|
4
|
+
"sourcesContent": ["import { z } from 'zod'\nimport { makeCrudRoute } from '@open-mercato/shared/lib/crud/factory'\nimport { resolveTranslations } from '@open-mercato/shared/lib/i18n/server'\nimport { parseScopedCommandInput, resolveCrudRecordId } from '@open-mercato/shared/lib/api/scoped'\nimport { escapeLikePattern } from '@open-mercato/shared/lib/db/escapeLikePattern'\nimport { parseBooleanToken } from '@open-mercato/shared/lib/boolean'\nimport { E } from '#generated/entities.ids.generated'\nimport { Warehouse } from '../../data/entities'\nimport { warehouseCreateSchema, warehouseUpdateSchema } from '../../data/validators'\nimport { createPagedListResponseSchema, createWmsCrudOpenApi, defaultOkResponseSchema } from '../openapi'\n\nconst F = {\n id: 'id',\n organization_id: 'organization_id',\n tenant_id: 'tenant_id',\n name: 'name',\n code: 'code',\n is_active: 'is_active',\n is_primary: 'is_primary',\n address_line1: 'address_line1',\n city: 'city',\n postal_code: 'postal_code',\n country: 'country',\n timezone: 'timezone',\n created_at: 'created_at',\n updated_at: 'updated_at',\n} as const\n\nconst routeMetadata = {\n GET: { requireAuth: true, requireFeatures: ['wms.view'] },\n POST: { requireAuth: true, requireFeatures: ['wms.manage_warehouses'] },\n PUT: { requireAuth: true, requireFeatures: ['wms.manage_warehouses'] },\n DELETE: { requireAuth: true, requireFeatures: ['wms.manage_warehouses'] },\n}\n\nexport const metadata = routeMetadata\n\nconst rawBodySchema = z.object({}).passthrough()\n\nconst listSchema = z.object({\n page: z.coerce.number().min(1).default(1),\n pageSize: z.coerce.number().min(1).max(100).default(25),\n search: z.string().optional(),\n ids: z.string().optional(),\n isActive: z.string().optional(),\n sortField: z.string().optional(),\n sortDir: z.enum(['asc', 'desc']).optional(),\n}).passthrough()\n\nconst crud = makeCrudRoute({\n metadata: routeMetadata,\n orm: {\n entity: Warehouse,\n idField: 'id',\n orgField: 'organizationId',\n tenantField: 'tenantId',\n softDeleteField: 'deletedAt',\n },\n indexer: { entityType: E.wms.warehouse },\n list: {\n schema: listSchema,\n disableListCache: true,\n entityId: E.wms.warehouse,\n fields: [\n F.id,\n F.organization_id,\n F.tenant_id,\n F.name,\n F.code,\n F.is_active,\n F.is_primary,\n F.address_line1,\n F.city,\n F.postal_code,\n F.country,\n F.timezone,\n F.created_at,\n F.updated_at,\n ],\n sortFieldMap: {\n name: F.name,\n code: F.code,\n createdAt: F.created_at,\n updatedAt: F.updated_at,\n },\n buildFilters: async (query) => {\n const filters: Record<string, unknown> = {}\n if (typeof query.ids === 'string' && query.ids.trim().length > 0) {\n filters[F.id] = {\n $in: query.ids.split(',').map((value) => value.trim()).filter((value) => value.length > 0),\n }\n }\n const isActive = parseBooleanToken(query.isActive)\n if (isActive !== null) filters[F.is_active] = { $eq: isActive }\n const term = query.search?.trim()\n if (term) {\n const like = `%${escapeLikePattern(term)}%`\n filters.$or = [\n { [F.name]: { $ilike: like } },\n { [F.code]: { $ilike: like } },\n { [F.city]: { $ilike: like } },\n { [F.country]: { $ilike: like } },\n ]\n }\n return filters\n },\n },\n actions: {\n create: {\n commandId: 'wms.warehouses.create',\n schema: rawBodySchema,\n mapInput: async ({ raw, ctx }) => {\n const { translate } = await resolveTranslations()\n return parseScopedCommandInput(warehouseCreateSchema, raw ?? {}, ctx, translate)\n },\n response: ({ result }) => ({ id: result?.warehouseId ?? null }),\n status: 201,\n },\n update: {\n commandId: 'wms.warehouses.update',\n schema: rawBodySchema,\n mapInput: async ({ raw, ctx }) => {\n const { translate } = await resolveTranslations()\n return parseScopedCommandInput(warehouseUpdateSchema, raw ?? {}, ctx, translate)\n },\n response: () => ({ ok: true }),\n },\n delete: {\n commandId: 'wms.warehouses.delete',\n schema: rawBodySchema,\n mapInput: async ({ parsed, ctx }) => {\n const { translate } = await resolveTranslations()\n return { id: resolveCrudRecordId(parsed, ctx, translate) }\n },\n response: () => ({ ok: true }),\n },\n },\n})\n\nexport const GET = crud.GET\nexport const POST = crud.POST\nexport const PUT = crud.PUT\nexport const DELETE = crud.DELETE\n\nconst warehouseListItemSchema = z.object({\n id: z.string().uuid().nullable().optional(),\n organization_id: z.string().uuid().nullable().optional(),\n tenant_id: z.string().uuid().nullable().optional(),\n name: z.string().nullable().optional(),\n code: z.string().nullable().optional(),\n is_active: z.boolean().nullable().optional(),\n is_primary: z.boolean().nullable().optional(),\n address_line1: z.string().nullable().optional(),\n city: z.string().nullable().optional(),\n postal_code: z.string().nullable().optional(),\n country: z.string().nullable().optional(),\n timezone: z.string().nullable().optional(),\n created_at: z.string().nullable().optional(),\n updated_at: z.string().nullable().optional(),\n})\n\nexport const openApi = createWmsCrudOpenApi({\n resourceName: 'Warehouse',\n pluralName: 'Warehouses',\n querySchema: listSchema,\n listResponseSchema: createPagedListResponseSchema(warehouseListItemSchema),\n create: {\n schema: warehouseCreateSchema,\n description: 'Creates a warehouse for inventory operations.',\n },\n update: {\n schema: warehouseUpdateSchema,\n responseSchema: defaultOkResponseSchema,\n description: 'Updates a warehouse by id.',\n },\n del: {\n schema: z.object({ id: z.string().uuid() }),\n responseSchema: defaultOkResponseSchema,\n description: 'Soft-deletes a warehouse by id.',\n },\n})\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -73,11 +73,7 @@ const crud = makeCrudRoute({
|
|
|
73
73
|
];
|
|
74
74
|
}
|
|
75
75
|
return filters;
|
|
76
|
-
}
|
|
77
|
-
// Zones had no decorator before this route gained custom fields, so there is no
|
|
78
|
-
// legacy consumer reading top-level `cf_*`/`cf:*` — take the canonical single-shape
|
|
79
|
-
// response (#1769) rather than emitting both forms.
|
|
80
|
-
decorateCustomFields: { entityIds: [E.wms.warehouse_zone], stripPrefixedKeys: true }
|
|
76
|
+
}
|
|
81
77
|
},
|
|
82
78
|
hooks: {
|
|
83
79
|
afterList: async (payload, ctx) => {
|
|
@@ -119,13 +115,6 @@ const GET = crud.GET;
|
|
|
119
115
|
const POST = crud.POST;
|
|
120
116
|
const PUT = crud.PUT;
|
|
121
117
|
const DELETE = crud.DELETE;
|
|
122
|
-
const customFieldDisplayEntrySchema = z.object({
|
|
123
|
-
key: z.string(),
|
|
124
|
-
label: z.string().nullable(),
|
|
125
|
-
value: z.unknown(),
|
|
126
|
-
kind: z.string().nullable(),
|
|
127
|
-
multi: z.boolean()
|
|
128
|
-
});
|
|
129
118
|
const zoneListItemSchema = z.object({
|
|
130
119
|
id: z.string().uuid().nullable().optional(),
|
|
131
120
|
organization_id: z.string().uuid().nullable().optional(),
|
|
@@ -137,9 +126,7 @@ const zoneListItemSchema = z.object({
|
|
|
137
126
|
name: z.string().nullable().optional(),
|
|
138
127
|
priority: z.number().nullable().optional(),
|
|
139
128
|
created_at: z.string().nullable().optional(),
|
|
140
|
-
updated_at: z.string().nullable().optional()
|
|
141
|
-
customValues: z.record(z.string(), z.unknown()).nullable().optional(),
|
|
142
|
-
customFields: z.array(customFieldDisplayEntrySchema).optional()
|
|
129
|
+
updated_at: z.string().nullable().optional()
|
|
143
130
|
});
|
|
144
131
|
const openApi = createWmsCrudOpenApi({
|
|
145
132
|
resourceName: "Warehouse zone",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/modules/wms/api/zones/route.ts"],
|
|
4
|
-
"sourcesContent": ["import { z } from 'zod'\nimport { makeCrudRoute } from '@open-mercato/shared/lib/crud/factory'\nimport { resolveTranslations } from '@open-mercato/shared/lib/i18n/server'\nimport { parseScopedCommandInput, resolveCrudRecordId } from '@open-mercato/shared/lib/api/scoped'\nimport { escapeLikePattern } from '@open-mercato/shared/lib/db/escapeLikePattern'\nimport { E } from '#generated/entities.ids.generated'\nimport { WarehouseZone } from '../../data/entities'\nimport { warehouseZoneCreateSchema, warehouseZoneUpdateSchema } from '../../data/validators'\nimport { createPagedListResponseSchema, createWmsCrudOpenApi, defaultOkResponseSchema } from '../openapi'\nimport { attachWarehouseLabelsToListItems } from '../listEnrichers'\n\nconst routeMetadata = {\n GET: { requireAuth: true, requireFeatures: ['wms.view'] },\n POST: { requireAuth: true, requireFeatures: ['wms.manage_zones'] },\n PUT: { requireAuth: true, requireFeatures: ['wms.manage_zones'] },\n DELETE: { requireAuth: true, requireFeatures: ['wms.manage_zones'] },\n}\n\nexport const metadata = routeMetadata\n\nconst rawBodySchema = z.object({}).passthrough()\n\nconst listSchema = z.object({\n page: z.coerce.number().min(1).default(1),\n pageSize: z.coerce.number().min(1).max(100).default(25),\n search: z.string().optional(),\n warehouseId: z.string().uuid().optional(),\n ids: z.string().optional(),\n sortField: z.string().optional(),\n sortDir: z.enum(['asc', 'desc']).optional(),\n}).passthrough()\n\nconst crud = makeCrudRoute({\n metadata: routeMetadata,\n orm: {\n entity: WarehouseZone,\n idField: 'id',\n orgField: 'organizationId',\n tenantField: 'tenantId',\n softDeleteField: 'deletedAt',\n },\n indexer: { entityType: E.wms.warehouse_zone },\n list: {\n schema: listSchema,\n entityId: E.wms.warehouse_zone,\n fields: [\n 'id',\n 'organization_id',\n 'tenant_id',\n 'warehouse_id',\n 'code',\n 'name',\n 'priority',\n 'created_at',\n 'updated_at',\n ],\n sortFieldMap: {\n name: 'name',\n code: 'code',\n priority: 'priority',\n createdAt: 'created_at',\n updatedAt: 'updated_at',\n },\n buildFilters: async (query) => {\n const filters: Record<string, unknown> = {}\n if (query.warehouseId) filters.warehouse_id = { $eq: query.warehouseId }\n if (typeof query.ids === 'string' && query.ids.trim().length > 0) {\n filters.id = {\n $in: query.ids.split(',').map((value) => value.trim()).filter((value) => value.length > 0),\n }\n }\n const term = query.search?.trim()\n if (term) {\n const like = `%${escapeLikePattern(term)}%`\n filters.$or = [\n { code: { $ilike: like } },\n { name: { $ilike: like } },\n ]\n }\n return filters\n },\n
|
|
5
|
-
"mappings": "AAAA,SAAS,SAAS;AAClB,SAAS,qBAAqB;AAC9B,SAAS,2BAA2B;AACpC,SAAS,yBAAyB,2BAA2B;AAC7D,SAAS,yBAAyB;AAClC,SAAS,SAAS;AAClB,SAAS,qBAAqB;AAC9B,SAAS,2BAA2B,iCAAiC;AACrE,SAAS,+BAA+B,sBAAsB,+BAA+B;AAC7F,SAAS,wCAAwC;AAEjD,MAAM,gBAAgB;AAAA,EACpB,KAAK,EAAE,aAAa,MAAM,iBAAiB,CAAC,UAAU,EAAE;AAAA,EACxD,MAAM,EAAE,aAAa,MAAM,iBAAiB,CAAC,kBAAkB,EAAE;AAAA,EACjE,KAAK,EAAE,aAAa,MAAM,iBAAiB,CAAC,kBAAkB,EAAE;AAAA,EAChE,QAAQ,EAAE,aAAa,MAAM,iBAAiB,CAAC,kBAAkB,EAAE;AACrE;AAEO,MAAM,WAAW;AAExB,MAAM,gBAAgB,EAAE,OAAO,CAAC,CAAC,EAAE,YAAY;AAE/C,MAAM,aAAa,EAAE,OAAO;AAAA,EAC1B,MAAM,EAAE,OAAO,OAAO,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,EACxC,UAAU,EAAE,OAAO,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,QAAQ,EAAE;AAAA,EACtD,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS;AAAA,EACxC,KAAK,EAAE,OAAO,EAAE,SAAS;AAAA,EACzB,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,SAAS,EAAE,KAAK,CAAC,OAAO,MAAM,CAAC,EAAE,SAAS;AAC5C,CAAC,EAAE,YAAY;AAEf,MAAM,OAAO,cAAc;AAAA,EACzB,UAAU;AAAA,EACV,KAAK;AAAA,IACH,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,IACV,aAAa;AAAA,IACb,iBAAiB;AAAA,EACnB;AAAA,EACA,SAAS,EAAE,YAAY,EAAE,IAAI,eAAe;AAAA,EAC5C,MAAM;AAAA,IACJ,QAAQ;AAAA,IACR,UAAU,EAAE,IAAI;AAAA,IAChB,QAAQ;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,MACV,WAAW;AAAA,MACX,WAAW;AAAA,IACb;AAAA,IACA,cAAc,OAAO,UAAU;AAC7B,YAAM,UAAmC,CAAC;AAC1C,UAAI,MAAM,YAAa,SAAQ,eAAe,EAAE,KAAK,MAAM,YAAY;AACvE,UAAI,OAAO,MAAM,QAAQ,YAAY,MAAM,IAAI,KAAK,EAAE,SAAS,GAAG;AAChE,gBAAQ,KAAK;AAAA,UACX,KAAK,MAAM,IAAI,MAAM,GAAG,EAAE,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAAE,OAAO,CAAC,UAAU,MAAM,SAAS,CAAC;AAAA,QAC3F;AAAA,MACF;AACA,YAAM,OAAO,MAAM,QAAQ,KAAK;AAChC,UAAI,MAAM;AACR,cAAM,OAAO,IAAI,kBAAkB,IAAI,CAAC;AACxC,gBAAQ,MAAM;AAAA,UACZ,EAAE,MAAM,EAAE,QAAQ,KAAK,EAAE;AAAA,UACzB,EAAE,MAAM,EAAE,QAAQ,KAAK,EAAE;AAAA,QAC3B;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA
|
|
4
|
+
"sourcesContent": ["import { z } from 'zod'\nimport { makeCrudRoute } from '@open-mercato/shared/lib/crud/factory'\nimport { resolveTranslations } from '@open-mercato/shared/lib/i18n/server'\nimport { parseScopedCommandInput, resolveCrudRecordId } from '@open-mercato/shared/lib/api/scoped'\nimport { escapeLikePattern } from '@open-mercato/shared/lib/db/escapeLikePattern'\nimport { E } from '#generated/entities.ids.generated'\nimport { WarehouseZone } from '../../data/entities'\nimport { warehouseZoneCreateSchema, warehouseZoneUpdateSchema } from '../../data/validators'\nimport { createPagedListResponseSchema, createWmsCrudOpenApi, defaultOkResponseSchema } from '../openapi'\nimport { attachWarehouseLabelsToListItems } from '../listEnrichers'\n\nconst routeMetadata = {\n GET: { requireAuth: true, requireFeatures: ['wms.view'] },\n POST: { requireAuth: true, requireFeatures: ['wms.manage_zones'] },\n PUT: { requireAuth: true, requireFeatures: ['wms.manage_zones'] },\n DELETE: { requireAuth: true, requireFeatures: ['wms.manage_zones'] },\n}\n\nexport const metadata = routeMetadata\n\nconst rawBodySchema = z.object({}).passthrough()\n\nconst listSchema = z.object({\n page: z.coerce.number().min(1).default(1),\n pageSize: z.coerce.number().min(1).max(100).default(25),\n search: z.string().optional(),\n warehouseId: z.string().uuid().optional(),\n ids: z.string().optional(),\n sortField: z.string().optional(),\n sortDir: z.enum(['asc', 'desc']).optional(),\n}).passthrough()\n\nconst crud = makeCrudRoute({\n metadata: routeMetadata,\n orm: {\n entity: WarehouseZone,\n idField: 'id',\n orgField: 'organizationId',\n tenantField: 'tenantId',\n softDeleteField: 'deletedAt',\n },\n indexer: { entityType: E.wms.warehouse_zone },\n list: {\n schema: listSchema,\n entityId: E.wms.warehouse_zone,\n fields: [\n 'id',\n 'organization_id',\n 'tenant_id',\n 'warehouse_id',\n 'code',\n 'name',\n 'priority',\n 'created_at',\n 'updated_at',\n ],\n sortFieldMap: {\n name: 'name',\n code: 'code',\n priority: 'priority',\n createdAt: 'created_at',\n updatedAt: 'updated_at',\n },\n buildFilters: async (query) => {\n const filters: Record<string, unknown> = {}\n if (query.warehouseId) filters.warehouse_id = { $eq: query.warehouseId }\n if (typeof query.ids === 'string' && query.ids.trim().length > 0) {\n filters.id = {\n $in: query.ids.split(',').map((value) => value.trim()).filter((value) => value.length > 0),\n }\n }\n const term = query.search?.trim()\n if (term) {\n const like = `%${escapeLikePattern(term)}%`\n filters.$or = [\n { code: { $ilike: like } },\n { name: { $ilike: like } },\n ]\n }\n return filters\n },\n },\n hooks: {\n afterList: async (payload, ctx) => {\n await attachWarehouseLabelsToListItems(payload, ctx)\n },\n },\n actions: {\n create: {\n commandId: 'wms.zones.create',\n schema: rawBodySchema,\n mapInput: async ({ raw, ctx }) => {\n const { translate } = await resolveTranslations()\n return parseScopedCommandInput(warehouseZoneCreateSchema, raw ?? {}, ctx, translate)\n },\n response: ({ result }) => ({ id: result?.zoneId ?? null }),\n status: 201,\n },\n update: {\n commandId: 'wms.zones.update',\n schema: rawBodySchema,\n mapInput: async ({ raw, ctx }) => {\n const { translate } = await resolveTranslations()\n return parseScopedCommandInput(warehouseZoneUpdateSchema, raw ?? {}, ctx, translate)\n },\n response: () => ({ ok: true }),\n },\n delete: {\n commandId: 'wms.zones.delete',\n schema: rawBodySchema,\n mapInput: async ({ parsed, ctx }) => {\n const { translate } = await resolveTranslations()\n return { id: resolveCrudRecordId(parsed, ctx, translate) }\n },\n response: () => ({ ok: true }),\n },\n },\n})\n\nexport const GET = crud.GET\nexport const POST = crud.POST\nexport const PUT = crud.PUT\nexport const DELETE = crud.DELETE\n\nconst zoneListItemSchema = z.object({\n id: z.string().uuid().nullable().optional(),\n organization_id: z.string().uuid().nullable().optional(),\n tenant_id: z.string().uuid().nullable().optional(),\n warehouse_id: z.string().uuid().nullable().optional(),\n warehouse_name: z.string().nullable().optional(),\n warehouse_code: z.string().nullable().optional(),\n code: z.string().nullable().optional(),\n name: z.string().nullable().optional(),\n priority: z.number().nullable().optional(),\n created_at: z.string().nullable().optional(),\n updated_at: z.string().nullable().optional(),\n})\n\nexport const openApi = createWmsCrudOpenApi({\n resourceName: 'Warehouse zone',\n pluralName: 'Warehouse zones',\n querySchema: listSchema,\n listResponseSchema: createPagedListResponseSchema(zoneListItemSchema),\n create: {\n schema: warehouseZoneCreateSchema,\n description: 'Creates a zone within a warehouse.',\n },\n update: {\n schema: warehouseZoneUpdateSchema,\n responseSchema: defaultOkResponseSchema,\n description: 'Updates a warehouse zone by id.',\n },\n del: {\n schema: z.object({ id: z.string().uuid() }),\n responseSchema: defaultOkResponseSchema,\n description: 'Soft-deletes a warehouse zone by id.',\n },\n})\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,17 +1,9 @@
|
|
|
1
1
|
import { registerCommand } from "@open-mercato/shared/lib/commands";
|
|
2
|
-
import {
|
|
3
|
-
emitCrudSideEffects,
|
|
4
|
-
emitCrudUndoSideEffects,
|
|
5
|
-
parseWithCustomFields,
|
|
6
|
-
setCustomFieldsIfAny
|
|
7
|
-
} from "@open-mercato/shared/lib/commands/helpers";
|
|
8
|
-
import { loadCustomFieldSnapshot, buildCustomFieldResetMap } from "@open-mercato/shared/lib/commands/customFieldSnapshots";
|
|
9
2
|
import { withAtomicFlush } from "@open-mercato/shared/lib/commands/flush";
|
|
10
3
|
import { CrudHttpError, isUniqueViolation } from "@open-mercato/shared/lib/crud/errors";
|
|
11
4
|
import { resolveTranslations } from "@open-mercato/shared/lib/i18n/server";
|
|
12
5
|
import { findOneWithDecryption, findWithDecryption } from "@open-mercato/shared/lib/encryption/find";
|
|
13
6
|
import { extractUndoPayload } from "@open-mercato/shared/lib/commands/undo";
|
|
14
|
-
import { E } from "../../../generated/entities.ids.generated.js";
|
|
15
7
|
import {
|
|
16
8
|
InventoryLot,
|
|
17
9
|
ProductInventoryProfile,
|
|
@@ -36,9 +28,7 @@ import {
|
|
|
36
28
|
ensureTenantScope,
|
|
37
29
|
normalizeOptionalString,
|
|
38
30
|
requireId,
|
|
39
|
-
toNumericString
|
|
40
|
-
warehouseCrudIndexer,
|
|
41
|
-
warehouseZoneCrudIndexer
|
|
31
|
+
toNumericString
|
|
42
32
|
} from "./shared.js";
|
|
43
33
|
import { emitWmsEvent } from "../events.js";
|
|
44
34
|
function resolveScope(ctx, fallback) {
|
|
@@ -54,17 +44,6 @@ function toJsonValue(value) {
|
|
|
54
44
|
if (value === void 0) return void 0;
|
|
55
45
|
return value ?? null;
|
|
56
46
|
}
|
|
57
|
-
async function persistWarehouseCustomFields(ctx, warehouse, custom) {
|
|
58
|
-
if (!custom || Object.keys(custom).length === 0) return;
|
|
59
|
-
await setCustomFieldsIfAny({
|
|
60
|
-
dataEngine: ctx.container.resolve("dataEngine"),
|
|
61
|
-
entityId: E.wms.warehouse,
|
|
62
|
-
recordId: warehouse.id,
|
|
63
|
-
organizationId: warehouse.organizationId,
|
|
64
|
-
tenantId: warehouse.tenantId,
|
|
65
|
-
values: custom
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
47
|
async function buildCrudLog(ctx, input, resultId, actionKey, fallbackLabel, resourceKind) {
|
|
69
48
|
const { translate } = await resolveTranslations();
|
|
70
49
|
return {
|
|
@@ -143,16 +122,7 @@ function snapshotWarehouse(record) {
|
|
|
143
122
|
}
|
|
144
123
|
async function loadWarehouseSnapshot(em, ctx, id) {
|
|
145
124
|
const record = await findOneWithDecryption(em, Warehouse, { id }, void 0, resolveScope(ctx));
|
|
146
|
-
|
|
147
|
-
const snapshot = snapshotWarehouse(record);
|
|
148
|
-
const custom = await loadCustomFieldSnapshot(em, {
|
|
149
|
-
entityId: E.wms.warehouse,
|
|
150
|
-
recordId: record.id,
|
|
151
|
-
tenantId: record.tenantId,
|
|
152
|
-
organizationId: record.organizationId
|
|
153
|
-
});
|
|
154
|
-
snapshot.custom = custom && Object.keys(custom).length ? custom : null;
|
|
155
|
-
return snapshot;
|
|
125
|
+
return record ? snapshotWarehouse(record) : null;
|
|
156
126
|
}
|
|
157
127
|
function snapshotWarehouseZone(record) {
|
|
158
128
|
const warehouseId = typeof record.warehouse === "string" ? record.warehouse : record.warehouse.id;
|
|
@@ -171,62 +141,7 @@ function snapshotWarehouseZone(record) {
|
|
|
171
141
|
}
|
|
172
142
|
async function loadWarehouseZoneSnapshot(em, ctx, id) {
|
|
173
143
|
const record = await findOneWithDecryption(em, WarehouseZone, { id }, void 0, resolveScope(ctx));
|
|
174
|
-
|
|
175
|
-
const snapshot = snapshotWarehouseZone(record);
|
|
176
|
-
snapshot.custom = await loadCustomFieldSnapshot(em, {
|
|
177
|
-
entityId: E.wms.warehouse_zone,
|
|
178
|
-
recordId: record.id,
|
|
179
|
-
tenantId: record.tenantId,
|
|
180
|
-
organizationId: record.organizationId
|
|
181
|
-
});
|
|
182
|
-
return snapshot;
|
|
183
|
-
}
|
|
184
|
-
async function writeZoneCustomFields(ctx, zone, values) {
|
|
185
|
-
if (!values || !Object.keys(values).length) return;
|
|
186
|
-
await setCustomFieldsIfAny({
|
|
187
|
-
dataEngine: ctx.container.resolve("dataEngine"),
|
|
188
|
-
entityId: E.wms.warehouse_zone,
|
|
189
|
-
recordId: zone.id,
|
|
190
|
-
organizationId: zone.organizationId,
|
|
191
|
-
tenantId: zone.tenantId,
|
|
192
|
-
values
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
async function emitWarehouseCrudSideEffects(ctx, action, warehouse, origin = "write") {
|
|
196
|
-
const options = {
|
|
197
|
-
dataEngine: ctx.container.resolve("dataEngine"),
|
|
198
|
-
action,
|
|
199
|
-
entity: warehouse,
|
|
200
|
-
identifiers: {
|
|
201
|
-
id: warehouse.id,
|
|
202
|
-
organizationId: warehouse.organizationId,
|
|
203
|
-
tenantId: warehouse.tenantId
|
|
204
|
-
},
|
|
205
|
-
indexer: warehouseCrudIndexer
|
|
206
|
-
};
|
|
207
|
-
if (origin === "undo") {
|
|
208
|
-
await emitCrudUndoSideEffects(options);
|
|
209
|
-
return;
|
|
210
|
-
}
|
|
211
|
-
await emitCrudSideEffects(options);
|
|
212
|
-
}
|
|
213
|
-
async function emitZoneCrudSideEffects(ctx, action, zone, origin = "write") {
|
|
214
|
-
const options = {
|
|
215
|
-
dataEngine: ctx.container.resolve("dataEngine"),
|
|
216
|
-
action,
|
|
217
|
-
entity: zone,
|
|
218
|
-
identifiers: {
|
|
219
|
-
id: zone.id,
|
|
220
|
-
organizationId: zone.organizationId,
|
|
221
|
-
tenantId: zone.tenantId
|
|
222
|
-
},
|
|
223
|
-
indexer: warehouseZoneCrudIndexer
|
|
224
|
-
};
|
|
225
|
-
if (origin === "undo") {
|
|
226
|
-
await emitCrudUndoSideEffects(options);
|
|
227
|
-
return;
|
|
228
|
-
}
|
|
229
|
-
await emitCrudSideEffects(options);
|
|
144
|
+
return record ? snapshotWarehouseZone(record) : null;
|
|
230
145
|
}
|
|
231
146
|
function snapshotWarehouseLocation(record) {
|
|
232
147
|
const warehouseId = typeof record.warehouse === "string" ? record.warehouse : record.warehouse.id;
|
|
@@ -447,7 +362,7 @@ async function resolveParentLocation(em, ctx, warehouseId, parentId) {
|
|
|
447
362
|
const createWarehouseCommand = {
|
|
448
363
|
id: "wms.warehouses.create",
|
|
449
364
|
async execute(rawInput, ctx) {
|
|
450
|
-
const
|
|
365
|
+
const parsed = warehouseCreateSchema.parse(rawInput ?? {});
|
|
451
366
|
ensureTenantScope(ctx, parsed.tenantId);
|
|
452
367
|
ensureOrganizationScope(ctx, parsed.organizationId);
|
|
453
368
|
const em = resolveEm(ctx);
|
|
@@ -505,8 +420,6 @@ const createWarehouseCommand = {
|
|
|
505
420
|
}
|
|
506
421
|
throw err;
|
|
507
422
|
}
|
|
508
|
-
await persistWarehouseCustomFields(ctx, warehouse, custom);
|
|
509
|
-
await emitWarehouseCrudSideEffects(ctx, "created", warehouse);
|
|
510
423
|
void emitWmsEvent("wms.warehouse.created", {
|
|
511
424
|
id: warehouse.id,
|
|
512
425
|
warehouseId: warehouse.id,
|
|
@@ -515,7 +428,6 @@ const createWarehouseCommand = {
|
|
|
515
428
|
}).catch(() => void 0);
|
|
516
429
|
return {
|
|
517
430
|
warehouseId: warehouse.id,
|
|
518
|
-
updatedAt: isoOrNull(warehouse.updatedAt),
|
|
519
431
|
...demotedPrimariesBefore.length > 0 ? { demotedPrimariesBefore } : {}
|
|
520
432
|
};
|
|
521
433
|
},
|
|
@@ -555,8 +467,6 @@ const createWarehouseCommand = {
|
|
|
555
467
|
ensureOrganizationScope(ctx, record.organizationId);
|
|
556
468
|
record.deletedAt = /* @__PURE__ */ new Date();
|
|
557
469
|
await em.flush();
|
|
558
|
-
await persistWarehouseCustomFields(ctx, after, buildCustomFieldResetMap(void 0, after.custom ?? void 0));
|
|
559
|
-
await emitWarehouseCrudSideEffects(ctx, "deleted", record, "undo");
|
|
560
470
|
if (payload.demotedPrimariesBefore?.length) {
|
|
561
471
|
await restoreDemotedPrimaryWarehouses(em, ctx, payload.demotedPrimariesBefore);
|
|
562
472
|
await em.flush();
|
|
@@ -572,7 +482,7 @@ const updateWarehouseCommand = {
|
|
|
572
482
|
return before ? { before } : {};
|
|
573
483
|
},
|
|
574
484
|
async execute(rawInput, ctx) {
|
|
575
|
-
const
|
|
485
|
+
const parsed = warehouseUpdateSchema.parse(rawInput ?? {});
|
|
576
486
|
const em = resolveEm(ctx);
|
|
577
487
|
const warehouse = await loadWarehouse(em, ctx, parsed.id);
|
|
578
488
|
if (parsed.code !== void 0 && parsed.code !== warehouse.code) {
|
|
@@ -625,8 +535,6 @@ const updateWarehouseCommand = {
|
|
|
625
535
|
}
|
|
626
536
|
throw err;
|
|
627
537
|
}
|
|
628
|
-
await persistWarehouseCustomFields(ctx, warehouse, custom);
|
|
629
|
-
await emitWarehouseCrudSideEffects(ctx, "updated", warehouse);
|
|
630
538
|
void emitWmsEvent("wms.warehouse.updated", {
|
|
631
539
|
id: warehouse.id,
|
|
632
540
|
warehouseId: warehouse.id,
|
|
@@ -707,12 +615,6 @@ const updateWarehouseCommand = {
|
|
|
707
615
|
record.deletedAt = null;
|
|
708
616
|
}
|
|
709
617
|
await em.flush();
|
|
710
|
-
await persistWarehouseCustomFields(
|
|
711
|
-
ctx,
|
|
712
|
-
before,
|
|
713
|
-
buildCustomFieldResetMap(before.custom ?? void 0, payload.after?.custom ?? void 0)
|
|
714
|
-
);
|
|
715
|
-
await emitWarehouseCrudSideEffects(ctx, "updated", record, "undo");
|
|
716
618
|
if (payload.demotedPrimariesBefore?.length) {
|
|
717
619
|
await restoreDemotedPrimaryWarehouses(em, ctx, payload.demotedPrimariesBefore);
|
|
718
620
|
await em.flush();
|
|
@@ -733,7 +635,6 @@ const deleteWarehouseCommand = {
|
|
|
733
635
|
const warehouse = await loadWarehouse(em, ctx, warehouseId);
|
|
734
636
|
warehouse.deletedAt = /* @__PURE__ */ new Date();
|
|
735
637
|
await em.flush();
|
|
736
|
-
await emitWarehouseCrudSideEffects(ctx, "deleted", warehouse);
|
|
737
638
|
return { warehouseId: warehouse.id };
|
|
738
639
|
},
|
|
739
640
|
buildLog: async ({ input, result, ctx, snapshots }) => {
|
|
@@ -788,7 +689,6 @@ const deleteWarehouseCommand = {
|
|
|
788
689
|
record.metadata = before.metadata;
|
|
789
690
|
}
|
|
790
691
|
await em.flush();
|
|
791
|
-
await emitWarehouseCrudSideEffects(ctx, "created", record, "undo");
|
|
792
692
|
}
|
|
793
693
|
};
|
|
794
694
|
async function restoreZoneFromSnapshot(em, before) {
|
|
@@ -820,12 +720,11 @@ async function restoreZoneFromSnapshot(em, before) {
|
|
|
820
720
|
record.metadata = before.metadata;
|
|
821
721
|
record.deletedAt = null;
|
|
822
722
|
}
|
|
823
|
-
return record;
|
|
824
723
|
}
|
|
825
724
|
const createWarehouseZoneCommand = {
|
|
826
725
|
id: "wms.zones.create",
|
|
827
726
|
async execute(rawInput, ctx) {
|
|
828
|
-
const
|
|
727
|
+
const parsed = warehouseZoneCreateSchema.parse(rawInput ?? {});
|
|
829
728
|
ensureTenantScope(ctx, parsed.tenantId);
|
|
830
729
|
ensureOrganizationScope(ctx, parsed.organizationId);
|
|
831
730
|
const em = resolveEm(ctx);
|
|
@@ -841,8 +740,6 @@ const createWarehouseZoneCommand = {
|
|
|
841
740
|
metadata: toJsonValue(parsed.metadata)
|
|
842
741
|
});
|
|
843
742
|
await em.persist(zone).flush();
|
|
844
|
-
await writeZoneCustomFields(ctx, zone, custom);
|
|
845
|
-
await emitZoneCrudSideEffects(ctx, "created", zone);
|
|
846
743
|
void emitWmsEvent("wms.zone.created", {
|
|
847
744
|
id: zone.id,
|
|
848
745
|
zoneId: zone.id,
|
|
@@ -878,8 +775,6 @@ const createWarehouseZoneCommand = {
|
|
|
878
775
|
ensureOrganizationScope(ctx, record.organizationId);
|
|
879
776
|
record.deletedAt = /* @__PURE__ */ new Date();
|
|
880
777
|
await em.flush();
|
|
881
|
-
await writeZoneCustomFields(ctx, record, buildCustomFieldResetMap(void 0, after.custom));
|
|
882
|
-
await emitZoneCrudSideEffects(ctx, "deleted", record, "undo");
|
|
883
778
|
}
|
|
884
779
|
};
|
|
885
780
|
const updateWarehouseZoneCommand = {
|
|
@@ -891,7 +786,7 @@ const updateWarehouseZoneCommand = {
|
|
|
891
786
|
return before ? { before } : {};
|
|
892
787
|
},
|
|
893
788
|
async execute(rawInput, ctx) {
|
|
894
|
-
const
|
|
789
|
+
const parsed = warehouseZoneUpdateSchema.parse(rawInput ?? {});
|
|
895
790
|
const em = resolveEm(ctx);
|
|
896
791
|
const zone = await loadZone(em, ctx, parsed.id);
|
|
897
792
|
if (parsed.warehouseId !== void 0) {
|
|
@@ -907,8 +802,6 @@ const updateWarehouseZoneCommand = {
|
|
|
907
802
|
if (parsed.priority !== void 0) zone.priority = parsed.priority;
|
|
908
803
|
if (parsed.metadata !== void 0) zone.metadata = toJsonValue(parsed.metadata);
|
|
909
804
|
await em.flush();
|
|
910
|
-
await writeZoneCustomFields(ctx, zone, custom);
|
|
911
|
-
await emitZoneCrudSideEffects(ctx, "updated", zone);
|
|
912
805
|
void emitWmsEvent("wms.zone.updated", {
|
|
913
806
|
id: zone.id,
|
|
914
807
|
zoneId: zone.id,
|
|
@@ -935,10 +828,8 @@ const updateWarehouseZoneCommand = {
|
|
|
935
828
|
const em = resolveEm(ctx);
|
|
936
829
|
ensureTenantScope(ctx, before.tenantId);
|
|
937
830
|
ensureOrganizationScope(ctx, before.organizationId);
|
|
938
|
-
|
|
831
|
+
await restoreZoneFromSnapshot(em, before);
|
|
939
832
|
await em.flush();
|
|
940
|
-
await writeZoneCustomFields(ctx, record, buildCustomFieldResetMap(before.custom, payload?.after?.custom));
|
|
941
|
-
await emitZoneCrudSideEffects(ctx, "updated", record, "undo");
|
|
942
833
|
}
|
|
943
834
|
};
|
|
944
835
|
const deleteWarehouseZoneCommand = {
|
|
@@ -955,7 +846,6 @@ const deleteWarehouseZoneCommand = {
|
|
|
955
846
|
const zone = await loadZone(em, ctx, zoneId);
|
|
956
847
|
zone.deletedAt = /* @__PURE__ */ new Date();
|
|
957
848
|
await em.flush();
|
|
958
|
-
await emitZoneCrudSideEffects(ctx, "deleted", zone);
|
|
959
849
|
return { zoneId: zone.id };
|
|
960
850
|
},
|
|
961
851
|
buildLog: async ({ input, result, ctx, snapshots }) => {
|
|
@@ -970,10 +860,8 @@ const deleteWarehouseZoneCommand = {
|
|
|
970
860
|
const em = resolveEm(ctx);
|
|
971
861
|
ensureTenantScope(ctx, before.tenantId);
|
|
972
862
|
ensureOrganizationScope(ctx, before.organizationId);
|
|
973
|
-
|
|
863
|
+
await restoreZoneFromSnapshot(em, before);
|
|
974
864
|
await em.flush();
|
|
975
|
-
await writeZoneCustomFields(ctx, record, buildCustomFieldResetMap(before.custom, void 0));
|
|
976
|
-
await emitZoneCrudSideEffects(ctx, "created", record, "undo");
|
|
977
865
|
}
|
|
978
866
|
};
|
|
979
867
|
async function restoreLocationFromSnapshot(em, before) {
|