@masterteam/notification 0.0.7 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/assets/i18n/ar.json
CHANGED
package/assets/i18n/en.json
CHANGED
|
@@ -948,7 +948,6 @@ class NotificationTemplate {
|
|
|
948
948
|
return;
|
|
949
949
|
this.confirmationService.confirm({
|
|
950
950
|
type: 'dialog',
|
|
951
|
-
header: this.transloco.translate('notification.deleteConfirmation'),
|
|
952
951
|
message: this.transloco.translate('notification.deleteTemplateMessage'),
|
|
953
952
|
icon: 'general.trash-01',
|
|
954
953
|
acceptButton: { severity: 'danger' },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"masterteam-notification.mjs","sources":["../../../../packages/masterteam/notification/src/lib/add-template-dialog/add-template-dialog.ts","../../../../packages/masterteam/notification/src/lib/add-template-dialog/add-template-dialog.html","../../../../packages/masterteam/notification/src/store/notification/notification.model.ts","../../../../packages/masterteam/notification/src/store/notification/notification.actions.ts","../../../../packages/masterteam/notification/src/store/notification/notification.state.ts","../../../../packages/masterteam/notification/src/store/notification/notification.facade.ts","../../../../packages/masterteam/notification/src/lib/notification-template/notification-template.ts","../../../../packages/masterteam/notification/src/lib/notification-template/notification-template.html","../../../../packages/masterteam/notification/src/store/app.state.ts","../../../../packages/masterteam/notification/src/masterteam-notification.ts"],"sourcesContent":["import { Component, inject, input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport { Button } from '@masterteam/components/button';\r\n\r\n@Component({\r\n selector: 'mt-add-template-dialog',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n TranslocoModule,\r\n TextField,\r\n Button,\r\n ],\r\n templateUrl: './add-template-dialog.html',\r\n})\r\nexport class AddTemplateDialog {\r\n readonly modalService = inject(ModalService);\r\n private readonly ref = inject(ModalRef);\r\n\r\n data = input<any>(null);\r\n\r\n templateNameControl = new FormControl<string>('', [Validators.required]);\r\n\r\n onSave(): void {\r\n if (this.templateNameControl.valid) {\r\n this.ref.close({ name: this.templateNameControl.value?.trim() });\r\n }\r\n }\r\n\r\n onCancel(): void {\r\n this.ref.close();\r\n }\r\n}\r\n","<div [class]=\"modalService.contentClass\" class=\"p-4\">\r\n <mt-text-field\r\n [formControl]=\"templateNameControl\"\r\n [label]=\"'notification.templateName' | transloco\"\r\n [placeholder]=\"'notification.enterTemplateName' | transloco\"\r\n [required]=\"true\"\r\n />\r\n</div>\r\n\r\n<div [class]=\"modalService.footerClass\">\r\n <mt-button\r\n [label]=\"'notification.cancel' | transloco\"\r\n severity=\"secondary\"\r\n (onClick)=\"onCancel()\"\r\n />\r\n <mt-button\r\n [label]=\"'notification.save' | transloco\"\r\n [disabled]=\"!templateNameControl.valid\"\r\n (onClick)=\"onSave()\"\r\n />\r\n</div>\r\n","import type { LoadingStateShape } from '@masterteam/components';\r\n\r\n// ============================================================================\r\n// Action Keys Enum\r\n// ============================================================================\r\nexport enum NotificationActionKey {\r\n GetEvents = 'getEvents',\r\n GetReceivers = 'getReceivers',\r\n GetProperties = 'getProperties',\r\n AddReceivers = 'addReceivers',\r\n DeleteReceiver = 'deleteReceiver',\r\n AddTemplate = 'addTemplate',\r\n UpdateTemplate = 'updateTemplate',\r\n DeleteTemplate = 'deleteTemplate',\r\n}\r\n\r\n// ============================================================================\r\n// Channel Types\r\n// ============================================================================\r\nexport type NotificationChannel = 'email' | 'sms' | 'app';\r\n\r\nexport interface ChannelConfig {\r\n key: NotificationChannel;\r\n labelKey: string;\r\n /** Whether this channel supports bilingual content */\r\n supportsBilingual: boolean;\r\n /** Whether bilingual is optional (true = show toggle) */\r\n bilingualOptional: boolean;\r\n /** Whether this channel uses rich text editor (false = textarea) */\r\n useRichEditor: boolean;\r\n /** Payload key for non-bilingual template (string value) */\r\n templateKey?: string;\r\n /** Payload key for bilingual template (object with en/ar) */\r\n translatableKey?: string;\r\n}\r\n\r\nexport const CHANNEL_CONFIGS: ChannelConfig[] = [\r\n {\r\n key: 'email',\r\n labelKey: 'notification.channel.email',\r\n supportsBilingual: true,\r\n bilingualOptional: true,\r\n useRichEditor: true,\r\n templateKey: 'emailTemplate',\r\n translatableKey: 'emailContentTranslatable',\r\n },\r\n {\r\n key: 'sms',\r\n labelKey: 'notification.channel.sms',\r\n supportsBilingual: false,\r\n bilingualOptional: false,\r\n useRichEditor: false,\r\n templateKey: 'SmsTemplate',\r\n },\r\n {\r\n key: 'app',\r\n labelKey: 'notification.channel.app',\r\n supportsBilingual: true,\r\n bilingualOptional: false,\r\n useRichEditor: true,\r\n translatableKey: 'appTemplate',\r\n },\r\n];\r\n\r\n/** Helper to get channel config by key */\r\nexport function getChannelConfig(key: NotificationChannel): ChannelConfig {\r\n return CHANNEL_CONFIGS.find((c) => c.key === key) ?? CHANNEL_CONFIGS[0];\r\n}\r\n\r\n/** Build form control name for a channel field */\r\nexport function getFormControlName(\r\n ch: ChannelConfig,\r\n type: 'single' | 'en' | 'ar',\r\n): string | null {\r\n if (type === 'single') return ch.templateKey ?? null;\r\n if (!ch.translatableKey) return null;\r\n return type === 'en'\r\n ? `${ch.translatableKey}.en`\r\n : `${ch.translatableKey}.ar`;\r\n}\r\n\r\n// ============================================================================\r\n// Translatable Content\r\n// ============================================================================\r\nexport interface TranslatableContent {\r\n en: string;\r\n ar: string;\r\n}\r\n\r\n// ============================================================================\r\n// Receiver Types\r\n// ============================================================================\r\nexport interface ReceiverItem {\r\n id: string | number;\r\n identifier: string;\r\n name: string;\r\n type: string;\r\n isSystem?: boolean;\r\n}\r\n\r\nexport interface ReceiverGroup {\r\n groupName: string;\r\n items: ReceiverItem[] | ReceiverSubGroup[];\r\n}\r\n\r\nexport interface ReceiverSubGroup {\r\n subGroupName: string;\r\n items: ReceiverItem[];\r\n}\r\n\r\n// ============================================================================\r\n// Property Types\r\n// ============================================================================\r\nexport interface NotificationProperty {\r\n key: string;\r\n name: string;\r\n groupName?: string;\r\n}\r\n\r\nexport interface PropertyGroup {\r\n groupName: string;\r\n properties: NotificationProperty[];\r\n}\r\n\r\n// ============================================================================\r\n// Template Types\r\n// ============================================================================\r\nexport interface NotificationTemplateItem {\r\n id: string | number;\r\n eventId: string | number; // Link to parent event\r\n name: string;\r\n isSystem: boolean;\r\n channel: NotificationChannel;\r\n receivers: ReceiverItem[];\r\n emailTemplate: string;\r\n emailContentTranslatable: TranslatableContent;\r\n smsTemplate: string;\r\n appTemplate: TranslatableContent;\r\n}\r\n\r\n// ============================================================================\r\n// Event Types\r\n// ============================================================================\r\nexport interface NotificationEvent {\r\n id: string | number;\r\n eventName: string;\r\n name: string;\r\n}\r\n\r\n// ============================================================================\r\n// Action Types (Workflow)\r\n// ============================================================================\r\nexport interface NotificationAction {\r\n id: string | number;\r\n name: string;\r\n type: string;\r\n}\r\n\r\nexport interface ActionGroup {\r\n activity: string;\r\n items: NotificationAction[];\r\n}\r\n\r\n// ============================================================================\r\n// Payloads\r\n// ============================================================================\r\nexport interface ReceiverPayloadItem {\r\n id: string | number;\r\n type: string;\r\n}\r\n\r\nexport interface AddReceiversPayload {\r\n receivers: ReceiverPayloadItem[];\r\n}\r\n\r\nexport interface AddTemplatePayload {\r\n name: string;\r\n channel: NotificationChannel;\r\n}\r\n\r\nexport interface UpdateTemplatePayload {\r\n name: string;\r\n [key: string]: string | TranslatableContent | undefined;\r\n}\r\n\r\n// ============================================================================\r\n// State Model\r\n// ============================================================================\r\nexport interface NotificationStateModel extends LoadingStateShape<NotificationActionKey> {\r\n // Module configuration\r\n moduleType: string | null;\r\n moduleId: string | number | null;\r\n parentModuleType: string | null;\r\n parentModuleId: string | number | null;\r\n parentPath: string;\r\n\r\n // Action mode (for workflow)\r\n isActionMode: boolean;\r\n selectedActionId: string | number | null;\r\n\r\n // Data collections\r\n events: NotificationEvent[];\r\n templates: NotificationTemplateItem[]; // Flattened templates\r\n actions: NotificationAction[];\r\n receivers: ReceiverItem[];\r\n propertyGroups: PropertyGroup[];\r\n\r\n // Selection state\r\n selectedEventName: string | null;\r\n selectedTemplateId: string | number | null;\r\n}\r\n","import type {\r\n AddReceiversPayload,\r\n AddTemplatePayload,\r\n UpdateTemplatePayload,\r\n} from './notification.model';\r\n\r\n// ============================================================================\r\n// Module Configuration\r\n// ============================================================================\r\nexport class SetModuleInfo {\r\n static readonly type = '[Notification] Set Module Info';\r\n constructor(\r\n public moduleType: string,\r\n public moduleId: string | number,\r\n public parentModuleType?: string,\r\n public parentModuleId?: string | number,\r\n public parentPath?: string,\r\n ) {}\r\n}\r\n\r\n// ============================================================================\r\n// Data Loading Actions\r\n// ============================================================================\r\nexport class GetEvents {\r\n static readonly type = '[Notification] Get Events';\r\n}\r\n\r\nexport class GetReceivers {\r\n static readonly type = '[Notification] Get Receivers';\r\n}\r\n\r\nexport class GetProperties {\r\n static readonly type = '[Notification] Get Properties';\r\n constructor(public isMultiLang?: boolean) {}\r\n}\r\n\r\n// ============================================================================\r\n// Action Mode (Workflow)\r\n// ============================================================================\r\nexport class SetActionMode {\r\n static readonly type = '[Notification] Set Action Mode';\r\n constructor(public actionId: string | number | null) {}\r\n}\r\n\r\nexport class GetActionReceivers {\r\n static readonly type = '[Notification] Get Action Receivers';\r\n constructor(public actionId: string | number) {}\r\n}\r\n\r\nexport class GetActionProperties {\r\n static readonly type = '[Notification] Get Action Properties';\r\n constructor(\r\n public actionId: string | number,\r\n public isMultiLang?: boolean,\r\n ) {}\r\n}\r\n\r\n// ============================================================================\r\n// Selection Actions\r\n// ============================================================================\r\nexport class SelectEvent {\r\n static readonly type = '[Notification] Select Event';\r\n constructor(public eventName: string) {}\r\n}\r\n\r\nexport class SelectTemplate {\r\n static readonly type = '[Notification] Select Template';\r\n constructor(public templateId: string | number) {}\r\n}\r\n\r\n// ============================================================================\r\n// Receiver CRUD\r\n// ============================================================================\r\nexport class AddReceivers {\r\n static readonly type = '[Notification] Add Receivers';\r\n constructor(\r\n public templateId: string | number,\r\n public payload: AddReceiversPayload,\r\n ) {}\r\n}\r\n\r\nexport class DeleteReceiver {\r\n static readonly type = '[Notification] Delete Receiver';\r\n constructor(public receiverId: string | number) {}\r\n}\r\n\r\n// ============================================================================\r\n// Template CRUD\r\n// ============================================================================\r\nexport class AddTemplate {\r\n static readonly type = '[Notification] Add Template';\r\n constructor(\r\n public eventId: string | number,\r\n public payload: AddTemplatePayload,\r\n ) {}\r\n}\r\n\r\nexport class UpdateTemplate {\r\n static readonly type = '[Notification] Update Template';\r\n constructor(\r\n public templateId: string | number,\r\n public payload: UpdateTemplatePayload,\r\n ) {}\r\n}\r\n\r\nexport class DeleteTemplate {\r\n static readonly type = '[Notification] Delete Template';\r\n constructor(public templateId: string | number) {}\r\n}\r\n\r\n// ============================================================================\r\n// Reset State\r\n// ============================================================================\r\nexport class ResetNotificationState {\r\n static readonly type = '[Notification] Reset State';\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\r\nimport {\r\n CrudStateBase,\r\n handleApiRequest,\r\n Response,\r\n} from '@masterteam/components';\r\n\r\nimport {\r\n NotificationActionKey,\r\n NotificationStateModel,\r\n NotificationEvent,\r\n NotificationTemplateItem,\r\n ReceiverItem,\r\n ReceiverGroup,\r\n ReceiverSubGroup,\r\n PropertyGroup,\r\n} from './notification.model';\r\nimport {\r\n AddReceivers,\r\n AddTemplate,\r\n DeleteReceiver,\r\n DeleteTemplate,\r\n GetActionProperties,\r\n GetActionReceivers,\r\n GetEvents,\r\n GetProperties,\r\n GetReceivers,\r\n ResetNotificationState,\r\n SelectEvent,\r\n SelectTemplate,\r\n SetActionMode,\r\n SetModuleInfo,\r\n UpdateTemplate,\r\n} from './notification.actions';\r\n\r\n// Default State\r\n\r\nconst DEFAULT_STATE: NotificationStateModel = {\r\n // Module configuration\r\n moduleType: null,\r\n moduleId: null,\r\n parentModuleType: null,\r\n parentModuleId: null,\r\n parentPath: '',\r\n\r\n // Action mode\r\n isActionMode: false,\r\n selectedActionId: null,\r\n\r\n // Data collections\r\n events: [],\r\n templates: [], // Flattened templates\r\n actions: [],\r\n receivers: [],\r\n propertyGroups: [],\r\n\r\n // Selection state\r\n selectedEventName: null,\r\n selectedTemplateId: null,\r\n\r\n // Loading state (from LoadingStateShape)\r\n loadingActive: [],\r\n errors: {},\r\n};\r\n\r\n// State Definition\r\n\r\n@State<NotificationStateModel>({\r\n name: 'notification',\r\n defaults: DEFAULT_STATE,\r\n})\r\n@Injectable()\r\nexport class NotificationState extends CrudStateBase<\r\n NotificationTemplateItem,\r\n NotificationStateModel,\r\n NotificationActionKey\r\n> {\r\n private readonly http = inject(HttpClient);\r\n private readonly baseUrl = 'notifications';\r\n\r\n // Selectors - Individual selectors for fine-grained reactivity\r\n @Selector()\r\n static getState(state: NotificationStateModel): NotificationStateModel {\r\n return state;\r\n }\r\n\r\n @Selector()\r\n static getEvents(state: NotificationStateModel): NotificationEvent[] {\r\n return state.events;\r\n }\r\n\r\n @Selector()\r\n static getTemplates(\r\n state: NotificationStateModel,\r\n ): NotificationTemplateItem[] {\r\n return state.templates;\r\n }\r\n\r\n @Selector()\r\n static getReceivers(state: NotificationStateModel): ReceiverItem[] {\r\n return state.receivers;\r\n }\r\n\r\n @Selector()\r\n static getPropertyGroups(state: NotificationStateModel): PropertyGroup[] {\r\n return state.propertyGroups;\r\n }\r\n\r\n @Selector()\r\n static getSelectedEventName(state: NotificationStateModel): string | null {\r\n return state.selectedEventName;\r\n }\r\n\r\n @Selector()\r\n static getSelectedTemplateId(\r\n state: NotificationStateModel,\r\n ): string | number | null {\r\n return state.selectedTemplateId;\r\n }\r\n\r\n @Selector()\r\n static getLoadingActive(state: NotificationStateModel): string[] {\r\n return state.loadingActive;\r\n }\r\n\r\n @Selector()\r\n static getErrors(\r\n state: NotificationStateModel,\r\n ): Record<string, string | null> {\r\n return state.errors;\r\n }\r\n\r\n // Derived selectors\r\n @Selector([\r\n NotificationState.getEvents,\r\n NotificationState.getSelectedEventName,\r\n ])\r\n static getSelectedEvent(\r\n events: NotificationEvent[],\r\n selectedEventName: string | null,\r\n ): NotificationEvent | null {\r\n return events.find((e) => e.eventName === selectedEventName) ?? null;\r\n }\r\n\r\n @Selector([\r\n NotificationState.getTemplates,\r\n NotificationState.getSelectedEvent,\r\n ])\r\n static getEventTemplates(\r\n templates: NotificationTemplateItem[],\r\n selectedEvent: NotificationEvent | null,\r\n ): NotificationTemplateItem[] {\r\n if (!selectedEvent) return [];\r\n return templates.filter((t) => t.eventId === selectedEvent.id);\r\n }\r\n\r\n @Selector([\r\n NotificationState.getTemplates,\r\n NotificationState.getSelectedTemplateId,\r\n ])\r\n static getSelectedTemplate(\r\n templates: NotificationTemplateItem[],\r\n selectedTemplateId: string | number | null,\r\n ): NotificationTemplateItem | null {\r\n return templates.find((t) => t.id === selectedTemplateId) ?? null;\r\n }\r\n\r\n @Selector([\r\n NotificationState.getReceivers,\r\n NotificationState.getSelectedTemplate,\r\n ])\r\n static getAvailableReceivers(\r\n receivers: ReceiverItem[],\r\n selectedTemplate: NotificationTemplateItem | null,\r\n ): ReceiverItem[] {\r\n if (!selectedTemplate) return receivers;\r\n const templateReceivers = selectedTemplate.receivers ?? [];\r\n const assignedIds = new Set(templateReceivers.map((r) => r.identifier));\r\n return receivers.filter((r) => !assignedIds.has(String(r.id)));\r\n }\r\n\r\n // Helper Methods\r\n\r\n /** API returns events with nested templates - we flatten for state */\r\n private flattenEventsResponse(\r\n eventsWithTemplates: Array<\r\n NotificationEvent & { templates: NotificationTemplateItem[] }\r\n >,\r\n ): { events: NotificationEvent[]; templates: NotificationTemplateItem[] } {\r\n const events: NotificationEvent[] = [];\r\n const templates: NotificationTemplateItem[] = [];\r\n\r\n for (const event of eventsWithTemplates) {\r\n const { templates: eventTemplates, ...eventData } = event;\r\n events.push(eventData);\r\n templates.push(\r\n ...eventTemplates.map((t) => ({ ...t, eventId: event.id })),\r\n );\r\n }\r\n\r\n return { events, templates };\r\n }\r\n\r\n private flattenReceivers(groups: ReceiverGroup[]): ReceiverItem[] {\r\n const result: ReceiverItem[] = [];\r\n for (const group of groups) {\r\n for (const item of group.items) {\r\n if ('subGroupName' in item) {\r\n // Handle subgroups (role-based receivers)\r\n const subGroup = item as ReceiverSubGroup;\r\n result.push(\r\n ...subGroup.items.map((r) => ({\r\n ...r,\r\n name: `${subGroup.subGroupName} - ${r.name}`,\r\n })),\r\n );\r\n } else {\r\n result.push(item as ReceiverItem);\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n // Module Configuration\r\n\r\n @Action(SetModuleInfo)\r\n setModuleInfo(\r\n ctx: StateContext<NotificationStateModel>,\r\n action: SetModuleInfo,\r\n ) {\r\n let parentPath = '';\r\n if (action.parentModuleType && action.parentModuleId) {\r\n parentPath = `/${action.parentModuleType}/${action.parentModuleId}`;\r\n } else if (action.parentPath) {\r\n parentPath = action.parentPath;\r\n }\r\n\r\n ctx.patchState({\r\n moduleType: action.moduleType,\r\n moduleId: action.moduleId,\r\n parentModuleType: action.parentModuleType ?? null,\r\n parentModuleId: action.parentModuleId ?? null,\r\n parentPath,\r\n isActionMode: action.moduleType === 'workflow',\r\n });\r\n }\r\n\r\n @Action(ResetNotificationState)\r\n resetState(ctx: StateContext<NotificationStateModel>) {\r\n ctx.setState(DEFAULT_STATE);\r\n }\r\n\r\n // Data Loading Actions (Normal Mode)\r\n\r\n @Action(GetEvents)\r\n getEvents(ctx: StateContext<NotificationStateModel>) {\r\n const { moduleType, moduleId, parentPath } = ctx.getState();\r\n // API returns events with nested templates\r\n type EventWithTemplates = NotificationEvent & {\r\n templates: NotificationTemplateItem[];\r\n };\r\n const req$ = this.http.get<Response<EventWithTemplates[]>>(\r\n `${this.baseUrl}${parentPath}/${moduleType}/${moduleId}/events`,\r\n );\r\n\r\n return this.load(ctx, {\r\n key: NotificationActionKey.GetEvents,\r\n request$: req$,\r\n updateState: (_state, data) => {\r\n const { events, templates } = this.flattenEventsResponse(data ?? []);\r\n const firstTemplate = templates[0];\r\n const firstEvent = events.find((e) => e.id === firstTemplate?.eventId);\r\n return {\r\n events,\r\n templates,\r\n selectedEventName: firstEvent?.eventName ?? null,\r\n selectedTemplateId: firstTemplate?.id ?? null,\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(GetReceivers)\r\n getReceivers(ctx: StateContext<NotificationStateModel>) {\r\n const { parentPath, moduleType, moduleId } = ctx.getState();\r\n const req$ = this.http.get<Response<ReceiverGroup[]>>(\r\n `${this.baseUrl}${parentPath}/${moduleType}/${moduleId}/receivers`,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: NotificationActionKey.GetReceivers,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n receivers: this.flattenReceivers(response.data ?? []),\r\n }),\r\n });\r\n }\r\n\r\n @Action(GetProperties)\r\n getProperties(\r\n ctx: StateContext<NotificationStateModel>,\r\n action: GetProperties,\r\n ) {\r\n const { moduleType, moduleId, parentPath } = ctx.getState();\r\n const url = action.isMultiLang\r\n ? `${this.baseUrl}${parentPath}/${moduleType}/${moduleId}/properties?IsMultiLanguageEnabled=true`\r\n : `${this.baseUrl}${parentPath}/${moduleType}/${moduleId}/properties`;\r\n\r\n const req$ = this.http.get<Response<PropertyGroup[]>>(url);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: NotificationActionKey.GetProperties,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n propertyGroups: response.data ?? [],\r\n }),\r\n });\r\n }\r\n\r\n // Action Mode (Workflow)\r\n\r\n @Action(SetActionMode)\r\n setActionMode(\r\n ctx: StateContext<NotificationStateModel>,\r\n action: SetActionMode,\r\n ) {\r\n ctx.patchState({\r\n selectedActionId: action.actionId,\r\n });\r\n }\r\n\r\n @Action(GetActionReceivers)\r\n getActionReceivers(\r\n ctx: StateContext<NotificationStateModel>,\r\n action: GetActionReceivers,\r\n ) {\r\n const req$ = this.http.get<Response<ReceiverGroup[]>>(\r\n `${this.baseUrl}/action/${action.actionId}/receivers`,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: NotificationActionKey.GetReceivers,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n receivers: this.flattenReceivers(response.data ?? []),\r\n }),\r\n });\r\n }\r\n\r\n @Action(GetActionProperties)\r\n getActionProperties(\r\n ctx: StateContext<NotificationStateModel>,\r\n action: GetActionProperties,\r\n ) {\r\n const url = action.isMultiLang\r\n ? `${this.baseUrl}/action/${action.actionId}/properties?IsMultiLanguageEnabled=true`\r\n : `${this.baseUrl}/action/${action.actionId}/properties`;\r\n\r\n const req$ = this.http.get<Response<PropertyGroup[]>>(url);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: NotificationActionKey.GetProperties,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n propertyGroups: response.data ?? [],\r\n }),\r\n });\r\n }\r\n\r\n // Selection Actions\r\n\r\n @Action(SelectEvent)\r\n selectEvent(ctx: StateContext<NotificationStateModel>, action: SelectEvent) {\r\n const state = ctx.getState();\r\n const event = state.events.find((e) => e.eventName === action.eventName);\r\n const eventTemplates = state.templates.filter(\r\n (t) => t.eventId === event?.id,\r\n );\r\n ctx.patchState({\r\n selectedEventName: action.eventName,\r\n selectedTemplateId: eventTemplates[0]?.id ?? null,\r\n });\r\n }\r\n\r\n @Action(SelectTemplate)\r\n selectTemplate(\r\n ctx: StateContext<NotificationStateModel>,\r\n action: SelectTemplate,\r\n ) {\r\n ctx.patchState({ selectedTemplateId: action.templateId });\r\n }\r\n\r\n // Receiver CRUD\r\n @Action(AddReceivers)\r\n addReceivers(\r\n ctx: StateContext<NotificationStateModel>,\r\n action: AddReceivers,\r\n ) {\r\n const req$ = this.http.post<Response<ReceiverItem[]>>(\r\n `${this.baseUrl}/templates/${action.templateId}`,\r\n action.payload,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: NotificationActionKey.AddReceivers,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const newReceivers = response.data ?? [];\r\n const templates = this.adapter.updateOne(\r\n state.templates,\r\n action.templateId,\r\n {\r\n receivers: [\r\n ...(state.templates.find((t) => t.id === action.templateId)\r\n ?.receivers ?? []),\r\n ...newReceivers,\r\n ],\r\n },\r\n 'id',\r\n );\r\n return { templates };\r\n },\r\n });\r\n }\r\n\r\n @Action(DeleteReceiver)\r\n deleteReceiver(\r\n ctx: StateContext<NotificationStateModel>,\r\n action: DeleteReceiver,\r\n ) {\r\n const state = ctx.getState();\r\n const template = this.getSelectedTemplate(state);\r\n\r\n if (!template) {\r\n return;\r\n }\r\n\r\n const req$ = this.http.delete<Response<void>>(\r\n `${this.baseUrl}/receivers/${action.receiverId}`,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: NotificationActionKey.DeleteReceiver,\r\n request$: req$,\r\n onSuccess: (_, currentState) => {\r\n const templates = this.adapter.updateOne(\r\n currentState.templates,\r\n template.id,\r\n {\r\n receivers: template.receivers.filter(\r\n (r) => r.id !== action.receiverId,\r\n ),\r\n },\r\n 'id',\r\n );\r\n return { templates };\r\n },\r\n });\r\n }\r\n\r\n // Template CRUD\r\n @Action(AddTemplate)\r\n addTemplate(ctx: StateContext<NotificationStateModel>, action: AddTemplate) {\r\n const req$ = this.http.post<Response<NotificationTemplateItem>>(\r\n `${this.baseUrl}/events/${action.eventId}`,\r\n action.payload,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: NotificationActionKey.AddTemplate,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const newTemplate = response.data;\r\n if (!newTemplate) return {};\r\n\r\n return {\r\n templates: this.adapter.addOne(state.templates, {\r\n ...newTemplate,\r\n eventId: action.eventId,\r\n }),\r\n selectedTemplateId: newTemplate.id,\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(UpdateTemplate)\r\n updateTemplate(\r\n ctx: StateContext<NotificationStateModel>,\r\n action: UpdateTemplate,\r\n ) {\r\n const req$ = this.http.put<Response<NotificationTemplateItem>>(\r\n `${this.baseUrl}/templates/${action.templateId}`,\r\n action.payload,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: NotificationActionKey.UpdateTemplate,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const updatedTemplate = response.data;\r\n if (!updatedTemplate) return {};\r\n\r\n // Preserve existing fields that API may not return or shouldn't change\r\n const existingTemplate = state.templates.find(\r\n (t) => t.id === action.templateId,\r\n );\r\n\r\n if (!existingTemplate) return {};\r\n\r\n // Only update name and content fields, preserve channel/eventId/receivers\r\n const templates = this.adapter.upsertOne(\r\n state.templates,\r\n {\r\n ...existingTemplate,\r\n name: updatedTemplate.name,\r\n emailTemplate: updatedTemplate.emailTemplate,\r\n emailContentTranslatable: updatedTemplate.emailContentTranslatable,\r\n smsTemplate: updatedTemplate.smsTemplate,\r\n appTemplate: updatedTemplate.appTemplate,\r\n },\r\n 'id',\r\n );\r\n return { templates };\r\n },\r\n });\r\n }\r\n\r\n @Action(DeleteTemplate)\r\n deleteTemplate(\r\n ctx: StateContext<NotificationStateModel>,\r\n action: DeleteTemplate,\r\n ) {\r\n const req$ = this.http.delete<Response<void>>(\r\n `${this.baseUrl}/templates/${action.templateId}`,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: NotificationActionKey.DeleteTemplate,\r\n request$: req$,\r\n onSuccess: (_, state) => {\r\n const templates = this.adapter.removeOne(\r\n state.templates,\r\n action.templateId,\r\n 'id',\r\n );\r\n\r\n // Select first template of current event after deletion\r\n const currentEvent = state.events.find(\r\n (e) => e.eventName === state.selectedEventName,\r\n );\r\n const eventTemplates = templates.filter(\r\n (t) => t.eventId === currentEvent?.id,\r\n );\r\n const systemTemplate = eventTemplates.find((t) => t.isSystem);\r\n\r\n return {\r\n templates,\r\n selectedTemplateId:\r\n systemTemplate?.id ?? eventTemplates[0]?.id ?? null,\r\n };\r\n },\r\n });\r\n }\r\n\r\n // Private Helpers\r\n private getSelectedTemplate(\r\n state: NotificationStateModel,\r\n ): NotificationTemplateItem | null {\r\n return (\r\n state.templates.find((t) => t.id === state.selectedTemplateId) ?? null\r\n );\r\n }\r\n}\r\n","import { Injectable, Signal, inject } from '@angular/core';\r\nimport { Store, select } from '@ngxs/store';\r\nimport { BaseFacade } from '@masterteam/components';\r\n\r\nimport {\r\n NotificationActionKey,\r\n NotificationStateModel,\r\n AddReceiversPayload,\r\n AddTemplatePayload,\r\n UpdateTemplatePayload,\r\n} from './notification.model';\r\nimport {\r\n AddReceivers,\r\n AddTemplate,\r\n DeleteReceiver,\r\n DeleteTemplate,\r\n GetActionProperties,\r\n GetActionReceivers,\r\n GetEvents,\r\n GetProperties,\r\n GetReceivers,\r\n ResetNotificationState,\r\n SelectEvent,\r\n SelectTemplate,\r\n SetActionMode,\r\n SetModuleInfo,\r\n UpdateTemplate,\r\n} from './notification.actions';\r\nimport { NotificationState } from './notification.state';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NotificationFacade extends BaseFacade<\r\n NotificationStateModel,\r\n NotificationActionKey\r\n> {\r\n private readonly store = inject(Store);\r\n\r\n // Selectors - Direct signals from state (fine-grained reactivity)\r\n private readonly stateSignal = select(NotificationState.getState);\r\n\r\n // Data selectors\r\n readonly events = select(NotificationState.getEvents);\r\n readonly templates = select(NotificationState.getEventTemplates);\r\n readonly receivers = select(NotificationState.getReceivers);\r\n readonly propertyGroups = select(NotificationState.getPropertyGroups);\r\n\r\n // Selection selectors\r\n readonly selectedEventName = select(NotificationState.getSelectedEventName);\r\n readonly selectedTemplateId = select(NotificationState.getSelectedTemplateId);\r\n readonly selectedEvent = select(NotificationState.getSelectedEvent);\r\n readonly selectedTemplate = select(NotificationState.getSelectedTemplate);\r\n readonly availableReceivers = select(NotificationState.getAvailableReceivers);\r\n\r\n // Required by BaseFacade\r\n protected state(): Signal<NotificationStateModel> {\r\n return this.stateSignal;\r\n }\r\n\r\n // Query Pattern (data + loading + error combined)\r\n readonly eventsQuery = this.query(\r\n NotificationActionKey.GetEvents,\r\n (state) => state.events,\r\n );\r\n\r\n readonly receiversQuery = this.query(\r\n NotificationActionKey.GetReceivers,\r\n (state) => state.receivers,\r\n );\r\n\r\n readonly propertyGroupsQuery = this.query(\r\n NotificationActionKey.GetProperties,\r\n (state) => state.propertyGroups,\r\n );\r\n\r\n // Loading/Error for CRUD operations (not covered by queries)\r\n readonly isAddingReceivers = this.loading(NotificationActionKey.AddReceivers);\r\n readonly isDeletingReceiver = this.loading(\r\n NotificationActionKey.DeleteReceiver,\r\n );\r\n readonly isAddingTemplate = this.loading(NotificationActionKey.AddTemplate);\r\n readonly isUpdatingTemplate = this.loading(\r\n NotificationActionKey.UpdateTemplate,\r\n );\r\n readonly isDeletingTemplate = this.loading(\r\n NotificationActionKey.DeleteTemplate,\r\n );\r\n\r\n // Action Dispatchers - Configuration\r\n setModuleInfo(\r\n moduleType: string,\r\n moduleId: string | number,\r\n parentModuleType?: string,\r\n parentModuleId?: string | number,\r\n parentPath?: string,\r\n ) {\r\n return this.store.dispatch(\r\n new SetModuleInfo(\r\n moduleType,\r\n moduleId,\r\n parentModuleType,\r\n parentModuleId,\r\n parentPath,\r\n ),\r\n );\r\n }\r\n\r\n resetState() {\r\n return this.store.dispatch(new ResetNotificationState());\r\n }\r\n\r\n // Action Dispatchers - Data Loading\r\n loadEvents() {\r\n return this.store.dispatch(new GetEvents());\r\n }\r\n\r\n loadReceivers() {\r\n return this.store.dispatch(new GetReceivers());\r\n }\r\n\r\n loadProperties(isMultiLang?: boolean) {\r\n return this.store.dispatch(new GetProperties(isMultiLang));\r\n }\r\n\r\n // Action Dispatchers - Action Mode (Workflow)\r\n setActionMode(actionId: string | number | null) {\r\n return this.store.dispatch(new SetActionMode(actionId));\r\n }\r\n\r\n loadActionReceivers(actionId: string | number) {\r\n return this.store.dispatch(new GetActionReceivers(actionId));\r\n }\r\n\r\n loadActionProperties(actionId: string | number, isMultiLang?: boolean) {\r\n return this.store.dispatch(new GetActionProperties(actionId, isMultiLang));\r\n }\r\n\r\n // Action Dispatchers - Selection\r\n selectEvent(eventName: string) {\r\n return this.store.dispatch(new SelectEvent(eventName));\r\n }\r\n\r\n selectTemplate(templateId: string | number) {\r\n return this.store.dispatch(new SelectTemplate(templateId));\r\n }\r\n\r\n // Action Dispatchers - Receiver CRUD\r\n addReceivers(templateId: string | number, payload: AddReceiversPayload) {\r\n return this.store.dispatch(new AddReceivers(templateId, payload));\r\n }\r\n\r\n deleteReceiver(receiverId: string | number) {\r\n return this.store.dispatch(new DeleteReceiver(receiverId));\r\n }\r\n\r\n // Action Dispatchers - Template CRUD\r\n\r\n addTemplate(eventId: string | number, payload: AddTemplatePayload) {\r\n return this.store.dispatch(new AddTemplate(eventId, payload));\r\n }\r\n\r\n updateTemplate(templateId: string | number, payload: UpdateTemplatePayload) {\r\n return this.store.dispatch(new UpdateTemplate(templateId, payload));\r\n }\r\n\r\n deleteTemplate(templateId: string | number) {\r\n return this.store.dispatch(new DeleteTemplate(templateId));\r\n }\r\n\r\n /**\r\n * Load all data for normal mode (non-workflow)\r\n */\r\n loadAllData(isMultiLang = true) {\r\n this.loadEvents();\r\n this.loadReceivers();\r\n this.loadProperties(isMultiLang);\r\n }\r\n}\r\n","import { Avatar } from '@masterteam/components/avatar';\r\nimport {\r\n Component,\r\n ChangeDetectionStrategy,\r\n inject,\r\n signal,\r\n computed,\r\n effect,\r\n untracked,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { TranslocoModule, TranslocoService } from '@jsverse/transloco';\r\n\r\n// Components\r\nimport { Card } from '@masterteam/components/card';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { SelectField } from '@masterteam/components/select-field';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport { TextareaField } from '@masterteam/components/textarea-field';\r\nimport { EditorField } from '@masterteam/components/editor-field';\r\nimport { ToggleField } from '@masterteam/components/toggle-field';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { Skeleton } from 'primeng/skeleton';\r\n\r\n// Dialog\r\nimport { AddTemplateDialog } from '../add-template-dialog/add-template-dialog';\r\n\r\n// Store\r\nimport {\r\n NotificationFacade,\r\n NotificationChannel,\r\n NotificationTemplateItem,\r\n ReceiverItem,\r\n UpdateTemplatePayload,\r\n CHANNEL_CONFIGS,\r\n ChannelConfig,\r\n getChannelConfig,\r\n} from '../../store/notification';\r\n\r\n@Component({\r\n selector: 'mt-notification-template',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n TranslocoModule,\r\n Card,\r\n Button,\r\n SelectField,\r\n TextField,\r\n TextareaField,\r\n EditorField,\r\n ToggleField,\r\n Tabs,\r\n Icon,\r\n Skeleton,\r\n Avatar,\r\n ],\r\n templateUrl: './notification-template.html',\r\n styleUrl: './notification-template.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NotificationTemplate {\r\n private readonly facade = inject(NotificationFacade);\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly modalService = inject(ModalService);\r\n\r\n // ============================================================================\r\n // Queries from Facade\r\n // ============================================================================\r\n readonly eventsQuery = this.facade.eventsQuery;\r\n readonly propertyGroupsQuery = this.facade.propertyGroupsQuery;\r\n readonly receiversQuery = this.facade.receiversQuery;\r\n\r\n // ============================================================================\r\n // Derived State from Facade\r\n // ============================================================================\r\n readonly selectedEventName = this.facade.selectedEventName;\r\n readonly selectedTemplateId = this.facade.selectedTemplateId;\r\n readonly selectedEvent = this.facade.selectedEvent;\r\n readonly selectedTemplate = this.facade.selectedTemplate;\r\n readonly templates = this.facade.templates;\r\n readonly availableReceivers = this.facade.availableReceivers;\r\n\r\n // Loading States\r\n readonly isUpdatingTemplate = this.facade.isUpdatingTemplate;\r\n readonly isDeletingTemplate = this.facade.isDeletingTemplate;\r\n readonly isAddingTemplate = this.facade.isAddingTemplate;\r\n\r\n // ============================================================================\r\n // Local State\r\n // ============================================================================\r\n readonly deletingReceiverIds = signal<(string | number)[]>([]);\r\n\r\n // ============================================================================\r\n // Form - Dynamic controls based on CHANNEL_CONFIGS\r\n // ============================================================================\r\n readonly form = this.buildForm();\r\n readonly propertyPickerControl = new FormControl<string | null>(null);\r\n private buildForm(): FormGroup {\r\n const fc = (v = '') => new FormControl<string>(v, { nonNullable: true });\r\n const controls: Record<string, FormControl | FormGroup> = {\r\n event: new FormControl<string | null>(null),\r\n name: fc(),\r\n channel: new FormControl<NotificationChannel>('email', {\r\n nonNullable: true,\r\n }),\r\n };\r\n\r\n for (const ch of CHANNEL_CONFIGS) {\r\n if (ch.templateKey) controls[ch.templateKey] = fc();\r\n if (ch.translatableKey) {\r\n // Nested FormGroup to match payload structure { en: '', ar: '' }\r\n controls[ch.translatableKey] = new FormGroup({\r\n en: fc(),\r\n ar: fc(),\r\n });\r\n }\r\n if (ch.bilingualOptional) {\r\n controls[`${ch.key}Bilingual`] = new FormControl<boolean>(false, {\r\n nonNullable: true,\r\n });\r\n }\r\n }\r\n return new FormGroup(controls);\r\n }\r\n\r\n // ============================================================================\r\n // Computed\r\n // ============================================================================\r\n readonly channelConfigs = CHANNEL_CONFIGS;\r\n\r\n /** Check if channel should show bilingual fields - reads from form */\r\n isBilingual(ch: ChannelConfig): boolean {\r\n if (!ch.supportsBilingual) return false;\r\n if (!ch.bilingualOptional) return true; // forced bilingual (app)\r\n return this.form.controls[`${ch.key}Bilingual`]?.value ?? false;\r\n }\r\n\r\n readonly channelOptions = computed(() =>\r\n CHANNEL_CONFIGS.map((c) => ({\r\n ...c,\r\n name: this.transloco.translate(c.labelKey),\r\n })),\r\n );\r\n\r\n readonly templateTabs = computed(() =>\r\n this.templates().map((t) => ({\r\n label: t.name,\r\n value: t.id,\r\n isSystem: t.isSystem,\r\n })),\r\n );\r\n\r\n readonly isFormInvalid = computed(\r\n () => !this.form.controls['name'].value?.trim(),\r\n );\r\n\r\n constructor() {\r\n effect(() => {\r\n const eventName = this.selectedEventName();\r\n if (eventName && this.form.controls['event'].value !== eventName) {\r\n this.form.controls['event'].setValue(eventName, { emitEvent: false });\r\n }\r\n });\r\n\r\n effect(() => {\r\n this.selectedTemplateId(); // depend on selected template id\r\n const template = untracked(this.selectedTemplate);\r\n if (template) this.patchForm(template);\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // Event Handlers\r\n // ============================================================================\r\n onEventChange(eventName: string): void {\r\n if (eventName) this.facade.selectEvent(eventName);\r\n }\r\n\r\n onTemplateTabChange(templateId: string): void {\r\n this.facade.selectTemplate(templateId);\r\n }\r\n\r\n // Channel is fixed per template - set on creation only\r\n\r\n onAddProperty(propertyKey: string): void {\r\n if (!propertyKey) return;\r\n\r\n const tag = `{{${propertyKey}}}`;\r\n const ch = getChannelConfig(this.form.controls['channel'].value);\r\n\r\n if (this.isBilingual(ch) && ch.translatableKey) {\r\n const group = this.form.get(ch.translatableKey) as FormGroup;\r\n if (group) {\r\n const enCtrl = group.get('en') as FormControl<string>;\r\n const arCtrl = group.get('ar') as FormControl<string>;\r\n enCtrl?.setValue(`${enCtrl.value ?? ''} ${tag}`);\r\n arCtrl?.setValue(`${arCtrl.value ?? ''} ${tag}`);\r\n }\r\n } else if (ch.templateKey) {\r\n this.appendToControl(ch.templateKey, tag);\r\n }\r\n\r\n setTimeout(() => {\r\n this.propertyPickerControl.reset();\r\n }, 0);\r\n }\r\n\r\n onAddReceiver(receiverId: string | number): void {\r\n const template = this.selectedTemplate();\r\n if (!receiverId || !template) return;\r\n const selectedReceiver = this.availableReceivers().find(\r\n (r) => r.id === receiverId,\r\n );\r\n if (!selectedReceiver) return;\r\n this.facade.addReceivers(template.id, { receivers: [selectedReceiver] });\r\n }\r\n\r\n onDeleteReceiver(receiver: ReceiverItem): void {\r\n this.confirmationService.confirmDelete({\r\n type: 'dialog',\r\n accept: () => {\r\n this.deletingReceiverIds.update((ids) => [...ids, receiver.id]);\r\n this.facade.deleteReceiver(receiver.id).subscribe({\r\n complete: () => {\r\n this.deletingReceiverIds.update((ids) =>\r\n ids.filter((id) => id !== receiver.id),\r\n );\r\n },\r\n error: () => {\r\n this.deletingReceiverIds.update((ids) =>\r\n ids.filter((id) => id !== receiver.id),\r\n );\r\n },\r\n });\r\n },\r\n });\r\n }\r\n\r\n isReceiverDeleting(receiverId: string | number): boolean {\r\n return this.deletingReceiverIds().includes(receiverId);\r\n }\r\n\r\n onSaveTemplate(): void {\r\n const template = this.selectedTemplate();\r\n if (!template || this.isFormInvalid()) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n\r\n // Build payload dynamically from all channel controls\r\n const payload = this.buildUpdatePayload(template);\r\n this.facade.updateTemplate(template.id, payload);\r\n }\r\n\r\n onDeleteTemplate(): void {\r\n const template = this.selectedTemplate();\r\n if (!template || template.isSystem) return;\r\n\r\n this.confirmationService.confirm({\r\n type: 'dialog',\r\n header: this.transloco.translate('notification.deleteConfirmation'),\r\n message: this.transloco.translate('notification.deleteTemplateMessage'),\r\n icon: 'general.trash-01',\r\n acceptButton: { severity: 'danger' },\r\n accept: () => this.facade.deleteTemplate(template.id),\r\n });\r\n }\r\n\r\n onAddTemplateClick(): void {\r\n const event = this.selectedEvent();\r\n if (!event) return;\r\n\r\n const ref = this.modalService.openModal(AddTemplateDialog, 'dialog', {\r\n header: this.transloco.translate('notification.addTemplate'),\r\n styleClass: '!w-[25rem]',\r\n });\r\n\r\n ref.onClose.subscribe((result: { name: string } | undefined) => {\r\n if (result?.name) {\r\n this.facade.addTemplate(event.id, {\r\n name: result.name,\r\n channel: this.form.controls['channel'].value,\r\n });\r\n }\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // Private Methods\r\n // ============================================================================\r\n private appendToControl(key: string, value: string): void {\r\n const ctrl = this.form.controls[key] as FormControl<string>;\r\n ctrl?.setValue(`${ctrl.value ?? ''} ${value}`);\r\n }\r\n\r\n private patchForm(template: NotificationTemplateItem): void {\r\n const channel = template.channel || 'email';\r\n\r\n this.form.patchValue({\r\n name: template.name,\r\n channel: channel,\r\n // Set email bilingual based on whether translatable content exists\r\n emailBilingual: !!template.emailContentTranslatable?.en,\r\n });\r\n\r\n // Patch all channel controls dynamically\r\n const t = template as unknown as Record<string, unknown>;\r\n for (const ch of CHANNEL_CONFIGS) {\r\n if (ch.templateKey) {\r\n this.form\r\n .get(ch.templateKey)\r\n ?.setValue((t[ch.templateKey] as string) ?? '');\r\n }\r\n if (ch.translatableKey) {\r\n const trans =\r\n (t[ch.translatableKey] as { en?: string; ar?: string }) ?? {};\r\n this.form.get(ch.translatableKey)?.patchValue({\r\n en: trans.en ?? '',\r\n ar: trans.ar ?? '',\r\n });\r\n }\r\n }\r\n }\r\n\r\n private buildUpdatePayload(\r\n template: NotificationTemplateItem,\r\n ): UpdateTemplatePayload {\r\n const v = this.form.getRawValue();\r\n return {\r\n name: v['name'] || template.name,\r\n ...this.extractChannelPayload(v),\r\n };\r\n }\r\n\r\n private extractChannelPayload(\r\n formValue: Record<string, unknown>,\r\n ): Record<string, unknown> {\r\n const payload: Record<string, unknown> = {};\r\n\r\n for (const ch of CHANNEL_CONFIGS) {\r\n if (ch.templateKey && formValue[ch.templateKey] !== undefined) {\r\n payload[ch.templateKey] = formValue[ch.templateKey] || '';\r\n }\r\n if (ch.translatableKey && formValue[ch.translatableKey] !== undefined) {\r\n payload[ch.translatableKey] = formValue[ch.translatableKey];\r\n }\r\n }\r\n\r\n return payload;\r\n }\r\n}\r\n\r\nexport default NotificationTemplate;\r\n","<div class=\"flex flex-col gap-4 p-2\" [formGroup]=\"form\">\r\n <!-- Loading State -->\r\n @if (eventsQuery.isPending()) {\r\n <div class=\"flex flex-col gap-4\">\r\n <!-- Event Selector Skeleton -->\r\n <div class=\"w-1/2\">\r\n <p-skeleton width=\"4rem\" height=\"1rem\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" borderRadius=\"0.5rem\" />\r\n </div>\r\n <!-- Tabs Skeleton -->\r\n <div class=\"flex items-center justify-between\">\r\n <div class=\"flex gap-2\">\r\n <p-skeleton width=\"5rem\" height=\"2.25rem\" borderRadius=\"0.5rem\" />\r\n <p-skeleton width=\"5rem\" height=\"2.25rem\" borderRadius=\"0.5rem\" />\r\n <p-skeleton width=\"5rem\" height=\"2.25rem\" borderRadius=\"0.5rem\" />\r\n </div>\r\n <p-skeleton width=\"8rem\" height=\"2.25rem\" borderRadius=\"0.5rem\" />\r\n </div>\r\n <!-- Name Field Skeleton -->\r\n <div class=\"grid grid-cols-2 gap-4\">\r\n <div>\r\n <p-skeleton width=\"3rem\" height=\"1rem\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" borderRadius=\"0.5rem\" />\r\n </div>\r\n </div>\r\n <!-- Channel & Properties Skeleton -->\r\n <div class=\"grid grid-cols-2 gap-4\">\r\n <div>\r\n <p-skeleton width=\"4rem\" height=\"1rem\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" borderRadius=\"0.5rem\" />\r\n </div>\r\n <div>\r\n <p-skeleton width=\"6rem\" height=\"1rem\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" borderRadius=\"0.5rem\" />\r\n </div>\r\n </div>\r\n <!-- Content Editor Skeleton -->\r\n <div>\r\n <p-skeleton width=\"4rem\" height=\"1rem\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"100%\" height=\"8rem\" borderRadius=\"0.5rem\" />\r\n </div>\r\n <div>\r\n <p-skeleton width=\"4rem\" height=\"1rem\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"100%\" height=\"8rem\" borderRadius=\"0.5rem\" />\r\n </div>\r\n <!-- Receivers Skeleton -->\r\n <div class=\"grid grid-cols-2 gap-4\">\r\n <div>\r\n <p-skeleton width=\"5rem\" height=\"1rem\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" borderRadius=\"0.5rem\" />\r\n </div>\r\n </div>\r\n <!-- Receiver Items Skeleton -->\r\n <div class=\"grid grid-cols-2 gap-4\">\r\n <div class=\"flex flex-col gap-2\">\r\n <p-skeleton width=\"100%\" height=\"3rem\" borderRadius=\"0.5rem\" />\r\n <p-skeleton width=\"100%\" height=\"3rem\" borderRadius=\"0.5rem\" />\r\n </div>\r\n </div>\r\n <!-- Actions Skeleton -->\r\n <div class=\"flex justify-end gap-2 pt-4\">\r\n <p-skeleton width=\"5rem\" height=\"2.5rem\" borderRadius=\"0.5rem\" />\r\n <p-skeleton width=\"5rem\" height=\"2.5rem\" borderRadius=\"0.5rem\" />\r\n </div>\r\n </div>\r\n } @else {\r\n <!-- Events Selector -->\r\n <div class=\"w-1/2\">\r\n <mt-select-field\r\n formControlName=\"event\"\r\n [options]=\"eventsQuery.data() ?? []\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'eventName'\"\r\n [label]=\"'notification.events' | transloco\"\r\n [placeholder]=\"'notification.selectEvent' | transloco\"\r\n [required]=\"true\"\r\n [filter]=\"false\"\r\n (onChange)=\"onEventChange($event)\"\r\n />\r\n </div>\r\n @if ((eventsQuery.data() ?? []).length === 0) {\r\n <!-- Empty State -->\r\n <mt-card>\r\n <div\r\n class=\"flex flex-col items-center justify-center py-12 text-slate-500\"\r\n >\r\n <mt-icon icon=\"alert.alert-circle\" class=\"mb-2 h-12 w-12\" />\r\n <p>{{ \"notification.noEventsFound\" | transloco }}</p>\r\n </div>\r\n </mt-card>\r\n } @else if (selectedEvent()) {\r\n <!-- Template Tabs -->\r\n <div class=\"flex items-center justify-between\">\r\n <mt-tabs\r\n [active]=\"selectedTemplateId()\"\r\n [options]=\"templateTabs()\"\r\n (activeChange)=\"onTemplateTabChange($event)\"\r\n />\r\n <mt-button\r\n icon=\"general.plus\"\r\n [label]=\"'notification.newNotification' | transloco\"\r\n size=\"small\"\r\n [loading]=\"isAddingTemplate()\"\r\n (onClick)=\"onAddTemplateClick()\"\r\n />\r\n </div>\r\n <!-- Template Content -->\r\n @if (selectedTemplate(); as template) {\r\n <div class=\"flex flex-col gap-4\">\r\n <!-- Name -->\r\n <div class=\"grid grid-cols-2 gap-4\">\r\n <mt-text-field\r\n formControlName=\"name\"\r\n [label]=\"'notification.name' | transloco\"\r\n [placeholder]=\"'notification.enterName' | transloco\"\r\n [required]=\"true\"\r\n />\r\n </div>\r\n <!-- Channel & Properties Picker Row -->\r\n <div class=\"grid grid-cols-2 gap-4\">\r\n <mt-select-field\r\n formControlName=\"channel\"\r\n [options]=\"channelOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'key'\"\r\n [label]=\"'notification.channel.label' | transloco\"\r\n [placeholder]=\"'notification.selectChannel' | transloco\"\r\n [required]=\"true\"\r\n [filter]=\"false\"\r\n [disabled]=\"true\"\r\n />\r\n <mt-select-field\r\n [options]=\"propertyGroupsQuery.data() ?? []\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'key'\"\r\n [group]=\"true\"\r\n [optionGroupLabel]=\"'groupName'\"\r\n [optionGroupChildren]=\"'properties'\"\r\n [label]=\"'notification.propertiesList' | transloco\"\r\n [placeholder]=\"'notification.selectProperty' | transloco\"\r\n [hasPlaceholderPrefix]=\"false\"\r\n [filter]=\"true\"\r\n [filterBy]=\"'name'\"\r\n [loading]=\"propertyGroupsQuery.isPending()\"\r\n [formControl]=\"propertyPickerControl\"\r\n (onChange)=\"onAddProperty($event)\"\r\n />\r\n </div>\r\n <!-- Channel Content Editors -->\r\n @for (ch of channelConfigs; track ch.key) {\r\n @if (form.controls[\"channel\"].value === ch.key) {\r\n <!-- Bilingual Content Fields -->\r\n @if (isBilingual(ch) && ch.translatableKey) {\r\n <ng-container [formGroupName]=\"ch.translatableKey\">\r\n @if (ch.useRichEditor) {\r\n <mt-editor-field\r\n formControlName=\"en\"\r\n [label]=\"'notification.english' | transloco\"\r\n dir=\"ltr\"\r\n />\r\n <mt-editor-field\r\n formControlName=\"ar\"\r\n [label]=\"'notification.arabic' | transloco\"\r\n dir=\"rtl\"\r\n />\r\n } @else {\r\n <mt-textarea-field\r\n formControlName=\"en\"\r\n [label]=\"'notification.english' | transloco\"\r\n [rows]=\"'6'\"\r\n dir=\"ltr\"\r\n />\r\n <mt-textarea-field\r\n formControlName=\"ar\"\r\n [label]=\"'notification.arabic' | transloco\"\r\n [rows]=\"'6'\"\r\n dir=\"rtl\"\r\n />\r\n }\r\n </ng-container>\r\n } @else if (ch.templateKey) {\r\n <!-- Non-Bilingual Content Field -->\r\n @if (ch.useRichEditor) {\r\n <mt-editor-field\r\n [formControlName]=\"ch.templateKey\"\r\n [label]=\"'notification.notificationBody' | transloco\"\r\n />\r\n } @else {\r\n <mt-textarea-field\r\n [formControlName]=\"ch.templateKey\"\r\n [label]=\"'notification.notificationBody' | transloco\"\r\n [rows]=\"'6'\"\r\n />\r\n }\r\n }\r\n <!-- Bilingual Toggle -->\r\n @if (ch.bilingualOptional) {\r\n <mt-toggle-field\r\n [formControlName]=\"ch.key + 'Bilingual'\"\r\n [label]=\"'notification.bilingual' | transloco\"\r\n />\r\n }\r\n }\r\n }\r\n <!-- Receivers -->\r\n <div class=\"grid grid-cols-2 gap-4\">\r\n <mt-select-field\r\n [options]=\"availableReceivers()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'id'\"\r\n [label]=\"'notification.receivers' | transloco\"\r\n [placeholder]=\"'notification.selectReceiver' | transloco\"\r\n [filter]=\"true\"\r\n [loading]=\"receiversQuery.isPending()\"\r\n (onChange)=\"onAddReceiver($event)\"\r\n />\r\n </div>\r\n @if ((template.receivers ?? []).length > 0) {\r\n <div class=\"grid grid-cols-2 gap-4\">\r\n <div class=\"flex flex-col gap-2\">\r\n @for (receiver of template.receivers; track receiver.id) {\r\n <div\r\n class=\"flex items-center justify-between rounded-lg border border-surface bg-surface-50 p-1 transition-colors hover:bg-surface-100\"\r\n >\r\n <div class=\"flex items-center gap-3\">\r\n <mt-avatar\r\n icon=\"user.user-01\"\r\n shape=\"square\"\r\n size=\"small\"\r\n />\r\n <span class=\"font-medium\">{{ receiver.name }}</span>\r\n </div>\r\n @if (!receiver.isSystem) {\r\n <mt-button\r\n icon=\"general.trash-01\"\r\n severity=\"danger\"\r\n [text]=\"true\"\r\n [loading]=\"isReceiverDeleting(receiver.id)\"\r\n (onClick)=\"onDeleteReceiver(receiver)\"\r\n />\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n <!-- Actions -->\r\n <div class=\"flex justify-end gap-2 pt-4\">\r\n @if (!template.isSystem) {\r\n <mt-button\r\n [label]=\"'notification.delete' | transloco\"\r\n severity=\"danger\"\r\n [loading]=\"isDeletingTemplate()\"\r\n [disabled]=\"isUpdatingTemplate()\"\r\n (onClick)=\"onDeleteTemplate()\"\r\n />\r\n }\r\n <mt-button\r\n [label]=\"'notification.save' | transloco\"\r\n [loading]=\"isUpdatingTemplate()\"\r\n [disabled]=\"isDeletingTemplate() || isFormInvalid()\"\r\n (onClick)=\"onSaveTemplate()\"\r\n />\r\n </div>\r\n </div>\r\n }\r\n }\r\n }\r\n</div>\r\n","import { NotificationState } from './notification/notification.state';\r\n\r\nexport const APP_STATES = [NotificationState];\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"masterteam-notification.mjs","sources":["../../../../packages/masterteam/notification/src/lib/add-template-dialog/add-template-dialog.ts","../../../../packages/masterteam/notification/src/lib/add-template-dialog/add-template-dialog.html","../../../../packages/masterteam/notification/src/store/notification/notification.model.ts","../../../../packages/masterteam/notification/src/store/notification/notification.actions.ts","../../../../packages/masterteam/notification/src/store/notification/notification.state.ts","../../../../packages/masterteam/notification/src/store/notification/notification.facade.ts","../../../../packages/masterteam/notification/src/lib/notification-template/notification-template.ts","../../../../packages/masterteam/notification/src/lib/notification-template/notification-template.html","../../../../packages/masterteam/notification/src/store/app.state.ts","../../../../packages/masterteam/notification/src/masterteam-notification.ts"],"sourcesContent":["import { Component, inject, input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport { Button } from '@masterteam/components/button';\r\n\r\n@Component({\r\n selector: 'mt-add-template-dialog',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n TranslocoModule,\r\n TextField,\r\n Button,\r\n ],\r\n templateUrl: './add-template-dialog.html',\r\n})\r\nexport class AddTemplateDialog {\r\n readonly modalService = inject(ModalService);\r\n private readonly ref = inject(ModalRef);\r\n\r\n data = input<any>(null);\r\n\r\n templateNameControl = new FormControl<string>('', [Validators.required]);\r\n\r\n onSave(): void {\r\n if (this.templateNameControl.valid) {\r\n this.ref.close({ name: this.templateNameControl.value?.trim() });\r\n }\r\n }\r\n\r\n onCancel(): void {\r\n this.ref.close();\r\n }\r\n}\r\n","<div [class]=\"modalService.contentClass\" class=\"p-4\">\r\n <mt-text-field\r\n [formControl]=\"templateNameControl\"\r\n [label]=\"'notification.templateName' | transloco\"\r\n [placeholder]=\"'notification.enterTemplateName' | transloco\"\r\n [required]=\"true\"\r\n />\r\n</div>\r\n\r\n<div [class]=\"modalService.footerClass\">\r\n <mt-button\r\n [label]=\"'notification.cancel' | transloco\"\r\n severity=\"secondary\"\r\n (onClick)=\"onCancel()\"\r\n />\r\n <mt-button\r\n [label]=\"'notification.save' | transloco\"\r\n [disabled]=\"!templateNameControl.valid\"\r\n (onClick)=\"onSave()\"\r\n />\r\n</div>\r\n","import type { LoadingStateShape } from '@masterteam/components';\r\n\r\n// ============================================================================\r\n// Action Keys Enum\r\n// ============================================================================\r\nexport enum NotificationActionKey {\r\n GetEvents = 'getEvents',\r\n GetReceivers = 'getReceivers',\r\n GetProperties = 'getProperties',\r\n AddReceivers = 'addReceivers',\r\n DeleteReceiver = 'deleteReceiver',\r\n AddTemplate = 'addTemplate',\r\n UpdateTemplate = 'updateTemplate',\r\n DeleteTemplate = 'deleteTemplate',\r\n}\r\n\r\n// ============================================================================\r\n// Channel Types\r\n// ============================================================================\r\nexport type NotificationChannel = 'email' | 'sms' | 'app';\r\n\r\nexport interface ChannelConfig {\r\n key: NotificationChannel;\r\n labelKey: string;\r\n /** Whether this channel supports bilingual content */\r\n supportsBilingual: boolean;\r\n /** Whether bilingual is optional (true = show toggle) */\r\n bilingualOptional: boolean;\r\n /** Whether this channel uses rich text editor (false = textarea) */\r\n useRichEditor: boolean;\r\n /** Payload key for non-bilingual template (string value) */\r\n templateKey?: string;\r\n /** Payload key for bilingual template (object with en/ar) */\r\n translatableKey?: string;\r\n}\r\n\r\nexport const CHANNEL_CONFIGS: ChannelConfig[] = [\r\n {\r\n key: 'email',\r\n labelKey: 'notification.channel.email',\r\n supportsBilingual: true,\r\n bilingualOptional: true,\r\n useRichEditor: true,\r\n templateKey: 'emailTemplate',\r\n translatableKey: 'emailContentTranslatable',\r\n },\r\n {\r\n key: 'sms',\r\n labelKey: 'notification.channel.sms',\r\n supportsBilingual: false,\r\n bilingualOptional: false,\r\n useRichEditor: false,\r\n templateKey: 'SmsTemplate',\r\n },\r\n {\r\n key: 'app',\r\n labelKey: 'notification.channel.app',\r\n supportsBilingual: true,\r\n bilingualOptional: false,\r\n useRichEditor: true,\r\n translatableKey: 'appTemplate',\r\n },\r\n];\r\n\r\n/** Helper to get channel config by key */\r\nexport function getChannelConfig(key: NotificationChannel): ChannelConfig {\r\n return CHANNEL_CONFIGS.find((c) => c.key === key) ?? CHANNEL_CONFIGS[0];\r\n}\r\n\r\n/** Build form control name for a channel field */\r\nexport function getFormControlName(\r\n ch: ChannelConfig,\r\n type: 'single' | 'en' | 'ar',\r\n): string | null {\r\n if (type === 'single') return ch.templateKey ?? null;\r\n if (!ch.translatableKey) return null;\r\n return type === 'en'\r\n ? `${ch.translatableKey}.en`\r\n : `${ch.translatableKey}.ar`;\r\n}\r\n\r\n// ============================================================================\r\n// Translatable Content\r\n// ============================================================================\r\nexport interface TranslatableContent {\r\n en: string;\r\n ar: string;\r\n}\r\n\r\n// ============================================================================\r\n// Receiver Types\r\n// ============================================================================\r\nexport interface ReceiverItem {\r\n id: string | number;\r\n identifier: string;\r\n name: string;\r\n type: string;\r\n isSystem?: boolean;\r\n}\r\n\r\nexport interface ReceiverGroup {\r\n groupName: string;\r\n items: ReceiverItem[] | ReceiverSubGroup[];\r\n}\r\n\r\nexport interface ReceiverSubGroup {\r\n subGroupName: string;\r\n items: ReceiverItem[];\r\n}\r\n\r\n// ============================================================================\r\n// Property Types\r\n// ============================================================================\r\nexport interface NotificationProperty {\r\n key: string;\r\n name: string;\r\n groupName?: string;\r\n}\r\n\r\nexport interface PropertyGroup {\r\n groupName: string;\r\n properties: NotificationProperty[];\r\n}\r\n\r\n// ============================================================================\r\n// Template Types\r\n// ============================================================================\r\nexport interface NotificationTemplateItem {\r\n id: string | number;\r\n eventId: string | number; // Link to parent event\r\n name: string;\r\n isSystem: boolean;\r\n channel: NotificationChannel;\r\n receivers: ReceiverItem[];\r\n emailTemplate: string;\r\n emailContentTranslatable: TranslatableContent;\r\n smsTemplate: string;\r\n appTemplate: TranslatableContent;\r\n}\r\n\r\n// ============================================================================\r\n// Event Types\r\n// ============================================================================\r\nexport interface NotificationEvent {\r\n id: string | number;\r\n eventName: string;\r\n name: string;\r\n}\r\n\r\n// ============================================================================\r\n// Action Types (Workflow)\r\n// ============================================================================\r\nexport interface NotificationAction {\r\n id: string | number;\r\n name: string;\r\n type: string;\r\n}\r\n\r\nexport interface ActionGroup {\r\n activity: string;\r\n items: NotificationAction[];\r\n}\r\n\r\n// ============================================================================\r\n// Payloads\r\n// ============================================================================\r\nexport interface ReceiverPayloadItem {\r\n id: string | number;\r\n type: string;\r\n}\r\n\r\nexport interface AddReceiversPayload {\r\n receivers: ReceiverPayloadItem[];\r\n}\r\n\r\nexport interface AddTemplatePayload {\r\n name: string;\r\n channel: NotificationChannel;\r\n}\r\n\r\nexport interface UpdateTemplatePayload {\r\n name: string;\r\n [key: string]: string | TranslatableContent | undefined;\r\n}\r\n\r\n// ============================================================================\r\n// State Model\r\n// ============================================================================\r\nexport interface NotificationStateModel extends LoadingStateShape<NotificationActionKey> {\r\n // Module configuration\r\n moduleType: string | null;\r\n moduleId: string | number | null;\r\n parentModuleType: string | null;\r\n parentModuleId: string | number | null;\r\n parentPath: string;\r\n\r\n // Action mode (for workflow)\r\n isActionMode: boolean;\r\n selectedActionId: string | number | null;\r\n\r\n // Data collections\r\n events: NotificationEvent[];\r\n templates: NotificationTemplateItem[]; // Flattened templates\r\n actions: NotificationAction[];\r\n receivers: ReceiverItem[];\r\n propertyGroups: PropertyGroup[];\r\n\r\n // Selection state\r\n selectedEventName: string | null;\r\n selectedTemplateId: string | number | null;\r\n}\r\n","import type {\r\n AddReceiversPayload,\r\n AddTemplatePayload,\r\n UpdateTemplatePayload,\r\n} from './notification.model';\r\n\r\n// ============================================================================\r\n// Module Configuration\r\n// ============================================================================\r\nexport class SetModuleInfo {\r\n static readonly type = '[Notification] Set Module Info';\r\n constructor(\r\n public moduleType: string,\r\n public moduleId: string | number,\r\n public parentModuleType?: string,\r\n public parentModuleId?: string | number,\r\n public parentPath?: string,\r\n ) {}\r\n}\r\n\r\n// ============================================================================\r\n// Data Loading Actions\r\n// ============================================================================\r\nexport class GetEvents {\r\n static readonly type = '[Notification] Get Events';\r\n}\r\n\r\nexport class GetReceivers {\r\n static readonly type = '[Notification] Get Receivers';\r\n}\r\n\r\nexport class GetProperties {\r\n static readonly type = '[Notification] Get Properties';\r\n constructor(public isMultiLang?: boolean) {}\r\n}\r\n\r\n// ============================================================================\r\n// Action Mode (Workflow)\r\n// ============================================================================\r\nexport class SetActionMode {\r\n static readonly type = '[Notification] Set Action Mode';\r\n constructor(public actionId: string | number | null) {}\r\n}\r\n\r\nexport class GetActionReceivers {\r\n static readonly type = '[Notification] Get Action Receivers';\r\n constructor(public actionId: string | number) {}\r\n}\r\n\r\nexport class GetActionProperties {\r\n static readonly type = '[Notification] Get Action Properties';\r\n constructor(\r\n public actionId: string | number,\r\n public isMultiLang?: boolean,\r\n ) {}\r\n}\r\n\r\n// ============================================================================\r\n// Selection Actions\r\n// ============================================================================\r\nexport class SelectEvent {\r\n static readonly type = '[Notification] Select Event';\r\n constructor(public eventName: string) {}\r\n}\r\n\r\nexport class SelectTemplate {\r\n static readonly type = '[Notification] Select Template';\r\n constructor(public templateId: string | number) {}\r\n}\r\n\r\n// ============================================================================\r\n// Receiver CRUD\r\n// ============================================================================\r\nexport class AddReceivers {\r\n static readonly type = '[Notification] Add Receivers';\r\n constructor(\r\n public templateId: string | number,\r\n public payload: AddReceiversPayload,\r\n ) {}\r\n}\r\n\r\nexport class DeleteReceiver {\r\n static readonly type = '[Notification] Delete Receiver';\r\n constructor(public receiverId: string | number) {}\r\n}\r\n\r\n// ============================================================================\r\n// Template CRUD\r\n// ============================================================================\r\nexport class AddTemplate {\r\n static readonly type = '[Notification] Add Template';\r\n constructor(\r\n public eventId: string | number,\r\n public payload: AddTemplatePayload,\r\n ) {}\r\n}\r\n\r\nexport class UpdateTemplate {\r\n static readonly type = '[Notification] Update Template';\r\n constructor(\r\n public templateId: string | number,\r\n public payload: UpdateTemplatePayload,\r\n ) {}\r\n}\r\n\r\nexport class DeleteTemplate {\r\n static readonly type = '[Notification] Delete Template';\r\n constructor(public templateId: string | number) {}\r\n}\r\n\r\n// ============================================================================\r\n// Reset State\r\n// ============================================================================\r\nexport class ResetNotificationState {\r\n static readonly type = '[Notification] Reset State';\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\r\nimport {\r\n CrudStateBase,\r\n handleApiRequest,\r\n Response,\r\n} from '@masterteam/components';\r\n\r\nimport {\r\n NotificationActionKey,\r\n NotificationStateModel,\r\n NotificationEvent,\r\n NotificationTemplateItem,\r\n ReceiverItem,\r\n ReceiverGroup,\r\n ReceiverSubGroup,\r\n PropertyGroup,\r\n} from './notification.model';\r\nimport {\r\n AddReceivers,\r\n AddTemplate,\r\n DeleteReceiver,\r\n DeleteTemplate,\r\n GetActionProperties,\r\n GetActionReceivers,\r\n GetEvents,\r\n GetProperties,\r\n GetReceivers,\r\n ResetNotificationState,\r\n SelectEvent,\r\n SelectTemplate,\r\n SetActionMode,\r\n SetModuleInfo,\r\n UpdateTemplate,\r\n} from './notification.actions';\r\n\r\n// Default State\r\n\r\nconst DEFAULT_STATE: NotificationStateModel = {\r\n // Module configuration\r\n moduleType: null,\r\n moduleId: null,\r\n parentModuleType: null,\r\n parentModuleId: null,\r\n parentPath: '',\r\n\r\n // Action mode\r\n isActionMode: false,\r\n selectedActionId: null,\r\n\r\n // Data collections\r\n events: [],\r\n templates: [], // Flattened templates\r\n actions: [],\r\n receivers: [],\r\n propertyGroups: [],\r\n\r\n // Selection state\r\n selectedEventName: null,\r\n selectedTemplateId: null,\r\n\r\n // Loading state (from LoadingStateShape)\r\n loadingActive: [],\r\n errors: {},\r\n};\r\n\r\n// State Definition\r\n\r\n@State<NotificationStateModel>({\r\n name: 'notification',\r\n defaults: DEFAULT_STATE,\r\n})\r\n@Injectable()\r\nexport class NotificationState extends CrudStateBase<\r\n NotificationTemplateItem,\r\n NotificationStateModel,\r\n NotificationActionKey\r\n> {\r\n private readonly http = inject(HttpClient);\r\n private readonly baseUrl = 'notifications';\r\n\r\n // Selectors - Individual selectors for fine-grained reactivity\r\n @Selector()\r\n static getState(state: NotificationStateModel): NotificationStateModel {\r\n return state;\r\n }\r\n\r\n @Selector()\r\n static getEvents(state: NotificationStateModel): NotificationEvent[] {\r\n return state.events;\r\n }\r\n\r\n @Selector()\r\n static getTemplates(\r\n state: NotificationStateModel,\r\n ): NotificationTemplateItem[] {\r\n return state.templates;\r\n }\r\n\r\n @Selector()\r\n static getReceivers(state: NotificationStateModel): ReceiverItem[] {\r\n return state.receivers;\r\n }\r\n\r\n @Selector()\r\n static getPropertyGroups(state: NotificationStateModel): PropertyGroup[] {\r\n return state.propertyGroups;\r\n }\r\n\r\n @Selector()\r\n static getSelectedEventName(state: NotificationStateModel): string | null {\r\n return state.selectedEventName;\r\n }\r\n\r\n @Selector()\r\n static getSelectedTemplateId(\r\n state: NotificationStateModel,\r\n ): string | number | null {\r\n return state.selectedTemplateId;\r\n }\r\n\r\n @Selector()\r\n static getLoadingActive(state: NotificationStateModel): string[] {\r\n return state.loadingActive;\r\n }\r\n\r\n @Selector()\r\n static getErrors(\r\n state: NotificationStateModel,\r\n ): Record<string, string | null> {\r\n return state.errors;\r\n }\r\n\r\n // Derived selectors\r\n @Selector([\r\n NotificationState.getEvents,\r\n NotificationState.getSelectedEventName,\r\n ])\r\n static getSelectedEvent(\r\n events: NotificationEvent[],\r\n selectedEventName: string | null,\r\n ): NotificationEvent | null {\r\n return events.find((e) => e.eventName === selectedEventName) ?? null;\r\n }\r\n\r\n @Selector([\r\n NotificationState.getTemplates,\r\n NotificationState.getSelectedEvent,\r\n ])\r\n static getEventTemplates(\r\n templates: NotificationTemplateItem[],\r\n selectedEvent: NotificationEvent | null,\r\n ): NotificationTemplateItem[] {\r\n if (!selectedEvent) return [];\r\n return templates.filter((t) => t.eventId === selectedEvent.id);\r\n }\r\n\r\n @Selector([\r\n NotificationState.getTemplates,\r\n NotificationState.getSelectedTemplateId,\r\n ])\r\n static getSelectedTemplate(\r\n templates: NotificationTemplateItem[],\r\n selectedTemplateId: string | number | null,\r\n ): NotificationTemplateItem | null {\r\n return templates.find((t) => t.id === selectedTemplateId) ?? null;\r\n }\r\n\r\n @Selector([\r\n NotificationState.getReceivers,\r\n NotificationState.getSelectedTemplate,\r\n ])\r\n static getAvailableReceivers(\r\n receivers: ReceiverItem[],\r\n selectedTemplate: NotificationTemplateItem | null,\r\n ): ReceiverItem[] {\r\n if (!selectedTemplate) return receivers;\r\n const templateReceivers = selectedTemplate.receivers ?? [];\r\n const assignedIds = new Set(templateReceivers.map((r) => r.identifier));\r\n return receivers.filter((r) => !assignedIds.has(String(r.id)));\r\n }\r\n\r\n // Helper Methods\r\n\r\n /** API returns events with nested templates - we flatten for state */\r\n private flattenEventsResponse(\r\n eventsWithTemplates: Array<\r\n NotificationEvent & { templates: NotificationTemplateItem[] }\r\n >,\r\n ): { events: NotificationEvent[]; templates: NotificationTemplateItem[] } {\r\n const events: NotificationEvent[] = [];\r\n const templates: NotificationTemplateItem[] = [];\r\n\r\n for (const event of eventsWithTemplates) {\r\n const { templates: eventTemplates, ...eventData } = event;\r\n events.push(eventData);\r\n templates.push(\r\n ...eventTemplates.map((t) => ({ ...t, eventId: event.id })),\r\n );\r\n }\r\n\r\n return { events, templates };\r\n }\r\n\r\n private flattenReceivers(groups: ReceiverGroup[]): ReceiverItem[] {\r\n const result: ReceiverItem[] = [];\r\n for (const group of groups) {\r\n for (const item of group.items) {\r\n if ('subGroupName' in item) {\r\n // Handle subgroups (role-based receivers)\r\n const subGroup = item as ReceiverSubGroup;\r\n result.push(\r\n ...subGroup.items.map((r) => ({\r\n ...r,\r\n name: `${subGroup.subGroupName} - ${r.name}`,\r\n })),\r\n );\r\n } else {\r\n result.push(item as ReceiverItem);\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n // Module Configuration\r\n\r\n @Action(SetModuleInfo)\r\n setModuleInfo(\r\n ctx: StateContext<NotificationStateModel>,\r\n action: SetModuleInfo,\r\n ) {\r\n let parentPath = '';\r\n if (action.parentModuleType && action.parentModuleId) {\r\n parentPath = `/${action.parentModuleType}/${action.parentModuleId}`;\r\n } else if (action.parentPath) {\r\n parentPath = action.parentPath;\r\n }\r\n\r\n ctx.patchState({\r\n moduleType: action.moduleType,\r\n moduleId: action.moduleId,\r\n parentModuleType: action.parentModuleType ?? null,\r\n parentModuleId: action.parentModuleId ?? null,\r\n parentPath,\r\n isActionMode: action.moduleType === 'workflow',\r\n });\r\n }\r\n\r\n @Action(ResetNotificationState)\r\n resetState(ctx: StateContext<NotificationStateModel>) {\r\n ctx.setState(DEFAULT_STATE);\r\n }\r\n\r\n // Data Loading Actions (Normal Mode)\r\n\r\n @Action(GetEvents)\r\n getEvents(ctx: StateContext<NotificationStateModel>) {\r\n const { moduleType, moduleId, parentPath } = ctx.getState();\r\n // API returns events with nested templates\r\n type EventWithTemplates = NotificationEvent & {\r\n templates: NotificationTemplateItem[];\r\n };\r\n const req$ = this.http.get<Response<EventWithTemplates[]>>(\r\n `${this.baseUrl}${parentPath}/${moduleType}/${moduleId}/events`,\r\n );\r\n\r\n return this.load(ctx, {\r\n key: NotificationActionKey.GetEvents,\r\n request$: req$,\r\n updateState: (_state, data) => {\r\n const { events, templates } = this.flattenEventsResponse(data ?? []);\r\n const firstTemplate = templates[0];\r\n const firstEvent = events.find((e) => e.id === firstTemplate?.eventId);\r\n return {\r\n events,\r\n templates,\r\n selectedEventName: firstEvent?.eventName ?? null,\r\n selectedTemplateId: firstTemplate?.id ?? null,\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(GetReceivers)\r\n getReceivers(ctx: StateContext<NotificationStateModel>) {\r\n const { parentPath, moduleType, moduleId } = ctx.getState();\r\n const req$ = this.http.get<Response<ReceiverGroup[]>>(\r\n `${this.baseUrl}${parentPath}/${moduleType}/${moduleId}/receivers`,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: NotificationActionKey.GetReceivers,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n receivers: this.flattenReceivers(response.data ?? []),\r\n }),\r\n });\r\n }\r\n\r\n @Action(GetProperties)\r\n getProperties(\r\n ctx: StateContext<NotificationStateModel>,\r\n action: GetProperties,\r\n ) {\r\n const { moduleType, moduleId, parentPath } = ctx.getState();\r\n const url = action.isMultiLang\r\n ? `${this.baseUrl}${parentPath}/${moduleType}/${moduleId}/properties?IsMultiLanguageEnabled=true`\r\n : `${this.baseUrl}${parentPath}/${moduleType}/${moduleId}/properties`;\r\n\r\n const req$ = this.http.get<Response<PropertyGroup[]>>(url);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: NotificationActionKey.GetProperties,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n propertyGroups: response.data ?? [],\r\n }),\r\n });\r\n }\r\n\r\n // Action Mode (Workflow)\r\n\r\n @Action(SetActionMode)\r\n setActionMode(\r\n ctx: StateContext<NotificationStateModel>,\r\n action: SetActionMode,\r\n ) {\r\n ctx.patchState({\r\n selectedActionId: action.actionId,\r\n });\r\n }\r\n\r\n @Action(GetActionReceivers)\r\n getActionReceivers(\r\n ctx: StateContext<NotificationStateModel>,\r\n action: GetActionReceivers,\r\n ) {\r\n const req$ = this.http.get<Response<ReceiverGroup[]>>(\r\n `${this.baseUrl}/action/${action.actionId}/receivers`,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: NotificationActionKey.GetReceivers,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n receivers: this.flattenReceivers(response.data ?? []),\r\n }),\r\n });\r\n }\r\n\r\n @Action(GetActionProperties)\r\n getActionProperties(\r\n ctx: StateContext<NotificationStateModel>,\r\n action: GetActionProperties,\r\n ) {\r\n const url = action.isMultiLang\r\n ? `${this.baseUrl}/action/${action.actionId}/properties?IsMultiLanguageEnabled=true`\r\n : `${this.baseUrl}/action/${action.actionId}/properties`;\r\n\r\n const req$ = this.http.get<Response<PropertyGroup[]>>(url);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: NotificationActionKey.GetProperties,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n propertyGroups: response.data ?? [],\r\n }),\r\n });\r\n }\r\n\r\n // Selection Actions\r\n\r\n @Action(SelectEvent)\r\n selectEvent(ctx: StateContext<NotificationStateModel>, action: SelectEvent) {\r\n const state = ctx.getState();\r\n const event = state.events.find((e) => e.eventName === action.eventName);\r\n const eventTemplates = state.templates.filter(\r\n (t) => t.eventId === event?.id,\r\n );\r\n ctx.patchState({\r\n selectedEventName: action.eventName,\r\n selectedTemplateId: eventTemplates[0]?.id ?? null,\r\n });\r\n }\r\n\r\n @Action(SelectTemplate)\r\n selectTemplate(\r\n ctx: StateContext<NotificationStateModel>,\r\n action: SelectTemplate,\r\n ) {\r\n ctx.patchState({ selectedTemplateId: action.templateId });\r\n }\r\n\r\n // Receiver CRUD\r\n @Action(AddReceivers)\r\n addReceivers(\r\n ctx: StateContext<NotificationStateModel>,\r\n action: AddReceivers,\r\n ) {\r\n const req$ = this.http.post<Response<ReceiverItem[]>>(\r\n `${this.baseUrl}/templates/${action.templateId}`,\r\n action.payload,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: NotificationActionKey.AddReceivers,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const newReceivers = response.data ?? [];\r\n const templates = this.adapter.updateOne(\r\n state.templates,\r\n action.templateId,\r\n {\r\n receivers: [\r\n ...(state.templates.find((t) => t.id === action.templateId)\r\n ?.receivers ?? []),\r\n ...newReceivers,\r\n ],\r\n },\r\n 'id',\r\n );\r\n return { templates };\r\n },\r\n });\r\n }\r\n\r\n @Action(DeleteReceiver)\r\n deleteReceiver(\r\n ctx: StateContext<NotificationStateModel>,\r\n action: DeleteReceiver,\r\n ) {\r\n const state = ctx.getState();\r\n const template = this.getSelectedTemplate(state);\r\n\r\n if (!template) {\r\n return;\r\n }\r\n\r\n const req$ = this.http.delete<Response<void>>(\r\n `${this.baseUrl}/receivers/${action.receiverId}`,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: NotificationActionKey.DeleteReceiver,\r\n request$: req$,\r\n onSuccess: (_, currentState) => {\r\n const templates = this.adapter.updateOne(\r\n currentState.templates,\r\n template.id,\r\n {\r\n receivers: template.receivers.filter(\r\n (r) => r.id !== action.receiverId,\r\n ),\r\n },\r\n 'id',\r\n );\r\n return { templates };\r\n },\r\n });\r\n }\r\n\r\n // Template CRUD\r\n @Action(AddTemplate)\r\n addTemplate(ctx: StateContext<NotificationStateModel>, action: AddTemplate) {\r\n const req$ = this.http.post<Response<NotificationTemplateItem>>(\r\n `${this.baseUrl}/events/${action.eventId}`,\r\n action.payload,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: NotificationActionKey.AddTemplate,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const newTemplate = response.data;\r\n if (!newTemplate) return {};\r\n\r\n return {\r\n templates: this.adapter.addOne(state.templates, {\r\n ...newTemplate,\r\n eventId: action.eventId,\r\n }),\r\n selectedTemplateId: newTemplate.id,\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(UpdateTemplate)\r\n updateTemplate(\r\n ctx: StateContext<NotificationStateModel>,\r\n action: UpdateTemplate,\r\n ) {\r\n const req$ = this.http.put<Response<NotificationTemplateItem>>(\r\n `${this.baseUrl}/templates/${action.templateId}`,\r\n action.payload,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: NotificationActionKey.UpdateTemplate,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const updatedTemplate = response.data;\r\n if (!updatedTemplate) return {};\r\n\r\n // Preserve existing fields that API may not return or shouldn't change\r\n const existingTemplate = state.templates.find(\r\n (t) => t.id === action.templateId,\r\n );\r\n\r\n if (!existingTemplate) return {};\r\n\r\n // Only update name and content fields, preserve channel/eventId/receivers\r\n const templates = this.adapter.upsertOne(\r\n state.templates,\r\n {\r\n ...existingTemplate,\r\n name: updatedTemplate.name,\r\n emailTemplate: updatedTemplate.emailTemplate,\r\n emailContentTranslatable: updatedTemplate.emailContentTranslatable,\r\n smsTemplate: updatedTemplate.smsTemplate,\r\n appTemplate: updatedTemplate.appTemplate,\r\n },\r\n 'id',\r\n );\r\n return { templates };\r\n },\r\n });\r\n }\r\n\r\n @Action(DeleteTemplate)\r\n deleteTemplate(\r\n ctx: StateContext<NotificationStateModel>,\r\n action: DeleteTemplate,\r\n ) {\r\n const req$ = this.http.delete<Response<void>>(\r\n `${this.baseUrl}/templates/${action.templateId}`,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: NotificationActionKey.DeleteTemplate,\r\n request$: req$,\r\n onSuccess: (_, state) => {\r\n const templates = this.adapter.removeOne(\r\n state.templates,\r\n action.templateId,\r\n 'id',\r\n );\r\n\r\n // Select first template of current event after deletion\r\n const currentEvent = state.events.find(\r\n (e) => e.eventName === state.selectedEventName,\r\n );\r\n const eventTemplates = templates.filter(\r\n (t) => t.eventId === currentEvent?.id,\r\n );\r\n const systemTemplate = eventTemplates.find((t) => t.isSystem);\r\n\r\n return {\r\n templates,\r\n selectedTemplateId:\r\n systemTemplate?.id ?? eventTemplates[0]?.id ?? null,\r\n };\r\n },\r\n });\r\n }\r\n\r\n // Private Helpers\r\n private getSelectedTemplate(\r\n state: NotificationStateModel,\r\n ): NotificationTemplateItem | null {\r\n return (\r\n state.templates.find((t) => t.id === state.selectedTemplateId) ?? null\r\n );\r\n }\r\n}\r\n","import { Injectable, Signal, inject } from '@angular/core';\r\nimport { Store, select } from '@ngxs/store';\r\nimport { BaseFacade } from '@masterteam/components';\r\n\r\nimport {\r\n NotificationActionKey,\r\n NotificationStateModel,\r\n AddReceiversPayload,\r\n AddTemplatePayload,\r\n UpdateTemplatePayload,\r\n} from './notification.model';\r\nimport {\r\n AddReceivers,\r\n AddTemplate,\r\n DeleteReceiver,\r\n DeleteTemplate,\r\n GetActionProperties,\r\n GetActionReceivers,\r\n GetEvents,\r\n GetProperties,\r\n GetReceivers,\r\n ResetNotificationState,\r\n SelectEvent,\r\n SelectTemplate,\r\n SetActionMode,\r\n SetModuleInfo,\r\n UpdateTemplate,\r\n} from './notification.actions';\r\nimport { NotificationState } from './notification.state';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NotificationFacade extends BaseFacade<\r\n NotificationStateModel,\r\n NotificationActionKey\r\n> {\r\n private readonly store = inject(Store);\r\n\r\n // Selectors - Direct signals from state (fine-grained reactivity)\r\n private readonly stateSignal = select(NotificationState.getState);\r\n\r\n // Data selectors\r\n readonly events = select(NotificationState.getEvents);\r\n readonly templates = select(NotificationState.getEventTemplates);\r\n readonly receivers = select(NotificationState.getReceivers);\r\n readonly propertyGroups = select(NotificationState.getPropertyGroups);\r\n\r\n // Selection selectors\r\n readonly selectedEventName = select(NotificationState.getSelectedEventName);\r\n readonly selectedTemplateId = select(NotificationState.getSelectedTemplateId);\r\n readonly selectedEvent = select(NotificationState.getSelectedEvent);\r\n readonly selectedTemplate = select(NotificationState.getSelectedTemplate);\r\n readonly availableReceivers = select(NotificationState.getAvailableReceivers);\r\n\r\n // Required by BaseFacade\r\n protected state(): Signal<NotificationStateModel> {\r\n return this.stateSignal;\r\n }\r\n\r\n // Query Pattern (data + loading + error combined)\r\n readonly eventsQuery = this.query(\r\n NotificationActionKey.GetEvents,\r\n (state) => state.events,\r\n );\r\n\r\n readonly receiversQuery = this.query(\r\n NotificationActionKey.GetReceivers,\r\n (state) => state.receivers,\r\n );\r\n\r\n readonly propertyGroupsQuery = this.query(\r\n NotificationActionKey.GetProperties,\r\n (state) => state.propertyGroups,\r\n );\r\n\r\n // Loading/Error for CRUD operations (not covered by queries)\r\n readonly isAddingReceivers = this.loading(NotificationActionKey.AddReceivers);\r\n readonly isDeletingReceiver = this.loading(\r\n NotificationActionKey.DeleteReceiver,\r\n );\r\n readonly isAddingTemplate = this.loading(NotificationActionKey.AddTemplate);\r\n readonly isUpdatingTemplate = this.loading(\r\n NotificationActionKey.UpdateTemplate,\r\n );\r\n readonly isDeletingTemplate = this.loading(\r\n NotificationActionKey.DeleteTemplate,\r\n );\r\n\r\n // Action Dispatchers - Configuration\r\n setModuleInfo(\r\n moduleType: string,\r\n moduleId: string | number,\r\n parentModuleType?: string,\r\n parentModuleId?: string | number,\r\n parentPath?: string,\r\n ) {\r\n return this.store.dispatch(\r\n new SetModuleInfo(\r\n moduleType,\r\n moduleId,\r\n parentModuleType,\r\n parentModuleId,\r\n parentPath,\r\n ),\r\n );\r\n }\r\n\r\n resetState() {\r\n return this.store.dispatch(new ResetNotificationState());\r\n }\r\n\r\n // Action Dispatchers - Data Loading\r\n loadEvents() {\r\n return this.store.dispatch(new GetEvents());\r\n }\r\n\r\n loadReceivers() {\r\n return this.store.dispatch(new GetReceivers());\r\n }\r\n\r\n loadProperties(isMultiLang?: boolean) {\r\n return this.store.dispatch(new GetProperties(isMultiLang));\r\n }\r\n\r\n // Action Dispatchers - Action Mode (Workflow)\r\n setActionMode(actionId: string | number | null) {\r\n return this.store.dispatch(new SetActionMode(actionId));\r\n }\r\n\r\n loadActionReceivers(actionId: string | number) {\r\n return this.store.dispatch(new GetActionReceivers(actionId));\r\n }\r\n\r\n loadActionProperties(actionId: string | number, isMultiLang?: boolean) {\r\n return this.store.dispatch(new GetActionProperties(actionId, isMultiLang));\r\n }\r\n\r\n // Action Dispatchers - Selection\r\n selectEvent(eventName: string) {\r\n return this.store.dispatch(new SelectEvent(eventName));\r\n }\r\n\r\n selectTemplate(templateId: string | number) {\r\n return this.store.dispatch(new SelectTemplate(templateId));\r\n }\r\n\r\n // Action Dispatchers - Receiver CRUD\r\n addReceivers(templateId: string | number, payload: AddReceiversPayload) {\r\n return this.store.dispatch(new AddReceivers(templateId, payload));\r\n }\r\n\r\n deleteReceiver(receiverId: string | number) {\r\n return this.store.dispatch(new DeleteReceiver(receiverId));\r\n }\r\n\r\n // Action Dispatchers - Template CRUD\r\n\r\n addTemplate(eventId: string | number, payload: AddTemplatePayload) {\r\n return this.store.dispatch(new AddTemplate(eventId, payload));\r\n }\r\n\r\n updateTemplate(templateId: string | number, payload: UpdateTemplatePayload) {\r\n return this.store.dispatch(new UpdateTemplate(templateId, payload));\r\n }\r\n\r\n deleteTemplate(templateId: string | number) {\r\n return this.store.dispatch(new DeleteTemplate(templateId));\r\n }\r\n\r\n /**\r\n * Load all data for normal mode (non-workflow)\r\n */\r\n loadAllData(isMultiLang = true) {\r\n this.loadEvents();\r\n this.loadReceivers();\r\n this.loadProperties(isMultiLang);\r\n }\r\n}\r\n","import { Avatar } from '@masterteam/components/avatar';\r\nimport {\r\n Component,\r\n ChangeDetectionStrategy,\r\n inject,\r\n signal,\r\n computed,\r\n effect,\r\n untracked,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { TranslocoModule, TranslocoService } from '@jsverse/transloco';\r\n\r\n// Components\r\nimport { Card } from '@masterteam/components/card';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { SelectField } from '@masterteam/components/select-field';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport { TextareaField } from '@masterteam/components/textarea-field';\r\nimport { EditorField } from '@masterteam/components/editor-field';\r\nimport { ToggleField } from '@masterteam/components/toggle-field';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { Skeleton } from 'primeng/skeleton';\r\n\r\n// Dialog\r\nimport { AddTemplateDialog } from '../add-template-dialog/add-template-dialog';\r\n\r\n// Store\r\nimport {\r\n NotificationFacade,\r\n NotificationChannel,\r\n NotificationTemplateItem,\r\n ReceiverItem,\r\n UpdateTemplatePayload,\r\n CHANNEL_CONFIGS,\r\n ChannelConfig,\r\n getChannelConfig,\r\n} from '../../store/notification';\r\n\r\n@Component({\r\n selector: 'mt-notification-template',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n TranslocoModule,\r\n Card,\r\n Button,\r\n SelectField,\r\n TextField,\r\n TextareaField,\r\n EditorField,\r\n ToggleField,\r\n Tabs,\r\n Icon,\r\n Skeleton,\r\n Avatar,\r\n ],\r\n templateUrl: './notification-template.html',\r\n styleUrl: './notification-template.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NotificationTemplate {\r\n private readonly facade = inject(NotificationFacade);\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly modalService = inject(ModalService);\r\n\r\n // ============================================================================\r\n // Queries from Facade\r\n // ============================================================================\r\n readonly eventsQuery = this.facade.eventsQuery;\r\n readonly propertyGroupsQuery = this.facade.propertyGroupsQuery;\r\n readonly receiversQuery = this.facade.receiversQuery;\r\n\r\n // ============================================================================\r\n // Derived State from Facade\r\n // ============================================================================\r\n readonly selectedEventName = this.facade.selectedEventName;\r\n readonly selectedTemplateId = this.facade.selectedTemplateId;\r\n readonly selectedEvent = this.facade.selectedEvent;\r\n readonly selectedTemplate = this.facade.selectedTemplate;\r\n readonly templates = this.facade.templates;\r\n readonly availableReceivers = this.facade.availableReceivers;\r\n\r\n // Loading States\r\n readonly isUpdatingTemplate = this.facade.isUpdatingTemplate;\r\n readonly isDeletingTemplate = this.facade.isDeletingTemplate;\r\n readonly isAddingTemplate = this.facade.isAddingTemplate;\r\n\r\n // ============================================================================\r\n // Local State\r\n // ============================================================================\r\n readonly deletingReceiverIds = signal<(string | number)[]>([]);\r\n\r\n // ============================================================================\r\n // Form - Dynamic controls based on CHANNEL_CONFIGS\r\n // ============================================================================\r\n readonly form = this.buildForm();\r\n readonly propertyPickerControl = new FormControl<string | null>(null);\r\n private buildForm(): FormGroup {\r\n const fc = (v = '') => new FormControl<string>(v, { nonNullable: true });\r\n const controls: Record<string, FormControl | FormGroup> = {\r\n event: new FormControl<string | null>(null),\r\n name: fc(),\r\n channel: new FormControl<NotificationChannel>('email', {\r\n nonNullable: true,\r\n }),\r\n };\r\n\r\n for (const ch of CHANNEL_CONFIGS) {\r\n if (ch.templateKey) controls[ch.templateKey] = fc();\r\n if (ch.translatableKey) {\r\n // Nested FormGroup to match payload structure { en: '', ar: '' }\r\n controls[ch.translatableKey] = new FormGroup({\r\n en: fc(),\r\n ar: fc(),\r\n });\r\n }\r\n if (ch.bilingualOptional) {\r\n controls[`${ch.key}Bilingual`] = new FormControl<boolean>(false, {\r\n nonNullable: true,\r\n });\r\n }\r\n }\r\n return new FormGroup(controls);\r\n }\r\n\r\n // ============================================================================\r\n // Computed\r\n // ============================================================================\r\n readonly channelConfigs = CHANNEL_CONFIGS;\r\n\r\n /** Check if channel should show bilingual fields - reads from form */\r\n isBilingual(ch: ChannelConfig): boolean {\r\n if (!ch.supportsBilingual) return false;\r\n if (!ch.bilingualOptional) return true; // forced bilingual (app)\r\n return this.form.controls[`${ch.key}Bilingual`]?.value ?? false;\r\n }\r\n\r\n readonly channelOptions = computed(() =>\r\n CHANNEL_CONFIGS.map((c) => ({\r\n ...c,\r\n name: this.transloco.translate(c.labelKey),\r\n })),\r\n );\r\n\r\n readonly templateTabs = computed(() =>\r\n this.templates().map((t) => ({\r\n label: t.name,\r\n value: t.id,\r\n isSystem: t.isSystem,\r\n })),\r\n );\r\n\r\n readonly isFormInvalid = computed(\r\n () => !this.form.controls['name'].value?.trim(),\r\n );\r\n\r\n constructor() {\r\n effect(() => {\r\n const eventName = this.selectedEventName();\r\n if (eventName && this.form.controls['event'].value !== eventName) {\r\n this.form.controls['event'].setValue(eventName, { emitEvent: false });\r\n }\r\n });\r\n\r\n effect(() => {\r\n this.selectedTemplateId(); // depend on selected template id\r\n const template = untracked(this.selectedTemplate);\r\n if (template) this.patchForm(template);\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // Event Handlers\r\n // ============================================================================\r\n onEventChange(eventName: string): void {\r\n if (eventName) this.facade.selectEvent(eventName);\r\n }\r\n\r\n onTemplateTabChange(templateId: string): void {\r\n this.facade.selectTemplate(templateId);\r\n }\r\n\r\n // Channel is fixed per template - set on creation only\r\n\r\n onAddProperty(propertyKey: string): void {\r\n if (!propertyKey) return;\r\n\r\n const tag = `{{${propertyKey}}}`;\r\n const ch = getChannelConfig(this.form.controls['channel'].value);\r\n\r\n if (this.isBilingual(ch) && ch.translatableKey) {\r\n const group = this.form.get(ch.translatableKey) as FormGroup;\r\n if (group) {\r\n const enCtrl = group.get('en') as FormControl<string>;\r\n const arCtrl = group.get('ar') as FormControl<string>;\r\n enCtrl?.setValue(`${enCtrl.value ?? ''} ${tag}`);\r\n arCtrl?.setValue(`${arCtrl.value ?? ''} ${tag}`);\r\n }\r\n } else if (ch.templateKey) {\r\n this.appendToControl(ch.templateKey, tag);\r\n }\r\n\r\n setTimeout(() => {\r\n this.propertyPickerControl.reset();\r\n }, 0);\r\n }\r\n\r\n onAddReceiver(receiverId: string | number): void {\r\n const template = this.selectedTemplate();\r\n if (!receiverId || !template) return;\r\n const selectedReceiver = this.availableReceivers().find(\r\n (r) => r.id === receiverId,\r\n );\r\n if (!selectedReceiver) return;\r\n this.facade.addReceivers(template.id, { receivers: [selectedReceiver] });\r\n }\r\n\r\n onDeleteReceiver(receiver: ReceiverItem): void {\r\n this.confirmationService.confirmDelete({\r\n type: 'dialog',\r\n accept: () => {\r\n this.deletingReceiverIds.update((ids) => [...ids, receiver.id]);\r\n this.facade.deleteReceiver(receiver.id).subscribe({\r\n complete: () => {\r\n this.deletingReceiverIds.update((ids) =>\r\n ids.filter((id) => id !== receiver.id),\r\n );\r\n },\r\n error: () => {\r\n this.deletingReceiverIds.update((ids) =>\r\n ids.filter((id) => id !== receiver.id),\r\n );\r\n },\r\n });\r\n },\r\n });\r\n }\r\n\r\n isReceiverDeleting(receiverId: string | number): boolean {\r\n return this.deletingReceiverIds().includes(receiverId);\r\n }\r\n\r\n onSaveTemplate(): void {\r\n const template = this.selectedTemplate();\r\n if (!template || this.isFormInvalid()) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n\r\n // Build payload dynamically from all channel controls\r\n const payload = this.buildUpdatePayload(template);\r\n this.facade.updateTemplate(template.id, payload);\r\n }\r\n\r\n onDeleteTemplate(): void {\r\n const template = this.selectedTemplate();\r\n if (!template || template.isSystem) return;\r\n\r\n this.confirmationService.confirm({\r\n type: 'dialog',\r\n message: this.transloco.translate('notification.deleteTemplateMessage'),\r\n icon: 'general.trash-01',\r\n acceptButton: { severity: 'danger' },\r\n accept: () => this.facade.deleteTemplate(template.id),\r\n });\r\n }\r\n\r\n onAddTemplateClick(): void {\r\n const event = this.selectedEvent();\r\n if (!event) return;\r\n\r\n const ref = this.modalService.openModal(AddTemplateDialog, 'dialog', {\r\n header: this.transloco.translate('notification.addTemplate'),\r\n styleClass: '!w-[25rem]',\r\n });\r\n\r\n ref.onClose.subscribe((result: { name: string } | undefined) => {\r\n if (result?.name) {\r\n this.facade.addTemplate(event.id, {\r\n name: result.name,\r\n channel: this.form.controls['channel'].value,\r\n });\r\n }\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // Private Methods\r\n // ============================================================================\r\n private appendToControl(key: string, value: string): void {\r\n const ctrl = this.form.controls[key] as FormControl<string>;\r\n ctrl?.setValue(`${ctrl.value ?? ''} ${value}`);\r\n }\r\n\r\n private patchForm(template: NotificationTemplateItem): void {\r\n const channel = template.channel || 'email';\r\n\r\n this.form.patchValue({\r\n name: template.name,\r\n channel: channel,\r\n // Set email bilingual based on whether translatable content exists\r\n emailBilingual: !!template.emailContentTranslatable?.en,\r\n });\r\n\r\n // Patch all channel controls dynamically\r\n const t = template as unknown as Record<string, unknown>;\r\n for (const ch of CHANNEL_CONFIGS) {\r\n if (ch.templateKey) {\r\n this.form\r\n .get(ch.templateKey)\r\n ?.setValue((t[ch.templateKey] as string) ?? '');\r\n }\r\n if (ch.translatableKey) {\r\n const trans =\r\n (t[ch.translatableKey] as { en?: string; ar?: string }) ?? {};\r\n this.form.get(ch.translatableKey)?.patchValue({\r\n en: trans.en ?? '',\r\n ar: trans.ar ?? '',\r\n });\r\n }\r\n }\r\n }\r\n\r\n private buildUpdatePayload(\r\n template: NotificationTemplateItem,\r\n ): UpdateTemplatePayload {\r\n const v = this.form.getRawValue();\r\n return {\r\n name: v['name'] || template.name,\r\n ...this.extractChannelPayload(v),\r\n };\r\n }\r\n\r\n private extractChannelPayload(\r\n formValue: Record<string, unknown>,\r\n ): Record<string, unknown> {\r\n const payload: Record<string, unknown> = {};\r\n\r\n for (const ch of CHANNEL_CONFIGS) {\r\n if (ch.templateKey && formValue[ch.templateKey] !== undefined) {\r\n payload[ch.templateKey] = formValue[ch.templateKey] || '';\r\n }\r\n if (ch.translatableKey && formValue[ch.translatableKey] !== undefined) {\r\n payload[ch.translatableKey] = formValue[ch.translatableKey];\r\n }\r\n }\r\n\r\n return payload;\r\n }\r\n}\r\n\r\nexport default NotificationTemplate;\r\n","<div class=\"flex flex-col gap-4 p-2\" [formGroup]=\"form\">\r\n <!-- Loading State -->\r\n @if (eventsQuery.isPending()) {\r\n <div class=\"flex flex-col gap-4\">\r\n <!-- Event Selector Skeleton -->\r\n <div class=\"w-1/2\">\r\n <p-skeleton width=\"4rem\" height=\"1rem\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" borderRadius=\"0.5rem\" />\r\n </div>\r\n <!-- Tabs Skeleton -->\r\n <div class=\"flex items-center justify-between\">\r\n <div class=\"flex gap-2\">\r\n <p-skeleton width=\"5rem\" height=\"2.25rem\" borderRadius=\"0.5rem\" />\r\n <p-skeleton width=\"5rem\" height=\"2.25rem\" borderRadius=\"0.5rem\" />\r\n <p-skeleton width=\"5rem\" height=\"2.25rem\" borderRadius=\"0.5rem\" />\r\n </div>\r\n <p-skeleton width=\"8rem\" height=\"2.25rem\" borderRadius=\"0.5rem\" />\r\n </div>\r\n <!-- Name Field Skeleton -->\r\n <div class=\"grid grid-cols-2 gap-4\">\r\n <div>\r\n <p-skeleton width=\"3rem\" height=\"1rem\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" borderRadius=\"0.5rem\" />\r\n </div>\r\n </div>\r\n <!-- Channel & Properties Skeleton -->\r\n <div class=\"grid grid-cols-2 gap-4\">\r\n <div>\r\n <p-skeleton width=\"4rem\" height=\"1rem\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" borderRadius=\"0.5rem\" />\r\n </div>\r\n <div>\r\n <p-skeleton width=\"6rem\" height=\"1rem\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" borderRadius=\"0.5rem\" />\r\n </div>\r\n </div>\r\n <!-- Content Editor Skeleton -->\r\n <div>\r\n <p-skeleton width=\"4rem\" height=\"1rem\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"100%\" height=\"8rem\" borderRadius=\"0.5rem\" />\r\n </div>\r\n <div>\r\n <p-skeleton width=\"4rem\" height=\"1rem\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"100%\" height=\"8rem\" borderRadius=\"0.5rem\" />\r\n </div>\r\n <!-- Receivers Skeleton -->\r\n <div class=\"grid grid-cols-2 gap-4\">\r\n <div>\r\n <p-skeleton width=\"5rem\" height=\"1rem\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" borderRadius=\"0.5rem\" />\r\n </div>\r\n </div>\r\n <!-- Receiver Items Skeleton -->\r\n <div class=\"grid grid-cols-2 gap-4\">\r\n <div class=\"flex flex-col gap-2\">\r\n <p-skeleton width=\"100%\" height=\"3rem\" borderRadius=\"0.5rem\" />\r\n <p-skeleton width=\"100%\" height=\"3rem\" borderRadius=\"0.5rem\" />\r\n </div>\r\n </div>\r\n <!-- Actions Skeleton -->\r\n <div class=\"flex justify-end gap-2 pt-4\">\r\n <p-skeleton width=\"5rem\" height=\"2.5rem\" borderRadius=\"0.5rem\" />\r\n <p-skeleton width=\"5rem\" height=\"2.5rem\" borderRadius=\"0.5rem\" />\r\n </div>\r\n </div>\r\n } @else {\r\n <!-- Events Selector -->\r\n <div class=\"w-1/2\">\r\n <mt-select-field\r\n formControlName=\"event\"\r\n [options]=\"eventsQuery.data() ?? []\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'eventName'\"\r\n [label]=\"'notification.events' | transloco\"\r\n [placeholder]=\"'notification.selectEvent' | transloco\"\r\n [required]=\"true\"\r\n [filter]=\"false\"\r\n (onChange)=\"onEventChange($event)\"\r\n />\r\n </div>\r\n @if ((eventsQuery.data() ?? []).length === 0) {\r\n <!-- Empty State -->\r\n <mt-card>\r\n <div\r\n class=\"flex flex-col items-center justify-center py-12 text-slate-500\"\r\n >\r\n <mt-icon icon=\"alert.alert-circle\" class=\"mb-2 h-12 w-12\" />\r\n <p>{{ \"notification.noEventsFound\" | transloco }}</p>\r\n </div>\r\n </mt-card>\r\n } @else if (selectedEvent()) {\r\n <!-- Template Tabs -->\r\n <div class=\"flex items-center justify-between\">\r\n <mt-tabs\r\n [active]=\"selectedTemplateId()\"\r\n [options]=\"templateTabs()\"\r\n (activeChange)=\"onTemplateTabChange($event)\"\r\n />\r\n <mt-button\r\n icon=\"general.plus\"\r\n [label]=\"'notification.newNotification' | transloco\"\r\n size=\"small\"\r\n [loading]=\"isAddingTemplate()\"\r\n (onClick)=\"onAddTemplateClick()\"\r\n />\r\n </div>\r\n <!-- Template Content -->\r\n @if (selectedTemplate(); as template) {\r\n <div class=\"flex flex-col gap-4\">\r\n <!-- Name -->\r\n <div class=\"grid grid-cols-2 gap-4\">\r\n <mt-text-field\r\n formControlName=\"name\"\r\n [label]=\"'notification.name' | transloco\"\r\n [placeholder]=\"'notification.enterName' | transloco\"\r\n [required]=\"true\"\r\n />\r\n </div>\r\n <!-- Channel & Properties Picker Row -->\r\n <div class=\"grid grid-cols-2 gap-4\">\r\n <mt-select-field\r\n formControlName=\"channel\"\r\n [options]=\"channelOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'key'\"\r\n [label]=\"'notification.channel.label' | transloco\"\r\n [placeholder]=\"'notification.selectChannel' | transloco\"\r\n [required]=\"true\"\r\n [filter]=\"false\"\r\n [disabled]=\"true\"\r\n />\r\n <mt-select-field\r\n [options]=\"propertyGroupsQuery.data() ?? []\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'key'\"\r\n [group]=\"true\"\r\n [optionGroupLabel]=\"'groupName'\"\r\n [optionGroupChildren]=\"'properties'\"\r\n [label]=\"'notification.propertiesList' | transloco\"\r\n [placeholder]=\"'notification.selectProperty' | transloco\"\r\n [hasPlaceholderPrefix]=\"false\"\r\n [filter]=\"true\"\r\n [filterBy]=\"'name'\"\r\n [loading]=\"propertyGroupsQuery.isPending()\"\r\n [formControl]=\"propertyPickerControl\"\r\n (onChange)=\"onAddProperty($event)\"\r\n />\r\n </div>\r\n <!-- Channel Content Editors -->\r\n @for (ch of channelConfigs; track ch.key) {\r\n @if (form.controls[\"channel\"].value === ch.key) {\r\n <!-- Bilingual Content Fields -->\r\n @if (isBilingual(ch) && ch.translatableKey) {\r\n <ng-container [formGroupName]=\"ch.translatableKey\">\r\n @if (ch.useRichEditor) {\r\n <mt-editor-field\r\n formControlName=\"en\"\r\n [label]=\"'notification.english' | transloco\"\r\n dir=\"ltr\"\r\n />\r\n <mt-editor-field\r\n formControlName=\"ar\"\r\n [label]=\"'notification.arabic' | transloco\"\r\n dir=\"rtl\"\r\n />\r\n } @else {\r\n <mt-textarea-field\r\n formControlName=\"en\"\r\n [label]=\"'notification.english' | transloco\"\r\n [rows]=\"'6'\"\r\n dir=\"ltr\"\r\n />\r\n <mt-textarea-field\r\n formControlName=\"ar\"\r\n [label]=\"'notification.arabic' | transloco\"\r\n [rows]=\"'6'\"\r\n dir=\"rtl\"\r\n />\r\n }\r\n </ng-container>\r\n } @else if (ch.templateKey) {\r\n <!-- Non-Bilingual Content Field -->\r\n @if (ch.useRichEditor) {\r\n <mt-editor-field\r\n [formControlName]=\"ch.templateKey\"\r\n [label]=\"'notification.notificationBody' | transloco\"\r\n />\r\n } @else {\r\n <mt-textarea-field\r\n [formControlName]=\"ch.templateKey\"\r\n [label]=\"'notification.notificationBody' | transloco\"\r\n [rows]=\"'6'\"\r\n />\r\n }\r\n }\r\n <!-- Bilingual Toggle -->\r\n @if (ch.bilingualOptional) {\r\n <mt-toggle-field\r\n [formControlName]=\"ch.key + 'Bilingual'\"\r\n [label]=\"'notification.bilingual' | transloco\"\r\n />\r\n }\r\n }\r\n }\r\n <!-- Receivers -->\r\n <div class=\"grid grid-cols-2 gap-4\">\r\n <mt-select-field\r\n [options]=\"availableReceivers()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'id'\"\r\n [label]=\"'notification.receivers' | transloco\"\r\n [placeholder]=\"'notification.selectReceiver' | transloco\"\r\n [filter]=\"true\"\r\n [loading]=\"receiversQuery.isPending()\"\r\n (onChange)=\"onAddReceiver($event)\"\r\n />\r\n </div>\r\n @if ((template.receivers ?? []).length > 0) {\r\n <div class=\"grid grid-cols-2 gap-4\">\r\n <div class=\"flex flex-col gap-2\">\r\n @for (receiver of template.receivers; track receiver.id) {\r\n <div\r\n class=\"flex items-center justify-between rounded-lg border border-surface bg-surface-50 p-1 transition-colors hover:bg-surface-100\"\r\n >\r\n <div class=\"flex items-center gap-3\">\r\n <mt-avatar\r\n icon=\"user.user-01\"\r\n shape=\"square\"\r\n size=\"small\"\r\n />\r\n <span class=\"font-medium\">{{ receiver.name }}</span>\r\n </div>\r\n @if (!receiver.isSystem) {\r\n <mt-button\r\n icon=\"general.trash-01\"\r\n severity=\"danger\"\r\n [text]=\"true\"\r\n [loading]=\"isReceiverDeleting(receiver.id)\"\r\n (onClick)=\"onDeleteReceiver(receiver)\"\r\n />\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n <!-- Actions -->\r\n <div class=\"flex justify-end gap-2 pt-4\">\r\n @if (!template.isSystem) {\r\n <mt-button\r\n [label]=\"'notification.delete' | transloco\"\r\n severity=\"danger\"\r\n [loading]=\"isDeletingTemplate()\"\r\n [disabled]=\"isUpdatingTemplate()\"\r\n (onClick)=\"onDeleteTemplate()\"\r\n />\r\n }\r\n <mt-button\r\n [label]=\"'notification.save' | transloco\"\r\n [loading]=\"isUpdatingTemplate()\"\r\n [disabled]=\"isDeletingTemplate() || isFormInvalid()\"\r\n (onClick)=\"onSaveTemplate()\"\r\n />\r\n </div>\r\n </div>\r\n }\r\n }\r\n }\r\n</div>\r\n","import { NotificationState } from './notification/notification.state';\r\n\r\nexport const APP_STATES = [NotificationState];\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@masterteam/notification",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.8",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"directory": "../../../dist/masterteam/notification",
|
|
6
6
|
"linkDirectory": false,
|
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
"tailwindcss": "^4.1.17",
|
|
20
20
|
"tailwindcss-primeui": "^0.6.1",
|
|
21
21
|
"@ngxs/store": "^20.1.0",
|
|
22
|
-
"@masterteam/
|
|
22
|
+
"@masterteam/forms": "^0.0.33",
|
|
23
23
|
"@masterteam/icons": "^0.0.12",
|
|
24
|
-
"@masterteam/
|
|
24
|
+
"@masterteam/components": "^0.0.78"
|
|
25
25
|
},
|
|
26
26
|
"sideEffects": false,
|
|
27
27
|
"exports": {
|