ems-web-app-messages
Version:
This angular.io module includes a component and service that can be used to render "Growl" or "Snackbar" style in-app messages.
1 lines • 13.5 kB
Source Map (JSON)
{"version":3,"file":"ems-web-app-messages.mjs","sources":["../../src/lib/messages.service.ts","../../src/lib/messages.enums.ts","../../src/lib/messages.component.ts","../../src/lib/messages.module.ts","../../src/public-api.ts","../../src/ems-web-app-messages.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Observable, Subject, BehaviorSubject, throwError, of } from 'rxjs';\nimport { IMessage } from \"./messages.interfaces\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MessagesService {\n\n private currentMessageSource:BehaviorSubject<IMessage | undefined> = new BehaviorSubject< IMessage | undefined>(undefined);\n public currentMessage = this.currentMessageSource.asObservable();\n\n constructor() { }\n\n public setCurrentMessage(message: IMessage | undefined) {\n this.currentMessageSource.next(message);\n }\n}\n","export enum MessageType {\n\tGrowl = \"growl\",\n\tSnackbar = \"snackbar\"\n}\n\nexport enum MessagePosition {\n\tTopLeft = \"top left\",\n\tTopCenter = \"top center\",\n\tTopRight = \"top right\",\n\tBottomLeft = \"bottom left\",\n\tBottomCenter = \"bottom center\",\n\tBottomRight = \"bottom right\"\n}","import { Component, OnInit, Input, HostListener, HostBinding } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { MessageType, MessagePosition } from \"./messages.enums\";\nimport { IMessage } from \"./messages.interfaces\";\nimport { MessagesService } from \"./messages.service\";\n\n@Component({\n selector: 'messages',\n template: `\n <ng-container *ngTemplateOutlet=\"currentMessage?.template ?? null\"></ng-container>\n <div *ngIf=\"!currentMessage?.template\" [attr.role]=\"currentMessage ? 'alert':'generic'\" class=\"message-text\" [innerHtml]=\"sanitizer.bypassSecurityTrustHtml(currentMessage?.message || ' ')\"></div>\n <div class=\"style-container\" [innerHtml]=\"styles\"></div>\n `,\n styleUrls: [ './messages.component.less' ]\n})\nexport class MessagesComponent implements OnInit {\n\n @HostBinding('class.render') render: boolean = false;\n @HostBinding('class') classes: string = \"\";\n @Input(\"background\") background: string = \"rgba(0,0,0,0.75)\";\n @Input(\"color\") color: string = \"#fff\";\n @Input(\"z-index\") zIndex: number = 1000;\n @Input(\"transition-speed\") speed: number = 0.5;\n\n\n public styles!: SafeHtml;\n public currentMessage?: IMessage;\n public queue: IMessage[] = [];\n\n private timeout: number = 0;\n\n constructor(private service: MessagesService, public sanitizer: DomSanitizer) { }\n\n ngOnInit(): void {\n this.service.currentMessage.subscribe(message => {\n if(!message && !this.currentMessage) return;\n if(!message) this.processMessageQueue(true);\n if(!this.validateMessage(message!)) return;\n this.queue.push(message!);\n this.processMessageQueue();\n });\n }\n\n @HostListener('click', ['$event.target'])\n onContainerClick = (element: HTMLElement) => {\n this.processMessageQueue(true);\n }\n\n private initializeStyles() {\n if(!this.currentMessage) return;\n const duration = this.currentMessage.duration ?? 1;\n const output = `messages { \n background: ${this.background}; \n color: ${this.color}; \n transition-duration: ${this.speed}s; \n z-index: ${this.zIndex};\n } \n messages.render {\n transition-duration: ${this.speed}s;\n }`;\n this.styles = this.sanitizer.bypassSecurityTrustHtml(`<style>${output}</style>`);\n }\n\n private async processMessageQueue(force: boolean = false) {\n if(this.currentMessage && !force) return;\n await this.removeCurrentMessage();\n this.currentMessage = this.queue.shift();\n this.classes = `${this.currentMessage?.position} ${this.currentMessage?.type} ${this.currentMessage?.classes ?? ''}`;\n await this.tick();\n this.initializeStyles();\n this.showNextMessage();\n }\n\n private removeCurrentMessage() {\n clearTimeout(this.timeout);\n\n return new Promise((resolve: (message?: IMessage) => void) => {\n if(!this.currentMessage) {\n setTimeout(() => resolve());\n } else {\n this.render = false;\n setTimeout(() => resolve(), this.speed * 1000);\n }\n });\n }\n\n private tick() {\n return new Promise((resolve: (message?: IMessage) => void) => {\n setTimeout(() => resolve(), this.speed * 1000);\n });\n }\n\n private showNextMessage() {\n if(!this.currentMessage) return;\n setTimeout(() => this.render = true);\n this.timeout = window.setTimeout(() => this.processMessageQueue(true), this.currentMessage.duration * 1000);\n }\n\n private validateMessage(message: IMessage): boolean {\n const growlPositions = [MessagePosition.BottomLeft, MessagePosition.BottomRight, MessagePosition.TopLeft, MessagePosition.TopRight];\n const snackbarPositions = [MessagePosition.TopCenter, MessagePosition.BottomCenter];\n if(!message) return false;\n \n if(message.type === MessageType.Growl && growlPositions.indexOf(message.position) === -1) {\n throw new Error(\"Growl messages must use one of the following positions: MessagePosition.BottomLeft, MessagePosition.BottomRight, MessagePosition.TopLeft, MessagePosition.TopRight\")\n return false;\n }\n\n if(message.type === MessageType.Snackbar && snackbarPositions.indexOf(message.position) === -1) {\n throw new Error(\"Snackbar messages must use one of the following positions: MessagePosition.TopCenter, MessagePosition.BottomCenter\")\n return false;\n }\n\n return true;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MessagesComponent } from './messages.component';\n\n\n\n@NgModule({\n declarations: [\n MessagesComponent\n ],\n imports: [\n CommonModule\n ],\n exports: [\n MessagesComponent\n ]\n})\nexport class MessagesModule { }\n","/*\n * Public API Surface of messages\n */\n\nexport * from './lib/messages.service';\nexport * from './lib/messages.component';\nexport * from './lib/messages.module';\nexport * from \"./lib/messages.enums\";\nexport * from \"./lib/messages.interfaces\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.MessagesService"],"mappings":"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"}