@open-mercato/core 0.4.5-develop-754ef4d2f0 → 0.4.5-develop-9f9549ebc8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/generated/entities/message/index.js +65 -0
- package/dist/generated/entities/message/index.js.map +7 -0
- package/dist/generated/entities/message_access_token/index.js +19 -0
- package/dist/generated/entities/message_access_token/index.js.map +7 -0
- package/dist/generated/entities/message_confirmation/index.js +21 -0
- package/dist/generated/entities/message_confirmation/index.js.map +7 -0
- package/dist/generated/entities/message_object/index.js +23 -0
- package/dist/generated/entities/message_object/index.js.map +7 -0
- package/dist/generated/entities/message_recipient/index.js +31 -0
- package/dist/generated/entities/message_recipient/index.js.map +7 -0
- package/dist/generated/entities.ids.generated.js +8 -0
- package/dist/generated/entities.ids.generated.js.map +2 -2
- package/dist/generated/entity-fields-registry.js +10 -0
- package/dist/generated/entity-fields-registry.js.map +2 -2
- package/dist/modules/auth/components/AclEditor.js +4 -2
- package/dist/modules/auth/components/AclEditor.js.map +2 -2
- package/dist/modules/auth/frontend/reset.js +3 -3
- package/dist/modules/auth/frontend/reset.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/[id]/page.js +27 -8
- package/dist/modules/customers/backend/customers/deals/[id]/page.js.map +2 -2
- package/dist/modules/customers/lib/messageObjectPreviews.js +131 -0
- package/dist/modules/customers/lib/messageObjectPreviews.js.map +7 -0
- package/dist/modules/customers/message-objects.js +71 -0
- package/dist/modules/customers/message-objects.js.map +7 -0
- package/dist/modules/customers/widgets/messages/CustomerMessageObjectDetail.js +51 -0
- package/dist/modules/customers/widgets/messages/CustomerMessageObjectDetail.js.map +7 -0
- package/dist/modules/customers/widgets/messages/CustomerMessageObjectPreview.js +35 -0
- package/dist/modules/customers/widgets/messages/CustomerMessageObjectPreview.js.map +7 -0
- package/dist/modules/customers/widgets/messages/index.js +7 -0
- package/dist/modules/customers/widgets/messages/index.js.map +7 -0
- package/dist/modules/dashboards/components/WidgetVisibilityEditor.js +35 -6
- package/dist/modules/dashboards/components/WidgetVisibilityEditor.js.map +2 -2
- package/dist/modules/messages/acl.js +15 -0
- package/dist/modules/messages/acl.js.map +7 -0
- package/dist/modules/messages/api/[id]/actions/[actionId]/route.js +92 -0
- package/dist/modules/messages/api/[id]/actions/[actionId]/route.js.map +7 -0
- package/dist/modules/messages/api/[id]/archive/route.js +120 -0
- package/dist/modules/messages/api/[id]/archive/route.js.map +7 -0
- package/dist/modules/messages/api/[id]/attachments/route.js +195 -0
- package/dist/modules/messages/api/[id]/attachments/route.js.map +7 -0
- package/dist/modules/messages/api/[id]/confirmation/route.js +67 -0
- package/dist/modules/messages/api/[id]/confirmation/route.js.map +7 -0
- package/dist/modules/messages/api/[id]/conversation/archive/route.js +68 -0
- package/dist/modules/messages/api/[id]/conversation/archive/route.js.map +7 -0
- package/dist/modules/messages/api/[id]/conversation/read/route.js +68 -0
- package/dist/modules/messages/api/[id]/conversation/read/route.js.map +7 -0
- package/dist/modules/messages/api/[id]/conversation/route.js +68 -0
- package/dist/modules/messages/api/[id]/conversation/route.js.map +7 -0
- package/dist/modules/messages/api/[id]/forward/route.js +85 -0
- package/dist/modules/messages/api/[id]/forward/route.js.map +7 -0
- package/dist/modules/messages/api/[id]/forward-preview/route.js +70 -0
- package/dist/modules/messages/api/[id]/forward-preview/route.js.map +7 -0
- package/dist/modules/messages/api/[id]/read/route.js +120 -0
- package/dist/modules/messages/api/[id]/read/route.js.map +7 -0
- package/dist/modules/messages/api/[id]/reply/route.js +87 -0
- package/dist/modules/messages/api/[id]/reply/route.js.map +7 -0
- package/dist/modules/messages/api/[id]/route.js +350 -0
- package/dist/modules/messages/api/[id]/route.js.map +7 -0
- package/dist/modules/messages/api/object-types/route.js +54 -0
- package/dist/modules/messages/api/object-types/route.js.map +7 -0
- package/dist/modules/messages/api/openapi.js +261 -0
- package/dist/modules/messages/api/openapi.js.map +7 -0
- package/dist/modules/messages/api/route.js +262 -0
- package/dist/modules/messages/api/route.js.map +7 -0
- package/dist/modules/messages/api/token/[token]/route.js +99 -0
- package/dist/modules/messages/api/token/[token]/route.js.map +7 -0
- package/dist/modules/messages/api/types/route.js +40 -0
- package/dist/modules/messages/api/types/route.js.map +7 -0
- package/dist/modules/messages/api/unread-count/route.js +43 -0
- package/dist/modules/messages/api/unread-count/route.js.map +7 -0
- package/dist/modules/messages/backend/messages/[id]/page.js +10 -0
- package/dist/modules/messages/backend/messages/[id]/page.js.map +7 -0
- package/dist/modules/messages/backend/messages/[id]/page.meta.js +16 -0
- package/dist/modules/messages/backend/messages/[id]/page.meta.js.map +7 -0
- package/dist/modules/messages/backend/messages/compose/page.js +10 -0
- package/dist/modules/messages/backend/messages/compose/page.js.map +7 -0
- package/dist/modules/messages/backend/messages/compose/page.meta.js +17 -0
- package/dist/modules/messages/backend/messages/compose/page.meta.js.map +7 -0
- package/dist/modules/messages/backend/page.js +10 -0
- package/dist/modules/messages/backend/page.js.map +7 -0
- package/dist/modules/messages/backend/page.meta.js +33 -0
- package/dist/modules/messages/backend/page.meta.js.map +7 -0
- package/dist/modules/messages/commands/actions.js +265 -0
- package/dist/modules/messages/commands/actions.js.map +7 -0
- package/dist/modules/messages/commands/attachments.js +217 -0
- package/dist/modules/messages/commands/attachments.js.map +7 -0
- package/dist/modules/messages/commands/confirmations.js +151 -0
- package/dist/modules/messages/commands/confirmations.js.map +7 -0
- package/dist/modules/messages/commands/conversation.js +240 -0
- package/dist/modules/messages/commands/conversation.js.map +7 -0
- package/dist/modules/messages/commands/messages.js +748 -0
- package/dist/modules/messages/commands/messages.js.map +7 -0
- package/dist/modules/messages/commands/recipients.js +259 -0
- package/dist/modules/messages/commands/recipients.js.map +7 -0
- package/dist/modules/messages/commands/shared.js +258 -0
- package/dist/modules/messages/commands/shared.js.map +7 -0
- package/dist/modules/messages/commands/tokens.js +69 -0
- package/dist/modules/messages/commands/tokens.js.map +7 -0
- package/dist/modules/messages/components/ComposeMessagePageClient.js +24 -0
- package/dist/modules/messages/components/ComposeMessagePageClient.js.map +7 -0
- package/dist/modules/messages/components/MessageDetailPageClient.js +261 -0
- package/dist/modules/messages/components/MessageDetailPageClient.js.map +7 -0
- package/dist/modules/messages/components/MessagesInboxPageClient.js +390 -0
- package/dist/modules/messages/components/MessagesInboxPageClient.js.map +7 -0
- package/dist/modules/messages/components/confirmation/MessageConfirmationActions.js +31 -0
- package/dist/modules/messages/components/confirmation/MessageConfirmationActions.js.map +7 -0
- package/dist/modules/messages/components/confirmation/MessageConfirmationContent.js +69 -0
- package/dist/modules/messages/components/confirmation/MessageConfirmationContent.js.map +7 -0
- package/dist/modules/messages/components/defaults/DefaultMessageActions.js +31 -0
- package/dist/modules/messages/components/defaults/DefaultMessageActions.js.map +7 -0
- package/dist/modules/messages/components/defaults/DefaultMessageContent.js +19 -0
- package/dist/modules/messages/components/defaults/DefaultMessageContent.js.map +7 -0
- package/dist/modules/messages/components/defaults/DefaultMessageListItem.js +90 -0
- package/dist/modules/messages/components/defaults/DefaultMessageListItem.js.map +7 -0
- package/dist/modules/messages/components/defaults/MessageRecordObjectDetail.js +86 -0
- package/dist/modules/messages/components/defaults/MessageRecordObjectDetail.js.map +7 -0
- package/dist/modules/messages/components/defaults/MessageRecordObjectPreview.js +61 -0
- package/dist/modules/messages/components/defaults/MessageRecordObjectPreview.js.map +7 -0
- package/dist/modules/messages/components/message-detail/detail-panels.js +27 -0
- package/dist/modules/messages/components/message-detail/detail-panels.js.map +7 -0
- package/dist/modules/messages/components/message-detail/hooks/useMessageDetails.js +52 -0
- package/dist/modules/messages/components/message-detail/hooks/useMessageDetails.js.map +7 -0
- package/dist/modules/messages/components/message-detail/hooks/useMessageDetailsActions.js +289 -0
- package/dist/modules/messages/components/message-detail/hooks/useMessageDetailsActions.js.map +7 -0
- package/dist/modules/messages/components/message-detail/hooks/useMessageDetailsConversation.js +103 -0
- package/dist/modules/messages/components/message-detail/hooks/useMessageDetailsConversation.js.map +7 -0
- package/dist/modules/messages/components/message-detail/hooks/useMessageDetailsQueries.js +78 -0
- package/dist/modules/messages/components/message-detail/hooks/useMessageDetailsQueries.js.map +7 -0
- package/dist/modules/messages/components/message-detail/panels/MainMessageHeader.js +94 -0
- package/dist/modules/messages/components/message-detail/panels/MainMessageHeader.js.map +7 -0
- package/dist/modules/messages/components/message-detail/panels/MessageHeader.js +110 -0
- package/dist/modules/messages/components/message-detail/panels/MessageHeader.js.map +7 -0
- package/dist/modules/messages/components/message-detail/panels/MessageListComponent.js +58 -0
- package/dist/modules/messages/components/message-detail/panels/MessageListComponent.js.map +7 -0
- package/dist/modules/messages/components/message-detail/panels/actions-panel.js +51 -0
- package/dist/modules/messages/components/message-detail/panels/actions-panel.js.map +7 -0
- package/dist/modules/messages/components/message-detail/panels/attachments-panel.js +66 -0
- package/dist/modules/messages/components/message-detail/panels/attachments-panel.js.map +7 -0
- package/dist/modules/messages/components/message-detail/panels/body-panel.js +20 -0
- package/dist/modules/messages/components/message-detail/panels/body-panel.js.map +7 -0
- package/dist/modules/messages/components/message-detail/panels/composer-dialogs.js +36 -0
- package/dist/modules/messages/components/message-detail/panels/composer-dialogs.js.map +7 -0
- package/dist/modules/messages/components/message-detail/panels/dialogs.js +96 -0
- package/dist/modules/messages/components/message-detail/panels/dialogs.js.map +7 -0
- package/dist/modules/messages/components/message-detail/panels/index.js +25 -0
- package/dist/modules/messages/components/message-detail/panels/index.js.map +7 -0
- package/dist/modules/messages/components/message-detail/panels/meta-panel.js +14 -0
- package/dist/modules/messages/components/message-detail/panels/meta-panel.js.map +7 -0
- package/dist/modules/messages/components/message-detail/panels/objects-panel.js +51 -0
- package/dist/modules/messages/components/message-detail/panels/objects-panel.js.map +7 -0
- package/dist/modules/messages/components/message-detail/panels/thread-panel.js +54 -0
- package/dist/modules/messages/components/message-detail/panels/thread-panel.js.map +7 -0
- package/dist/modules/messages/components/message-detail/types.js +1 -0
- package/dist/modules/messages/components/message-detail/types.js.map +7 -0
- package/dist/modules/messages/components/message-detail/utils.js +54 -0
- package/dist/modules/messages/components/message-detail/utils.js.map +7 -0
- package/dist/modules/messages/components/utils/PriorityBadge.js +52 -0
- package/dist/modules/messages/components/utils/PriorityBadge.js.map +7 -0
- package/dist/modules/messages/components/utils/typeUiRegistry.js +77 -0
- package/dist/modules/messages/components/utils/typeUiRegistry.js.map +7 -0
- package/dist/modules/messages/data/entities.js +309 -0
- package/dist/modules/messages/data/entities.js.map +7 -0
- package/dist/modules/messages/data/validators.js +272 -0
- package/dist/modules/messages/data/validators.js.map +7 -0
- package/dist/modules/messages/emails/MessageEmail.js +108 -0
- package/dist/modules/messages/emails/MessageEmail.js.map +7 -0
- package/dist/modules/messages/events.js +24 -0
- package/dist/modules/messages/events.js.map +7 -0
- package/dist/modules/messages/frontend/messages/view/[token]/page.js +247 -0
- package/dist/modules/messages/frontend/messages/view/[token]/page.js.map +7 -0
- package/dist/modules/messages/frontend/messages/view/[token]/page.meta.js +9 -0
- package/dist/modules/messages/frontend/messages/view/[token]/page.meta.js.map +7 -0
- package/dist/modules/messages/index.js +21 -0
- package/dist/modules/messages/index.js.map +7 -0
- package/dist/modules/messages/lib/actions.js +141 -0
- package/dist/modules/messages/lib/actions.js.map +7 -0
- package/dist/modules/messages/lib/attachments.js +131 -0
- package/dist/modules/messages/lib/attachments.js.map +7 -0
- package/dist/modules/messages/lib/constants.js +7 -0
- package/dist/modules/messages/lib/constants.js.map +7 -0
- package/dist/modules/messages/lib/email-sender.js +201 -0
- package/dist/modules/messages/lib/email-sender.js.map +7 -0
- package/dist/modules/messages/lib/forwarding.js +179 -0
- package/dist/modules/messages/lib/forwarding.js.map +7 -0
- package/dist/modules/messages/lib/message-objects-registry.js +49 -0
- package/dist/modules/messages/lib/message-objects-registry.js.map +7 -0
- package/dist/modules/messages/lib/message-types-registry.js +41 -0
- package/dist/modules/messages/lib/message-types-registry.js.map +7 -0
- package/dist/modules/messages/lib/object-validation.js +20 -0
- package/dist/modules/messages/lib/object-validation.js.map +7 -0
- package/dist/modules/messages/lib/operationMetadata.js +21 -0
- package/dist/modules/messages/lib/operationMetadata.js.map +7 -0
- package/dist/modules/messages/lib/priorityUtils.js +61 -0
- package/dist/modules/messages/lib/priorityUtils.js.map +7 -0
- package/dist/modules/messages/lib/routeHelpers.js +44 -0
- package/dist/modules/messages/lib/routeHelpers.js.map +7 -0
- package/dist/modules/messages/message-objects.js +7 -0
- package/dist/modules/messages/message-objects.js.map +7 -0
- package/dist/modules/messages/message-types.js +67 -0
- package/dist/modules/messages/message-types.js.map +7 -0
- package/dist/modules/messages/migrations/Migration20260213181243.js +31 -0
- package/dist/modules/messages/migrations/Migration20260213181243.js.map +7 -0
- package/dist/modules/messages/migrations/Migration20260215165126.js +16 -0
- package/dist/modules/messages/migrations/Migration20260215165126.js.map +7 -0
- package/dist/modules/messages/notifications.js +27 -0
- package/dist/modules/messages/notifications.js.map +7 -0
- package/dist/modules/messages/setup.js +21 -0
- package/dist/modules/messages/setup.js.map +7 -0
- package/dist/modules/messages/subscribers/message-notification.js +108 -0
- package/dist/modules/messages/subscribers/message-notification.js.map +7 -0
- package/dist/modules/messages/workers/send-email.worker.js +253 -0
- package/dist/modules/messages/workers/send-email.worker.js.map +7 -0
- package/dist/modules/sales/backend/sales/documents/[id]/page.js +30 -11
- package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
- package/dist/modules/sales/commands/payments.js +12 -6
- package/dist/modules/sales/commands/payments.js.map +2 -2
- package/dist/modules/sales/lib/messageObjectPreviews.js +114 -0
- package/dist/modules/sales/lib/messageObjectPreviews.js.map +7 -0
- package/dist/modules/sales/message-objects.js +57 -0
- package/dist/modules/sales/message-objects.js.map +7 -0
- package/dist/modules/sales/widgets/messages/SalesDocumentMessageDetail.js +51 -0
- package/dist/modules/sales/widgets/messages/SalesDocumentMessageDetail.js.map +7 -0
- package/dist/modules/sales/widgets/messages/SalesDocumentMessagePreview.js +36 -0
- package/dist/modules/sales/widgets/messages/SalesDocumentMessagePreview.js.map +7 -0
- package/dist/modules/sales/widgets/messages/index.js +7 -0
- package/dist/modules/sales/widgets/messages/index.js.map +7 -0
- package/dist/modules/staff/backend/staff/leave-requests/[id]/page.js +55 -1
- package/dist/modules/staff/backend/staff/leave-requests/[id]/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/my-leave-requests/[id]/page.js +60 -1
- package/dist/modules/staff/backend/staff/my-leave-requests/[id]/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/team-members/[id]/page.js +2 -19
- package/dist/modules/staff/backend/staff/team-members/[id]/page.js.map +2 -2
- package/dist/modules/staff/components/LeaveRequestDetail.js +112 -0
- package/dist/modules/staff/components/LeaveRequestDetail.js.map +7 -0
- package/dist/modules/staff/components/LeaveRequestForm.js +3 -1
- package/dist/modules/staff/components/LeaveRequestForm.js.map +2 -2
- package/dist/modules/staff/components/LeaveRequestPreview.js +43 -0
- package/dist/modules/staff/components/LeaveRequestPreview.js.map +7 -0
- package/dist/modules/staff/lib/messageObjectPreviews.js +148 -0
- package/dist/modules/staff/lib/messageObjectPreviews.js.map +7 -0
- package/dist/modules/staff/message-objects.js +104 -0
- package/dist/modules/staff/message-objects.js.map +7 -0
- package/dist/modules/staff/message-types.js +23 -0
- package/dist/modules/staff/message-types.js.map +7 -0
- package/dist/modules/staff/widgets/messages/StaffMessageObjectDetail.js +51 -0
- package/dist/modules/staff/widgets/messages/StaffMessageObjectDetail.js.map +7 -0
- package/dist/modules/staff/widgets/messages/StaffMessageObjectPreview.js +34 -0
- package/dist/modules/staff/widgets/messages/StaffMessageObjectPreview.js.map +7 -0
- package/dist/modules/staff/widgets/messages/index.js +7 -0
- package/dist/modules/staff/widgets/messages/index.js.map +7 -0
- package/dist/modules/workflows/backend/definitions/visual-editor/page.js +6 -6
- package/dist/modules/workflows/backend/definitions/visual-editor/page.js.map +2 -2
- package/generated/entities/message/index.ts +31 -0
- package/generated/entities/message_access_token/index.ts +8 -0
- package/generated/entities/message_confirmation/index.ts +9 -0
- package/generated/entities/message_object/index.ts +10 -0
- package/generated/entities/message_recipient/index.ts +14 -0
- package/generated/entities.ids.generated.ts +8 -0
- package/generated/entity-fields-registry.ts +10 -0
- package/jest.setup.ts +5 -0
- package/package.json +2 -2
- package/src/modules/attachments/i18n/de.json +4 -0
- package/src/modules/attachments/i18n/en.json +4 -0
- package/src/modules/attachments/i18n/es.json +4 -0
- package/src/modules/attachments/i18n/pl.json +4 -0
- package/src/modules/auth/components/AclEditor.tsx +4 -2
- package/src/modules/auth/frontend/reset.tsx +3 -3
- package/src/modules/auth/i18n/de.json +5 -0
- package/src/modules/auth/i18n/en.json +5 -0
- package/src/modules/auth/i18n/es.json +5 -0
- package/src/modules/auth/i18n/pl.json +5 -0
- package/src/modules/catalog/i18n/de.json +21 -0
- package/src/modules/catalog/i18n/en.json +21 -0
- package/src/modules/catalog/i18n/es.json +21 -0
- package/src/modules/catalog/i18n/pl.json +21 -0
- package/src/modules/currencies/i18n/de.json +6 -0
- package/src/modules/currencies/i18n/en.json +6 -0
- package/src/modules/currencies/i18n/es.json +6 -0
- package/src/modules/currencies/i18n/pl.json +6 -0
- package/src/modules/customers/backend/customers/deals/[id]/page.tsx +20 -4
- package/src/modules/customers/i18n/de.json +26 -1
- package/src/modules/customers/i18n/en.json +25 -0
- package/src/modules/customers/i18n/es.json +25 -0
- package/src/modules/customers/i18n/pl.json +25 -0
- package/src/modules/customers/lib/messageObjectPreviews.ts +154 -0
- package/src/modules/customers/message-objects.ts +70 -0
- package/src/modules/customers/widgets/messages/CustomerMessageObjectDetail.tsx +57 -0
- package/src/modules/customers/widgets/messages/CustomerMessageObjectPreview.tsx +49 -0
- package/src/modules/customers/widgets/messages/index.ts +2 -0
- package/src/modules/dashboards/components/WidgetVisibilityEditor.tsx +41 -5
- package/src/modules/dashboards/i18n/de.json +5 -1
- package/src/modules/dashboards/i18n/en.json +5 -1
- package/src/modules/dashboards/i18n/es.json +5 -1
- package/src/modules/dashboards/i18n/pl.json +5 -1
- package/src/modules/dictionaries/i18n/de.json +14 -1
- package/src/modules/dictionaries/i18n/en.json +14 -1
- package/src/modules/dictionaries/i18n/es.json +14 -1
- package/src/modules/dictionaries/i18n/pl.json +14 -1
- package/src/modules/feature_toggles/i18n/de.json +3 -0
- package/src/modules/feature_toggles/i18n/en.json +3 -0
- package/src/modules/feature_toggles/i18n/es.json +3 -0
- package/src/modules/feature_toggles/i18n/pl.json +3 -0
- package/src/modules/messages/acl.ts +11 -0
- package/src/modules/messages/api/[id]/actions/[actionId]/route.ts +103 -0
- package/src/modules/messages/api/[id]/archive/route.ts +138 -0
- package/src/modules/messages/api/[id]/attachments/route.ts +217 -0
- package/src/modules/messages/api/[id]/confirmation/route.ts +73 -0
- package/src/modules/messages/api/[id]/conversation/archive/route.ts +69 -0
- package/src/modules/messages/api/[id]/conversation/read/route.ts +69 -0
- package/src/modules/messages/api/[id]/conversation/route.ts +69 -0
- package/src/modules/messages/api/[id]/forward/route.ts +87 -0
- package/src/modules/messages/api/[id]/forward-preview/route.ts +75 -0
- package/src/modules/messages/api/[id]/read/route.ts +138 -0
- package/src/modules/messages/api/[id]/reply/route.ts +89 -0
- package/src/modules/messages/api/[id]/route.ts +401 -0
- package/src/modules/messages/api/object-types/route.ts +54 -0
- package/src/modules/messages/api/openapi.ts +261 -0
- package/src/modules/messages/api/route.ts +374 -0
- package/src/modules/messages/api/token/[token]/route.ts +103 -0
- package/src/modules/messages/api/types/route.ts +39 -0
- package/src/modules/messages/api/unread-count/route.ts +55 -0
- package/src/modules/messages/backend/messages/[id]/page.meta.ts +12 -0
- package/src/modules/messages/backend/messages/[id]/page.tsx +12 -0
- package/src/modules/messages/backend/messages/compose/page.meta.ts +13 -0
- package/src/modules/messages/backend/messages/compose/page.tsx +12 -0
- package/src/modules/messages/backend/page.meta.ts +31 -0
- package/src/modules/messages/backend/page.tsx +12 -0
- package/src/modules/messages/commands/actions.ts +307 -0
- package/src/modules/messages/commands/attachments.ts +227 -0
- package/src/modules/messages/commands/confirmations.ts +183 -0
- package/src/modules/messages/commands/conversation.ts +292 -0
- package/src/modules/messages/commands/messages.ts +845 -0
- package/src/modules/messages/commands/recipients.ts +281 -0
- package/src/modules/messages/commands/shared.ts +350 -0
- package/src/modules/messages/commands/tokens.ts +80 -0
- package/src/modules/messages/components/ComposeMessagePageClient.tsx +23 -0
- package/src/modules/messages/components/MessageDetailPageClient.tsx +287 -0
- package/src/modules/messages/components/MessagesInboxPageClient.tsx +469 -0
- package/src/modules/messages/components/confirmation/MessageConfirmationActions.tsx +35 -0
- package/src/modules/messages/components/confirmation/MessageConfirmationContent.tsx +88 -0
- package/src/modules/messages/components/defaults/DefaultMessageActions.tsx +37 -0
- package/src/modules/messages/components/defaults/DefaultMessageContent.tsx +21 -0
- package/src/modules/messages/components/defaults/DefaultMessageListItem.tsx +102 -0
- package/src/modules/messages/components/defaults/MessageRecordObjectDetail.tsx +114 -0
- package/src/modules/messages/components/defaults/MessageRecordObjectPreview.tsx +74 -0
- package/src/modules/messages/components/message-detail/detail-panels.ts +13 -0
- package/src/modules/messages/components/message-detail/hooks/useMessageDetails.ts +56 -0
- package/src/modules/messages/components/message-detail/hooks/useMessageDetailsActions.ts +367 -0
- package/src/modules/messages/components/message-detail/hooks/useMessageDetailsConversation.ts +134 -0
- package/src/modules/messages/components/message-detail/hooks/useMessageDetailsQueries.ts +102 -0
- package/src/modules/messages/components/message-detail/panels/MainMessageHeader.tsx +108 -0
- package/src/modules/messages/components/message-detail/panels/MessageHeader.tsx +144 -0
- package/src/modules/messages/components/message-detail/panels/MessageListComponent.tsx +63 -0
- package/src/modules/messages/components/message-detail/panels/actions-panel.tsx +66 -0
- package/src/modules/messages/components/message-detail/panels/attachments-panel.tsx +86 -0
- package/src/modules/messages/components/message-detail/panels/body-panel.tsx +32 -0
- package/src/modules/messages/components/message-detail/panels/composer-dialogs.tsx +42 -0
- package/src/modules/messages/components/message-detail/panels/dialogs.tsx +107 -0
- package/src/modules/messages/components/message-detail/panels/index.ts +11 -0
- package/src/modules/messages/components/message-detail/panels/meta-panel.tsx +19 -0
- package/src/modules/messages/components/message-detail/panels/objects-panel.tsx +65 -0
- package/src/modules/messages/components/message-detail/panels/thread-panel.tsx +65 -0
- package/src/modules/messages/components/message-detail/types.ts +114 -0
- package/src/modules/messages/components/message-detail/utils.ts +62 -0
- package/src/modules/messages/components/utils/PriorityBadge.tsx +63 -0
- package/src/modules/messages/components/utils/typeUiRegistry.ts +106 -0
- package/src/modules/messages/data/entities.ts +284 -0
- package/src/modules/messages/data/validators.ts +297 -0
- package/src/modules/messages/emails/MessageEmail.tsx +143 -0
- package/src/modules/messages/events.ts +24 -0
- package/src/modules/messages/frontend/messages/view/[token]/page.meta.ts +5 -0
- package/src/modules/messages/frontend/messages/view/[token]/page.tsx +389 -0
- package/src/modules/messages/i18n/de.json +240 -0
- package/src/modules/messages/i18n/en.json +240 -0
- package/src/modules/messages/i18n/es.json +240 -0
- package/src/modules/messages/i18n/pl.json +240 -0
- package/src/modules/messages/index.ts +19 -0
- package/src/modules/messages/lib/actions.ts +204 -0
- package/src/modules/messages/lib/attachments.ts +197 -0
- package/src/modules/messages/lib/constants.ts +2 -0
- package/src/modules/messages/lib/email-sender.ts +255 -0
- package/src/modules/messages/lib/forwarding.ts +240 -0
- package/src/modules/messages/lib/message-objects-registry.ts +60 -0
- package/src/modules/messages/lib/message-types-registry.ts +48 -0
- package/src/modules/messages/lib/object-validation.ts +26 -0
- package/src/modules/messages/lib/operationMetadata.ts +43 -0
- package/src/modules/messages/lib/priorityUtils.ts +76 -0
- package/src/modules/messages/lib/routeHelpers.ts +65 -0
- package/src/modules/messages/message-objects.ts +5 -0
- package/src/modules/messages/message-types.ts +65 -0
- package/src/modules/messages/migrations/.snapshot-open-mercato.json +957 -0
- package/src/modules/messages/migrations/Migration20260213181243.ts +34 -0
- package/src/modules/messages/migrations/Migration20260215165126.ts +16 -0
- package/src/modules/messages/notifications.ts +25 -0
- package/src/modules/messages/setup.ts +19 -0
- package/src/modules/messages/subscribers/message-notification.ts +138 -0
- package/src/modules/messages/workers/send-email.worker.ts +321 -0
- package/src/modules/query_index/i18n/es.json +2 -2
- package/src/modules/resources/i18n/de.json +57 -0
- package/src/modules/resources/i18n/en.json +57 -0
- package/src/modules/resources/i18n/es.json +57 -0
- package/src/modules/resources/i18n/pl.json +57 -0
- package/src/modules/sales/backend/sales/documents/[id]/page.tsx +23 -7
- package/src/modules/sales/commands/payments.ts +12 -6
- package/src/modules/sales/i18n/de.json +26 -0
- package/src/modules/sales/i18n/en.json +26 -0
- package/src/modules/sales/i18n/es.json +26 -0
- package/src/modules/sales/i18n/pl.json +26 -0
- package/src/modules/sales/lib/messageObjectPreviews.ts +150 -0
- package/src/modules/sales/message-objects.ts +56 -0
- package/src/modules/sales/widgets/messages/SalesDocumentMessageDetail.tsx +57 -0
- package/src/modules/sales/widgets/messages/SalesDocumentMessagePreview.tsx +46 -0
- package/src/modules/sales/widgets/messages/index.ts +2 -0
- package/src/modules/staff/backend/staff/leave-requests/[id]/page.tsx +54 -0
- package/src/modules/staff/backend/staff/my-leave-requests/[id]/page.tsx +58 -0
- package/src/modules/staff/backend/staff/team-members/[id]/page.tsx +2 -32
- package/src/modules/staff/components/LeaveRequestDetail.tsx +135 -0
- package/src/modules/staff/components/LeaveRequestForm.tsx +3 -0
- package/src/modules/staff/components/LeaveRequestPreview.tsx +74 -0
- package/src/modules/staff/i18n/de.json +22 -0
- package/src/modules/staff/i18n/en.json +22 -0
- package/src/modules/staff/i18n/es.json +22 -0
- package/src/modules/staff/i18n/pl.json +22 -0
- package/src/modules/staff/lib/messageObjectPreviews.ts +182 -0
- package/src/modules/staff/message-objects.ts +102 -0
- package/src/modules/staff/message-types.ts +21 -0
- package/src/modules/staff/widgets/messages/StaffMessageObjectDetail.tsx +57 -0
- package/src/modules/staff/widgets/messages/StaffMessageObjectPreview.tsx +44 -0
- package/src/modules/staff/widgets/messages/index.ts +2 -0
- package/src/modules/workflows/backend/definitions/visual-editor/page.tsx +6 -6
- package/src/modules/workflows/i18n/de.json +41 -0
- package/src/modules/workflows/i18n/en.json +41 -0
- package/src/modules/workflows/i18n/es.json +41 -0
- package/src/modules/workflows/i18n/pl.json +41 -0
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
import * as React from 'react'
|
|
4
|
+
import type { ObjectDetailProps } from '@open-mercato/shared/modules/messages/types'
|
|
5
|
+
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
6
|
+
import { Button } from '@open-mercato/ui/primitives/button'
|
|
7
|
+
import { apiCall } from '@open-mercato/ui/backend/utils/apiCall'
|
|
8
|
+
import { LeaveRequestPreview } from './LeaveRequestPreview'
|
|
9
|
+
|
|
10
|
+
export function LeaveRequestDetail(props: ObjectDetailProps) {
|
|
11
|
+
const t = useT()
|
|
12
|
+
const [executingActionId, setExecutingActionId] = React.useState<string | null>(null)
|
|
13
|
+
const [actionTakenByName, setActionTakenByName] = React.useState<string | null>(null)
|
|
14
|
+
const actionTakenAtLabel = formatDateTime(props.actionTakenAt)
|
|
15
|
+
const hasActionTaken = Boolean(props.actionTaken)
|
|
16
|
+
const actionTakenId = extractActionId(props.actionTaken)
|
|
17
|
+
const actionTakenLabel = resolveActionLabel(actionTakenId, props.actions, t)
|
|
18
|
+
const actionTakenByLabel = formatUserLabel(props.actionTakenByUserId, actionTakenByName, t)
|
|
19
|
+
|
|
20
|
+
React.useEffect(() => {
|
|
21
|
+
const userId = props.actionTakenByUserId
|
|
22
|
+
if (typeof userId !== 'string' || userId.trim().length === 0) {
|
|
23
|
+
setActionTakenByName(null)
|
|
24
|
+
return
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
let cancelled = false
|
|
28
|
+
const safeUserId = userId.trim()
|
|
29
|
+
async function loadActionTakenByUserName() {
|
|
30
|
+
const call = await apiCall<{ items?: Array<{ id?: string; name?: string | null; email?: string | null }> }>(
|
|
31
|
+
`/api/auth/users?id=${encodeURIComponent(safeUserId)}`,
|
|
32
|
+
)
|
|
33
|
+
const entry = Array.isArray(call.result?.items) ? call.result.items[0] : null
|
|
34
|
+
const resolvedName = typeof entry?.name === 'string' && entry.name.trim().length > 0
|
|
35
|
+
? entry.name.trim()
|
|
36
|
+
: typeof entry?.email === 'string' && entry.email.trim().length > 0
|
|
37
|
+
? entry.email.trim()
|
|
38
|
+
: null
|
|
39
|
+
if (!cancelled) {
|
|
40
|
+
setActionTakenByName(resolvedName)
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
void loadActionTakenByUserName()
|
|
45
|
+
return () => { cancelled = true }
|
|
46
|
+
}, [props.actionTakenByUserId])
|
|
47
|
+
|
|
48
|
+
return (
|
|
49
|
+
<div className="space-y-3 rounded border p-3">
|
|
50
|
+
<LeaveRequestPreview
|
|
51
|
+
entityId={props.entityId}
|
|
52
|
+
entityModule={props.entityModule}
|
|
53
|
+
entityType={props.entityType}
|
|
54
|
+
snapshot={props.snapshot}
|
|
55
|
+
previewData={props.previewData}
|
|
56
|
+
actionRequired={props.actionRequired}
|
|
57
|
+
actionType={props.actionType}
|
|
58
|
+
actionLabel={props.actionLabel}
|
|
59
|
+
/>
|
|
60
|
+
|
|
61
|
+
{props.actions.length ? (
|
|
62
|
+
<div className="flex flex-wrap gap-2">
|
|
63
|
+
{props.actions.map((action) => (
|
|
64
|
+
<Button
|
|
65
|
+
key={action.id}
|
|
66
|
+
type="button"
|
|
67
|
+
size="sm"
|
|
68
|
+
variant={action.variant ?? 'default'}
|
|
69
|
+
disabled={executingActionId !== null || hasActionTaken}
|
|
70
|
+
onClick={async () => {
|
|
71
|
+
if (executingActionId !== null || hasActionTaken) return
|
|
72
|
+
setExecutingActionId(action.id)
|
|
73
|
+
try {
|
|
74
|
+
await props.onAction(action.id, { id: props.entityId })
|
|
75
|
+
} finally {
|
|
76
|
+
setExecutingActionId(null)
|
|
77
|
+
}
|
|
78
|
+
}}
|
|
79
|
+
>
|
|
80
|
+
{executingActionId === action.id
|
|
81
|
+
? t('messages.actions.executing', 'Executing...')
|
|
82
|
+
: t(action.labelKey ?? action.id, action.id)}
|
|
83
|
+
</Button>
|
|
84
|
+
))}
|
|
85
|
+
</div>
|
|
86
|
+
) : null}
|
|
87
|
+
|
|
88
|
+
{hasActionTaken ? (
|
|
89
|
+
<p className="text-xs text-muted-foreground">
|
|
90
|
+
{t('messages.actions.taken', 'Action taken')}: {actionTakenLabel}
|
|
91
|
+
{actionTakenAtLabel ? ` (${actionTakenAtLabel})` : ''}
|
|
92
|
+
{actionTakenByLabel ? ` ${t('messages.actions.by', 'by')} ${actionTakenByLabel}` : ''}
|
|
93
|
+
</p>
|
|
94
|
+
) : null}
|
|
95
|
+
</div>
|
|
96
|
+
)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function formatDateTime(value?: Date | string | null): string {
|
|
100
|
+
if (!value) return ''
|
|
101
|
+
const date = value instanceof Date ? value : new Date(value)
|
|
102
|
+
if (Number.isNaN(date.getTime())) return ''
|
|
103
|
+
return date.toLocaleString()
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function extractActionId(actionTaken?: string | null): string | null {
|
|
107
|
+
if (!actionTaken) return null
|
|
108
|
+
const value = actionTaken.trim()
|
|
109
|
+
if (value.length === 0) return null
|
|
110
|
+
const parts = value.split(':')
|
|
111
|
+
return parts[parts.length - 1] ?? value
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function resolveActionLabel(
|
|
115
|
+
actionId: string | null,
|
|
116
|
+
actions: ObjectDetailProps['actions'],
|
|
117
|
+
t: ReturnType<typeof useT>,
|
|
118
|
+
): string {
|
|
119
|
+
if (!actionId) return '-'
|
|
120
|
+
const action = actions.find((item) => item.id === actionId)
|
|
121
|
+
if (!action) return actionId
|
|
122
|
+
return t(action.labelKey ?? action.id, action.id)
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function formatUserLabel(
|
|
126
|
+
userId: string | null | undefined,
|
|
127
|
+
userName: string | null,
|
|
128
|
+
t: ReturnType<typeof useT>,
|
|
129
|
+
): string {
|
|
130
|
+
if (!userId) return ''
|
|
131
|
+
if (userName) return userName
|
|
132
|
+
return t('common.user', 'user')
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export default LeaveRequestDetail
|
|
@@ -46,6 +46,7 @@ export type LeaveRequestFormProps = {
|
|
|
46
46
|
loadingMessage?: string
|
|
47
47
|
allowMemberSelect?: boolean
|
|
48
48
|
memberLabel?: string | null
|
|
49
|
+
extraActions?: React.ReactNode
|
|
49
50
|
}
|
|
50
51
|
|
|
51
52
|
const DEFAULT_TIMEZONE = 'UTC'
|
|
@@ -97,6 +98,7 @@ export function LeaveRequestForm(props: LeaveRequestFormProps) {
|
|
|
97
98
|
loadingMessage,
|
|
98
99
|
allowMemberSelect = true,
|
|
99
100
|
memberLabel,
|
|
101
|
+
extraActions,
|
|
100
102
|
} = props
|
|
101
103
|
const t = useT()
|
|
102
104
|
const scopeVersion = useOrganizationScopeVersion()
|
|
@@ -334,6 +336,7 @@ export function LeaveRequestForm(props: LeaveRequestFormProps) {
|
|
|
334
336
|
cancelHref={cancelHref}
|
|
335
337
|
onSubmit={onSubmit}
|
|
336
338
|
onDelete={onDelete}
|
|
339
|
+
extraActions={extraActions}
|
|
337
340
|
isLoading={isLoading}
|
|
338
341
|
loadingMessage={loadingMessage}
|
|
339
342
|
/>
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
import type { ObjectPreviewProps } from '@open-mercato/shared/modules/messages/types'
|
|
4
|
+
import { CalendarClock } from 'lucide-react'
|
|
5
|
+
import { Badge } from '@open-mercato/ui/primitives/badge'
|
|
6
|
+
|
|
7
|
+
export function LeaveRequestPreview({
|
|
8
|
+
snapshot,
|
|
9
|
+
previewData,
|
|
10
|
+
actionRequired,
|
|
11
|
+
actionLabel
|
|
12
|
+
}: ObjectPreviewProps) {
|
|
13
|
+
// Use previewData if available, otherwise fall back to snapshot
|
|
14
|
+
const data = snapshot as {
|
|
15
|
+
employeeName?: string
|
|
16
|
+
startDate?: string
|
|
17
|
+
endDate?: string
|
|
18
|
+
status?: string
|
|
19
|
+
type?: string
|
|
20
|
+
} | undefined
|
|
21
|
+
|
|
22
|
+
const title = previewData?.title || 'Leave Request'
|
|
23
|
+
const subtitle = previewData?.subtitle || (data ?
|
|
24
|
+
`${data.employeeName} - ${data.startDate} to ${data.endDate}` :
|
|
25
|
+
'Leave Request Details'
|
|
26
|
+
)
|
|
27
|
+
const status = previewData?.status || data?.status
|
|
28
|
+
const statusColor = previewData?.statusColor || 'amber'
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<div className="flex items-start gap-3 rounded-md border p-3 bg-muted/30">
|
|
32
|
+
<CalendarClock className="h-5 w-5 text-muted-foreground mt-0.5 flex-shrink-0" />
|
|
33
|
+
<div className="flex-1 min-w-0">
|
|
34
|
+
<div className="flex items-center gap-2 flex-wrap">
|
|
35
|
+
<span className="font-medium text-sm">{title}</span>
|
|
36
|
+
{actionRequired && (
|
|
37
|
+
<Badge variant="secondary" className="text-xs">
|
|
38
|
+
{actionLabel || 'Action Required'}
|
|
39
|
+
</Badge>
|
|
40
|
+
)}
|
|
41
|
+
</div>
|
|
42
|
+
{subtitle && (
|
|
43
|
+
<p className="text-sm text-muted-foreground mt-1">
|
|
44
|
+
{subtitle}
|
|
45
|
+
</p>
|
|
46
|
+
)}
|
|
47
|
+
<div className="flex items-center gap-2 mt-2">
|
|
48
|
+
{status && (
|
|
49
|
+
<Badge variant="outline" className="text-xs">
|
|
50
|
+
{status}
|
|
51
|
+
</Badge>
|
|
52
|
+
)}
|
|
53
|
+
{data?.type && (
|
|
54
|
+
<Badge variant="secondary" className="text-xs">
|
|
55
|
+
{data.type}
|
|
56
|
+
</Badge>
|
|
57
|
+
)}
|
|
58
|
+
</div>
|
|
59
|
+
{previewData?.metadata && Object.keys(previewData.metadata).length > 0 && (
|
|
60
|
+
<div className="mt-2 space-y-1">
|
|
61
|
+
{Object.entries(previewData.metadata).slice(0, 3).map(([key, value]) => (
|
|
62
|
+
<div key={key} className="flex items-center gap-1 text-xs text-muted-foreground">
|
|
63
|
+
<span className="font-medium">{key}:</span>
|
|
64
|
+
<span className="truncate">{value}</span>
|
|
65
|
+
</div>
|
|
66
|
+
))}
|
|
67
|
+
</div>
|
|
68
|
+
)}
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export default LeaveRequestPreview
|
|
@@ -79,6 +79,11 @@
|
|
|
79
79
|
"staff.audit.availabilityRuleSets.create": "Verfügbarkeitszeitplan erstellen",
|
|
80
80
|
"staff.audit.availabilityRuleSets.delete": "Verfügbarkeitszeitplan löschen",
|
|
81
81
|
"staff.audit.availabilityRuleSets.update": "Verfügbarkeitszeitplan aktualisieren",
|
|
82
|
+
"staff.audit.leaveRequests.accept": "Urlaubsantrag genehmigen",
|
|
83
|
+
"staff.audit.leaveRequests.create": "Urlaubsantrag erstellen",
|
|
84
|
+
"staff.audit.leaveRequests.delete": "Urlaubsantrag löschen",
|
|
85
|
+
"staff.audit.leaveRequests.reject": "Urlaubsantrag ablehnen",
|
|
86
|
+
"staff.audit.leaveRequests.update": "Urlaubsantrag aktualisieren",
|
|
82
87
|
"staff.audit.resourceTags.assign": "Ressourcen-Tag zuweisen",
|
|
83
88
|
"staff.audit.resourceTags.create": "Ressourcen-Tag erstellen",
|
|
84
89
|
"staff.audit.resourceTags.delete": "Ressourcen-Tag löschen",
|
|
@@ -90,6 +95,15 @@
|
|
|
90
95
|
"staff.audit.resources.create": "Ressource erstellen",
|
|
91
96
|
"staff.audit.resources.delete": "Ressource löschen",
|
|
92
97
|
"staff.audit.resources.update": "Ressource aktualisieren",
|
|
98
|
+
"staff.audit.teamMemberActivities.create": "Teammitglied-Aktivität erstellen",
|
|
99
|
+
"staff.audit.teamMemberActivities.delete": "Teammitglied-Aktivität löschen",
|
|
100
|
+
"staff.audit.teamMemberActivities.update": "Teammitglied-Aktivität aktualisieren",
|
|
101
|
+
"staff.audit.teamMemberAddresses.create": "Teammitglied-Adresse erstellen",
|
|
102
|
+
"staff.audit.teamMemberAddresses.delete": "Teammitglied-Adresse löschen",
|
|
103
|
+
"staff.audit.teamMemberAddresses.update": "Teammitglied-Adresse aktualisieren",
|
|
104
|
+
"staff.audit.teamMemberComments.create": "Teammitglied-Kommentar erstellen",
|
|
105
|
+
"staff.audit.teamMemberComments.delete": "Teammitglied-Kommentar löschen",
|
|
106
|
+
"staff.audit.teamMemberComments.update": "Teammitglied-Kommentar aktualisieren",
|
|
93
107
|
"staff.audit.teamMemberJobHistories.create": "Eintrag im Beschäftigungsverlauf erstellen",
|
|
94
108
|
"staff.audit.teamMemberJobHistories.delete": "Eintrag im Beschäftigungsverlauf löschen",
|
|
95
109
|
"staff.audit.teamMemberJobHistories.update": "Eintrag im Beschäftigungsverlauf aktualisieren",
|
|
@@ -243,6 +257,10 @@
|
|
|
243
257
|
"staff.leaveRequests.form.reason.valueLabel": "Grund",
|
|
244
258
|
"staff.leaveRequests.form.reason.valuePlaceholder": "Grundname",
|
|
245
259
|
"staff.leaveRequests.messages.accepted": "Urlaubsantrag genehmigt.",
|
|
260
|
+
"staff.leaveRequests.messages.compose.action": "Zur Prüfung senden",
|
|
261
|
+
"staff.leaveRequests.messages.compose.body": "Bitte prüfe diesen Urlaubsantrag und führe die passende Aktion aus.",
|
|
262
|
+
"staff.leaveRequests.messages.compose.subject": "Urlaubsantrag wartet auf Genehmigung",
|
|
263
|
+
"staff.leaveRequests.messages.contextTitle": "Verknüpfter Urlaubsantrag",
|
|
246
264
|
"staff.leaveRequests.messages.rejected": "Urlaubsantrag abgelehnt.",
|
|
247
265
|
"staff.leaveRequests.my.description": "Verfolge deine Urlaubsanträge.",
|
|
248
266
|
"staff.leaveRequests.my.title": "Meine Urlaubsanträge",
|
|
@@ -258,6 +276,10 @@
|
|
|
258
276
|
"staff.leaveRequests.table.search": "Urlaubsanträge suchen...",
|
|
259
277
|
"staff.leaveRequests.table.status": "Status",
|
|
260
278
|
"staff.leaveRequests.table.updatedAt": "Aktualisiert",
|
|
279
|
+
"staff.messageObjects.leaveRequest.title": "Urlaubsantrag",
|
|
280
|
+
"staff.messageObjects.notFound": "Nicht gefunden",
|
|
281
|
+
"staff.messageObjects.team.title": "Team",
|
|
282
|
+
"staff.messageObjects.teamMember.title": "Teammitglied",
|
|
261
283
|
"staff.myAvailability.empty.profileRequired": "Erstelle dein Teamprofil, um Verfügbarkeit zu verwalten.",
|
|
262
284
|
"staff.myAvailability.errors.load": "Verfügbarkeit konnte nicht geladen werden.",
|
|
263
285
|
"staff.myAvailability.loading": "Verfügbarkeit wird geladen...",
|
|
@@ -79,6 +79,11 @@
|
|
|
79
79
|
"staff.audit.availabilityRuleSets.create": "Create availability schedule",
|
|
80
80
|
"staff.audit.availabilityRuleSets.delete": "Delete availability schedule",
|
|
81
81
|
"staff.audit.availabilityRuleSets.update": "Update availability schedule",
|
|
82
|
+
"staff.audit.leaveRequests.accept": "Approve leave request",
|
|
83
|
+
"staff.audit.leaveRequests.create": "Create leave request",
|
|
84
|
+
"staff.audit.leaveRequests.delete": "Delete leave request",
|
|
85
|
+
"staff.audit.leaveRequests.reject": "Reject leave request",
|
|
86
|
+
"staff.audit.leaveRequests.update": "Update leave request",
|
|
82
87
|
"staff.audit.resourceTags.assign": "Assign resource tag",
|
|
83
88
|
"staff.audit.resourceTags.create": "Create resource tag",
|
|
84
89
|
"staff.audit.resourceTags.delete": "Delete resource tag",
|
|
@@ -90,6 +95,15 @@
|
|
|
90
95
|
"staff.audit.resources.create": "Create resource",
|
|
91
96
|
"staff.audit.resources.delete": "Delete resource",
|
|
92
97
|
"staff.audit.resources.update": "Update resource",
|
|
98
|
+
"staff.audit.teamMemberActivities.create": "Create team member activity",
|
|
99
|
+
"staff.audit.teamMemberActivities.delete": "Delete team member activity",
|
|
100
|
+
"staff.audit.teamMemberActivities.update": "Update team member activity",
|
|
101
|
+
"staff.audit.teamMemberAddresses.create": "Create team member address",
|
|
102
|
+
"staff.audit.teamMemberAddresses.delete": "Delete team member address",
|
|
103
|
+
"staff.audit.teamMemberAddresses.update": "Update team member address",
|
|
104
|
+
"staff.audit.teamMemberComments.create": "Create team member comment",
|
|
105
|
+
"staff.audit.teamMemberComments.delete": "Delete team member comment",
|
|
106
|
+
"staff.audit.teamMemberComments.update": "Update team member comment",
|
|
93
107
|
"staff.audit.teamMemberJobHistories.create": "Create job history entry",
|
|
94
108
|
"staff.audit.teamMemberJobHistories.delete": "Delete job history entry",
|
|
95
109
|
"staff.audit.teamMemberJobHistories.update": "Update job history entry",
|
|
@@ -243,6 +257,10 @@
|
|
|
243
257
|
"staff.leaveRequests.form.reason.valueLabel": "Reason",
|
|
244
258
|
"staff.leaveRequests.form.reason.valuePlaceholder": "Reason name",
|
|
245
259
|
"staff.leaveRequests.messages.accepted": "Leave request approved.",
|
|
260
|
+
"staff.leaveRequests.messages.compose.action": "Send for review",
|
|
261
|
+
"staff.leaveRequests.messages.compose.body": "Please review this leave request and take action.",
|
|
262
|
+
"staff.leaveRequests.messages.compose.subject": "Leave request approval needed",
|
|
263
|
+
"staff.leaveRequests.messages.contextTitle": "Linked leave request",
|
|
246
264
|
"staff.leaveRequests.messages.rejected": "Leave request rejected.",
|
|
247
265
|
"staff.leaveRequests.my.description": "Track your submitted leave requests.",
|
|
248
266
|
"staff.leaveRequests.my.title": "My leave requests",
|
|
@@ -258,6 +276,10 @@
|
|
|
258
276
|
"staff.leaveRequests.table.search": "Search leave requests...",
|
|
259
277
|
"staff.leaveRequests.table.status": "Status",
|
|
260
278
|
"staff.leaveRequests.table.updatedAt": "Updated",
|
|
279
|
+
"staff.messageObjects.leaveRequest.title": "Leave request",
|
|
280
|
+
"staff.messageObjects.notFound": "Not found",
|
|
281
|
+
"staff.messageObjects.team.title": "Team",
|
|
282
|
+
"staff.messageObjects.teamMember.title": "Team member",
|
|
261
283
|
"staff.myAvailability.empty.profileRequired": "Create your team member profile to manage availability.",
|
|
262
284
|
"staff.myAvailability.errors.load": "Failed to load availability.",
|
|
263
285
|
"staff.myAvailability.loading": "Loading availability...",
|
|
@@ -79,6 +79,11 @@
|
|
|
79
79
|
"staff.audit.availabilityRuleSets.create": "Crear horario de disponibilidad",
|
|
80
80
|
"staff.audit.availabilityRuleSets.delete": "Eliminar horario de disponibilidad",
|
|
81
81
|
"staff.audit.availabilityRuleSets.update": "Actualizar horario de disponibilidad",
|
|
82
|
+
"staff.audit.leaveRequests.accept": "Aprobar solicitud de ausencia",
|
|
83
|
+
"staff.audit.leaveRequests.create": "Crear solicitud de ausencia",
|
|
84
|
+
"staff.audit.leaveRequests.delete": "Eliminar solicitud de ausencia",
|
|
85
|
+
"staff.audit.leaveRequests.reject": "Rechazar solicitud de ausencia",
|
|
86
|
+
"staff.audit.leaveRequests.update": "Actualizar solicitud de ausencia",
|
|
82
87
|
"staff.audit.resourceTags.assign": "Asignar etiqueta de recurso",
|
|
83
88
|
"staff.audit.resourceTags.create": "Crear etiqueta de recurso",
|
|
84
89
|
"staff.audit.resourceTags.delete": "Eliminar etiqueta de recurso",
|
|
@@ -90,6 +95,15 @@
|
|
|
90
95
|
"staff.audit.resources.create": "Crear recurso",
|
|
91
96
|
"staff.audit.resources.delete": "Eliminar recurso",
|
|
92
97
|
"staff.audit.resources.update": "Actualizar recurso",
|
|
98
|
+
"staff.audit.teamMemberActivities.create": "Crear actividad de miembro del equipo",
|
|
99
|
+
"staff.audit.teamMemberActivities.delete": "Eliminar actividad de miembro del equipo",
|
|
100
|
+
"staff.audit.teamMemberActivities.update": "Actualizar actividad de miembro del equipo",
|
|
101
|
+
"staff.audit.teamMemberAddresses.create": "Crear dirección de miembro del equipo",
|
|
102
|
+
"staff.audit.teamMemberAddresses.delete": "Eliminar dirección de miembro del equipo",
|
|
103
|
+
"staff.audit.teamMemberAddresses.update": "Actualizar dirección de miembro del equipo",
|
|
104
|
+
"staff.audit.teamMemberComments.create": "Crear comentario de miembro del equipo",
|
|
105
|
+
"staff.audit.teamMemberComments.delete": "Eliminar comentario de miembro del equipo",
|
|
106
|
+
"staff.audit.teamMemberComments.update": "Actualizar comentario de miembro del equipo",
|
|
93
107
|
"staff.audit.teamMemberJobHistories.create": "Crear entrada de historial laboral",
|
|
94
108
|
"staff.audit.teamMemberJobHistories.delete": "Eliminar entrada de historial laboral",
|
|
95
109
|
"staff.audit.teamMemberJobHistories.update": "Actualizar entrada de historial laboral",
|
|
@@ -243,6 +257,10 @@
|
|
|
243
257
|
"staff.leaveRequests.form.reason.valueLabel": "Motivo",
|
|
244
258
|
"staff.leaveRequests.form.reason.valuePlaceholder": "Nombre del motivo",
|
|
245
259
|
"staff.leaveRequests.messages.accepted": "Solicitud de ausencia aprobada.",
|
|
260
|
+
"staff.leaveRequests.messages.compose.action": "Send for review",
|
|
261
|
+
"staff.leaveRequests.messages.compose.body": "Please review this leave request and take action.",
|
|
262
|
+
"staff.leaveRequests.messages.compose.subject": "Leave request approval needed",
|
|
263
|
+
"staff.leaveRequests.messages.contextTitle": "Linked leave request",
|
|
246
264
|
"staff.leaveRequests.messages.rejected": "Solicitud de ausencia rechazada.",
|
|
247
265
|
"staff.leaveRequests.my.description": "Sigue tus solicitudes de ausencia enviadas.",
|
|
248
266
|
"staff.leaveRequests.my.title": "Mis solicitudes de ausencia",
|
|
@@ -258,6 +276,10 @@
|
|
|
258
276
|
"staff.leaveRequests.table.search": "Buscar solicitudes de ausencia...",
|
|
259
277
|
"staff.leaveRequests.table.status": "Estado",
|
|
260
278
|
"staff.leaveRequests.table.updatedAt": "Actualizado",
|
|
279
|
+
"staff.messageObjects.leaveRequest.title": "Solicitud de permiso",
|
|
280
|
+
"staff.messageObjects.notFound": "No encontrado",
|
|
281
|
+
"staff.messageObjects.team.title": "Equipo",
|
|
282
|
+
"staff.messageObjects.teamMember.title": "Miembro del equipo",
|
|
261
283
|
"staff.myAvailability.empty.profileRequired": "Crea tu perfil de miembro para gestionar la disponibilidad.",
|
|
262
284
|
"staff.myAvailability.errors.load": "No se pudo cargar la disponibilidad.",
|
|
263
285
|
"staff.myAvailability.loading": "Cargando disponibilidad...",
|
|
@@ -79,6 +79,11 @@
|
|
|
79
79
|
"staff.audit.availabilityRuleSets.create": "Utwórz harmonogram dostępności",
|
|
80
80
|
"staff.audit.availabilityRuleSets.delete": "Usuń harmonogram dostępności",
|
|
81
81
|
"staff.audit.availabilityRuleSets.update": "Zaktualizuj harmonogram dostępności",
|
|
82
|
+
"staff.audit.leaveRequests.accept": "Zatwierdź wniosek urlopowy",
|
|
83
|
+
"staff.audit.leaveRequests.create": "Utwórz wniosek urlopowy",
|
|
84
|
+
"staff.audit.leaveRequests.delete": "Usuń wniosek urlopowy",
|
|
85
|
+
"staff.audit.leaveRequests.reject": "Odrzuć wniosek urlopowy",
|
|
86
|
+
"staff.audit.leaveRequests.update": "Zaktualizuj wniosek urlopowy",
|
|
82
87
|
"staff.audit.resourceTags.assign": "Przypisz tag zasobu",
|
|
83
88
|
"staff.audit.resourceTags.create": "Utwórz tag zasobu",
|
|
84
89
|
"staff.audit.resourceTags.delete": "Usuń tag zasobu",
|
|
@@ -90,6 +95,15 @@
|
|
|
90
95
|
"staff.audit.resources.create": "Utwórz zasób",
|
|
91
96
|
"staff.audit.resources.delete": "Usuń zasób",
|
|
92
97
|
"staff.audit.resources.update": "Zaktualizuj zasób",
|
|
98
|
+
"staff.audit.teamMemberActivities.create": "Utwórz aktywność członka zespołu",
|
|
99
|
+
"staff.audit.teamMemberActivities.delete": "Usuń aktywność członka zespołu",
|
|
100
|
+
"staff.audit.teamMemberActivities.update": "Zaktualizuj aktywność członka zespołu",
|
|
101
|
+
"staff.audit.teamMemberAddresses.create": "Utwórz adres członka zespołu",
|
|
102
|
+
"staff.audit.teamMemberAddresses.delete": "Usuń adres członka zespołu",
|
|
103
|
+
"staff.audit.teamMemberAddresses.update": "Zaktualizuj adres członka zespołu",
|
|
104
|
+
"staff.audit.teamMemberComments.create": "Utwórz komentarz członka zespołu",
|
|
105
|
+
"staff.audit.teamMemberComments.delete": "Usuń komentarz członka zespołu",
|
|
106
|
+
"staff.audit.teamMemberComments.update": "Zaktualizuj komentarz członka zespołu",
|
|
93
107
|
"staff.audit.teamMemberJobHistories.create": "Utwórz wpis historii zatrudnienia",
|
|
94
108
|
"staff.audit.teamMemberJobHistories.delete": "Usuń wpis historii zatrudnienia",
|
|
95
109
|
"staff.audit.teamMemberJobHistories.update": "Zaktualizuj wpis historii zatrudnienia",
|
|
@@ -243,6 +257,10 @@
|
|
|
243
257
|
"staff.leaveRequests.form.reason.valueLabel": "Powód",
|
|
244
258
|
"staff.leaveRequests.form.reason.valuePlaceholder": "Nazwa powodu",
|
|
245
259
|
"staff.leaveRequests.messages.accepted": "Wniosek urlopowy zatwierdzony.",
|
|
260
|
+
"staff.leaveRequests.messages.compose.action": "Wyślij do akceptacji",
|
|
261
|
+
"staff.leaveRequests.messages.compose.body": "Proszę sprawdzić ten wniosek urlopowy i wykonać odpowiednią akcję.",
|
|
262
|
+
"staff.leaveRequests.messages.compose.subject": "Wniosek urlopowy wymaga akceptacji",
|
|
263
|
+
"staff.leaveRequests.messages.contextTitle": "Powiązany wniosek urlopowy",
|
|
246
264
|
"staff.leaveRequests.messages.rejected": "Wniosek urlopowy odrzucony.",
|
|
247
265
|
"staff.leaveRequests.my.description": "Śledź swoje wnioski urlopowe.",
|
|
248
266
|
"staff.leaveRequests.my.title": "Moje wnioski urlopowe",
|
|
@@ -258,6 +276,10 @@
|
|
|
258
276
|
"staff.leaveRequests.table.search": "Szukaj wniosków urlopowych...",
|
|
259
277
|
"staff.leaveRequests.table.status": "Status",
|
|
260
278
|
"staff.leaveRequests.table.updatedAt": "Zaktualizowano",
|
|
279
|
+
"staff.messageObjects.leaveRequest.title": "Wniosek urlopowy",
|
|
280
|
+
"staff.messageObjects.notFound": "Nie znaleziono",
|
|
281
|
+
"staff.messageObjects.team.title": "Zespół",
|
|
282
|
+
"staff.messageObjects.teamMember.title": "Członek zespołu",
|
|
261
283
|
"staff.myAvailability.empty.profileRequired": "Utwórz profil pracownika, aby zarządzać dostępnością.",
|
|
262
284
|
"staff.myAvailability.errors.load": "Nie udało się załadować dostępności.",
|
|
263
285
|
"staff.myAvailability.loading": "Ładowanie dostępności...",
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { createRequestContainer } from '@open-mercato/shared/lib/di/container'
|
|
2
|
+
import { findOneWithDecryption } from '@open-mercato/shared/lib/encryption/find'
|
|
3
|
+
import { resolveTranslations } from '@open-mercato/shared/lib/i18n/server'
|
|
4
|
+
import type { ObjectPreviewData } from '@open-mercato/shared/modules/messages/types'
|
|
5
|
+
import type { EntityManager } from '@mikro-orm/postgresql'
|
|
6
|
+
import { StaffLeaveRequest, StaffTeam, StaffTeamMember } from '../data/entities'
|
|
7
|
+
|
|
8
|
+
type PreviewContext = {
|
|
9
|
+
tenantId: string
|
|
10
|
+
organizationId?: string | null
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function mapStatus(status: string): { label: string; color: string } {
|
|
14
|
+
if (status === 'approved') {
|
|
15
|
+
return { label: 'Approved', color: 'green' }
|
|
16
|
+
}
|
|
17
|
+
if (status === 'rejected') {
|
|
18
|
+
return { label: 'Rejected', color: 'red' }
|
|
19
|
+
}
|
|
20
|
+
return { label: 'Pending', color: 'amber' }
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function formatDate(value: Date): string {
|
|
24
|
+
return value.toISOString().slice(0, 10)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export async function loadLeaveRequestPreview(
|
|
28
|
+
entityId: string,
|
|
29
|
+
ctx: PreviewContext,
|
|
30
|
+
): Promise<ObjectPreviewData> {
|
|
31
|
+
const { t } = await resolveTranslations()
|
|
32
|
+
const defaultTitle = t('staff.messageObjects.leaveRequest.title')
|
|
33
|
+
|
|
34
|
+
if (!ctx.organizationId) {
|
|
35
|
+
return {
|
|
36
|
+
title: defaultTitle,
|
|
37
|
+
subtitle: entityId,
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const { resolve } = await createRequestContainer()
|
|
42
|
+
const em = resolve('em') as EntityManager
|
|
43
|
+
|
|
44
|
+
const request = await findOneWithDecryption(
|
|
45
|
+
em,
|
|
46
|
+
StaffLeaveRequest,
|
|
47
|
+
{
|
|
48
|
+
id: entityId,
|
|
49
|
+
tenantId: ctx.tenantId,
|
|
50
|
+
organizationId: ctx.organizationId,
|
|
51
|
+
deletedAt: null,
|
|
52
|
+
},
|
|
53
|
+
undefined,
|
|
54
|
+
{ tenantId: ctx.tenantId, organizationId: ctx.organizationId },
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
if (!request) {
|
|
58
|
+
return {
|
|
59
|
+
title: defaultTitle,
|
|
60
|
+
subtitle: entityId,
|
|
61
|
+
status: t('staff.messageObjects.notFound'),
|
|
62
|
+
statusColor: 'gray',
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const status = mapStatus(request.status)
|
|
67
|
+
const memberName = typeof request.member?.displayName === 'string' ? request.member.displayName : null
|
|
68
|
+
const subtitle = memberName
|
|
69
|
+
? `${memberName} - ${formatDate(request.startDate)} to ${formatDate(request.endDate)}`
|
|
70
|
+
: `${formatDate(request.startDate)} to ${formatDate(request.endDate)}`
|
|
71
|
+
|
|
72
|
+
return {
|
|
73
|
+
title: 'Leave request',
|
|
74
|
+
subtitle,
|
|
75
|
+
status: status.label,
|
|
76
|
+
statusColor: status.color,
|
|
77
|
+
metadata: {
|
|
78
|
+
'Start date': formatDate(request.startDate),
|
|
79
|
+
'End date': formatDate(request.endDate),
|
|
80
|
+
Timezone: request.timezone,
|
|
81
|
+
},
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export async function loadTeamPreview(
|
|
86
|
+
entityId: string,
|
|
87
|
+
ctx: PreviewContext,
|
|
88
|
+
): Promise<ObjectPreviewData> {
|
|
89
|
+
const { t } = await resolveTranslations()
|
|
90
|
+
const defaultTitle = t('staff.messageObjects.team.title')
|
|
91
|
+
|
|
92
|
+
if (!ctx.organizationId) {
|
|
93
|
+
return {
|
|
94
|
+
title: defaultTitle,
|
|
95
|
+
subtitle: entityId,
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const { resolve } = await createRequestContainer()
|
|
100
|
+
const em = resolve('em') as EntityManager
|
|
101
|
+
|
|
102
|
+
const team = await findOneWithDecryption(
|
|
103
|
+
em,
|
|
104
|
+
StaffTeam,
|
|
105
|
+
{
|
|
106
|
+
id: entityId,
|
|
107
|
+
tenantId: ctx.tenantId,
|
|
108
|
+
organizationId: ctx.organizationId,
|
|
109
|
+
deletedAt: null,
|
|
110
|
+
},
|
|
111
|
+
undefined,
|
|
112
|
+
{ tenantId: ctx.tenantId, organizationId: ctx.organizationId },
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
if (!team) {
|
|
116
|
+
return {
|
|
117
|
+
title: defaultTitle,
|
|
118
|
+
subtitle: entityId,
|
|
119
|
+
status: t('staff.messageObjects.notFound'),
|
|
120
|
+
statusColor: 'gray',
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
return {
|
|
125
|
+
title: team.name,
|
|
126
|
+
subtitle: team.description ?? entityId,
|
|
127
|
+
status: team.isActive ? 'Active' : 'Inactive',
|
|
128
|
+
statusColor: team.isActive ? 'green' : 'gray',
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export async function loadTeamMemberPreview(
|
|
133
|
+
entityId: string,
|
|
134
|
+
ctx: PreviewContext,
|
|
135
|
+
): Promise<ObjectPreviewData> {
|
|
136
|
+
const { t } = await resolveTranslations()
|
|
137
|
+
const defaultTitle = t('staff.messageObjects.teamMember.title')
|
|
138
|
+
|
|
139
|
+
if (!ctx.organizationId) {
|
|
140
|
+
return {
|
|
141
|
+
title: defaultTitle,
|
|
142
|
+
subtitle: entityId,
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const { resolve } = await createRequestContainer()
|
|
147
|
+
const em = resolve('em') as EntityManager
|
|
148
|
+
|
|
149
|
+
const member = await findOneWithDecryption(
|
|
150
|
+
em,
|
|
151
|
+
StaffTeamMember,
|
|
152
|
+
{
|
|
153
|
+
id: entityId,
|
|
154
|
+
tenantId: ctx.tenantId,
|
|
155
|
+
organizationId: ctx.organizationId,
|
|
156
|
+
deletedAt: null,
|
|
157
|
+
},
|
|
158
|
+
undefined,
|
|
159
|
+
{ tenantId: ctx.tenantId, organizationId: ctx.organizationId },
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
if (!member) {
|
|
163
|
+
return {
|
|
164
|
+
title: defaultTitle,
|
|
165
|
+
subtitle: entityId,
|
|
166
|
+
status: t('staff.messageObjects.notFound'),
|
|
167
|
+
statusColor: 'gray',
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
const tags = Array.isArray(member.tags) ? member.tags : []
|
|
172
|
+
const metadata: Record<string, string> = {}
|
|
173
|
+
if (tags.length > 0) metadata.Tags = tags.slice(0, 5).join(', ')
|
|
174
|
+
|
|
175
|
+
return {
|
|
176
|
+
title: member.displayName,
|
|
177
|
+
subtitle: member.description ?? entityId,
|
|
178
|
+
status: member.isActive ? 'Active' : 'Inactive',
|
|
179
|
+
statusColor: member.isActive ? 'green' : 'gray',
|
|
180
|
+
metadata: Object.keys(metadata).length > 0 ? metadata : undefined,
|
|
181
|
+
}
|
|
182
|
+
}
|