@open-mercato/core 0.10.1-develop.7717.1.2befe9c634 → 0.10.1-develop.7721.1.b5c4a00a68
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 +2 -2
- package/dist/generated/entities/staff_support_routing_rule/index.js +21 -0
- package/dist/generated/entities/staff_support_routing_rule/index.js.map +7 -0
- package/dist/generated/entities/staff_support_ticket/index.js +37 -0
- package/dist/generated/entities/staff_support_ticket/index.js.map +7 -0
- package/dist/generated/entities/staff_time_project/index.js +2 -0
- package/dist/generated/entities/staff_time_project/index.js.map +2 -2
- package/dist/generated/entities/staff_time_project_member/index.js +2 -0
- package/dist/generated/entities/staff_time_project_member/index.js.map +2 -2
- package/dist/generated/entities/staff_time_task/index.js +4 -0
- package/dist/generated/entities/staff_time_task/index.js.map +2 -2
- package/dist/generated/entities/staff_time_task_comment/index.js +9 -1
- package/dist/generated/entities/staff_time_task_comment/index.js.map +2 -2
- package/dist/generated/entities.ids.generated.js +2 -0
- package/dist/generated/entities.ids.generated.js.map +2 -2
- package/dist/generated/entity-fields-registry.js +38 -0
- package/dist/generated/entity-fields-registry.js.map +2 -2
- package/dist/helpers/integration/auth.js +1 -0
- package/dist/helpers/integration/auth.js.map +2 -2
- package/dist/helpers/integration/communicationChannelsFixtures.js +20 -0
- package/dist/helpers/integration/communicationChannelsFixtures.js.map +2 -2
- package/dist/modules/catalog/api/bulk-delete/route.js +12 -2
- package/dist/modules/catalog/api/bulk-delete/route.js.map +2 -2
- package/dist/modules/communication_channels/api/post/test-seed/route.js +17 -3
- package/dist/modules/communication_channels/api/post/test-seed/route.js.map +2 -2
- package/dist/modules/communication_channels/lib/test-seed.js +38 -5
- package/dist/modules/communication_channels/lib/test-seed.js.map +2 -2
- package/dist/modules/messages/commands/messages.js +2 -3
- package/dist/modules/messages/commands/messages.js.map +2 -2
- package/dist/modules/portal/frontend/[orgSlug]/portal/dashboard/page.js +2 -2
- package/dist/modules/portal/frontend/[orgSlug]/portal/dashboard/page.js.map +2 -2
- package/dist/modules/staff/api/portal/support-tickets/[id]/attachments/route.js +299 -0
- package/dist/modules/staff/api/portal/support-tickets/[id]/attachments/route.js.map +7 -0
- package/dist/modules/staff/api/portal/support-tickets/[id]/messages/route.js +91 -0
- package/dist/modules/staff/api/portal/support-tickets/[id]/messages/route.js.map +7 -0
- package/dist/modules/staff/api/portal/support-tickets/[id]/route.js +146 -0
- package/dist/modules/staff/api/portal/support-tickets/[id]/route.js.map +7 -0
- package/dist/modules/staff/api/portal/support-tickets/options/route.js +60 -0
- package/dist/modules/staff/api/portal/support-tickets/options/route.js.map +7 -0
- package/dist/modules/staff/api/portal/support-tickets/route.js +220 -0
- package/dist/modules/staff/api/portal/support-tickets/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/settings/route.js +7 -1
- package/dist/modules/staff/api/timesheets/settings/route.js.map +2 -2
- package/dist/modules/staff/api/timesheets/support-routing-rules/fallback-project/route.js +122 -0
- package/dist/modules/staff/api/timesheets/support-routing-rules/fallback-project/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/support-routing-rules/preview/route.js +180 -0
- package/dist/modules/staff/api/timesheets/support-routing-rules/preview/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/support-routing-rules/route.js +147 -0
- package/dist/modules/staff/api/timesheets/support-routing-rules/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/support-tickets/options/route.js +133 -0
- package/dist/modules/staff/api/timesheets/support-tickets/options/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/tasks/[id]/claim/route.js +33 -0
- package/dist/modules/staff/api/timesheets/tasks/[id]/claim/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/tasks/[id]/comments/route.js +25 -7
- package/dist/modules/staff/api/timesheets/tasks/[id]/comments/route.js.map +2 -2
- package/dist/modules/staff/api/timesheets/tasks/[id]/release/route.js +32 -0
- package/dist/modules/staff/api/timesheets/tasks/[id]/release/route.js.map +7 -0
- package/dist/modules/staff/api/timesheets/tasks/route.js +94 -47
- package/dist/modules/staff/api/timesheets/tasks/route.js.map +2 -2
- package/dist/modules/staff/api/timesheets/time-projects/[id]/employees/route.js +3 -0
- package/dist/modules/staff/api/timesheets/time-projects/[id]/employees/route.js.map +2 -2
- package/dist/modules/staff/api/timesheets/time-projects/route.js +3 -0
- package/dist/modules/staff/api/timesheets/time-projects/route.js.map +2 -2
- package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/edit/page.js +1 -0
- package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/edit/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/page.js +54 -4
- package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/time-tracking/projects/projectFormConfig.js +21 -5
- package/dist/modules/staff/backend/staff/time-tracking/projects/projectFormConfig.js.map +2 -2
- package/dist/modules/staff/backend/staff/time-tracking/settings/page.js +319 -254
- package/dist/modules/staff/backend/staff/time-tracking/settings/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/time-tracking/support/page.js +363 -0
- package/dist/modules/staff/backend/staff/time-tracking/support/page.js.map +7 -0
- package/dist/modules/staff/backend/staff/time-tracking/support/page.meta.js +18 -0
- package/dist/modules/staff/backend/staff/time-tracking/support/page.meta.js.map +7 -0
- package/dist/modules/staff/cli.js +27 -0
- package/dist/modules/staff/cli.js.map +2 -2
- package/dist/modules/staff/commands/index.js +3 -0
- package/dist/modules/staff/commands/index.js.map +2 -2
- package/dist/modules/staff/commands/shared.js +10 -1
- package/dist/modules/staff/commands/shared.js.map +2 -2
- package/dist/modules/staff/commands/support-routing-rules.js +505 -0
- package/dist/modules/staff/commands/support-routing-rules.js.map +7 -0
- package/dist/modules/staff/commands/support-tickets.js +513 -0
- package/dist/modules/staff/commands/support-tickets.js.map +7 -0
- package/dist/modules/staff/commands/timesheets-projects.js +72 -14
- package/dist/modules/staff/commands/timesheets-projects.js.map +2 -2
- package/dist/modules/staff/commands/timesheets-task-assignment.js +270 -0
- package/dist/modules/staff/commands/timesheets-task-assignment.js.map +7 -0
- package/dist/modules/staff/commands/timesheets-task-comments.js +58 -12
- package/dist/modules/staff/commands/timesheets-task-comments.js.map +2 -2
- package/dist/modules/staff/commands/timesheets-tasks.js +91 -9
- package/dist/modules/staff/commands/timesheets-tasks.js.map +3 -3
- package/dist/modules/staff/data/enrichers.js +141 -0
- package/dist/modules/staff/data/enrichers.js.map +2 -2
- package/dist/modules/staff/data/entities.js +143 -2
- package/dist/modules/staff/data/entities.js.map +2 -2
- package/dist/modules/staff/data/extensions.js +8 -0
- package/dist/modules/staff/data/extensions.js.map +2 -2
- package/dist/modules/staff/data/validators.js +34 -5
- package/dist/modules/staff/data/validators.js.map +2 -2
- package/dist/modules/staff/encryption.js +6 -0
- package/dist/modules/staff/encryption.js.map +2 -2
- package/dist/modules/staff/events.js +25 -0
- package/dist/modules/staff/events.js.map +2 -2
- package/dist/modules/staff/events.payloads.js +54 -0
- package/dist/modules/staff/events.payloads.js.map +2 -2
- package/dist/modules/staff/extension-points.js +1 -0
- package/dist/modules/staff/extension-points.js.map +2 -2
- package/dist/modules/staff/frontend/[orgSlug]/portal/support/[id]/page.js +468 -0
- package/dist/modules/staff/frontend/[orgSlug]/portal/support/[id]/page.js.map +7 -0
- package/dist/modules/staff/frontend/[orgSlug]/portal/support/[id]/page.meta.js +12 -0
- package/dist/modules/staff/frontend/[orgSlug]/portal/support/[id]/page.meta.js.map +7 -0
- package/dist/modules/staff/frontend/[orgSlug]/portal/support/new/page.js +316 -0
- package/dist/modules/staff/frontend/[orgSlug]/portal/support/new/page.js.map +7 -0
- package/dist/modules/staff/frontend/[orgSlug]/portal/support/new/page.meta.js +12 -0
- package/dist/modules/staff/frontend/[orgSlug]/portal/support/new/page.meta.js.map +7 -0
- package/dist/modules/staff/frontend/[orgSlug]/portal/support/page.js +190 -0
- package/dist/modules/staff/frontend/[orgSlug]/portal/support/page.js.map +7 -0
- package/dist/modules/staff/frontend/[orgSlug]/portal/support/page.meta.js +19 -0
- package/dist/modules/staff/frontend/[orgSlug]/portal/support/page.meta.js.map +7 -0
- package/dist/modules/staff/index.js +1 -1
- package/dist/modules/staff/index.js.map +2 -2
- package/dist/modules/staff/lib/crud.js +2 -0
- package/dist/modules/staff/lib/crud.js.map +2 -2
- package/dist/modules/staff/lib/support/attachments.js +36 -0
- package/dist/modules/staff/lib/support/attachments.js.map +7 -0
- package/dist/modules/staff/lib/support/dictionaries.js +87 -0
- package/dist/modules/staff/lib/support/dictionaries.js.map +7 -0
- package/dist/modules/staff/lib/support/notifications.js +111 -0
- package/dist/modules/staff/lib/support/notifications.js.map +7 -0
- package/dist/modules/staff/lib/support/portalAttachments.js +100 -0
- package/dist/modules/staff/lib/support/portalAttachments.js.map +7 -0
- package/dist/modules/staff/lib/support/portalBroadcast.js +117 -0
- package/dist/modules/staff/lib/support/portalBroadcast.js.map +7 -0
- package/dist/modules/staff/lib/support/portalRoute.js +99 -0
- package/dist/modules/staff/lib/support/portalRoute.js.map +7 -0
- package/dist/modules/staff/lib/support/portalStatus.js +12 -0
- package/dist/modules/staff/lib/support/portalStatus.js.map +7 -0
- package/dist/modules/staff/lib/support/portalTickets.js +148 -0
- package/dist/modules/staff/lib/support/portalTickets.js.map +7 -0
- package/dist/modules/staff/lib/support/routing.js +81 -0
- package/dist/modules/staff/lib/support/routing.js.map +7 -0
- package/dist/modules/staff/lib/support/routingRuleDraft.js +25 -0
- package/dist/modules/staff/lib/support/routingRuleDraft.js.map +7 -0
- package/dist/modules/staff/lib/support/seedDefaults.js +114 -0
- package/dist/modules/staff/lib/support/seedDefaults.js.map +7 -0
- package/dist/modules/staff/lib/support/supportActivity.js +26 -0
- package/dist/modules/staff/lib/support/supportActivity.js.map +7 -0
- package/dist/modules/staff/lib/support-ui/PortalSupportNotLinked.js +23 -0
- package/dist/modules/staff/lib/support-ui/PortalSupportNotLinked.js.map +7 -0
- package/dist/modules/staff/lib/support-ui/portalAttachmentValidation.js +112 -0
- package/dist/modules/staff/lib/support-ui/portalAttachmentValidation.js.map +7 -0
- package/dist/modules/staff/lib/support-ui/portalPendingUploads.js +45 -0
- package/dist/modules/staff/lib/support-ui/portalPendingUploads.js.map +7 -0
- package/dist/modules/staff/lib/support-ui/portalSupport.js +51 -0
- package/dist/modules/staff/lib/support-ui/portalSupport.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/access.js +3 -39
- package/dist/modules/staff/lib/time-tracking/access.js.map +2 -2
- package/dist/modules/staff/lib/time-tracking/listProjectAccess.js +54 -0
- package/dist/modules/staff/lib/time-tracking/listProjectAccess.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/portalRecipients.js +92 -2
- package/dist/modules/staff/lib/time-tracking/portalRecipients.js.map +2 -2
- package/dist/modules/staff/lib/time-tracking/projectAssignment.js +112 -0
- package/dist/modules/staff/lib/time-tracking/projectAssignment.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/settingKeys.js +14 -0
- package/dist/modules/staff/lib/time-tracking/settingKeys.js.map +2 -2
- package/dist/modules/staff/lib/time-tracking/settings.js +28 -1
- package/dist/modules/staff/lib/time-tracking/settings.js.map +2 -2
- package/dist/modules/staff/lib/time-tracking/taskAssignmentRoute.js +143 -0
- package/dist/modules/staff/lib/time-tracking/taskAssignmentRoute.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking/workRecipients.js +92 -0
- package/dist/modules/staff/lib/time-tracking/workRecipients.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/BoardFilterChips.js +32 -3
- package/dist/modules/staff/lib/time-tracking-ui/BoardFilterChips.js.map +2 -2
- package/dist/modules/staff/lib/time-tracking-ui/KanbanBoard.js +29 -0
- package/dist/modules/staff/lib/time-tracking-ui/KanbanBoard.js.map +2 -2
- package/dist/modules/staff/lib/time-tracking-ui/KanbanCard.js +4 -0
- package/dist/modules/staff/lib/time-tracking-ui/KanbanCard.js.map +2 -2
- package/dist/modules/staff/lib/time-tracking-ui/ProjectFormSections.js +141 -1
- package/dist/modules/staff/lib/time-tracking-ui/ProjectFormSections.js.map +2 -2
- package/dist/modules/staff/lib/time-tracking-ui/SupportAttachmentsSection.js +153 -0
- package/dist/modules/staff/lib/time-tracking-ui/SupportAttachmentsSection.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/SupportRequestPanel.js +67 -0
- package/dist/modules/staff/lib/time-tracking-ui/SupportRequestPanel.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/TaskBoardScreen.js +3 -1
- package/dist/modules/staff/lib/time-tracking-ui/TaskBoardScreen.js.map +2 -2
- package/dist/modules/staff/lib/time-tracking-ui/TaskCommentThread.js +80 -17
- package/dist/modules/staff/lib/time-tracking-ui/TaskCommentThread.js.map +2 -2
- package/dist/modules/staff/lib/time-tracking-ui/TaskDrawer.js +230 -41
- package/dist/modules/staff/lib/time-tracking-ui/TaskDrawer.js.map +2 -2
- package/dist/modules/staff/lib/time-tracking-ui/boardDirectory.js +21 -1
- package/dist/modules/staff/lib/time-tracking-ui/boardDirectory.js.map +2 -2
- package/dist/modules/staff/lib/time-tracking-ui/boardFilters.js +16 -4
- package/dist/modules/staff/lib/time-tracking-ui/boardFilters.js.map +2 -2
- package/dist/modules/staff/lib/time-tracking-ui/kanbanBoardData.js +3 -1
- package/dist/modules/staff/lib/time-tracking-ui/kanbanBoardData.js.map +2 -2
- package/dist/modules/staff/lib/time-tracking-ui/projectDefaultAssignee.js +68 -0
- package/dist/modules/staff/lib/time-tracking-ui/projectDefaultAssignee.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/settingsTabs.js +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/settingsTabs.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/supportTicketData.js +50 -0
- package/dist/modules/staff/lib/time-tracking-ui/supportTicketData.js.map +7 -0
- package/dist/modules/staff/lib/time-tracking-ui/taskDrawerData.js +13 -1
- package/dist/modules/staff/lib/time-tracking-ui/taskDrawerData.js.map +2 -2
- package/dist/modules/staff/lib/time-tracking-ui/timeTrackingSettingsForm.js +36 -2
- package/dist/modules/staff/lib/time-tracking-ui/timeTrackingSettingsForm.js.map +2 -2
- package/dist/modules/staff/migrations/Migration20261009180543_staff.js +42 -0
- package/dist/modules/staff/migrations/Migration20261009180543_staff.js.map +7 -0
- package/dist/modules/staff/notifications.js +92 -0
- package/dist/modules/staff/notifications.js.map +2 -2
- package/dist/modules/staff/setup.js +6 -2
- package/dist/modules/staff/setup.js.map +2 -2
- package/dist/modules/staff/subscribers/support-portal-comment-created.js +26 -0
- package/dist/modules/staff/subscribers/support-portal-comment-created.js.map +7 -0
- package/dist/modules/staff/subscribers/support-portal-comment-deleted.js +26 -0
- package/dist/modules/staff/subscribers/support-portal-comment-deleted.js.map +7 -0
- package/dist/modules/staff/subscribers/support-portal-comment-updated.js +26 -0
- package/dist/modules/staff/subscribers/support-portal-comment-updated.js.map +7 -0
- package/dist/modules/staff/subscribers/support-portal-status-column-updated.js +24 -0
- package/dist/modules/staff/subscribers/support-portal-status-column-updated.js.map +7 -0
- package/dist/modules/staff/subscribers/support-portal-task-status-changed.js +25 -0
- package/dist/modules/staff/subscribers/support-portal-task-status-changed.js.map +7 -0
- package/dist/modules/staff/subscribers/support-portal-task-updated.js +25 -0
- package/dist/modules/staff/subscribers/support-portal-task-updated.js.map +7 -0
- package/dist/modules/staff/subscribers/support-ticket-created-notification.js +25 -0
- package/dist/modules/staff/subscribers/support-ticket-created-notification.js.map +7 -0
- package/dist/modules/staff/subscribers/support-ticket-customer-replied-notification.js +25 -0
- package/dist/modules/staff/subscribers/support-ticket-customer-replied-notification.js.map +7 -0
- package/dist/modules/staff/subscribers/support-ticket-unnotified-clear.js +26 -0
- package/dist/modules/staff/subscribers/support-ticket-unnotified-clear.js.map +7 -0
- package/dist/modules/staff/subscribers/time-task-assignee-notification.js +83 -0
- package/dist/modules/staff/subscribers/time-task-assignee-notification.js.map +7 -0
- package/dist/modules/staff/widgets/injection/portal-support-tickets/widget.client.js +112 -0
- package/dist/modules/staff/widgets/injection/portal-support-tickets/widget.client.js.map +7 -0
- package/dist/modules/staff/widgets/injection/portal-support-tickets/widget.js +17 -0
- package/dist/modules/staff/widgets/injection/portal-support-tickets/widget.js.map +7 -0
- package/dist/modules/staff/widgets/injection/time-tracking-settings-support/widget.client.js +870 -0
- package/dist/modules/staff/widgets/injection/time-tracking-settings-support/widget.client.js.map +7 -0
- package/dist/modules/staff/widgets/injection/time-tracking-settings-support/widget.js +17 -0
- package/dist/modules/staff/widgets/injection/time-tracking-settings-support/widget.js.map +7 -0
- package/dist/modules/staff/widgets/injection-table.js +16 -1
- package/dist/modules/staff/widgets/injection-table.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsLocationDetailPage.js +4 -18
- package/dist/modules/wms/components/backend/WmsLocationDetailPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsLotDetailPage.js +4 -18
- package/dist/modules/wms/components/backend/WmsLotDetailPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsSkuDetailPage.js +4 -18
- package/dist/modules/wms/components/backend/WmsSkuDetailPage.js.map +2 -2
- package/dist/modules/wms/lib/inventoryCsvExport.js +19 -0
- package/dist/modules/wms/lib/inventoryCsvExport.js.map +7 -0
- package/generated/entities/staff_support_routing_rule/index.ts +9 -0
- package/generated/entities/staff_support_ticket/index.ts +17 -0
- package/generated/entities/staff_time_project/index.ts +1 -0
- package/generated/entities/staff_time_project_member/index.ts +1 -0
- package/generated/entities/staff_time_task/index.ts +2 -0
- package/generated/entities/staff_time_task_comment/index.ts +4 -0
- package/generated/entities.ids.generated.ts +2 -0
- package/generated/entity-fields-registry.ts +38 -0
- package/package.json +8 -8
- package/src/helpers/integration/auth.ts +1 -1
- package/src/helpers/integration/communicationChannelsFixtures.ts +60 -2
- package/src/modules/catalog/api/bulk-delete/route.ts +12 -2
- package/src/modules/communication_channels/api/post/test-seed/route.ts +29 -12
- package/src/modules/communication_channels/lib/test-seed.ts +49 -10
- package/src/modules/messages/commands/messages.ts +8 -10
- package/src/modules/portal/frontend/[orgSlug]/portal/dashboard/page.tsx +2 -2
- package/src/modules/staff/AGENTS.md +22 -6
- package/src/modules/staff/api/portal/support-tickets/[id]/attachments/route.ts +327 -0
- package/src/modules/staff/api/portal/support-tickets/[id]/messages/route.ts +94 -0
- package/src/modules/staff/api/portal/support-tickets/[id]/route.ts +160 -0
- package/src/modules/staff/api/portal/support-tickets/options/route.ts +60 -0
- package/src/modules/staff/api/portal/support-tickets/route.ts +253 -0
- package/src/modules/staff/api/timesheets/settings/route.ts +7 -1
- package/src/modules/staff/api/timesheets/support-routing-rules/fallback-project/route.ts +131 -0
- package/src/modules/staff/api/timesheets/support-routing-rules/preview/route.ts +248 -0
- package/src/modules/staff/api/timesheets/support-routing-rules/route.ts +150 -0
- package/src/modules/staff/api/timesheets/support-tickets/options/route.ts +181 -0
- package/src/modules/staff/api/timesheets/tasks/[id]/claim/route.ts +31 -0
- package/src/modules/staff/api/timesheets/tasks/[id]/comments/route.ts +25 -7
- package/src/modules/staff/api/timesheets/tasks/[id]/release/route.ts +30 -0
- package/src/modules/staff/api/timesheets/tasks/route.ts +119 -67
- package/src/modules/staff/api/timesheets/time-projects/[id]/employees/route.ts +3 -0
- package/src/modules/staff/api/timesheets/time-projects/route.ts +3 -0
- package/src/modules/staff/backend/staff/time-tracking/projects/[id]/edit/page.tsx +1 -0
- package/src/modules/staff/backend/staff/time-tracking/projects/[id]/page.tsx +67 -2
- package/src/modules/staff/backend/staff/time-tracking/projects/projectFormConfig.ts +22 -3
- package/src/modules/staff/backend/staff/time-tracking/settings/page.tsx +405 -308
- package/src/modules/staff/backend/staff/time-tracking/support/page.meta.ts +14 -0
- package/src/modules/staff/backend/staff/time-tracking/support/page.tsx +428 -0
- package/src/modules/staff/cli.ts +28 -0
- package/src/modules/staff/commands/index.ts +3 -0
- package/src/modules/staff/commands/shared.ts +22 -1
- package/src/modules/staff/commands/support-routing-rules.ts +595 -0
- package/src/modules/staff/commands/support-tickets.ts +580 -0
- package/src/modules/staff/commands/timesheets-projects.ts +84 -13
- package/src/modules/staff/commands/timesheets-task-assignment.ts +319 -0
- package/src/modules/staff/commands/timesheets-task-comments.ts +70 -15
- package/src/modules/staff/commands/timesheets-tasks.ts +106 -15
- package/src/modules/staff/data/enrichers.ts +203 -0
- package/src/modules/staff/data/entities.ts +133 -2
- package/src/modules/staff/data/extensions.ts +9 -1
- package/src/modules/staff/data/validators.ts +36 -0
- package/src/modules/staff/encryption.ts +6 -0
- package/src/modules/staff/events.payloads.ts +87 -1
- package/src/modules/staff/events.ts +26 -0
- package/src/modules/staff/extension-points.ts +1 -0
- package/src/modules/staff/frontend/[orgSlug]/portal/support/[id]/page.meta.ts +10 -0
- package/src/modules/staff/frontend/[orgSlug]/portal/support/[id]/page.tsx +553 -0
- package/src/modules/staff/frontend/[orgSlug]/portal/support/new/page.meta.ts +10 -0
- package/src/modules/staff/frontend/[orgSlug]/portal/support/new/page.tsx +346 -0
- package/src/modules/staff/frontend/[orgSlug]/portal/support/page.meta.ts +17 -0
- package/src/modules/staff/frontend/[orgSlug]/portal/support/page.tsx +253 -0
- package/src/modules/staff/i18n/de.json +291 -0
- package/src/modules/staff/i18n/en.json +291 -0
- package/src/modules/staff/i18n/es.json +291 -0
- package/src/modules/staff/i18n/ko.json +291 -0
- package/src/modules/staff/i18n/pl.json +291 -0
- package/src/modules/staff/index.ts +1 -1
- package/src/modules/staff/lib/crud.ts +2 -1
- package/src/modules/staff/lib/support/attachments.ts +43 -0
- package/src/modules/staff/lib/support/dictionaries.ts +120 -0
- package/src/modules/staff/lib/support/notifications.ts +138 -0
- package/src/modules/staff/lib/support/portalAttachments.ts +140 -0
- package/src/modules/staff/lib/support/portalBroadcast.ts +161 -0
- package/src/modules/staff/lib/support/portalRoute.ts +108 -0
- package/src/modules/staff/lib/support/portalStatus.ts +15 -0
- package/src/modules/staff/lib/support/portalTickets.ts +233 -0
- package/src/modules/staff/lib/support/routing.ts +117 -0
- package/src/modules/staff/lib/support/routingRuleDraft.ts +45 -0
- package/src/modules/staff/lib/support/seedDefaults.ts +151 -0
- package/src/modules/staff/lib/support/supportActivity.ts +39 -0
- package/src/modules/staff/lib/support-ui/PortalSupportNotLinked.tsx +20 -0
- package/src/modules/staff/lib/support-ui/portalAttachmentValidation.ts +125 -0
- package/src/modules/staff/lib/support-ui/portalPendingUploads.ts +49 -0
- package/src/modules/staff/lib/support-ui/portalSupport.ts +116 -0
- package/src/modules/staff/lib/time-tracking/access.ts +2 -62
- package/src/modules/staff/lib/time-tracking/listProjectAccess.ts +78 -0
- package/src/modules/staff/lib/time-tracking/portalRecipients.ts +173 -5
- package/src/modules/staff/lib/time-tracking/projectAssignment.ts +172 -0
- package/src/modules/staff/lib/time-tracking/settingKeys.ts +11 -0
- package/src/modules/staff/lib/time-tracking/settings.ts +46 -1
- package/src/modules/staff/lib/time-tracking/taskAssignmentRoute.ts +165 -0
- package/src/modules/staff/lib/time-tracking/workRecipients.ts +183 -0
- package/src/modules/staff/lib/time-tracking-ui/BoardFilterChips.tsx +36 -1
- package/src/modules/staff/lib/time-tracking-ui/KanbanBoard.tsx +30 -0
- package/src/modules/staff/lib/time-tracking-ui/KanbanCard.tsx +9 -0
- package/src/modules/staff/lib/time-tracking-ui/ProjectFormSections.tsx +185 -6
- package/src/modules/staff/lib/time-tracking-ui/SupportAttachmentsSection.tsx +188 -0
- package/src/modules/staff/lib/time-tracking-ui/SupportRequestPanel.tsx +102 -0
- package/src/modules/staff/lib/time-tracking-ui/TaskBoardScreen.tsx +2 -0
- package/src/modules/staff/lib/time-tracking-ui/TaskCommentThread.tsx +105 -22
- package/src/modules/staff/lib/time-tracking-ui/TaskDrawer.tsx +278 -43
- package/src/modules/staff/lib/time-tracking-ui/boardDirectory.ts +21 -0
- package/src/modules/staff/lib/time-tracking-ui/boardFilters.ts +16 -2
- package/src/modules/staff/lib/time-tracking-ui/kanbanBoardData.ts +4 -0
- package/src/modules/staff/lib/time-tracking-ui/projectDefaultAssignee.ts +117 -0
- package/src/modules/staff/lib/time-tracking-ui/settingsTabs.ts +17 -0
- package/src/modules/staff/lib/time-tracking-ui/supportTicketData.ts +71 -0
- package/src/modules/staff/lib/time-tracking-ui/taskDrawerData.ts +15 -0
- package/src/modules/staff/lib/time-tracking-ui/timeTrackingSettingsForm.ts +48 -1
- package/src/modules/staff/migrations/.snapshot-open-mercato.json +714 -0
- package/src/modules/staff/migrations/Migration20261009180543_staff.ts +50 -0
- package/src/modules/staff/notifications.ts +92 -0
- package/src/modules/staff/setup.ts +6 -2
- package/src/modules/staff/subscribers/support-portal-comment-created.ts +35 -0
- package/src/modules/staff/subscribers/support-portal-comment-deleted.ts +35 -0
- package/src/modules/staff/subscribers/support-portal-comment-updated.ts +35 -0
- package/src/modules/staff/subscribers/support-portal-status-column-updated.ts +36 -0
- package/src/modules/staff/subscribers/support-portal-task-status-changed.ts +34 -0
- package/src/modules/staff/subscribers/support-portal-task-updated.ts +34 -0
- package/src/modules/staff/subscribers/support-ticket-created-notification.ts +27 -0
- package/src/modules/staff/subscribers/support-ticket-customer-replied-notification.ts +27 -0
- package/src/modules/staff/subscribers/support-ticket-unnotified-clear.ts +29 -0
- package/src/modules/staff/subscribers/time-task-assignee-notification.ts +102 -0
- package/src/modules/staff/widgets/injection/portal-support-tickets/widget.client.tsx +151 -0
- package/src/modules/staff/widgets/injection/portal-support-tickets/widget.ts +16 -0
- package/src/modules/staff/widgets/injection/time-tracking-settings-support/widget.client.tsx +1058 -0
- package/src/modules/staff/widgets/injection/time-tracking-settings-support/widget.ts +17 -0
- package/src/modules/staff/widgets/injection-table.ts +15 -0
- package/src/modules/wms/components/backend/WmsLocationDetailPage.tsx +4 -20
- package/src/modules/wms/components/backend/WmsLotDetailPage.tsx +4 -20
- package/src/modules/wms/components/backend/WmsSkuDetailPage.tsx +4 -19
- package/src/modules/wms/lib/inventoryCsvExport.ts +18 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/modules/staff/subscribers/support-ticket-customer-replied-notification.ts"],
|
|
4
|
+
"sourcesContent": ["import { createLogger } from '@open-mercato/shared/lib/logger'\nimport { notifySupportTicket } from '../lib/support/notifications'\n\nconst logger = createLogger('staff').child({ component: 'subscribers/support-ticket-customer-replied-notification' })\n\nexport const metadata = {\n event: 'staff.support_ticket.customer_replied',\n persistent: true,\n id: 'staff:support-ticket-customer-replied-notification',\n}\n\ntype ResolverContext = { resolve: <T = unknown>(name: string) => T }\n\ntype Payload = Record<string, unknown>\n\nexport default async function handle(payload: Payload, ctx: ResolverContext): Promise<void> {\n try {\n const taskId = typeof payload.taskId === 'string' ? payload.taskId : null\n const tenantId = typeof payload.tenantId === 'string' ? payload.tenantId : null\n const organizationId = typeof payload.organizationId === 'string' ? payload.organizationId : null\n if (!taskId || !tenantId || !organizationId) return\n await notifySupportTicket(ctx, { taskId, tenantId, organizationId, kind: 'customer_replied' })\n } catch (err) {\n logger.error('staff:support-ticket-customer-replied-notification failed', { err, id: payload?.id ?? null })\n throw err\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,oBAAoB;AAC7B,SAAS,2BAA2B;AAEpC,MAAM,SAAS,aAAa,OAAO,EAAE,MAAM,EAAE,WAAW,2DAA2D,CAAC;AAE7G,MAAM,WAAW;AAAA,EACtB,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,IAAI;AACN;AAMA,eAAO,OAA8B,SAAkB,KAAqC;AAC1F,MAAI;AACF,UAAM,SAAS,OAAO,QAAQ,WAAW,WAAW,QAAQ,SAAS;AACrE,UAAM,WAAW,OAAO,QAAQ,aAAa,WAAW,QAAQ,WAAW;AAC3E,UAAM,iBAAiB,OAAO,QAAQ,mBAAmB,WAAW,QAAQ,iBAAiB;AAC7F,QAAI,CAAC,UAAU,CAAC,YAAY,CAAC,eAAgB;AAC7C,UAAM,oBAAoB,KAAK,EAAE,QAAQ,UAAU,gBAAgB,MAAM,mBAAmB,CAAC;AAAA,EAC/F,SAAS,KAAK;AACZ,WAAO,MAAM,6DAA6D,EAAE,KAAK,IAAI,SAAS,MAAM,KAAK,CAAC;AAC1G,UAAM;AAAA,EACR;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { createLogger } from "@open-mercato/shared/lib/logger";
|
|
2
|
+
import { clearSupportTicketUnnotified } from "../lib/support/notifications.js";
|
|
3
|
+
const logger = createLogger("staff").child({ component: "subscribers/support-ticket-unnotified-clear" });
|
|
4
|
+
const metadata = {
|
|
5
|
+
event: "staff.timesheets.time_task.assignee_changed",
|
|
6
|
+
persistent: true,
|
|
7
|
+
id: "staff:support-ticket-unnotified-clear"
|
|
8
|
+
};
|
|
9
|
+
async function handle(payload, ctx) {
|
|
10
|
+
try {
|
|
11
|
+
const taskId = typeof payload.id === "string" ? payload.id : null;
|
|
12
|
+
const tenantId = typeof payload.tenantId === "string" ? payload.tenantId : null;
|
|
13
|
+
const organizationId = typeof payload.organizationId === "string" ? payload.organizationId : null;
|
|
14
|
+
if (!taskId || !tenantId || !organizationId || !payload.assigneeStaffMemberId) return;
|
|
15
|
+
const em = ctx.resolve("em").fork();
|
|
16
|
+
await clearSupportTicketUnnotified(em, { taskId, tenantId, organizationId });
|
|
17
|
+
} catch (err) {
|
|
18
|
+
logger.error("staff:support-ticket-unnotified-clear failed", { err, id: payload?.id ?? null });
|
|
19
|
+
throw err;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export {
|
|
23
|
+
handle as default,
|
|
24
|
+
metadata
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=support-ticket-unnotified-clear.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/modules/staff/subscribers/support-ticket-unnotified-clear.ts"],
|
|
4
|
+
"sourcesContent": ["import type { EntityManager } from '@mikro-orm/postgresql'\nimport { createLogger } from '@open-mercato/shared/lib/logger'\nimport { clearSupportTicketUnnotified } from '../lib/support/notifications'\n\nconst logger = createLogger('staff').child({ component: 'subscribers/support-ticket-unnotified-clear' })\n\nexport const metadata = {\n event: 'staff.timesheets.time_task.assignee_changed',\n persistent: true,\n id: 'staff:support-ticket-unnotified-clear',\n}\n\ntype ResolverContext = { resolve: <T = unknown>(name: string) => T }\n\ntype Payload = Record<string, unknown>\n\nexport default async function handle(payload: Payload, ctx: ResolverContext): Promise<void> {\n try {\n const taskId = typeof payload.id === 'string' ? payload.id : null\n const tenantId = typeof payload.tenantId === 'string' ? payload.tenantId : null\n const organizationId = typeof payload.organizationId === 'string' ? payload.organizationId : null\n if (!taskId || !tenantId || !organizationId || !payload.assigneeStaffMemberId) return\n const em = (ctx.resolve('em') as EntityManager).fork()\n await clearSupportTicketUnnotified(em, { taskId, tenantId, organizationId })\n } catch (err) {\n logger.error('staff:support-ticket-unnotified-clear failed', { err, id: payload?.id ?? null })\n throw err\n }\n}\n"],
|
|
5
|
+
"mappings": "AACA,SAAS,oBAAoB;AAC7B,SAAS,oCAAoC;AAE7C,MAAM,SAAS,aAAa,OAAO,EAAE,MAAM,EAAE,WAAW,8CAA8C,CAAC;AAEhG,MAAM,WAAW;AAAA,EACtB,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,IAAI;AACN;AAMA,eAAO,OAA8B,SAAkB,KAAqC;AAC1F,MAAI;AACF,UAAM,SAAS,OAAO,QAAQ,OAAO,WAAW,QAAQ,KAAK;AAC7D,UAAM,WAAW,OAAO,QAAQ,aAAa,WAAW,QAAQ,WAAW;AAC3E,UAAM,iBAAiB,OAAO,QAAQ,mBAAmB,WAAW,QAAQ,iBAAiB;AAC7F,QAAI,CAAC,UAAU,CAAC,YAAY,CAAC,kBAAkB,CAAC,QAAQ,sBAAuB;AAC/E,UAAM,KAAM,IAAI,QAAQ,IAAI,EAAoB,KAAK;AACrD,UAAM,6BAA6B,IAAI,EAAE,QAAQ,UAAU,eAAe,CAAC;AAAA,EAC7E,SAAS,KAAK;AACZ,WAAO,MAAM,gDAAgD,EAAE,KAAK,IAAI,SAAS,MAAM,KAAK,CAAC;AAC7F,UAAM;AAAA,EACR;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { createLogger } from "@open-mercato/shared/lib/logger";
|
|
2
|
+
import { findOneWithDecryption } from "@open-mercato/shared/lib/encryption/find";
|
|
3
|
+
import { notificationTypes } from "../notifications.js";
|
|
4
|
+
import { StaffTeamMember, StaffTimeTask } from "../data/entities.js";
|
|
5
|
+
import { resolveAssignmentGraceDaysFromContainer } from "../lib/time-tracking/projectAssignment.js";
|
|
6
|
+
import { notifyProjectWork, resolveProjectWorkRecipients } from "../lib/time-tracking/workRecipients.js";
|
|
7
|
+
const logger = createLogger("staff").child({ component: "subscribers/time-task-assignee-notification" });
|
|
8
|
+
const RELEASED_TYPE = "staff.timesheets.time_task.released";
|
|
9
|
+
const ASSIGNED_TYPE = "staff.timesheets.time_task.assigned";
|
|
10
|
+
const metadata = {
|
|
11
|
+
event: "staff.timesheets.time_task.assignee_changed",
|
|
12
|
+
persistent: true,
|
|
13
|
+
id: "staff:time-task-assignee-notification"
|
|
14
|
+
};
|
|
15
|
+
function planAssigneeNotification(payload) {
|
|
16
|
+
const kind = payload.changeKind ?? null;
|
|
17
|
+
const next = payload.assigneeStaffMemberId ?? null;
|
|
18
|
+
if (kind === "release") return "released";
|
|
19
|
+
if (kind === "manual") return next ? "assigned" : "released";
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
async function handle(payload, ctx) {
|
|
23
|
+
try {
|
|
24
|
+
const plan = planAssigneeNotification(payload);
|
|
25
|
+
const taskId = payload.id ?? null;
|
|
26
|
+
const tenantId = payload.tenantId ?? null;
|
|
27
|
+
const organizationId = payload.organizationId ?? null;
|
|
28
|
+
if (!plan || !taskId || !tenantId || !organizationId) return;
|
|
29
|
+
const scope = { tenantId, organizationId };
|
|
30
|
+
const em = ctx.resolve("em").fork();
|
|
31
|
+
const task = await em.findOne(StaffTimeTask, { id: taskId, tenantId, organizationId, deletedAt: null });
|
|
32
|
+
if (!task) return;
|
|
33
|
+
const build = {
|
|
34
|
+
bodyVariables: { reference: task.reference, title: task.title },
|
|
35
|
+
sourceEntityType: "staff:staff_time_task",
|
|
36
|
+
sourceEntityId: task.id,
|
|
37
|
+
linkHref: `/backend/staff/time-tracking/board?projectId=${encodeURIComponent(task.timeProjectId)}&task=${encodeURIComponent(task.id)}`,
|
|
38
|
+
groupKey: `staff:time-task-${plan}:${task.id}`
|
|
39
|
+
};
|
|
40
|
+
if (plan === "assigned") {
|
|
41
|
+
const typeDef2 = notificationTypes.find((type) => type.type === ASSIGNED_TYPE);
|
|
42
|
+
if (!typeDef2 || !task.assigneeStaffMemberId) return;
|
|
43
|
+
const assignee = await findOneWithDecryption(
|
|
44
|
+
em,
|
|
45
|
+
StaffTeamMember,
|
|
46
|
+
{ id: task.assigneeStaffMemberId, tenantId, organizationId, deletedAt: null },
|
|
47
|
+
void 0,
|
|
48
|
+
scope
|
|
49
|
+
);
|
|
50
|
+
const assigneeUserId = assignee?.userId ?? null;
|
|
51
|
+
if (!assigneeUserId || assigneeUserId === (payload.actorUserId ?? null)) return;
|
|
52
|
+
await notifyProjectWork(ctx, scope, { typeDef: typeDef2, recipients: { step: 1, userIds: [assigneeUserId] }, build });
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const typeDef = notificationTypes.find((type) => type.type === RELEASED_TYPE);
|
|
56
|
+
if (!typeDef) return;
|
|
57
|
+
const graceDays = await resolveAssignmentGraceDaysFromContainer(ctx, tenantId);
|
|
58
|
+
const recipients = await resolveProjectWorkRecipients(em, scope, {
|
|
59
|
+
timeProjectId: task.timeProjectId,
|
|
60
|
+
actorUserId: payload.actorUserId ?? null,
|
|
61
|
+
graceDays
|
|
62
|
+
});
|
|
63
|
+
const result = await notifyProjectWork(ctx, scope, { typeDef, recipients, build });
|
|
64
|
+
if (result.notifiedCount === 0) {
|
|
65
|
+
logger.warn("staff released-task notification reached nobody", {
|
|
66
|
+
tenantId,
|
|
67
|
+
organizationId,
|
|
68
|
+
timeProjectId: task.timeProjectId,
|
|
69
|
+
taskId: task.id,
|
|
70
|
+
step: result.step
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
} catch (err) {
|
|
74
|
+
logger.error("staff task assignee notification failed", { err, taskId: payload.id ?? null });
|
|
75
|
+
throw err;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
export {
|
|
79
|
+
handle as default,
|
|
80
|
+
metadata,
|
|
81
|
+
planAssigneeNotification
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=time-task-assignee-notification.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/modules/staff/subscribers/time-task-assignee-notification.ts"],
|
|
4
|
+
"sourcesContent": ["import type { EntityManager } from '@mikro-orm/postgresql'\nimport { createLogger } from '@open-mercato/shared/lib/logger'\nimport { findOneWithDecryption } from '@open-mercato/shared/lib/encryption/find'\nimport { notificationTypes } from '../notifications'\nimport { StaffTeamMember, StaffTimeTask } from '../data/entities'\nimport { resolveAssignmentGraceDaysFromContainer } from '../lib/time-tracking/projectAssignment'\nimport { notifyProjectWork, resolveProjectWorkRecipients } from '../lib/time-tracking/workRecipients'\n\nconst logger = createLogger('staff').child({ component: 'subscribers/time-task-assignee-notification' })\n\nconst RELEASED_TYPE = 'staff.timesheets.time_task.released'\nconst ASSIGNED_TYPE = 'staff.timesheets.time_task.assigned'\n\nexport const metadata = {\n event: 'staff.timesheets.time_task.assignee_changed',\n persistent: true,\n id: 'staff:time-task-assignee-notification',\n}\n\nexport type TaskAssigneeChangedPayload = {\n id?: string | null\n tenantId?: string | null\n organizationId?: string | null\n timeProjectId?: string | null\n previousAssigneeStaffMemberId?: string | null\n assigneeStaffMemberId?: string | null\n changeKind?: 'default' | 'claim' | 'release' | 'manual' | null\n actorUserId?: string | null\n}\n\ntype ResolverContext = {\n resolve: <T = unknown>(name: string) => T\n}\n\nexport type AssigneeNotificationPlan = 'released' | 'assigned' | null\n\nexport function planAssigneeNotification(payload: TaskAssigneeChangedPayload): AssigneeNotificationPlan {\n const kind = payload.changeKind ?? null\n const next = payload.assigneeStaffMemberId ?? null\n if (kind === 'release') return 'released'\n if (kind === 'manual') return next ? 'assigned' : 'released'\n return null\n}\n\nexport default async function handle(payload: TaskAssigneeChangedPayload, ctx: ResolverContext): Promise<void> {\n try {\n const plan = planAssigneeNotification(payload)\n const taskId = payload.id ?? null\n const tenantId = payload.tenantId ?? null\n const organizationId = payload.organizationId ?? null\n if (!plan || !taskId || !tenantId || !organizationId) return\n const scope = { tenantId, organizationId }\n const em = (ctx.resolve('em') as EntityManager).fork()\n const task = await em.findOne(StaffTimeTask, { id: taskId, tenantId, organizationId, deletedAt: null })\n if (!task) return\n const build = {\n bodyVariables: { reference: task.reference, title: task.title },\n sourceEntityType: 'staff:staff_time_task',\n sourceEntityId: task.id,\n linkHref: `/backend/staff/time-tracking/board?projectId=${encodeURIComponent(task.timeProjectId)}&task=${encodeURIComponent(task.id)}`,\n groupKey: `staff:time-task-${plan}:${task.id}`,\n }\n\n if (plan === 'assigned') {\n const typeDef = notificationTypes.find((type) => type.type === ASSIGNED_TYPE)\n if (!typeDef || !task.assigneeStaffMemberId) return\n const assignee = await findOneWithDecryption(\n em,\n StaffTeamMember,\n { id: task.assigneeStaffMemberId, tenantId, organizationId, deletedAt: null },\n undefined,\n scope,\n )\n const assigneeUserId = assignee?.userId ?? null\n if (!assigneeUserId || assigneeUserId === (payload.actorUserId ?? null)) return\n await notifyProjectWork(ctx, scope, { typeDef, recipients: { step: 1, userIds: [assigneeUserId] }, build })\n return\n }\n\n const typeDef = notificationTypes.find((type) => type.type === RELEASED_TYPE)\n if (!typeDef) return\n const graceDays = await resolveAssignmentGraceDaysFromContainer(ctx, tenantId)\n const recipients = await resolveProjectWorkRecipients(em, scope, {\n timeProjectId: task.timeProjectId,\n actorUserId: payload.actorUserId ?? null,\n graceDays,\n })\n const result = await notifyProjectWork(ctx, scope, { typeDef, recipients, build })\n if (result.notifiedCount === 0) {\n logger.warn('staff released-task notification reached nobody', {\n tenantId,\n organizationId,\n timeProjectId: task.timeProjectId,\n taskId: task.id,\n step: result.step,\n })\n }\n } catch (err) {\n logger.error('staff task assignee notification failed', { err, taskId: payload.id ?? null })\n throw err\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["typeDef"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import Link from "next/link";
|
|
5
|
+
import { useT } from "@open-mercato/shared/lib/i18n/context";
|
|
6
|
+
import { Button } from "@open-mercato/ui/primitives/button";
|
|
7
|
+
import { StatusBadge } from "@open-mercato/ui/primitives/status-badge";
|
|
8
|
+
import { apiCall } from "@open-mercato/ui/backend/utils/apiCall";
|
|
9
|
+
import { ErrorMessage, LoadingMessage } from "@open-mercato/ui/backend/detail";
|
|
10
|
+
import { usePortalAppEvent } from "@open-mercato/ui/portal/hooks/usePortalAppEvent";
|
|
11
|
+
import {
|
|
12
|
+
PORTAL_SUPPORT_STATUS_VARIANTS,
|
|
13
|
+
PORTAL_SUPPORT_UPDATED_EVENT,
|
|
14
|
+
isPortalSupportAccountNotLinked,
|
|
15
|
+
portalSupportStatusLabel
|
|
16
|
+
} from "@open-mercato/core/modules/staff/lib/support-ui/portalSupport";
|
|
17
|
+
import { PortalSupportNotLinked } from "@open-mercato/core/modules/staff/lib/support-ui/PortalSupportNotLinked";
|
|
18
|
+
function readOrgSlug(context) {
|
|
19
|
+
if (!context || typeof context !== "object") return "";
|
|
20
|
+
const value = context.orgSlug;
|
|
21
|
+
return typeof value === "string" ? value : "";
|
|
22
|
+
}
|
|
23
|
+
const MAX_ITEMS = 5;
|
|
24
|
+
function activityTime(item) {
|
|
25
|
+
const value = item.lastActivityAt ?? item.updatedAt ?? item.createdAt;
|
|
26
|
+
return value ? new Date(value).getTime() || 0 : 0;
|
|
27
|
+
}
|
|
28
|
+
function PortalSupportTicketsWidget({ context }) {
|
|
29
|
+
const t = useT();
|
|
30
|
+
const orgSlug = readOrgSlug(context);
|
|
31
|
+
const [items, setItems] = React.useState([]);
|
|
32
|
+
const [openCount, setOpenCount] = React.useState(0);
|
|
33
|
+
const [canCreate, setCanCreate] = React.useState(false);
|
|
34
|
+
const [loading, setLoading] = React.useState(true);
|
|
35
|
+
const [loadFailed, setLoadFailed] = React.useState(false);
|
|
36
|
+
const [notLinked, setNotLinked] = React.useState(false);
|
|
37
|
+
const loadSeqRef = React.useRef(0);
|
|
38
|
+
const load = React.useCallback(async () => {
|
|
39
|
+
const requestSeq = loadSeqRef.current + 1;
|
|
40
|
+
loadSeqRef.current = requestSeq;
|
|
41
|
+
const isStale = () => requestSeq !== loadSeqRef.current;
|
|
42
|
+
try {
|
|
43
|
+
const [received, inProgress, options] = await Promise.all([
|
|
44
|
+
apiCall(`/api/staff/portal/support-tickets?status=received&pageSize=${MAX_ITEMS}`, { credentials: "include" }),
|
|
45
|
+
apiCall(`/api/staff/portal/support-tickets?status=in_progress&pageSize=${MAX_ITEMS}`, { credentials: "include" }),
|
|
46
|
+
apiCall("/api/staff/portal/support-tickets/options", { credentials: "include" })
|
|
47
|
+
]);
|
|
48
|
+
if (isStale()) return;
|
|
49
|
+
const accountNotLinked = isPortalSupportAccountNotLinked(received);
|
|
50
|
+
setNotLinked(accountNotLinked);
|
|
51
|
+
if (accountNotLinked) {
|
|
52
|
+
setLoadFailed(false);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (!received.ok || !inProgress.ok) {
|
|
56
|
+
setLoadFailed(true);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
setLoadFailed(false);
|
|
60
|
+
const merged = [...received.result?.items ?? [], ...inProgress.result?.items ?? []].sort((left, right) => activityTime(right) - activityTime(left)).slice(0, MAX_ITEMS);
|
|
61
|
+
setItems(merged);
|
|
62
|
+
setOpenCount((received.result?.total ?? 0) + (inProgress.result?.total ?? 0));
|
|
63
|
+
setCanCreate(options.ok && options.result?.canCreate === true);
|
|
64
|
+
} catch {
|
|
65
|
+
if (!isStale()) setLoadFailed(true);
|
|
66
|
+
} finally {
|
|
67
|
+
if (!isStale()) setLoading(false);
|
|
68
|
+
}
|
|
69
|
+
}, []);
|
|
70
|
+
React.useEffect(() => {
|
|
71
|
+
void load();
|
|
72
|
+
}, [load]);
|
|
73
|
+
usePortalAppEvent(PORTAL_SUPPORT_UPDATED_EVENT, () => {
|
|
74
|
+
void load();
|
|
75
|
+
}, [load]);
|
|
76
|
+
if (loading) {
|
|
77
|
+
return /* @__PURE__ */ jsx(LoadingMessage, { label: t("staff.portal.support.widget.loading", "Loading your tickets\u2026") });
|
|
78
|
+
}
|
|
79
|
+
if (notLinked) {
|
|
80
|
+
return /* @__PURE__ */ jsx("div", { "data-testid": "portal-support-widget", children: /* @__PURE__ */ jsx(PortalSupportNotLinked, { size: "sm" }) });
|
|
81
|
+
}
|
|
82
|
+
if (loadFailed) {
|
|
83
|
+
return /* @__PURE__ */ jsx("div", { "data-testid": "portal-support-widget", children: /* @__PURE__ */ jsx(
|
|
84
|
+
ErrorMessage,
|
|
85
|
+
{
|
|
86
|
+
label: t("staff.portal.support.loadFailed", "Could not load your support tickets."),
|
|
87
|
+
action: /* @__PURE__ */ jsx(Button, { size: "sm", variant: "outline", onClick: () => {
|
|
88
|
+
void load();
|
|
89
|
+
}, children: t("staff.portal.support.widget.retry", "Try again") })
|
|
90
|
+
}
|
|
91
|
+
) });
|
|
92
|
+
}
|
|
93
|
+
return /* @__PURE__ */ jsxs("div", { className: "space-y-3", "data-testid": "portal-support-widget", children: [
|
|
94
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: t("staff.portal.support.widget.openCount", "Open tickets: {count}", { count: String(openCount) }) }),
|
|
95
|
+
items.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: t("staff.portal.support.widget.empty", "No open tickets.") }) : /* @__PURE__ */ jsx("ul", { className: "space-y-2", children: items.map((item) => /* @__PURE__ */ jsxs("li", { className: "flex items-center justify-between gap-2", children: [
|
|
96
|
+
/* @__PURE__ */ jsxs(Link, { href: `/${orgSlug}/portal/support/${item.id}`, className: "min-w-0 truncate text-sm text-foreground hover:underline", children: [
|
|
97
|
+
item.supportReference,
|
|
98
|
+
" \xB7 ",
|
|
99
|
+
item.subject
|
|
100
|
+
] }),
|
|
101
|
+
/* @__PURE__ */ jsx(StatusBadge, { variant: PORTAL_SUPPORT_STATUS_VARIANTS[item.portalStatus] ?? "neutral", children: portalSupportStatusLabel(t, item.portalStatus) })
|
|
102
|
+
] }, item.id)) }),
|
|
103
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-2", children: [
|
|
104
|
+
canCreate ? /* @__PURE__ */ jsx(Button, { size: "sm", asChild: true, children: /* @__PURE__ */ jsx(Link, { href: `/${orgSlug}/portal/support/new`, children: t("staff.portal.support.newTicket", "New ticket") }) }) : null,
|
|
105
|
+
/* @__PURE__ */ jsx(Button, { size: "sm", variant: "outline", asChild: true, children: /* @__PURE__ */ jsx(Link, { href: `/${orgSlug}/portal/support`, children: t("staff.portal.support.widget.viewAll", "View all") }) })
|
|
106
|
+
] })
|
|
107
|
+
] });
|
|
108
|
+
}
|
|
109
|
+
export {
|
|
110
|
+
PortalSupportTicketsWidget as default
|
|
111
|
+
};
|
|
112
|
+
//# sourceMappingURL=widget.client.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/modules/staff/widgets/injection/portal-support-tickets/widget.client.tsx"],
|
|
4
|
+
"sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport Link from 'next/link'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport type { InjectionWidgetComponentProps } from '@open-mercato/shared/modules/widgets/injection'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { StatusBadge } from '@open-mercato/ui/primitives/status-badge'\nimport { apiCall } from '@open-mercato/ui/backend/utils/apiCall'\nimport { ErrorMessage, LoadingMessage } from '@open-mercato/ui/backend/detail'\nimport { usePortalAppEvent } from '@open-mercato/ui/portal/hooks/usePortalAppEvent'\nimport {\n PORTAL_SUPPORT_STATUS_VARIANTS,\n PORTAL_SUPPORT_UPDATED_EVENT,\n isPortalSupportAccountNotLinked,\n portalSupportStatusLabel,\n type PortalSupportOptions,\n type PortalSupportTicketList,\n type PortalSupportTicketListItem,\n} from '@open-mercato/core/modules/staff/lib/support-ui/portalSupport'\nimport { PortalSupportNotLinked } from '@open-mercato/core/modules/staff/lib/support-ui/PortalSupportNotLinked'\n\nfunction readOrgSlug(context: unknown): string {\n if (!context || typeof context !== 'object') return ''\n const value = (context as Record<string, unknown>).orgSlug\n return typeof value === 'string' ? value : ''\n}\n\nconst MAX_ITEMS = 5\n\nfunction activityTime(item: PortalSupportTicketListItem): number {\n const value = item.lastActivityAt ?? item.updatedAt ?? item.createdAt\n return value ? new Date(value).getTime() || 0 : 0\n}\n\nexport default function PortalSupportTicketsWidget({ context }: InjectionWidgetComponentProps) {\n const t = useT()\n const orgSlug = readOrgSlug(context)\n const [items, setItems] = React.useState<PortalSupportTicketListItem[]>([])\n const [openCount, setOpenCount] = React.useState(0)\n const [canCreate, setCanCreate] = React.useState(false)\n const [loading, setLoading] = React.useState(true)\n const [loadFailed, setLoadFailed] = React.useState(false)\n const [notLinked, setNotLinked] = React.useState(false)\n\n const loadSeqRef = React.useRef(0)\n\n const load = React.useCallback(async () => {\n const requestSeq = loadSeqRef.current + 1\n loadSeqRef.current = requestSeq\n const isStale = () => requestSeq !== loadSeqRef.current\n try {\n const [received, inProgress, options] = await Promise.all([\n apiCall<PortalSupportTicketList>(`/api/staff/portal/support-tickets?status=received&pageSize=${MAX_ITEMS}`, { credentials: 'include' }),\n apiCall<PortalSupportTicketList>(`/api/staff/portal/support-tickets?status=in_progress&pageSize=${MAX_ITEMS}`, { credentials: 'include' }),\n apiCall<PortalSupportOptions>('/api/staff/portal/support-tickets/options', { credentials: 'include' }),\n ])\n if (isStale()) return\n const accountNotLinked = isPortalSupportAccountNotLinked(received)\n setNotLinked(accountNotLinked)\n if (accountNotLinked) {\n setLoadFailed(false)\n return\n }\n if (!received.ok || !inProgress.ok) {\n setLoadFailed(true)\n return\n }\n setLoadFailed(false)\n const merged = [...(received.result?.items ?? []), ...(inProgress.result?.items ?? [])]\n .sort((left, right) => activityTime(right) - activityTime(left))\n .slice(0, MAX_ITEMS)\n setItems(merged)\n setOpenCount((received.result?.total ?? 0) + (inProgress.result?.total ?? 0))\n setCanCreate(options.ok && options.result?.canCreate === true)\n } catch {\n if (!isStale()) setLoadFailed(true)\n } finally {\n if (!isStale()) setLoading(false)\n }\n }, [])\n\n React.useEffect(() => {\n void load()\n }, [load])\n\n usePortalAppEvent(PORTAL_SUPPORT_UPDATED_EVENT, () => {\n void load()\n }, [load])\n\n if (loading) {\n return <LoadingMessage label={t('staff.portal.support.widget.loading', 'Loading your tickets\u2026')} />\n }\n\n if (notLinked) {\n return (\n <div data-testid=\"portal-support-widget\">\n <PortalSupportNotLinked size=\"sm\" />\n </div>\n )\n }\n\n if (loadFailed) {\n return (\n <div data-testid=\"portal-support-widget\">\n <ErrorMessage\n label={t('staff.portal.support.loadFailed', 'Could not load your support tickets.')}\n action={(\n <Button size=\"sm\" variant=\"outline\" onClick={() => { void load() }}>\n {t('staff.portal.support.widget.retry', 'Try again')}\n </Button>\n )}\n />\n </div>\n )\n }\n\n return (\n <div className=\"space-y-3\" data-testid=\"portal-support-widget\">\n <p className=\"text-sm text-muted-foreground\">\n {t('staff.portal.support.widget.openCount', 'Open tickets: {count}', { count: String(openCount) })}\n </p>\n {items.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">{t('staff.portal.support.widget.empty', 'No open tickets.')}</p>\n ) : (\n <ul className=\"space-y-2\">\n {items.map((item) => (\n <li key={item.id} className=\"flex items-center justify-between gap-2\">\n <Link href={`/${orgSlug}/portal/support/${item.id}`} className=\"min-w-0 truncate text-sm text-foreground hover:underline\">\n {item.supportReference} \u00B7 {item.subject}\n </Link>\n <StatusBadge variant={PORTAL_SUPPORT_STATUS_VARIANTS[item.portalStatus] ?? 'neutral'}>\n {portalSupportStatusLabel(t, item.portalStatus)}\n </StatusBadge>\n </li>\n ))}\n </ul>\n )}\n <div className=\"flex flex-wrap gap-2\">\n {canCreate ? (\n <Button size=\"sm\" asChild>\n <Link href={`/${orgSlug}/portal/support/new`}>{t('staff.portal.support.newTicket', 'New ticket')}</Link>\n </Button>\n ) : null}\n <Button size=\"sm\" variant=\"outline\" asChild>\n <Link href={`/${orgSlug}/portal/support`}>{t('staff.portal.support.widget.viewAll', 'View all')}</Link>\n </Button>\n </div>\n </div>\n )\n}\n"],
|
|
5
|
+
"mappings": ";AA2FW,cAqCG,YArCH;AAzFX,YAAY,WAAW;AACvB,OAAO,UAAU;AACjB,SAAS,YAAY;AAErB,SAAS,cAAc;AACvB,SAAS,mBAAmB;AAC5B,SAAS,eAAe;AACxB,SAAS,cAAc,sBAAsB;AAC7C,SAAS,yBAAyB;AAClC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AACP,SAAS,8BAA8B;AAEvC,SAAS,YAAY,SAA0B;AAC7C,MAAI,CAAC,WAAW,OAAO,YAAY,SAAU,QAAO;AACpD,QAAM,QAAS,QAAoC;AACnD,SAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,MAAM,YAAY;AAElB,SAAS,aAAa,MAA2C;AAC/D,QAAM,QAAQ,KAAK,kBAAkB,KAAK,aAAa,KAAK;AAC5D,SAAO,QAAQ,IAAI,KAAK,KAAK,EAAE,QAAQ,KAAK,IAAI;AAClD;AAEe,SAAR,2BAA4C,EAAE,QAAQ,GAAkC;AAC7F,QAAM,IAAI,KAAK;AACf,QAAM,UAAU,YAAY,OAAO;AACnC,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,SAAwC,CAAC,CAAC;AAC1E,QAAM,CAAC,WAAW,YAAY,IAAI,MAAM,SAAS,CAAC;AAClD,QAAM,CAAC,WAAW,YAAY,IAAI,MAAM,SAAS,KAAK;AACtD,QAAM,CAAC,SAAS,UAAU,IAAI,MAAM,SAAS,IAAI;AACjD,QAAM,CAAC,YAAY,aAAa,IAAI,MAAM,SAAS,KAAK;AACxD,QAAM,CAAC,WAAW,YAAY,IAAI,MAAM,SAAS,KAAK;AAEtD,QAAM,aAAa,MAAM,OAAO,CAAC;AAEjC,QAAM,OAAO,MAAM,YAAY,YAAY;AACzC,UAAM,aAAa,WAAW,UAAU;AACxC,eAAW,UAAU;AACrB,UAAM,UAAU,MAAM,eAAe,WAAW;AAChD,QAAI;AACF,YAAM,CAAC,UAAU,YAAY,OAAO,IAAI,MAAM,QAAQ,IAAI;AAAA,QACxD,QAAiC,8DAA8D,SAAS,IAAI,EAAE,aAAa,UAAU,CAAC;AAAA,QACtI,QAAiC,iEAAiE,SAAS,IAAI,EAAE,aAAa,UAAU,CAAC;AAAA,QACzI,QAA8B,6CAA6C,EAAE,aAAa,UAAU,CAAC;AAAA,MACvG,CAAC;AACD,UAAI,QAAQ,EAAG;AACf,YAAM,mBAAmB,gCAAgC,QAAQ;AACjE,mBAAa,gBAAgB;AAC7B,UAAI,kBAAkB;AACpB,sBAAc,KAAK;AACnB;AAAA,MACF;AACA,UAAI,CAAC,SAAS,MAAM,CAAC,WAAW,IAAI;AAClC,sBAAc,IAAI;AAClB;AAAA,MACF;AACA,oBAAc,KAAK;AACnB,YAAM,SAAS,CAAC,GAAI,SAAS,QAAQ,SAAS,CAAC,GAAI,GAAI,WAAW,QAAQ,SAAS,CAAC,CAAE,EACnF,KAAK,CAAC,MAAM,UAAU,aAAa,KAAK,IAAI,aAAa,IAAI,CAAC,EAC9D,MAAM,GAAG,SAAS;AACrB,eAAS,MAAM;AACf,oBAAc,SAAS,QAAQ,SAAS,MAAM,WAAW,QAAQ,SAAS,EAAE;AAC5E,mBAAa,QAAQ,MAAM,QAAQ,QAAQ,cAAc,IAAI;AAAA,IAC/D,QAAQ;AACN,UAAI,CAAC,QAAQ,EAAG,eAAc,IAAI;AAAA,IACpC,UAAE;AACA,UAAI,CAAC,QAAQ,EAAG,YAAW,KAAK;AAAA,IAClC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,UAAU,MAAM;AACpB,SAAK,KAAK;AAAA,EACZ,GAAG,CAAC,IAAI,CAAC;AAET,oBAAkB,8BAA8B,MAAM;AACpD,SAAK,KAAK;AAAA,EACZ,GAAG,CAAC,IAAI,CAAC;AAET,MAAI,SAAS;AACX,WAAO,oBAAC,kBAAe,OAAO,EAAE,uCAAuC,4BAAuB,GAAG;AAAA,EACnG;AAEA,MAAI,WAAW;AACb,WACE,oBAAC,SAAI,eAAY,yBACf,8BAAC,0BAAuB,MAAK,MAAK,GACpC;AAAA,EAEJ;AAEA,MAAI,YAAY;AACd,WACE,oBAAC,SAAI,eAAY,yBACf;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,EAAE,mCAAmC,sCAAsC;AAAA,QAClF,QACE,oBAAC,UAAO,MAAK,MAAK,SAAQ,WAAU,SAAS,MAAM;AAAE,eAAK,KAAK;AAAA,QAAE,GAC9D,YAAE,qCAAqC,WAAW,GACrD;AAAA;AAAA,IAEJ,GACF;AAAA,EAEJ;AAEA,SACE,qBAAC,SAAI,WAAU,aAAY,eAAY,yBACrC;AAAA,wBAAC,OAAE,WAAU,iCACV,YAAE,yCAAyC,yBAAyB,EAAE,OAAO,OAAO,SAAS,EAAE,CAAC,GACnG;AAAA,IACC,MAAM,WAAW,IAChB,oBAAC,OAAE,WAAU,iCAAiC,YAAE,qCAAqC,kBAAkB,GAAE,IAEzG,oBAAC,QAAG,WAAU,aACX,gBAAM,IAAI,CAAC,SACV,qBAAC,QAAiB,WAAU,2CAC1B;AAAA,2BAAC,QAAK,MAAM,IAAI,OAAO,mBAAmB,KAAK,EAAE,IAAI,WAAU,4DAC5D;AAAA,aAAK;AAAA,QAAiB;AAAA,QAAI,KAAK;AAAA,SAClC;AAAA,MACA,oBAAC,eAAY,SAAS,+BAA+B,KAAK,YAAY,KAAK,WACxE,mCAAyB,GAAG,KAAK,YAAY,GAChD;AAAA,SANO,KAAK,EAOd,CACD,GACH;AAAA,IAEF,qBAAC,SAAI,WAAU,wBACZ;AAAA,kBACC,oBAAC,UAAO,MAAK,MAAK,SAAO,MACvB,8BAAC,QAAK,MAAM,IAAI,OAAO,uBAAwB,YAAE,kCAAkC,YAAY,GAAE,GACnG,IACE;AAAA,MACJ,oBAAC,UAAO,MAAK,MAAK,SAAQ,WAAU,SAAO,MACzC,8BAAC,QAAK,MAAM,IAAI,OAAO,mBAAoB,YAAE,uCAAuC,UAAU,GAAE,GAClG;AAAA,OACF;AAAA,KACF;AAEJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import PortalSupportTicketsWidget from "./widget.client.js";
|
|
2
|
+
const widget = {
|
|
3
|
+
metadata: {
|
|
4
|
+
id: "staff.injection.portal-support-tickets",
|
|
5
|
+
title: "staff.portal.support.widget.title",
|
|
6
|
+
description: "Your open support tickets at a glance.",
|
|
7
|
+
features: ["portal.support_tickets.view"],
|
|
8
|
+
priority: 20,
|
|
9
|
+
enabled: true
|
|
10
|
+
},
|
|
11
|
+
Widget: PortalSupportTicketsWidget
|
|
12
|
+
};
|
|
13
|
+
var widget_default = widget;
|
|
14
|
+
export {
|
|
15
|
+
widget_default as default
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=widget.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/modules/staff/widgets/injection/portal-support-tickets/widget.ts"],
|
|
4
|
+
"sourcesContent": ["import type { InjectionWidgetModule } from '@open-mercato/shared/modules/widgets/injection'\nimport PortalSupportTicketsWidget from './widget.client'\n\nconst widget: InjectionWidgetModule = {\n metadata: {\n id: 'staff.injection.portal-support-tickets',\n title: 'staff.portal.support.widget.title',\n description: 'Your open support tickets at a glance.',\n features: ['portal.support_tickets.view'],\n priority: 20,\n enabled: true,\n },\n Widget: PortalSupportTicketsWidget,\n}\n\nexport default widget\n"],
|
|
5
|
+
"mappings": "AACA,OAAO,gCAAgC;AAEvC,MAAM,SAAgC;AAAA,EACpC,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,6BAA6B;AAAA,IACxC,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA,QAAQ;AACV;AAEA,IAAO,iBAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|