{"version":3,"file":"acknow-srl-ack6-lib-messages.mjs","sources":["../../../projects/ack6-lib/messages/store/actions/messages.actions.ts","../../../projects/ack6-lib/messages/store/actions/framework.actions.ts","../../../projects/ack6-lib/messages/store/reducers/messages.reducer.ts","../../../projects/ack6-lib/messages/models/message.model.ts","../../../projects/ack6-lib/messages/decorator/app-component-registry.ts","../../../projects/ack6-lib/messages/components/reactive-message/reactive-message.component.ts","../../../projects/ack6-lib/messages/components/reactive-message/reactive-message.component.html","../../../projects/ack6-lib/messages/messages.module.ts","../../../projects/ack6-lib/messages/acknow-srl-ack6-lib-messages.ts"],"sourcesContent":["import { createAction, props } from '@ngrx/store';\nimport { Message } from '../../models/message.model';\n\nexport const addMessage = createAction('[MESSAGES] Add message', props<{ message: Omit<Message, 'createdAt' | 'notified'> }>());\nexport const markAsRead = createAction('[MESSAGES] Mark as read', props<{ uid: string }>());\nexport const markAllAsRead = createAction('[MESSAGES] Mark all as read');\nexport const clearMessages = createAction('[MESSAGES] Clear all messages');\n","import { createAction, props } from '@ngrx/store';\n\nexport const markAsNotified = createAction('[MESSAGES] Mark as notified', props<{uid: string}>());\n","import { Action, createReducer, createSelector, on } from '@ngrx/store';\nimport * as FrameworkActions from '../actions/framework.actions';\nimport * as MessagesActions from '../actions/messages.actions';\nimport { v4 } from 'uuid';\nimport { cloneDeep, find } from 'lodash';\nimport { Message } from '../../models/message.model';\n\nexport const key = 'messages';\n\nexport type State = Array<Message>;\n\nconst initialState: State = [];\n\nconst rawReducer = createReducer(\n  initialState,\n  on(MessagesActions.addMessage, (state, props) =>\n    ([...state, { ...props.message, uid: props.message.uid ?? v4(), createdAt: new Date(), notified: false }])\n  ),\n  on(MessagesActions.markAsRead, (state, props) => {\n    const newState = cloneDeep(state);\n    const found = find(newState, (message: Message) => message.uid === props.uid);\n    if (found) { found.read = true; }\n    return newState;\n  }),\n  on(FrameworkActions.markAsNotified, (state, props) => {\n    const newState = cloneDeep(state);\n    const found = find(newState, (message: Message) => message.uid === props.uid);\n    if (found) { found.notified = true; }\n    return newState;\n  }),\n  on(MessagesActions.markAllAsRead, (state, props) => {\n    const newState = cloneDeep(state);\n    newState.forEach((message: Message) => {\n      if (!message.read) { message.read = true; }\n    });\n    return newState;\n  }),\n  on(MessagesActions.clearMessages, (state, props) => [])\n);\n\nexport function reducer(state: State | undefined, action: Action): State {\n  return rawReducer(state, action);\n}\n\nexport const selectMessages = (state: any) => {\n  const messages = cloneDeep(state[key]);\n  messages.sort((a: any, b: any) => b.createdAt.getTime() - a.createdAt.getTime());\n  return messages;\n};\n\nexport const selectUnnotifiedMessages = createSelector(\n  selectMessages,\n  (messages: State) => messages.filter((msg: Message) => !msg.notified)\n);\n\nexport const selectUnreadMessages = createSelector(\n  selectMessages,\n  (messages: State) => messages.filter((msg: Message) => !msg.read)\n);\n\nexport const selectReadMessages = createSelector(\n  selectMessages,\n  (messages: State) => messages.filter((msg: Message) => msg.read)\n);\n\n\nexport const selectLastMessageByAncestor = (uuid: string) => createSelector(\n  selectMessages,\n  (messages: State) => messages.find(msg => msg.ancestorUid === uuid)\n);\n","export enum MessageType {\n  INFO = 'INFO',\n  SUCCESS = 'SUCCESS',\n  WARNING = 'WARNING',\n  DANGER = 'DANGER',\n  SOCKET = 'SOCKET',\n  DELEGATE = 'DELEGATE',\n  DELEGATE_CLOSE = 'DELEGATE_CLOSE'\n}\n\nexport interface Delegate<T> {\n  name: string;\n  args?: T;\n}\n\nexport interface Message<T = any> {\n  uid?: string;\n  ancestorUid?: string;\n  type: string;\n  createdAt: Date;\n  sticky?: boolean;\n  text?: string;\n  read?: boolean;\n  notified: boolean;\n  payload?: any;\n  delegate?: Delegate<T>;\n  toast?: boolean;\n}\n\n","/*\n * @author http://bradford.digital\n * @link https://stackoverflow.com/questions/42949647/resolve-type-of-component-from-string-in-angular2\n *\n * Keep a registry of key:value pairs that is the string name of a component and the Component reference\n * The registry is stored in an exported const named COMPONENTREGISTRY\n * Add to the registry by using the registerComponent() function as an adorner. example:\n *     @registerComponent\n *     @Component({...})\n *     export class AnExampleComponent {...}\n * Get a component by its string name by calling COMPONENTREGISTRY.getTypeFor('AnExampleComponent')\n * Or get it by its template name if your following general angular naming convention COMPONENTREGISTRY.getTypeFor('app-an-example')\n *\n * TODO: add the html template string without guessing like we are now?\n *     A class couuld be obtained by calling COMPONENTREGISTRY.getTypeFor('app-an-example')\n**/\n\n// tslint:disable-next-line: no-empty-interface\ninterface Component { }\n\n// tslint:disable-next-line: callable-types\nexport interface ComponentClass { new(...anys: any[]): Component; }\n\nclass ComponentRegistry {\n\n  registry = new Map<string, ComponentClass>();\n\n  getTypeFor(name: string): ComponentClass {\n    // console.log(`recupero ${name}`);\n    if (typeof name !== 'string') {\n      throw new Error(`Il parametro 'name' deve essere il nome del componente modale.`);\n    }\n    if (name.match('-')) {\n      name = this.getComponentNameFromTemplate(name);\n    }\n    const componentClass: ComponentClass | undefined = this.registry.get(name);\n    if (componentClass == null) {\n      throw new Error(`${name} non è stato trovato in COMPONENTREGISTRY.registry, verifica di averlo registrato con @registerComponent`);\n    }\n    return componentClass;\n  }\n  getComponentNameFromTemplate(name: string): string {\n    const words: string[] = name.split('-');\n    words.splice(0, 1); // remove the prefix\n    for (let i = 0; i < words.length; i++) {\n      const capitalized = words[i].charAt(0).toUpperCase() + words[i].slice(1);\n      words.splice(i, 1, capitalized);\n    }\n    const componentName = words.join('') + 'Component';\n    return componentName;\n  }\n\n  register(name: string, cls: ComponentClass): void {\n    // console.log(`registro 2 ${name} : ${cls.name}`);\n    this.registry.set(name, cls);\n  }\n\n}\n\nexport const COMPONENTREGISTRY = new ComponentRegistry();\n\n/*\nexport function registerComponent(componentClass: ComponentClass): void {\n  COMPONENTREGISTRY.register(componentClass);\n}\n*/\n\nexport function registerComponent(name: string): ((target: ComponentClass) => void) {\n  return function decorator(target: ComponentClass): void {\n    // console.log(`registro 1 ${name} : ${target.name}`);\n    COMPONENTREGISTRY.register(name, target);\n  };\n}\n","import { AfterViewInit, ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { concatAll, distinctUntilChanged, groupBy, map, switchMap, takeWhile, tap, throttleTime } from 'rxjs/operators';\nimport { MenuItem, MessageService } from 'primeng/api';\nimport { Observable } from 'rxjs';\nimport * as FrameworkActions from '../../store/actions/framework.actions';\nimport * as MessagesActions from '../../store/actions/messages.actions';\nimport * as fromRoot from '../../store/reducers/messages.reducer';\nimport { Message, MessageType } from '../../models/message.model';\nimport { DialogService } from 'primeng/dynamicdialog';\nimport { COMPONENTREGISTRY } from '../../decorator/app-component-registry';\n\n@Component({\n    selector: 'ack6-reactive-message',\n    templateUrl: './reactive-message.component.html',\n    styleUrls: ['./reactive-message.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ReactiveMessageComponent implements OnInit, OnDestroy, AfterViewInit {\n\n    public unnotifiedMessages$: Observable<Message[]>;\n    public unreadMessages$: Observable<Message[]>;\n    public readMessages$: Observable<Message[]>;\n    public items: MenuItem[];\n    public activeItem: MenuItem;\n    public activeItemIndex: number;\n    private dialogRefs: any = {};\n    private isDestroying: boolean;\n\n    private messageTypeAttributes: {\n        [key: string]: {\n            icon: string, class: string, toast?: { severity: string, summary: string, closeAncestorDelegate?: boolean }\n        }\n    };\n\n    constructor(\n        private store: Store<fromRoot.State>,\n        private messageSvc: MessageService,\n        private dialogSvc: DialogService\n    ) {\n        this.activeItemIndex = 0;\n        this.unnotifiedMessages$ = this.store.pipe(select(fromRoot.selectUnnotifiedMessages));\n        this.unreadMessages$ = this.store.pipe(select(fromRoot.selectUnreadMessages));\n        this.readMessages$ = this.store.pipe(select(fromRoot.selectReadMessages));\n        this.items = [\n            { label: 'Non letti', command: (evt) => this.setActiveItem(0) },\n            { label: 'Letti', command: (evt) => this.setActiveItem(1) },\n        ];\n        this.activeItem = this.items[0];\n        this.setActiveItem(0);\n        this.isDestroying = false;\n\n        this.messageTypeAttributes = {\n\n            [MessageType.DANGER]: {\n                class: 'notify-danger', icon: 'highlight_off', toast: { severity: 'error', summary: 'Errore', closeAncestorDelegate: true }\n            },\n            [MessageType.WARNING]: {\n                class: 'notify-warning', icon: 'error_outline',\n                toast: { severity: 'warn', summary: 'Attenzione', closeAncestorDelegate: true }\n            },\n            [MessageType.INFO]: {\n                class: 'notify-info', icon: 'info', toast: { severity: 'info', summary: 'Info' }\n            },\n            [MessageType.SUCCESS]: {\n                class: 'notify-success', icon: 'check_circle_outline', toast: { severity: 'success', summary: 'OK!' }\n            },\n            [MessageType.SOCKET]: { class: '', icon: 'chat_bubble_outline' }\n\n        };\n    }\n\n    setActiveItem = (index: number): void => {\n\n        this.activeItemIndex = index;\n\n    }\n\n    getIcon = (message: Message): string => this.messageTypeAttributes[message.type]?.icon || 'chat_bubble_outline';\n\n    getClass = (message: Message): string => this.messageTypeAttributes[message.type]?.class;\n\n    notifyMessage = (message: Message) => {\n\n        if (!message.uid) {\n            throw new Error('missing message uid');\n        }\n\n        // check if the message needs a toast to be notified\n        if (message.toast) {\n            this.notifyToast(message);\n        }\n\n        if (message.type === MessageType.DELEGATE) {\n            this.notifyDelegate(message);\n        }\n\n        if (message.type === MessageType.DELEGATE_CLOSE) {\n\n            if (!message.ancestorUid) {\n                throw new Error('unable to determine delegate to close, missing \"ancestorUid\" on message');\n            }\n\n            this.closeDelegate(message.ancestorUid);\n        }\n\n    }\n\n    private notifyToast = (message: Message) => {\n\n        // check if the message type has a toast configuration\n        let toastSettings = this.messageTypeAttributes[message.type].toast;\n\n        // fallback to info toast if needed\n        if (!toastSettings) {\n            console.warn(`[${message.type}] message type has no toast settings, fallback to INFO`);\n            toastSettings = this.messageTypeAttributes[MessageType.INFO].toast;\n        }\n\n        this.messageSvc.add({\n            key: 'bc',\n            severity: toastSettings?.severity,\n            summary: toastSettings?.summary,\n            sticky: message.sticky,\n            detail: `${message.text}`,\n            data: message\n        });\n\n        if (toastSettings?.closeAncestorDelegate) {\n            this.closeDelegate(message.ancestorUid || '');\n        }\n\n    }\n\n    private notifyDelegate = (message: Message) => {\n\n        if (!message.delegate) {\n            console.warn('DELEGATE message without delegate!!');\n            return;\n        }\n\n        // existence of uid is checked on \"notifyMessage\" function, so we can assume that exist and that is a string\n        this.dialogRefs[message.uid as string] = this.dialogSvc.open(\n            COMPONENTREGISTRY.getTypeFor(message.delegate.name),\n            {\n                data: message.delegate.args,\n                showHeader: false,\n                styleClass: 'loading-dialog'\n            }\n        );\n\n    }\n\n    private closeDelegate = (delegateId: string) => {\n\n        if (!this.dialogRefs[delegateId]) {\n            return;\n        }\n\n        this.dialogRefs[delegateId].close();\n\n    }\n\n    markAsRead = (message: Message): void => this.store.dispatch(MessagesActions.markAsRead({ uid: message.uid || '' }));\n\n    markAllAsRead = (): void => this.store.dispatch(MessagesActions.markAllAsRead());\n\n    clearMessages = () => this.store.dispatch(MessagesActions.clearMessages());\n\n    onClose = ($event: any) => this.store.dispatch(MessagesActions.markAsRead({ uid: $event.message.data.uid }));\n\n    ngOnInit(): void {\n    }\n\n    ngAfterViewInit(): void {\n        this.unnotifiedMessages$.pipe(\n            takeWhile(() => !this.isDestroying),\n            concatAll(),\n            groupBy(n => n.uid),\n            switchMap(group => group.pipe(\n                distinctUntilChanged((prev, curr) => prev.uid === curr.uid),\n                tap((message: Message) => {\n                    try {\n                        this.notifyMessage(message);\n                    } catch (error) {\n                        console.error(error);\n                    } finally {\n                        this.store.dispatch(FrameworkActions.markAsNotified({ uid: message.uid || '' }));\n                    }\n                })\n            ))\n        ).subscribe();\n    }\n\n    ngOnDestroy(): void {\n        this.isDestroying = true;\n    }\n\n}\n","<button type=\"button\" pButton class=\"p-button-text p-button-icon-only notification\" badgeClass=\"p-badge-danger\"\n  title=\"Notifiche\" (click)=\"notifyPanel.toggle($event)\">\n  <span class=\"icon\" [ngClass]=\"{vibe: (unreadMessages$ | async)?.length}\">notifications</span>\n  <p-badge *ngIf=\"(unreadMessages$ | async)?.length as unread\" [value]=\"(unread>99)? '99+' : unread + ''\" severity=\"danger\"></p-badge>\n</button>\n\n<p-overlayPanel #notifyPanel styleClass=\"notify-panel\" appendTo=\"body\" (onShow)=\"setActiveItem(0)\">\n  <ng-template pTemplate>\n\n    <div class=\"notify-tabs\">\n      <p-tabMenu [model]=\"items\" [activeItem]=\"activeItem\"></p-tabMenu>\n      <div>\n        <button type=\"button\" title=\"Segna tutti come già letti\" (click)=\"markAllAsRead()\"><span class=\"icon\">visibility</span></button>\n        <button type=\"button\" class=\"danger\" title=\"Cancella tutti\" (click)=\"clearMessages()\"><span class=\"icon\">delete</span></button>\n      </div>\n    </div>\n\n    <div class=\"notify-panel-content\">\n\n      <ng-container *ngIf=\"activeItemIndex===0\">\n\n        <ng-container *ngIf=\"(unreadMessages$ | async)?.length; else noMessages\">\n          <div class=\"notify\" [ngClass]=\"getClass(m)\" *ngFor=\"let m of unreadMessages$ | async; let l = last\">\n            <div class=\"notify-wrapper\">\n              <div class=\"notify-icon\">\n                <span class=\"icon\">{{getIcon(m)}}</span>\n              </div>\n              <div class=\"notify-content\">\n                <p>{{m.text}}</p>\n                <div class=\"notify-footer\">\n                  <time>{{m.createdAt | date : 'EEE d MMM yyyy @ HH:mm'}}</time>\n                  <button type=\"button\" pButton class=\"p-button-text p-button-sm\" icon=\"pi pi-eye\" title=\"Letto\" *ngIf=\"!m.sticky\" (click)=\"markAsRead(m)\"></button>\n                </div>\n              </div>\n            </div>\n            <p-divider *ngIf=\"!l\" styleClass=\"divider\"></p-divider>\n          </div>\n        </ng-container>\n\n      </ng-container>\n\n      <ng-container *ngIf=\"activeItemIndex===1\">\n\n        <ng-container *ngIf=\"(readMessages$ | async)?.length; else noMessages\">\n          <div class=\"notify\" [ngClass]=\"getClass(m)\" *ngFor=\"let m of readMessages$ | async; let l = last\">\n            <div class=\"notify-wrapper\">\n              <div class=\"notify-icon\">\n                <span class=\"icon\">{{getIcon(m)}}</span>\n              </div>\n              <div class=\"notify-content\">\n                <p>{{m.text}}</p>\n                <div class=\"notify-footer\">\n                  <time>{{m.createdAt | date : 'EEE d MMM yyyy @ HH:mm'}}</time>\n                </div>\n              </div>\n            </div>\n            <p-divider *ngIf=\"!l\" styleClass=\"divider\"></p-divider>\n          </div>\n        </ng-container>\n\n      </ng-container>\n\n    </div>\n\n  </ng-template>\n</p-overlayPanel>\n\n<ng-template #noMessages>\n  <p>Nessun messaggio.</p>\n</ng-template>\n\n<div class=\"notify-toast\">\n  <p-toast position=\"bottom-center\" key=\"bc\" (onClose)=\"onClose($event)\"></p-toast>\n</div>\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveMessageComponent } from './components/reactive-message/reactive-message.component';\n\n// primeng\nimport { BadgeModule } from 'primeng/badge';\nimport { ButtonModule } from 'primeng/button';\nimport { DynamicDialogModule, DialogService } from 'primeng/dynamicdialog';\nimport { DividerModule } from 'primeng/divider';\nimport { OverlayPanelModule } from 'primeng/overlaypanel';\nimport { TabMenuModule } from 'primeng/tabmenu';\nimport { ToastModule } from 'primeng/toast';\nimport { MessageService } from 'primeng/api';\nimport { ComponentClass, COMPONENTREGISTRY } from './decorator/app-component-registry';\n\n// store\nimport { StoreModule } from '@ngrx/store';\nimport * as fromRoot from './store/reducers/messages.reducer';\n\n@NgModule({\n  declarations: [\n    ReactiveMessageComponent\n  ],\n  imports: [\n    CommonModule,\n    BadgeModule,\n    ButtonModule,\n    DynamicDialogModule,\n    DividerModule,\n    OverlayPanelModule,\n    TabMenuModule,\n    ToastModule,\n    StoreModule.forFeature(fromRoot.key, fromRoot.reducer)\n  ],\n  exports: [\n    ReactiveMessageComponent\n  ],\n  providers: [\n    DialogService,\n    MessageService\n  ]\n})\nexport class MessagesModule {\n\n  static forRoot(components: {[key: string]: ComponentClass}): ModuleWithProviders<MessagesModule> {\n\n    for (const key in components) {\n\n      if (!components[key]) {\n        continue;\n      }\n\n      COMPONENTREGISTRY.register(key, components[key]);\n\n    }\n\n    return {\n      ngModule: MessagesModule\n    };\n  }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["MessagesActions.addMessage","MessagesActions.markAsRead","FrameworkActions.markAsNotified","MessagesActions.markAllAsRead","MessagesActions.clearMessages","fromRoot.selectUnnotifiedMessages","fromRoot.selectUnreadMessages","fromRoot.selectReadMessages","fromRoot.key","fromRoot.reducer"],"mappings":"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"}