@acorex-platform/module-communication-management-client 0.0.21 → 0.0.25
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/fesm2022/acorex-platform-module-communication-management-client-acorex-platform-module-communication-management-client-09UhY2Rc.mjs +1 -1
- package/fesm2022/acorex-platform-module-communication-management-client-acorex-platform-module-communication-management-client-09UhY2Rc.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-communication-management-client-communication-test-smtp.command-BySmN1Lz.mjs +1 -1
- package/fesm2022/acorex-platform-module-communication-management-client-communication-test-smtp.command-BySmN1Lz.mjs.map +1 -1
- package/package.json +3 -1
- package/types/acorex-platform-module-communication-management-client.d.ts +1 -1
|
@@ -31,7 +31,7 @@ import { AXTabsModule } from '@acorex/components/tabs';
|
|
|
31
31
|
import { AXToastService } from '@acorex/components/toast';
|
|
32
32
|
import * as i4$2 from '@acorex/components/popover';
|
|
33
33
|
import { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';
|
|
34
|
-
import { AXP_COMMUNICATION_USER_NOTIFICATIONS_SETTINGS_GROUP, RootConfig as RootConfig$1, AXP_COMMUNICATION_DELIVERY_CHANNELS_SETTINGS_SECTION, AXP_COMMUNICATION_USER_NOTIFICATION_DEFAULTS, AXPCommunicationManagementSettingKeys, AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS, AXMCommunicationManagementCommandKeys } from '@acorex-platform/module-communication-management-contracts';
|
|
34
|
+
import { AXP_COMMUNICATION_USER_NOTIFICATIONS_SETTINGS_GROUP, RootConfig as RootConfig$1, AXP_COMMUNICATION_DELIVERY_CHANNELS_SETTINGS_SECTION, AXP_COMMUNICATION_USER_NOTIFICATION_DEFAULTS, AXPCommunicationManagementSettingKeys, AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS, AXMCommunicationManagementCommandKeys } from '@acorex-platform/module-communication-management-client/contracts';
|
|
35
35
|
import { AXPCommonMenuKeys, AXPCommonPermissionGroupKeys } from '@acorex-platform/module-common-client/contracts';
|
|
36
36
|
import { AXP_PLATFORM_DEV_TOOLS_SETTINGS_GROUP, AXP_PLATFORM_DEV_TOOLS_COMMUNICATION_DEBUG_REDIRECT_SECTION } from '@acorex-platform/module-platform-dev-tools-client/contracts';
|
|
37
37
|
import { AXPValueWidgetComponent, AXP_WIDGET_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/layout/widget-core';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-communication-management-client-acorex-platform-module-communication-management-client-09UhY2Rc.mjs","sources":["../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox-local.constants.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox-icon.util.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox.util.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox-local-filter.util.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox-realtime.service.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox.port.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox.connector.service.ts","../../../../libs/modules/communication-management/client/src/lib/badge.provider.ts","../../../../libs/modules/communication-management/client/src/lib/features/communication-delivery-status.provider.ts","../../../../libs/modules/communication-management/client/src/lib/features/communication-status.provider.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/communication-in-app-inbox.providers.ts","../../../../libs/modules/communication-management/client/src/lib/communication-management-client.port.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/communication-in-app-inbox-page-query.util.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox-conversation.util.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/communication-in-app-inbox.port.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/communication-in-app-realtime.providers.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/communication-in-app-inbox-sync-status.service.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/communication-in-app-inbox-fallback.providers.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/communication-in-app-notification.service.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox.types.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox.tokens.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox-sync-status.token.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/components/in-app-inbox-item.component.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/components/in-app-inbox-item.component.html","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox-action.service.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/components/in-app-inbox-panel.component.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/components/in-app-inbox-panel.component.html","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/components/in-app-inbox-slot.component.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/components/in-app-inbox-slot.component.html","../../../../libs/modules/communication-management/client/src/lib/features/settings/communication-user-notifications-settings.provider.ts","../../../../libs/modules/communication-management/client/src/lib/manifest.ts","../../../../libs/modules/communication-management/client/src/lib/menu.provider.ts","../../../../libs/modules/communication-management/client/src/lib/permission-definition.provider.ts","../../../../libs/modules/communication-management/client/src/lib/search-command.provider.ts","../../../../libs/modules/communication-management/client/src/lib/settings.provider.ts","../../../../libs/modules/communication-management/client/src/lib/features/templates/communication-text-template-channel-definition.provider.ts","../../../../libs/modules/communication-management/client/src/lib/features/dashboard/widgets/my-in-app-inbox/communication-in-app-inbox-widget.component.ts","../../../../libs/modules/communication-management/client/src/lib/features/dashboard/widgets/my-in-app-inbox/communication-in-app-inbox-widget.component.html","../../../../libs/modules/communication-management/client/src/lib/features/dashboard/communication-dashboard-widget.dimensions.ts","../../../../libs/modules/communication-management/client/src/lib/features/dashboard/widgets/my-in-app-inbox/communication-in-app-inbox-widget.config.ts","../../../../libs/modules/communication-management/client/src/lib/widget-definition.provider.ts","../../../../libs/modules/communication-management/client/src/lib/communication-management.module.ts","../../../../libs/modules/communication-management/client/src/lib/features/dashboard/dashboard-seed-widget-builders.util.ts","../../../../libs/modules/communication-management/client/src/lib/features/settings/communication-delivery-channels-settings.util.ts","../../../../libs/modules/communication-management/client/src/acorex-platform-module-communication-management-client.ts"],"sourcesContent":["//#region ----- Constants -----\n\n/** Local-entity engine key for the active in-app inbox hot subset. */\nexport const AXP_IN_APP_INBOX_LOCAL_ENTITY_KEY = 'CommunicationManagement.InAppInbox';\n\n/** Max active deliveries kept in the local hot subset. */\nexport const AXP_IN_APP_INBOX_LOCAL_MAX_ITEMS = 100;\n\n/** Legacy IndexedDB name from the inbox-only store (deleted on migrate). */\nexport const AXP_IN_APP_INBOX_LEGACY_DB_NAME = 'ACoreXInAppInbox';\n\n//#endregion\n","//#region ---- In-app inbox leading icon ----\n\nimport type { AXPUserReference } from '@acorex-platform/framework-shared/core';\n\nimport type { AXPInAppInboxItem, AXPInAppInboxPriority } from './in-app-inbox.types';\n\nconst REPORT_GENERATION_DEFINITION_KEY = 'ReportManagement:ReportGeneration';\n\nexport function isInAppInboxRealUserSender(sender?: AXPUserReference): boolean {\n const senderId = sender?.id?.trim();\n const senderName = sender?.fullName?.trim();\n return Boolean(senderId && senderId !== 'system' && senderName && senderName !== senderId);\n}\n\nexport function resolveInAppInboxIconClass(\n item: Pick<AXPInAppInboxItem, 'iconClass' | 'definitionKey' | 'priority' | 'sender'>,\n): string | undefined {\n if (item.iconClass?.trim()) {\n return item.iconClass.trim();\n }\n\n if (isInAppInboxRealUserSender(item.sender)) {\n return undefined;\n }\n\n if (item.definitionKey === REPORT_GENERATION_DEFINITION_KEY) {\n return 'fa-light fa-file-chart-pie';\n }\n\n return resolveInAppInboxPriorityIconClass(item.priority);\n}\n\nfunction resolveInAppInboxPriorityIconClass(priority: AXPInAppInboxPriority | undefined): string {\n switch (priority) {\n case 'Danger':\n return 'fa-light fa-circle-exclamation';\n case 'Warning':\n return 'fa-light fa-triangle-exclamation';\n default:\n return 'fa-light fa-bell';\n }\n}\n\n//#endregion\n","//#region ---- Shared in-app inbox helpers ----\n\nimport type { AXPInAppInboxItem, AXPInAppInboxPriority } from './in-app-inbox.types';\nimport { resolveInAppInboxIconClass } from './in-app-inbox-icon.util';\n\nexport function isInAppInboxUnread(readAt: Date | null | undefined): boolean {\n return readAt == null;\n}\n\nexport function isInAppInboxUnseen(seenAt: Date | null | undefined): boolean {\n return seenAt == null;\n}\n\nexport function getInAppInboxPriorityClass(priority: AXPInAppInboxPriority | undefined): string {\n return priority ?? 'Notice';\n}\n\nexport function sortInAppInboxItems<T extends AXPInAppInboxItem>(items: T[]): T[] {\n return [...items].sort((left, right) => {\n const pinDelta = Number(Boolean(right.isPinned)) - Number(Boolean(left.isPinned));\n if (pinDelta !== 0) {\n return pinDelta;\n }\n return right.createdAt.getTime() - left.createdAt.getTime();\n });\n}\n\nexport function normalizeInAppInboxItem<T extends Partial<AXPInAppInboxItem>>(item: T): AXPInAppInboxItem {\n return {\n id: String(item.id),\n title: item.title ?? '',\n body: item.body ?? '',\n createdAt: item.createdAt ? new Date(item.createdAt) : new Date(),\n seenAt: item.seenAt ? new Date(item.seenAt) : item.seenAt ?? null,\n readAt: item.readAt ? new Date(item.readAt) : item.readAt ?? null,\n sender: item.sender,\n iconClass: item.iconClass ?? resolveInAppInboxIconClass(item as AXPInAppInboxItem),\n showAvatar: item.showAvatar,\n priority: item.priority ?? 'Notice',\n isPinned: item.isPinned ?? false,\n category: item.category,\n definitionKey: item.definitionKey,\n archivedAt: item.archivedAt ? new Date(item.archivedAt) : item.archivedAt ?? null,\n actions: Array.isArray(item.actions) ? item.actions : undefined,\n };\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXP_QUERY_QUICK_SEARCH_FIELD, type AXPFilterQuery } from '@acorex-platform/framework-shared/core';\nimport type { AXPInAppInboxItem } from './in-app-inbox.types';\nimport { isInAppInboxUnread, sortInAppInboxItems } from './in-app-inbox.util';\n\n//#endregion\n\n//#region ----- Local inbox filters -----\n\nexport function isArchiveCategoryFilter(filters: AXPFilterQuery[] | undefined): boolean {\n return filters?.some((filter) => filter.field === 'category' && filter.value === 'Archive') ?? false;\n}\n\n/**\n * Filters and sorts active inbox items in memory (search, unread, priority).\n * Archive is never applied here — callers must use the API for archived rows.\n */\nexport function filterInAppInboxItemsLocally(\n items: AXPInAppInboxItem[],\n filters: AXPFilterQuery[] | undefined,\n): AXPInAppInboxItem[] {\n const active = items.filter((item) => item.archivedAt == null);\n if (!filters?.length) {\n return sortInAppInboxItems(active);\n }\n\n const searchFilter = filters.find(\n (filter) => filter.field === 'all' || filter.field === AXP_QUERY_QUICK_SEARCH_FIELD,\n );\n const searchText =\n searchFilter?.value != null ? String(searchFilter.value).trim().toLowerCase() : '';\n\n const readFilter = filters.find((filter) => filter.field === 'readStatus');\n const unreadOnly = readFilter?.value === 'unread';\n\n const priorityFilter = filters.find((filter) => filter.field === 'priority');\n const priority = priorityFilter?.value ? String(priorityFilter.value) : '';\n\n const definitionFilter = filters.find((filter) => filter.field === 'type');\n const definitionKey = definitionFilter?.value ? String(definitionFilter.value) : '';\n\n const filtered = active.filter((item) => {\n if (unreadOnly && !isInAppInboxUnread(item.readAt)) {\n return false;\n }\n if (priority && item.priority !== priority) {\n return false;\n }\n if (definitionKey && item.definitionKey !== definitionKey) {\n return false;\n }\n if (searchText) {\n const haystack = `${item.title} ${item.body} ${item.sender?.fullName ?? ''}`.toLowerCase();\n if (!haystack.includes(searchText)) {\n return false;\n }\n }\n return true;\n });\n\n return sortInAppInboxItems(filtered);\n}\n\n//#endregion\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport type { AXPInAppInboxChangeEvent } from './in-app-inbox.types';\n\n//#region ---- In-app inbox realtime events ----\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPInAppInboxRealtimeService {\n private readonly changedSubject = new Subject<AXPInAppInboxChangeEvent>();\n\n readonly changed$ = this.changedSubject.asObservable();\n\n notifyChanged(event: AXPInAppInboxChangeEvent): void {\n this.changedSubject.next(event);\n }\n}\n\n//#endregion\n","//#region ---- In-app inbox data port ----\n\nimport { InjectionToken } from '@angular/core';\nimport type {\n AXPInAppInboxCapabilities,\n AXPInAppInboxListResult,\n AXPInAppInboxLoadQuery,\n} from './in-app-inbox.types';\n\n/**\n * Module-backed inbox data source. Communication-management registers the primary\n * implementation.\n */\nexport interface AXPInAppInboxPort {\n readonly capabilities: AXPInAppInboxCapabilities;\n loadInbox(query?: AXPInAppInboxLoadQuery): Promise<AXPInAppInboxListResult>;\n /** Fetch specific deliveries by id (used for realtime delta sync). */\n loadByIds?(ids: string[]): Promise<AXPInAppInboxListResult>;\n markSeen(ids: string[]): Promise<void>;\n markRead(ids: string[]): Promise<void>;\n markAllRead(): Promise<void>;\n togglePin?(id: string): Promise<void>;\n archive?(ids: string[]): Promise<void>;\n deleteDeliveries?(ids: string[]): Promise<void>;\n}\n\nexport const AXP_IN_APP_INBOX_PORT = new InjectionToken<AXPInAppInboxPort>('AXP_IN_APP_INBOX_PORT');\n\n//#endregion\n","//#region ----- Imports -----\n\nimport {\n AXPLocalEntityEngine,\n AXPLocalEntityRealtimeBridge,\n} from '@acorex-platform/framework-client/common';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport type { AXPFilterQuery, AXPPagedListResult } from '@acorex-platform/framework-shared/core';\nimport { computed, DestroyRef, inject, Injectable, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { debounceTime, distinctUntilChanged } from 'rxjs';\nimport {\n AXP_IN_APP_INBOX_LEGACY_DB_NAME,\n AXP_IN_APP_INBOX_LOCAL_ENTITY_KEY,\n AXP_IN_APP_INBOX_LOCAL_MAX_ITEMS,\n} from './in-app-inbox-local.constants';\nimport {\n filterInAppInboxItemsLocally,\n isArchiveCategoryFilter,\n} from './in-app-inbox-local-filter.util';\nimport { AXPInAppInboxRealtimeService } from './in-app-inbox-realtime.service';\nimport { AXP_IN_APP_INBOX_PORT, type AXPInAppInboxPort } from './in-app-inbox.port';\nimport type { AXPInAppInboxItem } from './in-app-inbox.types';\nimport {\n isInAppInboxUnread,\n isInAppInboxUnseen,\n normalizeInAppInboxItem,\n sortInAppInboxItems,\n} from './in-app-inbox.util';\n\n//#endregion\n\n//#region ----- Types -----\n\ntype AXPInAppInboxListResult = Awaited<ReturnType<AXPInAppInboxPort['loadInbox']>>;\n\ntype TrackedPageQuery = {\n skip: number;\n take: number;\n filters: AXPFilterQuery[];\n mode: 'local' | 'archive';\n};\n\n//#endregion\n\n//#region ----- Shared in-app inbox connector -----\n\n/**\n * Single source of truth for active in-app inbox UI.\n * Active items live in the shared local-entity engine (max 100) and sync via realtime / reconnect.\n * Archived views always load from the API.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPInAppInboxConnectorService {\n private readonly port = inject(AXP_IN_APP_INBOX_PORT);\n private readonly realtime = inject(AXPInAppInboxRealtimeService);\n private readonly engine = inject(AXPLocalEntityEngine);\n private readonly localBridge = inject(AXPLocalEntityRealtimeBridge);\n private readonly sessionService = inject(AXPSessionService);\n private readonly destroyRef = inject(DestroyRef);\n\n private readonly entityKey = AXP_IN_APP_INBOX_LOCAL_ENTITY_KEY;\n private readonly localItems = this.engine.itemsSignal(this.entityKey);\n\n private readonly isLoading = signal(false);\n private readonly pageLoading = signal(false);\n private readonly error = signal<string | null>(null);\n private readonly archivePageItems = signal<AXPInAppInboxItem[]>([]);\n private readonly archiveTotalCount = signal(0);\n private readonly pageQuery = signal<TrackedPageQuery | null>(null);\n private pendingRealtimeRefresh = false;\n private bootstrapPromise: Promise<void> | null = null;\n private syncInFlight: Promise<AXPInAppInboxListResult> | null = null;\n private boundUserKey: string | null = null;\n private legacyDbCleanupDone = false;\n\n readonly capabilities = this.port.capabilities;\n readonly loading = computed(() => this.isLoading());\n readonly pageLoadingState = computed(() => this.pageLoading());\n readonly errorMessage = computed(() => this.error());\n readonly inboxList = computed(() => this.readLocalItems());\n readonly total = computed(() => {\n if (this.pageQuery()?.mode === 'archive') {\n return this.archiveTotalCount();\n }\n return this.readLocalItems().length;\n });\n readonly pagedInboxList = computed(() => {\n const query = this.pageQuery();\n if (!query) {\n return [];\n }\n if (query.mode === 'archive') {\n return this.archivePageItems();\n }\n const filtered = filterInAppInboxItemsLocally(this.readLocalItems(), query.filters);\n return filtered.slice(query.skip, query.skip + query.take);\n });\n readonly pagedTotal = computed(() => {\n const query = this.pageQuery();\n if (!query) {\n return 0;\n }\n if (query.mode === 'archive') {\n return this.archiveTotalCount();\n }\n return filterInAppInboxItemsLocally(this.readLocalItems(), query.filters).length;\n });\n readonly unreadCount = computed(\n () => this.readLocalItems().filter((item) => isInAppInboxUnread(item.readAt)).length,\n );\n\n constructor() {\n this.engine.registerPolicy(this.entityKey, {\n mode: 'local-first',\n maxItems: AXP_IN_APP_INBOX_LOCAL_MAX_ITEMS,\n sortField: 'createdAt',\n role: 'entity',\n });\n\n this.localBridge.register(this.entityKey, {\n fetchByIds: this.port.loadByIds ? (ids) => this.fetchActiveByIds(ids) : undefined,\n fetchHot: () => this.fetchActiveHot(),\n });\n\n this.sessionService.isReadyForAppScopedApi$\n .pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef))\n .subscribe((isReady) => {\n if (isReady) {\n void this.ensureReady();\n return;\n }\n void this.clearInboxState();\n });\n\n this.realtime.changed$.pipe(debounceTime(100), takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n void this.handleRealtimeEvent(event);\n });\n }\n\n /** Hydrate from IndexedDB then sync active inbox from the server (idempotent). */\n ensureReady(): Promise<void> {\n if (!this.canLoadInbox()) {\n return Promise.resolve();\n }\n if (!this.bootstrapPromise) {\n this.bootstrapPromise = this.bootstrap();\n }\n return this.bootstrapPromise;\n }\n\n async refresh(): Promise<AXPInAppInboxListResult> {\n if (!this.canLoadInbox()) {\n return { items: [], total: 0 };\n }\n await this.ensureReady();\n return this.syncActiveFromServer();\n }\n\n async loadPage(\n filtersOrSkip: AXPFilterQuery[] | number,\n skipOrTake?: number,\n takeArg?: number,\n ): Promise<AXPPagedListResult<AXPInAppInboxItem>> {\n const filters = Array.isArray(filtersOrSkip) ? filtersOrSkip : [];\n const skip = Array.isArray(filtersOrSkip) ? (skipOrTake ?? 0) : filtersOrSkip;\n const take = Array.isArray(filtersOrSkip) ? (takeArg ?? 10) : (skipOrTake ?? 10);\n const mode: TrackedPageQuery['mode'] = isArchiveCategoryFilter(filters) ? 'archive' : 'local';\n\n this.pageQuery.set({ skip, take, filters, mode });\n\n if (mode === 'archive') {\n if (!this.canLoadInbox()) {\n this.archivePageItems.set([]);\n this.archiveTotalCount.set(0);\n return { items: [], total: 0 };\n }\n return this.loadArchivePage(filters, skip, take);\n }\n\n if (this.canLoadInbox()) {\n await this.ensureReady();\n }\n\n this.pageLoading.set(false);\n return { items: this.pagedInboxList(), total: this.pagedTotal() };\n }\n\n async markUnseenAsSeen(): Promise<void> {\n if (!this.port.capabilities.seenTracking || !this.canLoadInbox()) {\n return;\n }\n\n await this.ensureReady();\n\n const unseenIds = this.readLocalItems()\n .filter((item) => isInAppInboxUnseen(item.seenAt))\n .map((item) => item.id);\n\n if (unseenIds.length === 0) {\n return;\n }\n\n const now = new Date().toISOString();\n await this.engine.patchMany(this.entityKey, unseenIds, (item) =>\n item['seenAt'] ? item : { ...item, seenAt: now },\n );\n\n try {\n await this.port.markSeen(unseenIds);\n } catch (err) {\n this.error.set(err instanceof Error ? err.message : 'Failed to mark inbox as seen');\n await this.syncActiveFromServer();\n }\n }\n\n async markAsRead(ids: string[]): Promise<void> {\n if (ids.length === 0 || !this.port.capabilities.readTracking || !this.canLoadInbox()) {\n return;\n }\n\n await this.ensureReady();\n\n const now = new Date().toISOString();\n await this.engine.patchMany(this.entityKey, ids, (item) => ({\n ...item,\n seenAt: item['seenAt'] ?? now,\n readAt: item['readAt'] ?? now,\n }));\n\n try {\n await this.port.markRead(ids);\n } catch (err) {\n this.error.set(err instanceof Error ? err.message : 'Failed to mark inbox as read');\n await this.localBridge.apply({ entityKey: this.entityKey, type: 'upsert', ids });\n }\n }\n\n async markAllAsRead(): Promise<void> {\n if (!this.port.capabilities.readTracking || !this.canLoadInbox()) {\n return;\n }\n\n await this.ensureReady();\n\n const now = new Date().toISOString();\n await this.engine.patchAll(this.entityKey, (item) => {\n const readAt = item['readAt'];\n if (readAt != null) {\n return item;\n }\n return { ...item, readAt: now, seenAt: item['seenAt'] ?? now };\n });\n\n try {\n await this.port.markAllRead();\n } catch (err) {\n this.error.set(err instanceof Error ? err.message : 'Failed to mark all as read');\n await this.syncActiveFromServer();\n }\n }\n\n async togglePin(id: string): Promise<void> {\n if (!this.port.capabilities.pinSupport || !this.port.togglePin || !this.canLoadInbox()) {\n return;\n }\n\n await this.ensureReady();\n\n const current = this.readLocalItems().find((item) => item.id === id);\n if (current) {\n await this.engine.patchMany(this.entityKey, [id], (item) => ({\n ...item,\n isPinned: !Boolean(item['isPinned']),\n }));\n }\n\n try {\n await this.port.togglePin(id);\n await this.localBridge.apply({ entityKey: this.entityKey, type: 'upsert', ids: [id] });\n } catch (err) {\n this.error.set(err instanceof Error ? err.message : 'Failed to toggle pin');\n await this.localBridge.apply({ entityKey: this.entityKey, type: 'upsert', ids: [id] });\n }\n }\n\n async archive(ids: string[]): Promise<void> {\n if (!this.port.archive || ids.length === 0 || !this.canLoadInbox()) {\n return;\n }\n\n await this.ensureReady();\n await this.engine.removeMany(this.entityKey, ids);\n\n try {\n await this.port.archive(ids);\n } catch (err) {\n this.error.set(err instanceof Error ? err.message : 'Failed to archive inbox items');\n await this.syncActiveFromServer();\n }\n\n const query = this.pageQuery();\n if (query?.mode === 'archive') {\n await this.loadArchivePage(query.filters, query.skip, query.take);\n }\n }\n\n async deleteOne(id: string): Promise<void> {\n if (!this.port.deleteDeliveries || !this.canLoadInbox()) {\n return;\n }\n\n await this.ensureReady();\n await this.engine.removeMany(this.entityKey, [id]);\n\n try {\n await this.port.deleteDeliveries([id]);\n } catch (err) {\n this.error.set(err instanceof Error ? err.message : 'Failed to delete inbox item');\n await this.syncActiveFromServer();\n }\n\n const query = this.pageQuery();\n if (query?.mode === 'archive') {\n await this.loadArchivePage(query.filters, query.skip, query.take);\n }\n }\n\n //#region ----- Bootstrap & sync -----\n\n private async bootstrap(): Promise<void> {\n if (!this.canLoadInbox()) {\n return;\n }\n\n try {\n this.deleteLegacyInboxDb();\n this.boundUserKey = this.engine.resolveUserKey();\n await this.engine.hydrate(this.entityKey);\n if (!this.boundUserKey) {\n return;\n }\n await this.syncActiveFromServer();\n } catch (err) {\n this.error.set(err instanceof Error ? err.message : 'Failed to bootstrap inbox');\n }\n }\n\n private async syncActiveFromServer(): Promise<AXPInAppInboxListResult> {\n if (!this.canLoadInbox()) {\n return { items: [], total: 0 };\n }\n\n if (this.syncInFlight) {\n return this.syncInFlight;\n }\n\n this.syncInFlight = this.syncActiveFromServerInternal();\n try {\n return await this.syncInFlight;\n } finally {\n this.syncInFlight = null;\n }\n }\n\n private async syncActiveFromServerInternal(): Promise<AXPInAppInboxListResult> {\n if (!this.canLoadInbox()) {\n return { items: [], total: 0 };\n }\n\n try {\n this.isLoading.set(true);\n this.error.set(null);\n const response = await this.fetchActiveHot();\n const items = sortInAppInboxItems(\n response.items.map((item) => normalizeInAppInboxItem(item as AXPInAppInboxItem)),\n );\n await this.engine.replaceAll(this.entityKey, items.map((item) => this.toPayload(item)));\n const local = this.readLocalItems();\n return { items: local, total: local.length };\n } catch (err) {\n this.error.set(err instanceof Error ? err.message : 'Failed to load inbox');\n const local = this.readLocalItems();\n return { items: local, total: local.length };\n } finally {\n this.isLoading.set(false);\n if (this.pendingRealtimeRefresh) {\n this.pendingRealtimeRefresh = false;\n void this.syncActiveFromServer();\n }\n }\n }\n\n private async fetchActiveHot(): Promise<AXPPagedListResult<unknown>> {\n if (!this.canLoadInbox()) {\n return { items: [], total: 0 };\n }\n\n const response = await this.port.loadInbox({\n skip: 0,\n take: AXP_IN_APP_INBOX_LOCAL_MAX_ITEMS,\n excludeArchived: true,\n });\n return {\n items: response.items.map((item) => this.toPayload(normalizeInAppInboxItem(item))),\n total: response.total,\n };\n }\n\n private async fetchActiveByIds(ids: string[]): Promise<unknown[]> {\n if (!this.canLoadInbox() || !this.port.loadByIds) {\n return [];\n }\n\n const result = await this.port.loadByIds(ids);\n return result.items\n .filter((item) => item.archivedAt == null)\n .map((item) => this.toPayload(normalizeInAppInboxItem(item)));\n }\n\n //#endregion\n\n //#region ----- Page views -----\n\n private async loadArchivePage(\n filters: AXPFilterQuery[],\n skip: number,\n take: number,\n ): Promise<AXPPagedListResult<AXPInAppInboxItem>> {\n if (!this.canLoadInbox()) {\n this.archivePageItems.set([]);\n this.archiveTotalCount.set(0);\n return { items: [], total: 0 };\n }\n\n try {\n this.pageLoading.set(true);\n this.error.set(null);\n const result = await this.port.loadInbox({\n skip,\n take,\n filters,\n excludeArchived: false,\n });\n const items = sortInAppInboxItems(result.items.map((item) => normalizeInAppInboxItem(item)));\n this.archivePageItems.set(items);\n this.archiveTotalCount.set(result.total);\n return { items, total: result.total };\n } catch (err) {\n this.error.set(err instanceof Error ? err.message : 'Failed to load archived inbox');\n this.archivePageItems.set([]);\n this.archiveTotalCount.set(0);\n return { items: [], total: 0 };\n } finally {\n this.pageLoading.set(false);\n }\n }\n\n //#endregion\n\n //#region ----- Realtime -----\n\n private async handleRealtimeEvent(event: {\n type: string;\n ids?: string[];\n }): Promise<void> {\n if (!this.canLoadInbox()) {\n return;\n }\n\n await this.ensureReady();\n\n if (event.type === 'seen' || event.type === 'read') {\n // Local optimistic path already patched; ignore echo noise.\n return;\n }\n\n if ((event.type === 'deleted' || event.type === 'archived') && event.ids?.length) {\n await this.localBridge.apply({\n entityKey: this.entityKey,\n type: 'remove',\n ids: event.ids,\n });\n const query = this.pageQuery();\n if (query?.mode === 'archive') {\n await this.loadArchivePage(query.filters, query.skip, query.take);\n }\n return;\n }\n\n if (this.isLoading()) {\n this.pendingRealtimeRefresh = true;\n return;\n }\n\n if (event.ids?.length) {\n await this.localBridge.apply({\n entityKey: this.entityKey,\n type: 'upsert',\n ids: event.ids,\n });\n return;\n }\n\n await this.localBridge.apply({ entityKey: this.entityKey, type: 'invalidate' });\n }\n\n //#endregion\n\n //#region ----- Local helpers -----\n\n private canLoadInbox(): boolean {\n return this.sessionService.isReadyForAppScopedApi;\n }\n\n private async clearInboxState(): Promise<void> {\n this.bootstrapPromise = null;\n this.syncInFlight = null;\n this.boundUserKey = null;\n this.pendingRealtimeRefresh = false;\n this.pageQuery.set(null);\n this.archivePageItems.set([]);\n this.archiveTotalCount.set(0);\n this.error.set(null);\n this.isLoading.set(false);\n this.pageLoading.set(false);\n await this.engine.clear(this.entityKey);\n }\n\n private readLocalItems(): AXPInAppInboxItem[] {\n return sortInAppInboxItems(this.localItems().map((row) => normalizeInAppInboxItem(row as Partial<AXPInAppInboxItem>)));\n }\n\n private toPayload(item: AXPInAppInboxItem): Record<string, unknown> {\n return {\n id: item.id,\n title: item.title,\n body: item.body,\n createdAt: item.createdAt.toISOString(),\n seenAt: item.seenAt ? item.seenAt.toISOString() : null,\n readAt: item.readAt ? item.readAt.toISOString() : null,\n sender: item.sender,\n iconClass: item.iconClass,\n showAvatar: item.showAvatar,\n priority: item.priority ?? 'Notice',\n isPinned: Boolean(item.isPinned),\n category: item.category,\n definitionKey: item.definitionKey,\n archivedAt: item.archivedAt ? item.archivedAt.toISOString() : null,\n actions: item.actions,\n };\n }\n\n private deleteLegacyInboxDb(): void {\n if (this.legacyDbCleanupDone || typeof indexedDB === 'undefined') {\n return;\n }\n this.legacyDbCleanupDone = true;\n try {\n indexedDB.deleteDatabase(AXP_IN_APP_INBOX_LEGACY_DB_NAME);\n } catch {\n // Best-effort cleanup of the pre-engine inbox DB.\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXPTaskBadgeProvider } from '@acorex-platform/framework-client/layout/components';\nimport { AXPInAppInboxConnectorService } from './features/in-app/inbox/in-app-inbox.connector.service';\nimport { computed, inject, Injectable } from '@angular/core';\n\n//#region ---- Communication in-app inbox badge ----\n\n@Injectable()\nexport class AXMCommunicationInboxBadgeProvider implements AXPTaskBadgeProvider {\n private readonly inbox = inject(AXPInAppInboxConnectorService);\n\n readonly key = 'badge-communication-inbox';\n readonly count = computed(() => this.inbox.unreadCount());\n}\n\n//#endregion\n","import { AXStyleColorType } from '@acorex/cdk/common';\nimport {\n AXP_COMMUNICATION_DELIVERY_STATUS_DEFINITION_KEY,\n AXP_COMMUNICATION_DELIVERY_STATUS_PENDING,\n type CommunicationDeliveryStatus,\n} from '@acorex-platform/module-communication-management-client/contracts';\nimport { AXPStatusProvider } from '@acorex-platform/framework-shared/core';\n\nconst I18N = '@communication-management:entities.communication-delivery.states';\n\n//#region ---- Communication delivery status provider ----\n\n/** Engine-managed delivery lifecycle — read-only in the UI. */\nexport class AXMCommunicationDeliveryStatusProvider extends AXPStatusProvider {\n readonly key = AXP_COMMUNICATION_DELIVERY_STATUS_DEFINITION_KEY;\n\n readonly defaultStatus: CommunicationDeliveryStatus = AXP_COMMUNICATION_DELIVERY_STATUS_PENDING;\n\n readonly statuses = [\n { name: 'Pending' as const, title: `${I18N}.pending`, color: 'secondary' as AXStyleColorType, generateView: true, isInitial: true },\n { name: 'Queued' as const, title: `${I18N}.queued`, color: 'info' as AXStyleColorType, generateView: true },\n { name: 'Processing' as const, title: `${I18N}.processing`, color: 'primary' as AXStyleColorType, generateView: true },\n { name: 'Accepted' as const, title: `${I18N}.accepted`, color: 'info' as AXStyleColorType, generateView: true },\n { name: 'Sent' as const, title: `${I18N}.sent`, color: 'warning' as AXStyleColorType, generateView: true },\n { name: 'Delivered' as const, title: `${I18N}.delivered`, color: 'success' as AXStyleColorType, generateView: true, isFinal: true },\n { name: 'Failed' as const, title: `${I18N}.failed`, color: 'danger' as AXStyleColorType, generateView: true, isFinal: true },\n { name: 'RetryScheduled' as const, title: `${I18N}.retry-scheduled`, color: 'warning' as AXStyleColorType, generateView: true },\n { name: 'Cancelled' as const, title: `${I18N}.cancelled`, color: 'secondary' as AXStyleColorType, generateView: true, isFinal: true },\n { name: 'DeadLettered' as const, title: `${I18N}.dead-lettered`, color: 'danger' as AXStyleColorType, generateView: true, isFinal: true },\n ];\n\n readonly transitions = [];\n}\n\n//#endregion\n","import { AXStyleColorType } from '@acorex/cdk/common';\nimport {\n AXP_COMMUNICATION_STATUS_DEFINITION_KEY,\n AXP_COMMUNICATION_STATUS_PENDING,\n type CommunicationAggregateStatus,\n} from '@acorex-platform/module-communication-management-client/contracts';\nimport { AXPStatusProvider } from '@acorex-platform/framework-shared/core';\n\nconst I18N = '@communication-management:entities.communication.states';\n\n//#region ---- Communication status provider ----\n\n/** Engine-managed aggregate communication status — read-only in the UI. */\nexport class AXMCommunicationStatusProvider extends AXPStatusProvider {\n readonly key = AXP_COMMUNICATION_STATUS_DEFINITION_KEY;\n\n readonly defaultStatus: CommunicationAggregateStatus = AXP_COMMUNICATION_STATUS_PENDING;\n\n readonly statuses = [\n { name: 'Pending' as const, title: `${I18N}.pending`, color: 'secondary' as AXStyleColorType, generateView: true, isInitial: true },\n { name: 'Processing' as const, title: `${I18N}.processing`, color: 'primary' as AXStyleColorType, generateView: true },\n { name: 'Completed' as const, title: `${I18N}.completed`, color: 'success' as AXStyleColorType, generateView: true, isFinal: true },\n { name: 'Failed' as const, title: `${I18N}.failed`, color: 'danger' as AXStyleColorType, generateView: true, isFinal: true },\n { name: 'Cancelled' as const, title: `${I18N}.cancelled`, color: 'secondary' as AXStyleColorType, generateView: true, isFinal: true },\n ];\n\n readonly transitions = [];\n}\n\n//#endregion\n","import type { AXPInAppInboxConfig, AXPInAppInboxI18nKeys } from './inbox/in-app-inbox.types';\n\n//#region ---- Communication in-app inbox registration values ----\n\nexport const communicationInAppInboxConfig: AXPInAppInboxConfig = {\n headerIconClass: 'fa-regular fa-bell',\n viewAllRoute: (appName) => [`/${appName}/my/notification`],\n settingsRoute: (appName) => [`/${appName}/settings/user/communication-notifications`],\n};\n\nexport const communicationInAppInboxI18n: AXPInAppInboxI18nKeys = {\n panelTitle: '@communication-management:in-app.panel.title',\n unread: '@communication-management:in-app.tabs.unread',\n all: '@communication-management:in-app.tabs.all',\n markAllAsRead: '@communication-management:in-app.actions.mark-all-read',\n viewAll: '@communication-management:in-app.actions.view-all',\n emptyTitle: '@communication-management:in-app.state.empty.title',\n emptyDescription: '@communication-management:in-app.state.empty.description',\n pageTitle: '@communication-management:in-app.page.title',\n pageDescriptionNone: '@communication-management:in-app.page.description.none',\n pageDescriptionUnread: '@communication-management:in-app.page.description.unread',\n pageDescriptionAllRead: '@communication-management:in-app.page.description.all-read',\n refresh: '@communication-management:in-app.actions.refresh',\n pin: '@general:actions.pin.title',\n unpin: '@general:actions.unpin.title',\n delete: '@communication-management:in-app.actions.delete',\n archive: '@communication-management:in-app.actions.archive',\n markAsRead: '@communication-management:in-app.actions.mark-as-read',\n selectItems: '@communication-management:in-app.actions.select-items',\n clearFilters: '@communication-management:in-app.actions.clear-filters',\n liveUpdatesOffline: '@communication-management:in-app.live-updates-offline',\n};\n\n//#endregion\n","import type {\n CommunicationDeliveryEngagementRequest,\n CommunicationDeliveryEngagementResult,\n CommunicationDeliveryMutationResult,\n CommunicationSendInput,\n CommunicationSendResult,\n CommunicationSmtpTestInput,\n CommunicationSmtpTestResult,\n} from '@acorex-platform/module-communication-management-client/contracts';\n\nexport abstract class AXPCommunicationManagementClient {\n abstract send(input: CommunicationSendInput): Promise<CommunicationSendResult>;\n abstract markInAppSeen(request: CommunicationDeliveryEngagementRequest): Promise<CommunicationDeliveryEngagementResult>;\n abstract markInAppRead(request: CommunicationDeliveryEngagementRequest): Promise<CommunicationDeliveryEngagementResult>;\n abstract markAllInAppRead(): Promise<CommunicationDeliveryEngagementResult>;\n abstract toggleInAppPin(request: CommunicationDeliveryEngagementRequest): Promise<CommunicationDeliveryMutationResult>;\n abstract archiveInApp(request: CommunicationDeliveryEngagementRequest): Promise<CommunicationDeliveryMutationResult>;\n abstract deleteInApp(request: CommunicationDeliveryEngagementRequest): Promise<CommunicationDeliveryMutationResult>;\n abstract testSmtp(input: CommunicationSmtpTestInput): Promise<CommunicationSmtpTestResult>;\n}\n","import { AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport { AXPFilterQuery, AXPQueryRequest, AXP_QUERY_QUICK_SEARCH_FIELD } from '@acorex-platform/framework-shared/core';\n\nconst UNREAD_DELIVERY_FILTER: AXDataSourceFilterOption = {\n logic: 'or',\n filters: [\n { field: 'readAt', operator: { type: 'isNull' }, value: null },\n { field: 'readAt', operator: { type: 'equal' }, value: false },\n ],\n};\n\nconst INBOX_CATEGORY_FILTER: AXDataSourceFilterOption = {\n field: 'archivedAt',\n operator: { type: 'isNull' },\n value: null,\n};\n\nconst ARCHIVE_CATEGORY_FILTER = {\n field: 'archivedAt',\n operator: { type: 'isNotEmpty' },\n} as unknown as AXDataSourceFilterOption;\n\nexport function buildCommunicationInAppInboxPageQuery(\n filters: AXPFilterQuery[],\n skip: number,\n take: number,\n communicationIds?: string[],\n): AXPQueryRequest {\n const conditions: AXDataSourceFilterOption[] = [\n { field: 'channel', operator: { type: 'equal' }, value: 'in-app' },\n ];\n\n const readFilter = filters.find((f) => f.field === 'readStatus');\n if (readFilter?.value === 'unread') {\n conditions.push(UNREAD_DELIVERY_FILTER);\n }\n\n const categoryFilter = filters.find((f) => f.field === 'category');\n if (categoryFilter?.value === 'Archive') {\n conditions.push(ARCHIVE_CATEGORY_FILTER);\n } else {\n conditions.push(INBOX_CATEGORY_FILTER);\n }\n\n if (communicationIds?.length) {\n conditions.push({\n logic: 'or',\n filters: communicationIds.map((id) => ({\n field: 'communicationId',\n operator: { type: 'equal' as const },\n value: id,\n })),\n });\n } else if (communicationIds?.length === 0) {\n conditions.push({\n field: 'id',\n operator: { type: 'equal' },\n value: '__no_results__',\n });\n }\n\n return {\n skip,\n take,\n sort: [\n { field: 'isPinned', dir: 'desc' },\n { field: 'deliveredAt', dir: 'desc' },\n ],\n filter: { logic: 'and', filters: conditions },\n };\n}\n\nexport function resolveCommunicationInboxCommunicationFilters(\n filters: AXPFilterQuery[],\n): { searchText?: string; definitionKey?: string; priority?: string } {\n const searchFilter = filters.find(\n (f) => f.field === 'all' || f.field === AXP_QUERY_QUICK_SEARCH_FIELD,\n );\n const searchText = searchFilter?.value != null ? String(searchFilter.value).trim() : '';\n\n const typeFilter = filters.find((f) => f.field === 'type');\n const definitionKey = typeFilter?.value ? String(typeFilter.value) : undefined;\n\n const priorityFilter = filters.find((f) => f.field === 'priority');\n const priority = priorityFilter?.value ? String(priorityFilter.value) : undefined;\n\n return {\n searchText: searchText || undefined,\n definitionKey,\n priority,\n };\n}\n","//#region ---- Conversation in-app inbox mapping ----\n\nimport type { AXPUserReference } from '@acorex-platform/framework-shared/core';\n\nimport type { AXPInAppInboxItem } from './in-app-inbox.types';\n\nexport const IN_APP_CONVERSATION_CHAT_DEFINITION_KEY = 'conversation-chat-message';\n\nexport const IN_APP_CONVERSATION_OPEN_CHAT_COMMAND = 'Conversation:OpenChat';\n\nexport interface ParsedConversationInAppCorrelation {\n conversationId: string;\n messageId: string;\n senderUserId?: string;\n}\n\nexport function parseConversationInAppCorrelationId(\n correlationId: string | null | undefined,\n): ParsedConversationInAppCorrelation | undefined {\n const scoped = correlationId?.trim();\n if (!scoped?.startsWith('conversation:')) {\n return undefined;\n }\n\n const segments = scoped.split(':');\n if (segments.length < 3) {\n return undefined;\n }\n\n const conversationId = segments[1]?.trim();\n const messageId = segments[2]?.trim();\n if (!conversationId || !messageId) {\n return undefined;\n }\n\n const senderUserId = segments[3]?.trim() || undefined;\n return { conversationId, messageId, senderUserId };\n}\n\nfunction readSenderUserIdFromActions(\n actions: AXPInAppInboxItem['actions'],\n): string | undefined {\n const options = actions?.[0]?.command?.options;\n if (!options || typeof options !== 'object') {\n return undefined;\n }\n\n const senderUserId = options['senderUserId'];\n return typeof senderUserId === 'string' && senderUserId.trim() ? senderUserId.trim() : undefined;\n}\n\nfunction resolveConversationSenderName(\n title: string | undefined,\n body: string | undefined,\n): string | undefined {\n const bodyText = body?.trim();\n if (bodyText?.includes(':')) {\n const prefix = bodyText.slice(0, bodyText.indexOf(':')).trim();\n if (prefix) {\n return prefix;\n }\n }\n\n const titleText = title?.trim();\n return titleText || undefined;\n}\n\nexport function resolveConversationInAppInboxSender(input: {\n definitionKey?: string;\n title?: string;\n body?: string;\n correlationId?: string | null;\n actions?: AXPInAppInboxItem['actions'];\n}): AXPUserReference | undefined {\n if (input.definitionKey !== IN_APP_CONVERSATION_CHAT_DEFINITION_KEY) {\n return undefined;\n }\n\n const parsed = parseConversationInAppCorrelationId(input.correlationId);\n const senderUserId = parsed?.senderUserId ?? readSenderUserIdFromActions(input.actions);\n const senderName = resolveConversationSenderName(input.title, input.body);\n\n if (!senderUserId || !senderName || senderUserId === 'system') {\n return undefined;\n }\n\n return { id: senderUserId, fullName: senderName };\n}\n\nexport function resolveConversationInAppInboxActions(input: {\n definitionKey?: string;\n correlationId?: string | null;\n actions?: AXPInAppInboxItem['actions'];\n}): AXPInAppInboxItem['actions'] | undefined {\n if (input.definitionKey !== IN_APP_CONVERSATION_CHAT_DEFINITION_KEY) {\n return input.actions;\n }\n\n if (input.actions?.some((action) => action.command?.name?.trim())) {\n return input.actions;\n }\n\n const parsed = parseConversationInAppCorrelationId(input.correlationId);\n if (!parsed?.conversationId) {\n return input.actions;\n }\n\n return [\n {\n title: '@conversation:in-app.actions.open-chat',\n command: {\n name: IN_APP_CONVERSATION_OPEN_CHAT_COMMAND,\n options: {\n conversationId: parsed.conversationId,\n ...(parsed.senderUserId ? { senderUserId: parsed.senderUserId } : {}),\n },\n },\n },\n ];\n}\n\n//#endregion\n","import { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport type { AXPFilterQuery } from '@acorex-platform/framework-shared/core';\nimport {\n RootConfig,\n resolveCommunicationMessage,\n type AXMCommunicationDeliveryModel,\n type AXMCommunicationModel,\n type CommunicationPriority,\n} from '@acorex-platform/module-communication-management-client/contracts';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPCommunicationManagementClient } from '../../communication-management-client.port';\nimport {\n buildCommunicationInAppInboxPageQuery,\n resolveCommunicationInboxCommunicationFilters,\n} from './communication-in-app-inbox-page-query.util';\nimport type {\n AXPInAppInboxItem,\n AXPInAppInboxListResult,\n AXPInAppInboxLoadQuery,\n} from './inbox/in-app-inbox.types';\nimport type { AXPInAppInboxPort } from './inbox/in-app-inbox.port';\nimport {\n resolveConversationInAppInboxActions,\n resolveConversationInAppInboxSender,\n} from './inbox/in-app-inbox-conversation.util';\nimport { resolveInAppInboxIconClass } from './inbox/in-app-inbox-icon.util';\nimport { sortInAppInboxItems } from './inbox/in-app-inbox.util';\n\nconst IN_APP_CHANNEL = 'in-app';\n\n//#region ---- Communication delivery inbox port ----\n\n@Injectable()\nexport class AXMCommunicationInAppInboxPort implements AXPInAppInboxPort {\n readonly capabilities = {\n seenTracking: true,\n readTracking: true,\n pinSupport: true,\n categoryTabs: false,\n } as const;\n\n private readonly entityService = inject(AXPEntityService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly client = inject(AXPCommunicationManagementClient);\n private readonly deliveryData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.communicationDelivery.name)\n .data<string, AXMCommunicationDeliveryModel, AXMCommunicationDeliveryModel>();\n private readonly communicationData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.communication.name)\n .data<string, AXMCommunicationModel, AXMCommunicationModel>();\n\n async loadInbox(query: AXPInAppInboxLoadQuery = {}): Promise<AXPInAppInboxListResult> {\n if (!this.sessionService.isReadyForAppScopedApi) {\n return { items: [], total: 0 };\n }\n\n const userId = this.sessionService.user?.id;\n if (!userId) {\n return { items: [], total: 0 };\n }\n\n const skip = query.skip ?? 0;\n const take = query.take ?? 1000;\n const filters = query.filters ?? [];\n const excludeArchived = query.excludeArchived ?? filters.length === 0;\n\n const communicationIds = await this.resolveCommunicationIds(filters);\n const request = buildCommunicationInAppInboxPageQuery(filters, skip, take, communicationIds);\n const baseFilters = [...(request.filter?.filters ?? [])];\n\n if (userId) {\n baseFilters.push({\n field: 'recipientUserId',\n operator: { type: 'equal' as const },\n value: userId,\n });\n }\n\n if (excludeArchived && !filters.some((filter) => filter.field === 'category' && filter.value === 'Archive')) {\n baseFilters.push({\n field: 'archivedAt',\n operator: { type: 'isNull' },\n value: null,\n });\n }\n\n const result = await this.deliveryData.query({\n ...request,\n filter: { logic: 'and', filters: baseFilters },\n });\n\n const deliveries = result.items as AXMCommunicationDeliveryModel[];\n const items = await this.mapDeliveriesToInboxItems(deliveries);\n\n return { total: result.total, items };\n }\n\n async loadByIds(ids: string[]): Promise<AXPInAppInboxListResult> {\n if (!this.sessionService.isReadyForAppScopedApi) {\n return { items: [], total: 0 };\n }\n\n const deliveryIds = [...new Set(ids.map((id) => id?.trim()).filter(Boolean))];\n if (deliveryIds.length === 0) {\n return { total: 0, items: [] };\n }\n\n const userId = this.sessionService.user?.id;\n const filters: Array<Record<string, unknown>> = [\n { field: 'channel', operator: { type: 'equal' as const }, value: IN_APP_CHANNEL },\n {\n logic: 'or' as const,\n filters: deliveryIds.map((id) => ({\n field: 'id',\n operator: { type: 'equal' as const },\n value: id,\n })),\n },\n ];\n\n if (userId) {\n filters.push({\n field: 'recipientUserId',\n operator: { type: 'equal' as const },\n value: userId,\n });\n }\n\n const result = await this.deliveryData.query({\n skip: 0,\n take: deliveryIds.length,\n filter: { logic: 'and', filters: filters as never },\n });\n\n const deliveries = result.items as AXMCommunicationDeliveryModel[];\n const items = await this.mapDeliveriesToInboxItems(deliveries);\n return { total: items.length, items };\n }\n\n async markSeen(ids: string[]): Promise<void> {\n const deliveryIds = ids.filter(Boolean);\n if (deliveryIds.length === 0) {\n return;\n }\n\n await this.client.markInAppSeen({ deliveryIds });\n }\n\n async markRead(ids: string[]): Promise<void> {\n const deliveryIds = ids.filter(Boolean);\n if (deliveryIds.length === 0) {\n return;\n }\n\n await this.client.markInAppRead({ deliveryIds });\n }\n\n async markAllRead(): Promise<void> {\n await this.client.markAllInAppRead();\n }\n\n async togglePin(id: string): Promise<void> {\n if (!id.trim()) {\n return;\n }\n\n await this.client.toggleInAppPin({ deliveryIds: [id] });\n }\n\n async archive(ids: string[]): Promise<void> {\n const deliveryIds = ids.filter(Boolean);\n if (deliveryIds.length === 0) {\n return;\n }\n\n await this.client.archiveInApp({ deliveryIds });\n }\n\n async deleteDeliveries(ids: string[]): Promise<void> {\n const deliveryIds = ids.filter(Boolean);\n if (deliveryIds.length === 0) {\n return;\n }\n\n await this.client.deleteInApp({ deliveryIds });\n }\n\n private async mapDeliveriesToInboxItems(\n deliveries: AXMCommunicationDeliveryModel[],\n ): Promise<AXPInAppInboxItem[]> {\n const communicationMap = await this.loadCommunicationsById(\n [...new Set(deliveries.map((delivery) => delivery.communicationId).filter(Boolean))],\n );\n\n return sortInAppInboxItems(\n deliveries.map((item) => this.toInboxItem(item, communicationMap.get(item.communicationId))),\n );\n }\n\n private async resolveCommunicationIds(filters: AXPFilterQuery[]): Promise<string[] | undefined> {\n const { searchText, definitionKey, priority } = resolveCommunicationInboxCommunicationFilters(filters);\n if (!searchText && !definitionKey && !priority) {\n return undefined;\n }\n\n const conditions = [];\n if (definitionKey) {\n conditions.push({\n field: 'definitionKey',\n operator: { type: 'equal' as const },\n value: definitionKey,\n });\n }\n if (priority) {\n conditions.push({\n field: 'priority',\n operator: { type: 'equal' as const },\n value: priority,\n });\n }\n if (searchText) {\n conditions.push({\n logic: 'or' as const,\n filters: [\n { field: 'title', operator: { type: 'contains' as const }, value: searchText },\n { field: 'message.subject', operator: { type: 'contains' as const }, value: searchText },\n { field: 'message.body', operator: { type: 'contains' as const }, value: searchText },\n ],\n });\n }\n\n const result = await this.communicationData.query({\n take: 1000,\n skip: 0,\n filter: conditions.length > 0 ? { logic: 'and', filters: conditions } : undefined,\n });\n\n return (result.items as AXMCommunicationModel[]).map((item) => item.id);\n }\n\n private async loadCommunicationsById(ids: string[]): Promise<Map<string, AXMCommunicationModel>> {\n const map = new Map<string, AXMCommunicationModel>();\n if (ids.length === 0) {\n return map;\n }\n\n const result = await this.communicationData.query({\n take: ids.length,\n skip: 0,\n filter: {\n logic: 'or',\n filters: ids.map((id) => ({\n field: 'id',\n operator: { type: 'equal' as const },\n value: id,\n })),\n },\n });\n\n for (const communication of result.items as AXMCommunicationModel[]) {\n map.set(communication.id, communication);\n }\n\n return map;\n }\n\n private toInboxItem(\n delivery: AXMCommunicationDeliveryModel,\n communication?: AXMCommunicationModel,\n ): AXPInAppInboxItem {\n const message = communication\n ? resolveCommunicationMessage(communication as unknown as Record<string, unknown>)\n : { subject: '', body: '' };\n\n const definitionKey = communication?.definitionKey;\n const priority = (communication?.priority as CommunicationPriority | undefined) ?? 'Notice';\n const title = message.subject || communication?.title || '';\n const body = message.body;\n const actions = resolveConversationInAppInboxActions({\n definitionKey,\n correlationId: communication?.correlationId,\n actions: communication?.actions,\n });\n const sender = resolveConversationInAppInboxSender({\n definitionKey,\n title,\n body,\n correlationId: communication?.correlationId,\n actions,\n });\n const iconClass = resolveInAppInboxIconClass({ definitionKey, priority, sender });\n\n return {\n id: delivery.id,\n title,\n body,\n createdAt: delivery.deliveredAt ? new Date(delivery.deliveredAt) : new Date(),\n seenAt: delivery.seenAt ? new Date(delivery.seenAt) : delivery.seenAt ?? null,\n readAt: delivery.readAt ? new Date(delivery.readAt) : delivery.readAt ?? null,\n sender,\n iconClass,\n priority,\n isPinned: Boolean(delivery.isPinned),\n definitionKey,\n archivedAt: delivery.archivedAt ? new Date(delivery.archivedAt) : delivery.archivedAt ?? null,\n actions,\n };\n }\n}\n\n//#endregion\n","import { inject, type Provider } from '@angular/core';\nimport {\n AXP_APP_STARTUP_PRIORITY,\n provideAppStartUpTask,\n} from '@acorex-platform/framework-client/core';\nimport { AXPInAppInboxRealtimeService } from './inbox/in-app-inbox-realtime.service';\nimport type { AXPInAppInboxChangeEvent } from './inbox/in-app-inbox.types';\nimport {\n AXPRealtimeDispatcherService,\n AXP_REALTIME_TOPIC_INBOX_REFRESH,\n type AXPRealtimeInboxRefreshPayload,\n} from '@acorex-platform/framework-client/realtime';\n\n//#region ---- Inbox realtime topic handler ----\n\nexport function provideCommunicationInAppRealtimeHandlers(): Provider[] {\n return [\n provideAppStartUpTask(() => {\n const dispatcher = inject(AXPRealtimeDispatcherService, { optional: true });\n const inboxRealtime = inject(AXPInAppInboxRealtimeService);\n return {\n name: 'communication-in-app-realtime-handlers',\n priority: AXP_APP_STARTUP_PRIORITY.realtimeHandlers,\n run: async () => {\n dispatcher?.register({\n topic: AXP_REALTIME_TOPIC_INBOX_REFRESH,\n handle: (envelope) => {\n const payload = (envelope.payload ?? {}) as AXPRealtimeInboxRefreshPayload;\n const ids = [\n ...(payload.deliveryIds ?? []),\n ...(payload.deliveryId ? [payload.deliveryId] : []),\n ].filter(Boolean);\n\n const event: AXPInAppInboxChangeEvent = {\n type: resolveInboxChangeType(payload.op),\n ids: ids.length > 0 ? [...new Set(ids)] : undefined,\n };\n inboxRealtime.notifyChanged(event);\n },\n });\n },\n };\n }),\n ];\n}\n\nfunction resolveInboxChangeType(\n op: AXPRealtimeInboxRefreshPayload['op'],\n): AXPInAppInboxChangeEvent['type'] {\n if (op === 'deleted') {\n return 'deleted';\n }\n if (op === 'archived') {\n return 'archived';\n }\n if (op === 'created') {\n return 'created';\n }\n return 'refresh';\n}\n\n//#endregion\n","import { Injectable, signal } from '@angular/core';\nimport type { AXPInAppInboxSyncStatus } from './inbox/in-app-inbox-sync-status.token';\n\n//#region ---- In-app inbox sync status ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMCommunicationInAppInboxSyncStatusService implements AXPInAppInboxSyncStatus {\n readonly liveUpdatesConnected = signal(true);\n}\n\n//#endregion\n","import { DestroyRef, inject, type Provider } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n AXP_APP_STARTUP_PRIORITY,\n provideAppStartUpTask,\n} from '@acorex-platform/framework-client/core';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPInAppInboxConnectorService } from './inbox/in-app-inbox.connector.service';\nimport { AXPRealtimeConnectionService } from '@acorex-platform/framework-client/realtime';\nimport { distinctUntilChanged, EMPTY, switchMap, timer } from 'rxjs';\nimport { AXMCommunicationInAppInboxSyncStatusService } from './communication-in-app-inbox-sync-status.service';\n\n//#region ---- Constants ----\n\nconst POLL_INTERVAL_MS = 60_000;\nconst RECONNECT_REFRESH_DELAY_MS = 250;\n\n//#endregion\n\n//#region ---- In-app inbox fallback sync ----\n\n/**\n * Keeps the inbox fresh when Socket.IO is down: poll while disconnected,\n * refresh on reconnect and when the tab becomes visible again.\n */\nexport function provideCommunicationInAppInboxFallbackSync(): Provider[] {\n return [\n provideAppStartUpTask(() => {\n const connector = inject(AXPInAppInboxConnectorService);\n const sessionService = inject(AXPSessionService);\n const syncStatus = inject(AXMCommunicationInAppInboxSyncStatusService);\n const connection = inject(AXPRealtimeConnectionService, { optional: true });\n const destroyRef = inject(DestroyRef);\n\n const refreshIfAuthorized = (): void => {\n if (sessionService.isReadyForAppScopedApi) {\n void connector.refresh();\n }\n };\n\n return {\n name: 'communication-in-app-inbox-fallback',\n priority: AXP_APP_STARTUP_PRIORITY.realtimeSubscriptions,\n run: async () => {\n if (!connection) {\n syncStatus.liveUpdatesConnected.set(false);\n return;\n }\n\n let wasConnected = connection.isSocketConnected();\n\n connection.connectionStatus$\n .pipe(distinctUntilChanged(), takeUntilDestroyed(destroyRef))\n .subscribe((status) => {\n const connected = status === 'connected';\n syncStatus.liveUpdatesConnected.set(connected);\n\n if (connected && !wasConnected) {\n timer(RECONNECT_REFRESH_DELAY_MS)\n .pipe(takeUntilDestroyed(destroyRef))\n .subscribe(() => {\n refreshIfAuthorized();\n });\n }\n\n wasConnected = connected;\n });\n\n connection.connectionStatus$\n .pipe(\n distinctUntilChanged(),\n switchMap((status) => {\n if (status === 'connected') {\n return EMPTY;\n }\n return timer(POLL_INTERVAL_MS, POLL_INTERVAL_MS);\n }),\n takeUntilDestroyed(destroyRef),\n )\n .subscribe(() => {\n refreshIfAuthorized();\n });\n\n document.addEventListener(\n 'visibilitychange',\n () => {\n if (document.visibilityState === 'visible') {\n // Re-sync active inbox in case realtime was missed while hidden.\n refreshIfAuthorized();\n }\n },\n { passive: true },\n );\n },\n };\n }),\n ];\n}\n\n//#endregion\n","import {\n AXP_IN_APP_NOTIFICATION_SERVICE,\n type AXPInAppNotificationCreateRequest,\n type AXPInAppNotificationService,\n} from '@acorex-platform/framework-client/common';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPCommunicationManagementClient } from '../../communication-management-client.port';\nimport { AXPInAppInboxRealtimeService } from './inbox/in-app-inbox-realtime.service';\n\n//#region ---- Communication-backed in-app notification port ----\n\n@Injectable()\nexport class AXMCommunicationInAppNotificationService implements AXPInAppNotificationService {\n private readonly client = inject(AXPCommunicationManagementClient);\n private readonly realtime = inject(AXPInAppInboxRealtimeService);\n\n async create(request: AXPInAppNotificationCreateRequest): Promise<void> {\n const recipientUserId = request.receiver.id?.trim();\n if (!recipientUserId) {\n return;\n }\n\n await this.client.send({\n title: request.title,\n message: {\n subject: request.title,\n body: request.body,\n },\n channel: 'in-app',\n recipientUserId,\n recipientName: request.receiver.fullName,\n correlationId: request.id,\n idempotencyKey: request.id,\n });\n\n this.realtime.notifyChanged({ type: 'refresh' });\n }\n}\n\nexport const communicationInAppNotificationServiceProvider = {\n provide: AXP_IN_APP_NOTIFICATION_SERVICE,\n useClass: AXMCommunicationInAppNotificationService,\n};\n\n//#endregion\n","//#region ---- Shared in-app inbox types ----\n\nimport type { AXPFilterQuery, AXPUserReference } from '@acorex-platform/framework-shared/core';\n\nexport type AXPInAppInboxPriority = 'Notice' | 'Danger' | 'Warning';\n\nexport type AXPInAppInboxTabKey = 'Unread' | 'All' | (string & {});\n\nexport interface AXPInAppInboxCapabilities {\n seenTracking: boolean;\n readTracking: boolean;\n pinSupport: boolean;\n categoryTabs: boolean;\n}\n\nexport interface AXPInAppInboxItem {\n id: string;\n title: string;\n body: string;\n createdAt: Date;\n seenAt?: Date | null;\n readAt?: Date | null;\n sender?: AXPUserReference;\n /** Font Awesome classes for a circular leading icon (used instead of user avatar). */\n iconClass?: string;\n /** When false, hide the leading avatar/icon for this row. Omitted = show (if the host also allows it). */\n showAvatar?: boolean;\n priority?: AXPInAppInboxPriority;\n isPinned?: boolean;\n category?: string;\n definitionKey?: string;\n archivedAt?: Date | null;\n actions?: Array<{\n title: string;\n command: {\n name: string;\n options?: Record<string, unknown>;\n };\n }>;\n}\n\nexport interface AXPInAppInboxLoadQuery {\n skip?: number;\n take?: number;\n filters?: AXPFilterQuery[];\n /** When true (default for tray), exclude archived deliveries. */\n excludeArchived?: boolean;\n}\n\nexport interface AXPInAppInboxListResult {\n total: number;\n items: AXPInAppInboxItem[];\n}\n\nexport interface AXPInAppInboxI18nKeys {\n panelTitle: string;\n unread: string;\n all: string;\n markAllAsRead: string;\n viewAll: string;\n emptyTitle: string;\n emptyDescription: string;\n pageTitle: string;\n pageDescriptionNone: string;\n pageDescriptionUnread: string;\n pageDescriptionAllRead: string;\n refresh: string;\n pin: string;\n unpin: string;\n delete: string;\n archive: string;\n markAsRead: string;\n selectItems: string;\n clearFilters: string;\n liveUpdatesOffline: string;\n}\n\nexport interface AXPInAppInboxConfig {\n headerIconClass: string;\n viewAllRoute: (appName: string) => string[];\n settingsRoute?: (appName: string) => string[];\n}\n\nexport interface AXPInAppInboxChangeEvent {\n type: 'created' | 'seen' | 'read' | 'refresh' | 'deleted' | 'archived' | 'pin';\n item?: AXPInAppInboxItem;\n ids?: string[];\n}\n\n//#endregion\n","//#region ---- In-app inbox configuration tokens ----\n\nimport { InjectionToken } from '@angular/core';\nimport type { AXPInAppInboxConfig, AXPInAppInboxI18nKeys } from './in-app-inbox.types';\n\nexport const AXP_IN_APP_INBOX_CONFIG = new InjectionToken<AXPInAppInboxConfig>('AXP_IN_APP_INBOX_CONFIG');\n\nexport const AXP_IN_APP_INBOX_I18N = new InjectionToken<AXPInAppInboxI18nKeys>('AXP_IN_APP_INBOX_I18N');\n\n//#endregion\n","import { InjectionToken, type Signal } from '@angular/core';\n\n//#region ---- In-app inbox sync status ----\n\nexport interface AXPInAppInboxSyncStatus {\n /** True when Socket.IO live updates are connected. */\n liveUpdatesConnected: Signal<boolean>;\n}\n\nexport const AXP_IN_APP_INBOX_SYNC_STATUS = new InjectionToken<AXPInAppInboxSyncStatus>(\n 'AXP_IN_APP_INBOX_SYNC_STATUS',\n);\n\n//#endregion\n","import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPUserAvatarComponent, AXPUserCardDirective } from '@acorex-platform/framework-client/layout/components';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport type { AXPInAppInboxItem } from '../in-app-inbox.types';\nimport { getInAppInboxPriorityClass, isInAppInboxUnread } from '../in-app-inbox.util';\nimport { isInAppInboxRealUserSender, resolveInAppInboxIconClass } from '../in-app-inbox-icon.util';\n\n//#region ---- Shared in-app inbox row item ----\n\n@Component({\n selector: 'axp-in-app-inbox-item',\n templateUrl: './in-app-inbox-item.component.html',\n styleUrls: ['./in-app-inbox-item.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXPUserAvatarComponent,\n AXPUserCardDirective,\n AXBadgeModule,\n AXFormatModule,\n AXTranslationModule,\n ],\n})\nexport class AXPInAppInboxItemComponent {\n data = input.required<AXPInAppInboxItem>();\n showAvatar = input(true);\n showDate = input(true);\n showPin = input(false);\n pinLabelKey = input('@general:actions.pin.title');\n unpinLabelKey = input('@general:actions.unpin.title');\n /** When true, unread rows get a subtle background (use on mixed read/unread lists only). */\n highlightUnreadBackground = input(false);\n showDismissUnread = input(true);\n markAsReadLabelKey = input('@communication-management:in-app.actions.mark-as-read');\n\n protected readonly priorityClass = computed(() => getInAppInboxPriorityClass(this.data().priority));\n protected readonly isUnread = computed(() => isInAppInboxUnread(this.data().readAt));\n protected readonly primaryAction = computed(() => this.data().actions?.[0]);\n protected readonly hasDefaultAction = computed(() => !!this.primaryAction()?.command?.name?.trim());\n protected readonly headline = computed(() => {\n const item = this.data();\n if (isInAppInboxRealUserSender(item.sender)) {\n return item.sender!.fullName!.trim();\n }\n return item.title ?? '';\n });\n protected readonly itemIconClass = computed(() => resolveInAppInboxIconClass(this.data()));\n protected readonly showItemLeading = computed(() => this.showAvatar() && this.data().showAvatar !== false);\n protected readonly showItemIcon = computed(() => this.showItemLeading() && !!this.itemIconClass());\n protected readonly showItemAvatar = computed(() => {\n if (!this.showItemLeading() || this.itemIconClass()) {\n return false;\n }\n return isInAppInboxRealUserSender(this.data().sender);\n });\n\n itemPress = output<string>();\n markAsRead = output<string>();\n togglePin = output<string>();\n closePopover = output<void>();\n\n protected isI18nKey(value: string): boolean {\n return value.startsWith('@');\n }\n\n protected onPress(id: string): void {\n if (!this.hasDefaultAction()) {\n return;\n }\n this.itemPress.emit(id);\n this.closePopover.emit();\n }\n\n protected onTogglePin(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n this.togglePin.emit(this.data().id);\n }\n\n protected onDismissMarkAsRead(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n this.markAsRead.emit(this.data().id);\n }\n}\n\n//#endregion\n","<div\n class=\"axp-in-app-inbox-item\"\n [id]=\"data().id\"\n (click)=\"onPress(data().id)\"\n [class]=\"[\n priorityClass(),\n isUnread() ? 'unread' : 'read',\n isUnread() && highlightUnreadBackground() ? 'unread-highlight' : '',\n ]\"\n>\n @if (showItemIcon()) {\n <div class=\"axp-in-app-inbox-item__icon\" [class]=\"priorityClass()\">\n <i [class]=\"itemIconClass()\" aria-hidden=\"true\"></i>\n </div>\n } @else if (showItemAvatar()) {\n <div class=\"axp-in-app-inbox-item__avatar\">\n <axp-user-avatar\n [size]=\"48\"\n [userId]=\"data().sender!.id\"\n [axpUserCard]=\"data().sender!.id\"\n ></axp-user-avatar>\n @if (isUnread()) {\n <div class=\"axp-in-app-inbox-item__unread-badge\"></div>\n }\n </div>\n }\n\n <div class=\"axp-in-app-inbox-item__content\">\n <div class=\"axp-in-app-inbox-item__title\" [class.--unread]=\"isUnread()\">\n @if (isI18nKey(headline())) {\n {{ headline() | translate | async }}\n } @else {\n {{ headline() }}\n }\n </div>\n\n <div class=\"axp-in-app-inbox-item__subline\">\n @if (showDate()) {\n <span class=\"axp-in-app-inbox-item__time\">{{ data().createdAt | format: 'timeleft' | async }}</span>\n }\n @if (data().category) {\n <span class=\"axp-in-app-inbox-item__subline-separator\" aria-hidden=\"true\">•</span>\n <span class=\"axp-in-app-inbox-item__category\">{{ data().category }}</span>\n }\n @if (showPin()) {\n @if (data().isPinned) {\n <button\n type=\"button\"\n class=\"axp-in-app-inbox-item__pin axp-in-app-inbox-item__pin--inline\"\n [attr.aria-label]=\"unpinLabelKey() | translate | async\"\n (click)=\"onTogglePin($event)\"\n >\n <ax-icon><i class=\"fa-solid fa-thumbtack\"></i></ax-icon>\n </button>\n } @else {\n <button\n type=\"button\"\n class=\"axp-in-app-inbox-item__pin axp-in-app-inbox-item__pin--inline axp-in-app-inbox-item__pin--muted\"\n [attr.aria-label]=\"pinLabelKey() | translate | async\"\n (click)=\"onTogglePin($event)\"\n >\n <ax-icon><i class=\"fa-regular fa-thumbtack\"></i></ax-icon>\n </button>\n }\n }\n </div>\n\n <div class=\"axp-in-app-inbox-item__body\">\n @if (isI18nKey(data().body)) {\n {{ data().body | translate | async }}\n } @else {\n {{ data().body }}\n }\n </div>\n </div>\n\n @if ((isUnread() && showDismissUnread()) || hasDefaultAction()) {\n <div\n class=\"axp-in-app-inbox-item__actions\"\n [class.--dismiss-only]=\"isUnread() && showDismissUnread() && !hasDefaultAction()\"\n >\n @if (isUnread() && showDismissUnread()) {\n <button\n type=\"button\"\n class=\"axp-in-app-inbox-item__dismiss\"\n [attr.aria-label]=\"markAsReadLabelKey() | translate | async\"\n (click)=\"onDismissMarkAsRead($event)\"\n >\n <ax-icon><i class=\"fa-light fa-xmark\" aria-hidden=\"true\"></i></ax-icon>\n </button>\n }\n @if (hasDefaultAction()) {\n <div class=\"axp-in-app-inbox-item__chevron\" aria-hidden=\"true\">\n <ax-icon><i class=\"fa-light fa-chevron-right axp-in-app-inbox-item__chevron-icon\"></i></ax-icon>\n </div>\n }\n </div>\n }\n</div>\n","//#region ----- Imports -----\n\nimport { inject, Injectable } from '@angular/core';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXPInAppInboxConnectorService } from './in-app-inbox.connector.service';\nimport type { AXPInAppInboxItem } from './in-app-inbox.types';\n\n//#endregion\n\n//#region ----- Inbox action -----\n\n@Injectable({ providedIn: 'root' })\nexport class AXPInAppInboxActionService {\n private readonly connector = inject(AXPInAppInboxConnectorService);\n private readonly commands = inject(AXPCommandService);\n\n async openItem(id: string): Promise<void> {\n const item = this.findItem(id);\n await this.connector.markAsRead([id]);\n const action = item?.actions?.[0];\n if (!action?.command?.name) {\n return;\n }\n await this.commands.execute(action.command.name, action.command.options ?? {});\n }\n\n private findItem(id: string): AXPInAppInboxItem | undefined {\n return (\n this.connector.inboxList().find((item) => item.id === id) ??\n this.connector.pagedInboxList().find((item) => item.id === id)\n );\n }\n}\n\n//#endregion\n","import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n OnInit,\n output,\n signal,\n} from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AXPInAppInboxActionService } from '../in-app-inbox-action.service';\nimport { AXPInAppInboxConnectorService } from '../in-app-inbox.connector.service';\nimport { AXP_IN_APP_INBOX_CONFIG, AXP_IN_APP_INBOX_I18N } from '../in-app-inbox.tokens';\nimport type { AXPInAppInboxItem, AXPInAppInboxTabKey } from '../in-app-inbox.types';\nimport { isInAppInboxUnread } from '../in-app-inbox.util';\nimport { AXPInAppInboxItemComponent } from './in-app-inbox-item.component';\n\n//#region ---- Shared in-app inbox tray panel ----\n\ninterface InboxTabData {\n key: AXPInAppInboxTabKey;\n labelKey: string;\n count: number;\n}\n\n@Component({\n selector: 'axp-in-app-inbox-panel',\n templateUrl: './in-app-inbox-panel.component.html',\n styleUrls: ['./in-app-inbox-panel.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXButtonModule,\n AXTabsModule,\n AXDecoratorModule,\n AXBadgeModule,\n AXTranslationModule,\n AXPStateMessageComponent,\n AXPInAppInboxItemComponent,\n ],\n})\nexport class AXPInAppInboxPanelComponent implements OnInit {\n unreadCountChange = output<number>();\n closePopover = output<void>();\n\n private readonly connector = inject(AXPInAppInboxConnectorService);\n private readonly inboxActions = inject(AXPInAppInboxActionService);\n private readonly toastService = inject(AXToastService);\n private readonly router = inject(Router);\n private readonly sessionService = inject(AXPSessionService);\n protected readonly i18n = inject(AXP_IN_APP_INBOX_I18N);\n protected readonly config = inject(AXP_IN_APP_INBOX_CONFIG);\n\n protected readonly items = this.connector.inboxList;\n protected readonly isLoading = this.connector.loading;\n protected activeTab = signal<AXPInAppInboxTabKey>('Unread');\n\n protected readonly tabItems = computed(() => this.buildTabItems(this.items()));\n protected readonly showPin = computed(() => this.connector.capabilities.pinSupport);\n\n constructor() {\n effect(() => {\n const unread = this.tabItems().find((tab) => tab.key === 'Unread')?.count ?? 0;\n this.unreadCountChange.emit(unread);\n });\n }\n\n async ngOnInit(): Promise<void> {\n try {\n await this.connector.ensureReady();\n await this.connector.markUnseenAsSeen();\n } catch (error) {\n this.toastService.show({\n content: typeof error === 'string' ? error : 'Failed to load inbox.',\n color: 'danger',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n }\n }\n\n protected changeActiveTab(tab: AXPInAppInboxTabKey): void {\n this.activeTab.set(tab);\n }\n\n protected getItems(tab: AXPInAppInboxTabKey): AXPInAppInboxItem[] {\n const list = this.items();\n if (tab === 'All') {\n return list;\n }\n if (tab === 'Unread') {\n return list.filter((item) => isInAppInboxUnread(item.readAt));\n }\n return list.filter((item) => item.category === tab);\n }\n\n protected async openInboxItem(id: string): Promise<void> {\n await this.inboxActions.openItem(id);\n }\n\n protected async dismissUnread(id: string): Promise<void> {\n await this.connector.markAsRead([id]);\n }\n\n protected async togglePin(id: string): Promise<void> {\n await this.connector.togglePin(id);\n }\n\n protected async markAllAsRead(): Promise<void> {\n await this.connector.markAllAsRead();\n }\n\n protected viewAll(): void {\n this.closePopover.emit();\n const app = this.sessionService.application?.name ?? 'demo';\n void this.router.navigate(this.config.viewAllRoute(app));\n }\n\n protected openSettings(): void {\n if (!this.config.settingsRoute) {\n return;\n }\n this.closePopover.emit();\n const app = this.sessionService.application?.name ?? 'demo';\n void this.router.navigate(this.config.settingsRoute(app));\n }\n\n private buildTabItems(items: AXPInAppInboxItem[]): InboxTabData[] {\n const unreadTotal = items.filter((item) => isInAppInboxUnread(item.readAt)).length;\n return [\n { key: 'Unread', labelKey: this.i18n.unread, count: unreadTotal },\n { key: 'All', labelKey: this.i18n.all, count: unreadTotal },\n ];\n }\n}\n\n//#endregion\n","<div class=\"axp-in-app-inbox-panel__header\">\n <span class=\"axp-in-app-inbox-panel__title\">\n {{ i18n.panelTitle | translate | async }}\n </span>\n @if (config.settingsRoute) {\n <ax-button color=\"default\" look=\"blank\" (onClick)=\"openSettings()\">\n <ax-icon><i class=\"fa-regular fa-gear fa-lg\"></i></ax-icon>\n </ax-button>\n }\n</div>\n<ax-tabs [content]=\"tabContent\" look=\"with-line\" location=\"bottom\">\n @for (tab of tabItems(); track tab.key) {\n <ax-tab-item\n [text]=\"(tab.labelKey | translate | async) ?? ''\"\n [active]=\"activeTab() === tab.key\"\n (activeChange)=\"changeActiveTab(tab.key)\"\n >\n <ax-suffix>\n @if (tab.count && tab.key === 'Unread') {\n <ax-badge [color]=\"activeTab() === tab.key ? 'primary' : 'ghost'\" [text]=\"tab.count.toString()\"></ax-badge>\n }\n </ax-suffix>\n <ax-content>\n <div class=\"axp-in-app-inbox-panel__list\">\n @if (isLoading()) {\n <div class=\"axp-in-app-inbox-panel__loading\">\n @for (_ of [1, 2, 3]; track $index) {\n <div class=\"axp-in-app-inbox-panel__skeleton\">\n <div class=\"axp-in-app-inbox-panel__skeleton-avatar\"></div>\n <div class=\"axp-in-app-inbox-panel__skeleton-lines\">\n <div class=\"axp-in-app-inbox-panel__skeleton-line --wide\"></div>\n <div class=\"axp-in-app-inbox-panel__skeleton-line\"></div>\n </div>\n </div>\n }\n </div>\n } @else if (getItems(tab.key).length === 0) {\n <axp-state-message\n icon=\"fa-regular fa-bell-slash\"\n [title]=\"i18n.emptyTitle\"\n [description]=\"i18n.emptyDescription\"\n />\n } @else {\n @for (item of getItems(tab.key); track item.id) {\n <axp-in-app-inbox-item\n [data]=\"item\"\n [highlightUnreadBackground]=\"tab.key === 'All'\"\n [showPin]=\"showPin()\"\n [pinLabelKey]=\"i18n.pin\"\n [unpinLabelKey]=\"i18n.unpin\"\n [markAsReadLabelKey]=\"i18n.markAsRead\"\n (itemPress)=\"openInboxItem($event)\"\n (markAsRead)=\"dismissUnread($event)\"\n (togglePin)=\"togglePin($event)\"\n (closePopover)=\"closePopover.emit()\"\n />\n }\n }\n </div>\n <div class=\"axp-in-app-inbox-panel__footer\">\n <ax-button\n class=\"ax-sm\"\n [disabled]=\"(tabItems()[0]?.count ?? 0) === 0\"\n look=\"outline\"\n color=\"default\"\n [text]=\"(i18n.markAllAsRead | translate | async) ?? ''\"\n (onClick)=\"markAllAsRead()\"\n />\n <ax-button\n class=\"ax-sm\"\n look=\"outline\"\n color=\"primary\"\n [text]=\"(i18n.viewAll | translate | async) ?? ''\"\n (onClick)=\"viewAll()\"\n />\n </div>\n </ax-content>\n </ax-tab-item>\n }\n</ax-tabs>\n\n<ng-template [axTabContent] #tabContent=\"axTabContent\"></ng-template>\n","import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPInAppInboxConnectorService } from '../in-app-inbox.connector.service';\nimport { AXP_IN_APP_INBOX_CONFIG, AXP_IN_APP_INBOX_I18N } from '../in-app-inbox.tokens';\nimport { AXP_IN_APP_INBOX_SYNC_STATUS } from '../in-app-inbox-sync-status.token';\nimport { AXPInAppInboxPanelComponent } from './in-app-inbox-panel.component';\n\n//#region ---- Shared in-app inbox header slot ----\n\n@Component({\n selector: 'axp-in-app-inbox-slot',\n templateUrl: './in-app-inbox-slot.component.html',\n styleUrls: ['./in-app-inbox-slot.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AsyncPipe,\n AXButtonModule,\n AXDecoratorModule,\n AXBadgeModule,\n AXPopoverModule,\n AXTranslationModule,\n AXPInAppInboxPanelComponent,\n ],\n})\nexport class AXPInAppInboxSlotComponent {\n protected readonly config = inject(AXP_IN_APP_INBOX_CONFIG);\n protected readonly i18n = inject(AXP_IN_APP_INBOX_I18N);\n private readonly connector = inject(AXPInAppInboxConnectorService);\n private readonly syncStatus = inject(AXP_IN_APP_INBOX_SYNC_STATUS, { optional: true });\n\n protected liveUpdatesOffline = computed(\n () => this.syncStatus != null && !this.syncStatus.liveUpdatesConnected(),\n );\n\n protected badgeDisplay = computed(() => {\n const total = this.connector.unreadCount();\n if (total <= 0) {\n return '';\n }\n return total > 50 ? '50+' : total.toString();\n });\n\n private popover = viewChild(AXPopoverComponent);\n\n protected closePopover(): void {\n this.popover()?.close();\n }\n}\n\n//#endregion\n","<ax-button\n [iconOnly]=\"true\"\n class=\"relative axp-in-app-inbox-slot__button\"\n color=\"primary\"\n #inboxTrigger\n [title]=\"liveUpdatesOffline() ? ((i18n.liveUpdatesOffline | translate | async) ?? '') : ''\"\n>\n <ax-icon>\n <i [class]=\"config.headerIconClass\"></i>\n </ax-icon>\n</ax-button>\n\n<div\n class=\"axp-in-app-inbox-slot__badge\"\n [class.--xs]=\"badgeDisplay().length > 2\"\n>\n @if (badgeDisplay()) {\n <ax-badge color=\"danger\" [text]=\"badgeDisplay()\"></ax-badge>\n }\n</div>\n<ax-popover\n [target]=\"inboxTrigger\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n [adaptivityEnabled]=\"true\"\n>\n <div class=\"bg-lightest rounded-md w-full\">\n <axp-in-app-inbox-panel (closePopover)=\"closePopover()\" />\n </div>\n</ax-popover>\n","import {\n AXPSettingDefinitionProvider,\n AXPSettingDefinitionProviderContext,\n} from '@acorex-platform/framework-client/common';\nimport { AXPWidgetsList } from '@acorex-platform/framework-shared/core';\nimport {\n AXP_COMMUNICATION_DELIVERY_CHANNELS_SETTINGS_SECTION,\n AXP_COMMUNICATION_USER_NOTIFICATIONS_SETTINGS_GROUP,\n AXP_COMMUNICATION_USER_NOTIFICATION_DEFAULTS,\n AXPCommunicationManagementSettingKeys,\n RootConfig,\n} from '@acorex-platform/module-communication-management-contracts';\n\nconst I18N = '@communication-management:settings.user-notifications';\n\n//#region ---- User notification preferences settings ----\n\nexport class AXMCommunicationUserNotificationsSettingProvider implements AXPSettingDefinitionProvider {\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n context\n .addGroup(\n AXP_COMMUNICATION_USER_NOTIFICATIONS_SETTINGS_GROUP,\n `${I18N}.nav-title`,\n `${I18N}.description`,\n RootConfig.module.icon,\n `${I18N}.title`,\n 88,\n )\n .addSection(\n AXP_COMMUNICATION_DELIVERY_CHANNELS_SETTINGS_SECTION,\n `${I18N}.delivery-channels.title`,\n `${I18N}.delivery-channels.description`,\n )\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.UserChannelInAppEnabled,\n title: `${I18N}.delivery-channels.in-app.title`,\n scope: 'U',\n overridableAt: [],\n isInherited: true,\n defaultValue:\n AXP_COMMUNICATION_USER_NOTIFICATION_DEFAULTS[\n AXPCommunicationManagementSettingKeys.UserChannelInAppEnabled\n ],\n widget: { type: AXPWidgetsList.Editors.ToggleSwitch },\n description: `${I18N}.delivery-channels.in-app.description`,\n })\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.UserChannelEmailEnabled,\n title: `${I18N}.delivery-channels.email.title`,\n scope: 'U',\n overridableAt: [],\n isInherited: true,\n defaultValue:\n AXP_COMMUNICATION_USER_NOTIFICATION_DEFAULTS[\n AXPCommunicationManagementSettingKeys.UserChannelEmailEnabled\n ],\n widget: { type: AXPWidgetsList.Editors.ToggleSwitch },\n description: `${I18N}.delivery-channels.email.description`,\n })\n .endSection()\n .endGroup();\n }\n}\n\n//#endregion\n","import { AXPModuleManifest } from '@acorex-platform/framework-client/core';\nimport { RootConfig } from '@acorex-platform/module-communication-management-client/contracts';\n\nexport const CommunicationManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '0.0.1',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n type: 'domain',\n domain: 'communication',\n required: false,\n};\n","import { AXPCommonMenuKeys } from '@acorex-platform/module-common-client/contracts';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { inject } from '@angular/core';\n\nimport {\n AXMCommunicationManagementMenuKeys,\n RootConfig,\n AXPCollaborationPermissionKeys,\n} from '@acorex-platform/module-communication-management-client/contracts';\n\nexport class AXMCommunicationManagementMenuProvider implements AXPMenuProvider {\n private readonly entityService = inject(AXPEntityService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const module = RootConfig.module.name;\n\n const monitoringMenu = context.find(AXPCommonMenuKeys.Monitoring);\n if (!monitoringMenu.exists) {\n context.find(AXPCommonMenuKeys.Administration).addItems([\n {\n name: AXPCommonMenuKeys.Monitoring,\n priority: 12,\n text: '@general:menus.monitoring.title',\n icon: 'fa-light fa-chart-line',\n type: 'menu',\n children: [],\n },\n ]);\n }\n\n context.find(AXPCommonMenuKeys.Monitoring).addItems([\n {\n name: AXMCommunicationManagementMenuKeys.Communications,\n text: RootConfig.entities.communication.titlePlural,\n path: this.entityService.createPath(module, RootConfig.entities.communication.name),\n icon: RootConfig.entities.communication.icon,\n priority: 1,\n policy: {\n features: [module],\n permissions: [AXPCollaborationPermissionKeys.MaintainCommunications],\n },\n },\n ]);\n }\n}\n","//#region ----- Imports -----\n\nimport {\n AXPPermissionDefinitionProvider,\n AXPPermissionDefinitionProviderContext,\n} from '@acorex-platform/framework-client/auth';\nimport {\n AXPCommonPermissionGroupKeys\n} from '@acorex-platform/module-common-client/contracts';\nimport {\n AXPCollaborationPermissionKeys\n} from '@acorex-platform/module-communication-management-client/contracts';\n\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ----- Permission Definition Provider -----\n\n/**\n * Registers communication capabilities into the shared Collaboration group.\n */\n@Injectable()\nexport class AXMCommunicationManagementPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPCollaborationPermissionKeys;\n const groups = AXPCommonPermissionGroupKeys;\n const P = '@common:collaboration.permissions';\n const G = '@common:permission-groups';\n\n context.addGroup(groups.Collaboration.Root, `${G}.collaboration.title`, `${G}.collaboration.description`, { order: 80 });\n\n context\n .addGroup(\n groups.Collaboration.Communications,\n `${G}.collaboration-communications.title`,\n `${G}.collaboration-communications.description`,\n { parent: groups.Collaboration.Root, order: 30 },\n )\n .addPermission(\n keys.MaintainCommunications,\n `${P}.maintain-communications.title`,\n `${P}.maintain-communications.description`,\n )\n .endPermission()\n .endGroup();\n }\n}\n\n//#endregion\n","import { AXPSearchCommandProvider, AXPSearchResult } from '@acorex-platform/framework-client/common';\n\nexport class AXMCommunicationManagementSearchCommandProvider extends AXPSearchCommandProvider {\n commands: AXPSearchResult[] = [];\n}\n","import { AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPWidgetsList } from '@acorex-platform/framework-shared/core';\nimport {\n AXPCommunicationManagementSettingKeys,\n AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS,\n AXMCommunicationManagementCommandKeys,\n RootConfig,\n} from '@acorex-platform/module-communication-management-contracts';\nimport {\n AXP_PLATFORM_DEV_TOOLS_COMMUNICATION_DEBUG_REDIRECT_SECTION,\n AXP_PLATFORM_DEV_TOOLS_SETTINGS_GROUP,\n} from '@acorex-platform/module-platform-dev-tools-client/contracts';\n\nconst I18N = '@communication-management:settings.communication';\nconst DEV_TOOLS_I18N = '@platform-dev-tools:settings.communication-debug-redirect';\n\n/** SMTP is server-owned config — never persist to client IndexedDB. */\nconst SMTP_CLIENT_CACHE = {\n cacheable: false as const,\n};\n\nexport class AXMCommunicationManagementSettingProvider implements AXPSettingDefinitionProvider {\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n context\n .addGroup(\n 'communication',\n `${I18N}.nav-title`,\n `${I18N}.description`,\n RootConfig.module.icon,\n `${I18N}.title`,\n 96,\n )\n .addSection('smtp-settings', `${I18N}.smtp.title`, `${I18N}.smtp.description`)\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.EmailServer,\n title: `${I18N}.smtp.server.title`,\n scope: 'P',\n overridableAt: ['T'],\n // Platform-owned SMTP baseline (same pattern as System Insight / Auth).\n // Tenants may still override via overridableAt; runtime inherits parent when unset.\n isInherited: false,\n ...SMTP_CLIENT_CACHE,\n defaultValue: AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS[AXPCommunicationManagementSettingKeys.EmailServer],\n widget: {\n type: AXPWidgetsList.Editors.TextBox,\n },\n description: `${I18N}.smtp.server.description`,\n })\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.EmailPort,\n title: `${I18N}.smtp.port.title`,\n scope: 'P',\n overridableAt: ['T'],\n isInherited: false,\n ...SMTP_CLIENT_CACHE,\n defaultValue: AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS[AXPCommunicationManagementSettingKeys.EmailPort],\n widget: {\n type: AXPWidgetsList.Editors.NumberBox,\n options: {\n minValue: 1,\n maxValue: 65535,\n },\n },\n description: `${I18N}.smtp.port.description`,\n })\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.EmailUsername,\n title: `${I18N}.smtp.username.title`,\n scope: 'P',\n overridableAt: ['T'],\n isInherited: false,\n ...SMTP_CLIENT_CACHE,\n defaultValue: AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS[AXPCommunicationManagementSettingKeys.EmailUsername],\n widget: {\n type: AXPWidgetsList.Editors.TextBox,\n },\n description: `${I18N}.smtp.username.description`,\n })\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.EmailPassword,\n title: `${I18N}.smtp.password.title`,\n scope: 'P',\n overridableAt: ['T'],\n isInherited: false,\n // Server DB at-rest encryption; implies cacheable: false.\n isEncrypted: true,\n defaultValue: AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS[AXPCommunicationManagementSettingKeys.EmailPassword],\n widget: {\n type: AXPWidgetsList.Editors.PasswordBox,\n },\n description: `${I18N}.smtp.password.description`,\n })\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.EmailFromAddress,\n title: `${I18N}.smtp.from-address.title`,\n scope: 'P',\n overridableAt: ['T'],\n isInherited: false,\n ...SMTP_CLIENT_CACHE,\n defaultValue: AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS[AXPCommunicationManagementSettingKeys.EmailFromAddress],\n widget: {\n type: AXPWidgetsList.Editors.TextBox,\n },\n description: `${I18N}.smtp.from-address.description`,\n })\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.EmailUseSsl,\n title: `${I18N}.smtp.ssl.title`,\n scope: 'P',\n overridableAt: ['T'],\n isInherited: false,\n ...SMTP_CLIENT_CACHE,\n defaultValue: AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS[AXPCommunicationManagementSettingKeys.EmailUseSsl],\n widget: {\n type: AXPWidgetsList.Editors.ToggleSwitch,\n },\n description: `${I18N}.smtp.ssl.description`,\n })\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.EmailUseTls,\n title: `${I18N}.smtp.tls.title`,\n scope: 'P',\n overridableAt: ['T'],\n isInherited: false,\n ...SMTP_CLIENT_CACHE,\n defaultValue: AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS[AXPCommunicationManagementSettingKeys.EmailUseTls],\n widget: {\n type: AXPWidgetsList.Editors.ToggleSwitch,\n },\n description: `${I18N}.smtp.tls.description`,\n })\n .addAction({\n title: `${I18N}.smtp.test.action`,\n icon: 'fa-light fa-paper-plane',\n color: 'primary',\n look: 'outline',\n disabledWhenDirty: true,\n requiredSettingKeys: [\n AXPCommunicationManagementSettingKeys.EmailServer,\n AXPCommunicationManagementSettingKeys.EmailPort,\n AXPCommunicationManagementSettingKeys.EmailFromAddress,\n ],\n command: {\n name: AXMCommunicationManagementCommandKeys.TestSmtp,\n },\n })\n .endSection()\n .endGroup();\n\n this.registerDevToolsRedirectSettings(context);\n }\n\n private registerDevToolsRedirectSettings(context: AXPSettingDefinitionProviderContext): void {\n const section = resolveCommunicationDebugRedirectSection(context);\n if (!section) {\n return;\n }\n\n section\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.DebugRedirectEmailAddress,\n title: `${DEV_TOOLS_I18N}.email.title`,\n scope: 'P',\n overridableAt: [],\n isInherited: false,\n defaultValue:\n AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS[AXPCommunicationManagementSettingKeys.DebugRedirectEmailAddress],\n widget: {\n type: AXPWidgetsList.Editors.TextBox,\n },\n description: `${DEV_TOOLS_I18N}.email.description`,\n })\n .endSection();\n }\n}\n\nfunction resolveCommunicationDebugRedirectSection(context: AXPSettingDefinitionProviderContext) {\n const devTools = context.group(AXP_PLATFORM_DEV_TOOLS_SETTINGS_GROUP);\n if (!devTools) {\n return null;\n }\n\n const hasSection = context\n .getGroup(AXP_PLATFORM_DEV_TOOLS_SETTINGS_GROUP)\n ?.sections.some((section) => section.name === AXP_PLATFORM_DEV_TOOLS_COMMUNICATION_DEBUG_REDIRECT_SECTION);\n\n if (hasSection) {\n return devTools.section(AXP_PLATFORM_DEV_TOOLS_COMMUNICATION_DEBUG_REDIRECT_SECTION);\n }\n\n return devTools.addSection(\n AXP_PLATFORM_DEV_TOOLS_COMMUNICATION_DEBUG_REDIRECT_SECTION,\n `${DEV_TOOLS_I18N}.title`,\n `${DEV_TOOLS_I18N}.description`,\n );\n}\n","import { Injectable } from '@angular/core';\nimport {\n AXPCommunicationManagementSettingKeys,\n RootConfig,\n} from '@acorex-platform/module-communication-management-contracts';\nimport { AXP_TEXT_TEMPLATE_CHANNEL_DEFINITION_PROVIDER } from '@acorex-platform/module-content-management-client';\nimport type {\n AXMTextTemplateChannelDefinition,\n AXMTextTemplateChannelDefinitionProvider,\n} from '@acorex-platform/module-content-management-client/contracts';\n\nconst I18N = `@${RootConfig.config.i18n}:templates.channels`;\n\n//#region ---- Built-in text template channels ----\n\n@Injectable()\nexport class AXMCommunicationTextTemplateChannelDefinitionProvider\n implements AXMTextTemplateChannelDefinitionProvider\n{\n getChannels(): AXMTextTemplateChannelDefinition[] {\n return [\n {\n name: 'email',\n communicationChannelKey: 'email-smtp',\n title: `${I18N}.email`,\n type: 'rich',\n hasSubject: true,\n requiredSettingKeys: [\n AXPCommunicationManagementSettingKeys.EmailServer,\n AXPCommunicationManagementSettingKeys.EmailPort,\n AXPCommunicationManagementSettingKeys.EmailFromAddress,\n ],\n notConfiguredMessageKey: `${I18N}.not-configured.email`,\n configureSettings: {\n group: 'communication',\n section: 'smtp-settings',\n scope: 'T',\n },\n },\n {\n name: 'in-app',\n communicationChannelKey: 'in-app',\n title: `${I18N}.in-app`,\n type: 'plain',\n hasSubject: true,\n },\n ];\n }\n}\n\n//#endregion\n\nexport const communicationTextTemplateChannelProvider = {\n provide: AXP_TEXT_TEMPLATE_CHANNEL_DEFINITION_PROVIDER,\n useClass: AXMCommunicationTextTemplateChannelDefinitionProvider,\n multi: true,\n};\n","//#region ---- Imports ----\n\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport {\n AXPInAppInboxConnectorService,\n AXP_IN_APP_INBOX_I18N,\n isInAppInboxUnread,\n AXPInAppInboxItemComponent,\n} from '../../../in-app/inbox';\nimport { AXPInAppInboxActionService } from '../../../in-app/inbox/in-app-inbox-action.service';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n inject,\n OnInit,\n} from '@angular/core';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n templateUrl: './communication-in-app-inbox-widget.component.html',\n styleUrls: ['./communication-in-app-inbox-widget.component.css'],\n standalone: true,\n imports: [\n CommonModule,\n AXTranslationModule,\n AXPInAppInboxItemComponent,\n AXPStateMessageComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPCommunicationInAppInboxWidgetViewComponent extends AXPValueWidgetComponent<unknown> implements OnInit {\n //#region ----- Services & Dependencies -----\n\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly connector = inject(AXPInAppInboxConnectorService);\n private readonly inboxActions = inject(AXPInAppInboxActionService);\n protected readonly i18n = inject(AXP_IN_APP_INBOX_I18N);\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly maxItems = computed(() => this.options()?.['maxItems'] ?? 10);\n protected readonly showAvatar = computed(() => this.options()?.['showAvatar'] ?? true);\n protected readonly showDate = computed(() => this.options()?.['showDate'] ?? true);\n\n protected readonly inboxItems = computed(() => {\n const items = this.connector.inboxList();\n if (!items?.length) {\n return [];\n }\n\n return items.filter((item) => isInAppInboxUnread(item.readAt)).slice(0, this.maxItems());\n });\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n override ngOnInit(): void {\n super.ngOnInit();\n void this.connector.ensureReady().then(() => this.cdr.detectChanges());\n }\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected async onItemPress(id: string): Promise<void> {\n await this.inboxActions.openItem(id);\n this.cdr.detectChanges();\n }\n\n protected async onDismissUnread(id: string): Promise<void> {\n await this.connector.markAsRead([id]);\n this.cdr.detectChanges();\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"size-full p-3 flex flex-col min-h-0\">\n <div class=\"overflow-auto flex-1 min-h-0 flex flex-col\">\n @for (item of inboxItems(); track item.id) {\n <axp-in-app-inbox-item\n [data]=\"item\"\n [showAvatar]=\"showAvatar()\"\n [showDate]=\"showDate()\"\n [markAsReadLabelKey]=\"i18n.markAsRead\"\n (itemPress)=\"onItemPress($event)\"\n (markAsRead)=\"onDismissUnread($event)\"\n />\n } @empty {\n <axp-state-message\n icon=\"fa-light fa-inbox\"\n [title]=\"i18n.emptyTitle\"\n [description]=\"i18n.emptyDescription\"\n />\n }\n </div>\n</div>\n","//#region ----- Imports -----\n\nimport { defineDashboardWidgetDimensions } from '@acorex-platform/module-dashboard-management-client';\n\n//#endregion\n\n//#region ----- Communication dashboard presets -----\n\n/** Unread in-app inbox dashboard tile. */\nexport const AXP_MY_IN_APP_INBOX_DASHBOARD_DIMENSIONS = defineDashboardWidgetDimensions({\n sm: [[1, 5]],\n md: [\n [3, 4],\n [4, 4],\n ],\n lg: [\n [3, 4],\n [4, 4],\n ],\n xl: [\n [3, 4],\n [4, 4],\n ],\n '2xl': [\n [3, 4],\n [4, 4],\n ],\n '3xl': [\n [3, 4],\n [4, 4],\n ],\n '4xl': [\n [3, 4],\n [4, 4],\n ],\n});\n\n//#endregion\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, cloneProperty } from '@acorex-platform/framework-shared/widget-core';\nimport { AXP_WIDGETS_UTILITY_CATEGORY } from '@acorex-platform/module-dashboard-management-client';\nimport { AXP_MY_IN_APP_INBOX_DASHBOARD_DIMENSIONS } from '../../communication-dashboard-widget.dimensions';\nimport { AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';\nimport {\n AXP_APPEARANCE_PROPERTY_GROUP,\n AXP_DATA_PATH_PROPERTY,\n AXP_STYLING_PROPERTY_GROUP,\n} from '@acorex-platform/framework-client/layout/widgets';\nimport { RootConfig } from '@acorex-platform/module-communication-management-client/contracts';\n\n//#region ---- My in-app inbox dashboard widget config ----\n\nexport const AXPMyInAppInboxDashboardWidget: AXPWidgetConfig = {\n name: RootConfig.widgets.myInAppInboxDashboard,\n title: '@communication-management:widgets.my-in-app-inbox-dashboard.widget-title',\n categories: [AXP_WIDGETS_UTILITY_CATEGORY],\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n description: '@communication-management:widgets.my-in-app-inbox-dashboard.widget-description',\n icon: 'fa-regular fa-inbox',\n properties: [\n cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),\n {\n name: 'maxItems',\n title: '@communication-management:widgets.my-in-app-inbox-dashboard.max-items',\n description: 'Maximum number of unread inbox items to display',\n group: AXP_STYLING_PROPERTY_GROUP,\n schema: {\n defaultValue: 10,\n dataType: 'number',\n interface: {\n name: 'maxItems',\n path: 'options.maxItems',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 1,\n maxValue: 100,\n },\n },\n },\n visible: true,\n },\n {\n name: 'showAvatar',\n title: '@communication-management:widgets.my-in-app-inbox-dashboard.show-avatar',\n description: 'Whether to show avatars in inbox items',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showAvatar',\n path: 'options.showAvatar',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'showDate',\n title: '@communication-management:widgets.my-in-app-inbox-dashboard.show-date',\n description: 'Whether to show date in inbox items',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showDate',\n path: 'options.showDate',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n ],\n components: {\n view: {\n component: () =>\n import('./communication-in-app-inbox-widget.component').then(\n (c) => c.AXPCommunicationInAppInboxWidgetViewComponent,\n ),\n },\n },\n meta: {\n dimensions: AXP_MY_IN_APP_INBOX_DASHBOARD_DIMENSIONS,\n },\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPWidgetDefinitionProvider } from '@acorex-platform/framework-client/layout/widget-core';\nimport { Injectable } from '@angular/core';\nimport { AXPMyInAppInboxDashboardWidget } from './features/dashboard/widgets/my-in-app-inbox';\n\n//#endregion\n\n//#region ---- Communication Management Widgets Provider ----\n\n@Injectable()\nexport class AXMCommunicationManagementWidgetsProvider implements AXPWidgetDefinitionProvider {\n getWidgets() {\n return [AXPMyInAppInboxDashboardWidget];\n }\n}\n\n//#endregion\n","import { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\nimport {\n AXP_MENU_PROVIDER,\n AXP_PROTECTED_ROUTE_GUARDS,\n AXP_SEARCH_PROVIDER,\n AXP_SETTING_DEFINITION_PROVIDER,\n AXP_STATUS_PROVIDERS,\n} from '@acorex-platform/framework-client/common';\nimport { AXPComponentSlotModule, AXP_MODULE_MANIFEST_PROVIDER } from '@acorex-platform/framework-client/core';\nimport { AXP_TASK_BADGE_PROVIDERS } from '@acorex-platform/framework-client/layout/components';\nimport { AXPRootLayoutComponent } from '@acorex-platform/framework-client/themes/default';\nimport { provideCommandSetups } from '@acorex-platform/framework-client/runtime';\nimport { NgModule } from '@angular/core';\nimport { ROUTES, Routes } from '@angular/router';\nimport { AXMCommunicationManagementCommandKeys } from '@acorex-platform/module-communication-management-client/contracts';\nimport { AXMCommunicationInboxBadgeProvider } from './badge.provider';\nimport { AXMCommunicationDeliveryStatusProvider } from './features/communication-delivery-status.provider';\nimport { AXMCommunicationStatusProvider } from './features/communication-status.provider';\nimport {\n communicationInAppInboxConfig,\n communicationInAppInboxI18n,\n} from './features/in-app/communication-in-app-inbox.providers';\nimport { AXMCommunicationInAppInboxPort } from './features/in-app/communication-in-app-inbox.port';\nimport { provideCommunicationInAppRealtimeHandlers } from './features/in-app/communication-in-app-realtime.providers';\nimport { provideCommunicationInAppInboxFallbackSync } from './features/in-app/communication-in-app-inbox-fallback.providers';\nimport { AXMCommunicationInAppInboxSyncStatusService } from './features/in-app/communication-in-app-inbox-sync-status.service';\nimport { communicationInAppNotificationServiceProvider } from './features/in-app/communication-in-app-notification.service';\nimport {\n AXPInAppInboxSlotComponent,\n AXP_IN_APP_INBOX_CONFIG,\n AXP_IN_APP_INBOX_I18N,\n AXP_IN_APP_INBOX_PORT,\n AXP_IN_APP_INBOX_SYNC_STATUS,\n} from './features/in-app/inbox';\nimport { AXMCommunicationUserNotificationsSettingProvider } from './features/settings/communication-user-notifications-settings.provider';\nimport { CommunicationManagementManifest } from './manifest';\n\nimport { AXMCommunicationManagementMenuProvider } from './menu.provider';\nimport { AXMCommunicationManagementPermissionDefinitionProvider } from './permission-definition.provider';\nimport { AXMCommunicationManagementSearchCommandProvider } from './search-command.provider';\nimport { AXMCommunicationManagementSettingProvider } from './settings.provider';\nimport { AXP_WIDGET_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/layout/widget-core';\nimport { communicationTextTemplateChannelProvider } from './features/templates/communication-text-template-channel-definition.provider';\nimport { AXMCommunicationManagementWidgetsProvider } from './widget-definition.provider';\n\n/** @deprecated Legacy notification-management command keys — shimmed to communication email commands. */\nconst LEGACY_NOTIFICATION_EMAIL_SHOW_DIALOG_COMMAND_KEY = 'NotificationManagement:Email:ShowDialog' as const;\nconst LEGACY_NOTIFICATION_EMAIL_SEND_COMMAND_KEY = 'NotificationManagement:Email:Send' as const;\n\nfunction routesFactory(): Routes {\n return [\n {\n path: ':app/my/notification',\n canActivate: [...AXP_PROTECTED_ROUTE_GUARDS],\n data: { rootLayout: true },\n loadComponent: () => AXPRootLayoutComponent,\n title: 'Notifications',\n children: [\n {\n path: '',\n loadComponent: () =>\n import('./features/in-app/communication-in-app-inbox-page.component').then(\n (m) => m.AXMCommunicationInAppInboxPageComponent,\n ),\n data: { reuse: true },\n },\n ],\n },\n ];\n}\n\n@NgModule({\n imports: [\n AXPComponentSlotModule.forChild({\n 'root-header-end': [\n {\n name: 'communication-inbox',\n component: AXPInAppInboxSlotComponent,\n },\n ],\n }),\n ],\n providers: [\n provideCommandSetups([\n {\n key: AXMCommunicationManagementCommandKeys.Send,\n command: () => import('./commands/communication-send.command').then((m) => m.CommunicationSendCommand),\n },\n {\n key: AXMCommunicationManagementCommandKeys.TestSmtp,\n command: () => import('./commands/communication-test-smtp.command').then((m) => m.CommunicationTestSmtpCommand),\n },\n {\n key: AXMCommunicationManagementCommandKeys.EmailShowDialog,\n command: () =>\n import('./features/email/communication-email-show-dialog.command').then(\n (m) => m.CommunicationManagementEmailShowDialogCommand,\n ),\n },\n {\n key: AXMCommunicationManagementCommandKeys.EmailSend,\n command: () =>\n import('./features/email/communication-email-send.command').then(\n (m) => m.CommunicationManagementEmailSendCommand,\n ),\n },\n {\n key: AXMCommunicationManagementCommandKeys.ShowSentMessage,\n command: () =>\n import('./commands/communication-show-sent-message.command').then(\n (m) => m.CommunicationShowSentMessageCommand,\n ),\n },\n {\n key: LEGACY_NOTIFICATION_EMAIL_SHOW_DIALOG_COMMAND_KEY,\n command: () =>\n import('./features/email/communication-email-show-dialog.command').then(\n (m) => m.CommunicationManagementEmailShowDialogCommand,\n ),\n },\n {\n key: LEGACY_NOTIFICATION_EMAIL_SEND_COMMAND_KEY,\n command: () =>\n import('./features/email/communication-email-send.command').then(\n (m) => m.CommunicationManagementEmailSendCommand,\n ),\n },\n ]),\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: CommunicationManagementManifest,\n multi: true,\n },\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMCommunicationManagementPermissionDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMCommunicationManagementMenuProvider,\n multi: true,\n },\n \n {\n provide: AXP_STATUS_PROVIDERS,\n useClass: AXMCommunicationStatusProvider,\n multi: true,\n },\n {\n provide: AXP_STATUS_PROVIDERS,\n useClass: AXMCommunicationDeliveryStatusProvider,\n multi: true,\n },\n {\n provide: AXP_SEARCH_PROVIDER,\n useClass: AXMCommunicationManagementSearchCommandProvider,\n multi: true,\n },\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXMCommunicationManagementSettingProvider,\n multi: true,\n },\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXMCommunicationUserNotificationsSettingProvider,\n multi: true,\n },\n communicationTextTemplateChannelProvider,\n {\n provide: AXP_WIDGET_DEFINITION_PROVIDER,\n useClass: AXMCommunicationManagementWidgetsProvider,\n multi: true,\n },\n {\n provide: AXP_IN_APP_INBOX_PORT,\n useClass: AXMCommunicationInAppInboxPort,\n },\n {\n provide: AXP_IN_APP_INBOX_CONFIG,\n useValue: communicationInAppInboxConfig,\n },\n {\n provide: AXP_IN_APP_INBOX_I18N,\n useValue: communicationInAppInboxI18n,\n },\n {\n provide: AXP_IN_APP_INBOX_SYNC_STATUS,\n useExisting: AXMCommunicationInAppInboxSyncStatusService,\n },\n communicationInAppNotificationServiceProvider,\n {\n provide: AXP_TASK_BADGE_PROVIDERS,\n useClass: AXMCommunicationInboxBadgeProvider,\n multi: true,\n },\n ...provideCommunicationInAppRealtimeHandlers(),\n ...provideCommunicationInAppInboxFallbackSync(),\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFactory,\n },\n ],\n})\nexport class AXMCommunicationManagementModule {}\n","//#region ----- Imports -----\n\nimport type { AXMCommonDashboardEntityModel } from '@acorex-platform/module-dashboard-management-contracts';\nimport { layoutFromDimensions } from '@acorex-platform/module-dashboard-management-client';\n\nimport { AXP_MY_IN_APP_INBOX_DASHBOARD_DIMENSIONS } from './communication-dashboard-widget.dimensions';\n\n//#endregion\n\n//#region ----- Types -----\n\ntype DashboardSeedWidget = AXMCommonDashboardEntityModel['widgets'][number];\ntype DashboardSeedGridSize = readonly [width: number, height: number];\n\n//#endregion\n\n//#region ----- Builders -----\n\nexport function buildMyInAppInboxDashboardWidget(\n id: string,\n x: number,\n y: number,\n size: DashboardSeedGridSize = [4, 3],\n): DashboardSeedWidget {\n const { config, meta } = layoutFromDimensions(id, AXP_MY_IN_APP_INBOX_DASHBOARD_DIMENSIONS, { x, y, lg: size });\n\n return {\n config: {\n ...config,\n title: '@communication-management:widgets.my-in-app-inbox-dashboard.widget-title',\n },\n node: {\n type: 'CommunicationManagement:Widget:Dashboard:MyInAppInboxDashboard',\n meta,\n name: `CommunicationManagement:Widget:Dashboard:MyInAppInboxDashboard-${id}`,\n path: `CommunicationManagement:Widget:Dashboard:MyInAppInboxDashboard-${id}`,\n },\n };\n}\n\n//#endregion\n","import type { AXPSettingDefinitionProviderContext } from '@acorex-platform/framework-client/common';\nimport {\n AXP_COMMUNICATION_DELIVERY_CHANNELS_SETTINGS_SECTION,\n AXP_COMMUNICATION_USER_NOTIFICATIONS_SETTINGS_GROUP,\n} from '@acorex-platform/module-communication-management-contracts';\n\n//#region ---- Delivery channels settings section resolver ----\n\nexport function resolveCommunicationDeliveryChannelsSettingsSection(\n context: AXPSettingDefinitionProviderContext,\n) {\n if (!context.hasGroup(AXP_COMMUNICATION_USER_NOTIFICATIONS_SETTINGS_GROUP)) {\n return null;\n }\n\n const group = context.getGroup(AXP_COMMUNICATION_USER_NOTIFICATIONS_SETTINGS_GROUP);\n const hasSection = group?.sections.some(\n (section) => section.name === AXP_COMMUNICATION_DELIVERY_CHANNELS_SETTINGS_SECTION,\n );\n if (!hasSection) {\n return null;\n }\n\n return context.group(AXP_COMMUNICATION_USER_NOTIFICATIONS_SETTINGS_GROUP)?.section(\n AXP_COMMUNICATION_DELIVERY_CHANNELS_SETTINGS_SECTION,\n ) ?? null;\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["I18N","i1","i2","i3","i4","i5","i6","RootConfig","AXMCommunicationManagementCommandKeys"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-communication-management-client-acorex-platform-module-communication-management-client-09UhY2Rc.mjs","sources":["../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox-local.constants.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox-icon.util.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox.util.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox-local-filter.util.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox-realtime.service.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox.port.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox.connector.service.ts","../../../../libs/modules/communication-management/client/src/lib/badge.provider.ts","../../../../libs/modules/communication-management/client/src/lib/features/communication-delivery-status.provider.ts","../../../../libs/modules/communication-management/client/src/lib/features/communication-status.provider.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/communication-in-app-inbox.providers.ts","../../../../libs/modules/communication-management/client/src/lib/communication-management-client.port.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/communication-in-app-inbox-page-query.util.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox-conversation.util.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/communication-in-app-inbox.port.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/communication-in-app-realtime.providers.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/communication-in-app-inbox-sync-status.service.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/communication-in-app-inbox-fallback.providers.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/communication-in-app-notification.service.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox.types.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox.tokens.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox-sync-status.token.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/components/in-app-inbox-item.component.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/components/in-app-inbox-item.component.html","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox-action.service.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/components/in-app-inbox-panel.component.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/components/in-app-inbox-panel.component.html","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/components/in-app-inbox-slot.component.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/components/in-app-inbox-slot.component.html","../../../../libs/modules/communication-management/client/src/lib/features/settings/communication-user-notifications-settings.provider.ts","../../../../libs/modules/communication-management/client/src/lib/manifest.ts","../../../../libs/modules/communication-management/client/src/lib/menu.provider.ts","../../../../libs/modules/communication-management/client/src/lib/permission-definition.provider.ts","../../../../libs/modules/communication-management/client/src/lib/search-command.provider.ts","../../../../libs/modules/communication-management/client/src/lib/settings.provider.ts","../../../../libs/modules/communication-management/client/src/lib/features/templates/communication-text-template-channel-definition.provider.ts","../../../../libs/modules/communication-management/client/src/lib/features/dashboard/widgets/my-in-app-inbox/communication-in-app-inbox-widget.component.ts","../../../../libs/modules/communication-management/client/src/lib/features/dashboard/widgets/my-in-app-inbox/communication-in-app-inbox-widget.component.html","../../../../libs/modules/communication-management/client/src/lib/features/dashboard/communication-dashboard-widget.dimensions.ts","../../../../libs/modules/communication-management/client/src/lib/features/dashboard/widgets/my-in-app-inbox/communication-in-app-inbox-widget.config.ts","../../../../libs/modules/communication-management/client/src/lib/widget-definition.provider.ts","../../../../libs/modules/communication-management/client/src/lib/communication-management.module.ts","../../../../libs/modules/communication-management/client/src/lib/features/dashboard/dashboard-seed-widget-builders.util.ts","../../../../libs/modules/communication-management/client/src/lib/features/settings/communication-delivery-channels-settings.util.ts","../../../../libs/modules/communication-management/client/src/acorex-platform-module-communication-management-client.ts"],"sourcesContent":["//#region ----- Constants -----\n\n/** Local-entity engine key for the active in-app inbox hot subset. */\nexport const AXP_IN_APP_INBOX_LOCAL_ENTITY_KEY = 'CommunicationManagement.InAppInbox';\n\n/** Max active deliveries kept in the local hot subset. */\nexport const AXP_IN_APP_INBOX_LOCAL_MAX_ITEMS = 100;\n\n/** Legacy IndexedDB name from the inbox-only store (deleted on migrate). */\nexport const AXP_IN_APP_INBOX_LEGACY_DB_NAME = 'ACoreXInAppInbox';\n\n//#endregion\n","//#region ---- In-app inbox leading icon ----\n\nimport type { AXPUserReference } from '@acorex-platform/framework-shared/core';\n\nimport type { AXPInAppInboxItem, AXPInAppInboxPriority } from './in-app-inbox.types';\n\nconst REPORT_GENERATION_DEFINITION_KEY = 'ReportManagement:ReportGeneration';\n\nexport function isInAppInboxRealUserSender(sender?: AXPUserReference): boolean {\n const senderId = sender?.id?.trim();\n const senderName = sender?.fullName?.trim();\n return Boolean(senderId && senderId !== 'system' && senderName && senderName !== senderId);\n}\n\nexport function resolveInAppInboxIconClass(\n item: Pick<AXPInAppInboxItem, 'iconClass' | 'definitionKey' | 'priority' | 'sender'>,\n): string | undefined {\n if (item.iconClass?.trim()) {\n return item.iconClass.trim();\n }\n\n if (isInAppInboxRealUserSender(item.sender)) {\n return undefined;\n }\n\n if (item.definitionKey === REPORT_GENERATION_DEFINITION_KEY) {\n return 'fa-light fa-file-chart-pie';\n }\n\n return resolveInAppInboxPriorityIconClass(item.priority);\n}\n\nfunction resolveInAppInboxPriorityIconClass(priority: AXPInAppInboxPriority | undefined): string {\n switch (priority) {\n case 'Danger':\n return 'fa-light fa-circle-exclamation';\n case 'Warning':\n return 'fa-light fa-triangle-exclamation';\n default:\n return 'fa-light fa-bell';\n }\n}\n\n//#endregion\n","//#region ---- Shared in-app inbox helpers ----\n\nimport type { AXPInAppInboxItem, AXPInAppInboxPriority } from './in-app-inbox.types';\nimport { resolveInAppInboxIconClass } from './in-app-inbox-icon.util';\n\nexport function isInAppInboxUnread(readAt: Date | null | undefined): boolean {\n return readAt == null;\n}\n\nexport function isInAppInboxUnseen(seenAt: Date | null | undefined): boolean {\n return seenAt == null;\n}\n\nexport function getInAppInboxPriorityClass(priority: AXPInAppInboxPriority | undefined): string {\n return priority ?? 'Notice';\n}\n\nexport function sortInAppInboxItems<T extends AXPInAppInboxItem>(items: T[]): T[] {\n return [...items].sort((left, right) => {\n const pinDelta = Number(Boolean(right.isPinned)) - Number(Boolean(left.isPinned));\n if (pinDelta !== 0) {\n return pinDelta;\n }\n return right.createdAt.getTime() - left.createdAt.getTime();\n });\n}\n\nexport function normalizeInAppInboxItem<T extends Partial<AXPInAppInboxItem>>(item: T): AXPInAppInboxItem {\n return {\n id: String(item.id),\n title: item.title ?? '',\n body: item.body ?? '',\n createdAt: item.createdAt ? new Date(item.createdAt) : new Date(),\n seenAt: item.seenAt ? new Date(item.seenAt) : item.seenAt ?? null,\n readAt: item.readAt ? new Date(item.readAt) : item.readAt ?? null,\n sender: item.sender,\n iconClass: item.iconClass ?? resolveInAppInboxIconClass(item as AXPInAppInboxItem),\n showAvatar: item.showAvatar,\n priority: item.priority ?? 'Notice',\n isPinned: item.isPinned ?? false,\n category: item.category,\n definitionKey: item.definitionKey,\n archivedAt: item.archivedAt ? new Date(item.archivedAt) : item.archivedAt ?? null,\n actions: Array.isArray(item.actions) ? item.actions : undefined,\n };\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXP_QUERY_QUICK_SEARCH_FIELD, type AXPFilterQuery } from '@acorex-platform/framework-shared/core';\nimport type { AXPInAppInboxItem } from './in-app-inbox.types';\nimport { isInAppInboxUnread, sortInAppInboxItems } from './in-app-inbox.util';\n\n//#endregion\n\n//#region ----- Local inbox filters -----\n\nexport function isArchiveCategoryFilter(filters: AXPFilterQuery[] | undefined): boolean {\n return filters?.some((filter) => filter.field === 'category' && filter.value === 'Archive') ?? false;\n}\n\n/**\n * Filters and sorts active inbox items in memory (search, unread, priority).\n * Archive is never applied here — callers must use the API for archived rows.\n */\nexport function filterInAppInboxItemsLocally(\n items: AXPInAppInboxItem[],\n filters: AXPFilterQuery[] | undefined,\n): AXPInAppInboxItem[] {\n const active = items.filter((item) => item.archivedAt == null);\n if (!filters?.length) {\n return sortInAppInboxItems(active);\n }\n\n const searchFilter = filters.find(\n (filter) => filter.field === 'all' || filter.field === AXP_QUERY_QUICK_SEARCH_FIELD,\n );\n const searchText =\n searchFilter?.value != null ? String(searchFilter.value).trim().toLowerCase() : '';\n\n const readFilter = filters.find((filter) => filter.field === 'readStatus');\n const unreadOnly = readFilter?.value === 'unread';\n\n const priorityFilter = filters.find((filter) => filter.field === 'priority');\n const priority = priorityFilter?.value ? String(priorityFilter.value) : '';\n\n const definitionFilter = filters.find((filter) => filter.field === 'type');\n const definitionKey = definitionFilter?.value ? String(definitionFilter.value) : '';\n\n const filtered = active.filter((item) => {\n if (unreadOnly && !isInAppInboxUnread(item.readAt)) {\n return false;\n }\n if (priority && item.priority !== priority) {\n return false;\n }\n if (definitionKey && item.definitionKey !== definitionKey) {\n return false;\n }\n if (searchText) {\n const haystack = `${item.title} ${item.body} ${item.sender?.fullName ?? ''}`.toLowerCase();\n if (!haystack.includes(searchText)) {\n return false;\n }\n }\n return true;\n });\n\n return sortInAppInboxItems(filtered);\n}\n\n//#endregion\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport type { AXPInAppInboxChangeEvent } from './in-app-inbox.types';\n\n//#region ---- In-app inbox realtime events ----\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPInAppInboxRealtimeService {\n private readonly changedSubject = new Subject<AXPInAppInboxChangeEvent>();\n\n readonly changed$ = this.changedSubject.asObservable();\n\n notifyChanged(event: AXPInAppInboxChangeEvent): void {\n this.changedSubject.next(event);\n }\n}\n\n//#endregion\n","//#region ---- In-app inbox data port ----\n\nimport { InjectionToken } from '@angular/core';\nimport type {\n AXPInAppInboxCapabilities,\n AXPInAppInboxListResult,\n AXPInAppInboxLoadQuery,\n} from './in-app-inbox.types';\n\n/**\n * Module-backed inbox data source. Communication-management registers the primary\n * implementation.\n */\nexport interface AXPInAppInboxPort {\n readonly capabilities: AXPInAppInboxCapabilities;\n loadInbox(query?: AXPInAppInboxLoadQuery): Promise<AXPInAppInboxListResult>;\n /** Fetch specific deliveries by id (used for realtime delta sync). */\n loadByIds?(ids: string[]): Promise<AXPInAppInboxListResult>;\n markSeen(ids: string[]): Promise<void>;\n markRead(ids: string[]): Promise<void>;\n markAllRead(): Promise<void>;\n togglePin?(id: string): Promise<void>;\n archive?(ids: string[]): Promise<void>;\n deleteDeliveries?(ids: string[]): Promise<void>;\n}\n\nexport const AXP_IN_APP_INBOX_PORT = new InjectionToken<AXPInAppInboxPort>('AXP_IN_APP_INBOX_PORT');\n\n//#endregion\n","//#region ----- Imports -----\n\nimport {\n AXPLocalEntityEngine,\n AXPLocalEntityRealtimeBridge,\n} from '@acorex-platform/framework-client/common';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport type { AXPFilterQuery, AXPPagedListResult } from '@acorex-platform/framework-shared/core';\nimport { computed, DestroyRef, inject, Injectable, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { debounceTime, distinctUntilChanged } from 'rxjs';\nimport {\n AXP_IN_APP_INBOX_LEGACY_DB_NAME,\n AXP_IN_APP_INBOX_LOCAL_ENTITY_KEY,\n AXP_IN_APP_INBOX_LOCAL_MAX_ITEMS,\n} from './in-app-inbox-local.constants';\nimport {\n filterInAppInboxItemsLocally,\n isArchiveCategoryFilter,\n} from './in-app-inbox-local-filter.util';\nimport { AXPInAppInboxRealtimeService } from './in-app-inbox-realtime.service';\nimport { AXP_IN_APP_INBOX_PORT, type AXPInAppInboxPort } from './in-app-inbox.port';\nimport type { AXPInAppInboxItem } from './in-app-inbox.types';\nimport {\n isInAppInboxUnread,\n isInAppInboxUnseen,\n normalizeInAppInboxItem,\n sortInAppInboxItems,\n} from './in-app-inbox.util';\n\n//#endregion\n\n//#region ----- Types -----\n\ntype AXPInAppInboxListResult = Awaited<ReturnType<AXPInAppInboxPort['loadInbox']>>;\n\ntype TrackedPageQuery = {\n skip: number;\n take: number;\n filters: AXPFilterQuery[];\n mode: 'local' | 'archive';\n};\n\n//#endregion\n\n//#region ----- Shared in-app inbox connector -----\n\n/**\n * Single source of truth for active in-app inbox UI.\n * Active items live in the shared local-entity engine (max 100) and sync via realtime / reconnect.\n * Archived views always load from the API.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPInAppInboxConnectorService {\n private readonly port = inject(AXP_IN_APP_INBOX_PORT);\n private readonly realtime = inject(AXPInAppInboxRealtimeService);\n private readonly engine = inject(AXPLocalEntityEngine);\n private readonly localBridge = inject(AXPLocalEntityRealtimeBridge);\n private readonly sessionService = inject(AXPSessionService);\n private readonly destroyRef = inject(DestroyRef);\n\n private readonly entityKey = AXP_IN_APP_INBOX_LOCAL_ENTITY_KEY;\n private readonly localItems = this.engine.itemsSignal(this.entityKey);\n\n private readonly isLoading = signal(false);\n private readonly pageLoading = signal(false);\n private readonly error = signal<string | null>(null);\n private readonly archivePageItems = signal<AXPInAppInboxItem[]>([]);\n private readonly archiveTotalCount = signal(0);\n private readonly pageQuery = signal<TrackedPageQuery | null>(null);\n private pendingRealtimeRefresh = false;\n private bootstrapPromise: Promise<void> | null = null;\n private syncInFlight: Promise<AXPInAppInboxListResult> | null = null;\n private boundUserKey: string | null = null;\n private legacyDbCleanupDone = false;\n\n readonly capabilities = this.port.capabilities;\n readonly loading = computed(() => this.isLoading());\n readonly pageLoadingState = computed(() => this.pageLoading());\n readonly errorMessage = computed(() => this.error());\n readonly inboxList = computed(() => this.readLocalItems());\n readonly total = computed(() => {\n if (this.pageQuery()?.mode === 'archive') {\n return this.archiveTotalCount();\n }\n return this.readLocalItems().length;\n });\n readonly pagedInboxList = computed(() => {\n const query = this.pageQuery();\n if (!query) {\n return [];\n }\n if (query.mode === 'archive') {\n return this.archivePageItems();\n }\n const filtered = filterInAppInboxItemsLocally(this.readLocalItems(), query.filters);\n return filtered.slice(query.skip, query.skip + query.take);\n });\n readonly pagedTotal = computed(() => {\n const query = this.pageQuery();\n if (!query) {\n return 0;\n }\n if (query.mode === 'archive') {\n return this.archiveTotalCount();\n }\n return filterInAppInboxItemsLocally(this.readLocalItems(), query.filters).length;\n });\n readonly unreadCount = computed(\n () => this.readLocalItems().filter((item) => isInAppInboxUnread(item.readAt)).length,\n );\n\n constructor() {\n this.engine.registerPolicy(this.entityKey, {\n mode: 'local-first',\n maxItems: AXP_IN_APP_INBOX_LOCAL_MAX_ITEMS,\n sortField: 'createdAt',\n role: 'entity',\n });\n\n this.localBridge.register(this.entityKey, {\n fetchByIds: this.port.loadByIds ? (ids) => this.fetchActiveByIds(ids) : undefined,\n fetchHot: () => this.fetchActiveHot(),\n });\n\n this.sessionService.isReadyForAppScopedApi$\n .pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef))\n .subscribe((isReady) => {\n if (isReady) {\n void this.ensureReady();\n return;\n }\n void this.clearInboxState();\n });\n\n this.realtime.changed$.pipe(debounceTime(100), takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n void this.handleRealtimeEvent(event);\n });\n }\n\n /** Hydrate from IndexedDB then sync active inbox from the server (idempotent). */\n ensureReady(): Promise<void> {\n if (!this.canLoadInbox()) {\n return Promise.resolve();\n }\n if (!this.bootstrapPromise) {\n this.bootstrapPromise = this.bootstrap();\n }\n return this.bootstrapPromise;\n }\n\n async refresh(): Promise<AXPInAppInboxListResult> {\n if (!this.canLoadInbox()) {\n return { items: [], total: 0 };\n }\n await this.ensureReady();\n return this.syncActiveFromServer();\n }\n\n async loadPage(\n filtersOrSkip: AXPFilterQuery[] | number,\n skipOrTake?: number,\n takeArg?: number,\n ): Promise<AXPPagedListResult<AXPInAppInboxItem>> {\n const filters = Array.isArray(filtersOrSkip) ? filtersOrSkip : [];\n const skip = Array.isArray(filtersOrSkip) ? (skipOrTake ?? 0) : filtersOrSkip;\n const take = Array.isArray(filtersOrSkip) ? (takeArg ?? 10) : (skipOrTake ?? 10);\n const mode: TrackedPageQuery['mode'] = isArchiveCategoryFilter(filters) ? 'archive' : 'local';\n\n this.pageQuery.set({ skip, take, filters, mode });\n\n if (mode === 'archive') {\n if (!this.canLoadInbox()) {\n this.archivePageItems.set([]);\n this.archiveTotalCount.set(0);\n return { items: [], total: 0 };\n }\n return this.loadArchivePage(filters, skip, take);\n }\n\n if (this.canLoadInbox()) {\n await this.ensureReady();\n }\n\n this.pageLoading.set(false);\n return { items: this.pagedInboxList(), total: this.pagedTotal() };\n }\n\n async markUnseenAsSeen(): Promise<void> {\n if (!this.port.capabilities.seenTracking || !this.canLoadInbox()) {\n return;\n }\n\n await this.ensureReady();\n\n const unseenIds = this.readLocalItems()\n .filter((item) => isInAppInboxUnseen(item.seenAt))\n .map((item) => item.id);\n\n if (unseenIds.length === 0) {\n return;\n }\n\n const now = new Date().toISOString();\n await this.engine.patchMany(this.entityKey, unseenIds, (item) =>\n item['seenAt'] ? item : { ...item, seenAt: now },\n );\n\n try {\n await this.port.markSeen(unseenIds);\n } catch (err) {\n this.error.set(err instanceof Error ? err.message : 'Failed to mark inbox as seen');\n await this.syncActiveFromServer();\n }\n }\n\n async markAsRead(ids: string[]): Promise<void> {\n if (ids.length === 0 || !this.port.capabilities.readTracking || !this.canLoadInbox()) {\n return;\n }\n\n await this.ensureReady();\n\n const now = new Date().toISOString();\n await this.engine.patchMany(this.entityKey, ids, (item) => ({\n ...item,\n seenAt: item['seenAt'] ?? now,\n readAt: item['readAt'] ?? now,\n }));\n\n try {\n await this.port.markRead(ids);\n } catch (err) {\n this.error.set(err instanceof Error ? err.message : 'Failed to mark inbox as read');\n await this.localBridge.apply({ entityKey: this.entityKey, type: 'upsert', ids });\n }\n }\n\n async markAllAsRead(): Promise<void> {\n if (!this.port.capabilities.readTracking || !this.canLoadInbox()) {\n return;\n }\n\n await this.ensureReady();\n\n const now = new Date().toISOString();\n await this.engine.patchAll(this.entityKey, (item) => {\n const readAt = item['readAt'];\n if (readAt != null) {\n return item;\n }\n return { ...item, readAt: now, seenAt: item['seenAt'] ?? now };\n });\n\n try {\n await this.port.markAllRead();\n } catch (err) {\n this.error.set(err instanceof Error ? err.message : 'Failed to mark all as read');\n await this.syncActiveFromServer();\n }\n }\n\n async togglePin(id: string): Promise<void> {\n if (!this.port.capabilities.pinSupport || !this.port.togglePin || !this.canLoadInbox()) {\n return;\n }\n\n await this.ensureReady();\n\n const current = this.readLocalItems().find((item) => item.id === id);\n if (current) {\n await this.engine.patchMany(this.entityKey, [id], (item) => ({\n ...item,\n isPinned: !Boolean(item['isPinned']),\n }));\n }\n\n try {\n await this.port.togglePin(id);\n await this.localBridge.apply({ entityKey: this.entityKey, type: 'upsert', ids: [id] });\n } catch (err) {\n this.error.set(err instanceof Error ? err.message : 'Failed to toggle pin');\n await this.localBridge.apply({ entityKey: this.entityKey, type: 'upsert', ids: [id] });\n }\n }\n\n async archive(ids: string[]): Promise<void> {\n if (!this.port.archive || ids.length === 0 || !this.canLoadInbox()) {\n return;\n }\n\n await this.ensureReady();\n await this.engine.removeMany(this.entityKey, ids);\n\n try {\n await this.port.archive(ids);\n } catch (err) {\n this.error.set(err instanceof Error ? err.message : 'Failed to archive inbox items');\n await this.syncActiveFromServer();\n }\n\n const query = this.pageQuery();\n if (query?.mode === 'archive') {\n await this.loadArchivePage(query.filters, query.skip, query.take);\n }\n }\n\n async deleteOne(id: string): Promise<void> {\n if (!this.port.deleteDeliveries || !this.canLoadInbox()) {\n return;\n }\n\n await this.ensureReady();\n await this.engine.removeMany(this.entityKey, [id]);\n\n try {\n await this.port.deleteDeliveries([id]);\n } catch (err) {\n this.error.set(err instanceof Error ? err.message : 'Failed to delete inbox item');\n await this.syncActiveFromServer();\n }\n\n const query = this.pageQuery();\n if (query?.mode === 'archive') {\n await this.loadArchivePage(query.filters, query.skip, query.take);\n }\n }\n\n //#region ----- Bootstrap & sync -----\n\n private async bootstrap(): Promise<void> {\n if (!this.canLoadInbox()) {\n return;\n }\n\n try {\n this.deleteLegacyInboxDb();\n this.boundUserKey = this.engine.resolveUserKey();\n await this.engine.hydrate(this.entityKey);\n if (!this.boundUserKey) {\n return;\n }\n await this.syncActiveFromServer();\n } catch (err) {\n this.error.set(err instanceof Error ? err.message : 'Failed to bootstrap inbox');\n }\n }\n\n private async syncActiveFromServer(): Promise<AXPInAppInboxListResult> {\n if (!this.canLoadInbox()) {\n return { items: [], total: 0 };\n }\n\n if (this.syncInFlight) {\n return this.syncInFlight;\n }\n\n this.syncInFlight = this.syncActiveFromServerInternal();\n try {\n return await this.syncInFlight;\n } finally {\n this.syncInFlight = null;\n }\n }\n\n private async syncActiveFromServerInternal(): Promise<AXPInAppInboxListResult> {\n if (!this.canLoadInbox()) {\n return { items: [], total: 0 };\n }\n\n try {\n this.isLoading.set(true);\n this.error.set(null);\n const response = await this.fetchActiveHot();\n const items = sortInAppInboxItems(\n response.items.map((item) => normalizeInAppInboxItem(item as AXPInAppInboxItem)),\n );\n await this.engine.replaceAll(this.entityKey, items.map((item) => this.toPayload(item)));\n const local = this.readLocalItems();\n return { items: local, total: local.length };\n } catch (err) {\n this.error.set(err instanceof Error ? err.message : 'Failed to load inbox');\n const local = this.readLocalItems();\n return { items: local, total: local.length };\n } finally {\n this.isLoading.set(false);\n if (this.pendingRealtimeRefresh) {\n this.pendingRealtimeRefresh = false;\n void this.syncActiveFromServer();\n }\n }\n }\n\n private async fetchActiveHot(): Promise<AXPPagedListResult<unknown>> {\n if (!this.canLoadInbox()) {\n return { items: [], total: 0 };\n }\n\n const response = await this.port.loadInbox({\n skip: 0,\n take: AXP_IN_APP_INBOX_LOCAL_MAX_ITEMS,\n excludeArchived: true,\n });\n return {\n items: response.items.map((item) => this.toPayload(normalizeInAppInboxItem(item))),\n total: response.total,\n };\n }\n\n private async fetchActiveByIds(ids: string[]): Promise<unknown[]> {\n if (!this.canLoadInbox() || !this.port.loadByIds) {\n return [];\n }\n\n const result = await this.port.loadByIds(ids);\n return result.items\n .filter((item) => item.archivedAt == null)\n .map((item) => this.toPayload(normalizeInAppInboxItem(item)));\n }\n\n //#endregion\n\n //#region ----- Page views -----\n\n private async loadArchivePage(\n filters: AXPFilterQuery[],\n skip: number,\n take: number,\n ): Promise<AXPPagedListResult<AXPInAppInboxItem>> {\n if (!this.canLoadInbox()) {\n this.archivePageItems.set([]);\n this.archiveTotalCount.set(0);\n return { items: [], total: 0 };\n }\n\n try {\n this.pageLoading.set(true);\n this.error.set(null);\n const result = await this.port.loadInbox({\n skip,\n take,\n filters,\n excludeArchived: false,\n });\n const items = sortInAppInboxItems(result.items.map((item) => normalizeInAppInboxItem(item)));\n this.archivePageItems.set(items);\n this.archiveTotalCount.set(result.total);\n return { items, total: result.total };\n } catch (err) {\n this.error.set(err instanceof Error ? err.message : 'Failed to load archived inbox');\n this.archivePageItems.set([]);\n this.archiveTotalCount.set(0);\n return { items: [], total: 0 };\n } finally {\n this.pageLoading.set(false);\n }\n }\n\n //#endregion\n\n //#region ----- Realtime -----\n\n private async handleRealtimeEvent(event: {\n type: string;\n ids?: string[];\n }): Promise<void> {\n if (!this.canLoadInbox()) {\n return;\n }\n\n await this.ensureReady();\n\n if (event.type === 'seen' || event.type === 'read') {\n // Local optimistic path already patched; ignore echo noise.\n return;\n }\n\n if ((event.type === 'deleted' || event.type === 'archived') && event.ids?.length) {\n await this.localBridge.apply({\n entityKey: this.entityKey,\n type: 'remove',\n ids: event.ids,\n });\n const query = this.pageQuery();\n if (query?.mode === 'archive') {\n await this.loadArchivePage(query.filters, query.skip, query.take);\n }\n return;\n }\n\n if (this.isLoading()) {\n this.pendingRealtimeRefresh = true;\n return;\n }\n\n if (event.ids?.length) {\n await this.localBridge.apply({\n entityKey: this.entityKey,\n type: 'upsert',\n ids: event.ids,\n });\n return;\n }\n\n await this.localBridge.apply({ entityKey: this.entityKey, type: 'invalidate' });\n }\n\n //#endregion\n\n //#region ----- Local helpers -----\n\n private canLoadInbox(): boolean {\n return this.sessionService.isReadyForAppScopedApi;\n }\n\n private async clearInboxState(): Promise<void> {\n this.bootstrapPromise = null;\n this.syncInFlight = null;\n this.boundUserKey = null;\n this.pendingRealtimeRefresh = false;\n this.pageQuery.set(null);\n this.archivePageItems.set([]);\n this.archiveTotalCount.set(0);\n this.error.set(null);\n this.isLoading.set(false);\n this.pageLoading.set(false);\n await this.engine.clear(this.entityKey);\n }\n\n private readLocalItems(): AXPInAppInboxItem[] {\n return sortInAppInboxItems(this.localItems().map((row) => normalizeInAppInboxItem(row as Partial<AXPInAppInboxItem>)));\n }\n\n private toPayload(item: AXPInAppInboxItem): Record<string, unknown> {\n return {\n id: item.id,\n title: item.title,\n body: item.body,\n createdAt: item.createdAt.toISOString(),\n seenAt: item.seenAt ? item.seenAt.toISOString() : null,\n readAt: item.readAt ? item.readAt.toISOString() : null,\n sender: item.sender,\n iconClass: item.iconClass,\n showAvatar: item.showAvatar,\n priority: item.priority ?? 'Notice',\n isPinned: Boolean(item.isPinned),\n category: item.category,\n definitionKey: item.definitionKey,\n archivedAt: item.archivedAt ? item.archivedAt.toISOString() : null,\n actions: item.actions,\n };\n }\n\n private deleteLegacyInboxDb(): void {\n if (this.legacyDbCleanupDone || typeof indexedDB === 'undefined') {\n return;\n }\n this.legacyDbCleanupDone = true;\n try {\n indexedDB.deleteDatabase(AXP_IN_APP_INBOX_LEGACY_DB_NAME);\n } catch {\n // Best-effort cleanup of the pre-engine inbox DB.\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXPTaskBadgeProvider } from '@acorex-platform/framework-client/layout/components';\nimport { AXPInAppInboxConnectorService } from './features/in-app/inbox/in-app-inbox.connector.service';\nimport { computed, inject, Injectable } from '@angular/core';\n\n//#region ---- Communication in-app inbox badge ----\n\n@Injectable()\nexport class AXMCommunicationInboxBadgeProvider implements AXPTaskBadgeProvider {\n private readonly inbox = inject(AXPInAppInboxConnectorService);\n\n readonly key = 'badge-communication-inbox';\n readonly count = computed(() => this.inbox.unreadCount());\n}\n\n//#endregion\n","import { AXStyleColorType } from '@acorex/cdk/common';\nimport {\n AXP_COMMUNICATION_DELIVERY_STATUS_DEFINITION_KEY,\n AXP_COMMUNICATION_DELIVERY_STATUS_PENDING,\n type CommunicationDeliveryStatus,\n} from '@acorex-platform/module-communication-management-client/contracts';\nimport { AXPStatusProvider } from '@acorex-platform/framework-shared/core';\n\nconst I18N = '@communication-management:entities.communication-delivery.states';\n\n//#region ---- Communication delivery status provider ----\n\n/** Engine-managed delivery lifecycle — read-only in the UI. */\nexport class AXMCommunicationDeliveryStatusProvider extends AXPStatusProvider {\n readonly key = AXP_COMMUNICATION_DELIVERY_STATUS_DEFINITION_KEY;\n\n readonly defaultStatus: CommunicationDeliveryStatus = AXP_COMMUNICATION_DELIVERY_STATUS_PENDING;\n\n readonly statuses = [\n { name: 'Pending' as const, title: `${I18N}.pending`, color: 'secondary' as AXStyleColorType, generateView: true, isInitial: true },\n { name: 'Queued' as const, title: `${I18N}.queued`, color: 'info' as AXStyleColorType, generateView: true },\n { name: 'Processing' as const, title: `${I18N}.processing`, color: 'primary' as AXStyleColorType, generateView: true },\n { name: 'Accepted' as const, title: `${I18N}.accepted`, color: 'info' as AXStyleColorType, generateView: true },\n { name: 'Sent' as const, title: `${I18N}.sent`, color: 'warning' as AXStyleColorType, generateView: true },\n { name: 'Delivered' as const, title: `${I18N}.delivered`, color: 'success' as AXStyleColorType, generateView: true, isFinal: true },\n { name: 'Failed' as const, title: `${I18N}.failed`, color: 'danger' as AXStyleColorType, generateView: true, isFinal: true },\n { name: 'RetryScheduled' as const, title: `${I18N}.retry-scheduled`, color: 'warning' as AXStyleColorType, generateView: true },\n { name: 'Cancelled' as const, title: `${I18N}.cancelled`, color: 'secondary' as AXStyleColorType, generateView: true, isFinal: true },\n { name: 'DeadLettered' as const, title: `${I18N}.dead-lettered`, color: 'danger' as AXStyleColorType, generateView: true, isFinal: true },\n ];\n\n readonly transitions = [];\n}\n\n//#endregion\n","import { AXStyleColorType } from '@acorex/cdk/common';\nimport {\n AXP_COMMUNICATION_STATUS_DEFINITION_KEY,\n AXP_COMMUNICATION_STATUS_PENDING,\n type CommunicationAggregateStatus,\n} from '@acorex-platform/module-communication-management-client/contracts';\nimport { AXPStatusProvider } from '@acorex-platform/framework-shared/core';\n\nconst I18N = '@communication-management:entities.communication.states';\n\n//#region ---- Communication status provider ----\n\n/** Engine-managed aggregate communication status — read-only in the UI. */\nexport class AXMCommunicationStatusProvider extends AXPStatusProvider {\n readonly key = AXP_COMMUNICATION_STATUS_DEFINITION_KEY;\n\n readonly defaultStatus: CommunicationAggregateStatus = AXP_COMMUNICATION_STATUS_PENDING;\n\n readonly statuses = [\n { name: 'Pending' as const, title: `${I18N}.pending`, color: 'secondary' as AXStyleColorType, generateView: true, isInitial: true },\n { name: 'Processing' as const, title: `${I18N}.processing`, color: 'primary' as AXStyleColorType, generateView: true },\n { name: 'Completed' as const, title: `${I18N}.completed`, color: 'success' as AXStyleColorType, generateView: true, isFinal: true },\n { name: 'Failed' as const, title: `${I18N}.failed`, color: 'danger' as AXStyleColorType, generateView: true, isFinal: true },\n { name: 'Cancelled' as const, title: `${I18N}.cancelled`, color: 'secondary' as AXStyleColorType, generateView: true, isFinal: true },\n ];\n\n readonly transitions = [];\n}\n\n//#endregion\n","import type { AXPInAppInboxConfig, AXPInAppInboxI18nKeys } from './inbox/in-app-inbox.types';\n\n//#region ---- Communication in-app inbox registration values ----\n\nexport const communicationInAppInboxConfig: AXPInAppInboxConfig = {\n headerIconClass: 'fa-regular fa-bell',\n viewAllRoute: (appName) => [`/${appName}/my/notification`],\n settingsRoute: (appName) => [`/${appName}/settings/user/communication-notifications`],\n};\n\nexport const communicationInAppInboxI18n: AXPInAppInboxI18nKeys = {\n panelTitle: '@communication-management:in-app.panel.title',\n unread: '@communication-management:in-app.tabs.unread',\n all: '@communication-management:in-app.tabs.all',\n markAllAsRead: '@communication-management:in-app.actions.mark-all-read',\n viewAll: '@communication-management:in-app.actions.view-all',\n emptyTitle: '@communication-management:in-app.state.empty.title',\n emptyDescription: '@communication-management:in-app.state.empty.description',\n pageTitle: '@communication-management:in-app.page.title',\n pageDescriptionNone: '@communication-management:in-app.page.description.none',\n pageDescriptionUnread: '@communication-management:in-app.page.description.unread',\n pageDescriptionAllRead: '@communication-management:in-app.page.description.all-read',\n refresh: '@communication-management:in-app.actions.refresh',\n pin: '@general:actions.pin.title',\n unpin: '@general:actions.unpin.title',\n delete: '@communication-management:in-app.actions.delete',\n archive: '@communication-management:in-app.actions.archive',\n markAsRead: '@communication-management:in-app.actions.mark-as-read',\n selectItems: '@communication-management:in-app.actions.select-items',\n clearFilters: '@communication-management:in-app.actions.clear-filters',\n liveUpdatesOffline: '@communication-management:in-app.live-updates-offline',\n};\n\n//#endregion\n","import type {\n CommunicationDeliveryEngagementRequest,\n CommunicationDeliveryEngagementResult,\n CommunicationDeliveryMutationResult,\n CommunicationSendInput,\n CommunicationSendResult,\n CommunicationSmtpTestInput,\n CommunicationSmtpTestResult,\n} from '@acorex-platform/module-communication-management-client/contracts';\n\nexport abstract class AXPCommunicationManagementClient {\n abstract send(input: CommunicationSendInput): Promise<CommunicationSendResult>;\n abstract markInAppSeen(request: CommunicationDeliveryEngagementRequest): Promise<CommunicationDeliveryEngagementResult>;\n abstract markInAppRead(request: CommunicationDeliveryEngagementRequest): Promise<CommunicationDeliveryEngagementResult>;\n abstract markAllInAppRead(): Promise<CommunicationDeliveryEngagementResult>;\n abstract toggleInAppPin(request: CommunicationDeliveryEngagementRequest): Promise<CommunicationDeliveryMutationResult>;\n abstract archiveInApp(request: CommunicationDeliveryEngagementRequest): Promise<CommunicationDeliveryMutationResult>;\n abstract deleteInApp(request: CommunicationDeliveryEngagementRequest): Promise<CommunicationDeliveryMutationResult>;\n abstract testSmtp(input: CommunicationSmtpTestInput): Promise<CommunicationSmtpTestResult>;\n}\n","import { AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport { AXPFilterQuery, AXPQueryRequest, AXP_QUERY_QUICK_SEARCH_FIELD } from '@acorex-platform/framework-shared/core';\n\nconst UNREAD_DELIVERY_FILTER: AXDataSourceFilterOption = {\n logic: 'or',\n filters: [\n { field: 'readAt', operator: { type: 'isNull' }, value: null },\n { field: 'readAt', operator: { type: 'equal' }, value: false },\n ],\n};\n\nconst INBOX_CATEGORY_FILTER: AXDataSourceFilterOption = {\n field: 'archivedAt',\n operator: { type: 'isNull' },\n value: null,\n};\n\nconst ARCHIVE_CATEGORY_FILTER = {\n field: 'archivedAt',\n operator: { type: 'isNotEmpty' },\n} as unknown as AXDataSourceFilterOption;\n\nexport function buildCommunicationInAppInboxPageQuery(\n filters: AXPFilterQuery[],\n skip: number,\n take: number,\n communicationIds?: string[],\n): AXPQueryRequest {\n const conditions: AXDataSourceFilterOption[] = [\n { field: 'channel', operator: { type: 'equal' }, value: 'in-app' },\n ];\n\n const readFilter = filters.find((f) => f.field === 'readStatus');\n if (readFilter?.value === 'unread') {\n conditions.push(UNREAD_DELIVERY_FILTER);\n }\n\n const categoryFilter = filters.find((f) => f.field === 'category');\n if (categoryFilter?.value === 'Archive') {\n conditions.push(ARCHIVE_CATEGORY_FILTER);\n } else {\n conditions.push(INBOX_CATEGORY_FILTER);\n }\n\n if (communicationIds?.length) {\n conditions.push({\n logic: 'or',\n filters: communicationIds.map((id) => ({\n field: 'communicationId',\n operator: { type: 'equal' as const },\n value: id,\n })),\n });\n } else if (communicationIds?.length === 0) {\n conditions.push({\n field: 'id',\n operator: { type: 'equal' },\n value: '__no_results__',\n });\n }\n\n return {\n skip,\n take,\n sort: [\n { field: 'isPinned', dir: 'desc' },\n { field: 'deliveredAt', dir: 'desc' },\n ],\n filter: { logic: 'and', filters: conditions },\n };\n}\n\nexport function resolveCommunicationInboxCommunicationFilters(\n filters: AXPFilterQuery[],\n): { searchText?: string; definitionKey?: string; priority?: string } {\n const searchFilter = filters.find(\n (f) => f.field === 'all' || f.field === AXP_QUERY_QUICK_SEARCH_FIELD,\n );\n const searchText = searchFilter?.value != null ? String(searchFilter.value).trim() : '';\n\n const typeFilter = filters.find((f) => f.field === 'type');\n const definitionKey = typeFilter?.value ? String(typeFilter.value) : undefined;\n\n const priorityFilter = filters.find((f) => f.field === 'priority');\n const priority = priorityFilter?.value ? String(priorityFilter.value) : undefined;\n\n return {\n searchText: searchText || undefined,\n definitionKey,\n priority,\n };\n}\n","//#region ---- Conversation in-app inbox mapping ----\n\nimport type { AXPUserReference } from '@acorex-platform/framework-shared/core';\n\nimport type { AXPInAppInboxItem } from './in-app-inbox.types';\n\nexport const IN_APP_CONVERSATION_CHAT_DEFINITION_KEY = 'conversation-chat-message';\n\nexport const IN_APP_CONVERSATION_OPEN_CHAT_COMMAND = 'Conversation:OpenChat';\n\nexport interface ParsedConversationInAppCorrelation {\n conversationId: string;\n messageId: string;\n senderUserId?: string;\n}\n\nexport function parseConversationInAppCorrelationId(\n correlationId: string | null | undefined,\n): ParsedConversationInAppCorrelation | undefined {\n const scoped = correlationId?.trim();\n if (!scoped?.startsWith('conversation:')) {\n return undefined;\n }\n\n const segments = scoped.split(':');\n if (segments.length < 3) {\n return undefined;\n }\n\n const conversationId = segments[1]?.trim();\n const messageId = segments[2]?.trim();\n if (!conversationId || !messageId) {\n return undefined;\n }\n\n const senderUserId = segments[3]?.trim() || undefined;\n return { conversationId, messageId, senderUserId };\n}\n\nfunction readSenderUserIdFromActions(\n actions: AXPInAppInboxItem['actions'],\n): string | undefined {\n const options = actions?.[0]?.command?.options;\n if (!options || typeof options !== 'object') {\n return undefined;\n }\n\n const senderUserId = options['senderUserId'];\n return typeof senderUserId === 'string' && senderUserId.trim() ? senderUserId.trim() : undefined;\n}\n\nfunction resolveConversationSenderName(\n title: string | undefined,\n body: string | undefined,\n): string | undefined {\n const bodyText = body?.trim();\n if (bodyText?.includes(':')) {\n const prefix = bodyText.slice(0, bodyText.indexOf(':')).trim();\n if (prefix) {\n return prefix;\n }\n }\n\n const titleText = title?.trim();\n return titleText || undefined;\n}\n\nexport function resolveConversationInAppInboxSender(input: {\n definitionKey?: string;\n title?: string;\n body?: string;\n correlationId?: string | null;\n actions?: AXPInAppInboxItem['actions'];\n}): AXPUserReference | undefined {\n if (input.definitionKey !== IN_APP_CONVERSATION_CHAT_DEFINITION_KEY) {\n return undefined;\n }\n\n const parsed = parseConversationInAppCorrelationId(input.correlationId);\n const senderUserId = parsed?.senderUserId ?? readSenderUserIdFromActions(input.actions);\n const senderName = resolveConversationSenderName(input.title, input.body);\n\n if (!senderUserId || !senderName || senderUserId === 'system') {\n return undefined;\n }\n\n return { id: senderUserId, fullName: senderName };\n}\n\nexport function resolveConversationInAppInboxActions(input: {\n definitionKey?: string;\n correlationId?: string | null;\n actions?: AXPInAppInboxItem['actions'];\n}): AXPInAppInboxItem['actions'] | undefined {\n if (input.definitionKey !== IN_APP_CONVERSATION_CHAT_DEFINITION_KEY) {\n return input.actions;\n }\n\n if (input.actions?.some((action) => action.command?.name?.trim())) {\n return input.actions;\n }\n\n const parsed = parseConversationInAppCorrelationId(input.correlationId);\n if (!parsed?.conversationId) {\n return input.actions;\n }\n\n return [\n {\n title: '@conversation:in-app.actions.open-chat',\n command: {\n name: IN_APP_CONVERSATION_OPEN_CHAT_COMMAND,\n options: {\n conversationId: parsed.conversationId,\n ...(parsed.senderUserId ? { senderUserId: parsed.senderUserId } : {}),\n },\n },\n },\n ];\n}\n\n//#endregion\n","import { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport type { AXPFilterQuery } from '@acorex-platform/framework-shared/core';\nimport {\n RootConfig,\n resolveCommunicationMessage,\n type AXMCommunicationDeliveryModel,\n type AXMCommunicationModel,\n type CommunicationPriority,\n} from '@acorex-platform/module-communication-management-client/contracts';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPCommunicationManagementClient } from '../../communication-management-client.port';\nimport {\n buildCommunicationInAppInboxPageQuery,\n resolveCommunicationInboxCommunicationFilters,\n} from './communication-in-app-inbox-page-query.util';\nimport type {\n AXPInAppInboxItem,\n AXPInAppInboxListResult,\n AXPInAppInboxLoadQuery,\n} from './inbox/in-app-inbox.types';\nimport type { AXPInAppInboxPort } from './inbox/in-app-inbox.port';\nimport {\n resolveConversationInAppInboxActions,\n resolveConversationInAppInboxSender,\n} from './inbox/in-app-inbox-conversation.util';\nimport { resolveInAppInboxIconClass } from './inbox/in-app-inbox-icon.util';\nimport { sortInAppInboxItems } from './inbox/in-app-inbox.util';\n\nconst IN_APP_CHANNEL = 'in-app';\n\n//#region ---- Communication delivery inbox port ----\n\n@Injectable()\nexport class AXMCommunicationInAppInboxPort implements AXPInAppInboxPort {\n readonly capabilities = {\n seenTracking: true,\n readTracking: true,\n pinSupport: true,\n categoryTabs: false,\n } as const;\n\n private readonly entityService = inject(AXPEntityService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly client = inject(AXPCommunicationManagementClient);\n private readonly deliveryData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.communicationDelivery.name)\n .data<string, AXMCommunicationDeliveryModel, AXMCommunicationDeliveryModel>();\n private readonly communicationData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.communication.name)\n .data<string, AXMCommunicationModel, AXMCommunicationModel>();\n\n async loadInbox(query: AXPInAppInboxLoadQuery = {}): Promise<AXPInAppInboxListResult> {\n if (!this.sessionService.isReadyForAppScopedApi) {\n return { items: [], total: 0 };\n }\n\n const userId = this.sessionService.user?.id;\n if (!userId) {\n return { items: [], total: 0 };\n }\n\n const skip = query.skip ?? 0;\n const take = query.take ?? 1000;\n const filters = query.filters ?? [];\n const excludeArchived = query.excludeArchived ?? filters.length === 0;\n\n const communicationIds = await this.resolveCommunicationIds(filters);\n const request = buildCommunicationInAppInboxPageQuery(filters, skip, take, communicationIds);\n const baseFilters = [...(request.filter?.filters ?? [])];\n\n if (userId) {\n baseFilters.push({\n field: 'recipientUserId',\n operator: { type: 'equal' as const },\n value: userId,\n });\n }\n\n if (excludeArchived && !filters.some((filter) => filter.field === 'category' && filter.value === 'Archive')) {\n baseFilters.push({\n field: 'archivedAt',\n operator: { type: 'isNull' },\n value: null,\n });\n }\n\n const result = await this.deliveryData.query({\n ...request,\n filter: { logic: 'and', filters: baseFilters },\n });\n\n const deliveries = result.items as AXMCommunicationDeliveryModel[];\n const items = await this.mapDeliveriesToInboxItems(deliveries);\n\n return { total: result.total, items };\n }\n\n async loadByIds(ids: string[]): Promise<AXPInAppInboxListResult> {\n if (!this.sessionService.isReadyForAppScopedApi) {\n return { items: [], total: 0 };\n }\n\n const deliveryIds = [...new Set(ids.map((id) => id?.trim()).filter(Boolean))];\n if (deliveryIds.length === 0) {\n return { total: 0, items: [] };\n }\n\n const userId = this.sessionService.user?.id;\n const filters: Array<Record<string, unknown>> = [\n { field: 'channel', operator: { type: 'equal' as const }, value: IN_APP_CHANNEL },\n {\n logic: 'or' as const,\n filters: deliveryIds.map((id) => ({\n field: 'id',\n operator: { type: 'equal' as const },\n value: id,\n })),\n },\n ];\n\n if (userId) {\n filters.push({\n field: 'recipientUserId',\n operator: { type: 'equal' as const },\n value: userId,\n });\n }\n\n const result = await this.deliveryData.query({\n skip: 0,\n take: deliveryIds.length,\n filter: { logic: 'and', filters: filters as never },\n });\n\n const deliveries = result.items as AXMCommunicationDeliveryModel[];\n const items = await this.mapDeliveriesToInboxItems(deliveries);\n return { total: items.length, items };\n }\n\n async markSeen(ids: string[]): Promise<void> {\n const deliveryIds = ids.filter(Boolean);\n if (deliveryIds.length === 0) {\n return;\n }\n\n await this.client.markInAppSeen({ deliveryIds });\n }\n\n async markRead(ids: string[]): Promise<void> {\n const deliveryIds = ids.filter(Boolean);\n if (deliveryIds.length === 0) {\n return;\n }\n\n await this.client.markInAppRead({ deliveryIds });\n }\n\n async markAllRead(): Promise<void> {\n await this.client.markAllInAppRead();\n }\n\n async togglePin(id: string): Promise<void> {\n if (!id.trim()) {\n return;\n }\n\n await this.client.toggleInAppPin({ deliveryIds: [id] });\n }\n\n async archive(ids: string[]): Promise<void> {\n const deliveryIds = ids.filter(Boolean);\n if (deliveryIds.length === 0) {\n return;\n }\n\n await this.client.archiveInApp({ deliveryIds });\n }\n\n async deleteDeliveries(ids: string[]): Promise<void> {\n const deliveryIds = ids.filter(Boolean);\n if (deliveryIds.length === 0) {\n return;\n }\n\n await this.client.deleteInApp({ deliveryIds });\n }\n\n private async mapDeliveriesToInboxItems(\n deliveries: AXMCommunicationDeliveryModel[],\n ): Promise<AXPInAppInboxItem[]> {\n const communicationMap = await this.loadCommunicationsById(\n [...new Set(deliveries.map((delivery) => delivery.communicationId).filter(Boolean))],\n );\n\n return sortInAppInboxItems(\n deliveries.map((item) => this.toInboxItem(item, communicationMap.get(item.communicationId))),\n );\n }\n\n private async resolveCommunicationIds(filters: AXPFilterQuery[]): Promise<string[] | undefined> {\n const { searchText, definitionKey, priority } = resolveCommunicationInboxCommunicationFilters(filters);\n if (!searchText && !definitionKey && !priority) {\n return undefined;\n }\n\n const conditions = [];\n if (definitionKey) {\n conditions.push({\n field: 'definitionKey',\n operator: { type: 'equal' as const },\n value: definitionKey,\n });\n }\n if (priority) {\n conditions.push({\n field: 'priority',\n operator: { type: 'equal' as const },\n value: priority,\n });\n }\n if (searchText) {\n conditions.push({\n logic: 'or' as const,\n filters: [\n { field: 'title', operator: { type: 'contains' as const }, value: searchText },\n { field: 'message.subject', operator: { type: 'contains' as const }, value: searchText },\n { field: 'message.body', operator: { type: 'contains' as const }, value: searchText },\n ],\n });\n }\n\n const result = await this.communicationData.query({\n take: 1000,\n skip: 0,\n filter: conditions.length > 0 ? { logic: 'and', filters: conditions } : undefined,\n });\n\n return (result.items as AXMCommunicationModel[]).map((item) => item.id);\n }\n\n private async loadCommunicationsById(ids: string[]): Promise<Map<string, AXMCommunicationModel>> {\n const map = new Map<string, AXMCommunicationModel>();\n if (ids.length === 0) {\n return map;\n }\n\n const result = await this.communicationData.query({\n take: ids.length,\n skip: 0,\n filter: {\n logic: 'or',\n filters: ids.map((id) => ({\n field: 'id',\n operator: { type: 'equal' as const },\n value: id,\n })),\n },\n });\n\n for (const communication of result.items as AXMCommunicationModel[]) {\n map.set(communication.id, communication);\n }\n\n return map;\n }\n\n private toInboxItem(\n delivery: AXMCommunicationDeliveryModel,\n communication?: AXMCommunicationModel,\n ): AXPInAppInboxItem {\n const message = communication\n ? resolveCommunicationMessage(communication as unknown as Record<string, unknown>)\n : { subject: '', body: '' };\n\n const definitionKey = communication?.definitionKey;\n const priority = (communication?.priority as CommunicationPriority | undefined) ?? 'Notice';\n const title = message.subject || communication?.title || '';\n const body = message.body;\n const actions = resolveConversationInAppInboxActions({\n definitionKey,\n correlationId: communication?.correlationId,\n actions: communication?.actions,\n });\n const sender = resolveConversationInAppInboxSender({\n definitionKey,\n title,\n body,\n correlationId: communication?.correlationId,\n actions,\n });\n const iconClass = resolveInAppInboxIconClass({ definitionKey, priority, sender });\n\n return {\n id: delivery.id,\n title,\n body,\n createdAt: delivery.deliveredAt ? new Date(delivery.deliveredAt) : new Date(),\n seenAt: delivery.seenAt ? new Date(delivery.seenAt) : delivery.seenAt ?? null,\n readAt: delivery.readAt ? new Date(delivery.readAt) : delivery.readAt ?? null,\n sender,\n iconClass,\n priority,\n isPinned: Boolean(delivery.isPinned),\n definitionKey,\n archivedAt: delivery.archivedAt ? new Date(delivery.archivedAt) : delivery.archivedAt ?? null,\n actions,\n };\n }\n}\n\n//#endregion\n","import { inject, type Provider } from '@angular/core';\nimport {\n AXP_APP_STARTUP_PRIORITY,\n provideAppStartUpTask,\n} from '@acorex-platform/framework-client/core';\nimport { AXPInAppInboxRealtimeService } from './inbox/in-app-inbox-realtime.service';\nimport type { AXPInAppInboxChangeEvent } from './inbox/in-app-inbox.types';\nimport {\n AXPRealtimeDispatcherService,\n AXP_REALTIME_TOPIC_INBOX_REFRESH,\n type AXPRealtimeInboxRefreshPayload,\n} from '@acorex-platform/framework-client/realtime';\n\n//#region ---- Inbox realtime topic handler ----\n\nexport function provideCommunicationInAppRealtimeHandlers(): Provider[] {\n return [\n provideAppStartUpTask(() => {\n const dispatcher = inject(AXPRealtimeDispatcherService, { optional: true });\n const inboxRealtime = inject(AXPInAppInboxRealtimeService);\n return {\n name: 'communication-in-app-realtime-handlers',\n priority: AXP_APP_STARTUP_PRIORITY.realtimeHandlers,\n run: async () => {\n dispatcher?.register({\n topic: AXP_REALTIME_TOPIC_INBOX_REFRESH,\n handle: (envelope) => {\n const payload = (envelope.payload ?? {}) as AXPRealtimeInboxRefreshPayload;\n const ids = [\n ...(payload.deliveryIds ?? []),\n ...(payload.deliveryId ? [payload.deliveryId] : []),\n ].filter(Boolean);\n\n const event: AXPInAppInboxChangeEvent = {\n type: resolveInboxChangeType(payload.op),\n ids: ids.length > 0 ? [...new Set(ids)] : undefined,\n };\n inboxRealtime.notifyChanged(event);\n },\n });\n },\n };\n }),\n ];\n}\n\nfunction resolveInboxChangeType(\n op: AXPRealtimeInboxRefreshPayload['op'],\n): AXPInAppInboxChangeEvent['type'] {\n if (op === 'deleted') {\n return 'deleted';\n }\n if (op === 'archived') {\n return 'archived';\n }\n if (op === 'created') {\n return 'created';\n }\n return 'refresh';\n}\n\n//#endregion\n","import { Injectable, signal } from '@angular/core';\nimport type { AXPInAppInboxSyncStatus } from './inbox/in-app-inbox-sync-status.token';\n\n//#region ---- In-app inbox sync status ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMCommunicationInAppInboxSyncStatusService implements AXPInAppInboxSyncStatus {\n readonly liveUpdatesConnected = signal(true);\n}\n\n//#endregion\n","import { DestroyRef, inject, type Provider } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n AXP_APP_STARTUP_PRIORITY,\n provideAppStartUpTask,\n} from '@acorex-platform/framework-client/core';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPInAppInboxConnectorService } from './inbox/in-app-inbox.connector.service';\nimport { AXPRealtimeConnectionService } from '@acorex-platform/framework-client/realtime';\nimport { distinctUntilChanged, EMPTY, switchMap, timer } from 'rxjs';\nimport { AXMCommunicationInAppInboxSyncStatusService } from './communication-in-app-inbox-sync-status.service';\n\n//#region ---- Constants ----\n\nconst POLL_INTERVAL_MS = 60_000;\nconst RECONNECT_REFRESH_DELAY_MS = 250;\n\n//#endregion\n\n//#region ---- In-app inbox fallback sync ----\n\n/**\n * Keeps the inbox fresh when Socket.IO is down: poll while disconnected,\n * refresh on reconnect and when the tab becomes visible again.\n */\nexport function provideCommunicationInAppInboxFallbackSync(): Provider[] {\n return [\n provideAppStartUpTask(() => {\n const connector = inject(AXPInAppInboxConnectorService);\n const sessionService = inject(AXPSessionService);\n const syncStatus = inject(AXMCommunicationInAppInboxSyncStatusService);\n const connection = inject(AXPRealtimeConnectionService, { optional: true });\n const destroyRef = inject(DestroyRef);\n\n const refreshIfAuthorized = (): void => {\n if (sessionService.isReadyForAppScopedApi) {\n void connector.refresh();\n }\n };\n\n return {\n name: 'communication-in-app-inbox-fallback',\n priority: AXP_APP_STARTUP_PRIORITY.realtimeSubscriptions,\n run: async () => {\n if (!connection) {\n syncStatus.liveUpdatesConnected.set(false);\n return;\n }\n\n let wasConnected = connection.isSocketConnected();\n\n connection.connectionStatus$\n .pipe(distinctUntilChanged(), takeUntilDestroyed(destroyRef))\n .subscribe((status) => {\n const connected = status === 'connected';\n syncStatus.liveUpdatesConnected.set(connected);\n\n if (connected && !wasConnected) {\n timer(RECONNECT_REFRESH_DELAY_MS)\n .pipe(takeUntilDestroyed(destroyRef))\n .subscribe(() => {\n refreshIfAuthorized();\n });\n }\n\n wasConnected = connected;\n });\n\n connection.connectionStatus$\n .pipe(\n distinctUntilChanged(),\n switchMap((status) => {\n if (status === 'connected') {\n return EMPTY;\n }\n return timer(POLL_INTERVAL_MS, POLL_INTERVAL_MS);\n }),\n takeUntilDestroyed(destroyRef),\n )\n .subscribe(() => {\n refreshIfAuthorized();\n });\n\n document.addEventListener(\n 'visibilitychange',\n () => {\n if (document.visibilityState === 'visible') {\n // Re-sync active inbox in case realtime was missed while hidden.\n refreshIfAuthorized();\n }\n },\n { passive: true },\n );\n },\n };\n }),\n ];\n}\n\n//#endregion\n","import {\n AXP_IN_APP_NOTIFICATION_SERVICE,\n type AXPInAppNotificationCreateRequest,\n type AXPInAppNotificationService,\n} from '@acorex-platform/framework-client/common';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPCommunicationManagementClient } from '../../communication-management-client.port';\nimport { AXPInAppInboxRealtimeService } from './inbox/in-app-inbox-realtime.service';\n\n//#region ---- Communication-backed in-app notification port ----\n\n@Injectable()\nexport class AXMCommunicationInAppNotificationService implements AXPInAppNotificationService {\n private readonly client = inject(AXPCommunicationManagementClient);\n private readonly realtime = inject(AXPInAppInboxRealtimeService);\n\n async create(request: AXPInAppNotificationCreateRequest): Promise<void> {\n const recipientUserId = request.receiver.id?.trim();\n if (!recipientUserId) {\n return;\n }\n\n await this.client.send({\n title: request.title,\n message: {\n subject: request.title,\n body: request.body,\n },\n channel: 'in-app',\n recipientUserId,\n recipientName: request.receiver.fullName,\n correlationId: request.id,\n idempotencyKey: request.id,\n });\n\n this.realtime.notifyChanged({ type: 'refresh' });\n }\n}\n\nexport const communicationInAppNotificationServiceProvider = {\n provide: AXP_IN_APP_NOTIFICATION_SERVICE,\n useClass: AXMCommunicationInAppNotificationService,\n};\n\n//#endregion\n","//#region ---- Shared in-app inbox types ----\n\nimport type { AXPFilterQuery, AXPUserReference } from '@acorex-platform/framework-shared/core';\n\nexport type AXPInAppInboxPriority = 'Notice' | 'Danger' | 'Warning';\n\nexport type AXPInAppInboxTabKey = 'Unread' | 'All' | (string & {});\n\nexport interface AXPInAppInboxCapabilities {\n seenTracking: boolean;\n readTracking: boolean;\n pinSupport: boolean;\n categoryTabs: boolean;\n}\n\nexport interface AXPInAppInboxItem {\n id: string;\n title: string;\n body: string;\n createdAt: Date;\n seenAt?: Date | null;\n readAt?: Date | null;\n sender?: AXPUserReference;\n /** Font Awesome classes for a circular leading icon (used instead of user avatar). */\n iconClass?: string;\n /** When false, hide the leading avatar/icon for this row. Omitted = show (if the host also allows it). */\n showAvatar?: boolean;\n priority?: AXPInAppInboxPriority;\n isPinned?: boolean;\n category?: string;\n definitionKey?: string;\n archivedAt?: Date | null;\n actions?: Array<{\n title: string;\n command: {\n name: string;\n options?: Record<string, unknown>;\n };\n }>;\n}\n\nexport interface AXPInAppInboxLoadQuery {\n skip?: number;\n take?: number;\n filters?: AXPFilterQuery[];\n /** When true (default for tray), exclude archived deliveries. */\n excludeArchived?: boolean;\n}\n\nexport interface AXPInAppInboxListResult {\n total: number;\n items: AXPInAppInboxItem[];\n}\n\nexport interface AXPInAppInboxI18nKeys {\n panelTitle: string;\n unread: string;\n all: string;\n markAllAsRead: string;\n viewAll: string;\n emptyTitle: string;\n emptyDescription: string;\n pageTitle: string;\n pageDescriptionNone: string;\n pageDescriptionUnread: string;\n pageDescriptionAllRead: string;\n refresh: string;\n pin: string;\n unpin: string;\n delete: string;\n archive: string;\n markAsRead: string;\n selectItems: string;\n clearFilters: string;\n liveUpdatesOffline: string;\n}\n\nexport interface AXPInAppInboxConfig {\n headerIconClass: string;\n viewAllRoute: (appName: string) => string[];\n settingsRoute?: (appName: string) => string[];\n}\n\nexport interface AXPInAppInboxChangeEvent {\n type: 'created' | 'seen' | 'read' | 'refresh' | 'deleted' | 'archived' | 'pin';\n item?: AXPInAppInboxItem;\n ids?: string[];\n}\n\n//#endregion\n","//#region ---- In-app inbox configuration tokens ----\n\nimport { InjectionToken } from '@angular/core';\nimport type { AXPInAppInboxConfig, AXPInAppInboxI18nKeys } from './in-app-inbox.types';\n\nexport const AXP_IN_APP_INBOX_CONFIG = new InjectionToken<AXPInAppInboxConfig>('AXP_IN_APP_INBOX_CONFIG');\n\nexport const AXP_IN_APP_INBOX_I18N = new InjectionToken<AXPInAppInboxI18nKeys>('AXP_IN_APP_INBOX_I18N');\n\n//#endregion\n","import { InjectionToken, type Signal } from '@angular/core';\n\n//#region ---- In-app inbox sync status ----\n\nexport interface AXPInAppInboxSyncStatus {\n /** True when Socket.IO live updates are connected. */\n liveUpdatesConnected: Signal<boolean>;\n}\n\nexport const AXP_IN_APP_INBOX_SYNC_STATUS = new InjectionToken<AXPInAppInboxSyncStatus>(\n 'AXP_IN_APP_INBOX_SYNC_STATUS',\n);\n\n//#endregion\n","import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPUserAvatarComponent, AXPUserCardDirective } from '@acorex-platform/framework-client/layout/components';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport type { AXPInAppInboxItem } from '../in-app-inbox.types';\nimport { getInAppInboxPriorityClass, isInAppInboxUnread } from '../in-app-inbox.util';\nimport { isInAppInboxRealUserSender, resolveInAppInboxIconClass } from '../in-app-inbox-icon.util';\n\n//#region ---- Shared in-app inbox row item ----\n\n@Component({\n selector: 'axp-in-app-inbox-item',\n templateUrl: './in-app-inbox-item.component.html',\n styleUrls: ['./in-app-inbox-item.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXPUserAvatarComponent,\n AXPUserCardDirective,\n AXBadgeModule,\n AXFormatModule,\n AXTranslationModule,\n ],\n})\nexport class AXPInAppInboxItemComponent {\n data = input.required<AXPInAppInboxItem>();\n showAvatar = input(true);\n showDate = input(true);\n showPin = input(false);\n pinLabelKey = input('@general:actions.pin.title');\n unpinLabelKey = input('@general:actions.unpin.title');\n /** When true, unread rows get a subtle background (use on mixed read/unread lists only). */\n highlightUnreadBackground = input(false);\n showDismissUnread = input(true);\n markAsReadLabelKey = input('@communication-management:in-app.actions.mark-as-read');\n\n protected readonly priorityClass = computed(() => getInAppInboxPriorityClass(this.data().priority));\n protected readonly isUnread = computed(() => isInAppInboxUnread(this.data().readAt));\n protected readonly primaryAction = computed(() => this.data().actions?.[0]);\n protected readonly hasDefaultAction = computed(() => !!this.primaryAction()?.command?.name?.trim());\n protected readonly headline = computed(() => {\n const item = this.data();\n if (isInAppInboxRealUserSender(item.sender)) {\n return item.sender!.fullName!.trim();\n }\n return item.title ?? '';\n });\n protected readonly itemIconClass = computed(() => resolveInAppInboxIconClass(this.data()));\n protected readonly showItemLeading = computed(() => this.showAvatar() && this.data().showAvatar !== false);\n protected readonly showItemIcon = computed(() => this.showItemLeading() && !!this.itemIconClass());\n protected readonly showItemAvatar = computed(() => {\n if (!this.showItemLeading() || this.itemIconClass()) {\n return false;\n }\n return isInAppInboxRealUserSender(this.data().sender);\n });\n\n itemPress = output<string>();\n markAsRead = output<string>();\n togglePin = output<string>();\n closePopover = output<void>();\n\n protected isI18nKey(value: string): boolean {\n return value.startsWith('@');\n }\n\n protected onPress(id: string): void {\n if (!this.hasDefaultAction()) {\n return;\n }\n this.itemPress.emit(id);\n this.closePopover.emit();\n }\n\n protected onTogglePin(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n this.togglePin.emit(this.data().id);\n }\n\n protected onDismissMarkAsRead(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n this.markAsRead.emit(this.data().id);\n }\n}\n\n//#endregion\n","<div\n class=\"axp-in-app-inbox-item\"\n [id]=\"data().id\"\n (click)=\"onPress(data().id)\"\n [class]=\"[\n priorityClass(),\n isUnread() ? 'unread' : 'read',\n isUnread() && highlightUnreadBackground() ? 'unread-highlight' : '',\n ]\"\n>\n @if (showItemIcon()) {\n <div class=\"axp-in-app-inbox-item__icon\" [class]=\"priorityClass()\">\n <i [class]=\"itemIconClass()\" aria-hidden=\"true\"></i>\n </div>\n } @else if (showItemAvatar()) {\n <div class=\"axp-in-app-inbox-item__avatar\">\n <axp-user-avatar\n [size]=\"48\"\n [userId]=\"data().sender!.id\"\n [axpUserCard]=\"data().sender!.id\"\n ></axp-user-avatar>\n @if (isUnread()) {\n <div class=\"axp-in-app-inbox-item__unread-badge\"></div>\n }\n </div>\n }\n\n <div class=\"axp-in-app-inbox-item__content\">\n <div class=\"axp-in-app-inbox-item__title\" [class.--unread]=\"isUnread()\">\n @if (isI18nKey(headline())) {\n {{ headline() | translate | async }}\n } @else {\n {{ headline() }}\n }\n </div>\n\n <div class=\"axp-in-app-inbox-item__subline\">\n @if (showDate()) {\n <span class=\"axp-in-app-inbox-item__time\">{{ data().createdAt | format: 'timeleft' | async }}</span>\n }\n @if (data().category) {\n <span class=\"axp-in-app-inbox-item__subline-separator\" aria-hidden=\"true\">•</span>\n <span class=\"axp-in-app-inbox-item__category\">{{ data().category }}</span>\n }\n @if (showPin()) {\n @if (data().isPinned) {\n <button\n type=\"button\"\n class=\"axp-in-app-inbox-item__pin axp-in-app-inbox-item__pin--inline\"\n [attr.aria-label]=\"unpinLabelKey() | translate | async\"\n (click)=\"onTogglePin($event)\"\n >\n <ax-icon><i class=\"fa-solid fa-thumbtack\"></i></ax-icon>\n </button>\n } @else {\n <button\n type=\"button\"\n class=\"axp-in-app-inbox-item__pin axp-in-app-inbox-item__pin--inline axp-in-app-inbox-item__pin--muted\"\n [attr.aria-label]=\"pinLabelKey() | translate | async\"\n (click)=\"onTogglePin($event)\"\n >\n <ax-icon><i class=\"fa-regular fa-thumbtack\"></i></ax-icon>\n </button>\n }\n }\n </div>\n\n <div class=\"axp-in-app-inbox-item__body\">\n @if (isI18nKey(data().body)) {\n {{ data().body | translate | async }}\n } @else {\n {{ data().body }}\n }\n </div>\n </div>\n\n @if ((isUnread() && showDismissUnread()) || hasDefaultAction()) {\n <div\n class=\"axp-in-app-inbox-item__actions\"\n [class.--dismiss-only]=\"isUnread() && showDismissUnread() && !hasDefaultAction()\"\n >\n @if (isUnread() && showDismissUnread()) {\n <button\n type=\"button\"\n class=\"axp-in-app-inbox-item__dismiss\"\n [attr.aria-label]=\"markAsReadLabelKey() | translate | async\"\n (click)=\"onDismissMarkAsRead($event)\"\n >\n <ax-icon><i class=\"fa-light fa-xmark\" aria-hidden=\"true\"></i></ax-icon>\n </button>\n }\n @if (hasDefaultAction()) {\n <div class=\"axp-in-app-inbox-item__chevron\" aria-hidden=\"true\">\n <ax-icon><i class=\"fa-light fa-chevron-right axp-in-app-inbox-item__chevron-icon\"></i></ax-icon>\n </div>\n }\n </div>\n }\n</div>\n","//#region ----- Imports -----\n\nimport { inject, Injectable } from '@angular/core';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXPInAppInboxConnectorService } from './in-app-inbox.connector.service';\nimport type { AXPInAppInboxItem } from './in-app-inbox.types';\n\n//#endregion\n\n//#region ----- Inbox action -----\n\n@Injectable({ providedIn: 'root' })\nexport class AXPInAppInboxActionService {\n private readonly connector = inject(AXPInAppInboxConnectorService);\n private readonly commands = inject(AXPCommandService);\n\n async openItem(id: string): Promise<void> {\n const item = this.findItem(id);\n await this.connector.markAsRead([id]);\n const action = item?.actions?.[0];\n if (!action?.command?.name) {\n return;\n }\n await this.commands.execute(action.command.name, action.command.options ?? {});\n }\n\n private findItem(id: string): AXPInAppInboxItem | undefined {\n return (\n this.connector.inboxList().find((item) => item.id === id) ??\n this.connector.pagedInboxList().find((item) => item.id === id)\n );\n }\n}\n\n//#endregion\n","import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n OnInit,\n output,\n signal,\n} from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AXPInAppInboxActionService } from '../in-app-inbox-action.service';\nimport { AXPInAppInboxConnectorService } from '../in-app-inbox.connector.service';\nimport { AXP_IN_APP_INBOX_CONFIG, AXP_IN_APP_INBOX_I18N } from '../in-app-inbox.tokens';\nimport type { AXPInAppInboxItem, AXPInAppInboxTabKey } from '../in-app-inbox.types';\nimport { isInAppInboxUnread } from '../in-app-inbox.util';\nimport { AXPInAppInboxItemComponent } from './in-app-inbox-item.component';\n\n//#region ---- Shared in-app inbox tray panel ----\n\ninterface InboxTabData {\n key: AXPInAppInboxTabKey;\n labelKey: string;\n count: number;\n}\n\n@Component({\n selector: 'axp-in-app-inbox-panel',\n templateUrl: './in-app-inbox-panel.component.html',\n styleUrls: ['./in-app-inbox-panel.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXButtonModule,\n AXTabsModule,\n AXDecoratorModule,\n AXBadgeModule,\n AXTranslationModule,\n AXPStateMessageComponent,\n AXPInAppInboxItemComponent,\n ],\n})\nexport class AXPInAppInboxPanelComponent implements OnInit {\n unreadCountChange = output<number>();\n closePopover = output<void>();\n\n private readonly connector = inject(AXPInAppInboxConnectorService);\n private readonly inboxActions = inject(AXPInAppInboxActionService);\n private readonly toastService = inject(AXToastService);\n private readonly router = inject(Router);\n private readonly sessionService = inject(AXPSessionService);\n protected readonly i18n = inject(AXP_IN_APP_INBOX_I18N);\n protected readonly config = inject(AXP_IN_APP_INBOX_CONFIG);\n\n protected readonly items = this.connector.inboxList;\n protected readonly isLoading = this.connector.loading;\n protected activeTab = signal<AXPInAppInboxTabKey>('Unread');\n\n protected readonly tabItems = computed(() => this.buildTabItems(this.items()));\n protected readonly showPin = computed(() => this.connector.capabilities.pinSupport);\n\n constructor() {\n effect(() => {\n const unread = this.tabItems().find((tab) => tab.key === 'Unread')?.count ?? 0;\n this.unreadCountChange.emit(unread);\n });\n }\n\n async ngOnInit(): Promise<void> {\n try {\n await this.connector.ensureReady();\n await this.connector.markUnseenAsSeen();\n } catch (error) {\n this.toastService.show({\n content: typeof error === 'string' ? error : 'Failed to load inbox.',\n color: 'danger',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n }\n }\n\n protected changeActiveTab(tab: AXPInAppInboxTabKey): void {\n this.activeTab.set(tab);\n }\n\n protected getItems(tab: AXPInAppInboxTabKey): AXPInAppInboxItem[] {\n const list = this.items();\n if (tab === 'All') {\n return list;\n }\n if (tab === 'Unread') {\n return list.filter((item) => isInAppInboxUnread(item.readAt));\n }\n return list.filter((item) => item.category === tab);\n }\n\n protected async openInboxItem(id: string): Promise<void> {\n await this.inboxActions.openItem(id);\n }\n\n protected async dismissUnread(id: string): Promise<void> {\n await this.connector.markAsRead([id]);\n }\n\n protected async togglePin(id: string): Promise<void> {\n await this.connector.togglePin(id);\n }\n\n protected async markAllAsRead(): Promise<void> {\n await this.connector.markAllAsRead();\n }\n\n protected viewAll(): void {\n this.closePopover.emit();\n const app = this.sessionService.application?.name ?? 'demo';\n void this.router.navigate(this.config.viewAllRoute(app));\n }\n\n protected openSettings(): void {\n if (!this.config.settingsRoute) {\n return;\n }\n this.closePopover.emit();\n const app = this.sessionService.application?.name ?? 'demo';\n void this.router.navigate(this.config.settingsRoute(app));\n }\n\n private buildTabItems(items: AXPInAppInboxItem[]): InboxTabData[] {\n const unreadTotal = items.filter((item) => isInAppInboxUnread(item.readAt)).length;\n return [\n { key: 'Unread', labelKey: this.i18n.unread, count: unreadTotal },\n { key: 'All', labelKey: this.i18n.all, count: unreadTotal },\n ];\n }\n}\n\n//#endregion\n","<div class=\"axp-in-app-inbox-panel__header\">\n <span class=\"axp-in-app-inbox-panel__title\">\n {{ i18n.panelTitle | translate | async }}\n </span>\n @if (config.settingsRoute) {\n <ax-button color=\"default\" look=\"blank\" (onClick)=\"openSettings()\">\n <ax-icon><i class=\"fa-regular fa-gear fa-lg\"></i></ax-icon>\n </ax-button>\n }\n</div>\n<ax-tabs [content]=\"tabContent\" look=\"with-line\" location=\"bottom\">\n @for (tab of tabItems(); track tab.key) {\n <ax-tab-item\n [text]=\"(tab.labelKey | translate | async) ?? ''\"\n [active]=\"activeTab() === tab.key\"\n (activeChange)=\"changeActiveTab(tab.key)\"\n >\n <ax-suffix>\n @if (tab.count && tab.key === 'Unread') {\n <ax-badge [color]=\"activeTab() === tab.key ? 'primary' : 'ghost'\" [text]=\"tab.count.toString()\"></ax-badge>\n }\n </ax-suffix>\n <ax-content>\n <div class=\"axp-in-app-inbox-panel__list\">\n @if (isLoading()) {\n <div class=\"axp-in-app-inbox-panel__loading\">\n @for (_ of [1, 2, 3]; track $index) {\n <div class=\"axp-in-app-inbox-panel__skeleton\">\n <div class=\"axp-in-app-inbox-panel__skeleton-avatar\"></div>\n <div class=\"axp-in-app-inbox-panel__skeleton-lines\">\n <div class=\"axp-in-app-inbox-panel__skeleton-line --wide\"></div>\n <div class=\"axp-in-app-inbox-panel__skeleton-line\"></div>\n </div>\n </div>\n }\n </div>\n } @else if (getItems(tab.key).length === 0) {\n <axp-state-message\n icon=\"fa-regular fa-bell-slash\"\n [title]=\"i18n.emptyTitle\"\n [description]=\"i18n.emptyDescription\"\n />\n } @else {\n @for (item of getItems(tab.key); track item.id) {\n <axp-in-app-inbox-item\n [data]=\"item\"\n [highlightUnreadBackground]=\"tab.key === 'All'\"\n [showPin]=\"showPin()\"\n [pinLabelKey]=\"i18n.pin\"\n [unpinLabelKey]=\"i18n.unpin\"\n [markAsReadLabelKey]=\"i18n.markAsRead\"\n (itemPress)=\"openInboxItem($event)\"\n (markAsRead)=\"dismissUnread($event)\"\n (togglePin)=\"togglePin($event)\"\n (closePopover)=\"closePopover.emit()\"\n />\n }\n }\n </div>\n <div class=\"axp-in-app-inbox-panel__footer\">\n <ax-button\n class=\"ax-sm\"\n [disabled]=\"(tabItems()[0]?.count ?? 0) === 0\"\n look=\"outline\"\n color=\"default\"\n [text]=\"(i18n.markAllAsRead | translate | async) ?? ''\"\n (onClick)=\"markAllAsRead()\"\n />\n <ax-button\n class=\"ax-sm\"\n look=\"outline\"\n color=\"primary\"\n [text]=\"(i18n.viewAll | translate | async) ?? ''\"\n (onClick)=\"viewAll()\"\n />\n </div>\n </ax-content>\n </ax-tab-item>\n }\n</ax-tabs>\n\n<ng-template [axTabContent] #tabContent=\"axTabContent\"></ng-template>\n","import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPInAppInboxConnectorService } from '../in-app-inbox.connector.service';\nimport { AXP_IN_APP_INBOX_CONFIG, AXP_IN_APP_INBOX_I18N } from '../in-app-inbox.tokens';\nimport { AXP_IN_APP_INBOX_SYNC_STATUS } from '../in-app-inbox-sync-status.token';\nimport { AXPInAppInboxPanelComponent } from './in-app-inbox-panel.component';\n\n//#region ---- Shared in-app inbox header slot ----\n\n@Component({\n selector: 'axp-in-app-inbox-slot',\n templateUrl: './in-app-inbox-slot.component.html',\n styleUrls: ['./in-app-inbox-slot.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AsyncPipe,\n AXButtonModule,\n AXDecoratorModule,\n AXBadgeModule,\n AXPopoverModule,\n AXTranslationModule,\n AXPInAppInboxPanelComponent,\n ],\n})\nexport class AXPInAppInboxSlotComponent {\n protected readonly config = inject(AXP_IN_APP_INBOX_CONFIG);\n protected readonly i18n = inject(AXP_IN_APP_INBOX_I18N);\n private readonly connector = inject(AXPInAppInboxConnectorService);\n private readonly syncStatus = inject(AXP_IN_APP_INBOX_SYNC_STATUS, { optional: true });\n\n protected liveUpdatesOffline = computed(\n () => this.syncStatus != null && !this.syncStatus.liveUpdatesConnected(),\n );\n\n protected badgeDisplay = computed(() => {\n const total = this.connector.unreadCount();\n if (total <= 0) {\n return '';\n }\n return total > 50 ? '50+' : total.toString();\n });\n\n private popover = viewChild(AXPopoverComponent);\n\n protected closePopover(): void {\n this.popover()?.close();\n }\n}\n\n//#endregion\n","<ax-button\n [iconOnly]=\"true\"\n class=\"relative axp-in-app-inbox-slot__button\"\n color=\"primary\"\n #inboxTrigger\n [title]=\"liveUpdatesOffline() ? ((i18n.liveUpdatesOffline | translate | async) ?? '') : ''\"\n>\n <ax-icon>\n <i [class]=\"config.headerIconClass\"></i>\n </ax-icon>\n</ax-button>\n\n<div\n class=\"axp-in-app-inbox-slot__badge\"\n [class.--xs]=\"badgeDisplay().length > 2\"\n>\n @if (badgeDisplay()) {\n <ax-badge color=\"danger\" [text]=\"badgeDisplay()\"></ax-badge>\n }\n</div>\n<ax-popover\n [target]=\"inboxTrigger\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n [adaptivityEnabled]=\"true\"\n>\n <div class=\"bg-lightest rounded-md w-full\">\n <axp-in-app-inbox-panel (closePopover)=\"closePopover()\" />\n </div>\n</ax-popover>\n","import {\n AXPSettingDefinitionProvider,\n AXPSettingDefinitionProviderContext,\n} from '@acorex-platform/framework-client/common';\nimport { AXPWidgetsList } from '@acorex-platform/framework-shared/core';\nimport {\n AXP_COMMUNICATION_DELIVERY_CHANNELS_SETTINGS_SECTION,\n AXP_COMMUNICATION_USER_NOTIFICATIONS_SETTINGS_GROUP,\n AXP_COMMUNICATION_USER_NOTIFICATION_DEFAULTS,\n AXPCommunicationManagementSettingKeys,\n RootConfig,\n} from '@acorex-platform/module-communication-management-client/contracts';\n\nconst I18N = '@communication-management:settings.user-notifications';\n\n//#region ---- User notification preferences settings ----\n\nexport class AXMCommunicationUserNotificationsSettingProvider implements AXPSettingDefinitionProvider {\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n context\n .addGroup(\n AXP_COMMUNICATION_USER_NOTIFICATIONS_SETTINGS_GROUP,\n `${I18N}.nav-title`,\n `${I18N}.description`,\n RootConfig.module.icon,\n `${I18N}.title`,\n 88,\n )\n .addSection(\n AXP_COMMUNICATION_DELIVERY_CHANNELS_SETTINGS_SECTION,\n `${I18N}.delivery-channels.title`,\n `${I18N}.delivery-channels.description`,\n )\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.UserChannelInAppEnabled,\n title: `${I18N}.delivery-channels.in-app.title`,\n scope: 'U',\n overridableAt: [],\n isInherited: true,\n defaultValue:\n AXP_COMMUNICATION_USER_NOTIFICATION_DEFAULTS[\n AXPCommunicationManagementSettingKeys.UserChannelInAppEnabled\n ],\n widget: { type: AXPWidgetsList.Editors.ToggleSwitch },\n description: `${I18N}.delivery-channels.in-app.description`,\n })\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.UserChannelEmailEnabled,\n title: `${I18N}.delivery-channels.email.title`,\n scope: 'U',\n overridableAt: [],\n isInherited: true,\n defaultValue:\n AXP_COMMUNICATION_USER_NOTIFICATION_DEFAULTS[\n AXPCommunicationManagementSettingKeys.UserChannelEmailEnabled\n ],\n widget: { type: AXPWidgetsList.Editors.ToggleSwitch },\n description: `${I18N}.delivery-channels.email.description`,\n })\n .endSection()\n .endGroup();\n }\n}\n\n//#endregion\n","import { AXPModuleManifest } from '@acorex-platform/framework-client/core';\nimport { RootConfig } from '@acorex-platform/module-communication-management-client/contracts';\n\nexport const CommunicationManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '0.0.1',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n type: 'domain',\n domain: 'communication',\n required: false,\n};\n","import { AXPCommonMenuKeys } from '@acorex-platform/module-common-client/contracts';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { inject } from '@angular/core';\n\nimport {\n AXMCommunicationManagementMenuKeys,\n RootConfig,\n AXPCollaborationPermissionKeys,\n} from '@acorex-platform/module-communication-management-client/contracts';\n\nexport class AXMCommunicationManagementMenuProvider implements AXPMenuProvider {\n private readonly entityService = inject(AXPEntityService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const module = RootConfig.module.name;\n\n const monitoringMenu = context.find(AXPCommonMenuKeys.Monitoring);\n if (!monitoringMenu.exists) {\n context.find(AXPCommonMenuKeys.Administration).addItems([\n {\n name: AXPCommonMenuKeys.Monitoring,\n priority: 12,\n text: '@general:menus.monitoring.title',\n icon: 'fa-light fa-chart-line',\n type: 'menu',\n children: [],\n },\n ]);\n }\n\n context.find(AXPCommonMenuKeys.Monitoring).addItems([\n {\n name: AXMCommunicationManagementMenuKeys.Communications,\n text: RootConfig.entities.communication.titlePlural,\n path: this.entityService.createPath(module, RootConfig.entities.communication.name),\n icon: RootConfig.entities.communication.icon,\n priority: 1,\n policy: {\n features: [module],\n permissions: [AXPCollaborationPermissionKeys.MaintainCommunications],\n },\n },\n ]);\n }\n}\n","//#region ----- Imports -----\n\nimport {\n AXPPermissionDefinitionProvider,\n AXPPermissionDefinitionProviderContext,\n} from '@acorex-platform/framework-client/auth';\nimport {\n AXPCommonPermissionGroupKeys\n} from '@acorex-platform/module-common-client/contracts';\nimport {\n AXPCollaborationPermissionKeys\n} from '@acorex-platform/module-communication-management-client/contracts';\n\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ----- Permission Definition Provider -----\n\n/**\n * Registers communication capabilities into the shared Collaboration group.\n */\n@Injectable()\nexport class AXMCommunicationManagementPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPCollaborationPermissionKeys;\n const groups = AXPCommonPermissionGroupKeys;\n const P = '@common:collaboration.permissions';\n const G = '@common:permission-groups';\n\n context.addGroup(groups.Collaboration.Root, `${G}.collaboration.title`, `${G}.collaboration.description`, { order: 80 });\n\n context\n .addGroup(\n groups.Collaboration.Communications,\n `${G}.collaboration-communications.title`,\n `${G}.collaboration-communications.description`,\n { parent: groups.Collaboration.Root, order: 30 },\n )\n .addPermission(\n keys.MaintainCommunications,\n `${P}.maintain-communications.title`,\n `${P}.maintain-communications.description`,\n )\n .endPermission()\n .endGroup();\n }\n}\n\n//#endregion\n","import { AXPSearchCommandProvider, AXPSearchResult } from '@acorex-platform/framework-client/common';\n\nexport class AXMCommunicationManagementSearchCommandProvider extends AXPSearchCommandProvider {\n commands: AXPSearchResult[] = [];\n}\n","import { AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPWidgetsList } from '@acorex-platform/framework-shared/core';\nimport {\n AXPCommunicationManagementSettingKeys,\n AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS,\n AXMCommunicationManagementCommandKeys,\n RootConfig,\n} from '@acorex-platform/module-communication-management-client/contracts';\nimport {\n AXP_PLATFORM_DEV_TOOLS_COMMUNICATION_DEBUG_REDIRECT_SECTION,\n AXP_PLATFORM_DEV_TOOLS_SETTINGS_GROUP,\n} from '@acorex-platform/module-platform-dev-tools-client/contracts';\n\nconst I18N = '@communication-management:settings.communication';\nconst DEV_TOOLS_I18N = '@platform-dev-tools:settings.communication-debug-redirect';\n\n/** SMTP is server-owned config — never persist to client IndexedDB. */\nconst SMTP_CLIENT_CACHE = {\n cacheable: false as const,\n};\n\nexport class AXMCommunicationManagementSettingProvider implements AXPSettingDefinitionProvider {\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n context\n .addGroup(\n 'communication',\n `${I18N}.nav-title`,\n `${I18N}.description`,\n RootConfig.module.icon,\n `${I18N}.title`,\n 96,\n )\n .addSection('smtp-settings', `${I18N}.smtp.title`, `${I18N}.smtp.description`)\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.EmailServer,\n title: `${I18N}.smtp.server.title`,\n scope: 'P',\n overridableAt: ['T'],\n // Platform-owned SMTP baseline (same pattern as System Insight / Auth).\n // Tenants may still override via overridableAt; runtime inherits parent when unset.\n isInherited: false,\n ...SMTP_CLIENT_CACHE,\n defaultValue: AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS[AXPCommunicationManagementSettingKeys.EmailServer],\n widget: {\n type: AXPWidgetsList.Editors.TextBox,\n },\n description: `${I18N}.smtp.server.description`,\n })\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.EmailPort,\n title: `${I18N}.smtp.port.title`,\n scope: 'P',\n overridableAt: ['T'],\n isInherited: false,\n ...SMTP_CLIENT_CACHE,\n defaultValue: AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS[AXPCommunicationManagementSettingKeys.EmailPort],\n widget: {\n type: AXPWidgetsList.Editors.NumberBox,\n options: {\n minValue: 1,\n maxValue: 65535,\n },\n },\n description: `${I18N}.smtp.port.description`,\n })\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.EmailUsername,\n title: `${I18N}.smtp.username.title`,\n scope: 'P',\n overridableAt: ['T'],\n isInherited: false,\n ...SMTP_CLIENT_CACHE,\n defaultValue: AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS[AXPCommunicationManagementSettingKeys.EmailUsername],\n widget: {\n type: AXPWidgetsList.Editors.TextBox,\n },\n description: `${I18N}.smtp.username.description`,\n })\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.EmailPassword,\n title: `${I18N}.smtp.password.title`,\n scope: 'P',\n overridableAt: ['T'],\n isInherited: false,\n // Server DB at-rest encryption; implies cacheable: false.\n isEncrypted: true,\n defaultValue: AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS[AXPCommunicationManagementSettingKeys.EmailPassword],\n widget: {\n type: AXPWidgetsList.Editors.PasswordBox,\n },\n description: `${I18N}.smtp.password.description`,\n })\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.EmailFromAddress,\n title: `${I18N}.smtp.from-address.title`,\n scope: 'P',\n overridableAt: ['T'],\n isInherited: false,\n ...SMTP_CLIENT_CACHE,\n defaultValue: AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS[AXPCommunicationManagementSettingKeys.EmailFromAddress],\n widget: {\n type: AXPWidgetsList.Editors.TextBox,\n },\n description: `${I18N}.smtp.from-address.description`,\n })\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.EmailUseSsl,\n title: `${I18N}.smtp.ssl.title`,\n scope: 'P',\n overridableAt: ['T'],\n isInherited: false,\n ...SMTP_CLIENT_CACHE,\n defaultValue: AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS[AXPCommunicationManagementSettingKeys.EmailUseSsl],\n widget: {\n type: AXPWidgetsList.Editors.ToggleSwitch,\n },\n description: `${I18N}.smtp.ssl.description`,\n })\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.EmailUseTls,\n title: `${I18N}.smtp.tls.title`,\n scope: 'P',\n overridableAt: ['T'],\n isInherited: false,\n ...SMTP_CLIENT_CACHE,\n defaultValue: AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS[AXPCommunicationManagementSettingKeys.EmailUseTls],\n widget: {\n type: AXPWidgetsList.Editors.ToggleSwitch,\n },\n description: `${I18N}.smtp.tls.description`,\n })\n .addAction({\n title: `${I18N}.smtp.test.action`,\n icon: 'fa-light fa-paper-plane',\n color: 'primary',\n look: 'outline',\n disabledWhenDirty: true,\n requiredSettingKeys: [\n AXPCommunicationManagementSettingKeys.EmailServer,\n AXPCommunicationManagementSettingKeys.EmailPort,\n AXPCommunicationManagementSettingKeys.EmailFromAddress,\n ],\n command: {\n name: AXMCommunicationManagementCommandKeys.TestSmtp,\n },\n })\n .endSection()\n .endGroup();\n\n this.registerDevToolsRedirectSettings(context);\n }\n\n private registerDevToolsRedirectSettings(context: AXPSettingDefinitionProviderContext): void {\n const section = resolveCommunicationDebugRedirectSection(context);\n if (!section) {\n return;\n }\n\n section\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.DebugRedirectEmailAddress,\n title: `${DEV_TOOLS_I18N}.email.title`,\n scope: 'P',\n overridableAt: [],\n isInherited: false,\n defaultValue:\n AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS[AXPCommunicationManagementSettingKeys.DebugRedirectEmailAddress],\n widget: {\n type: AXPWidgetsList.Editors.TextBox,\n },\n description: `${DEV_TOOLS_I18N}.email.description`,\n })\n .endSection();\n }\n}\n\nfunction resolveCommunicationDebugRedirectSection(context: AXPSettingDefinitionProviderContext) {\n const devTools = context.group(AXP_PLATFORM_DEV_TOOLS_SETTINGS_GROUP);\n if (!devTools) {\n return null;\n }\n\n const hasSection = context\n .getGroup(AXP_PLATFORM_DEV_TOOLS_SETTINGS_GROUP)\n ?.sections.some((section) => section.name === AXP_PLATFORM_DEV_TOOLS_COMMUNICATION_DEBUG_REDIRECT_SECTION);\n\n if (hasSection) {\n return devTools.section(AXP_PLATFORM_DEV_TOOLS_COMMUNICATION_DEBUG_REDIRECT_SECTION);\n }\n\n return devTools.addSection(\n AXP_PLATFORM_DEV_TOOLS_COMMUNICATION_DEBUG_REDIRECT_SECTION,\n `${DEV_TOOLS_I18N}.title`,\n `${DEV_TOOLS_I18N}.description`,\n );\n}\n","import { Injectable } from '@angular/core';\nimport {\n AXPCommunicationManagementSettingKeys,\n RootConfig,\n} from '@acorex-platform/module-communication-management-client/contracts';\nimport { AXP_TEXT_TEMPLATE_CHANNEL_DEFINITION_PROVIDER } from '@acorex-platform/module-content-management-client';\nimport type {\n AXMTextTemplateChannelDefinition,\n AXMTextTemplateChannelDefinitionProvider,\n} from '@acorex-platform/module-content-management-client/contracts';\n\nconst I18N = `@${RootConfig.config.i18n}:templates.channels`;\n\n//#region ---- Built-in text template channels ----\n\n@Injectable()\nexport class AXMCommunicationTextTemplateChannelDefinitionProvider\n implements AXMTextTemplateChannelDefinitionProvider\n{\n getChannels(): AXMTextTemplateChannelDefinition[] {\n return [\n {\n name: 'email',\n communicationChannelKey: 'email-smtp',\n title: `${I18N}.email`,\n type: 'rich',\n hasSubject: true,\n requiredSettingKeys: [\n AXPCommunicationManagementSettingKeys.EmailServer,\n AXPCommunicationManagementSettingKeys.EmailPort,\n AXPCommunicationManagementSettingKeys.EmailFromAddress,\n ],\n notConfiguredMessageKey: `${I18N}.not-configured.email`,\n configureSettings: {\n group: 'communication',\n section: 'smtp-settings',\n scope: 'T',\n },\n },\n {\n name: 'in-app',\n communicationChannelKey: 'in-app',\n title: `${I18N}.in-app`,\n type: 'plain',\n hasSubject: true,\n },\n ];\n }\n}\n\n//#endregion\n\nexport const communicationTextTemplateChannelProvider = {\n provide: AXP_TEXT_TEMPLATE_CHANNEL_DEFINITION_PROVIDER,\n useClass: AXMCommunicationTextTemplateChannelDefinitionProvider,\n multi: true,\n};\n","//#region ---- Imports ----\n\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport {\n AXPInAppInboxConnectorService,\n AXP_IN_APP_INBOX_I18N,\n isInAppInboxUnread,\n AXPInAppInboxItemComponent,\n} from '../../../in-app/inbox';\nimport { AXPInAppInboxActionService } from '../../../in-app/inbox/in-app-inbox-action.service';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n inject,\n OnInit,\n} from '@angular/core';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n templateUrl: './communication-in-app-inbox-widget.component.html',\n styleUrls: ['./communication-in-app-inbox-widget.component.css'],\n standalone: true,\n imports: [\n CommonModule,\n AXTranslationModule,\n AXPInAppInboxItemComponent,\n AXPStateMessageComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPCommunicationInAppInboxWidgetViewComponent extends AXPValueWidgetComponent<unknown> implements OnInit {\n //#region ----- Services & Dependencies -----\n\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly connector = inject(AXPInAppInboxConnectorService);\n private readonly inboxActions = inject(AXPInAppInboxActionService);\n protected readonly i18n = inject(AXP_IN_APP_INBOX_I18N);\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly maxItems = computed(() => this.options()?.['maxItems'] ?? 10);\n protected readonly showAvatar = computed(() => this.options()?.['showAvatar'] ?? true);\n protected readonly showDate = computed(() => this.options()?.['showDate'] ?? true);\n\n protected readonly inboxItems = computed(() => {\n const items = this.connector.inboxList();\n if (!items?.length) {\n return [];\n }\n\n return items.filter((item) => isInAppInboxUnread(item.readAt)).slice(0, this.maxItems());\n });\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n override ngOnInit(): void {\n super.ngOnInit();\n void this.connector.ensureReady().then(() => this.cdr.detectChanges());\n }\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected async onItemPress(id: string): Promise<void> {\n await this.inboxActions.openItem(id);\n this.cdr.detectChanges();\n }\n\n protected async onDismissUnread(id: string): Promise<void> {\n await this.connector.markAsRead([id]);\n this.cdr.detectChanges();\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"size-full p-3 flex flex-col min-h-0\">\n <div class=\"overflow-auto flex-1 min-h-0 flex flex-col\">\n @for (item of inboxItems(); track item.id) {\n <axp-in-app-inbox-item\n [data]=\"item\"\n [showAvatar]=\"showAvatar()\"\n [showDate]=\"showDate()\"\n [markAsReadLabelKey]=\"i18n.markAsRead\"\n (itemPress)=\"onItemPress($event)\"\n (markAsRead)=\"onDismissUnread($event)\"\n />\n } @empty {\n <axp-state-message\n icon=\"fa-light fa-inbox\"\n [title]=\"i18n.emptyTitle\"\n [description]=\"i18n.emptyDescription\"\n />\n }\n </div>\n</div>\n","//#region ----- Imports -----\n\nimport { defineDashboardWidgetDimensions } from '@acorex-platform/module-dashboard-management-client';\n\n//#endregion\n\n//#region ----- Communication dashboard presets -----\n\n/** Unread in-app inbox dashboard tile. */\nexport const AXP_MY_IN_APP_INBOX_DASHBOARD_DIMENSIONS = defineDashboardWidgetDimensions({\n sm: [[1, 5]],\n md: [\n [3, 4],\n [4, 4],\n ],\n lg: [\n [3, 4],\n [4, 4],\n ],\n xl: [\n [3, 4],\n [4, 4],\n ],\n '2xl': [\n [3, 4],\n [4, 4],\n ],\n '3xl': [\n [3, 4],\n [4, 4],\n ],\n '4xl': [\n [3, 4],\n [4, 4],\n ],\n});\n\n//#endregion\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, cloneProperty } from '@acorex-platform/framework-shared/widget-core';\nimport { AXP_WIDGETS_UTILITY_CATEGORY } from '@acorex-platform/module-dashboard-management-client';\nimport { AXP_MY_IN_APP_INBOX_DASHBOARD_DIMENSIONS } from '../../communication-dashboard-widget.dimensions';\nimport { AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';\nimport {\n AXP_APPEARANCE_PROPERTY_GROUP,\n AXP_DATA_PATH_PROPERTY,\n AXP_STYLING_PROPERTY_GROUP,\n} from '@acorex-platform/framework-client/layout/widgets';\nimport { RootConfig } from '@acorex-platform/module-communication-management-client/contracts';\n\n//#region ---- My in-app inbox dashboard widget config ----\n\nexport const AXPMyInAppInboxDashboardWidget: AXPWidgetConfig = {\n name: RootConfig.widgets.myInAppInboxDashboard,\n title: '@communication-management:widgets.my-in-app-inbox-dashboard.widget-title',\n categories: [AXP_WIDGETS_UTILITY_CATEGORY],\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n description: '@communication-management:widgets.my-in-app-inbox-dashboard.widget-description',\n icon: 'fa-regular fa-inbox',\n properties: [\n cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),\n {\n name: 'maxItems',\n title: '@communication-management:widgets.my-in-app-inbox-dashboard.max-items',\n description: 'Maximum number of unread inbox items to display',\n group: AXP_STYLING_PROPERTY_GROUP,\n schema: {\n defaultValue: 10,\n dataType: 'number',\n interface: {\n name: 'maxItems',\n path: 'options.maxItems',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 1,\n maxValue: 100,\n },\n },\n },\n visible: true,\n },\n {\n name: 'showAvatar',\n title: '@communication-management:widgets.my-in-app-inbox-dashboard.show-avatar',\n description: 'Whether to show avatars in inbox items',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showAvatar',\n path: 'options.showAvatar',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'showDate',\n title: '@communication-management:widgets.my-in-app-inbox-dashboard.show-date',\n description: 'Whether to show date in inbox items',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showDate',\n path: 'options.showDate',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n ],\n components: {\n view: {\n component: () =>\n import('./communication-in-app-inbox-widget.component').then(\n (c) => c.AXPCommunicationInAppInboxWidgetViewComponent,\n ),\n },\n },\n meta: {\n dimensions: AXP_MY_IN_APP_INBOX_DASHBOARD_DIMENSIONS,\n },\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPWidgetDefinitionProvider } from '@acorex-platform/framework-client/layout/widget-core';\nimport { Injectable } from '@angular/core';\nimport { AXPMyInAppInboxDashboardWidget } from './features/dashboard/widgets/my-in-app-inbox';\n\n//#endregion\n\n//#region ---- Communication Management Widgets Provider ----\n\n@Injectable()\nexport class AXMCommunicationManagementWidgetsProvider implements AXPWidgetDefinitionProvider {\n getWidgets() {\n return [AXPMyInAppInboxDashboardWidget];\n }\n}\n\n//#endregion\n","import { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\nimport {\n AXP_MENU_PROVIDER,\n AXP_PROTECTED_ROUTE_GUARDS,\n AXP_SEARCH_PROVIDER,\n AXP_SETTING_DEFINITION_PROVIDER,\n AXP_STATUS_PROVIDERS,\n} from '@acorex-platform/framework-client/common';\nimport { AXPComponentSlotModule, AXP_MODULE_MANIFEST_PROVIDER } from '@acorex-platform/framework-client/core';\nimport { AXP_TASK_BADGE_PROVIDERS } from '@acorex-platform/framework-client/layout/components';\nimport { AXPRootLayoutComponent } from '@acorex-platform/framework-client/themes/default';\nimport { provideCommandSetups } from '@acorex-platform/framework-client/runtime';\nimport { NgModule } from '@angular/core';\nimport { ROUTES, Routes } from '@angular/router';\nimport { AXMCommunicationManagementCommandKeys } from '@acorex-platform/module-communication-management-client/contracts';\nimport { AXMCommunicationInboxBadgeProvider } from './badge.provider';\nimport { AXMCommunicationDeliveryStatusProvider } from './features/communication-delivery-status.provider';\nimport { AXMCommunicationStatusProvider } from './features/communication-status.provider';\nimport {\n communicationInAppInboxConfig,\n communicationInAppInboxI18n,\n} from './features/in-app/communication-in-app-inbox.providers';\nimport { AXMCommunicationInAppInboxPort } from './features/in-app/communication-in-app-inbox.port';\nimport { provideCommunicationInAppRealtimeHandlers } from './features/in-app/communication-in-app-realtime.providers';\nimport { provideCommunicationInAppInboxFallbackSync } from './features/in-app/communication-in-app-inbox-fallback.providers';\nimport { AXMCommunicationInAppInboxSyncStatusService } from './features/in-app/communication-in-app-inbox-sync-status.service';\nimport { communicationInAppNotificationServiceProvider } from './features/in-app/communication-in-app-notification.service';\nimport {\n AXPInAppInboxSlotComponent,\n AXP_IN_APP_INBOX_CONFIG,\n AXP_IN_APP_INBOX_I18N,\n AXP_IN_APP_INBOX_PORT,\n AXP_IN_APP_INBOX_SYNC_STATUS,\n} from './features/in-app/inbox';\nimport { AXMCommunicationUserNotificationsSettingProvider } from './features/settings/communication-user-notifications-settings.provider';\nimport { CommunicationManagementManifest } from './manifest';\n\nimport { AXMCommunicationManagementMenuProvider } from './menu.provider';\nimport { AXMCommunicationManagementPermissionDefinitionProvider } from './permission-definition.provider';\nimport { AXMCommunicationManagementSearchCommandProvider } from './search-command.provider';\nimport { AXMCommunicationManagementSettingProvider } from './settings.provider';\nimport { AXP_WIDGET_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/layout/widget-core';\nimport { communicationTextTemplateChannelProvider } from './features/templates/communication-text-template-channel-definition.provider';\nimport { AXMCommunicationManagementWidgetsProvider } from './widget-definition.provider';\n\n/** @deprecated Legacy notification-management command keys — shimmed to communication email commands. */\nconst LEGACY_NOTIFICATION_EMAIL_SHOW_DIALOG_COMMAND_KEY = 'NotificationManagement:Email:ShowDialog' as const;\nconst LEGACY_NOTIFICATION_EMAIL_SEND_COMMAND_KEY = 'NotificationManagement:Email:Send' as const;\n\nfunction routesFactory(): Routes {\n return [\n {\n path: ':app/my/notification',\n canActivate: [...AXP_PROTECTED_ROUTE_GUARDS],\n data: { rootLayout: true },\n loadComponent: () => AXPRootLayoutComponent,\n title: 'Notifications',\n children: [\n {\n path: '',\n loadComponent: () =>\n import('./features/in-app/communication-in-app-inbox-page.component').then(\n (m) => m.AXMCommunicationInAppInboxPageComponent,\n ),\n data: { reuse: true },\n },\n ],\n },\n ];\n}\n\n@NgModule({\n imports: [\n AXPComponentSlotModule.forChild({\n 'root-header-end': [\n {\n name: 'communication-inbox',\n component: AXPInAppInboxSlotComponent,\n },\n ],\n }),\n ],\n providers: [\n provideCommandSetups([\n {\n key: AXMCommunicationManagementCommandKeys.Send,\n command: () => import('./commands/communication-send.command').then((m) => m.CommunicationSendCommand),\n },\n {\n key: AXMCommunicationManagementCommandKeys.TestSmtp,\n command: () => import('./commands/communication-test-smtp.command').then((m) => m.CommunicationTestSmtpCommand),\n },\n {\n key: AXMCommunicationManagementCommandKeys.EmailShowDialog,\n command: () =>\n import('./features/email/communication-email-show-dialog.command').then(\n (m) => m.CommunicationManagementEmailShowDialogCommand,\n ),\n },\n {\n key: AXMCommunicationManagementCommandKeys.EmailSend,\n command: () =>\n import('./features/email/communication-email-send.command').then(\n (m) => m.CommunicationManagementEmailSendCommand,\n ),\n },\n {\n key: AXMCommunicationManagementCommandKeys.ShowSentMessage,\n command: () =>\n import('./commands/communication-show-sent-message.command').then(\n (m) => m.CommunicationShowSentMessageCommand,\n ),\n },\n {\n key: LEGACY_NOTIFICATION_EMAIL_SHOW_DIALOG_COMMAND_KEY,\n command: () =>\n import('./features/email/communication-email-show-dialog.command').then(\n (m) => m.CommunicationManagementEmailShowDialogCommand,\n ),\n },\n {\n key: LEGACY_NOTIFICATION_EMAIL_SEND_COMMAND_KEY,\n command: () =>\n import('./features/email/communication-email-send.command').then(\n (m) => m.CommunicationManagementEmailSendCommand,\n ),\n },\n ]),\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: CommunicationManagementManifest,\n multi: true,\n },\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMCommunicationManagementPermissionDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMCommunicationManagementMenuProvider,\n multi: true,\n },\n \n {\n provide: AXP_STATUS_PROVIDERS,\n useClass: AXMCommunicationStatusProvider,\n multi: true,\n },\n {\n provide: AXP_STATUS_PROVIDERS,\n useClass: AXMCommunicationDeliveryStatusProvider,\n multi: true,\n },\n {\n provide: AXP_SEARCH_PROVIDER,\n useClass: AXMCommunicationManagementSearchCommandProvider,\n multi: true,\n },\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXMCommunicationManagementSettingProvider,\n multi: true,\n },\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXMCommunicationUserNotificationsSettingProvider,\n multi: true,\n },\n communicationTextTemplateChannelProvider,\n {\n provide: AXP_WIDGET_DEFINITION_PROVIDER,\n useClass: AXMCommunicationManagementWidgetsProvider,\n multi: true,\n },\n {\n provide: AXP_IN_APP_INBOX_PORT,\n useClass: AXMCommunicationInAppInboxPort,\n },\n {\n provide: AXP_IN_APP_INBOX_CONFIG,\n useValue: communicationInAppInboxConfig,\n },\n {\n provide: AXP_IN_APP_INBOX_I18N,\n useValue: communicationInAppInboxI18n,\n },\n {\n provide: AXP_IN_APP_INBOX_SYNC_STATUS,\n useExisting: AXMCommunicationInAppInboxSyncStatusService,\n },\n communicationInAppNotificationServiceProvider,\n {\n provide: AXP_TASK_BADGE_PROVIDERS,\n useClass: AXMCommunicationInboxBadgeProvider,\n multi: true,\n },\n ...provideCommunicationInAppRealtimeHandlers(),\n ...provideCommunicationInAppInboxFallbackSync(),\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFactory,\n },\n ],\n})\nexport class AXMCommunicationManagementModule {}\n","//#region ----- Imports -----\n\nimport type { AXMCommonDashboardEntityModel } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { layoutFromDimensions } from '@acorex-platform/module-dashboard-management-client';\n\nimport { AXP_MY_IN_APP_INBOX_DASHBOARD_DIMENSIONS } from './communication-dashboard-widget.dimensions';\n\n//#endregion\n\n//#region ----- Types -----\n\ntype DashboardSeedWidget = AXMCommonDashboardEntityModel['widgets'][number];\ntype DashboardSeedGridSize = readonly [width: number, height: number];\n\n//#endregion\n\n//#region ----- Builders -----\n\nexport function buildMyInAppInboxDashboardWidget(\n id: string,\n x: number,\n y: number,\n size: DashboardSeedGridSize = [4, 3],\n): DashboardSeedWidget {\n const { config, meta } = layoutFromDimensions(id, AXP_MY_IN_APP_INBOX_DASHBOARD_DIMENSIONS, { x, y, lg: size });\n\n return {\n config: {\n ...config,\n title: '@communication-management:widgets.my-in-app-inbox-dashboard.widget-title',\n },\n node: {\n type: 'CommunicationManagement:Widget:Dashboard:MyInAppInboxDashboard',\n meta,\n name: `CommunicationManagement:Widget:Dashboard:MyInAppInboxDashboard-${id}`,\n path: `CommunicationManagement:Widget:Dashboard:MyInAppInboxDashboard-${id}`,\n },\n };\n}\n\n//#endregion\n","import type { AXPSettingDefinitionProviderContext } from '@acorex-platform/framework-client/common';\nimport {\n AXP_COMMUNICATION_DELIVERY_CHANNELS_SETTINGS_SECTION,\n AXP_COMMUNICATION_USER_NOTIFICATIONS_SETTINGS_GROUP,\n} from '@acorex-platform/module-communication-management-client/contracts';\n\n//#region ---- Delivery channels settings section resolver ----\n\nexport function resolveCommunicationDeliveryChannelsSettingsSection(\n context: AXPSettingDefinitionProviderContext,\n) {\n if (!context.hasGroup(AXP_COMMUNICATION_USER_NOTIFICATIONS_SETTINGS_GROUP)) {\n return null;\n }\n\n const group = context.getGroup(AXP_COMMUNICATION_USER_NOTIFICATIONS_SETTINGS_GROUP);\n const hasSection = group?.sections.some(\n (section) => section.name === AXP_COMMUNICATION_DELIVERY_CHANNELS_SETTINGS_SECTION,\n );\n if (!hasSection) {\n return null;\n }\n\n return context.group(AXP_COMMUNICATION_USER_NOTIFICATIONS_SETTINGS_GROUP)?.section(\n AXP_COMMUNICATION_DELIVERY_CHANNELS_SETTINGS_SECTION,\n ) ?? null;\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["I18N","i1","i2","i3","i4","i5","i6","RootConfig","AXMCommunicationManagementCommandKeys"],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ import { AXPSessionService } from '@acorex-platform/framework-client/auth';
|
|
|
6
6
|
import { AXPSettingsService } from '@acorex-platform/framework-client/common';
|
|
7
7
|
import { AXPPlatformScope } from '@acorex-platform/framework-shared/core';
|
|
8
8
|
import { AXPLayoutBuilderService, resolveLayoutBuilderDialogResult } from '@acorex-platform/framework-client/layout/builder';
|
|
9
|
-
import { AXPOrganizationManagementSettings } from '@acorex-platform/module-organization-management-contracts';
|
|
9
|
+
import { AXPOrganizationManagementSettings } from '@acorex-platform/module-organization-management-client/contracts';
|
|
10
10
|
import { d as AXPCommunicationManagementClient } from './acorex-platform-module-communication-management-client-acorex-platform-module-communication-management-client-09UhY2Rc.mjs';
|
|
11
11
|
|
|
12
12
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-communication-management-client-communication-test-smtp.command-BySmN1Lz.mjs","sources":["../../../../libs/modules/communication-management/client/src/lib/features/smtp/communication-smtp-test-dialog.service.ts","../../../../libs/modules/communication-management/client/src/lib/commands/communication-test-smtp.command.ts"],"sourcesContent":["import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService, type AXPUser } from '@acorex-platform/framework-client/auth';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPRuntimeCommandResult, AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport {\n AXPLayoutBuilderService,\n resolveLayoutBuilderDialogResult,\n type AXPDialogRef,\n} from '@acorex-platform/framework-client/layout/builder';\nimport { Injectable, inject } from '@angular/core';\nimport type { CommunicationSmtpTestResult } from '@acorex-platform/module-communication-management-client/contracts';\nimport { AXPOrganizationManagementSettings } from '@acorex-platform/module-organization-management-contracts';\nimport { AXPCommunicationManagementClient } from '../../communication-management-client.port';\n\n//#region ----- Types -----\n\ntype SmtpTestDialogResult = AXPRuntimeCommandResult<CommunicationSmtpTestResult> | null;\n\n//#endregion\n\n//#region ----- SMTP test dialog -----\n\nfunction coerceEmailSettingValue(value: unknown): string {\n if (typeof value === 'string' && value.includes('@')) {\n return value.trim();\n }\n\n if (value != null && typeof value === 'object' && 'value' in value) {\n const nested = (value as { value?: unknown }).value;\n if (typeof nested === 'string' && nested.includes('@')) {\n return nested.trim();\n }\n }\n\n return '';\n}\n\nfunction resolveUserRecipientEmail(user: AXPUser | null): string {\n if (!user) {\n return '';\n }\n\n const runtimeEmail = (user as { email?: unknown }).email;\n const fromRuntime = coerceEmailSettingValue(runtimeEmail);\n if (fromRuntime) {\n return fromRuntime;\n }\n\n const candidates = [user.name, user.title];\n for (const candidate of candidates) {\n const email = coerceEmailSettingValue(candidate);\n if (email) {\n return email;\n }\n }\n\n return '';\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXMCommunicationSmtpTestDialogService {\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly translationService = inject(AXTranslationService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly settingsService = inject(AXPSettingsService);\n private readonly client = inject(AXPCommunicationManagementClient);\n\n private async resolveDefaultRecipientEmail(): Promise<string> {\n const fromUser = resolveUserRecipientEmail(this.sessionService.user);\n if (fromUser) {\n return fromUser;\n }\n\n const supportEmail = await this.settingsService\n .scope(AXPPlatformScope.Tenant)\n .get(AXPOrganizationManagementSettings.SupportEmail);\n\n return coerceEmailSettingValue(supportEmail);\n }\n\n async openAndSendTestEmail(): Promise<SmtpTestDialogResult> {\n const defaultRecipient = await this.resolveDefaultRecipientEmail();\n\n try {\n const result = await this.layoutBuilder\n .create()\n .dialog<SmtpTestDialogResult>((dialog) => {\n dialog\n .setTitle('@communication-management:settings.communication.smtp.test.dialog.title')\n .setSize('sm')\n .setCloseButton(true)\n .setContext({\n recipientAddress: defaultRecipient,\n })\n .content((flex) => {\n flex\n .setDirection('column')\n .setGap('16px')\n .formField('@communication-management:settings.communication.smtp.test.dialog.fields.recipient.title', (field) => {\n field.path('recipientAddress');\n field.textBox({\n validations: [{ rule: 'required' }, { rule: 'email' }],\n placeholder:\n '@communication-management:settings.communication.smtp.test.dialog.fields.recipient.placeholder',\n });\n });\n })\n .setActions((actions) => {\n actions\n .cancel('@general:actions.cancel.title')\n .submit('@communication-management:settings.communication.smtp.test.dialog.actions.send');\n })\n .onAction(async (dialogRef: AXPDialogRef) => {\n if (dialogRef.action() === 'cancel') {\n return null;\n }\n\n const context = dialogRef.context() as Record<string, unknown> | null;\n const recipientAddress = String(context?.['recipientAddress'] ?? '').trim();\n if (!recipientAddress) {\n throw new Error(\n await this.translationService.translateAsync(\n '@communication-management:settings.communication.smtp.test.messages.recipient-required',\n ),\n );\n }\n\n const data = await this.client.testSmtp({ recipientAddress });\n return { success: true, kind: 'object', data };\n });\n })\n .show();\n\n return resolveLayoutBuilderDialogResult<AXPRuntimeCommandResult<CommunicationSmtpTestResult>>(result);\n } catch (error) {\n const message = error instanceof Error ? error.message : 'SMTP test failed.';\n return {\n success: false,\n message: { text: message },\n };\n }\n }\n}\n\n//#endregion\n","import { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport type { AXPCommand, AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport type { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport type { CommunicationSmtpTestResult } from '@acorex-platform/module-communication-management-client/contracts';\nimport { Injectable, inject } from '@angular/core';\nimport { AXMCommunicationSmtpTestDialogService } from '../features/smtp/communication-smtp-test-dialog.service';\n\n//#region ----- Communication SMTP test command -----\n\n@Injectable()\nexport class CommunicationTestSmtpCommand implements AXPCommand<void, CommunicationSmtpTestResult | null> {\n private readonly dialog = inject(AXMCommunicationSmtpTestDialogService);\n private readonly toastService = inject(AXToastService);\n private readonly translationService = inject(AXTranslationService);\n\n async execute(): AXPCommandExecuteResultPromise<CommunicationSmtpTestResult | null> {\n const result = await this.dialog.openAndSendTestEmail();\n\n // Cancel / header close — not a failure for the integrations panel.\n if (!result) {\n return { success: true, kind: 'object', data: null };\n }\n\n if (result.success) {\n this.toastService.success(\n await this.translationService.translateAsync(\n '@communication-management:settings.communication.smtp.test.messages.success',\n ),\n );\n return result;\n }\n\n if (result.message?.text) {\n const content = await this.translationService.translateAsync(result.message.text);\n this.toastService.show({ color: 'danger', title: 'Test failed', content });\n }\n\n return result;\n }\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-communication-management-client-communication-test-smtp.command-BySmN1Lz.mjs","sources":["../../../../libs/modules/communication-management/client/src/lib/features/smtp/communication-smtp-test-dialog.service.ts","../../../../libs/modules/communication-management/client/src/lib/commands/communication-test-smtp.command.ts"],"sourcesContent":["import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService, type AXPUser } from '@acorex-platform/framework-client/auth';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPRuntimeCommandResult, AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport {\n AXPLayoutBuilderService,\n resolveLayoutBuilderDialogResult,\n type AXPDialogRef,\n} from '@acorex-platform/framework-client/layout/builder';\nimport { Injectable, inject } from '@angular/core';\nimport type { CommunicationSmtpTestResult } from '@acorex-platform/module-communication-management-client/contracts';\nimport { AXPOrganizationManagementSettings } from '@acorex-platform/module-organization-management-client/contracts';\nimport { AXPCommunicationManagementClient } from '../../communication-management-client.port';\n\n//#region ----- Types -----\n\ntype SmtpTestDialogResult = AXPRuntimeCommandResult<CommunicationSmtpTestResult> | null;\n\n//#endregion\n\n//#region ----- SMTP test dialog -----\n\nfunction coerceEmailSettingValue(value: unknown): string {\n if (typeof value === 'string' && value.includes('@')) {\n return value.trim();\n }\n\n if (value != null && typeof value === 'object' && 'value' in value) {\n const nested = (value as { value?: unknown }).value;\n if (typeof nested === 'string' && nested.includes('@')) {\n return nested.trim();\n }\n }\n\n return '';\n}\n\nfunction resolveUserRecipientEmail(user: AXPUser | null): string {\n if (!user) {\n return '';\n }\n\n const runtimeEmail = (user as { email?: unknown }).email;\n const fromRuntime = coerceEmailSettingValue(runtimeEmail);\n if (fromRuntime) {\n return fromRuntime;\n }\n\n const candidates = [user.name, user.title];\n for (const candidate of candidates) {\n const email = coerceEmailSettingValue(candidate);\n if (email) {\n return email;\n }\n }\n\n return '';\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXMCommunicationSmtpTestDialogService {\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly translationService = inject(AXTranslationService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly settingsService = inject(AXPSettingsService);\n private readonly client = inject(AXPCommunicationManagementClient);\n\n private async resolveDefaultRecipientEmail(): Promise<string> {\n const fromUser = resolveUserRecipientEmail(this.sessionService.user);\n if (fromUser) {\n return fromUser;\n }\n\n const supportEmail = await this.settingsService\n .scope(AXPPlatformScope.Tenant)\n .get(AXPOrganizationManagementSettings.SupportEmail);\n\n return coerceEmailSettingValue(supportEmail);\n }\n\n async openAndSendTestEmail(): Promise<SmtpTestDialogResult> {\n const defaultRecipient = await this.resolveDefaultRecipientEmail();\n\n try {\n const result = await this.layoutBuilder\n .create()\n .dialog<SmtpTestDialogResult>((dialog) => {\n dialog\n .setTitle('@communication-management:settings.communication.smtp.test.dialog.title')\n .setSize('sm')\n .setCloseButton(true)\n .setContext({\n recipientAddress: defaultRecipient,\n })\n .content((flex) => {\n flex\n .setDirection('column')\n .setGap('16px')\n .formField('@communication-management:settings.communication.smtp.test.dialog.fields.recipient.title', (field) => {\n field.path('recipientAddress');\n field.textBox({\n validations: [{ rule: 'required' }, { rule: 'email' }],\n placeholder:\n '@communication-management:settings.communication.smtp.test.dialog.fields.recipient.placeholder',\n });\n });\n })\n .setActions((actions) => {\n actions\n .cancel('@general:actions.cancel.title')\n .submit('@communication-management:settings.communication.smtp.test.dialog.actions.send');\n })\n .onAction(async (dialogRef: AXPDialogRef) => {\n if (dialogRef.action() === 'cancel') {\n return null;\n }\n\n const context = dialogRef.context() as Record<string, unknown> | null;\n const recipientAddress = String(context?.['recipientAddress'] ?? '').trim();\n if (!recipientAddress) {\n throw new Error(\n await this.translationService.translateAsync(\n '@communication-management:settings.communication.smtp.test.messages.recipient-required',\n ),\n );\n }\n\n const data = await this.client.testSmtp({ recipientAddress });\n return { success: true, kind: 'object', data };\n });\n })\n .show();\n\n return resolveLayoutBuilderDialogResult<AXPRuntimeCommandResult<CommunicationSmtpTestResult>>(result);\n } catch (error) {\n const message = error instanceof Error ? error.message : 'SMTP test failed.';\n return {\n success: false,\n message: { text: message },\n };\n }\n }\n}\n\n//#endregion\n","import { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport type { AXPCommand, AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport type { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport type { CommunicationSmtpTestResult } from '@acorex-platform/module-communication-management-client/contracts';\nimport { Injectable, inject } from '@angular/core';\nimport { AXMCommunicationSmtpTestDialogService } from '../features/smtp/communication-smtp-test-dialog.service';\n\n//#region ----- Communication SMTP test command -----\n\n@Injectable()\nexport class CommunicationTestSmtpCommand implements AXPCommand<void, CommunicationSmtpTestResult | null> {\n private readonly dialog = inject(AXMCommunicationSmtpTestDialogService);\n private readonly toastService = inject(AXToastService);\n private readonly translationService = inject(AXTranslationService);\n\n async execute(): AXPCommandExecuteResultPromise<CommunicationSmtpTestResult | null> {\n const result = await this.dialog.openAndSendTestEmail();\n\n // Cancel / header close — not a failure for the integrations panel.\n if (!result) {\n return { success: true, kind: 'object', data: null };\n }\n\n if (result.success) {\n this.toastService.success(\n await this.translationService.translateAsync(\n '@communication-management:settings.communication.smtp.test.messages.success',\n ),\n );\n return result;\n }\n\n if (result.message?.text) {\n const content = await this.translationService.translateAsync(result.message.text);\n this.toastService.show({ color: 'danger', title: 'Test failed', content });\n }\n\n return result;\n }\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@acorex-platform/module-communication-management-client",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.25",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"peerDependencies": {
|
|
6
|
+
"@acorex-platform/module-dashboard-management-client": "0.0.25",
|
|
7
|
+
"@acorex-platform/module-organization-management-client": "0.0.25",
|
|
6
8
|
"@angular/common": "^21.0.0",
|
|
7
9
|
"@angular/core": "^21.0.0"
|
|
8
10
|
},
|
|
@@ -4,7 +4,7 @@ import * as i1 from '@acorex-platform/framework-client/core';
|
|
|
4
4
|
import { CommunicationSendInput, CommunicationSendResult, CommunicationDeliveryEngagementRequest, CommunicationDeliveryEngagementResult, CommunicationDeliveryMutationResult, CommunicationSmtpTestInput, CommunicationSmtpTestResult } from '@acorex-platform/module-communication-management-client/contracts';
|
|
5
5
|
import * as _acorex_platform_module_dashboard_management_client from '@acorex-platform/module-dashboard-management-client';
|
|
6
6
|
import * as dist_libs_modules_dashboard_management_contracts_src from 'dist/libs/modules/dashboard-management/contracts/src';
|
|
7
|
-
import { AXMCommonDashboardEntityModel } from '@acorex-platform/module-dashboard-management-contracts';
|
|
7
|
+
import { AXMCommonDashboardEntityModel } from '@acorex-platform/module-dashboard-management-client/contracts';
|
|
8
8
|
import * as _acorex_platform_module_communication_management_client from '@acorex-platform/module-communication-management-client';
|
|
9
9
|
import { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';
|
|
10
10
|
import { AXPWidgetConfig } from '@acorex-platform/framework-shared/widget-core';
|