@acorex/modules 19.4.14 → 19.4.15

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.
Files changed (74) hide show
  1. package/assets/images/weather/cloudy-day-1.svg +175 -0
  2. package/assets/images/weather/cloudy-day-2.svg +176 -0
  3. package/assets/images/weather/cloudy-day-3.svg +175 -0
  4. package/assets/images/weather/cloudy-night-1.svg +198 -0
  5. package/assets/images/weather/cloudy-night-2.svg +198 -0
  6. package/assets/images/weather/cloudy-night-3.svg +198 -0
  7. package/assets/images/weather/cloudy.svg +500 -0
  8. package/assets/images/weather/day.svg +521 -0
  9. package/assets/images/weather/night.svg +503 -0
  10. package/assets/images/weather/rainy-1.svg +157 -0
  11. package/assets/images/weather/rainy-2.svg +133 -0
  12. package/assets/images/weather/rainy-3.svg +157 -0
  13. package/assets/images/weather/rainy-4.svg +66 -0
  14. package/assets/images/weather/rainy-5.svg +90 -0
  15. package/assets/images/weather/rainy-6.svg +91 -0
  16. package/assets/images/weather/rainy-7.svg +91 -0
  17. package/assets/images/weather/snowy-1.svg +230 -0
  18. package/assets/images/weather/snowy-2.svg +237 -0
  19. package/assets/images/weather/snowy-3.svg +268 -0
  20. package/assets/images/weather/snowy-4.svg +94 -0
  21. package/assets/images/weather/snowy-5.svg +166 -0
  22. package/assets/images/weather/snowy-6.svg +225 -0
  23. package/assets/images/weather/thunder.svg +268 -0
  24. package/assets/images/weather/weather-sprite.svg +1245 -0
  25. package/assets/images/weather/weather.svg +1245 -0
  26. package/assets/images/weather/weather_sagittarius.svg +9 -0
  27. package/assets/images/weather/weather_sunset.svg +14 -0
  28. package/conversation/lib/features/chat/components/chat-preview/chat-preview.component.d.ts +0 -1
  29. package/conversation/lib/features/index.d.ts +1 -0
  30. package/conversation/lib/features/widget/share/comment/comment-widget-view.component.d.ts +66 -0
  31. package/conversation/lib/features/widget/share/comment/comment-widget.config.d.ts +2 -0
  32. package/conversation/lib/features/widget/share/comment/index.d.ts +2 -0
  33. package/dashboard-management/lib/features/home-dashboard/dashboard-popups/index.d.ts +3 -0
  34. package/dashboard-management/lib/features/home-dashboard/index.d.ts +3 -0
  35. package/dashboard-management/lib/features/home-dashboard/setrting.keys.d.ts +3 -0
  36. package/dashboard-management/lib/features/home-dashboard/widget-wrapper/index.d.ts +1 -0
  37. package/dashboard-management/lib/features/shared/widgets/analog-clock/analog-clock-widget-view.component.d.ts +9 -0
  38. package/dashboard-management/lib/features/shared/widgets/analog-clock/analog-clock-widget.config.d.ts +7 -0
  39. package/dashboard-management/lib/features/shared/widgets/analog-clock/analog-clock.component.d.ts +28 -0
  40. package/dashboard-management/lib/features/shared/widgets/analog-clock/index.d.ts +3 -0
  41. package/dashboard-management/lib/features/shared/widgets/index.d.ts +1 -0
  42. package/dashboard-management/lib/features/shared/widgets/weather/advanced-weather/advanced-weather.component.d.ts +32 -0
  43. package/dashboard-management/lib/features/shared/widgets/weather/advanced-weather/advanced-weather.config.d.ts +14 -0
  44. package/dashboard-management/lib/features/shared/widgets/weather/advanced-weather/index.d.ts +2 -0
  45. package/dashboard-management/lib/features/shared/widgets/weather/index.d.ts +2 -0
  46. package/dashboard-management/lib/features/shared/widgets/weather/minimal-weather/index.d.ts +2 -0
  47. package/dashboard-management/lib/features/shared/widgets/weather/minimal-weather/minimal-weather.component.d.ts +22 -0
  48. package/dashboard-management/lib/features/shared/widgets/weather/minimal-weather/minimal-weather.config.d.ts +14 -0
  49. package/dashboard-management/lib/features/shared/widgets/weather/weather-services/weather-api.abstract.d.ts +19 -0
  50. package/dashboard-management/lib/features/shared/widgets/weather/weather-widget.component.d.ts +5 -5
  51. package/fesm2022/{acorex-modules-application-management-module-designer.component-BJp8imYd.mjs → acorex-modules-application-management-module-designer.component-ZKzHxJ0D.mjs} +2 -2
  52. package/fesm2022/{acorex-modules-application-management-module-designer.component-BJp8imYd.mjs.map → acorex-modules-application-management-module-designer.component-ZKzHxJ0D.mjs.map} +1 -1
  53. package/fesm2022/acorex-modules-application-management.mjs +1 -1
  54. package/fesm2022/acorex-modules-conversation.mjs +476 -15
  55. package/fesm2022/acorex-modules-conversation.mjs.map +1 -1
  56. package/fesm2022/acorex-modules-dashboard-management.mjs +1224 -30
  57. package/fesm2022/acorex-modules-dashboard-management.mjs.map +1 -1
  58. package/fesm2022/acorex-modules-notification-management.mjs +7 -7
  59. package/fesm2022/acorex-modules-notification-management.mjs.map +1 -1
  60. package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-CzMi7CBH.mjs → acorex-modules-platform-management-acorex-modules-platform-management-CGGoHpYi.mjs} +119 -27
  61. package/fesm2022/acorex-modules-platform-management-acorex-modules-platform-management-CGGoHpYi.mjs.map +1 -0
  62. package/fesm2022/{acorex-modules-platform-management-list-version.component-DfbMc2hn.mjs → acorex-modules-platform-management-list-version.component-CGxYFnd9.mjs} +2 -2
  63. package/fesm2022/{acorex-modules-platform-management-list-version.component-DfbMc2hn.mjs.map → acorex-modules-platform-management-list-version.component-CGxYFnd9.mjs.map} +1 -1
  64. package/fesm2022/{acorex-modules-platform-management-settings.provider-B-19OJn0.mjs → acorex-modules-platform-management-settings.provider-CHAI3QHV.mjs} +2 -2
  65. package/fesm2022/{acorex-modules-platform-management-settings.provider-B-19OJn0.mjs.map → acorex-modules-platform-management-settings.provider-CHAI3QHV.mjs.map} +1 -1
  66. package/fesm2022/acorex-modules-platform-management.mjs +1 -1
  67. package/fesm2022/acorex-modules-project-management.mjs +95 -21
  68. package/fesm2022/acorex-modules-project-management.mjs.map +1 -1
  69. package/fesm2022/{acorex-modules-security-management-permissions-editor.component-Ccx0_9L_.mjs → acorex-modules-security-management-permissions-editor.component-B2OIvMs7.mjs} +2 -2
  70. package/fesm2022/{acorex-modules-security-management-permissions-editor.component-Ccx0_9L_.mjs.map → acorex-modules-security-management-permissions-editor.component-B2OIvMs7.mjs.map} +1 -1
  71. package/fesm2022/acorex-modules-security-management.mjs +1 -1
  72. package/package.json +1 -1
  73. package/platform-management/lib/features/common/regional/data-source.provider.d.ts +1 -0
  74. package/fesm2022/acorex-modules-platform-management-acorex-modules-platform-management-CzMi7CBH.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-conversation.mjs","sources":["../../../../libs/modules/conversation/src/lib/const.ts","../../../../libs/modules/conversation/src/lib/entities/message/message.service.ts","../../../../libs/modules/conversation/src/lib/entities/message/message.entity.ts","../../../../libs/modules/conversation/src/lib/entities/message/message.types.ts","../../../../libs/modules/conversation/src/lib/entities/room/room.service.ts","../../../../libs/modules/conversation/src/lib/entities/room/room.entity.ts","../../../../libs/modules/conversation/src/lib/entity.provider.ts","../../../../libs/modules/conversation/src/lib/features/chat/chat.service.ts","../../../../libs/modules/conversation/src/lib/features/chat/components/chat-item/chat-item.component.ts","../../../../libs/modules/conversation/src/lib/features/chat/components/chat-item/chat-item.component.html","../../../../libs/modules/conversation/src/lib/features/chat/chat.component.ts","../../../../libs/modules/conversation/src/lib/features/chat/chat.component.html","../../../../libs/modules/conversation/src/lib/features/chat/chat-preview.helper.ts","../../../../libs/modules/conversation/src/lib/features/chat/components/chat-preview/chat-preview.component.ts","../../../../libs/modules/conversation/src/lib/features/chat/components/chat-preview/chat-preview.component.html","../../../../libs/modules/conversation/src/lib/features/comment/comment.service.ts","../../../../libs/modules/conversation/src/lib/features/comment/comment-lookup-popup.component.ts","../../../../libs/modules/conversation/src/lib/features/comment/comment-list-view.component.ts","../../../../libs/modules/conversation/src/lib/features/comment/comment-list-view.component.html","../../../../libs/modules/conversation/src/lib/conversation.module.ts","../../../../libs/modules/conversation/src/acorex-modules-conversation.ts"],"sourcesContent":["const config = {\n i18n: 'conversation',\n module: 'Conversation',\n};\n\nexport const RootConfig = {\n config,\n module: {\n route: 'conversation',\n name: config.module,\n title: `t('module-name', {scope:\"${config.i18n}\"})`,\n icon: 'fa-light fa-comments',\n },\n entities: {\n room: {\n name: 'room',\n title: `t(\"room.plural-title\", { scope: \"${config.i18n}\" })`,\n source: `${config.module}.Room`,\n icon: 'fa-light fa-comments',\n },\n message: {\n name: 'message',\n title: `t(\"message.plural-title\", { scope: \"${config.i18n}\" })`,\n source: `${config.module}.Message`,\n icon: 'fa-light fa-message',\n },\n },\n};\n","import { AXMEntityCrudServiceImpl } from '@acorex/platform/layout/entity';\nimport { Injectable } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport { AXMConversationMessage } from './message.types';\n\nexport abstract class AXMMessageService extends AXMEntityCrudServiceImpl<string, AXMConversationMessage> {}\n\n@Injectable()\nexport class AXMMessageServiceImpl extends AXMMessageService {\n constructor() {\n super(`${RootConfig.module.name}.${RootConfig.entities.message.name}`);\n }\n}\n","import { AXPEntity, AXPEntityCommandScope, AXPEntityQueryType, createAllQueryView } from '@acorex/platform/common';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/builder';\nimport { Injector } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport { AXMMessageService } from './message.service';\n\nexport async function messageFactory(injector: Injector): Promise<AXPEntity | null> {\n const dataService = injector.get(AXMMessageService);\n const i18n = RootConfig.config.i18n;\n\n const entityDef: AXPEntity = {\n module: RootConfig.module.name,\n name: RootConfig.entities.message.name,\n source: '',\n title: RootConfig.entities.message.title,\n formats: {\n individual: RootConfig.entities.message.title,\n plural: RootConfig.entities.message.title,\n searchResult: {\n title: '{{ title }}',\n description: RootConfig.module.title,\n },\n },\n relatedEntities: [],\n groups: [\n {\n id: 'section',\n title: RootConfig.entities.message.title,\n },\n ],\n properties: [\n {\n name: 'name',\n title: `t(\"name\", { scope: \"common\" })`,\n groupId: 'section',\n options: {\n sort: {\n enabled: true,\n },\n filter: {\n advance: {\n enabled: true,\n },\n inline: {\n enabled: false,\n },\n },\n },\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n\n {\n name: 'title',\n title: `t(\"title\", { scope: \"common\" })`,\n groupId: 'section',\n options: {\n sort: {\n enabled: true,\n },\n filter: {\n advance: {\n enabled: true,\n },\n inline: {\n enabled: false,\n },\n },\n },\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n ],\n columns: [{ name: 'name' }, { name: 'title' }],\n commands: {\n create: {\n execute: async (data: any) => {\n const res = await dataService.insertOne(data);\n return { id: res };\n },\n },\n delete: {\n execute: async (id: any) => {\n return await dataService.deleteOne(id);\n },\n },\n update: {\n execute: async (data: any) => {\n return await dataService.updateOne(data.id, data);\n },\n },\n },\n queries: {\n byKey: {\n execute: async (id: string) => {\n return await dataService.getOne(id);\n },\n type: AXPEntityQueryType.Single,\n },\n list: {\n execute: async (e: any) => {\n return await dataService.query({ skip: e.skip, take: e.take, filter: e.filter });\n },\n type: AXPEntityQueryType.List,\n },\n },\n interfaces: {\n master: {\n create: {\n sections: [\n {\n id: 'section',\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n },\n update: {\n sections: [\n {\n id: 'section',\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n },\n single: {\n title: '{{title}}',\n sections: [\n {\n id: 'section',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n },\n },\n },\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n actions: [],\n },\n list: {\n actions: [\n {\n title: `t(\"create\", { scope: \"common\" })`,\n command: 'create-entity',\n priority: 'primary',\n type: 'create',\n scope: AXPEntityCommandScope.TypeLevel,\n },\n {\n title: 't(\"deleteItems\", { scope: \"common\" })',\n command: 'delete-entity',\n priority: 'primary',\n type: 'delete',\n scope: AXPEntityCommandScope.Selected,\n },\n {\n title: 't(\"detail\", { scope: \"common\" })',\n command: 'open-entity',\n priority: 'secondary',\n type: 'view',\n scope: AXPEntityCommandScope.Individual,\n },\n {\n title: 't(\"delete\", { scope: \"common\" })',\n command: 'delete-entity',\n priority: 'secondary',\n type: 'delete',\n scope: AXPEntityCommandScope.Individual,\n },\n ],\n views: [\n createAllQueryView({\n sorts: [{ name: 'name', dir: 'asc' }],\n }),\n ],\n },\n },\n },\n };\n\n return entityDef;\n}\n","// === Shared Types ===\n\nimport { AXPContent, AXPUserReference } from '@acorex/platform/core';\nimport { AXPEntityModel } from '@acorex/platform/layout/entity';\n\nexport type AXMSeenType = 'delivered' | 'read';\nexport type AXMReactionType = 'like' | 'love' | 'laugh' | 'angry' | 'sad' | string;\n\nexport interface AXMConversationReaction {\n author: AXPUserReference;\n type: AXMReactionType;\n}\n\nexport interface AXMConversationSeen {\n author: AXPUserReference;\n type: AXMSeenType;\n}\n\n// === Core Models ===\n\nexport interface AXMConversationMessage extends AXPEntityModel<string> {\n roomId: string;\n message: AXPContent;\n author: AXPUserReference;\n replyId?: string | null;\n reactions?: AXMConversationReaction[];\n seen?: AXMConversationSeen[];\n}\n","import { AXMEntityCrudServiceImpl } from '@acorex/platform/layout/entity';\nimport { Injectable } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport { AXMConversationRoom } from './room.types';\n\nexport abstract class AXMRoomService extends AXMEntityCrudServiceImpl<string, AXMConversationRoom> {}\n\n@Injectable()\nexport class AXMRoomServiceImpl extends AXMRoomService {\n constructor() {\n super(`${RootConfig.module.name}.${RootConfig.entities.room.name}`);\n }\n}\n","import { AXPEntity, AXPEntityCommandScope, AXPEntityQueryType, createAllQueryView } from '@acorex/platform/common';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/builder';\nimport { Injector } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport { AXMRoomService } from './room.service';\n\nexport async function roomFactory(injector: Injector): Promise<AXPEntity | null> {\n const dataService = injector.get(AXMRoomService);\n const i18n = RootConfig.config.i18n;\n\n const entityDef: AXPEntity = {\n module: RootConfig.module.name,\n name: RootConfig.entities.room.name,\n source: '',\n title: RootConfig.entities.room.title,\n formats: {\n individual: RootConfig.entities.room.title,\n plural: RootConfig.entities.room.title,\n searchResult: {\n title: '{{ title }}',\n description: RootConfig.module.title,\n },\n },\n relatedEntities: [],\n groups: [\n {\n id: 'section',\n title: RootConfig.entities.room.title,\n },\n ],\n properties: [\n {\n name: 'name',\n title: `t(\"name\", { scope: \"common\" })`,\n groupId: 'section',\n options: {\n sort: {\n enabled: true,\n },\n filter: {\n advance: {\n enabled: true,\n },\n inline: {\n enabled: false,\n },\n },\n },\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n\n {\n name: 'title',\n title: `t(\"title\", { scope: \"common\" })`,\n groupId: 'section',\n options: {\n sort: {\n enabled: true,\n },\n filter: {\n advance: {\n enabled: true,\n },\n inline: {\n enabled: false,\n },\n },\n },\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n ],\n columns: [{ name: 'name' }, { name: 'title' }],\n commands: {\n create: {\n execute: async (data: any) => {\n const res = await dataService.insertOne(data);\n return { id: res };\n },\n },\n delete: {\n execute: async (id: any) => {\n return await dataService.deleteOne(id);\n },\n },\n update: {\n execute: async (data: any) => {\n return await dataService.updateOne(data.id, data);\n },\n },\n },\n queries: {\n byKey: {\n execute: async (id: string) => {\n return await dataService.getOne(id);\n },\n type: AXPEntityQueryType.Single,\n },\n list: {\n execute: async (e: any) => {\n return await dataService.query({ skip: e.skip, take: e.take, filter: e.filter });\n },\n type: AXPEntityQueryType.List,\n },\n },\n interfaces: {\n master: {\n create: {\n sections: [\n {\n id: 'section',\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n },\n update: {\n sections: [\n {\n id: 'section',\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n },\n single: {\n title: '{{title}}',\n sections: [\n {\n id: 'section',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n },\n },\n },\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n actions: [],\n },\n list: {\n actions: [\n {\n title: `t(\"create\", { scope: \"common\" })`,\n command: 'create-entity',\n priority: 'primary',\n type: 'create',\n scope: AXPEntityCommandScope.TypeLevel,\n },\n {\n title: 't(\"deleteItems\", { scope: \"common\" })',\n command: 'delete-entity',\n priority: 'primary',\n type: 'delete',\n scope: AXPEntityCommandScope.Selected,\n },\n {\n title: 't(\"detail\", { scope: \"common\" })',\n command: 'open-entity',\n priority: 'secondary',\n type: 'view',\n scope: AXPEntityCommandScope.Individual,\n },\n {\n title: 't(\"delete\", { scope: \"common\" })',\n command: 'delete-entity',\n priority: 'secondary',\n type: 'delete',\n scope: AXPEntityCommandScope.Individual,\n },\n ],\n views: [\n createAllQueryView({\n sorts: [{ name: 'name', dir: 'asc' }],\n }),\n ],\n },\n },\n },\n };\n\n return entityDef;\n}\n","import { AXPEntity } from '@acorex/platform/common';\nimport { AXPEntityDefinitionLoader, AXPEntityPreloadEntity } from '@acorex/platform/layout/entity';\nimport { Injectable, Injector } from '@angular/core';\nimport { RootConfig } from './const';\nimport { messageFactory, roomFactory } from './entities';\n\n@Injectable()\nexport class AXMConversationModuleEntityProvider implements AXPEntityDefinitionLoader {\n constructor(private injector: Injector) {}\n\n public preload(): AXPEntityPreloadEntity[] {\n const module = RootConfig.module.name;\n return Array.from(Object.values(RootConfig.entities)).map((entity: any) => ({\n module: module,\n entity: entity.name,\n }));\n }\n\n public async get(moduleName: string, entityName: string): Promise<AXPEntity | null> {\n switch (entityName) {\n case 'room':\n return roomFactory(this.injector);\n case 'message':\n return messageFactory(this.injector);\n default:\n return null;\n }\n }\n}\n","import { AXMUsersEntityService } from '@acorex/modules/security-management';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPContent, AXPContentType, AXPUserReference } from '@acorex/platform/core';\nimport { inject, Injectable } from '@angular/core';\nimport { AXMMessageService } from '../../entities/message/message.service';\nimport {\n AXMConversationMessage,\n AXMConversationReaction,\n AXMConversationSeen,\n AXMReactionType,\n AXMSeenType,\n} from '../../entities/message/message.types';\nimport { AXMRoomService } from '../../entities/room/room.service';\nimport { AXMConversationRoom } from '../../entities/room/room.types';\nimport { AXMChatMember, AXMChatMessage, AXMChatRoom } from './chat.type';\n\n/**\n * Abstract Chat Service defining the contract for chat functionality\n */\nexport abstract class AXMChatService {\n /**\n * Get all chat rooms available to the current user\n */\n abstract getAllChatRooms(skip?: number, take?: number): Promise<{ items: AXMChatRoom[]; total: number }>;\n\n /**\n * Get details of a specific chat room\n */\n abstract getChatRoom(roomId: string): Promise<AXMChatRoom>;\n\n /**\n * Get messages for a specific chat room\n */\n abstract getChatMessages(\n roomId: string,\n skip?: number,\n take?: number,\n ): Promise<{ items: AXMChatMessage[]; total: number }>;\n\n /**\n * Send a message to a chat room\n */\n abstract sendMessage(\n roomId: string,\n content: string,\n contentType?: AXPContentType,\n replyId?: string,\n ): Promise<AXMConversationMessage>;\n\n /**\n * Mark all messages in a chat room as read\n */\n abstract markChatAsRead(roomId: string): Promise<boolean>;\n\n /**\n * Edit an existing message\n */\n abstract editMessage(\n messageId: string,\n content: string,\n contentType?: AXPContentType,\n ): Promise<AXMConversationMessage>;\n\n /**\n * Delete a message\n */\n abstract deleteMessage(messageId: string): Promise<boolean>;\n\n /**\n * Create a new conversation with specified members\n */\n abstract createNewConversation(memberIds: string[]): Promise<AXMChatRoom>;\n\n /**\n * Add a reaction to a message\n */\n abstract addReaction(messageId: string, type: AXMReactionType): Promise<AXMConversationMessage>;\n\n /**\n * Remove a reaction from a message\n */\n abstract removeReaction(messageId: string, type: AXMReactionType): Promise<AXMConversationMessage>;\n\n /**\n * Add a member to a chat room\n */\n abstract addRoomMember(roomId: string, userId: string): Promise<AXMConversationRoom>;\n\n /**\n * Remove a member from a chat room\n */\n abstract removeRoomMember(roomId: string, memberId: string): Promise<AXMConversationRoom>;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXMChatServiceImpl implements AXMChatService {\n private readonly roomService = inject(AXMRoomService);\n private readonly messageService = inject(AXMMessageService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly usersService = inject(AXMUsersEntityService);\n\n // === Helper Methods ===\n\n private getCurrentUser(): AXPUserReference {\n const user = this.sessionService.user;\n return {\n id: user?.id || 'guest-user',\n type: 'user',\n };\n }\n\n private async getUserInfo(userId: string): Promise<AXPUserReference> {\n try {\n const user = await this.usersService.getOne(userId);\n return {\n id: user.id,\n type: 'user',\n };\n } catch (error) {\n console.error(`Failed to get user info for ID: ${userId}`, error);\n return {\n id: userId,\n type: 'user',\n };\n }\n }\n\n private formatMessage(message: AXMConversationMessage): AXMChatMessage {\n const currentUserId = this.getCurrentUser().id;\n\n return {\n ...message,\n isFromCurrentUser: message.author.id === currentUserId,\n formattedDate: new Date(message.createdAt || new Date()).toLocaleString(),\n hasSeen: (message.seen || []).length > 0,\n };\n }\n\n private async formatMember(userRef: AXPUserReference): Promise<AXMChatMember> {\n try {\n const user = await this.usersService.getOne(userRef.id);\n\n return {\n id: user.id,\n firstName: user.firstName || '',\n lastName: user.lastName || '',\n fullName: `${user.firstName || ''} ${user.lastName || ''}`.trim(),\n avatar: '', // Default empty string since avatar doesn't exist in the model\n isOnline: Math.random() > 0.5, // Mockup for demo\n };\n } catch (error) {\n console.error(`Failed to format member for ID: ${userRef.id}`, error);\n return {\n id: userRef.id,\n firstName: 'Unknown',\n lastName: 'User',\n fullName: 'Unknown User',\n avatar: '',\n isOnline: false,\n };\n }\n }\n\n // === Room Operations ===\n\n async getRoomList(skip = 0, take = 100) {\n return this.roomService.query({ skip, take });\n }\n\n async getRoomDetails(roomId: string) {\n return this.roomService.getOne(roomId);\n }\n\n async createRoom(roomData: Omit<AXMConversationRoom, 'id'>): Promise<string> {\n return this.roomService.insertOne(roomData);\n }\n\n async addRoomMember(roomId: string, userId: string) {\n const room = await this.getRoomDetails(roomId);\n const userRef = await this.getUserInfo(userId);\n const updatedMembers = [...room.members, userRef];\n return this.roomService.updateOne(roomId, { members: updatedMembers });\n }\n\n async removeRoomMember(roomId: string, memberId: string) {\n const room = await this.getRoomDetails(roomId);\n const updatedMembers = room.members.filter((member) => member.id !== memberId);\n return this.roomService.updateOne(roomId, { members: updatedMembers });\n }\n\n async deleteRoom(roomId: string) {\n return this.roomService.deleteOne(roomId);\n }\n\n // === Message Operations ===\n\n async listMessages(roomId: string, skip = 0, take = 100) {\n return this.messageService.query({\n skip,\n take,\n filter: {\n field: 'roomId',\n value: roomId,\n operator: { type: 'equal' },\n },\n });\n }\n\n async sendMessage(roomId: string, content: string, contentType: AXPContentType = 'text', replyId?: string) {\n const author = this.getCurrentUser();\n\n const messageContent: AXPContent = {\n content,\n contentType,\n };\n\n const message: Omit<AXMConversationMessage, 'id'> = {\n roomId,\n message: messageContent,\n author,\n replyId,\n };\n\n const messageId = await this.messageService.insertOne(message);\n return this.messageService.getOne(messageId);\n }\n\n async editMessage(messageId: string, content: string, contentType: AXPContentType = 'text') {\n const messageContent: AXPContent = {\n content,\n contentType,\n };\n\n return this.messageService.updateOne(messageId, { message: messageContent });\n }\n\n async deleteMessage(messageId: string): Promise<boolean> {\n try {\n await this.messageService.deleteOne(messageId);\n return true;\n } catch (error) {\n console.error('Failed to delete message:', error);\n return false;\n }\n }\n\n async markAsSeen(messageId: string) {\n const author = this.getCurrentUser();\n const message = await this.messageService.getOne(messageId);\n\n // Check if this user has already seen the message\n const alreadySeen = (message.seen || []).some((seen) => seen.author.id === author.id);\n if (alreadySeen) {\n return message;\n }\n\n const seen = message.seen || [];\n const updatedSeen: AXMConversationSeen[] = [...seen, { author, type: 'read' as AXMSeenType }];\n return this.messageService.updateOne(messageId, { seen: updatedSeen });\n }\n\n async addReaction(messageId: string, type: AXMReactionType) {\n const author = this.getCurrentUser();\n const message = await this.messageService.getOne(messageId);\n\n // Check if this user has already added this reaction\n const existingReaction = (message.reactions || []).find(\n (reaction) => reaction.author.id === author.id && reaction.type === type,\n );\n\n if (existingReaction) {\n // If the reaction already exists, remove it (toggle behavior)\n return this.removeReaction(messageId, type);\n }\n\n const reactions = message.reactions || [];\n const updatedReactions: AXMConversationReaction[] = [...reactions, { author, type }];\n return this.messageService.updateOne(messageId, { reactions: updatedReactions });\n }\n\n async removeReaction(messageId: string, type: AXMReactionType) {\n const author = this.getCurrentUser();\n const message = await this.messageService.getOne(messageId);\n\n const reactions = message.reactions || [];\n const updatedReactions = reactions.filter(\n (reaction) => !(reaction.author.id === author.id && reaction.type === type),\n );\n\n return this.messageService.updateOne(messageId, { reactions: updatedReactions });\n }\n\n // === UI-specific Operations ===\n\n async markChatAsRead(roomId: string): Promise<boolean> {\n try {\n // Get all unread messages for this room\n const messages = await this.listMessages(roomId);\n const currentUserId = this.getCurrentUser().id;\n\n // Mark each unread message as seen\n const markPromises = messages.items\n .filter((message) => {\n // Only mark messages that are not from the current user and not already seen by them\n const isFromCurrentUser = message.author.id === currentUserId;\n const isAlreadySeen = (message.seen || []).some((seen) => seen.author.id === currentUserId);\n return !isFromCurrentUser && !isAlreadySeen;\n })\n .map((message) => this.markAsSeen(message.id));\n\n await Promise.all(markPromises);\n return true;\n } catch (error) {\n console.error('Failed to mark chat as read:', error);\n return false;\n }\n }\n\n async getUnreadCount(roomId: string): Promise<number> {\n const messages = await this.listMessages(roomId);\n const currentUserId = this.getCurrentUser().id;\n\n return messages.items.filter((message) => {\n // Count messages that are not from the current user and not already seen by them\n const isFromCurrentUser = message.author.id === currentUserId;\n const isAlreadySeen = (message.seen || []).some((seen) => seen.author.id === currentUserId);\n return !isFromCurrentUser && !isAlreadySeen;\n }).length;\n }\n\n async getChatRoom(roomId: string): Promise<AXMChatRoom> {\n const room = await this.getRoomDetails(roomId);\n const messages = await this.listMessages(roomId, 0, 1);\n const lastMessage = messages.items.length > 0 ? this.formatMessage(messages.items[0]) : undefined;\n const unreadCount = await this.getUnreadCount(roomId);\n\n const roomMembers = await Promise.all(room.members.map((member) => this.formatMember(member)));\n\n return {\n ...room,\n lastMessage,\n unreadCount,\n roomMembers,\n };\n }\n\n async getAllChatRooms(skip = 0, take = 100): Promise<{ items: AXMChatRoom[]; total: number }> {\n const rooms = await this.getRoomList(skip, take);\n\n const chatRooms = await Promise.all(\n rooms.items.map(async (room) => {\n const messages = await this.listMessages(room.id, 0, 1);\n const lastMessage = messages.items.length > 0 ? this.formatMessage(messages.items[0]) : undefined;\n const unreadCount = await this.getUnreadCount(room.id);\n\n const roomMembers = await Promise.all(room.members.map((member) => this.formatMember(member)));\n\n return {\n ...room,\n lastMessage,\n unreadCount,\n roomMembers,\n };\n }),\n );\n\n return {\n items: chatRooms,\n total: rooms.total,\n };\n }\n\n async getChatMessages(roomId: string, skip = 0, take = 20): Promise<{ items: AXMChatMessage[]; total: number }> {\n const result = await this.listMessages(roomId, skip, take);\n\n const formattedMessages = result.items.map((message) => this.formatMessage(message));\n\n return {\n items: formattedMessages,\n total: result.total,\n };\n }\n\n async createNewConversation(memberIds: string[]): Promise<AXMChatRoom> {\n // Add current user if not already included\n const currentUser = this.getCurrentUser();\n const hasCurrentUser = memberIds.includes(currentUser.id);\n\n const allMemberIds = hasCurrentUser ? memberIds : [...memberIds, currentUser.id];\n\n try {\n // Get user info for all members\n const memberReferences = await Promise.all(allMemberIds.map((id) => this.getUserInfo(id)));\n\n // Get user names for title\n const userNames = await Promise.all(\n memberReferences.map(async (ref) => {\n try {\n const user = await this.usersService.getOne(ref.id);\n return `${user.firstName} ${user.lastName}`.trim();\n } catch (error) {\n return ref.id;\n }\n }),\n );\n\n // Create a new room - this returns just the ID as a string\n const roomId = await this.createRoom({\n members: memberReferences,\n title: userNames.join(', '),\n });\n\n // Get the full room data with the ID\n return this.getChatRoom(roomId);\n } catch (error) {\n console.error('Failed to create conversation:', error);\n throw error;\n }\n }\n}\n","import { AXPSessionService } from '@acorex/platform/auth';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, output } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AXMChatRoom } from '../../chat.type';\n\n@Component({\n selector: 'axm-chat-item',\n templateUrl: './chat-item.component.html',\n styleUrls: ['./chat-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class AXMChatItemComponent {\n // Input\n data = input.required<AXMChatRoom>();\n\n // Output\n pressChatItem = output<string>();\n\n // Services\n private sessionService = inject(AXPSessionService);\n private router = inject(Router);\n private activatedRoute = inject(ActivatedRoute);\n\n // Computed values\n protected fullName = computed(() => {\n const member = this.data().roomMembers?.[0];\n return member ? member.fullName : 'Unknown User';\n });\n\n protected lastMessage = computed(() => {\n return this.data().lastMessage?.message?.content || 'No messages yet';\n });\n\n protected lastMessageDate = computed(() => {\n const message = this.data().lastMessage;\n if (!message) return '';\n\n return message.formattedDate || '';\n });\n\n protected hasUnread = computed(() => {\n return this.data().unreadCount > 0;\n });\n\n protected unreadCount = computed(() => {\n return this.data().unreadCount.toString();\n });\n\n protected isOnline = computed(() => {\n const member = this.data().roomMembers?.[0];\n return member?.isOnline || false;\n });\n\n protected myId = this.sessionService.user?.id;\n\n // Methods\n protected extractInitials(name: string): string {\n if (!name) return '?';\n const words = name.split(' ');\n const initials = words.map((word) => word.charAt(0).toUpperCase());\n return initials.join('');\n }\n\n protected onPressChatItem(id: string) {\n this.pressChatItem.emit(id);\n }\n\n protected messageSeenStatus(): string {\n const lastMessage = this.data().lastMessage;\n if (!lastMessage) return '';\n\n // Check if current user is the author\n if (this.myId === lastMessage.author?.id) {\n // Check if message has been seen by anyone\n return lastMessage.hasSeen ? 'ax-icon-dobble-check' : 'ax-icon-check';\n }\n\n return '';\n }\n}\n","<div\n [id]=\"data().id\"\n class=\"ax-cursor-pointer ax-p-4 ax-flex ax-items-center ax-justify-between ax-gap-4 ax-transition-all ax-duration-200 hover:ax-bg-surface-hover ax-rounded-lg ax-border-b ax-border-divider\"\n (click)=\"onPressChatItem(data().id)\"\n>\n <!-- Avatar and User Info Section -->\n <div class=\"ax-flex ax-min-w-0 ax-gap-4 ax-flex-1\">\n <!-- Avatar with Online Status -->\n <div class=\"ax-flex-shrink-0\">\n <ax-avatar class=\"ax-relative\" color=\"primary\" shape=\"rounded\" [size]=\"48\">\n @if (data().roomMembers && data().roomMembers.length > 0 && data().roomMembers[0].avatar) {\n <ax-image [src]=\"data().roomMembers[0].avatar\" class=\"ax-rounded-lg\">\n <ax-loading></ax-loading>\n </ax-image>\n } @else {\n <ax-text>\n <span class=\"ax-text-base ax-font-medium\">{{ extractInitials(fullName()) }}</span>\n </ax-text>\n }\n\n <!-- Online Status Indicator -->\n @if (isOnline()) {\n <ax-badge class=\"ax-absolute ax-bottom-1 ax-end-1 !ax-size-3 !ax-border-2 !ax-border-surface\" color=\"success\">\n </ax-badge>\n }\n </ax-avatar>\n </div>\n\n <!-- User Details and Last Message -->\n <div class=\"ax-flex ax-flex-col ax-min-w-0 ax-flex-1\">\n <div class=\"ax-flex ax-items-center ax-justify-between ax-gap-2\">\n <p class=\"ax-font-semibold ax-text-on-surface ax-truncate\">{{ fullName() }}</p>\n <div class=\"ax-flex ax-items-center ax-gap-1\">\n @if (messageSeenStatus()) {\n <ax-icon class=\"ax-icon ax-text-success ax-size-5\" [class]=\"messageSeenStatus()\"></ax-icon>\n }\n @if (lastMessageDate()) {\n <span class=\"ax-text-xs ax-text-on-surface-variant ax-whitespace-nowrap\">\n {{ lastMessageDate() }}\n </span>\n }\n </div>\n </div>\n <div class=\"ax-flex ax-items-center ax-gap-2 ax-mt-1\">\n <p class=\"ax-text-sm ax-text-on-surface-variant ax-truncate\">\n {{ lastMessage() }}\n </p>\n @if (hasUnread()) {\n <ax-badge color=\"primary\" [text]=\"unreadCount()\" class=\"ax-flex-shrink-0 ax-ml-auto\"></ax-badge>\n }\n </div>\n </div>\n </div>\n</div>\n","import { AXTabsComponent } from '@acorex/components/tabs';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n OnInit,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AXMChatService } from './chat.service';\nimport { AXMChatRoom } from './chat.type';\n\n@Component({\n selector: 'axm-chat',\n templateUrl: './chat.component.html',\n styleUrls: ['./chat.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class AXMChatComponent implements OnInit {\n private route = inject(ActivatedRoute);\n private router = inject(Router);\n private chatService = inject(AXMChatService);\n\n // View Children\n tab = viewChild<AXTabsComponent>('tab');\n\n // State signals\n rooms = signal<AXMChatRoom[]>([]);\n allRooms = signal<AXMChatRoom[]>([]);\n selectedRoom = signal<AXMChatRoom | null>(null);\n isLoading = signal<boolean>(false);\n error = signal<string | null>(null);\n activeTab = signal<number>(0);\n isSearching = signal<boolean>(false);\n searchQuery = signal<string>('');\n showSearch = signal<boolean>(true);\n placeholder = signal<string>('Search chats...');\n\n // Computed signals\n filteredRooms = computed(() => {\n let chatRooms = this.rooms();\n\n // Apply search filter\n if (this.searchQuery()) {\n const searchText = this.searchQuery().toLowerCase();\n chatRooms = chatRooms.filter((room) => {\n const roomName = room.roomMembers?.[0]?.fullName || '';\n const lastMessage = room.lastMessage?.message?.content || '';\n return roomName.toLowerCase().includes(searchText) || lastMessage.toLowerCase().includes(searchText);\n });\n }\n\n // Apply tab filter\n if (this.activeTab() === 1) {\n return chatRooms.filter((room) => room.unreadCount > 0);\n }\n\n return chatRooms;\n });\n\n unreadCount = computed(() => this.allRooms().filter((i) => i.unreadCount > 0).length);\n allCount = computed(() => this.allRooms().length);\n hasUnread = computed(() => this.allRooms().filter((i) => i.unreadCount > 0).length > 0);\n totalCount = computed(() => this.allRooms().length || 0);\n\n constructor() {\n afterNextRender(() => {\n const tabComponent = this.tab();\n if (tabComponent) {\n tabComponent.onActiveTabChanged.subscribe((i) => {\n this.activeTab.set(i.index);\n });\n }\n });\n }\n\n async ngOnInit(): Promise<void> {\n await this.loadChats();\n }\n\n // Page Interface Implementation\n getPageTitle(): string {\n return this.selectedRoom()\n ? this.selectedRoom()?.roomMembers?.[0]?.fullName || 'Unknown User'\n : 'Select A Chat First';\n }\n\n getPageDescription(): string {\n return this.selectedRoom() ? this.selectedRoom()?.title || '' : '';\n }\n\n getMenuItems(): any[] {\n return [];\n }\n\n // Methods\n async loadChats(): Promise<void> {\n try {\n this.isLoading.set(true);\n this.error.set(null);\n\n // Use the updated service method to get rooms with last messages\n const response = await this.chatService.getAllChatRooms();\n\n this.allRooms.set(response.items);\n this.rooms.set(response.items);\n this.isLoading.set(false);\n } catch (error) {\n this.error.set('Failed to load chats. Please try again.');\n this.isLoading.set(false);\n console.error('Error loading chats:', error);\n }\n }\n\n async refreshChat(): Promise<void> {\n await this.loadChats();\n }\n\n async markChatAsRead(chatId: string): Promise<void> {\n try {\n // Use the service method to mark chat as read\n await this.chatService.markChatAsRead(chatId);\n\n // Update local state without making another network request\n const currentRooms = this.allRooms();\n const updatedRooms = currentRooms.map((room) => {\n if (room.id === chatId) {\n // Reset unread count for the selected room\n return { ...room, unreadCount: 0 };\n }\n return room;\n });\n\n // Update the rooms signals\n this.allRooms.set(updatedRooms);\n this.rooms.set(updatedRooms);\n\n // Find the selected room\n const selectedRoom = updatedRooms.find((room) => room.id === chatId) || null;\n this.selectedRoom.set(selectedRoom);\n\n // Navigate to the chat details\n this.router.navigate([chatId], { relativeTo: this.route });\n } catch (error) {\n console.error('Failed to mark chat as read:', error);\n }\n }\n\n searchChat(query: string) {\n this.searchQuery.set(query);\n this.isSearching.set(!!query);\n }\n\n goBack() {\n this.selectedRoom.set(null);\n this.router.navigate(['./'], { relativeTo: this.route });\n }\n\n // Header methods\n onSearch(query: string) {\n this.searchChat(query);\n }\n\n clearSearch() {\n this.searchQuery.set('');\n this.isSearching.set(false);\n }\n\n // Footer methods\n onNewConversation() {\n // TODO: Implement new conversation logic\n console.log('New conversation clicked');\n }\n\n // Preview header methods\n emitBack() {\n this.goBack();\n }\n\n ngOnDestroy(): void {\n console.log('ngOnDestroy');\n }\n}\n","<axp-page-layout>\n <axp-layout-start-side [axResizable]=\"true\" class=\"ax-border-e ax-lightest-surface ax-h-full\">\n <axp-layout-header>\n <axp-layout-title>Conversations</axp-layout-title>\n <axp-layout-toolbar>\n <ax-search-box\n #searchInput\n look=\"solid\"\n [placeholder]=\"placeholder()\"\n [ngModel]=\"searchQuery()\"\n (onValueChanged)=\"onSearch($event.value)\"\n class=\"ax-w-full\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </axp-layout-toolbar>\n </axp-layout-header>\n <axp-layout-content class=\"ax-flex ax-flex-col ax-min-h-0\">\n <!-- Tabs -->\n <div class=\"ax-px-4\">\n <ax-tabs #tab class=\"ax-text-neutral-400\" [look]=\"'with-line'\" [location]=\"'bottom'\" [fitParent]=\"true\">\n <ax-tab-item text=\"All\" [active]=\"activeTab() === 0\">\n <ax-suffix>\n <ax-badge\n [text]=\"totalCount().toString()\"\n [color]=\"activeTab() === 0 ? 'primary' : 'secondary'\"\n class=\"ax-min-w-[1.5rem] ax-justify-center\"\n ></ax-badge>\n </ax-suffix>\n </ax-tab-item>\n @if (hasUnread()) {\n <ax-tab-item text=\"Unread\" [active]=\"activeTab() === 1\">\n <ax-suffix>\n <ax-badge\n [text]=\"unreadCount().toString()\"\n [color]=\"activeTab() === 1 ? 'primary' : 'secondary'\"\n class=\"ax-min-w-[1.5rem] ax-justify-center\"\n ></ax-badge>\n </ax-suffix>\n </ax-tab-item>\n }\n </ax-tabs>\n </div>\n\n <!-- Chat List Content -->\n <div class=\"ax-flex-1 ax-overflow-hidden ax-flex ax-flex-col\">\n <!-- Loading State -->\n @if (isLoading()) {\n <div class=\"ax-flex ax-items-center ax-justify-center ax-p-4\">\n <ax-loading></ax-loading>\n </div>\n }\n\n <!-- Error State -->\n @if (error()) {\n <div class=\"ax-p-4 ax-text-error ax-text-center\">\n {{ error() }}\n <button (click)=\"refreshChat()\" class=\"ax-mt-2 ax-text-primary hover:ax-text-primary-dark\">\n Try Again\n </button>\n </div>\n }\n\n <!-- Chat List -->\n @if (!isLoading() && !error()) {\n <div\n class=\"ax-flex-1 ax-overflow-y-auto ax-space-y-2 ax-scrollbar-thin ax-scrollbar-thumb-gray-300 ax-scrollbar-track-transparent\"\n >\n @for (i of filteredRooms(); track i.id) {\n <axm-chat-item\n [data]=\"i\"\n (click)=\"markChatAsRead(i.id)\"\n [class.ax-bg-surface]=\"selectedRoom()?.id === i.id\"\n class=\"ax-transition-all ax-duration-200 hover:ax-bg-surface ax-rounded-lg\"\n ></axm-chat-item>\n }\n\n <!-- Empty State -->\n @empty {\n <div class=\"ax-p-4 ax-font-medium ax-text-center ax-text-secondary\">\n @if (isSearching()) {\n No chats found matching your search\n } @else {\n No chats available\n }\n </div>\n }\n </div>\n }\n\n <!-- Footer Content -->\n <div class=\"ax-border-t ax-border-divider ax-bg-lightest ax-p-4\">\n <ax-button class=\"ax-w-full\" color=\"primary\" text=\"New Conversation\" (onClick)=\"onNewConversation()\">\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-plus\"></i>\n </ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </div>\n </axp-layout-content>\n </axp-layout-start-side>\n\n <axp-page-content>\n <!-- Chat Content -->\n <div class=\"ax-flex-1 ax-overflow-hidden\">\n <router-outlet></router-outlet>\n </div>\n </axp-page-content>\n</axp-page-layout>\n","import { AXMChatMessage } from './chat.type';\n\nexport interface ChatPreviewMessage {\n id: string;\n fromId?: string;\n sendTime: Date;\n readTime: Date;\n type: 'text' | 'voice' | 'file' | 'image' | 'video' | 'audio';\n content: string;\n name: string;\n replyTo?: ChatPreviewMessage;\n}\n\n/**\n * Converts chat service response to chat preview format\n * @param chatResponse - The response from chat service containing items and total\n * @returns Array of formatted chat preview messages\n */\nexport function convertToChatPreview(chatResponse: { items: AXMChatMessage[]; total: number }): ChatPreviewMessage[] {\n if (!chatResponse || !chatResponse.items?.length) {\n return [];\n }\n\n // Map from AXMChatMessage to ChatPreviewMessage\n return chatResponse.items.map((message) => {\n // Determine message type based on content type\n let messageType: ChatPreviewMessage['type'] = 'text';\n\n // Map contentType to preview type\n if (message.message?.contentType) {\n switch (message.message.contentType) {\n case 'text':\n messageType = 'text';\n break;\n case 'file':\n messageType = 'file';\n break;\n case 'image':\n messageType = 'image';\n break;\n case 'video':\n messageType = 'video';\n break;\n case 'link':\n // Determine if link is for audio or other content\n const content = message.message.content || '';\n if (content.includes('.mp3') || content.includes('.ogg') || content.includes('audio')) {\n messageType = 'audio';\n } else {\n messageType = 'text';\n }\n break;\n default:\n messageType = 'text';\n }\n }\n\n // Extract author name if available\n const name = message.author ? message.author.id : 'Unknown';\n\n // Create the chat preview message\n const previewMessage: ChatPreviewMessage = {\n id: message.id,\n sendTime: new Date(message.createdAt || new Date()),\n readTime: new Date(), // Assuming \"read\" when converted\n type: messageType,\n content: message.message?.content || '',\n name: name,\n };\n\n // Add fromId if the message is not from current user\n if (!message.isFromCurrentUser) {\n previewMessage.fromId = message.author?.id;\n }\n\n // Note: Reply information would need to be looked up from the actual messages\n // This would typically be done by the service that has access to all messages\n\n return previewMessage;\n });\n}\n\n/**\n * Creates a ChatPreviewMessage from reply information\n * @param message - The original message that is being referenced\n * @returns A ChatPreviewMessage formatted for use as a replyTo\n */\nexport function createReplyPreview(message: AXMChatMessage): ChatPreviewMessage | undefined {\n if (!message) return undefined;\n\n return {\n id: message.id,\n sendTime: new Date(message.createdAt || new Date()),\n readTime: new Date(),\n type:\n message.message?.contentType === 'image'\n ? 'image'\n : message.message?.contentType === 'video'\n ? 'video'\n : message.message?.contentType === 'file'\n ? 'file'\n : 'text',\n content: message.message?.content || '',\n name: message.author?.id || 'Unknown',\n fromId: !message.isFromCurrentUser ? message.author?.id : undefined,\n };\n}\n\n/**\n * Generate demo chat preview data with a variety of message types\n * @returns Array of sample chat preview messages\n */\nexport function generateDemoChatPreview(): ChatPreviewMessage[] {\n return [\n {\n id: '0',\n sendTime: new Date(),\n type: 'text',\n readTime: new Date(),\n content: 'Hello John, How are you?',\n name: 'test name',\n },\n {\n id: '1',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'text',\n content: 'Hello',\n name: 'test name',\n replyTo: {\n id: '0',\n sendTime: new Date(),\n type: 'text',\n readTime: new Date(),\n content: 'Hello John, How are you?',\n name: 'test name',\n },\n },\n {\n id: '2',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'voice',\n name: 'test name',\n content: `data:audio/webm;codecs=opus;base64,GkXfoEF34fJ`,\n },\n {\n id: '3',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'text',\n content: 'Can i have your address information?',\n name: 'test name',\n replyTo: {\n id: '1',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'text',\n content: 'Hello',\n name: 'test name',\n },\n },\n {\n id: '4',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'file',\n name: 'test name',\n content: `data:audio/webm;codecs=opus;base64,GkXfoEF34fJ`,\n },\n {\n id: '5',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'image',\n name: 'test name',\n content: `https://picsum.photos/300/200`,\n },\n {\n id: '6',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'video',\n name: 'test name',\n content: `https://www.pexels.com/download/video/5495322/?fps=29.97&h=540&w=960`,\n },\n {\n id: '7',\n sendTime: new Date(),\n type: 'text',\n readTime: new Date(),\n content: 'Hello John, How are you?',\n name: 'test name',\n },\n {\n id: '8',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'audio',\n name: 'kids',\n content: `https://actions.google.com/sounds/v1/ambiences/kids_playing.ogg`,\n },\n {\n id: '9',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'image',\n name: 'test name',\n content: `https://picsum.photos/300/200`,\n },\n {\n id: '10',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'image',\n name: 'test name',\n content: `https://picsum.photos/200/300`,\n },\n {\n id: '11',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'video',\n name: 'test name',\n content: `https://www.pexels.com/download/video/5495322/?fps=29.97&h=540&w=960`,\n },\n {\n id: '12',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'file',\n name: 'test name',\n content: `data:audio/webm;codecs=opus;base64,GkXfo59ChoE+u5BxHVL7ZAS1EF34fJ`,\n },\n {\n id: '13',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'audio',\n name: 'alarm',\n content: `https://actions.google.com/sounds/v1/alarms/digital_watch_alarm_long.ogg`,\n },\n ];\n}\n\n/**\n * Usage Examples:\n *\n * Example 1: Converting chat service response to chat preview format\n * ```typescript\n * import { AXMChatService } from '../chat.service';\n * import { convertToChatPreview } from './chat-preview.helper';\n *\n * export class ChatPreviewComponent {\n * constructor(private chatService: AXMChatService) {}\n *\n * async loadChatMessages(roomId: string) {\n * const response = await this.chatService.getChatMessages(roomId);\n *\n * // Convert to chat preview format\n * const previewMessages = convertToChatPreview(response);\n *\n * // Use the converted messages\n * this.conversationService.chats.set(previewMessages);\n * }\n * }\n * ```\n *\n * Example 2: Using demo data for development/testing\n * ```typescript\n * import { generateDemoChatPreview } from './chat-preview.helper';\n *\n * export class ChatPreviewDemoComponent {\n * ngOnInit() {\n * // Load demo messages\n * const demoMessages = generateDemoChatPreview();\n *\n * // Use the demo messages\n * this.conversationService.chats.set(demoMessages);\n * }\n * }\n */\n","import { AXConversationActionEvent, AXConversationService } from '@acorex/components/conversation';\nimport { AXFileService } from '@acorex/core/file';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n OnDestroy,\n signal,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { convertToChatPreview, generateDemoChatPreview } from '../../chat-preview.helper';\nimport { AXMChatService } from '../../chat.service';\n\n@Component({\n selector: 'axm-chat-preview',\n templateUrl: './chat-preview.component.html',\n styleUrls: ['./chat-preview.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class AXMChatPreviewComponent implements OnDestroy {\n // Signal for dynamic max-height (using computed logic for real-time updates)\n\n private activatedRoute = inject(ActivatedRoute);\n private fileService: AXFileService = inject(AXFileService);\n private conversationService = inject(AXConversationService);\n private chatService = inject(AXMChatService);\n\n protected options = signal({\n disabled: false,\n readonly: false,\n value: '',\n });\n\n protected conversationViewMaxHeight = signal('');\n private resizeObserver!: ResizeObserver;\n private initialTextAreaHeight = 0;\n private textareaHeight = signal<number>(0);\n\n private messageId: string;\n\n constructor(private elRef: ElementRef) {\n afterNextRender(() => {\n const textareaContainer = this.elRef.nativeElement.querySelector('ax-conversation-input > div');\n\n if (textareaContainer) {\n this.initialTextAreaHeight = textareaContainer.offsetHeight;\n this.resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n if (entry.target === textareaContainer) {\n const currentHeight = entry.contentRect.height;\n this.textareaHeight.set(currentHeight);\n }\n }\n });\n\n this.resizeObserver.observe(textareaContainer);\n } else {\n console.warn('Textarea Container element not found.');\n }\n this.activatedRoute.params.subscribe((params) => {\n console.log(params['id']);\n this.messageId = params['id'];\n this.loadMessages(this.messageId);\n });\n });\n }\n\n protected dynamicHeight = computed(() => {\n const baseOffset = 275;\n const currentHeight = this.textareaHeight();\n const dynamicOffset = baseOffset + (currentHeight - this.initialTextAreaHeight);\n return `calc(100vh - ${dynamicOffset}px) !important`;\n });\n\n ngOnDestroy(): void {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n }\n }\n\n handleFileChange(event: any): void {\n console.log('File Changed:', event);\n }\n\n handleCancelRecord(event: any): void {\n console.log('Recording Cancelled:', event);\n }\n\n handleEndRecord(event: any): void {\n this.fileService.blobToBase64(event.data.value).then((base64Content) => {\n // Create a properly formatted chat preview message for voice\n const newVoiceMessage = {\n id: `${Math.floor(Math.random() * 10000)}`,\n content: base64Content,\n sendTime: new Date(),\n readTime: new Date(),\n type: 'voice',\n name: 'test name',\n };\n\n this.conversationService.chats.update((values: any) => [...values, newVoiceMessage]);\n });\n }\n\n handleOnSend(e: any): void {\n console.log('Message Sent:', e);\n\n if (e.data.value) {\n this.options.update((prev) => ({ ...prev, value: '' }));\n\n // Create a properly formatted chat preview message\n const newMessage = {\n id: `${Math.floor(Math.random() * 10000)}`,\n content: e.data.value,\n sendTime: new Date(),\n readTime: new Date(),\n type: e.data.type || 'text',\n name: 'test name',\n replyTo: e.data.replyChat,\n };\n\n // If it's a reply to another message, ensure it has the right format\n if (newMessage.replyTo) {\n // Ensure replyTo has the right format if it doesn't already\n if (!newMessage.replyTo.readTime) {\n newMessage.replyTo = {\n ...newMessage.replyTo,\n readTime: new Date(),\n };\n }\n }\n\n this.conversationService.chats.update((values: any) => [...values, newMessage]);\n }\n this.scrollToEnd();\n }\n\n handleOnAction(e: AXConversationActionEvent): void {\n console.log('Action Triggered:', e);\n }\n\n scrollToEnd() {\n const conversationView = document.querySelector('ax-conversation-view');\n if (conversationView) {\n conversationView.scrollTo({\n top: conversationView.scrollHeight,\n behavior: 'smooth',\n });\n }\n }\n\n addMockMessage() {}\n\n async loadMessages(roomId: string) {\n try {\n // Get messages from the chat service\n const messageResponse = await this.chatService.getChatMessages(roomId);\n\n // Convert to chat preview format\n const chatPreviewMessages = convertToChatPreview(messageResponse);\n\n // Set the messages in the conversation service\n this.conversationService.chats.set(chatPreviewMessages);\n } catch (error) {\n console.error('Failed to load messages:', error);\n\n // Fallback to demo data if there's an error\n this.conversationService.chats.set(generateDemoChatPreview());\n }\n }\n\n loadDemoMessages() {\n this.conversationService.chats.set(generateDemoChatPreview());\n }\n}\n","<div class=\"ax-flex ax-flex-col ax-bg-surface-container\">\n <!-- Messages Container -->\n <ax-conversation-container class=\"ax-flex-1 ax-overflow-hidden\">\n <ax-conversation-view (onAction)=\"handleOnAction($event)\" [style.height]=\"dynamicHeight()\"></ax-conversation-view>\n </ax-conversation-container>\n\n <!-- Input Area -->\n <div class=\"ax-p-2\">\n <ax-conversation-input\n placeholder=\"Type a message...\"\n [(ngModel)]=\"options().value\"\n (onSendClick)=\"handleOnSend($event)\"\n (onFileChange)=\"handleFileChange($event)\"\n (onStopRecording)=\"handleEndRecord($event)\"\n (onCancelRecording)=\"handleCancelRecord($event)\"\n ></ax-conversation-input>\n </div>\n</div>\n","import { AXMUsersEntityService } from '@acorex/modules/security-management';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport {\n AXPContent,\n AXPContentType,\n AXPPagedListResult,\n AXPQueryRequest,\n AXPUserReference,\n} from '@acorex/platform/core';\nimport { inject, Injectable } from '@angular/core';\nimport { AXMMessageService } from '../../entities/message/message.service';\nimport { AXMConversationMessage, AXMConversationReaction } from '../../entities/message/message.types';\nimport { AXMRoomService } from '../../entities/room/room.service';\nimport { AXMConversationRoom } from '../../entities/room/room.types';\nimport { AXMCommentMessage, AXMCommentUser, AXMCreateCommentDto } from './comment.type';\n\n/**\n * Abstract Comment Service defining the contract for comment functionality\n */\nexport abstract class AXMCommentService {\n /**\n * Queries comments based on provided request parameters\n */\n abstract query(queryRequest: AXPQueryRequest): Promise<AXPPagedListResult<AXMCommentMessage>>;\n\n /**\n * Gets a single comment by ID\n */\n abstract getOne(id: string): Promise<AXMCommentMessage>;\n\n /**\n * Creates a new comment\n */\n abstract insertOne(commentData: AXMCreateCommentDto): Promise<AXMCommentMessage>;\n\n /**\n * Updates an existing comment\n */\n abstract updateOne(id: string, update: Partial<AXMCommentMessage>): Promise<AXMCommentMessage>;\n\n /**\n * Deletes a comment\n */\n abstract deleteOne(id: string): Promise<boolean>;\n\n /**\n * Toggles like status for a comment\n */\n abstract like(messageId: string): Promise<AXMCommentMessage>;\n\n /**\n * Gets the comment count for an entity\n */\n abstract getCommentCount(entityId: string, instanceId: string, roomType?: string): Promise<number>;\n\n /**\n * Gets all comments with their replies\n */\n abstract getAllCommentsWithReplies(\n entityId: string,\n instanceId: string,\n roomType?: string,\n skip?: number,\n take?: number,\n ): Promise<AXPPagedListResult<AXMCommentMessage>>;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXMCommentServiceImpl implements AXMCommentService {\n private readonly roomService = inject(AXMRoomService);\n private readonly messageService = inject(AXMMessageService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly usersService = inject(AXMUsersEntityService);\n\n // === Helper Methods ===\n\n private getCurrentUser(): AXPUserReference {\n const user = this.sessionService.user;\n return {\n id: user?.id || 'guest-user',\n type: 'user',\n };\n }\n\n private async getUserInfo(userId: string): Promise<AXMCommentUser> {\n try {\n const user = await this.usersService.getOne(userId);\n return {\n id: user.id,\n userName: user.username || user.id,\n firstName: user.firstName || '',\n lastName: user.lastName || '',\n fullName: `${user.firstName || ''} ${user.lastName || ''}`.trim() || 'Unknown User',\n avatar: '',\n };\n } catch (error) {\n console.error(`Failed to get user info for ID: ${userId}`, error);\n return {\n id: userId,\n userName: userId,\n firstName: 'Unknown',\n lastName: 'User',\n fullName: 'Unknown User',\n avatar: '',\n };\n }\n }\n\n private formatRoomId(entityId: string, instanceId: string, roomType: string = 'default'): string {\n return `${roomType}:${entityId}:${instanceId}`;\n }\n\n private async formatComment(message: AXMConversationMessage): Promise<AXMCommentMessage> {\n const currentUserId = this.getCurrentUser().id;\n\n // Check if the current user has liked this message\n const isLiked = (message.reactions || []).some(\n (reaction) => reaction.author.id === currentUserId && reaction.type === 'like',\n );\n\n // Count total reactions\n const reactionsCount = (message.reactions || []).filter((r) => r.type === 'like').length;\n\n // Get the full user info for the author\n const userInfo = await this.getUserInfo(message.author.id);\n\n return {\n ...message,\n author: {\n ...message.author,\n ...userInfo,\n },\n isFromCurrentUser: message.author.id === currentUserId,\n formattedDate: new Date(message.createdAt || new Date()).toLocaleString(),\n isLiked,\n reactionsCount,\n replies: [],\n } as AXMCommentMessage;\n }\n\n private async buildCommentHierarchy(comments: AXMCommentMessage[]): Promise<AXMCommentMessage[]> {\n // Create a map for quick lookup of comments by ID\n const commentMap = new Map<string, AXMCommentMessage>();\n const rootComments: AXMCommentMessage[] = [];\n\n // First pass: add all comments to the map\n for (const comment of comments) {\n commentMap.set(comment.id, comment);\n\n // Initialize the replies array if not already present\n if (!comment.replies) {\n comment.replies = [];\n }\n\n // If this is a root comment (no replyId), add it to the root comments array\n if (!comment.replyId) {\n rootComments.push(comment);\n }\n }\n\n // Second pass: build the hierarchy by adding replies to their parent comments\n for (const comment of comments) {\n if (comment.replyId) {\n const parentComment = commentMap.get(comment.replyId);\n if (parentComment && parentComment.replies) {\n parentComment.replies.push(comment);\n } else {\n // If parent not found (might be deleted), treat as a root comment\n rootComments.push(comment);\n }\n }\n }\n\n // Sort the root comments and their replies by creation date (newest first)\n const sortByDate = (a: AXMCommentMessage, b: AXMCommentMessage) => {\n const dateA = a.createdAt ? new Date(a.createdAt).getTime() : 0;\n const dateB = b.createdAt ? new Date(b.createdAt).getTime() : 0;\n return dateB - dateA;\n };\n\n rootComments.sort(sortByDate);\n\n // Sort the replies within each comment\n for (const comment of rootComments) {\n if (comment.replies && comment.replies.length > 0) {\n comment.replies.sort(sortByDate);\n }\n }\n\n return rootComments;\n }\n\n // === Room Operations ===\n\n async getRoomList(skip = 0, take = 100) {\n return this.roomService.query({ skip, take });\n }\n\n async getRoomDetails(roomId: string) {\n return this.roomService.getOne(roomId);\n }\n\n async createRoom(roomData: Omit<AXMConversationRoom, 'id'>): Promise<string> {\n return this.roomService.insertOne(roomData);\n }\n\n async ensureRoomExists(entityId: string, instanceId: string, roomType: string = 'default'): Promise<string> {\n const roomId = this.formatRoomId(entityId, instanceId, roomType);\n\n try {\n // Check if room exists\n await this.getRoomDetails(roomId);\n return roomId;\n } catch (error) {\n // If room doesn't exist, create it\n const roomData = {\n id: roomId, // Provide the ID directly for comments\n title: `Comments for ${entityId}:${instanceId}`,\n members: [this.getCurrentUser()],\n };\n\n // Create a new room or return the ID if it already exists\n try {\n const result = await this.createRoom(roomData);\n return typeof result === 'string' ? result : roomId;\n } catch (e) {\n // If we get a duplicate error, the room was created by another request\n return roomId;\n }\n }\n }\n\n // === Comment Operations ===\n\n async query(queryRequest: AXPQueryRequest): Promise<AXPPagedListResult<AXMCommentMessage>> {\n const { params, skip = 0, take = 20 } = queryRequest;\n const { entityId, instanceId, roomType = 'default' } = params || {};\n\n if (!entityId || !instanceId) {\n throw new Error('EntityId and InstanceId are required for querying comments');\n }\n\n const roomId = this.formatRoomId(entityId, instanceId, roomType);\n\n // Fetch messages for this room\n const result = await this.messageService.query({\n skip,\n take,\n filter: {\n field: 'roomId',\n value: roomId,\n operator: { type: 'equal' },\n },\n });\n\n // Transform messages to comments\n const comments = await Promise.all(result.items.map((message) => this.formatComment(message)));\n\n // Build comment hierarchy\n const hierarchicalComments = await this.buildCommentHierarchy(comments);\n\n return {\n items: hierarchicalComments,\n total: result.total,\n };\n }\n\n async getOne(id: string): Promise<AXMCommentMessage> {\n const message = await this.messageService.getOne(id);\n return this.formatComment(message);\n }\n\n async insertOne(commentData: AXMCreateCommentDto): Promise<AXMCommentMessage> {\n const {\n entityId,\n instanceId,\n roomType = 'default',\n content,\n contentType = 'text' as AXPContentType,\n replyId,\n isPrivate,\n } = commentData;\n\n // Ensure the room exists\n const roomId = await this.ensureRoomExists(entityId, instanceId, roomType);\n\n // Create the message content\n const messageContent: AXPContent = {\n content,\n contentType,\n };\n\n // Create the message object\n const message: Omit<AXMConversationMessage, 'id'> = {\n roomId,\n message: messageContent,\n author: this.getCurrentUser(),\n replyId: replyId || null,\n };\n\n // Insert the message\n const messageId = await this.messageService.insertOne(message);\n\n // Fetch the full message to return as a comment entity\n const insertedMessage = await this.messageService.getOne(messageId);\n return this.formatComment(insertedMessage);\n }\n\n async updateOne(id: string, update: Partial<AXMCommentMessage>): Promise<AXMCommentMessage> {\n // If content is being updated, format it correctly\n let messageUpdate: Partial<AXMConversationMessage> = {};\n\n if (update.message?.content) {\n messageUpdate.message = {\n content: update.message.content,\n contentType: update.message.contentType || 'text',\n };\n }\n\n // Apply the update\n const result = await this.messageService.updateOne(id, messageUpdate);\n\n // Return as a comment entity\n return this.formatComment(result);\n }\n\n async deleteOne(id: string): Promise<boolean> {\n try {\n await this.messageService.deleteOne(id);\n return true;\n } catch (error) {\n console.error('Failed to delete comment:', error);\n return false;\n }\n }\n\n // === Comment-Specific Operations ===\n\n async like(messageId: string): Promise<AXMCommentMessage> {\n const author = this.getCurrentUser();\n const message = await this.messageService.getOne(messageId);\n\n // Check if the user has already liked this message\n const reactions = message.reactions || [];\n const existingReaction = reactions.find((r) => r.author.id === author.id && r.type === 'like');\n\n let updatedReactions: AXMConversationReaction[];\n\n if (existingReaction) {\n // If the reaction exists, remove it (unlike)\n updatedReactions = reactions.filter((r) => !(r.author.id === author.id && r.type === 'like'));\n } else {\n // If the reaction doesn't exist, add it (like)\n updatedReactions = [...reactions, { author, type: 'like' }];\n }\n\n // Update the message with the new reactions\n const updatedMessage = await this.messageService.updateOne(messageId, { reactions: updatedReactions });\n\n // Return as a comment entity\n return this.formatComment(updatedMessage);\n }\n\n async getCommentCount(entityId: string, instanceId: string, roomType: string = 'default'): Promise<number> {\n const roomId = this.formatRoomId(entityId, instanceId, roomType);\n\n try {\n const result = await this.messageService.query({\n skip: 0,\n take: 1,\n filter: {\n field: 'roomId',\n value: roomId,\n operator: { type: 'equal' },\n },\n });\n\n return result.total;\n } catch (error) {\n console.error('Failed to get comment count:', error);\n return 0;\n }\n }\n\n async getAllCommentsWithReplies(\n entityId: string,\n instanceId: string,\n roomType: string = 'default',\n skip = 0,\n take = 100,\n ): Promise<AXPPagedListResult<AXMCommentMessage>> {\n const queryRequest: AXPQueryRequest = {\n params: { entityId, instanceId, roomType },\n skip,\n take,\n };\n\n return this.query(queryRequest);\n }\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXPLayoutBuilderModule, AXPWidgetNode } from '@acorex/platform/layout/builder';\nimport { Component } from '@angular/core';\n\n@Component({\n template: `<axp-widgets-container\n class=\"ax-flex ax-flex-col ax-gap-2 ax-p-4\"\n [context]=\"context\"\n (onContextChanged)=\"context = $event.data\"\n >\n <div class=\"ax-m-5\">\n <ng-container axp-widget-renderer [node]=\"lookupNode\" [mode]=\"'edit'\"> </ng-container>\n </div>\n </axp-widgets-container>\n\n <ax-footer>\n <ax-suffix>\n <ax-button text=\"Accept & Send\" color=\"primary\" (onClick)=\"handleClose()\"></ax-button>\n </ax-suffix>\n </ax-footer>`,\n imports: [AXDecoratorModule, AXPLayoutBuilderModule, AXButtonModule],\n})\nexport class AXMCommentLookupPopup extends AXBasePageComponent {\n protected lookupNode: AXPWidgetNode = {\n name: 'lookup',\n path: 'lookup',\n type: 'lookup-editor',\n options: {\n entity: 'axoidc.users',\n },\n };\n context = {};\n\n handleClose() {\n this.close({\n result: true,\n data: this.context,\n });\n }\n}\n","import { AXWysiwygContainerComponent } from '@acorex/components/wysiwyg';\nimport { ChangeDetectionStrategy, Component, computed, inject, OnInit, signal, viewChild } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { AXStyleLookType } from '@acorex/cdk/common';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXPopupConfig, AXPopupService } from '@acorex/components/popup';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { AXPQueryRequest } from '@acorex/platform/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { AXMCommentService } from './comment.service';\nimport { AXMCommentMessage } from './comment.type';\n\nimport { AXMCommentLookupPopup } from './comment-lookup-popup.component';\n\n@Component({\n templateUrl: './comment-list-view.component.html',\n selector: 'axm-comment-list-view',\n standalone: false,\n styles: `\n ax-wysiwyg-container {\n .ax-editor-container {\n border-top-left-radius: 0 !important;\n border-top-right-radius: 0 !important;\n }\n .ax-error-message {\n padding-left: 0.5rem;\n }\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXMCommentListViewComponent implements OnInit {\n protected hasCooldown = signal<boolean>(false);\n protected commentContent = signal<string>('');\n\n protected isSubmitting = signal<boolean>(false);\n protected isReplyingMode = signal<boolean>(false);\n protected isEditingMode = signal<boolean>(false);\n protected isLoading = signal<boolean>(true);\n\n protected failedImageIds = signal<string[]>([]);\n protected activeReplyComment = signal<undefined | AXMCommentMessage>(undefined);\n protected activeEditComment = signal<undefined | AXMCommentMessage>(undefined);\n protected wysiwygEditor = viewChild.required<AXWysiwygContainerComponent>('w');\n\n private commentService = inject(AXMCommentService);\n private platform = inject(AXPlatform);\n private route = inject(ActivatedRoute);\n private popupService = inject(AXPopupService);\n private toastService = inject(AXToastService);\n private dialogService = inject(AXDialogService);\n sanitize = inject(DomSanitizer);\n\n private readonly routeParams = this.route.snapshot;\n private getPayload = computed(\n () =>\n ({\n params: this.payload(),\n skip: 0,\n take: 10,\n }) as AXPQueryRequest,\n );\n payload = computed(() => ({\n roomType: 'default',\n entityId: this.routeParams.params?.['module'] + '.' + this.routeParams.params?.['entity'],\n instanceId: this.routeParams.params?.['id'],\n }));\n\n protected comments = signal<AXMCommentMessage[]>([]);\n private wysiwyg = viewChild<AXWysiwygContainerComponent>('w');\n\n ngOnInit(): void {\n this.loadComments();\n }\n\n protected wysiwygOptions = signal<{\n look: AXStyleLookType;\n }>({\n look: 'solid',\n });\n\n protected avatarConfig = signal<{\n color: string;\n look: 'sharp' | 'soft' | 'rounded';\n type: string;\n }>({\n color: 'primary',\n look: 'rounded',\n type: 'solid', // 'image' | 'text' | 'icon' | 'default'\n });\n\n validateContent = (content: string) => {\n let isValid = true;\n\n if (!content || content === '<p><br></p>') {\n isValid = false;\n }\n return {\n rule: 'callback',\n result: isValid,\n message: isValid ? '' : 'Please fill the content',\n value: content,\n };\n };\n\n sanitizeHtml(htmlContent: string | undefined) {\n if (!htmlContent) return this.sanitize.bypassSecurityTrustHtml('');\n return this.sanitize.bypassSecurityTrustHtml(htmlContent);\n }\n\n handleImageError(imageId: string): void {\n this.failedImageIds.update((ids) => [...ids, imageId]);\n }\n\n checkImageExists(imageId: string): boolean {\n return !this.failedImageIds().includes(imageId);\n }\n\n extractInitials(name: string | undefined | any): string {\n if (!name) return '?';\n\n // Handle the case where name is an object with fullName property\n const nameStr = typeof name === 'object' && name.fullName ? name.fullName : String(name);\n\n const words = nameStr.split(' ');\n const initials = words.map((word: string) => word.charAt(0).toUpperCase());\n return initials.join('');\n }\n\n async loadComments() {\n this.isLoading.set(true);\n try {\n const response = await this.commentService.query(this.getPayload());\n this.comments.set(response.items);\n } catch (error) {\n console.error('Failed to load comments:', error);\n this.toastService.show({\n content: 'Failed to load comments. Please try again.',\n color: 'danger',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n this.comments.set([]);\n } finally {\n setTimeout(() => {\n this.isLoading.set(false);\n }, 250);\n }\n }\n\n editMessage(comment: AXMCommentMessage, reply?: AXMCommentMessage) {\n this.isReplyingMode.set(false);\n this.activeReplyComment.set(undefined);\n this.isEditingMode.set(true);\n this.activeEditComment.set(comment);\n const contentToEdit = reply ? reply.message?.content : comment.message?.content;\n this.commentContent.set(contentToEdit || '');\n this.wysiwygEditor().getHostElement().scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n\n replyMessage(comment: AXMCommentMessage, reply?: AXMCommentMessage) {\n this.isEditingMode.set(false);\n this.activeEditComment.set(undefined);\n this.isReplyingMode.set(true);\n this.activeReplyComment.set(comment);\n if (reply) {\n const author = (reply.author as any).fullName || reply.author.id;\n const mention = `<a data-id=\"${reply.id}\">@${author}</a> `;\n this.commentContent.set(mention);\n this.wysiwyg()?.focus();\n document.getElementsByClassName('ql-editor')[0].innerHTML = mention;\n }\n this.wysiwygEditor().getHostElement().scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n\n async deleteComment(comment: AXMCommentMessage) {\n const dialog = this.dialogService.open({\n icon: 'fa-regular fa-warning',\n content: 'Are you sure you want to delete this comment?',\n title: 'Delete Comment',\n type: 'danger',\n orientation: 'horizontal',\n buttons: [\n {\n text: 'Delete',\n color: 'danger',\n onClick: async (e: any) => {\n e.handled = true;\n e.source.text = 'Deleting...';\n e.source.disabled = true;\n e.source.loading = true;\n try {\n if (comment.id) {\n await this.commentService.deleteOne(comment.id);\n this.removeMessageById(comment.id);\n this.toastService.show({\n content: 'Comment deleted successfully.',\n color: 'success',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n if (this.isEditingMode() && this.activeEditComment()?.id === comment.id) {\n this.resetReplyEditState();\n }\n dialog.close();\n }\n } catch (error) {\n this.toastService.show({\n content: typeof error === 'string' ? error : 'Failed to delete comment!',\n color: 'danger',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n }\n },\n },\n {\n text: 'Cancel',\n color: 'default',\n autofocus: true,\n onClick: (e) => {\n dialog.close();\n },\n },\n ],\n closeButton: false,\n });\n }\n\n async deleteReply(comment: AXMCommentMessage, reply: AXMCommentMessage) {\n const dialog = this.dialogService.open({\n icon: 'fa-regular fa-warning',\n content: 'Are you sure you want to delete this reply?',\n title: 'Delete Reply',\n type: 'danger',\n orientation: 'horizontal',\n buttons: [\n {\n text: 'Delete',\n color: 'danger',\n onClick: async (e: any) => {\n e.handled = true;\n e.source.text = 'Deleting...';\n e.source.disabled = true;\n e.source.loading = true;\n try {\n if (reply.id) {\n await this.commentService.deleteOne(reply.id);\n this.removeMessageById(comment.id, reply.id);\n this.toastService.show({\n content: 'Comment deleted successfully.',\n color: 'success',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n dialog.close();\n }\n } catch (error) {\n this.toastService.show({\n content: typeof error === 'string' ? error : 'Failed to delete comment!',\n color: 'danger',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n }\n },\n },\n {\n text: 'Cancel',\n color: 'default',\n autofocus: true,\n onClick: (e) => {\n dialog.close();\n },\n },\n ],\n closeButton: false,\n });\n }\n\n resetReplyEditState() {\n this.isEditingMode.set(false);\n this.activeEditComment.set(undefined);\n this.isReplyingMode.set(false);\n this.activeReplyComment.set(undefined);\n this.commentContent.set('');\n document.getElementsByClassName('ql-editor')[0].innerHTML = '';\n }\n\n async toggleLike(comment: AXMCommentMessage, reply?: AXMCommentMessage) {\n try {\n if (reply) {\n if (reply.id) {\n this.updateLikeStatus(comment.id, reply.id);\n await this.commentService.like(reply.id);\n }\n } else {\n if (comment.id) {\n this.updateLikeStatus(comment.id);\n await this.commentService.like(comment.id);\n }\n }\n } catch (error) {\n console.error('Failed to toggle like:', error);\n // Revert the optimistic update if the server call fails\n if (reply && reply.id) {\n this.updateLikeStatus(comment.id, reply.id);\n } else if (comment.id) {\n this.updateLikeStatus(comment.id);\n }\n }\n }\n\n private updateLikeStatus(commentId: string, replyId?: string) {\n this.comments.update((commentsList) => {\n return commentsList.map((comment) => {\n if (comment.id === commentId) {\n if (replyId && comment.replies) {\n const updatedReplies = comment.replies.map((reply) =>\n reply.id === replyId\n ? {\n ...reply,\n isLiked: !reply.isLiked,\n reactionsCount:\n reply.isLiked && reply.reactionsCount !== undefined\n ? reply.reactionsCount - 1\n : (reply.reactionsCount || 0) + 1,\n }\n : reply,\n );\n\n return {\n ...comment,\n replies: updatedReplies,\n };\n } else {\n return {\n ...comment,\n isLiked: !comment.isLiked,\n reactionsCount:\n comment.isLiked && comment.reactionsCount !== undefined\n ? comment.reactionsCount - 1\n : (comment.reactionsCount || 0) + 1,\n };\n }\n }\n return comment;\n });\n });\n }\n\n private removeMessageById(commentId: string, replyId?: string) {\n if (replyId) {\n // Remove a reply from a comment\n this.comments.update((commentsList) =>\n commentsList.map((comment) => {\n if (comment.id === commentId && comment.replies) {\n return {\n ...comment,\n replies: comment.replies.filter((reply) => reply.id !== replyId),\n };\n }\n return comment;\n }),\n );\n } else {\n // Remove a whole comment\n this.comments.update((commentsList) => commentsList.filter((comment) => comment.id !== commentId));\n }\n }\n\n protected async submitComment(isPrivate: boolean = false): Promise<void> {\n if (!this.validateContent(this.commentContent()).result) {\n return;\n }\n\n this.isSubmitting.set(true);\n\n let memberLookup;\n if (isPrivate) {\n const popupConfig: AXPopupConfig = {\n header: true,\n size: 'md',\n draggable: true,\n hasBackdrop: true,\n closeButton: true,\n closeOnBackdropClick: false,\n };\n const popup = await this.popupService.open(AXMCommentLookupPopup, popupConfig);\n memberLookup = popup.data?.data?.lookup;\n }\n\n try {\n if (this.isEditingMode() && this.activeEditComment()?.id) {\n const payload = {\n message: {\n content: this.commentContent(),\n contentType: 'text' as const,\n },\n };\n\n await this.commentService.updateOne(this.activeEditComment()!.id, payload);\n this.hasCooldown.set(true);\n this.isEditingMode.set(false);\n this.activeEditComment.set(undefined);\n } else {\n const payload = {\n ...this.payload(),\n content: this.commentContent(),\n contentType: 'text' as const,\n isPrivate: isPrivate,\n replyId: this.activeReplyComment()?.id ?? null,\n };\n\n await this.commentService.insertOne(payload);\n this.hasCooldown.set(true);\n this.isReplyingMode.set(false);\n this.activeReplyComment.set(undefined);\n }\n\n // Reload comments to get the updated list with proper hierarchy\n const response = await this.commentService.query(this.getPayload());\n this.comments.set(response.items);\n\n this.commentContent.set('');\n document.getElementsByClassName('ql-editor')[0].innerHTML = '';\n\n setTimeout(() => {\n this.hasCooldown.set(false);\n }, 1000);\n } catch (error) {\n console.error('Error submitting comment:', error);\n this.toastService.show({\n content: typeof error === 'string' ? error : 'Failed to submit comment. Please try again.',\n color: 'danger',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n } finally {\n this.isSubmitting.set(false);\n }\n }\n\n scrollMain() {\n const comment = this.isReplyingMode() ? this.activeReplyComment() : this.activeEditComment();\n if (comment && comment.id) {\n const el = document.getElementById(comment.id);\n if (el) {\n el.scrollIntoView({ behavior: 'smooth', block: 'center' });\n const content = el?.firstElementChild?.children[1] as HTMLElement;\n if (content) {\n const prevBg = content.style.background;\n content.style.borderRadius = '0.25rem';\n content.style.transition = 'background 1s ease-in-out';\n content.style.background = `rgba(var(--ax-color-on-surface), var(--tw-bg-opacity))`;\n setTimeout(() => {\n content.style.background = prevBg || 'rgba(0, 0, 0, 0)';\n }, 1000);\n }\n }\n }\n }\n\n calcDefrenetTime(date: Date | undefined) {\n return date ? Date.now() - date.getTime() : undefined;\n }\n}\n","<div class=\"ax-mt-2\">\n <ax-comment-container>\n @if (isLoading()) {\n <div class=\"ax-flex ax-items-center ax-py-12 ax-bg-lightest ax-px-5\">\n <ax-skeleton class=\"ax-min-w-16 ax-h-16 ax-rounded-full ax-me-4\"></ax-skeleton>\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-w-full\">\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-2 ax-rounded-full\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-2 ax-rounded-full\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-8/12 ax-h-2 ax-rounded-full\"></ax-skeleton>\n </div>\n </div>\n } @else if (!isLoading() && comments().length > 0) {\n <ax-comment-view class=\"ax-bg-lightest\">\n @for (comment of comments(); track comment.id) {\n <ax-comment-item [id]=\"comment.id!\" [replyCount]=\"comment.replies?.length ?? 0\">\n <ax-avatar [color]=\"avatarConfig().color\" [shape]=\"avatarConfig().look\">\n @if (checkImageExists(comment.id!) && comment.author && extractInitials(comment.author) !== '?') {\n <ax-image (onError)=\"handleImageError(comment.id!)\" [src]=\"''\">\n <ax-loading></ax-loading>\n </ax-image>\n } @else {\n <ax-text>\n <span class=\"ax-text-base ax-overflow-hidden\">{{ extractInitials(comment.author) }}</span>\n </ax-text>\n }\n </ax-avatar>\n <ax-title>{{ extractInitials(comment.author) }}</ax-title>\n <ax-comment-date>{{ calcDefrenetTime(comment.createdAt) | format: 'timeleft' | async }} </ax-comment-date>\n <ax-comment-menu-options>\n <ax-button class=\"ax-sm\" look=\"blank\" color=\"neutral\">\n <ax-icon icon=\"ax-icon ax-icon-solid ax-icon-more-horizontal\"></ax-icon>\n </ax-button>\n\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item text=\"Edit\" color=\"neutral\" (click)=\"editMessage(comment)\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-edit\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n\n <ax-button-item text=\"Delete\" color=\"danger\" (click)=\"deleteComment(comment)\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-comment-menu-options>\n <ax-content [innerHTML]=\"sanitizeHtml(comment.message.content)\"></ax-content>\n <ax-comment-like (click)=\"toggleLike(comment)\" [liked]=\"comment.isLiked!\">\n {{ comment.reactionsCount }}\n </ax-comment-like>\n <ax-comment-reply-text (click)=\"replyMessage(comment)\"></ax-comment-reply-text>\n @for (reply of comment.replies; track reply.id) {\n <ax-comment-item [id]=\"reply.id\">\n <ax-avatar [color]=\"avatarConfig().color\" [shape]=\"avatarConfig().look\">\n @if (reply && checkImageExists(reply.id!) && reply.author && extractInitials(reply.author) !== '?') {\n <ax-image (onError)=\"handleImageError(reply.id!)\" [src]=\"''\">\n <ax-loading></ax-loading>\n </ax-image>\n } @else {\n <ax-text>\n <span class=\"ax-text-base ax-overflow-hidden\">{{ extractInitials(reply.author) }}</span>\n </ax-text>\n }\n </ax-avatar>\n <ax-title>{{ extractInitials(reply.author) }}</ax-title>\n <ax-comment-date>{{ calcDefrenetTime(reply.createdAt) | format: 'timeleft' | async }} </ax-comment-date>\n <ax-comment-menu-options>\n <ax-button class=\"ax-sm\" look=\"blank\" color=\"neutral\">\n <ax-icon icon=\"ax-icon ax-icon-solid ax-icon-more-horizontal\"></ax-icon>\n </ax-button>\n\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item text=\"Edit\" color=\"neutral\" (click)=\"editMessage(comment, reply)\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-edit\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item text=\"Delete\" color=\"danger\" (click)=\"deleteReply(comment, reply)\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-comment-menu-options>\n <ax-content [innerHTML]=\"sanitizeHtml(reply.message.content)\"></ax-content>\n <ax-comment-like (click)=\"toggleLike(comment, reply)\" [liked]=\"reply.isLiked!\">\n {{ reply.reactionsCount }}\n </ax-comment-like>\n <ax-comment-reply-text (click)=\"replyMessage(comment, reply)\"></ax-comment-reply-text>\n </ax-comment-item>\n }\n </ax-comment-item>\n }\n </ax-comment-view>\n } @else {\n <div>\n <div class=\"ax-flex ax-flex-col ax-gap-4 ax-justify-center ax-items-center ax-p-10\">\n <svg\n class=\"ax-mx-auto\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"154\"\n height=\"161\"\n viewBox=\"0 0 154 161\"\n fill=\"none\"\n >\n <path\n d=\"M0.0616455 84.4268C0.0616455 42.0213 34.435 7.83765 76.6507 7.83765C118.803 7.83765 153.224 42.0055 153.224 84.4268C153.224 102.42 147.026 118.974 136.622 132.034C122.282 150.138 100.367 161 76.6507 161C52.7759 161 30.9882 150.059 16.6633 132.034C6.25961 118.974 0.0616455 102.42 0.0616455 84.4268Z\"\n fill=\"#EEF2FF\"\n />\n <path\n d=\"M96.8189 0.632498L96.8189 0.632384L96.8083 0.630954C96.2034 0.549581 95.5931 0.5 94.9787 0.5H29.338C22.7112 0.5 17.3394 5.84455 17.3394 12.4473V142.715C17.3394 149.318 22.7112 154.662 29.338 154.662H123.948C130.591 154.662 135.946 149.317 135.946 142.715V38.9309C135.946 38.0244 135.847 37.1334 135.648 36.2586L135.648 36.2584C135.117 33.9309 133.874 31.7686 132.066 30.1333C132.066 30.1331 132.065 30.1329 132.065 30.1327L103.068 3.65203C103.068 3.6519 103.067 3.65177 103.067 3.65164C101.311 2.03526 99.1396 0.995552 96.8189 0.632498Z\"\n fill=\"white\"\n stroke=\"#E5E7EB\"\n />\n <ellipse cx=\"80.0618\" cy=\"81\" rx=\"28.0342\" ry=\"28.0342\" fill=\"#EEF2FF\" />\n <path\n d=\"M99.2393 61.3061L99.2391 61.3058C88.498 50.5808 71.1092 50.5804 60.3835 61.3061C49.6423 72.0316 49.6422 89.4361 60.3832 100.162C71.109 110.903 88.4982 110.903 99.2393 100.162C109.965 89.4363 109.965 72.0317 99.2393 61.3061ZM105.863 54.6832C120.249 69.0695 120.249 92.3985 105.863 106.785C91.4605 121.171 68.1468 121.171 53.7446 106.785C39.3582 92.3987 39.3582 69.0693 53.7446 54.683C68.1468 40.2965 91.4605 40.2966 105.863 54.6832Z\"\n stroke=\"#E5E7EB\"\n />\n <path\n d=\"M110.782 119.267L102.016 110.492C104.888 108.267 107.476 105.651 109.564 102.955L118.329 111.729L110.782 119.267Z\"\n stroke=\"#E5E7EB\"\n />\n <path\n d=\"M139.122 125.781L139.122 125.78L123.313 109.988C123.313 109.987 123.313 109.987 123.312 109.986C121.996 108.653 119.849 108.657 118.521 109.985L118.871 110.335L118.521 109.985L109.047 119.459C107.731 120.775 107.735 122.918 109.044 124.247L109.047 124.249L124.858 140.06C128.789 143.992 135.191 143.992 139.122 140.06C143.069 136.113 143.069 129.728 139.122 125.781Z\"\n fill=\"#A5B4FC\"\n stroke=\"#818CF8\"\n />\n <path\n d=\"M83.185 87.2285C82.5387 87.2285 82.0027 86.6926 82.0027 86.0305C82.0027 83.3821 77.9987 83.3821 77.9987 86.0305C77.9987 86.6926 77.4627 87.2285 76.8006 87.2285C76.1543 87.2285 75.6183 86.6926 75.6183 86.0305C75.6183 80.2294 84.3831 80.2451 84.3831 86.0305C84.3831 86.6926 83.8471 87.2285 83.185 87.2285Z\"\n fill=\"#4F46E5\"\n />\n <path\n d=\"M93.3528 77.0926H88.403C87.7409 77.0926 87.2049 76.5567 87.2049 75.8946C87.2049 75.2483 87.7409 74.7123 88.403 74.7123H93.3528C94.0149 74.7123 94.5509 75.2483 94.5509 75.8946C94.5509 76.5567 94.0149 77.0926 93.3528 77.0926Z\"\n fill=\"#4F46E5\"\n />\n <path\n d=\"M71.5987 77.0925H66.6488C65.9867 77.0925 65.4507 76.5565 65.4507 75.8945C65.4507 75.2481 65.9867 74.7122 66.6488 74.7122H71.5987C72.245 74.7122 72.781 75.2481 72.781 75.8945C72.781 76.5565 72.245 77.0925 71.5987 77.0925Z\"\n fill=\"#4F46E5\"\n />\n <rect x=\"38.3522\" y=\"21.5128\" width=\"41.0256\" height=\"2.73504\" rx=\"1.36752\" fill=\"#4F46E5\" />\n <rect x=\"38.3522\" y=\"133.65\" width=\"54.7009\" height=\"5.47009\" rx=\"2.73504\" fill=\"#A5B4FC\" />\n <rect x=\"38.3522\" y=\"29.7179\" width=\"13.6752\" height=\"2.73504\" rx=\"1.36752\" fill=\"#4F46E5\" />\n <circle cx=\"56.13\" cy=\"31.0854\" r=\"1.36752\" fill=\"#4F46E5\" />\n <circle cx=\"61.6001\" cy=\"31.0854\" r=\"1.36752\" fill=\"#4F46E5\" />\n <circle cx=\"67.0702\" cy=\"31.0854\" r=\"1.36752\" fill=\"#4F46E5\" />\n </svg>\n <div>\n <h2 class=\"ax-text-center ax-text-neutral-600 ax-font-semibold ax-leading-loose ax-pb-2\">\n There is no Comment!\n </h2>\n </div>\n </div>\n </div>\n }\n </ax-comment-container>\n <ax-form>\n <ax-form-field>\n <div>\n @if (isReplyingMode() || isEditingMode()) {\n <div\n class=\"ax-flex ax-justify-between ax-rounded-b-none ax-border ax-border-b-0 ax-rounded-lg ax-bg-on-surface ax-px-6 ax-py-3 ax-w-full ax-items-center ax-overflow-hidden ax-text-sm ax-leading-none\"\n >\n <div (click)=\"scrollMain()\" class=\"ax-flex ax-justify-start ax-items-center ax-cursor-pointer\">\n <i\n [class]=\"isReplyingMode() ? 'fa-reply' : 'fa-pen'\"\n class=\"fa-solid ax-text-primary-500 dark:ax-text-primary-300 ax-text-2xl ax-me-4\"\n ></i>\n <div\n class=\"ax-flex ax-flex-col ax-gap-2 ax-justify-between ax-align-middle ax-leading-4 ax-overflow-hidden\"\n >\n <p class=\"ax-text-primary-500 dark:ax-text-primary-300\">\n {{ isReplyingMode() ? 'Reply to ' : 'Edit Message' }}\n <span class=\"ax-font-bold\">\n {{ isReplyingMode() ? extractInitials(activeReplyComment()?.author) : '' }}\n </span>\n </p>\n <div\n class=\"ax-truncate\"\n [innerHTML]=\"\n isReplyingMode()\n ? sanitizeHtml(activeReplyComment()?.message?.content ?? '')\n : sanitizeHtml(activeEditComment()?.message?.content ?? '')\n \"\n ></div>\n </div>\n </div>\n <div><i (click)=\"resetReplyEditState()\" class=\"fa-solid ax-text-2xl fa-xmark ax-cursor-pointer\"></i></div>\n </div>\n }\n <ax-wysiwyg-container #w [look]=\"wysiwygOptions().look\" [(ngModel)]=\"commentContent\">\n <ax-wysiwyg-view class=\"ax-min-h-28\"></ax-wysiwyg-view>\n <ax-toolbar>\n <ax-content>\n <ax-wysiwyg-history></ax-wysiwyg-history>\n <ax-wysiwyg-font-style></ax-wysiwyg-font-style>\n <ax-wysiwyg-colors></ax-wysiwyg-colors>\n <ax-wysiwyg-list></ax-wysiwyg-list>\n <ax-wysiwyg-alignment></ax-wysiwyg-alignment>\n </ax-content>\n <ax-suffix>\n <ax-dropdown-button\n [disabled]=\"hasCooldown()\"\n type=\"submit\"\n color=\"primary\"\n mode=\"split\"\n text=\"Send\"\n (onClick)=\"submitComment()\"\n >\n @if (isSubmitting()) {\n <ax-loading></ax-loading>\n }\n <ax-button-item-list>\n <ax-button-item (click)=\"submitComment(true)\" text=\"Send Private ...\" name=\"private\" data=\"private\">\n <ax-prefix>\n <ax-icon icon=\"fa-regular fa-user-secret\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-button>\n </ax-suffix>\n </ax-toolbar>\n <ax-validation-rule rule=\"callback\" [options]=\"{ validate: validateContent }\"></ax-validation-rule>\n </ax-wysiwyg-container>\n </div>\n </ax-form-field>\n </ax-form>\n</div>\n","import { AXResizableDirective } from '@acorex/cdk/resizable';\nimport { AXAvatarModule } from '@acorex/components/avatar';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCommentModule } from '@acorex/components/comment';\nimport { AXConversationModule } from '@acorex/components/conversation';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXImageModule } from '@acorex/components/image';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXToolBarModule } from '@acorex/components/toolbar';\nimport { AXWysiwygModule } from '@acorex/components/wysiwyg';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport {\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutStartSideComponent,\n AXPThemeLayoutToolbarComponent,\n} from '@acorex/platform/layout/components';\nimport { AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';\nimport { AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { AXPRootLayoutComponent } from '@acorex/platform/themes/default';\nimport { CommonModule } from '@angular/common';\nimport { NgModule, importProvidersFrom } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule, Routes } from '@angular/router';\nimport { AXMRoomService } from './entities';\nimport { AXMMessageService, AXMMessageServiceImpl } from './entities/message/message.service';\nimport { AXMRoomServiceImpl } from './entities/room/room.service';\nimport { AXMConversationModuleEntityProvider } from './entity.provider';\nimport {\n AXMChatComponent,\n AXMChatItemComponent,\n AXMChatPreviewComponent,\n AXMChatService,\n AXMChatServiceImpl,\n AXMCommentListViewComponent,\n AXMCommentService,\n AXMCommentServiceImpl,\n} from './features';\n\nconst routes: Routes = [\n {\n path: 'platform',\n component: AXPRootLayoutComponent,\n children: [\n {\n path: 'chat',\n component: AXMChatComponent,\n children: [\n {\n path: ':id',\n component: AXMChatPreviewComponent,\n },\n ],\n },\n {\n path: 'comments',\n component: AXMCommentListViewComponent,\n },\n ],\n },\n];\n\n@NgModule({\n declarations: [\n // Chat Components\n AXMChatComponent,\n AXMChatItemComponent,\n AXMChatPreviewComponent,\n // Comment Components\n AXMCommentListViewComponent,\n // Layout Components\n ],\n imports: [\n // Common Modules\n CommonModule,\n FormsModule,\n RouterModule.forChild(routes),\n // Acorex Core Modules\n AXFormatModule,\n AXConversationModule,\n AXCommentModule,\n AXTranslationModule,\n // Acorex Component Modules\n AXResizableDirective,\n AXImageModule,\n AXAvatarModule,\n AXBadgeModule,\n AXDecoratorModule,\n AXTextBoxModule,\n AXSearchBoxModule,\n AXTabsModule,\n AXButtonModule,\n AXLoadingModule,\n AXWysiwygModule,\n AXLabelModule,\n AXSelectBoxModule,\n AXFormModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXToolBarModule,\n AXSkeletonModule,\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutStartSideComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutToolbarComponent,\n ],\n exports: [\n // Chat Components\n AXMChatItemComponent,\n AXMChatPreviewComponent,\n // Comment Components\n AXMCommentListViewComponent,\n // Modules\n RouterModule,\n ],\n providers: [\n // Services\n {\n provide: AXMMessageService,\n useClass: AXMMessageServiceImpl,\n },\n {\n provide: AXMRoomService,\n useClass: AXMRoomServiceImpl,\n },\n // Chat and Comment Services\n {\n provide: AXMChatService,\n useClass: AXMChatServiceImpl,\n },\n {\n provide: AXMCommentService,\n useClass: AXMCommentServiceImpl,\n },\n // Entity Provider\n {\n provide: AXP_ENTITY_DEFINITION_LOADER,\n useClass: AXMConversationModuleEntityProvider,\n multi: true,\n },\n // Menu Provider\n // {\n // provide: AXP_MENU_PROVIDER,\n // useClass: AXMConversationMenuProvider,\n // multi: true,\n // },\n // Conversation Module\n importProvidersFrom(AXConversationModule.forRoot()),\n ],\n})\nexport class AXMConversationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i4","i5","i1","i2","i3","i8","i9","i12.AXMChatItemComponent","i6","i7","i10","i11"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-modules-conversation.mjs","sources":["../../../../libs/modules/conversation/src/lib/const.ts","../../../../libs/modules/conversation/src/lib/entities/message/message.service.ts","../../../../libs/modules/conversation/src/lib/entities/message/message.entity.ts","../../../../libs/modules/conversation/src/lib/entities/message/message.types.ts","../../../../libs/modules/conversation/src/lib/entities/room/room.service.ts","../../../../libs/modules/conversation/src/lib/entities/room/room.entity.ts","../../../../libs/modules/conversation/src/lib/entity.provider.ts","../../../../libs/modules/conversation/src/lib/features/chat/chat.service.ts","../../../../libs/modules/conversation/src/lib/features/chat/components/chat-item/chat-item.component.ts","../../../../libs/modules/conversation/src/lib/features/chat/components/chat-item/chat-item.component.html","../../../../libs/modules/conversation/src/lib/features/chat/chat.component.ts","../../../../libs/modules/conversation/src/lib/features/chat/chat.component.html","../../../../libs/modules/conversation/src/lib/features/chat/chat-preview.helper.ts","../../../../libs/modules/conversation/src/lib/features/chat/components/chat-preview/chat-preview.component.ts","../../../../libs/modules/conversation/src/lib/features/chat/components/chat-preview/chat-preview.component.html","../../../../libs/modules/conversation/src/lib/features/comment/comment.service.ts","../../../../libs/modules/conversation/src/lib/features/comment/comment-lookup-popup.component.ts","../../../../libs/modules/conversation/src/lib/features/comment/comment-list-view.component.ts","../../../../libs/modules/conversation/src/lib/features/comment/comment-list-view.component.html","../../../../libs/modules/conversation/src/lib/features/widget/share/comment/comment-widget-view.component.ts","../../../../libs/modules/conversation/src/lib/features/widget/share/comment/comment-widget-view.component.html","../../../../libs/modules/conversation/src/lib/features/widget/share/comment/comment-widget.config.ts","../../../../libs/modules/conversation/src/lib/conversation.module.ts","../../../../libs/modules/conversation/src/acorex-modules-conversation.ts"],"sourcesContent":["const config = {\n i18n: 'conversation',\n module: 'Conversation',\n};\n\nexport const RootConfig = {\n config,\n module: {\n route: 'conversation',\n name: config.module,\n title: `t('module-name', {scope:\"${config.i18n}\"})`,\n icon: 'fa-light fa-comments',\n },\n entities: {\n room: {\n name: 'room',\n title: `t(\"room.plural-title\", { scope: \"${config.i18n}\" })`,\n source: `${config.module}.Room`,\n icon: 'fa-light fa-comments',\n },\n message: {\n name: 'message',\n title: `t(\"message.plural-title\", { scope: \"${config.i18n}\" })`,\n source: `${config.module}.Message`,\n icon: 'fa-light fa-message',\n },\n },\n};\n","import { AXMEntityCrudServiceImpl } from '@acorex/platform/layout/entity';\nimport { Injectable } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport { AXMConversationMessage } from './message.types';\n\nexport abstract class AXMMessageService extends AXMEntityCrudServiceImpl<string, AXMConversationMessage> {}\n\n@Injectable()\nexport class AXMMessageServiceImpl extends AXMMessageService {\n constructor() {\n super(`${RootConfig.module.name}.${RootConfig.entities.message.name}`);\n }\n}\n","import { AXPEntity, AXPEntityCommandScope, AXPEntityQueryType, createAllQueryView } from '@acorex/platform/common';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/builder';\nimport { Injector } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport { AXMMessageService } from './message.service';\n\nexport async function messageFactory(injector: Injector): Promise<AXPEntity | null> {\n const dataService = injector.get(AXMMessageService);\n const i18n = RootConfig.config.i18n;\n\n const entityDef: AXPEntity = {\n module: RootConfig.module.name,\n name: RootConfig.entities.message.name,\n source: '',\n title: RootConfig.entities.message.title,\n formats: {\n individual: RootConfig.entities.message.title,\n plural: RootConfig.entities.message.title,\n searchResult: {\n title: '{{ title }}',\n description: RootConfig.module.title,\n },\n },\n relatedEntities: [],\n groups: [\n {\n id: 'section',\n title: RootConfig.entities.message.title,\n },\n ],\n properties: [\n {\n name: 'name',\n title: `t(\"name\", { scope: \"common\" })`,\n groupId: 'section',\n options: {\n sort: {\n enabled: true,\n },\n filter: {\n advance: {\n enabled: true,\n },\n inline: {\n enabled: false,\n },\n },\n },\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n\n {\n name: 'title',\n title: `t(\"title\", { scope: \"common\" })`,\n groupId: 'section',\n options: {\n sort: {\n enabled: true,\n },\n filter: {\n advance: {\n enabled: true,\n },\n inline: {\n enabled: false,\n },\n },\n },\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n ],\n columns: [{ name: 'name' }, { name: 'title' }],\n commands: {\n create: {\n execute: async (data: any) => {\n const res = await dataService.insertOne(data);\n return { id: res };\n },\n },\n delete: {\n execute: async (id: any) => {\n return await dataService.deleteOne(id);\n },\n },\n update: {\n execute: async (data: any) => {\n return await dataService.updateOne(data.id, data);\n },\n },\n },\n queries: {\n byKey: {\n execute: async (id: string) => {\n return await dataService.getOne(id);\n },\n type: AXPEntityQueryType.Single,\n },\n list: {\n execute: async (e: any) => {\n return await dataService.query({ skip: e.skip, take: e.take, filter: e.filter });\n },\n type: AXPEntityQueryType.List,\n },\n },\n interfaces: {\n master: {\n create: {\n sections: [\n {\n id: 'section',\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n },\n update: {\n sections: [\n {\n id: 'section',\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n },\n single: {\n title: '{{title}}',\n sections: [\n {\n id: 'section',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n },\n },\n },\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n actions: [],\n },\n list: {\n actions: [\n {\n title: `t(\"create\", { scope: \"common\" })`,\n command: 'create-entity',\n priority: 'primary',\n type: 'create',\n scope: AXPEntityCommandScope.TypeLevel,\n },\n {\n title: 't(\"deleteItems\", { scope: \"common\" })',\n command: 'delete-entity',\n priority: 'primary',\n type: 'delete',\n scope: AXPEntityCommandScope.Selected,\n },\n {\n title: 't(\"detail\", { scope: \"common\" })',\n command: 'open-entity',\n priority: 'secondary',\n type: 'view',\n scope: AXPEntityCommandScope.Individual,\n },\n {\n title: 't(\"delete\", { scope: \"common\" })',\n command: 'delete-entity',\n priority: 'secondary',\n type: 'delete',\n scope: AXPEntityCommandScope.Individual,\n },\n ],\n views: [\n createAllQueryView({\n sorts: [{ name: 'name', dir: 'asc' }],\n }),\n ],\n },\n },\n },\n };\n\n return entityDef;\n}\n","// === Shared Types ===\n\nimport { AXPContent, AXPUserReference } from '@acorex/platform/core';\nimport { AXPEntityModel } from '@acorex/platform/layout/entity';\n\nexport type AXMSeenType = 'delivered' | 'read';\nexport type AXMReactionType = 'like' | 'love' | 'laugh' | 'angry' | 'sad' | string;\n\nexport interface AXMConversationReaction {\n author: AXPUserReference;\n type: AXMReactionType;\n}\n\nexport interface AXMConversationSeen {\n author: AXPUserReference;\n type: AXMSeenType;\n}\n\n// === Core Models ===\n\nexport interface AXMConversationMessage extends AXPEntityModel<string> {\n roomId: string;\n message: AXPContent;\n author: AXPUserReference;\n replyId?: string | null;\n reactions?: AXMConversationReaction[];\n seen?: AXMConversationSeen[];\n}\n","import { AXMEntityCrudServiceImpl } from '@acorex/platform/layout/entity';\nimport { Injectable } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport { AXMConversationRoom } from './room.types';\n\nexport abstract class AXMRoomService extends AXMEntityCrudServiceImpl<string, AXMConversationRoom> {}\n\n@Injectable()\nexport class AXMRoomServiceImpl extends AXMRoomService {\n constructor() {\n super(`${RootConfig.module.name}.${RootConfig.entities.room.name}`);\n }\n}\n","import { AXPEntity, AXPEntityCommandScope, AXPEntityQueryType, createAllQueryView } from '@acorex/platform/common';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/builder';\nimport { Injector } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport { AXMRoomService } from './room.service';\n\nexport async function roomFactory(injector: Injector): Promise<AXPEntity | null> {\n const dataService = injector.get(AXMRoomService);\n const i18n = RootConfig.config.i18n;\n\n const entityDef: AXPEntity = {\n module: RootConfig.module.name,\n name: RootConfig.entities.room.name,\n source: '',\n title: RootConfig.entities.room.title,\n formats: {\n individual: RootConfig.entities.room.title,\n plural: RootConfig.entities.room.title,\n searchResult: {\n title: '{{ title }}',\n description: RootConfig.module.title,\n },\n },\n relatedEntities: [],\n groups: [\n {\n id: 'section',\n title: RootConfig.entities.room.title,\n },\n ],\n properties: [\n {\n name: 'name',\n title: `t(\"name\", { scope: \"common\" })`,\n groupId: 'section',\n options: {\n sort: {\n enabled: true,\n },\n filter: {\n advance: {\n enabled: true,\n },\n inline: {\n enabled: false,\n },\n },\n },\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n\n {\n name: 'title',\n title: `t(\"title\", { scope: \"common\" })`,\n groupId: 'section',\n options: {\n sort: {\n enabled: true,\n },\n filter: {\n advance: {\n enabled: true,\n },\n inline: {\n enabled: false,\n },\n },\n },\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n ],\n columns: [{ name: 'name' }, { name: 'title' }],\n commands: {\n create: {\n execute: async (data: any) => {\n const res = await dataService.insertOne(data);\n return { id: res };\n },\n },\n delete: {\n execute: async (id: any) => {\n return await dataService.deleteOne(id);\n },\n },\n update: {\n execute: async (data: any) => {\n return await dataService.updateOne(data.id, data);\n },\n },\n },\n queries: {\n byKey: {\n execute: async (id: string) => {\n return await dataService.getOne(id);\n },\n type: AXPEntityQueryType.Single,\n },\n list: {\n execute: async (e: any) => {\n return await dataService.query({ skip: e.skip, take: e.take, filter: e.filter });\n },\n type: AXPEntityQueryType.List,\n },\n },\n interfaces: {\n master: {\n create: {\n sections: [\n {\n id: 'section',\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n },\n update: {\n sections: [\n {\n id: 'section',\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n },\n single: {\n title: '{{title}}',\n sections: [\n {\n id: 'section',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n },\n },\n },\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n actions: [],\n },\n list: {\n actions: [\n {\n title: `t(\"create\", { scope: \"common\" })`,\n command: 'create-entity',\n priority: 'primary',\n type: 'create',\n scope: AXPEntityCommandScope.TypeLevel,\n },\n {\n title: 't(\"deleteItems\", { scope: \"common\" })',\n command: 'delete-entity',\n priority: 'primary',\n type: 'delete',\n scope: AXPEntityCommandScope.Selected,\n },\n {\n title: 't(\"detail\", { scope: \"common\" })',\n command: 'open-entity',\n priority: 'secondary',\n type: 'view',\n scope: AXPEntityCommandScope.Individual,\n },\n {\n title: 't(\"delete\", { scope: \"common\" })',\n command: 'delete-entity',\n priority: 'secondary',\n type: 'delete',\n scope: AXPEntityCommandScope.Individual,\n },\n ],\n views: [\n createAllQueryView({\n sorts: [{ name: 'name', dir: 'asc' }],\n }),\n ],\n },\n },\n },\n };\n\n return entityDef;\n}\n","import { AXPEntity } from '@acorex/platform/common';\nimport { AXPEntityDefinitionLoader, AXPEntityPreloadEntity } from '@acorex/platform/layout/entity';\nimport { Injectable, Injector } from '@angular/core';\nimport { RootConfig } from './const';\nimport { messageFactory, roomFactory } from './entities';\n\n@Injectable()\nexport class AXMConversationModuleEntityProvider implements AXPEntityDefinitionLoader {\n constructor(private injector: Injector) {}\n\n public preload(): AXPEntityPreloadEntity[] {\n const module = RootConfig.module.name;\n return Array.from(Object.values(RootConfig.entities)).map((entity: any) => ({\n module: module,\n entity: entity.name,\n }));\n }\n\n public async get(moduleName: string, entityName: string): Promise<AXPEntity | null> {\n switch (entityName) {\n case 'room':\n return roomFactory(this.injector);\n case 'message':\n return messageFactory(this.injector);\n default:\n return null;\n }\n }\n}\n","import { AXMUsersEntityService } from '@acorex/modules/security-management';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPContent, AXPContentType, AXPUserReference } from '@acorex/platform/core';\nimport { inject, Injectable } from '@angular/core';\nimport { AXMMessageService } from '../../entities/message/message.service';\nimport {\n AXMConversationMessage,\n AXMConversationReaction,\n AXMConversationSeen,\n AXMReactionType,\n AXMSeenType,\n} from '../../entities/message/message.types';\nimport { AXMRoomService } from '../../entities/room/room.service';\nimport { AXMConversationRoom } from '../../entities/room/room.types';\nimport { AXMChatMember, AXMChatMessage, AXMChatRoom } from './chat.type';\n\n/**\n * Abstract Chat Service defining the contract for chat functionality\n */\nexport abstract class AXMChatService {\n /**\n * Get all chat rooms available to the current user\n */\n abstract getAllChatRooms(skip?: number, take?: number): Promise<{ items: AXMChatRoom[]; total: number }>;\n\n /**\n * Get details of a specific chat room\n */\n abstract getChatRoom(roomId: string): Promise<AXMChatRoom>;\n\n /**\n * Get messages for a specific chat room\n */\n abstract getChatMessages(\n roomId: string,\n skip?: number,\n take?: number,\n ): Promise<{ items: AXMChatMessage[]; total: number }>;\n\n /**\n * Send a message to a chat room\n */\n abstract sendMessage(\n roomId: string,\n content: string,\n contentType?: AXPContentType,\n replyId?: string,\n ): Promise<AXMConversationMessage>;\n\n /**\n * Mark all messages in a chat room as read\n */\n abstract markChatAsRead(roomId: string): Promise<boolean>;\n\n /**\n * Edit an existing message\n */\n abstract editMessage(\n messageId: string,\n content: string,\n contentType?: AXPContentType,\n ): Promise<AXMConversationMessage>;\n\n /**\n * Delete a message\n */\n abstract deleteMessage(messageId: string): Promise<boolean>;\n\n /**\n * Create a new conversation with specified members\n */\n abstract createNewConversation(memberIds: string[]): Promise<AXMChatRoom>;\n\n /**\n * Add a reaction to a message\n */\n abstract addReaction(messageId: string, type: AXMReactionType): Promise<AXMConversationMessage>;\n\n /**\n * Remove a reaction from a message\n */\n abstract removeReaction(messageId: string, type: AXMReactionType): Promise<AXMConversationMessage>;\n\n /**\n * Add a member to a chat room\n */\n abstract addRoomMember(roomId: string, userId: string): Promise<AXMConversationRoom>;\n\n /**\n * Remove a member from a chat room\n */\n abstract removeRoomMember(roomId: string, memberId: string): Promise<AXMConversationRoom>;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXMChatServiceImpl implements AXMChatService {\n private readonly roomService = inject(AXMRoomService);\n private readonly messageService = inject(AXMMessageService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly usersService = inject(AXMUsersEntityService);\n\n // === Helper Methods ===\n\n private getCurrentUser(): AXPUserReference {\n const user = this.sessionService.user;\n return {\n id: user?.id || 'guest-user',\n type: 'user',\n };\n }\n\n private async getUserInfo(userId: string): Promise<AXPUserReference> {\n try {\n const user = await this.usersService.getOne(userId);\n return {\n id: user.id,\n type: 'user',\n };\n } catch (error) {\n console.error(`Failed to get user info for ID: ${userId}`, error);\n return {\n id: userId,\n type: 'user',\n };\n }\n }\n\n private formatMessage(message: AXMConversationMessage): AXMChatMessage {\n const currentUserId = this.getCurrentUser().id;\n\n return {\n ...message,\n isFromCurrentUser: message.author.id === currentUserId,\n formattedDate: new Date(message.createdAt || new Date()).toLocaleString(),\n hasSeen: (message.seen || []).length > 0,\n };\n }\n\n private async formatMember(userRef: AXPUserReference): Promise<AXMChatMember> {\n try {\n const user = await this.usersService.getOne(userRef.id);\n\n return {\n id: user.id,\n firstName: user.firstName || '',\n lastName: user.lastName || '',\n fullName: `${user.firstName || ''} ${user.lastName || ''}`.trim(),\n avatar: '', // Default empty string since avatar doesn't exist in the model\n isOnline: Math.random() > 0.5, // Mockup for demo\n };\n } catch (error) {\n console.error(`Failed to format member for ID: ${userRef.id}`, error);\n return {\n id: userRef.id,\n firstName: 'Unknown',\n lastName: 'User',\n fullName: 'Unknown User',\n avatar: '',\n isOnline: false,\n };\n }\n }\n\n // === Room Operations ===\n\n async getRoomList(skip = 0, take = 100) {\n return this.roomService.query({ skip, take });\n }\n\n async getRoomDetails(roomId: string) {\n return this.roomService.getOne(roomId);\n }\n\n async createRoom(roomData: Omit<AXMConversationRoom, 'id'>): Promise<string> {\n return this.roomService.insertOne(roomData);\n }\n\n async addRoomMember(roomId: string, userId: string) {\n const room = await this.getRoomDetails(roomId);\n const userRef = await this.getUserInfo(userId);\n const updatedMembers = [...room.members, userRef];\n return this.roomService.updateOne(roomId, { members: updatedMembers });\n }\n\n async removeRoomMember(roomId: string, memberId: string) {\n const room = await this.getRoomDetails(roomId);\n const updatedMembers = room.members.filter((member) => member.id !== memberId);\n return this.roomService.updateOne(roomId, { members: updatedMembers });\n }\n\n async deleteRoom(roomId: string) {\n return this.roomService.deleteOne(roomId);\n }\n\n // === Message Operations ===\n\n async listMessages(roomId: string, skip = 0, take = 100) {\n return this.messageService.query({\n skip,\n take,\n filter: {\n field: 'roomId',\n value: roomId,\n operator: { type: 'equal' },\n },\n });\n }\n\n async sendMessage(roomId: string, content: string, contentType: AXPContentType = 'text', replyId?: string) {\n const author = this.getCurrentUser();\n\n const messageContent: AXPContent = {\n content,\n contentType,\n };\n\n const message: Omit<AXMConversationMessage, 'id'> = {\n roomId,\n message: messageContent,\n author,\n replyId,\n };\n\n const messageId = await this.messageService.insertOne(message);\n return this.messageService.getOne(messageId);\n }\n\n async editMessage(messageId: string, content: string, contentType: AXPContentType = 'text') {\n const messageContent: AXPContent = {\n content,\n contentType,\n };\n\n return this.messageService.updateOne(messageId, { message: messageContent });\n }\n\n async deleteMessage(messageId: string): Promise<boolean> {\n try {\n await this.messageService.deleteOne(messageId);\n return true;\n } catch (error) {\n console.error('Failed to delete message:', error);\n return false;\n }\n }\n\n async markAsSeen(messageId: string) {\n const author = this.getCurrentUser();\n const message = await this.messageService.getOne(messageId);\n\n // Check if this user has already seen the message\n const alreadySeen = (message.seen || []).some((seen) => seen.author.id === author.id);\n if (alreadySeen) {\n return message;\n }\n\n const seen = message.seen || [];\n const updatedSeen: AXMConversationSeen[] = [...seen, { author, type: 'read' as AXMSeenType }];\n return this.messageService.updateOne(messageId, { seen: updatedSeen });\n }\n\n async addReaction(messageId: string, type: AXMReactionType) {\n const author = this.getCurrentUser();\n const message = await this.messageService.getOne(messageId);\n\n // Check if this user has already added this reaction\n const existingReaction = (message.reactions || []).find(\n (reaction) => reaction.author.id === author.id && reaction.type === type,\n );\n\n if (existingReaction) {\n // If the reaction already exists, remove it (toggle behavior)\n return this.removeReaction(messageId, type);\n }\n\n const reactions = message.reactions || [];\n const updatedReactions: AXMConversationReaction[] = [...reactions, { author, type }];\n return this.messageService.updateOne(messageId, { reactions: updatedReactions });\n }\n\n async removeReaction(messageId: string, type: AXMReactionType) {\n const author = this.getCurrentUser();\n const message = await this.messageService.getOne(messageId);\n\n const reactions = message.reactions || [];\n const updatedReactions = reactions.filter(\n (reaction) => !(reaction.author.id === author.id && reaction.type === type),\n );\n\n return this.messageService.updateOne(messageId, { reactions: updatedReactions });\n }\n\n // === UI-specific Operations ===\n\n async markChatAsRead(roomId: string): Promise<boolean> {\n try {\n // Get all unread messages for this room\n const messages = await this.listMessages(roomId);\n const currentUserId = this.getCurrentUser().id;\n\n // Mark each unread message as seen\n const markPromises = messages.items\n .filter((message) => {\n // Only mark messages that are not from the current user and not already seen by them\n const isFromCurrentUser = message.author.id === currentUserId;\n const isAlreadySeen = (message.seen || []).some((seen) => seen.author.id === currentUserId);\n return !isFromCurrentUser && !isAlreadySeen;\n })\n .map((message) => this.markAsSeen(message.id));\n\n await Promise.all(markPromises);\n return true;\n } catch (error) {\n console.error('Failed to mark chat as read:', error);\n return false;\n }\n }\n\n async getUnreadCount(roomId: string): Promise<number> {\n const messages = await this.listMessages(roomId);\n const currentUserId = this.getCurrentUser().id;\n\n return messages.items.filter((message) => {\n // Count messages that are not from the current user and not already seen by them\n const isFromCurrentUser = message.author.id === currentUserId;\n const isAlreadySeen = (message.seen || []).some((seen) => seen.author.id === currentUserId);\n return !isFromCurrentUser && !isAlreadySeen;\n }).length;\n }\n\n async getChatRoom(roomId: string): Promise<AXMChatRoom> {\n const room = await this.getRoomDetails(roomId);\n const messages = await this.listMessages(roomId, 0, 1);\n const lastMessage = messages.items.length > 0 ? this.formatMessage(messages.items[0]) : undefined;\n const unreadCount = await this.getUnreadCount(roomId);\n\n const roomMembers = await Promise.all(room.members.map((member) => this.formatMember(member)));\n\n return {\n ...room,\n lastMessage,\n unreadCount,\n roomMembers,\n };\n }\n\n async getAllChatRooms(skip = 0, take = 100): Promise<{ items: AXMChatRoom[]; total: number }> {\n const rooms = await this.getRoomList(skip, take);\n\n const chatRooms = await Promise.all(\n rooms.items.map(async (room) => {\n const messages = await this.listMessages(room.id, 0, 1);\n const lastMessage = messages.items.length > 0 ? this.formatMessage(messages.items[0]) : undefined;\n const unreadCount = await this.getUnreadCount(room.id);\n\n const roomMembers = await Promise.all(room.members.map((member) => this.formatMember(member)));\n\n return {\n ...room,\n lastMessage,\n unreadCount,\n roomMembers,\n };\n }),\n );\n\n return {\n items: chatRooms,\n total: rooms.total,\n };\n }\n\n async getChatMessages(roomId: string, skip = 0, take = 20): Promise<{ items: AXMChatMessage[]; total: number }> {\n const result = await this.listMessages(roomId, skip, take);\n\n const formattedMessages = result.items.map((message) => this.formatMessage(message));\n\n return {\n items: formattedMessages,\n total: result.total,\n };\n }\n\n async createNewConversation(memberIds: string[]): Promise<AXMChatRoom> {\n // Add current user if not already included\n const currentUser = this.getCurrentUser();\n const hasCurrentUser = memberIds.includes(currentUser.id);\n\n const allMemberIds = hasCurrentUser ? memberIds : [...memberIds, currentUser.id];\n\n try {\n // Get user info for all members\n const memberReferences = await Promise.all(allMemberIds.map((id) => this.getUserInfo(id)));\n\n // Get user names for title\n const userNames = await Promise.all(\n memberReferences.map(async (ref) => {\n try {\n const user = await this.usersService.getOne(ref.id);\n return `${user.firstName} ${user.lastName}`.trim();\n } catch (error) {\n return ref.id;\n }\n }),\n );\n\n // Create a new room - this returns just the ID as a string\n const roomId = await this.createRoom({\n members: memberReferences,\n title: userNames.join(', '),\n });\n\n // Get the full room data with the ID\n return this.getChatRoom(roomId);\n } catch (error) {\n console.error('Failed to create conversation:', error);\n throw error;\n }\n }\n}\n","import { AXPSessionService } from '@acorex/platform/auth';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, output } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AXMChatRoom } from '../../chat.type';\n\n@Component({\n selector: 'axm-chat-item',\n templateUrl: './chat-item.component.html',\n styleUrls: ['./chat-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class AXMChatItemComponent {\n // Input\n data = input.required<AXMChatRoom>();\n\n // Output\n pressChatItem = output<string>();\n\n // Services\n private sessionService = inject(AXPSessionService);\n private router = inject(Router);\n private activatedRoute = inject(ActivatedRoute);\n\n // Computed values\n protected fullName = computed(() => {\n const member = this.data().roomMembers?.[0];\n return member ? member.fullName : 'Unknown User';\n });\n\n protected lastMessage = computed(() => {\n return this.data().lastMessage?.message?.content || 'No messages yet';\n });\n\n protected lastMessageDate = computed(() => {\n const message = this.data().lastMessage;\n if (!message) return '';\n\n return message.formattedDate || '';\n });\n\n protected hasUnread = computed(() => {\n return this.data().unreadCount > 0;\n });\n\n protected unreadCount = computed(() => {\n return this.data().unreadCount.toString();\n });\n\n protected isOnline = computed(() => {\n const member = this.data().roomMembers?.[0];\n return member?.isOnline || false;\n });\n\n protected myId = this.sessionService.user?.id;\n\n // Methods\n protected extractInitials(name: string): string {\n if (!name) return '?';\n const words = name.split(' ');\n const initials = words.map((word) => word.charAt(0).toUpperCase());\n return initials.join('');\n }\n\n protected onPressChatItem(id: string) {\n this.pressChatItem.emit(id);\n }\n\n protected messageSeenStatus(): string {\n const lastMessage = this.data().lastMessage;\n if (!lastMessage) return '';\n\n // Check if current user is the author\n if (this.myId === lastMessage.author?.id) {\n // Check if message has been seen by anyone\n return lastMessage.hasSeen ? 'ax-icon-dobble-check' : 'ax-icon-check';\n }\n\n return '';\n }\n}\n","<div\n [id]=\"data().id\"\n class=\"ax-cursor-pointer ax-p-4 ax-flex ax-items-center ax-justify-between ax-gap-4 ax-transition-all ax-duration-200 hover:ax-bg-surface-hover ax-rounded-lg ax-border-b ax-border-divider\"\n (click)=\"onPressChatItem(data().id)\"\n>\n <!-- Avatar and User Info Section -->\n <div class=\"ax-flex ax-min-w-0 ax-gap-4 ax-flex-1\">\n <!-- Avatar with Online Status -->\n <div class=\"ax-flex-shrink-0\">\n <ax-avatar class=\"ax-relative\" color=\"primary\" shape=\"rounded\" [size]=\"48\">\n @if (data().roomMembers && data().roomMembers.length > 0 && data().roomMembers[0].avatar) {\n <ax-image [src]=\"data().roomMembers[0].avatar\" class=\"ax-rounded-lg\">\n <ax-loading></ax-loading>\n </ax-image>\n } @else {\n <ax-text>\n <span class=\"ax-text-base ax-font-medium\">{{ extractInitials(fullName()) }}</span>\n </ax-text>\n }\n\n <!-- Online Status Indicator -->\n @if (isOnline()) {\n <ax-badge class=\"ax-absolute ax-bottom-1 ax-end-1 !ax-size-3 !ax-border-2 !ax-border-surface\" color=\"success\">\n </ax-badge>\n }\n </ax-avatar>\n </div>\n\n <!-- User Details and Last Message -->\n <div class=\"ax-flex ax-flex-col ax-min-w-0 ax-flex-1\">\n <div class=\"ax-flex ax-items-center ax-justify-between ax-gap-2\">\n <p class=\"ax-font-semibold ax-text-on-surface ax-truncate\">{{ fullName() }}</p>\n <div class=\"ax-flex ax-items-center ax-gap-1\">\n @if (messageSeenStatus()) {\n <ax-icon class=\"ax-icon ax-text-success ax-size-5\" [class]=\"messageSeenStatus()\"></ax-icon>\n }\n @if (lastMessageDate()) {\n <span class=\"ax-text-xs ax-text-on-surface-variant ax-whitespace-nowrap\">\n {{ lastMessageDate() }}\n </span>\n }\n </div>\n </div>\n <div class=\"ax-flex ax-items-center ax-gap-2 ax-mt-1\">\n <p class=\"ax-text-sm ax-text-on-surface-variant ax-truncate\">\n {{ lastMessage() }}\n </p>\n @if (hasUnread()) {\n <ax-badge color=\"primary\" [text]=\"unreadCount()\" class=\"ax-flex-shrink-0 ax-ml-auto\"></ax-badge>\n }\n </div>\n </div>\n </div>\n</div>\n","import { AXTabsComponent } from '@acorex/components/tabs';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n OnInit,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AXMChatService } from './chat.service';\nimport { AXMChatRoom } from './chat.type';\n\n@Component({\n selector: 'axm-chat',\n templateUrl: './chat.component.html',\n styleUrls: ['./chat.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class AXMChatComponent implements OnInit {\n private route = inject(ActivatedRoute);\n private router = inject(Router);\n private chatService = inject(AXMChatService);\n\n // View Children\n tab = viewChild<AXTabsComponent>('tab');\n\n // State signals\n rooms = signal<AXMChatRoom[]>([]);\n allRooms = signal<AXMChatRoom[]>([]);\n selectedRoom = signal<AXMChatRoom | null>(null);\n isLoading = signal<boolean>(false);\n error = signal<string | null>(null);\n activeTab = signal<number>(0);\n isSearching = signal<boolean>(false);\n searchQuery = signal<string>('');\n showSearch = signal<boolean>(true);\n placeholder = signal<string>('Search chats...');\n\n // Computed signals\n filteredRooms = computed(() => {\n let chatRooms = this.rooms();\n\n // Apply search filter\n if (this.searchQuery()) {\n const searchText = this.searchQuery().toLowerCase();\n chatRooms = chatRooms.filter((room) => {\n const roomName = room.roomMembers?.[0]?.fullName || '';\n const lastMessage = room.lastMessage?.message?.content || '';\n return roomName.toLowerCase().includes(searchText) || lastMessage.toLowerCase().includes(searchText);\n });\n }\n\n // Apply tab filter\n if (this.activeTab() === 1) {\n return chatRooms.filter((room) => room.unreadCount > 0);\n }\n\n return chatRooms;\n });\n\n unreadCount = computed(() => this.allRooms().filter((i) => i.unreadCount > 0).length);\n allCount = computed(() => this.allRooms().length);\n hasUnread = computed(() => this.allRooms().filter((i) => i.unreadCount > 0).length > 0);\n totalCount = computed(() => this.allRooms().length || 0);\n\n constructor() {\n afterNextRender(() => {\n const tabComponent = this.tab();\n if (tabComponent) {\n tabComponent.onActiveTabChanged.subscribe((i) => {\n this.activeTab.set(i.index);\n });\n }\n });\n }\n\n async ngOnInit(): Promise<void> {\n await this.loadChats();\n }\n\n // Page Interface Implementation\n getPageTitle(): string {\n return this.selectedRoom()\n ? this.selectedRoom()?.roomMembers?.[0]?.fullName || 'Unknown User'\n : 'Select A Chat First';\n }\n\n getPageDescription(): string {\n return this.selectedRoom() ? this.selectedRoom()?.title || '' : '';\n }\n\n getMenuItems(): any[] {\n return [];\n }\n\n // Methods\n async loadChats(): Promise<void> {\n try {\n this.isLoading.set(true);\n this.error.set(null);\n\n // Use the updated service method to get rooms with last messages\n const response = await this.chatService.getAllChatRooms();\n\n this.allRooms.set(response.items);\n this.rooms.set(response.items);\n this.isLoading.set(false);\n } catch (error) {\n this.error.set('Failed to load chats. Please try again.');\n this.isLoading.set(false);\n console.error('Error loading chats:', error);\n }\n }\n\n async refreshChat(): Promise<void> {\n await this.loadChats();\n }\n\n async markChatAsRead(chatId: string): Promise<void> {\n try {\n // Use the service method to mark chat as read\n await this.chatService.markChatAsRead(chatId);\n\n // Update local state without making another network request\n const currentRooms = this.allRooms();\n const updatedRooms = currentRooms.map((room) => {\n if (room.id === chatId) {\n // Reset unread count for the selected room\n return { ...room, unreadCount: 0 };\n }\n return room;\n });\n\n // Update the rooms signals\n this.allRooms.set(updatedRooms);\n this.rooms.set(updatedRooms);\n\n // Find the selected room\n const selectedRoom = updatedRooms.find((room) => room.id === chatId) || null;\n this.selectedRoom.set(selectedRoom);\n\n // Navigate to the chat details\n this.router.navigate([chatId], { relativeTo: this.route });\n } catch (error) {\n console.error('Failed to mark chat as read:', error);\n }\n }\n\n searchChat(query: string) {\n this.searchQuery.set(query);\n this.isSearching.set(!!query);\n }\n\n goBack() {\n this.selectedRoom.set(null);\n this.router.navigate(['./'], { relativeTo: this.route });\n }\n\n // Header methods\n onSearch(query: string) {\n this.searchChat(query);\n }\n\n clearSearch() {\n this.searchQuery.set('');\n this.isSearching.set(false);\n }\n\n // Footer methods\n onNewConversation() {\n // TODO: Implement new conversation logic\n console.log('New conversation clicked');\n }\n\n // Preview header methods\n emitBack() {\n this.goBack();\n }\n\n ngOnDestroy(): void {\n console.log('ngOnDestroy');\n }\n}\n","<axp-page-layout>\n <axp-layout-start-side [axResizable]=\"true\" class=\"ax-border-e ax-lightest-surface ax-h-full\">\n <axp-layout-header>\n <axp-layout-title>Conversations</axp-layout-title>\n <axp-layout-toolbar>\n <ax-search-box\n #searchInput\n look=\"solid\"\n [placeholder]=\"placeholder()\"\n [ngModel]=\"searchQuery()\"\n (onValueChanged)=\"onSearch($event.value)\"\n class=\"ax-w-full\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </axp-layout-toolbar>\n </axp-layout-header>\n <axp-layout-content class=\"ax-flex ax-flex-col ax-min-h-0\">\n <!-- Tabs -->\n <div class=\"ax-px-4\">\n <ax-tabs #tab class=\"ax-text-neutral-400\" [look]=\"'with-line'\" [location]=\"'bottom'\" [fitParent]=\"true\">\n <ax-tab-item text=\"All\" [active]=\"activeTab() === 0\">\n <ax-suffix>\n <ax-badge\n [text]=\"totalCount().toString()\"\n [color]=\"activeTab() === 0 ? 'primary' : 'secondary'\"\n class=\"ax-min-w-[1.5rem] ax-justify-center\"\n ></ax-badge>\n </ax-suffix>\n </ax-tab-item>\n @if (hasUnread()) {\n <ax-tab-item text=\"Unread\" [active]=\"activeTab() === 1\">\n <ax-suffix>\n <ax-badge\n [text]=\"unreadCount().toString()\"\n [color]=\"activeTab() === 1 ? 'primary' : 'secondary'\"\n class=\"ax-min-w-[1.5rem] ax-justify-center\"\n ></ax-badge>\n </ax-suffix>\n </ax-tab-item>\n }\n </ax-tabs>\n </div>\n\n <!-- Chat List Content -->\n <div class=\"ax-flex-1 ax-overflow-hidden ax-flex ax-flex-col\">\n <!-- Loading State -->\n @if (isLoading()) {\n <div class=\"ax-flex ax-items-center ax-justify-center ax-p-4\">\n <ax-loading></ax-loading>\n </div>\n }\n\n <!-- Error State -->\n @if (error()) {\n <div class=\"ax-p-4 ax-text-error ax-text-center\">\n {{ error() }}\n <button (click)=\"refreshChat()\" class=\"ax-mt-2 ax-text-primary hover:ax-text-primary-dark\">\n Try Again\n </button>\n </div>\n }\n\n <!-- Chat List -->\n @if (!isLoading() && !error()) {\n <div\n class=\"ax-flex-1 ax-overflow-y-auto ax-space-y-2 ax-scrollbar-thin ax-scrollbar-thumb-gray-300 ax-scrollbar-track-transparent\"\n >\n @for (i of filteredRooms(); track i.id) {\n <axm-chat-item\n [data]=\"i\"\n (click)=\"markChatAsRead(i.id)\"\n [class.ax-bg-surface]=\"selectedRoom()?.id === i.id\"\n class=\"ax-transition-all ax-duration-200 hover:ax-bg-surface ax-rounded-lg\"\n ></axm-chat-item>\n }\n\n <!-- Empty State -->\n @empty {\n <div class=\"ax-p-4 ax-font-medium ax-text-center ax-text-secondary\">\n @if (isSearching()) {\n No chats found matching your search\n } @else {\n No chats available\n }\n </div>\n }\n </div>\n }\n\n <!-- Footer Content -->\n <div class=\"ax-border-t ax-border-divider ax-bg-lightest ax-p-4\">\n <ax-button class=\"ax-w-full\" color=\"primary\" text=\"New Conversation\" (onClick)=\"onNewConversation()\">\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-plus\"></i>\n </ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </div>\n </axp-layout-content>\n </axp-layout-start-side>\n\n <axp-page-content>\n <!-- Chat Content -->\n <div class=\"ax-flex-1 ax-overflow-hidden\">\n <router-outlet></router-outlet>\n </div>\n </axp-page-content>\n</axp-page-layout>\n","import { AXMChatMessage } from './chat.type';\n\nexport interface ChatPreviewMessage {\n id: string;\n fromId?: string;\n sendTime: Date;\n readTime: Date;\n type: 'text' | 'voice' | 'file' | 'image' | 'video' | 'audio';\n content: string;\n name: string;\n replyTo?: ChatPreviewMessage;\n}\n\n/**\n * Converts chat service response to chat preview format\n * @param chatResponse - The response from chat service containing items and total\n * @returns Array of formatted chat preview messages\n */\nexport function convertToChatPreview(chatResponse: { items: AXMChatMessage[]; total: number }): ChatPreviewMessage[] {\n if (!chatResponse || !chatResponse.items?.length) {\n return [];\n }\n\n // Map from AXMChatMessage to ChatPreviewMessage\n return chatResponse.items.map((message) => {\n // Determine message type based on content type\n let messageType: ChatPreviewMessage['type'] = 'text';\n\n // Map contentType to preview type\n if (message.message?.contentType) {\n switch (message.message.contentType) {\n case 'text':\n messageType = 'text';\n break;\n case 'file':\n messageType = 'file';\n break;\n case 'image':\n messageType = 'image';\n break;\n case 'video':\n messageType = 'video';\n break;\n case 'link':\n // Determine if link is for audio or other content\n const content = message.message.content || '';\n if (content.includes('.mp3') || content.includes('.ogg') || content.includes('audio')) {\n messageType = 'audio';\n } else {\n messageType = 'text';\n }\n break;\n default:\n messageType = 'text';\n }\n }\n\n // Extract author name if available\n const name = message.author ? message.author.id : 'Unknown';\n\n // Create the chat preview message\n const previewMessage: ChatPreviewMessage = {\n id: message.id,\n sendTime: new Date(message.createdAt || new Date()),\n readTime: new Date(), // Assuming \"read\" when converted\n type: messageType,\n content: message.message?.content || '',\n name: name,\n };\n\n // Add fromId if the message is not from current user\n if (!message.isFromCurrentUser) {\n previewMessage.fromId = message.author?.id;\n }\n\n // Note: Reply information would need to be looked up from the actual messages\n // This would typically be done by the service that has access to all messages\n\n return previewMessage;\n });\n}\n\n/**\n * Creates a ChatPreviewMessage from reply information\n * @param message - The original message that is being referenced\n * @returns A ChatPreviewMessage formatted for use as a replyTo\n */\nexport function createReplyPreview(message: AXMChatMessage): ChatPreviewMessage | undefined {\n if (!message) return undefined;\n\n return {\n id: message.id,\n sendTime: new Date(message.createdAt || new Date()),\n readTime: new Date(),\n type:\n message.message?.contentType === 'image'\n ? 'image'\n : message.message?.contentType === 'video'\n ? 'video'\n : message.message?.contentType === 'file'\n ? 'file'\n : 'text',\n content: message.message?.content || '',\n name: message.author?.id || 'Unknown',\n fromId: !message.isFromCurrentUser ? message.author?.id : undefined,\n };\n}\n\n/**\n * Generate demo chat preview data with a variety of message types\n * @returns Array of sample chat preview messages\n */\nexport function generateDemoChatPreview(): ChatPreviewMessage[] {\n return [\n {\n id: '0',\n sendTime: new Date(),\n type: 'text',\n readTime: new Date(),\n content: 'Hello John, How are you?',\n name: 'test name',\n },\n {\n id: '1',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'text',\n content: 'Hello',\n name: 'test name',\n replyTo: {\n id: '0',\n sendTime: new Date(),\n type: 'text',\n readTime: new Date(),\n content: 'Hello John, How are you?',\n name: 'test name',\n },\n },\n {\n id: '2',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'voice',\n name: 'test name',\n content: `data:audio/webm;codecs=opus;base64,GkXfoEF34fJ`,\n },\n {\n id: '3',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'text',\n content: 'Can i have your address information?',\n name: 'test name',\n replyTo: {\n id: '1',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'text',\n content: 'Hello',\n name: 'test name',\n },\n },\n {\n id: '4',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'file',\n name: 'test name',\n content: `data:audio/webm;codecs=opus;base64,GkXfoEF34fJ`,\n },\n {\n id: '5',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'image',\n name: 'test name',\n content: `https://picsum.photos/300/200`,\n },\n {\n id: '6',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'video',\n name: 'test name',\n content: `https://www.pexels.com/download/video/5495322/?fps=29.97&h=540&w=960`,\n },\n {\n id: '7',\n sendTime: new Date(),\n type: 'text',\n readTime: new Date(),\n content: 'Hello John, How are you?',\n name: 'test name',\n },\n {\n id: '8',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'audio',\n name: 'kids',\n content: `https://actions.google.com/sounds/v1/ambiences/kids_playing.ogg`,\n },\n {\n id: '9',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'image',\n name: 'test name',\n content: `https://picsum.photos/300/200`,\n },\n {\n id: '10',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'image',\n name: 'test name',\n content: `https://picsum.photos/200/300`,\n },\n {\n id: '11',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'video',\n name: 'test name',\n content: `https://www.pexels.com/download/video/5495322/?fps=29.97&h=540&w=960`,\n },\n {\n id: '12',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'file',\n name: 'test name',\n content: `data:audio/webm;codecs=opus;base64,GkXfo59ChoE+u5BxHVL7ZAS1EF34fJ`,\n },\n {\n id: '13',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'audio',\n name: 'alarm',\n content: `https://actions.google.com/sounds/v1/alarms/digital_watch_alarm_long.ogg`,\n },\n ];\n}\n\n/**\n * Usage Examples:\n *\n * Example 1: Converting chat service response to chat preview format\n * ```typescript\n * import { AXMChatService } from '../chat.service';\n * import { convertToChatPreview } from './chat-preview.helper';\n *\n * export class ChatPreviewComponent {\n * constructor(private chatService: AXMChatService) {}\n *\n * async loadChatMessages(roomId: string) {\n * const response = await this.chatService.getChatMessages(roomId);\n *\n * // Convert to chat preview format\n * const previewMessages = convertToChatPreview(response);\n *\n * // Use the converted messages\n * this.conversationService.chats.set(previewMessages);\n * }\n * }\n * ```\n *\n * Example 2: Using demo data for development/testing\n * ```typescript\n * import { generateDemoChatPreview } from './chat-preview.helper';\n *\n * export class ChatPreviewDemoComponent {\n * ngOnInit() {\n * // Load demo messages\n * const demoMessages = generateDemoChatPreview();\n *\n * // Use the demo messages\n * this.conversationService.chats.set(demoMessages);\n * }\n * }\n */\n","import { AXConversationActionEvent } from '@acorex/components/conversation';\nimport { AXFileService } from '@acorex/core/file';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n OnDestroy,\n signal,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { convertToChatPreview } from '../../chat-preview.helper';\nimport { AXMChatService } from '../../chat.service';\n\n@Component({\n selector: 'axm-chat-preview',\n templateUrl: './chat-preview.component.html',\n styleUrls: ['./chat-preview.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class AXMChatPreviewComponent implements OnDestroy {\n // Signal for dynamic max-height (using computed logic for real-time updates)\n\n private activatedRoute = inject(ActivatedRoute);\n private fileService: AXFileService = inject(AXFileService);\n // private conversationService = inject(AXConversationService);\n private chatService = inject(AXMChatService);\n\n protected options = signal({\n disabled: false,\n readonly: false,\n value: '',\n });\n\n protected conversationViewMaxHeight = signal('');\n private resizeObserver!: ResizeObserver;\n private initialTextAreaHeight = 0;\n private textareaHeight = signal<number>(0);\n\n private messageId: string;\n\n constructor(private elRef: ElementRef) {\n afterNextRender(() => {\n const textareaContainer = this.elRef.nativeElement.querySelector('ax-conversation-input > div');\n\n if (textareaContainer) {\n this.initialTextAreaHeight = textareaContainer.offsetHeight;\n this.resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n if (entry.target === textareaContainer) {\n const currentHeight = entry.contentRect.height;\n this.textareaHeight.set(currentHeight);\n }\n }\n });\n\n this.resizeObserver.observe(textareaContainer);\n } else {\n console.warn('Textarea Container element not found.');\n }\n this.activatedRoute.params.subscribe((params) => {\n console.log(params['id']);\n this.messageId = params['id'];\n this.loadMessages(this.messageId);\n });\n });\n }\n\n protected dynamicHeight = computed(() => {\n const baseOffset = 275;\n const currentHeight = this.textareaHeight();\n const dynamicOffset = baseOffset + (currentHeight - this.initialTextAreaHeight);\n return `calc(100vh - ${dynamicOffset}px) !important`;\n });\n\n ngOnDestroy(): void {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n }\n }\n\n handleFileChange(event: any): void {\n console.log('File Changed:', event);\n }\n\n handleCancelRecord(event: any): void {\n console.log('Recording Cancelled:', event);\n }\n\n handleEndRecord(event: any): void {\n this.fileService.blobToBase64(event.data.value).then((base64Content) => {\n // Create a properly formatted chat preview message for voice\n const newVoiceMessage = {\n id: `${Math.floor(Math.random() * 10000)}`,\n content: base64Content,\n sendTime: new Date(),\n readTime: new Date(),\n type: 'voice',\n name: 'test name',\n };\n\n // this.conversationService.chats.update((values: any) => [...values, newVoiceMessage]);\n });\n }\n\n handleOnSend(e: any): void {\n console.log('Message Sent:', e);\n\n if (e.data.value) {\n this.options.update((prev) => ({ ...prev, value: '' }));\n\n // Create a properly formatted chat preview message\n const newMessage = {\n id: `${Math.floor(Math.random() * 10000)}`,\n content: e.data.value,\n sendTime: new Date(),\n readTime: new Date(),\n type: e.data.type || 'text',\n name: 'test name',\n replyTo: e.data.replyChat,\n };\n\n // If it's a reply to another message, ensure it has the right format\n if (newMessage.replyTo) {\n // Ensure replyTo has the right format if it doesn't already\n if (!newMessage.replyTo.readTime) {\n newMessage.replyTo = {\n ...newMessage.replyTo,\n readTime: new Date(),\n };\n }\n }\n\n // this.conversationService.chats.update((values: any) => [...values, newMessage]);\n }\n this.scrollToEnd();\n }\n\n handleOnAction(e: AXConversationActionEvent): void {\n console.log('Action Triggered:', e);\n }\n\n scrollToEnd() {\n const conversationView = document.querySelector('ax-conversation-view');\n if (conversationView) {\n conversationView.scrollTo({\n top: conversationView.scrollHeight,\n behavior: 'smooth',\n });\n }\n }\n\n addMockMessage() {}\n\n async loadMessages(roomId: string) {\n try {\n // Get messages from the chat service\n const messageResponse = await this.chatService.getChatMessages(roomId);\n\n // Convert to chat preview format\n const chatPreviewMessages = convertToChatPreview(messageResponse);\n\n // Set the messages in the conversation service\n // this.conversationService.chats.set(chatPreviewMessages);\n } catch (error) {\n console.error('Failed to load messages:', error);\n\n // Fallback to demo data if there's an error\n // this.conversationService.chats.set(generateDemoChatPreview());\n }\n }\n\n loadDemoMessages() {\n // this.conversationService.chats.set(generateDemoChatPreview());\n }\n}\n","<div class=\"ax-flex ax-flex-col ax-bg-surface-container\">\n <!-- Messages Container -->\n <ax-conversation-container class=\"ax-flex-1 ax-overflow-hidden\">\n <ax-conversation-view (onAction)=\"handleOnAction($event)\" [style.height]=\"dynamicHeight()\"></ax-conversation-view>\n </ax-conversation-container>\n\n <!-- Input Area -->\n <div class=\"ax-p-2\">\n <ax-conversation-input\n placeholder=\"Type a message...\"\n [(ngModel)]=\"options().value\"\n (onSendClick)=\"handleOnSend($event)\"\n (onFileChange)=\"handleFileChange($event)\"\n (onStopRecording)=\"handleEndRecord($event)\"\n (onCancelRecording)=\"handleCancelRecord($event)\"\n ></ax-conversation-input>\n </div>\n</div>\n","import { AXMUsersEntityService } from '@acorex/modules/security-management';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport {\n AXPContent,\n AXPContentType,\n AXPPagedListResult,\n AXPQueryRequest,\n AXPUserReference,\n} from '@acorex/platform/core';\nimport { inject, Injectable } from '@angular/core';\nimport { AXMMessageService } from '../../entities/message/message.service';\nimport { AXMConversationMessage, AXMConversationReaction } from '../../entities/message/message.types';\nimport { AXMRoomService } from '../../entities/room/room.service';\nimport { AXMConversationRoom } from '../../entities/room/room.types';\nimport { AXMCommentMessage, AXMCommentUser, AXMCreateCommentDto } from './comment.type';\n\n/**\n * Abstract Comment Service defining the contract for comment functionality\n */\nexport abstract class AXMCommentService {\n /**\n * Queries comments based on provided request parameters\n */\n abstract query(queryRequest: AXPQueryRequest): Promise<AXPPagedListResult<AXMCommentMessage>>;\n\n /**\n * Gets a single comment by ID\n */\n abstract getOne(id: string): Promise<AXMCommentMessage>;\n\n /**\n * Creates a new comment\n */\n abstract insertOne(commentData: AXMCreateCommentDto): Promise<AXMCommentMessage>;\n\n /**\n * Updates an existing comment\n */\n abstract updateOne(id: string, update: Partial<AXMCommentMessage>): Promise<AXMCommentMessage>;\n\n /**\n * Deletes a comment\n */\n abstract deleteOne(id: string): Promise<boolean>;\n\n /**\n * Toggles like status for a comment\n */\n abstract like(messageId: string): Promise<AXMCommentMessage>;\n\n /**\n * Gets the comment count for an entity\n */\n abstract getCommentCount(entityId: string, instanceId: string, roomType?: string): Promise<number>;\n\n /**\n * Gets all comments with their replies\n */\n abstract getAllCommentsWithReplies(\n entityId: string,\n instanceId: string,\n roomType?: string,\n skip?: number,\n take?: number,\n ): Promise<AXPPagedListResult<AXMCommentMessage>>;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXMCommentServiceImpl implements AXMCommentService {\n private readonly roomService = inject(AXMRoomService);\n private readonly messageService = inject(AXMMessageService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly usersService = inject(AXMUsersEntityService);\n\n // === Helper Methods ===\n\n private getCurrentUser(): AXPUserReference {\n const user = this.sessionService.user;\n return {\n id: user?.id || 'guest-user',\n type: 'user',\n };\n }\n\n private async getUserInfo(userId: string): Promise<AXMCommentUser> {\n try {\n const user = await this.usersService.getOne(userId);\n return {\n id: user.id,\n userName: user.username || user.id,\n firstName: user.firstName || '',\n lastName: user.lastName || '',\n fullName: `${user.firstName || ''} ${user.lastName || ''}`.trim() || 'Unknown User',\n avatar: '',\n };\n } catch (error) {\n console.error(`Failed to get user info for ID: ${userId}`, error);\n return {\n id: userId,\n userName: userId,\n firstName: 'Unknown',\n lastName: 'User',\n fullName: 'Unknown User',\n avatar: '',\n };\n }\n }\n\n private formatRoomId(entityId: string, instanceId: string, roomType: string = 'default'): string {\n return `${roomType}:${entityId}:${instanceId}`;\n }\n\n private async formatComment(message: AXMConversationMessage): Promise<AXMCommentMessage> {\n const currentUserId = this.getCurrentUser().id;\n\n // Check if the current user has liked this message\n const isLiked = (message.reactions || []).some(\n (reaction) => reaction.author.id === currentUserId && reaction.type === 'like',\n );\n\n // Count total reactions\n const reactionsCount = (message.reactions || []).filter((r) => r.type === 'like').length;\n\n // Get the full user info for the author\n const userInfo = await this.getUserInfo(message.author.id);\n\n return {\n ...message,\n author: {\n ...message.author,\n ...userInfo,\n },\n isFromCurrentUser: message.author.id === currentUserId,\n formattedDate: new Date(message.createdAt || new Date()).toLocaleString(),\n isLiked,\n reactionsCount,\n replies: [],\n } as AXMCommentMessage;\n }\n\n private async buildCommentHierarchy(comments: AXMCommentMessage[]): Promise<AXMCommentMessage[]> {\n // Create a map for quick lookup of comments by ID\n const commentMap = new Map<string, AXMCommentMessage>();\n const rootComments: AXMCommentMessage[] = [];\n\n // First pass: add all comments to the map\n for (const comment of comments) {\n commentMap.set(comment.id, comment);\n\n // Initialize the replies array if not already present\n if (!comment.replies) {\n comment.replies = [];\n }\n\n // If this is a root comment (no replyId), add it to the root comments array\n if (!comment.replyId) {\n rootComments.push(comment);\n }\n }\n\n // Second pass: build the hierarchy by adding replies to their parent comments\n for (const comment of comments) {\n if (comment.replyId) {\n const parentComment = commentMap.get(comment.replyId);\n if (parentComment && parentComment.replies) {\n parentComment.replies.push(comment);\n } else {\n // If parent not found (might be deleted), treat as a root comment\n rootComments.push(comment);\n }\n }\n }\n\n // Sort the root comments and their replies by creation date (newest first)\n const sortByDate = (a: AXMCommentMessage, b: AXMCommentMessage) => {\n const dateA = a.createdAt ? new Date(a.createdAt).getTime() : 0;\n const dateB = b.createdAt ? new Date(b.createdAt).getTime() : 0;\n return dateB - dateA;\n };\n\n rootComments.sort(sortByDate);\n\n // Sort the replies within each comment\n for (const comment of rootComments) {\n if (comment.replies && comment.replies.length > 0) {\n comment.replies.sort(sortByDate);\n }\n }\n\n return rootComments;\n }\n\n // === Room Operations ===\n\n async getRoomList(skip = 0, take = 100) {\n return this.roomService.query({ skip, take });\n }\n\n async getRoomDetails(roomId: string) {\n return this.roomService.getOne(roomId);\n }\n\n async createRoom(roomData: Omit<AXMConversationRoom, 'id'>): Promise<string> {\n return this.roomService.insertOne(roomData);\n }\n\n async ensureRoomExists(entityId: string, instanceId: string, roomType: string = 'default'): Promise<string> {\n const roomId = this.formatRoomId(entityId, instanceId, roomType);\n\n try {\n // Check if room exists\n await this.getRoomDetails(roomId);\n return roomId;\n } catch (error) {\n // If room doesn't exist, create it\n const roomData = {\n id: roomId, // Provide the ID directly for comments\n title: `Comments for ${entityId}:${instanceId}`,\n members: [this.getCurrentUser()],\n };\n\n // Create a new room or return the ID if it already exists\n try {\n const result = await this.createRoom(roomData);\n return typeof result === 'string' ? result : roomId;\n } catch (e) {\n // If we get a duplicate error, the room was created by another request\n return roomId;\n }\n }\n }\n\n // === Comment Operations ===\n\n async query(queryRequest: AXPQueryRequest): Promise<AXPPagedListResult<AXMCommentMessage>> {\n const { params, skip = 0, take = 20 } = queryRequest;\n const { entityId, instanceId, roomType = 'default' } = params || {};\n\n if (!entityId || !instanceId) {\n throw new Error('EntityId and InstanceId are required for querying comments');\n }\n\n const roomId = this.formatRoomId(entityId, instanceId, roomType);\n\n // Fetch messages for this room\n const result = await this.messageService.query({\n skip,\n take,\n filter: {\n field: 'roomId',\n value: roomId,\n operator: { type: 'equal' },\n },\n });\n\n // Transform messages to comments\n const comments = await Promise.all(result.items.map((message) => this.formatComment(message)));\n\n // Build comment hierarchy\n const hierarchicalComments = await this.buildCommentHierarchy(comments);\n\n return {\n items: hierarchicalComments,\n total: result.total,\n };\n }\n\n async getOne(id: string): Promise<AXMCommentMessage> {\n const message = await this.messageService.getOne(id);\n return this.formatComment(message);\n }\n\n async insertOne(commentData: AXMCreateCommentDto): Promise<AXMCommentMessage> {\n const {\n entityId,\n instanceId,\n roomType = 'default',\n content,\n contentType = 'text' as AXPContentType,\n replyId,\n isPrivate,\n } = commentData;\n\n // Ensure the room exists\n const roomId = await this.ensureRoomExists(entityId, instanceId, roomType);\n\n // Create the message content\n const messageContent: AXPContent = {\n content,\n contentType,\n };\n\n // Create the message object\n const message: Omit<AXMConversationMessage, 'id'> = {\n roomId,\n message: messageContent,\n author: this.getCurrentUser(),\n replyId: replyId || null,\n };\n\n // Insert the message\n const messageId = await this.messageService.insertOne(message);\n\n // Fetch the full message to return as a comment entity\n const insertedMessage = await this.messageService.getOne(messageId);\n return this.formatComment(insertedMessage);\n }\n\n async updateOne(id: string, update: Partial<AXMCommentMessage>): Promise<AXMCommentMessage> {\n // If content is being updated, format it correctly\n let messageUpdate: Partial<AXMConversationMessage> = {};\n\n if (update.message?.content) {\n messageUpdate.message = {\n content: update.message.content,\n contentType: update.message.contentType || 'text',\n };\n }\n\n // Apply the update\n const result = await this.messageService.updateOne(id, messageUpdate);\n\n // Return as a comment entity\n return this.formatComment(result);\n }\n\n async deleteOne(id: string): Promise<boolean> {\n try {\n await this.messageService.deleteOne(id);\n return true;\n } catch (error) {\n console.error('Failed to delete comment:', error);\n return false;\n }\n }\n\n // === Comment-Specific Operations ===\n\n async like(messageId: string): Promise<AXMCommentMessage> {\n const author = this.getCurrentUser();\n const message = await this.messageService.getOne(messageId);\n\n // Check if the user has already liked this message\n const reactions = message.reactions || [];\n const existingReaction = reactions.find((r) => r.author.id === author.id && r.type === 'like');\n\n let updatedReactions: AXMConversationReaction[];\n\n if (existingReaction) {\n // If the reaction exists, remove it (unlike)\n updatedReactions = reactions.filter((r) => !(r.author.id === author.id && r.type === 'like'));\n } else {\n // If the reaction doesn't exist, add it (like)\n updatedReactions = [...reactions, { author, type: 'like' }];\n }\n\n // Update the message with the new reactions\n const updatedMessage = await this.messageService.updateOne(messageId, { reactions: updatedReactions });\n\n // Return as a comment entity\n return this.formatComment(updatedMessage);\n }\n\n async getCommentCount(entityId: string, instanceId: string, roomType: string = 'default'): Promise<number> {\n const roomId = this.formatRoomId(entityId, instanceId, roomType);\n\n try {\n const result = await this.messageService.query({\n skip: 0,\n take: 1,\n filter: {\n field: 'roomId',\n value: roomId,\n operator: { type: 'equal' },\n },\n });\n\n return result.total;\n } catch (error) {\n console.error('Failed to get comment count:', error);\n return 0;\n }\n }\n\n async getAllCommentsWithReplies(\n entityId: string,\n instanceId: string,\n roomType: string = 'default',\n skip = 0,\n take = 100,\n ): Promise<AXPPagedListResult<AXMCommentMessage>> {\n const queryRequest: AXPQueryRequest = {\n params: { entityId, instanceId, roomType },\n skip,\n take,\n };\n\n return this.query(queryRequest);\n }\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXPLayoutBuilderModule, AXPWidgetNode } from '@acorex/platform/layout/builder';\nimport { Component } from '@angular/core';\n\n@Component({\n template: `<axp-widgets-container\n class=\"ax-flex ax-flex-col ax-gap-2 ax-p-4\"\n [context]=\"context\"\n (onContextChanged)=\"context = $event.data\"\n >\n <div class=\"ax-m-5\">\n <ng-container axp-widget-renderer [node]=\"lookupNode\" [mode]=\"'edit'\"> </ng-container>\n </div>\n </axp-widgets-container>\n\n <ax-footer>\n <ax-suffix>\n <ax-button text=\"Accept & Send\" color=\"primary\" (onClick)=\"handleClose()\"></ax-button>\n </ax-suffix>\n </ax-footer>`,\n imports: [AXDecoratorModule, AXPLayoutBuilderModule, AXButtonModule],\n})\nexport class AXMCommentLookupPopup extends AXBasePageComponent {\n protected lookupNode: AXPWidgetNode = {\n name: 'lookup',\n path: 'lookup',\n type: 'lookup-editor',\n options: {\n entity: 'axoidc.users',\n },\n };\n context = {};\n\n handleClose() {\n this.close({\n result: true,\n data: this.context,\n });\n }\n}\n","import { AXWysiwygContainerComponent } from '@acorex/components/wysiwyg';\nimport { ChangeDetectionStrategy, Component, computed, inject, OnInit, signal, viewChild } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { AXStyleLookType } from '@acorex/cdk/common';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXPopupConfig, AXPopupService } from '@acorex/components/popup';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { AXPQueryRequest } from '@acorex/platform/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { AXMCommentService } from './comment.service';\nimport { AXMCommentMessage } from './comment.type';\n\nimport { AXMCommentLookupPopup } from './comment-lookup-popup.component';\n\n@Component({\n templateUrl: './comment-list-view.component.html',\n selector: 'axm-comment-list-view',\n standalone: false,\n styles: `\n ax-wysiwyg-container {\n .ax-editor-container {\n border-top-left-radius: 0 !important;\n border-top-right-radius: 0 !important;\n }\n .ax-error-message {\n padding-left: 0.5rem;\n }\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXMCommentListViewComponent implements OnInit {\n protected hasCooldown = signal<boolean>(false);\n protected commentContent = signal<string>('');\n\n protected isSubmitting = signal<boolean>(false);\n protected isReplyingMode = signal<boolean>(false);\n protected isEditingMode = signal<boolean>(false);\n protected isLoading = signal<boolean>(true);\n\n protected failedImageIds = signal<string[]>([]);\n protected activeReplyComment = signal<undefined | AXMCommentMessage>(undefined);\n protected activeEditComment = signal<undefined | AXMCommentMessage>(undefined);\n protected wysiwygEditor = viewChild.required<AXWysiwygContainerComponent>('w');\n\n private commentService = inject(AXMCommentService);\n private platform = inject(AXPlatform);\n private route = inject(ActivatedRoute);\n private popupService = inject(AXPopupService);\n private toastService = inject(AXToastService);\n private dialogService = inject(AXDialogService);\n sanitize = inject(DomSanitizer);\n\n private readonly routeParams = this.route.snapshot;\n private getPayload = computed(\n () =>\n ({\n params: this.payload(),\n skip: 0,\n take: 10,\n }) as AXPQueryRequest,\n );\n payload = computed(() => ({\n roomType: 'default',\n entityId: this.routeParams.params?.['module'] + '.' + this.routeParams.params?.['entity'],\n instanceId: this.routeParams.params?.['id'],\n }));\n\n protected comments = signal<AXMCommentMessage[]>([]);\n private wysiwyg = viewChild<AXWysiwygContainerComponent>('w');\n\n ngOnInit(): void {\n this.loadComments();\n }\n\n protected wysiwygOptions = signal<{\n look: AXStyleLookType;\n }>({\n look: 'solid',\n });\n\n protected avatarConfig = signal<{\n color: string;\n look: 'sharp' | 'soft' | 'rounded';\n type: string;\n }>({\n color: 'primary',\n look: 'rounded',\n type: 'solid', // 'image' | 'text' | 'icon' | 'default'\n });\n\n validateContent = (content: string) => {\n let isValid = true;\n\n if (!content || content === '<p><br></p>') {\n isValid = false;\n }\n return {\n rule: 'callback',\n result: isValid,\n message: isValid ? '' : 'Please fill the content',\n value: content,\n };\n };\n\n sanitizeHtml(htmlContent: string | undefined) {\n if (!htmlContent) return this.sanitize.bypassSecurityTrustHtml('');\n return this.sanitize.bypassSecurityTrustHtml(htmlContent);\n }\n\n handleImageError(imageId: string): void {\n this.failedImageIds.update((ids) => [...ids, imageId]);\n }\n\n checkImageExists(imageId: string): boolean {\n return !this.failedImageIds().includes(imageId);\n }\n\n extractInitials(name: string | undefined | any): string {\n if (!name) return '?';\n\n // Handle the case where name is an object with fullName property\n const nameStr = typeof name === 'object' && name.fullName ? name.fullName : String(name);\n\n const words = nameStr.split(' ');\n const initials = words.map((word: string) => word.charAt(0).toUpperCase());\n return initials.join('');\n }\n\n async loadComments() {\n this.isLoading.set(true);\n try {\n const response = await this.commentService.query(this.getPayload());\n this.comments.set(response.items);\n } catch (error) {\n console.error('Failed to load comments:', error);\n this.toastService.show({\n content: 'Failed to load comments. Please try again.',\n color: 'danger',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n this.comments.set([]);\n } finally {\n setTimeout(() => {\n this.isLoading.set(false);\n }, 250);\n }\n }\n\n editMessage(comment: AXMCommentMessage, reply?: AXMCommentMessage) {\n this.isReplyingMode.set(false);\n this.activeReplyComment.set(undefined);\n this.isEditingMode.set(true);\n this.activeEditComment.set(comment);\n const contentToEdit = reply ? reply.message?.content : comment.message?.content;\n this.commentContent.set(contentToEdit || '');\n this.wysiwygEditor().getHostElement().scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n\n replyMessage(comment: AXMCommentMessage, reply?: AXMCommentMessage) {\n this.isEditingMode.set(false);\n this.activeEditComment.set(undefined);\n this.isReplyingMode.set(true);\n this.activeReplyComment.set(comment);\n if (reply) {\n const author = (reply.author as any).fullName || reply.author.id;\n const mention = `<a data-id=\"${reply.id}\">@${author}</a> `;\n this.commentContent.set(mention);\n this.wysiwyg()?.focus();\n document.getElementsByClassName('ql-editor')[0].innerHTML = mention;\n }\n this.wysiwygEditor().getHostElement().scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n\n async deleteComment(comment: AXMCommentMessage) {\n const dialog = this.dialogService.open({\n icon: 'fa-regular fa-warning',\n content: 'Are you sure you want to delete this comment?',\n title: 'Delete Comment',\n type: 'danger',\n orientation: 'horizontal',\n buttons: [\n {\n text: 'Delete',\n color: 'danger',\n onClick: async (e: any) => {\n e.handled = true;\n e.source.text = 'Deleting...';\n e.source.disabled = true;\n e.source.loading = true;\n try {\n if (comment.id) {\n await this.commentService.deleteOne(comment.id);\n this.removeMessageById(comment.id);\n this.toastService.show({\n content: 'Comment deleted successfully.',\n color: 'success',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n if (this.isEditingMode() && this.activeEditComment()?.id === comment.id) {\n this.resetReplyEditState();\n }\n dialog.close();\n }\n } catch (error) {\n this.toastService.show({\n content: typeof error === 'string' ? error : 'Failed to delete comment!',\n color: 'danger',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n }\n },\n },\n {\n text: 'Cancel',\n color: 'default',\n autofocus: true,\n onClick: (e) => {\n dialog.close();\n },\n },\n ],\n closeButton: false,\n });\n }\n\n async deleteReply(comment: AXMCommentMessage, reply: AXMCommentMessage) {\n const dialog = this.dialogService.open({\n icon: 'fa-regular fa-warning',\n content: 'Are you sure you want to delete this reply?',\n title: 'Delete Reply',\n type: 'danger',\n orientation: 'horizontal',\n buttons: [\n {\n text: 'Delete',\n color: 'danger',\n onClick: async (e: any) => {\n e.handled = true;\n e.source.text = 'Deleting...';\n e.source.disabled = true;\n e.source.loading = true;\n try {\n if (reply.id) {\n await this.commentService.deleteOne(reply.id);\n this.removeMessageById(comment.id, reply.id);\n this.toastService.show({\n content: 'Comment deleted successfully.',\n color: 'success',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n dialog.close();\n }\n } catch (error) {\n this.toastService.show({\n content: typeof error === 'string' ? error : 'Failed to delete comment!',\n color: 'danger',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n }\n },\n },\n {\n text: 'Cancel',\n color: 'default',\n autofocus: true,\n onClick: (e) => {\n dialog.close();\n },\n },\n ],\n closeButton: false,\n });\n }\n\n resetReplyEditState() {\n this.isEditingMode.set(false);\n this.activeEditComment.set(undefined);\n this.isReplyingMode.set(false);\n this.activeReplyComment.set(undefined);\n this.commentContent.set('');\n document.getElementsByClassName('ql-editor')[0].innerHTML = '';\n }\n\n async toggleLike(comment: AXMCommentMessage, reply?: AXMCommentMessage) {\n try {\n if (reply) {\n if (reply.id) {\n this.updateLikeStatus(comment.id, reply.id);\n await this.commentService.like(reply.id);\n }\n } else {\n if (comment.id) {\n this.updateLikeStatus(comment.id);\n await this.commentService.like(comment.id);\n }\n }\n } catch (error) {\n console.error('Failed to toggle like:', error);\n // Revert the optimistic update if the server call fails\n if (reply && reply.id) {\n this.updateLikeStatus(comment.id, reply.id);\n } else if (comment.id) {\n this.updateLikeStatus(comment.id);\n }\n }\n }\n\n private updateLikeStatus(commentId: string, replyId?: string) {\n this.comments.update((commentsList) => {\n return commentsList.map((comment) => {\n if (comment.id === commentId) {\n if (replyId && comment.replies) {\n const updatedReplies = comment.replies.map((reply) =>\n reply.id === replyId\n ? {\n ...reply,\n isLiked: !reply.isLiked,\n reactionsCount:\n reply.isLiked && reply.reactionsCount !== undefined\n ? reply.reactionsCount - 1\n : (reply.reactionsCount || 0) + 1,\n }\n : reply,\n );\n\n return {\n ...comment,\n replies: updatedReplies,\n };\n } else {\n return {\n ...comment,\n isLiked: !comment.isLiked,\n reactionsCount:\n comment.isLiked && comment.reactionsCount !== undefined\n ? comment.reactionsCount - 1\n : (comment.reactionsCount || 0) + 1,\n };\n }\n }\n return comment;\n });\n });\n }\n\n private removeMessageById(commentId: string, replyId?: string) {\n if (replyId) {\n // Remove a reply from a comment\n this.comments.update((commentsList) =>\n commentsList.map((comment) => {\n if (comment.id === commentId && comment.replies) {\n return {\n ...comment,\n replies: comment.replies.filter((reply) => reply.id !== replyId),\n };\n }\n return comment;\n }),\n );\n } else {\n // Remove a whole comment\n this.comments.update((commentsList) => commentsList.filter((comment) => comment.id !== commentId));\n }\n }\n\n protected async submitComment(isPrivate: boolean = false): Promise<void> {\n if (!this.validateContent(this.commentContent()).result) {\n return;\n }\n\n this.isSubmitting.set(true);\n\n let memberLookup;\n if (isPrivate) {\n const popupConfig: AXPopupConfig = {\n header: true,\n size: 'md',\n draggable: true,\n hasBackdrop: true,\n closeButton: true,\n closeOnBackdropClick: false,\n };\n const popup = await this.popupService.open(AXMCommentLookupPopup, popupConfig);\n memberLookup = popup.data?.data?.lookup;\n }\n\n try {\n if (this.isEditingMode() && this.activeEditComment()?.id) {\n const payload = {\n message: {\n content: this.commentContent(),\n contentType: 'text' as const,\n },\n };\n\n await this.commentService.updateOne(this.activeEditComment()!.id, payload);\n this.hasCooldown.set(true);\n this.isEditingMode.set(false);\n this.activeEditComment.set(undefined);\n } else {\n const payload = {\n ...this.payload(),\n content: this.commentContent(),\n contentType: 'text' as const,\n isPrivate: isPrivate,\n replyId: this.activeReplyComment()?.id ?? null,\n };\n\n await this.commentService.insertOne(payload);\n this.hasCooldown.set(true);\n this.isReplyingMode.set(false);\n this.activeReplyComment.set(undefined);\n }\n\n // Reload comments to get the updated list with proper hierarchy\n const response = await this.commentService.query(this.getPayload());\n this.comments.set(response.items);\n\n this.commentContent.set('');\n document.getElementsByClassName('ql-editor')[0].innerHTML = '';\n\n setTimeout(() => {\n this.hasCooldown.set(false);\n }, 1000);\n } catch (error) {\n console.error('Error submitting comment:', error);\n this.toastService.show({\n content: typeof error === 'string' ? error : 'Failed to submit comment. Please try again.',\n color: 'danger',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n } finally {\n this.isSubmitting.set(false);\n }\n }\n\n scrollMain() {\n const comment = this.isReplyingMode() ? this.activeReplyComment() : this.activeEditComment();\n if (comment && comment.id) {\n const el = document.getElementById(comment.id);\n if (el) {\n el.scrollIntoView({ behavior: 'smooth', block: 'center' });\n const content = el?.firstElementChild?.children[1] as HTMLElement;\n if (content) {\n const prevBg = content.style.background;\n content.style.borderRadius = '0.25rem';\n content.style.transition = 'background 1s ease-in-out';\n content.style.background = `rgba(var(--ax-color-on-surface), var(--tw-bg-opacity))`;\n setTimeout(() => {\n content.style.background = prevBg || 'rgba(0, 0, 0, 0)';\n }, 1000);\n }\n }\n }\n }\n\n calcDefrenetTime(date: Date | undefined) {\n return date ? Date.now() - date.getTime() : undefined;\n }\n}\n","<div class=\"ax-mt-2\">\n <ax-comment-container>\n @if (isLoading()) {\n <div class=\"ax-flex ax-items-center ax-py-12 ax-bg-lightest ax-px-5\">\n <ax-skeleton class=\"ax-min-w-16 ax-h-16 ax-rounded-full ax-me-4\"></ax-skeleton>\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-w-full\">\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-2 ax-rounded-full\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-2 ax-rounded-full\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-8/12 ax-h-2 ax-rounded-full\"></ax-skeleton>\n </div>\n </div>\n } @else if (!isLoading() && comments().length > 0) {\n <ax-comment-view class=\"ax-bg-lightest\">\n @for (comment of comments(); track comment.id) {\n <ax-comment-item [id]=\"comment.id!\" [replyCount]=\"comment.replies?.length ?? 0\">\n <ax-avatar [color]=\"avatarConfig().color\" [shape]=\"avatarConfig().look\">\n @if (checkImageExists(comment.id!) && comment.author && extractInitials(comment.author) !== '?') {\n <ax-image (onError)=\"handleImageError(comment.id!)\" [src]=\"''\">\n <ax-loading></ax-loading>\n </ax-image>\n } @else {\n <ax-text>\n <span class=\"ax-text-base ax-overflow-hidden\">{{ extractInitials(comment.author) }}</span>\n </ax-text>\n }\n </ax-avatar>\n <ax-title>{{ extractInitials(comment.author) }}</ax-title>\n <ax-comment-date>{{ calcDefrenetTime(comment.createdAt) | format: 'timeleft' | async }} </ax-comment-date>\n <ax-comment-menu-options>\n <ax-button class=\"ax-sm\" look=\"blank\" color=\"neutral\">\n <ax-icon icon=\"ax-icon ax-icon-solid ax-icon-more-horizontal\"></ax-icon>\n </ax-button>\n\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item text=\"Edit\" color=\"neutral\" (click)=\"editMessage(comment)\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-edit\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n\n <ax-button-item text=\"Delete\" color=\"danger\" (click)=\"deleteComment(comment)\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-comment-menu-options>\n <ax-content [innerHTML]=\"sanitizeHtml(comment.message.content)\"></ax-content>\n <ax-comment-like (click)=\"toggleLike(comment)\" [liked]=\"comment.isLiked!\">\n {{ comment.reactionsCount }}\n </ax-comment-like>\n <ax-comment-reply-text (click)=\"replyMessage(comment)\"></ax-comment-reply-text>\n @for (reply of comment.replies; track reply.id) {\n <ax-comment-item [id]=\"reply.id\">\n <ax-avatar [color]=\"avatarConfig().color\" [shape]=\"avatarConfig().look\">\n @if (reply && checkImageExists(reply.id!) && reply.author && extractInitials(reply.author) !== '?') {\n <ax-image (onError)=\"handleImageError(reply.id!)\" [src]=\"''\">\n <ax-loading></ax-loading>\n </ax-image>\n } @else {\n <ax-text>\n <span class=\"ax-text-base ax-overflow-hidden\">{{ extractInitials(reply.author) }}</span>\n </ax-text>\n }\n </ax-avatar>\n <ax-title>{{ extractInitials(reply.author) }}</ax-title>\n <ax-comment-date>{{ calcDefrenetTime(reply.createdAt) | format: 'timeleft' | async }} </ax-comment-date>\n <ax-comment-menu-options>\n <ax-button class=\"ax-sm\" look=\"blank\" color=\"neutral\">\n <ax-icon icon=\"ax-icon ax-icon-solid ax-icon-more-horizontal\"></ax-icon>\n </ax-button>\n\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item text=\"Edit\" color=\"neutral\" (click)=\"editMessage(comment, reply)\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-edit\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item text=\"Delete\" color=\"danger\" (click)=\"deleteReply(comment, reply)\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-comment-menu-options>\n <ax-content [innerHTML]=\"sanitizeHtml(reply.message.content)\"></ax-content>\n <ax-comment-like (click)=\"toggleLike(comment, reply)\" [liked]=\"reply.isLiked!\">\n {{ reply.reactionsCount }}\n </ax-comment-like>\n <ax-comment-reply-text (click)=\"replyMessage(comment, reply)\"></ax-comment-reply-text>\n </ax-comment-item>\n }\n </ax-comment-item>\n }\n </ax-comment-view>\n } @else {\n <div>\n <div class=\"ax-flex ax-flex-col ax-gap-4 ax-justify-center ax-items-center ax-p-10\">\n <svg\n class=\"ax-mx-auto\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"154\"\n height=\"161\"\n viewBox=\"0 0 154 161\"\n fill=\"none\"\n >\n <path\n d=\"M0.0616455 84.4268C0.0616455 42.0213 34.435 7.83765 76.6507 7.83765C118.803 7.83765 153.224 42.0055 153.224 84.4268C153.224 102.42 147.026 118.974 136.622 132.034C122.282 150.138 100.367 161 76.6507 161C52.7759 161 30.9882 150.059 16.6633 132.034C6.25961 118.974 0.0616455 102.42 0.0616455 84.4268Z\"\n fill=\"#EEF2FF\"\n />\n <path\n d=\"M96.8189 0.632498L96.8189 0.632384L96.8083 0.630954C96.2034 0.549581 95.5931 0.5 94.9787 0.5H29.338C22.7112 0.5 17.3394 5.84455 17.3394 12.4473V142.715C17.3394 149.318 22.7112 154.662 29.338 154.662H123.948C130.591 154.662 135.946 149.317 135.946 142.715V38.9309C135.946 38.0244 135.847 37.1334 135.648 36.2586L135.648 36.2584C135.117 33.9309 133.874 31.7686 132.066 30.1333C132.066 30.1331 132.065 30.1329 132.065 30.1327L103.068 3.65203C103.068 3.6519 103.067 3.65177 103.067 3.65164C101.311 2.03526 99.1396 0.995552 96.8189 0.632498Z\"\n fill=\"white\"\n stroke=\"#E5E7EB\"\n />\n <ellipse cx=\"80.0618\" cy=\"81\" rx=\"28.0342\" ry=\"28.0342\" fill=\"#EEF2FF\" />\n <path\n d=\"M99.2393 61.3061L99.2391 61.3058C88.498 50.5808 71.1092 50.5804 60.3835 61.3061C49.6423 72.0316 49.6422 89.4361 60.3832 100.162C71.109 110.903 88.4982 110.903 99.2393 100.162C109.965 89.4363 109.965 72.0317 99.2393 61.3061ZM105.863 54.6832C120.249 69.0695 120.249 92.3985 105.863 106.785C91.4605 121.171 68.1468 121.171 53.7446 106.785C39.3582 92.3987 39.3582 69.0693 53.7446 54.683C68.1468 40.2965 91.4605 40.2966 105.863 54.6832Z\"\n stroke=\"#E5E7EB\"\n />\n <path\n d=\"M110.782 119.267L102.016 110.492C104.888 108.267 107.476 105.651 109.564 102.955L118.329 111.729L110.782 119.267Z\"\n stroke=\"#E5E7EB\"\n />\n <path\n d=\"M139.122 125.781L139.122 125.78L123.313 109.988C123.313 109.987 123.313 109.987 123.312 109.986C121.996 108.653 119.849 108.657 118.521 109.985L118.871 110.335L118.521 109.985L109.047 119.459C107.731 120.775 107.735 122.918 109.044 124.247L109.047 124.249L124.858 140.06C128.789 143.992 135.191 143.992 139.122 140.06C143.069 136.113 143.069 129.728 139.122 125.781Z\"\n fill=\"#A5B4FC\"\n stroke=\"#818CF8\"\n />\n <path\n d=\"M83.185 87.2285C82.5387 87.2285 82.0027 86.6926 82.0027 86.0305C82.0027 83.3821 77.9987 83.3821 77.9987 86.0305C77.9987 86.6926 77.4627 87.2285 76.8006 87.2285C76.1543 87.2285 75.6183 86.6926 75.6183 86.0305C75.6183 80.2294 84.3831 80.2451 84.3831 86.0305C84.3831 86.6926 83.8471 87.2285 83.185 87.2285Z\"\n fill=\"#4F46E5\"\n />\n <path\n d=\"M93.3528 77.0926H88.403C87.7409 77.0926 87.2049 76.5567 87.2049 75.8946C87.2049 75.2483 87.7409 74.7123 88.403 74.7123H93.3528C94.0149 74.7123 94.5509 75.2483 94.5509 75.8946C94.5509 76.5567 94.0149 77.0926 93.3528 77.0926Z\"\n fill=\"#4F46E5\"\n />\n <path\n d=\"M71.5987 77.0925H66.6488C65.9867 77.0925 65.4507 76.5565 65.4507 75.8945C65.4507 75.2481 65.9867 74.7122 66.6488 74.7122H71.5987C72.245 74.7122 72.781 75.2481 72.781 75.8945C72.781 76.5565 72.245 77.0925 71.5987 77.0925Z\"\n fill=\"#4F46E5\"\n />\n <rect x=\"38.3522\" y=\"21.5128\" width=\"41.0256\" height=\"2.73504\" rx=\"1.36752\" fill=\"#4F46E5\" />\n <rect x=\"38.3522\" y=\"133.65\" width=\"54.7009\" height=\"5.47009\" rx=\"2.73504\" fill=\"#A5B4FC\" />\n <rect x=\"38.3522\" y=\"29.7179\" width=\"13.6752\" height=\"2.73504\" rx=\"1.36752\" fill=\"#4F46E5\" />\n <circle cx=\"56.13\" cy=\"31.0854\" r=\"1.36752\" fill=\"#4F46E5\" />\n <circle cx=\"61.6001\" cy=\"31.0854\" r=\"1.36752\" fill=\"#4F46E5\" />\n <circle cx=\"67.0702\" cy=\"31.0854\" r=\"1.36752\" fill=\"#4F46E5\" />\n </svg>\n <div>\n <h2 class=\"ax-text-center ax-text-neutral-600 ax-font-semibold ax-leading-loose ax-pb-2\">\n There is no Comment!\n </h2>\n </div>\n </div>\n </div>\n }\n </ax-comment-container>\n <ax-form>\n <ax-form-field>\n <div>\n @if (isReplyingMode() || isEditingMode()) {\n <div\n class=\"ax-flex ax-justify-between ax-rounded-b-none ax-border ax-border-b-0 ax-rounded-lg ax-bg-on-surface ax-px-6 ax-py-3 ax-w-full ax-items-center ax-overflow-hidden ax-text-sm ax-leading-none\"\n >\n <div (click)=\"scrollMain()\" class=\"ax-flex ax-justify-start ax-items-center ax-cursor-pointer\">\n <i\n [class]=\"isReplyingMode() ? 'fa-reply' : 'fa-pen'\"\n class=\"fa-solid ax-text-primary-500 dark:ax-text-primary-300 ax-text-2xl ax-me-4\"\n ></i>\n <div\n class=\"ax-flex ax-flex-col ax-gap-2 ax-justify-between ax-align-middle ax-leading-4 ax-overflow-hidden\"\n >\n <p class=\"ax-text-primary-500 dark:ax-text-primary-300\">\n {{ isReplyingMode() ? 'Reply to ' : 'Edit Message' }}\n <span class=\"ax-font-bold\">\n {{ isReplyingMode() ? extractInitials(activeReplyComment()?.author) : '' }}\n </span>\n </p>\n <div\n class=\"ax-truncate\"\n [innerHTML]=\"\n isReplyingMode()\n ? sanitizeHtml(activeReplyComment()?.message?.content ?? '')\n : sanitizeHtml(activeEditComment()?.message?.content ?? '')\n \"\n ></div>\n </div>\n </div>\n <div><i (click)=\"resetReplyEditState()\" class=\"fa-solid ax-text-2xl fa-xmark ax-cursor-pointer\"></i></div>\n </div>\n }\n <ax-wysiwyg-container #w [look]=\"wysiwygOptions().look\" [(ngModel)]=\"commentContent\">\n <ax-wysiwyg-view class=\"ax-min-h-28\"></ax-wysiwyg-view>\n <ax-toolbar>\n <ax-content>\n <ax-wysiwyg-history></ax-wysiwyg-history>\n <ax-wysiwyg-font-style></ax-wysiwyg-font-style>\n <ax-wysiwyg-colors></ax-wysiwyg-colors>\n <ax-wysiwyg-list></ax-wysiwyg-list>\n <ax-wysiwyg-alignment></ax-wysiwyg-alignment>\n </ax-content>\n <ax-suffix>\n <ax-dropdown-button\n [disabled]=\"hasCooldown()\"\n type=\"submit\"\n color=\"primary\"\n mode=\"split\"\n text=\"Send\"\n (onClick)=\"submitComment()\"\n >\n @if (isSubmitting()) {\n <ax-loading></ax-loading>\n }\n <ax-button-item-list>\n <ax-button-item (click)=\"submitComment(true)\" text=\"Send Private ...\" name=\"private\" data=\"private\">\n <ax-prefix>\n <ax-icon icon=\"fa-regular fa-user-secret\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-button>\n </ax-suffix>\n </ax-toolbar>\n <ax-validation-rule rule=\"callback\" [options]=\"{ validate: validateContent }\"></ax-validation-rule>\n </ax-wysiwyg-container>\n </div>\n </ax-form-field>\n </ax-form>\n</div>\n","import { AXWysiwygContainerComponent, AXWysiwygModule } from '@acorex/components/wysiwyg';\nimport { ChangeDetectionStrategy, Component, computed, inject, OnInit, signal, viewChild } from '@angular/core';\n\nimport { AXStyleLookType } from '@acorex/cdk/common';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXPopupConfig, AXPopupService } from '@acorex/components/popup';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { AXPQueryRequest } from '@acorex/platform/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { AXMCommentService } from '../../../comment/comment.service';\nimport { AXMCommentMessage } from '../../../comment/comment.type';\n\nimport { AXAvatarModule } from '@acorex/components/avatar';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCommentModule } from '@acorex/components/comment';\nimport { AXConversationModule } from '@acorex/components/conversation';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXImageModule } from '@acorex/components/image';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXToolBarModule } from '@acorex/components/toolbar';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXValidationModule } from '@acorex/core/validation';\nimport { AXPLayoutWidgetComponent } from '@acorex/platform/layout/builder';\nimport { AsyncPipe } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { AXMCommentLookupPopup } from '../../../comment/comment-lookup-popup.component';\n\n@Component({\n templateUrl: './comment-widget-view.component.html',\n selector: 'axm-comment-widget-view',\n imports: [\n AXWysiwygContainerComponent,\n AXAvatarModule,\n AXConversationModule,\n AXSkeletonModule,\n AXCommentModule,\n AXButtonModule,\n AXImageModule,\n AXLoadingModule,\n AXDropdownModule,\n AXDecoratorModule,\n AXWysiwygModule,\n AXToolBarModule,\n AXDropdownModule,\n AXDropdownButtonModule,\n AXValidationModule,\n AsyncPipe,\n AXFormModule,\n FormsModule,\n AXFormatModule,\n ],\n styles: `\n ax-wysiwyg-container {\n .ax-editor-container {\n border-top-left-radius: 0 !important;\n border-top-right-radius: 0 !important;\n }\n .ax-error-message {\n padding-left: 0.5rem;\n }\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXMCommentWidgetViewComponent extends AXPLayoutWidgetComponent implements OnInit {\n protected hasCooldown = signal<boolean>(false);\n protected commentContent = signal<string>('');\n\n protected isSubmitting = signal<boolean>(false);\n protected isReplyingMode = signal<boolean>(false);\n protected isEditingMode = signal<boolean>(false);\n protected isLoading = signal<boolean>(true);\n\n protected failedImageIds = signal<string[]>([]);\n protected activeReplyComment = signal<undefined | AXMCommentMessage>(undefined);\n protected activeEditComment = signal<undefined | AXMCommentMessage>(undefined);\n protected wysiwygEditor = viewChild.required<AXWysiwygContainerComponent>('w');\n\n private commentService = inject(AXMCommentService);\n private platform = inject(AXPlatform);\n private popupService = inject(AXPopupService);\n private toastService = inject(AXToastService);\n private dialogService = inject(AXDialogService);\n sanitize = inject(DomSanitizer);\n\n private getPayload = computed(\n () =>\n ({\n params: this.payload(),\n skip: 0,\n take: 10,\n }) as AXPQueryRequest,\n );\n payload = computed(() => ({\n roomType: 'default',\n entityId: this.options().entityId,\n instanceId: this.options().instanceId,\n }));\n\n protected comments = signal<AXMCommentMessage[]>([]);\n private wysiwyg = viewChild<AXWysiwygContainerComponent>('w');\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.loadComments();\n }\n\n protected wysiwygOptions = signal<{\n look: AXStyleLookType;\n }>({\n look: 'solid',\n });\n\n protected avatarConfig = signal<{\n color: string;\n look: 'sharp' | 'soft' | 'rounded';\n type: string;\n }>({\n color: 'primary',\n look: 'rounded',\n type: 'solid', // 'image' | 'text' | 'icon' | 'default'\n });\n\n validateContent = (content: string) => {\n let isValid = true;\n\n if (!content || content === '<p><br></p>') {\n isValid = false;\n }\n return {\n rule: 'callback',\n result: isValid,\n message: isValid ? '' : 'Please fill the content',\n value: content,\n };\n };\n\n sanitizeHtml(htmlContent: string | undefined) {\n if (!htmlContent) return this.sanitize.bypassSecurityTrustHtml('');\n return this.sanitize.bypassSecurityTrustHtml(htmlContent);\n }\n\n handleImageError(imageId: string): void {\n this.failedImageIds.update((ids) => [...ids, imageId]);\n }\n\n checkImageExists(imageId: string): boolean {\n return !this.failedImageIds().includes(imageId);\n }\n\n extractInitials(name: string | undefined | any): string {\n if (!name) return '?';\n\n // Handle the case where name is an object with fullName property\n const nameStr = typeof name === 'object' && name.fullName ? name.fullName : String(name);\n\n const words = nameStr.split(' ');\n const initials = words.map((word: string) => word.charAt(0).toUpperCase());\n return initials.join('');\n }\n\n async loadComments() {\n this.isLoading.set(true);\n try {\n const response = await this.commentService.query(this.getPayload());\n this.comments.set(response.items);\n } catch (error) {\n console.error('Failed to load comments:', error);\n this.toastService.show({\n content: 'Failed to load comments. Please try again.',\n color: 'danger',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n this.comments.set([]);\n } finally {\n setTimeout(() => {\n this.isLoading.set(false);\n }, 250);\n }\n }\n\n editMessage(comment: AXMCommentMessage, reply?: AXMCommentMessage) {\n this.isReplyingMode.set(false);\n this.activeReplyComment.set(undefined);\n this.isEditingMode.set(true);\n this.activeEditComment.set(comment);\n const contentToEdit = reply ? reply.message?.content : comment.message?.content;\n this.commentContent.set(contentToEdit || '');\n this.wysiwygEditor().getHostElement().scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n\n replyMessage(comment: AXMCommentMessage, reply?: AXMCommentMessage) {\n this.isEditingMode.set(false);\n this.activeEditComment.set(undefined);\n this.isReplyingMode.set(true);\n this.activeReplyComment.set(comment);\n if (reply) {\n const author = (reply.author as any).fullName || reply.author.id;\n const mention = `<a data-id=\"${reply.id}\">@${author}</a> `;\n this.commentContent.set(mention);\n this.wysiwyg()?.focus();\n document.getElementsByClassName('ql-editor')[0].innerHTML = mention;\n }\n this.wysiwygEditor().getHostElement().scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n\n async deleteComment(comment: AXMCommentMessage) {\n const dialog = this.dialogService.open({\n icon: 'fa-regular fa-warning',\n content: 'Are you sure you want to delete this comment?',\n title: 'Delete Comment',\n type: 'danger',\n orientation: 'horizontal',\n buttons: [\n {\n text: 'Delete',\n color: 'danger',\n onClick: async (e: any) => {\n e.handled = true;\n e.source.text = 'Deleting...';\n e.source.disabled = true;\n e.source.loading = true;\n try {\n if (comment.id) {\n await this.commentService.deleteOne(comment.id);\n this.removeMessageById(comment.id);\n this.toastService.show({\n content: 'Comment deleted successfully.',\n color: 'success',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n if (this.isEditingMode() && this.activeEditComment()?.id === comment.id) {\n this.resetReplyEditState();\n }\n dialog.close();\n }\n } catch (error) {\n this.toastService.show({\n content: typeof error === 'string' ? error : 'Failed to delete comment!',\n color: 'danger',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n }\n },\n },\n {\n text: 'Cancel',\n color: 'default',\n autofocus: true,\n onClick: (e) => {\n dialog.close();\n },\n },\n ],\n closeButton: false,\n });\n }\n\n async deleteReply(comment: AXMCommentMessage, reply: AXMCommentMessage) {\n const dialog = this.dialogService.open({\n icon: 'fa-regular fa-warning',\n content: 'Are you sure you want to delete this reply?',\n title: 'Delete Reply',\n type: 'danger',\n orientation: 'horizontal',\n buttons: [\n {\n text: 'Delete',\n color: 'danger',\n onClick: async (e: any) => {\n e.handled = true;\n e.source.text = 'Deleting...';\n e.source.disabled = true;\n e.source.loading = true;\n try {\n if (reply.id) {\n await this.commentService.deleteOne(reply.id);\n this.removeMessageById(comment.id, reply.id);\n this.toastService.show({\n content: 'Comment deleted successfully.',\n color: 'success',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n dialog.close();\n }\n } catch (error) {\n this.toastService.show({\n content: typeof error === 'string' ? error : 'Failed to delete comment!',\n color: 'danger',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n }\n },\n },\n {\n text: 'Cancel',\n color: 'default',\n autofocus: true,\n onClick: (e) => {\n dialog.close();\n },\n },\n ],\n closeButton: false,\n });\n }\n\n resetReplyEditState() {\n this.isEditingMode.set(false);\n this.activeEditComment.set(undefined);\n this.isReplyingMode.set(false);\n this.activeReplyComment.set(undefined);\n this.commentContent.set('');\n document.getElementsByClassName('ql-editor')[0].innerHTML = '';\n }\n\n async toggleLike(comment: AXMCommentMessage, reply?: AXMCommentMessage) {\n try {\n if (reply) {\n if (reply.id) {\n this.updateLikeStatus(comment.id, reply.id);\n await this.commentService.like(reply.id);\n }\n } else {\n if (comment.id) {\n this.updateLikeStatus(comment.id);\n await this.commentService.like(comment.id);\n }\n }\n } catch (error) {\n console.error('Failed to toggle like:', error);\n // Revert the optimistic update if the server call fails\n if (reply && reply.id) {\n this.updateLikeStatus(comment.id, reply.id);\n } else if (comment.id) {\n this.updateLikeStatus(comment.id);\n }\n }\n }\n\n private updateLikeStatus(commentId: string, replyId?: string) {\n this.comments.update((commentsList) => {\n return commentsList.map((comment) => {\n if (comment.id === commentId) {\n if (replyId && comment.replies) {\n const updatedReplies = comment.replies.map((reply) =>\n reply.id === replyId\n ? {\n ...reply,\n isLiked: !reply.isLiked,\n reactionsCount:\n reply.isLiked && reply.reactionsCount !== undefined\n ? reply.reactionsCount - 1\n : (reply.reactionsCount || 0) + 1,\n }\n : reply,\n );\n\n return {\n ...comment,\n replies: updatedReplies,\n };\n } else {\n return {\n ...comment,\n isLiked: !comment.isLiked,\n reactionsCount:\n comment.isLiked && comment.reactionsCount !== undefined\n ? comment.reactionsCount - 1\n : (comment.reactionsCount || 0) + 1,\n };\n }\n }\n return comment;\n });\n });\n }\n\n private removeMessageById(commentId: string, replyId?: string) {\n if (replyId) {\n // Remove a reply from a comment\n this.comments.update((commentsList) =>\n commentsList.map((comment) => {\n if (comment.id === commentId && comment.replies) {\n return {\n ...comment,\n replies: comment.replies.filter((reply) => reply.id !== replyId),\n };\n }\n return comment;\n }),\n );\n } else {\n // Remove a whole comment\n this.comments.update((commentsList) => commentsList.filter((comment) => comment.id !== commentId));\n }\n }\n\n protected async submitComment(isPrivate: boolean = false): Promise<void> {\n if (!this.validateContent(this.commentContent()).result) {\n return;\n }\n\n this.isSubmitting.set(true);\n\n let memberLookup;\n if (isPrivate) {\n const popupConfig: AXPopupConfig = {\n header: true,\n size: 'md',\n draggable: true,\n hasBackdrop: true,\n closeButton: true,\n closeOnBackdropClick: false,\n };\n const popup = await this.popupService.open(AXMCommentLookupPopup, popupConfig);\n memberLookup = popup.data?.data?.lookup;\n }\n\n try {\n if (this.isEditingMode() && this.activeEditComment()?.id) {\n const payload = {\n message: {\n content: this.commentContent(),\n contentType: 'text' as const,\n },\n };\n\n await this.commentService.updateOne(this.activeEditComment()!.id, payload);\n this.hasCooldown.set(true);\n this.isEditingMode.set(false);\n this.activeEditComment.set(undefined);\n } else {\n const payload = {\n ...this.payload(),\n content: this.commentContent(),\n contentType: 'text' as const,\n isPrivate: isPrivate,\n replyId: this.activeReplyComment()?.id ?? null,\n };\n\n await this.commentService.insertOne(payload);\n this.hasCooldown.set(true);\n this.isReplyingMode.set(false);\n this.activeReplyComment.set(undefined);\n }\n\n // Reload comments to get the updated list with proper hierarchy\n const response = await this.commentService.query(this.getPayload());\n this.comments.set(response.items);\n\n this.commentContent.set('');\n document.getElementsByClassName('ql-editor')[0].innerHTML = '';\n\n setTimeout(() => {\n this.hasCooldown.set(false);\n }, 1000);\n } catch (error) {\n console.error('Error submitting comment:', error);\n this.toastService.show({\n content: typeof error === 'string' ? error : 'Failed to submit comment. Please try again.',\n color: 'danger',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n } finally {\n this.isSubmitting.set(false);\n }\n }\n\n scrollMain() {\n const comment = this.isReplyingMode() ? this.activeReplyComment() : this.activeEditComment();\n if (comment && comment.id) {\n const el = document.getElementById(comment.id);\n if (el) {\n el.scrollIntoView({ behavior: 'smooth', block: 'center' });\n const content = el?.firstElementChild?.children[1] as HTMLElement;\n if (content) {\n const prevBg = content.style.background;\n content.style.borderRadius = '0.25rem';\n content.style.transition = 'background 1s ease-in-out';\n content.style.background = `rgba(var(--ax-color-on-surface), var(--tw-bg-opacity))`;\n setTimeout(() => {\n content.style.background = prevBg || 'rgba(0, 0, 0, 0)';\n }, 1000);\n }\n }\n }\n }\n\n calcDefrenetTime(date: Date | undefined) {\n return date ? Date.now() - date.getTime() : undefined;\n }\n}\n","<div class=\"ax-mt-2 ax-p-2\">\n <ax-comment-container>\n @if (isLoading()) {\n <div class=\"ax-flex ax-items-center ax-py-12 ax-bg-lightest ax-px-5\">\n <ax-skeleton class=\"ax-min-w-16 ax-h-16 ax-rounded-full ax-me-4\"></ax-skeleton>\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-w-full\">\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-2 ax-rounded-full\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-2 ax-rounded-full\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-8/12 ax-h-2 ax-rounded-full\"></ax-skeleton>\n </div>\n </div>\n } @else if (!isLoading() && comments().length > 0) {\n <ax-comment-view class=\"ax-bg-lightest\">\n @for (comment of comments(); track comment.id) {\n <ax-comment-item [id]=\"comment.id!\" [replyCount]=\"comment.replies?.length ?? 0\">\n <ax-avatar [color]=\"avatarConfig().color\" [shape]=\"avatarConfig().look\">\n @if (checkImageExists(comment.id!) && comment.author && extractInitials(comment.author) !== '?') {\n <ax-image (onError)=\"handleImageError(comment.id!)\" [src]=\"''\">\n <ax-loading></ax-loading>\n </ax-image>\n } @else {\n <ax-text>\n <span class=\"ax-text-base ax-overflow-hidden\">{{ extractInitials(comment.author) }}</span>\n </ax-text>\n }\n </ax-avatar>\n <ax-title>{{ extractInitials(comment.author) }}</ax-title>\n <ax-comment-date>{{ calcDefrenetTime(comment.createdAt) | format: 'timeleft' | async }} </ax-comment-date>\n <ax-comment-menu-options>\n <ax-button class=\"ax-sm\" look=\"blank\" color=\"neutral\">\n <ax-icon icon=\"ax-icon ax-icon-solid ax-icon-more-horizontal\"></ax-icon>\n </ax-button>\n\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item text=\"Edit\" color=\"neutral\" (click)=\"editMessage(comment)\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-edit\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n\n <ax-button-item text=\"Delete\" color=\"danger\" (click)=\"deleteComment(comment)\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-comment-menu-options>\n <ax-content [innerHTML]=\"sanitizeHtml(comment.message.content)\"></ax-content>\n <ax-comment-like (click)=\"toggleLike(comment)\" [liked]=\"comment.isLiked!\">\n {{ comment.reactionsCount }}\n </ax-comment-like>\n <ax-comment-reply-text (click)=\"replyMessage(comment)\"></ax-comment-reply-text>\n @for (reply of comment.replies; track reply.id) {\n <ax-comment-item [id]=\"reply.id\">\n <ax-avatar [color]=\"avatarConfig().color\" [shape]=\"avatarConfig().look\">\n @if (reply && checkImageExists(reply.id!) && reply.author && extractInitials(reply.author) !== '?') {\n <ax-image (onError)=\"handleImageError(reply.id!)\" [src]=\"''\">\n <ax-loading></ax-loading>\n </ax-image>\n } @else {\n <ax-text>\n <span class=\"ax-text-base ax-overflow-hidden\">{{ extractInitials(reply.author) }}</span>\n </ax-text>\n }\n </ax-avatar>\n <ax-title>{{ extractInitials(reply.author) }}</ax-title>\n <ax-comment-date>{{ calcDefrenetTime(reply.createdAt) | format: 'timeleft' | async }} </ax-comment-date>\n <ax-comment-menu-options>\n <ax-button class=\"ax-sm\" look=\"blank\" color=\"neutral\">\n <ax-icon icon=\"ax-icon ax-icon-solid ax-icon-more-horizontal\"></ax-icon>\n </ax-button>\n\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item text=\"Edit\" color=\"neutral\" (click)=\"editMessage(comment, reply)\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-edit\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item text=\"Delete\" color=\"danger\" (click)=\"deleteReply(comment, reply)\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-comment-menu-options>\n <ax-content [innerHTML]=\"sanitizeHtml(reply.message.content)\"></ax-content>\n <ax-comment-like (click)=\"toggleLike(comment, reply)\" [liked]=\"reply.isLiked!\">\n {{ reply.reactionsCount }}\n </ax-comment-like>\n <ax-comment-reply-text (click)=\"replyMessage(comment, reply)\"></ax-comment-reply-text>\n </ax-comment-item>\n }\n </ax-comment-item>\n }\n </ax-comment-view>\n } @else {\n <div>\n <div class=\"ax-flex ax-flex-col ax-gap-4 ax-justify-center ax-items-center ax-p-10\">\n <svg\n class=\"ax-mx-auto\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"154\"\n height=\"161\"\n viewBox=\"0 0 154 161\"\n fill=\"none\"\n >\n <path\n d=\"M0.0616455 84.4268C0.0616455 42.0213 34.435 7.83765 76.6507 7.83765C118.803 7.83765 153.224 42.0055 153.224 84.4268C153.224 102.42 147.026 118.974 136.622 132.034C122.282 150.138 100.367 161 76.6507 161C52.7759 161 30.9882 150.059 16.6633 132.034C6.25961 118.974 0.0616455 102.42 0.0616455 84.4268Z\"\n fill=\"#EEF2FF\"\n />\n <path\n d=\"M96.8189 0.632498L96.8189 0.632384L96.8083 0.630954C96.2034 0.549581 95.5931 0.5 94.9787 0.5H29.338C22.7112 0.5 17.3394 5.84455 17.3394 12.4473V142.715C17.3394 149.318 22.7112 154.662 29.338 154.662H123.948C130.591 154.662 135.946 149.317 135.946 142.715V38.9309C135.946 38.0244 135.847 37.1334 135.648 36.2586L135.648 36.2584C135.117 33.9309 133.874 31.7686 132.066 30.1333C132.066 30.1331 132.065 30.1329 132.065 30.1327L103.068 3.65203C103.068 3.6519 103.067 3.65177 103.067 3.65164C101.311 2.03526 99.1396 0.995552 96.8189 0.632498Z\"\n fill=\"white\"\n stroke=\"#E5E7EB\"\n />\n <ellipse cx=\"80.0618\" cy=\"81\" rx=\"28.0342\" ry=\"28.0342\" fill=\"#EEF2FF\" />\n <path\n d=\"M99.2393 61.3061L99.2391 61.3058C88.498 50.5808 71.1092 50.5804 60.3835 61.3061C49.6423 72.0316 49.6422 89.4361 60.3832 100.162C71.109 110.903 88.4982 110.903 99.2393 100.162C109.965 89.4363 109.965 72.0317 99.2393 61.3061ZM105.863 54.6832C120.249 69.0695 120.249 92.3985 105.863 106.785C91.4605 121.171 68.1468 121.171 53.7446 106.785C39.3582 92.3987 39.3582 69.0693 53.7446 54.683C68.1468 40.2965 91.4605 40.2966 105.863 54.6832Z\"\n stroke=\"#E5E7EB\"\n />\n <path\n d=\"M110.782 119.267L102.016 110.492C104.888 108.267 107.476 105.651 109.564 102.955L118.329 111.729L110.782 119.267Z\"\n stroke=\"#E5E7EB\"\n />\n <path\n d=\"M139.122 125.781L139.122 125.78L123.313 109.988C123.313 109.987 123.313 109.987 123.312 109.986C121.996 108.653 119.849 108.657 118.521 109.985L118.871 110.335L118.521 109.985L109.047 119.459C107.731 120.775 107.735 122.918 109.044 124.247L109.047 124.249L124.858 140.06C128.789 143.992 135.191 143.992 139.122 140.06C143.069 136.113 143.069 129.728 139.122 125.781Z\"\n fill=\"#A5B4FC\"\n stroke=\"#818CF8\"\n />\n <path\n d=\"M83.185 87.2285C82.5387 87.2285 82.0027 86.6926 82.0027 86.0305C82.0027 83.3821 77.9987 83.3821 77.9987 86.0305C77.9987 86.6926 77.4627 87.2285 76.8006 87.2285C76.1543 87.2285 75.6183 86.6926 75.6183 86.0305C75.6183 80.2294 84.3831 80.2451 84.3831 86.0305C84.3831 86.6926 83.8471 87.2285 83.185 87.2285Z\"\n fill=\"#4F46E5\"\n />\n <path\n d=\"M93.3528 77.0926H88.403C87.7409 77.0926 87.2049 76.5567 87.2049 75.8946C87.2049 75.2483 87.7409 74.7123 88.403 74.7123H93.3528C94.0149 74.7123 94.5509 75.2483 94.5509 75.8946C94.5509 76.5567 94.0149 77.0926 93.3528 77.0926Z\"\n fill=\"#4F46E5\"\n />\n <path\n d=\"M71.5987 77.0925H66.6488C65.9867 77.0925 65.4507 76.5565 65.4507 75.8945C65.4507 75.2481 65.9867 74.7122 66.6488 74.7122H71.5987C72.245 74.7122 72.781 75.2481 72.781 75.8945C72.781 76.5565 72.245 77.0925 71.5987 77.0925Z\"\n fill=\"#4F46E5\"\n />\n <rect x=\"38.3522\" y=\"21.5128\" width=\"41.0256\" height=\"2.73504\" rx=\"1.36752\" fill=\"#4F46E5\" />\n <rect x=\"38.3522\" y=\"133.65\" width=\"54.7009\" height=\"5.47009\" rx=\"2.73504\" fill=\"#A5B4FC\" />\n <rect x=\"38.3522\" y=\"29.7179\" width=\"13.6752\" height=\"2.73504\" rx=\"1.36752\" fill=\"#4F46E5\" />\n <circle cx=\"56.13\" cy=\"31.0854\" r=\"1.36752\" fill=\"#4F46E5\" />\n <circle cx=\"61.6001\" cy=\"31.0854\" r=\"1.36752\" fill=\"#4F46E5\" />\n <circle cx=\"67.0702\" cy=\"31.0854\" r=\"1.36752\" fill=\"#4F46E5\" />\n </svg>\n <div>\n <h2 class=\"ax-text-center ax-text-neutral-600 ax-font-semibold ax-leading-loose ax-pb-2\">\n There is no Comment!\n </h2>\n </div>\n </div>\n </div>\n }\n </ax-comment-container>\n <ax-form>\n <ax-form-field>\n <div>\n @if (isReplyingMode() || isEditingMode()) {\n <div\n class=\"ax-flex ax-justify-between ax-rounded-b-none ax-border ax-border-b-0 ax-rounded-lg ax-bg-on-surface ax-px-6 ax-py-3 ax-w-full ax-items-center ax-overflow-hidden ax-text-sm ax-leading-none\"\n >\n <div (click)=\"scrollMain()\" class=\"ax-flex ax-justify-start ax-items-center ax-cursor-pointer\">\n <i\n [class]=\"isReplyingMode() ? 'fa-reply' : 'fa-pen'\"\n class=\"fa-solid ax-text-primary-500 dark:ax-text-primary-300 ax-text-2xl ax-me-4\"\n ></i>\n <div\n class=\"ax-flex ax-flex-col ax-gap-2 ax-justify-between ax-align-middle ax-leading-4 ax-overflow-hidden\"\n >\n <p class=\"ax-text-primary-500 dark:ax-text-primary-300\">\n {{ isReplyingMode() ? 'Reply to ' : 'Edit Message' }}\n <span class=\"ax-font-bold\">\n {{ isReplyingMode() ? extractInitials(activeReplyComment()?.author) : '' }}\n </span>\n </p>\n <div\n class=\"ax-truncate\"\n [innerHTML]=\"\n isReplyingMode()\n ? sanitizeHtml(activeReplyComment()?.message?.content ?? '')\n : sanitizeHtml(activeEditComment()?.message?.content ?? '')\n \"\n ></div>\n </div>\n </div>\n <div><i (click)=\"resetReplyEditState()\" class=\"fa-solid ax-text-2xl fa-xmark ax-cursor-pointer\"></i></div>\n </div>\n }\n <ax-wysiwyg-container #w [look]=\"wysiwygOptions().look\" [(ngModel)]=\"commentContent\">\n <ax-wysiwyg-view class=\"ax-min-h-28\"></ax-wysiwyg-view>\n <ax-toolbar>\n <ax-content>\n <ax-wysiwyg-history></ax-wysiwyg-history>\n <ax-wysiwyg-font-style></ax-wysiwyg-font-style>\n <ax-wysiwyg-colors></ax-wysiwyg-colors>\n <ax-wysiwyg-list></ax-wysiwyg-list>\n <ax-wysiwyg-alignment></ax-wysiwyg-alignment>\n </ax-content>\n <ax-suffix>\n <ax-dropdown-button\n [disabled]=\"hasCooldown()\"\n type=\"submit\"\n color=\"primary\"\n mode=\"split\"\n text=\"Send\"\n (onClick)=\"submitComment()\"\n >\n @if (isSubmitting()) {\n <ax-loading></ax-loading>\n }\n <ax-button-item-list>\n <ax-button-item (click)=\"submitComment(true)\" text=\"Send Private ...\" name=\"private\" data=\"private\">\n <ax-prefix>\n <ax-icon icon=\"fa-regular fa-user-secret\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-button>\n </ax-suffix>\n </ax-toolbar>\n <ax-validation-rule rule=\"callback\" [options]=\"{ validate: validateContent }\"></ax-validation-rule>\n </ax-wysiwyg-container>\n </div>\n </ax-form-field>\n </ax-form>\n</div>\n","import { AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex/platform/layout/builder';\n\nexport const AXPCommentWidget: AXPWidgetConfig = {\n name: 'comment',\n title: 'Comments',\n description: 'Display and manage comments for entities',\n type: 'view',\n categories: [],\n groups: [AXPWidgetGroupEnum.FormElement],\n icon: 'fa-solid fa-comments',\n properties: [],\n components: {\n view: {\n component: () => import('./comment-widget-view.component').then((c) => c.AXMCommentWidgetViewComponent),\n },\n },\n};\n","import { AXResizableDirective } from '@acorex/cdk/resizable';\nimport { AXAvatarModule } from '@acorex/components/avatar';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCommentModule } from '@acorex/components/comment';\nimport { AXConversationModule } from '@acorex/components/conversation';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXImageModule } from '@acorex/components/image';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXToolBarModule } from '@acorex/components/toolbar';\nimport { AXWysiwygModule } from '@acorex/components/wysiwyg';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport {\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutStartSideComponent,\n AXPThemeLayoutToolbarComponent,\n} from '@acorex/platform/layout/components';\nimport { AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';\nimport { AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { AXPRootLayoutComponent } from '@acorex/platform/themes/default';\nimport { CommonModule } from '@angular/common';\nimport { NgModule, importProvidersFrom } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule, Routes } from '@angular/router';\nimport { AXMRoomService } from './entities';\nimport { AXMMessageService, AXMMessageServiceImpl } from './entities/message/message.service';\nimport { AXMRoomServiceImpl } from './entities/room/room.service';\nimport { AXMConversationModuleEntityProvider } from './entity.provider';\nimport {\n AXMChatComponent,\n AXMChatItemComponent,\n AXMChatPreviewComponent,\n AXMChatService,\n AXMChatServiceImpl,\n AXMCommentListViewComponent,\n AXMCommentService,\n AXMCommentServiceImpl,\n} from './features';\n\nconst routes: Routes = [\n {\n path: 'platform',\n component: AXPRootLayoutComponent,\n children: [\n {\n path: 'chat',\n component: AXMChatComponent,\n children: [\n {\n path: ':id',\n component: AXMChatPreviewComponent,\n },\n ],\n },\n {\n path: 'comments/m/:module/e/:id',\n component: AXMCommentListViewComponent,\n },\n ],\n },\n];\n\n@NgModule({\n declarations: [\n // Chat Components\n AXMChatComponent,\n AXMChatItemComponent,\n AXMChatPreviewComponent,\n // Comment Components\n AXMCommentListViewComponent,\n // Layout Components\n ],\n imports: [\n // Common Modules\n CommonModule,\n FormsModule,\n RouterModule.forChild(routes),\n // Acorex Core Modules\n AXFormatModule,\n AXConversationModule,\n AXCommentModule,\n AXTranslationModule,\n // Acorex Component Modules\n AXResizableDirective,\n AXImageModule,\n AXAvatarModule,\n AXBadgeModule,\n AXDecoratorModule,\n AXTextBoxModule,\n AXSearchBoxModule,\n AXTabsModule,\n AXButtonModule,\n AXLoadingModule,\n AXWysiwygModule,\n AXLabelModule,\n AXSelectBoxModule,\n AXFormModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXToolBarModule,\n AXSkeletonModule,\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutStartSideComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutToolbarComponent,\n ],\n exports: [\n // Chat Components\n AXMChatItemComponent,\n AXMChatPreviewComponent,\n // Comment Components\n AXMCommentListViewComponent,\n // Modules\n RouterModule,\n ],\n providers: [\n // Services\n {\n provide: AXMMessageService,\n useClass: AXMMessageServiceImpl,\n },\n {\n provide: AXMRoomService,\n useClass: AXMRoomServiceImpl,\n },\n // Chat and Comment Services\n {\n provide: AXMChatService,\n useClass: AXMChatServiceImpl,\n },\n {\n provide: AXMCommentService,\n useClass: AXMCommentServiceImpl,\n },\n // Entity Provider\n {\n provide: AXP_ENTITY_DEFINITION_LOADER,\n useClass: AXMConversationModuleEntityProvider,\n multi: true,\n },\n // Menu Provider\n // {\n // provide: AXP_MENU_PROVIDER,\n // useClass: AXMConversationMenuProvider,\n // multi: true,\n // },\n // Conversation Module\n importProvidersFrom(AXConversationModule.forRoot()),\n ],\n})\nexport class AXMConversationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i4","i5","i1","i2","i3","i8","i9","i12.AXMChatItemComponent","i6","i7","i10","i11","i12","i14"],"mappings":"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"}