UNPKG

@ipi-soft/ng-components

Version:

Custom Angular Components

1 lines 14.7 kB
{"version":3,"file":"ipi-soft-ng-components-snackbar.mjs","sources":["../../../../projects/ipi-soft/ng-components/snackbar/src/snackbar.component.ts","../../../../projects/ipi-soft/ng-components/snackbar/src/snackbar.component.html","../../../../projects/ipi-soft/ng-components/snackbar/src/snackbar.service.ts","../../../../projects/ipi-soft/ng-components/snackbar/ipi-soft-ng-components-snackbar.ts"],"sourcesContent":["import { NgClass } from '@angular/common';\nimport { Component, Input, Output, EventEmitter } from '@angular/core';\n\nimport { IpiImageComponent } from '@ipi-soft/ng-components/image';\n\nexport enum verticalPosition {\n Bottom,\n Top\n}\n\nexport enum horizontalPosition {\n Left,\n Center,\n Right\n}\n\nexport interface IpiSnackbarOptions {\n title?: string;\n icon?: string;\n error?: boolean;\n animationDuration: number;\n backgroundColor?: string;\n errorBackgroundColor?: string;\n placeholderTextColor?: string;\n messageTextColor?: string;\n progressColor?: string;\n xIconColor?: string;\n}\n\nexport interface SnackbarPosition {\n horizontalPosition?: horizontalPosition;\n verticalPosition?: verticalPosition;\n}\n\n@Component({\n selector: 'ipi-snackbar',\n templateUrl: './snackbar.component.html',\n styleUrls: ['./snackbar.component.css'],\n imports: [\n NgClass,\n IpiImageComponent,\n ]\n})\n\nexport class IpiSnackbarComponent {\n @Input() message!: String;\n @Input() options!: IpiSnackbarOptions;\n\n @Input() positionOptions!: SnackbarPosition;\n\n @Output() closed = new EventEmitter<void>();\n}\n","<div\n class=\"custom-snackbar\"\n [class.error]=\"options.error\"\n [ngClass]=\"[ 'horizontal-' + positionOptions.horizontalPosition, 'vertical-' + positionOptions.verticalPosition]\"\n [style.ipi-snackbar-animation-duration]=\"options.animationDuration + 's'\">\n\n <div class=\"placeholder-wrapper\">\n @if (options.icon) {\n <ipi-img [src]=\"'assets/img/' + options.icon\" [ariaLabel]=\"'Snackbar prefix icon'\"></ipi-img>\n }\n\n <div class=\"placeholder\">{{ options.title ?? (options.error ? 'Error' : 'Success') }}</div>\n\n <div class=\"x-icon\" (click)=\"closed.emit()\"></div>\n </div>\n\n <div class=\"message-wrapper\" [ngClass]=\"{ 'no-padding' : !options.icon }\">\n <div class=\"message\">{{ message }}</div>\n </div>\n\n <div class=\"progress\" [style.animation-duration]=\"options.animationDuration + 's'\"></div>\n</div>\n","import { Injectable, ComponentRef, ApplicationRef, EmbeddedViewRef, createComponent } from '@angular/core';\n\nimport { OverlayService } from '@ipi-soft/ng-components/services';\n\nimport { IpiSnackbarComponent, IpiSnackbarOptions, SnackbarPosition, verticalPosition, horizontalPosition } from './snackbar.component';\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class IpiSnackbarService {\n\n constructor(\n private appRef: ApplicationRef,\n private overlayService: OverlayService) { }\n\n private maxSnackbars = 5;\n private fixedContainer!: HTMLElement;\n\n private defaultSnackbarOptions: IpiSnackbarOptions = {\n error: false,\n animationDuration: 10,\n backgroundColor: '#14BD6C',\n placeholderTextColor: '#FFFFFF',\n messageTextColor: '#FFFFFF',\n progressColor: '#FFFFFF',\n xIconColor: '#FFFFFF',\n errorBackgroundColor: '#F96138'\n };\n\n private positionOptions: SnackbarPosition = {\n verticalPosition: verticalPosition.Bottom,\n horizontalPosition: horizontalPosition.Center\n };\n\n private snackbarsArray: ComponentRef<IpiSnackbarComponent>[] = [];\n\n public open(message: string, options?: Partial<IpiSnackbarOptions>): void {\n this.createFixedComponent();\n\n const snackbarOptions = {\n ...this.defaultSnackbarOptions,\n ...options\n };\n\n const snackbarRef = this.createAndAppendSnackbar(snackbarOptions);\n\n snackbarRef.instance.message = message;\n\n this.closeIfMaxSnackbar();\n\n this.snackbarsArray.push(snackbarRef);\n\n this.subscribeToClosingEvents(snackbarRef);\n }\n \n public setPosition(options: SnackbarPosition): void {\n this.positionOptions = options;\n }\n\n public setMaxSnackbars(length: number): void {\n this.maxSnackbars = length;\n }\n\n public updateDefaultOptions(options: Partial<IpiSnackbarOptions>): void {\n this.defaultSnackbarOptions = { ...this.defaultSnackbarOptions, ...options };\n }\n\n private createFixedComponent(): void {\n if (!this.fixedContainer || this.fixedContainer.children.length === 0) {\n this.fixedContainer = document.createElement('div');\n\n this.setFixedComponentStyling();\n\n this.overlayService.appendToOverlay(this.fixedContainer, false);\n }\n }\n\n private createAndAppendSnackbar(options: IpiSnackbarOptions): ComponentRef<IpiSnackbarComponent> {\n const componentRef = createComponent(IpiSnackbarComponent, { environmentInjector: this.appRef.injector });\n\n componentRef.instance.options = options;\n componentRef.instance.positionOptions = this.positionOptions;\n\n this.appRef.attachView(componentRef.hostView);\n\n const snackbarElement = (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n\n this.applyCustomStyles(snackbarElement, options);\n\n this.fixedContainer.appendChild(snackbarElement);\n\n setTimeout(() => {\n componentRef.destroy();\n this.close(this.snackbarsArray.indexOf(componentRef));\n\n if (this.snackbarsArray.length === 0) {\n this.overlayService.removeFromOverlay(this.fixedContainer);\n }\n }, options.animationDuration * 1000);\n\n return componentRef;\n }\n\n private applyCustomStyles(snackbarElement: HTMLElement, options: IpiSnackbarOptions): void {\n const styles = {\n '--ipi-snackbar-background-color': options.backgroundColor,\n '--ipi-snackbar-placeholder-text-color': options.placeholderTextColor,\n '--ipi-snackbar-message-text-color': options.messageTextColor,\n '--ipi-snackbar-progress-color': options.progressColor,\n '--ipi-snackbar-x-icon-color': options.xIconColor,\n '--ipi-snackbar-animation-duration': options.animationDuration ? `${options.animationDuration}s` : undefined\n };\n \n for (const [cssVar, value] of Object.entries(styles)) {\n if (value) {\n snackbarElement.style.setProperty(cssVar, value);\n }\n }\n }\n\n private closeIfMaxSnackbar(): void {\n if (this.snackbarsArray.length === this.maxSnackbars) {\n this.close(0);\n }\n }\n\n private subscribeToClosingEvents(snackbarRef: ComponentRef<IpiSnackbarComponent>): void {\n snackbarRef.instance.closed.subscribe(() => {\n this.close(this.snackbarsArray.indexOf(snackbarRef));\n\n if (this.snackbarsArray.length === 0) {\n this.overlayService.removeFromOverlay(this.fixedContainer);\n }\n });\n\n snackbarRef.onDestroy(() => {\n snackbarRef.instance.closed.unsubscribe();\n });\n }\n\n private setFixedComponentStyling(): void {\n this.fixedContainer.style.display = 'flex';\n this.fixedContainer.style.flexDirection = 'column';\n this.fixedContainer.style.alignItems = 'flex-end';\n this.fixedContainer.style.bottom = '0px';\n this.fixedContainer.style.left = '50%';\n this.fixedContainer.style.transform = 'translateX(-50%)';\n\n if (this.positionOptions.horizontalPosition === horizontalPosition.Left) {\n this.fixedContainer.style.left = '0px';\n this.fixedContainer.style.transform = 'translateX(0%)';\n } else if (this.positionOptions.horizontalPosition === horizontalPosition.Right) {\n this.fixedContainer.style.left = '';\n this.fixedContainer.style.right = '0px';\n this.fixedContainer.style.transform = 'translateX(0%)';\n }\n\n if (this.positionOptions.verticalPosition === verticalPosition.Top) {\n this.fixedContainer.style.bottom = '';\n this.fixedContainer.style.top = '0px';\n }\n\n this.fixedContainer.style.position = 'fixed';\n this.fixedContainer.style.zIndex = '1000';\n }\n\n private close(index: number): void {\n if (this.snackbarsArray[index]) {\n this.snackbarsArray[index].destroy();\n this.snackbarsArray.splice(index, 1);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}