@huntsman-cancer-institute/dialog 12.11.9-SNAPSHOT

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +24 -0
  3. package/alert/alert-dialog.component.d.ts +31 -0
  4. package/bundles/huntsman-cancer-institute-dialog.umd.js +1049 -0
  5. package/bundles/huntsman-cancer-institute-dialog.umd.js.map +1 -0
  6. package/bundles/huntsman-cancer-institute-dialog.umd.min.js +2 -0
  7. package/bundles/huntsman-cancer-institute-dialog.umd.min.js.map +1 -0
  8. package/confirm/confirm-dialog.component.d.ts +18 -0
  9. package/custom/custom-dialog.component.d.ts +35 -0
  10. package/dialog.module.d.ts +27 -0
  11. package/esm2015/alert/alert-dialog.component.js +243 -0
  12. package/esm2015/confirm/confirm-dialog.component.js +130 -0
  13. package/esm2015/custom/custom-dialog.component.js +231 -0
  14. package/esm2015/dialog.module.js +157 -0
  15. package/esm2015/generic/generic-container-dialog.component.js +158 -0
  16. package/esm2015/huntsman-cancer-institute-dialog.js +5 -0
  17. package/esm2015/index.js +13 -0
  18. package/esm2015/model/base-generic-container-dialog.js +26 -0
  19. package/esm2015/model/confirm-type.model.js +12 -0
  20. package/esm2015/model/dialog-type.model.js +12 -0
  21. package/esm2015/model/generic-dialog-action.model.js +6 -0
  22. package/esm2015/save-footer/save-footer.component.js +135 -0
  23. package/esm2015/service/dialog.service.js +272 -0
  24. package/esm2015/spinner/spinner-dialog.component.js +69 -0
  25. package/esm5/alert/alert-dialog.component.js +105 -0
  26. package/esm5/confirm/confirm-dialog.component.js +101 -0
  27. package/esm5/custom/custom-dialog.component.js +118 -0
  28. package/esm5/dialog.module.js +161 -0
  29. package/esm5/generic/generic-container-dialog.component.js +128 -0
  30. package/esm5/huntsman-cancer-institute-dialog.js +5 -0
  31. package/esm5/index.js +13 -0
  32. package/esm5/model/base-generic-container-dialog.js +28 -0
  33. package/esm5/model/confirm-type.model.js +12 -0
  34. package/esm5/model/dialog-type.model.js +12 -0
  35. package/esm5/model/generic-dialog-action.model.js +6 -0
  36. package/esm5/save-footer/save-footer.component.js +86 -0
  37. package/esm5/service/dialog.service.js +307 -0
  38. package/esm5/spinner/spinner-dialog.component.js +47 -0
  39. package/fesm2015/huntsman-cancer-institute-dialog.js +1396 -0
  40. package/fesm2015/huntsman-cancer-institute-dialog.js.map +1 -0
  41. package/fesm5/huntsman-cancer-institute-dialog.js +1047 -0
  42. package/fesm5/huntsman-cancer-institute-dialog.js.map +1 -0
  43. package/generic/generic-container-dialog.component.d.ts +38 -0
  44. package/huntsman-cancer-institute-dialog.d.ts +5 -0
  45. package/index.d.ts +14 -0
  46. package/model/base-generic-container-dialog.d.ts +13 -0
  47. package/model/confirm-type.model.d.ts +10 -0
  48. package/model/dialog-type.model.d.ts +10 -0
  49. package/model/generic-dialog-action.model.d.ts +18 -0
  50. package/package.json +34 -0
  51. package/save-footer/save-footer.component.d.ts +24 -0
  52. package/service/dialog.service.d.ts +45 -0
  53. package/spinner/spinner-dialog.component.d.ts +12 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"huntsman-cancer-institute-dialog.umd.js","sources":["ng://@huntsman-cancer-institute/dialog/model/dialog-type.model.ts","ng://@huntsman-cancer-institute/dialog/model/generic-dialog-action.model.ts","ng://@huntsman-cancer-institute/dialog/alert/alert-dialog.component.ts","ng://@huntsman-cancer-institute/dialog/spinner/spinner-dialog.component.ts","ng://@huntsman-cancer-institute/dialog/spinner/spinner-dialog.component.html","ng://@huntsman-cancer-institute/dialog/custom/custom-dialog.component.ts","ng://@huntsman-cancer-institute/dialog/generic/generic-container-dialog.component.ts","ng://@huntsman-cancer-institute/dialog/generic/generic-container-dialog.component.html","ng://@huntsman-cancer-institute/dialog/model/confirm-type.model.ts","ng://@huntsman-cancer-institute/dialog/model/base-generic-container-dialog.ts","ng://@huntsman-cancer-institute/dialog/confirm/confirm-dialog.component.ts","ng://@huntsman-cancer-institute/dialog/service/dialog.service.ts","ng://@huntsman-cancer-institute/dialog/save-footer/save-footer.component.ts","ng://@huntsman-cancer-institute/dialog/dialog.module.ts"],"sourcesContent":["\r\n\r\nexport enum DialogType {\r\n ERROR = 'Error',\r\n WARNING = 'Warning',\r\n ALERT = 'Alert',\r\n SUCCESS = 'Succeed',\r\n FAILED = 'Failed',\r\n CONFIRM = 'Confirm',\r\n INFO = 'Info',\r\n VALIDATION = 'Validation Error',\r\n}\r\n","import {MatDialogRef} from '@angular/material/dialog';\r\nimport {FormGroup} from '@angular/forms';\r\n\r\nexport enum ActionType {\r\n PRIMARY = 'primary',\r\n SECONDARY = 'accent'\r\n}\r\nexport interface GDActionConfig {\r\n formSource?: FormGroup;\r\n actions: GDAction[];\r\n}\r\nexport interface GDAction {\r\n type: ActionType;\r\n internalAction?: string;\r\n internalActionReturnValue?: boolean | any;\r\n externalAction?: (dialogRef?: MatDialogRef<any>) => void | string;\r\n icon?: string;\r\n name: string;\r\n\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n HostListener,\r\n Inject, OnInit,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport {DialogPosition, MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\nimport {DialogType} from '../model/dialog-type.model';\r\nimport {ActionType} from '../model/generic-dialog-action.model';\r\n\r\n@Component({\r\n selector: 'hci-alert-dialog',\r\n template: `\r\n <div class=\"full-height full-width d-flex flex-column\">\r\n <div class=\"full-width dialog-header-colors no-margin no-padding\">\r\n <div #topmostLeftmost mat-dialog-title (mousedown)=\"onMouseDownHeader($event)\"\r\n class=\"force-flex-container-row align-center full-width padding {{ movingDialog ? 'grabbed' : 'grabbable' }}\">\r\n <div class=\"d-flex flex-row align-items-center padded\">\r\n <img *ngIf=\"icon\" class=\"icon\" [src]=\"this.icon\">\r\n <div *ngIf=\"!icon\">\r\n <i *ngIf=\"dialogType === type.ALERT\" class=\"fa fa-exclamation fa-2x i-margin i-color-blue\"></i>\r\n <i *ngIf=\"dialogType === type.SUCCESS\" class=\"fa fa-check-circle fa-2x i-margin i-color-blue\"></i>\r\n <i *ngIf=\"dialogType === type.FAILED || dialogType === type.ERROR\" class=\"fa fa-exclamation-triangle fa-2x i-margin i-color-red\"></i>\r\n <i *ngIf=\"dialogType === type.WARNING || dialogType === type.VALIDATION\" class=\"fa fa-exclamation-triangle fa-2x i-margin i-color-blue\"></i>\r\n <i *ngIf=\"dialogType === type.INFO\" class=\"fa fa-info-circle fa-2x i-margin i-color-blue\"></i>\r\n <i *ngIf=\"dialogType === type.CONFIRM\" class=\"fa fa-check fa-2x i-margin i-color-blue\"></i>\r\n </div>\r\n <h1 *ngIf=\"dialogType !== type.ERROR\"\r\n style=\"margin:0;\">{{this.title ? this.title : defaultTitle}}</h1>\r\n <h1 *ngIf=\"dialogType === type.ERROR\"\r\n style=\"margin:0; color: Red\">{{this.title ? this.title : defaultTitle}}</h1>\r\n </div>\r\n </div>\r\n </div>\r\n <mat-dialog-content class=\"flex-grow-1 no-margin no-padding\">\r\n <hr>\r\n <div class=\"flex-grow-1 full-width extra-padded message\">\r\n <div *ngFor=\"let line of message\" class=\"full-width\"\r\n [innerHTML]=\"line\" style=\"white-space: pre-line\">\r\n </div>\r\n </div>\r\n <br>\r\n </mat-dialog-content>\r\n <mat-dialog-actions class=\"d-flex justify-content-center no-margin no-padding\">\r\n <save-footer *ngIf=\"dialogType !== type.CONFIRM\" class=\"centered-text large-size\"\r\n (saveClicked)=\"onClickOk()\" name=\"Ok\"></save-footer>\r\n <save-footer *ngIf=\"dialogType === type.CONFIRM\" class=\"centered-text large-size\"\r\n (saveClicked)=\"onClickYes()\" name=\"Yes\"></save-footer>\r\n <save-footer *ngIf=\"dialogType === type.CONFIRM\" [actionType]=\"actionType\"\r\n class=\"centered-text large-size\" (saveClicked)=\"onClickNo()\"\r\n name=\"No\"></save-footer>\r\n </mat-dialog-actions>\r\n </div>\r\n `,\r\n styles: [`\r\n hr {\r\n width: 98%;\r\n }\r\n\r\n .i-margin {\r\n margin-left: 0.3em;\r\n margin-right: 0.3em;\r\n }\r\n .i-color-blue {\r\n color: #0077B3FF;\r\n }\r\n .i-color-red {\r\n color: red;\r\n }\r\n\r\n .centered-text { text-align: center; }\r\n\r\n .no-padding{\r\n padding:0;\r\n\r\n }\r\n\r\n .no-margin{\r\n margin: 0;\r\n }\r\n\r\n .grabbable {\r\n cursor: move;\r\n cursor: grab;\r\n cursor: -moz-grab;\r\n cursor: -webkit-grab;\r\n }\r\n .grabbed {\r\n cursor: move;\r\n cursor: grabbing;\r\n cursor: -moz-grabbing;\r\n cursor: -webkit-grabbing;\r\n }\r\n\r\n .force-flex-container-row{\r\n display:flex !important;\r\n }\r\n .extra-padded {\r\n padding: 0.6em 0.9em 0.6em 0.9em;\r\n }\r\n .large-size {\r\n font-size: large;\r\n }\r\n .primary-action {\r\n font-size: large;\r\n }\r\n .secondary-action {\r\n font-size: large;\r\n }\r\n .message {\r\n color: #0F244DFF;\r\n }\r\n `]\r\n}) export class AlertDialogComponent implements OnInit {\r\n public type: any = DialogType;\r\n\r\n @ViewChild('topmostLeftmost', {static: false}) topmostLeftmost: ElementRef;\r\n\r\n public message: string[] = null;\r\n public title = '';\r\n public icon = '';\r\n public dialogType = '';\r\n public defaultTitle = '';\r\n public actionType: any = ActionType.SECONDARY;\r\n\r\n originalXClick = 0;\r\n originalYClick = 0;\r\n protected positionX = 0;\r\n protected positionY = 0;\r\n movingDialog = false;\r\n\r\n constructor(public dialogRef: MatDialogRef<AlertDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) private data,\r\n private changeDetector: ChangeDetectorRef) {\r\n if (data) {\r\n this.message = Array.isArray(data.message) ? data.message : [data.message];\r\n this.title = data.title;\r\n this.icon = data.icon;\r\n this.dialogType = data.dialogType;\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.dialogType) {\r\n this.defaultTitle = this.dialogType;\r\n }\r\n for (let i = 0; i < this.message.length; i++) {\r\n this.message[i] = this.message[i].replace(/\\n/g, '<br>') + '<br>';\r\n }\r\n }\r\n\r\n onClickOk(): void {\r\n this.dialogRef.close(true);\r\n }\r\n\r\n onClickYes(): void {\r\n this.dialogRef.close(true);\r\n }\r\n\r\n onClickNo(): void {\r\n this.dialogRef.close();\r\n }\r\n\r\n onMouseDownHeader(event: any): void {\r\n if (!event) {\r\n return;\r\n }\r\n\r\n this.positionX = this.topmostLeftmost.nativeElement.offsetLeft;\r\n this.positionY = this.topmostLeftmost.nativeElement.offsetTop;\r\n\r\n this.originalXClick = event.screenX;\r\n this.originalYClick = event.screenY;\r\n\r\n this.movingDialog = true;\r\n this.changeDetector.detach();\r\n }\r\n @HostListener('window:mousemove', ['$event'])\r\n onMouseMove(event: any): void {\r\n if (!event) {\r\n return;\r\n }\r\n\r\n if (this.movingDialog) {\r\n this.positionX += event.screenX - this.originalXClick;\r\n this.positionY += event.screenY - this.originalYClick;\r\n\r\n this.originalXClick = event.screenX;\r\n this.originalYClick = event.screenY;\r\n\r\n const newDialogPosition: DialogPosition = {\r\n left: '' + this.positionX + 'px',\r\n top: '' + this.positionY + 'px',\r\n };\r\n\r\n this.dialogRef.updatePosition(newDialogPosition);\r\n }\r\n }\r\n @HostListener('window:mouseup', ['$event'])\r\n onMouseUp(): void {\r\n this.movingDialog = false;\r\n this.changeDetector.reattach();\r\n }\r\n}\r\n","import {Component, Inject, Input} from '@angular/core';\r\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'hci-spinner-dialog',\r\n templateUrl: 'spinner-dialog.component.html',\r\n styles: [`\r\n .t { display: table; }\r\n .tr { display: table-row; }\r\n .td { display: table-cell; }\r\n\r\n .full-height { height: 100%; }\r\n .full-width { width: 100%; }\r\n\r\n .vertical-center { vertical-align: middle; }\r\n\r\n .padded {\r\n padding-top: 0.4em;\r\n padding-bottom: 0.4em;\r\n }\r\n\r\n .not-rendered {\r\n padding: 0;\r\n margin: 0;\r\n\r\n min-height: 0;\r\n max-height: 0;\r\n height: 0;\r\n }\r\n\r\n `]\r\n})\r\nexport class SpinnerDialogComponent {\r\n @Input() strokeWidth = 3;\r\n @Input() diameter = 30;\r\n\r\n @Input() message = 'Loading...';\r\n\r\n constructor(private dialogRef: MatDialogRef<SpinnerDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) private data) {\r\n if (this.data) {\r\n if (!!this.data.message) {\r\n this.message = this.data.message;\r\n }\r\n if (!!this.data.diameter) {\r\n this.diameter = this.data.diameter;\r\n }\r\n if (!!this.data.strokeWidth) {\r\n this.strokeWidth = this.data.strokeWidth;\r\n }\r\n }\r\n }\r\n\r\n\r\n}\r\n","<div mat-dialog-title class=\"not-rendered\">\r\n<!--<div mat-dialog-title>-->\r\n</div>\r\n<div mat-dialog-content class=\"full-height padded\">\r\n <div class=\"full-width full-height t\">\r\n <div class=\"tr\">\r\n <div class=\"td vertical-center\" [style.height.px]=\"diameter + 5\">\r\n <mat-spinner [hidden]=\"false\" strokeWidth=\"{{strokeWidth}}\" [diameter]=\"diameter\"></mat-spinner>\r\n </div>\r\n <div class=\"td vertical-center\">\r\n {{message}}\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div mat-dialog-actions class=\"not-rendered\">\r\n<!--<div mat-dialog-actions>-->\r\n</div>\r\n","import {DialogPosition, MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\nimport {\r\n ChangeDetectorRef,\r\n Component, ElementRef,\r\n HostListener,\r\n Inject, OnInit,\r\n TemplateRef,\r\n ViewChild,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\nimport {ActionType, GDAction, GDActionConfig} from '../model/generic-dialog-action.model';\r\nimport {FormGroup} from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'hci-custom-dialog',\r\n template: `\r\n <div class=\"d-flex full-height full-width flex-column\">\r\n <div *ngIf=\"this.title\" class=\"full-width generic-dialog-header-colors no-margin no-padding\">\r\n <div #topmostLeftmost mat-dialog-title (mousedown)=\"onMouseDownHeader($event)\"\r\n class=\"force-flex-container-row align-items-center full-width p-2 {{ movingDialog ? 'grabbed' : 'grabbable' }}\">\r\n <div class=\"-flex flex-row align-items-center padded\">\r\n <img *ngIf=\"icon\" class=\"icon\" [src]=\"this.icon\">\r\n <div *ngIf=\"icon && icon.substr(0, 2) === '<i'\" class=\"i-class\" [innerHTML]=\"icon\" ></div>\r\n <h3 style=\"margin:0;\">{{this.title}}</h3>\r\n </div>\r\n <div class=\"flex-grow-1\"></div>\r\n <div class=\"padded\" (click)=\"onClose()\">\r\n <i class=\"exit fas fa-times\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n <mat-dialog-content class=\"flex-grow-1 full-width no-margin p-2\" style=\"min-height: 6em;\">\r\n <div #anchor></div>\r\n </mat-dialog-content>\r\n <mat-dialog-actions *ngIf=\"actions && actions.length > 0\"\r\n class=\"d-flex flex-row justify-content-end no-margin no-padding generic-dialog-footer-colors\">\r\n <div *ngFor=\"let action of actions\">\r\n <save-footer *ngIf=\"action.type === actionType.PRIMARY;else secondary\"\r\n [actionType]=\"action.type\"\r\n [icon]=\"action.icon\"\r\n [disableSave]=\"primaryDisable\"\r\n (saveClicked)=\"executeAction(action)\"\r\n [name]=\"action.name\">\r\n </save-footer>\r\n <!-- to avoid issue with multiple spinner or dirty notes-->\r\n <ng-template #secondary>\r\n <save-footer [actionType]=\"action.type\"\r\n (saveClicked)=\"executeAction(action)\"\r\n [icon]=\"action.icon\"\r\n [disableSave]=\"secondaryDisable\"\r\n [name]=\"action.name\">\r\n </save-footer>\r\n </ng-template>\r\n </div>\r\n </mat-dialog-actions>\r\n </div>\r\n `,\r\n styles: [`\r\n .centered-text { text-align: center; }\r\n\r\n .no-padding{\r\n padding:0;\r\n\r\n }\r\n\r\n .no-margin{\r\n margin: 0;\r\n }\r\n\r\n .grabbable {\r\n cursor: move;\r\n cursor: grab;\r\n cursor: -moz-grab;\r\n cursor: -webkit-grab;\r\n }\r\n .grabbed:active {\r\n cursor: grabbing;\r\n cursor: -moz-grabbing;\r\n cursor: -webkit-grabbing;\r\n }\r\n\r\n .force-flex-container-row{\r\n display:flex !important;\r\n }\r\n\r\n .exit{\r\n max-width: 20px;\r\n cursor: pointer;\r\n }\r\n\r\n .i-class {\r\n margin-left: 0.3em;\r\n margin-right: 0.3em;\r\n }\r\n mat-dialog-content {\r\n max-height: 100vh !important;\r\n max-width: 100vw !important ;\r\n }\r\n `]\r\n})\r\n\r\nexport class CustomDialogComponent implements OnInit {\r\n @ViewChild('anchor', { read: ViewContainerRef, static : true }) vcr: ViewContainerRef;\r\n @ViewChild('topmostLeftmost', {static: false}) topmostLeftmost: ElementRef;\r\n public title = '';\r\n public icon = '';\r\n\r\n public actionType: any = ActionType;\r\n\r\n originalXClick = 0;\r\n originalYClick = 0;\r\n movingDialog = false;\r\n protected positionX = 0;\r\n protected positionY = 0;\r\n context: any;\r\n\r\n private tempRef: TemplateRef<any>;\r\n public actions: GDAction[] = [];\r\n public form: FormGroup;\r\n public get primaryDisable(): boolean {\r\n return this.form && this.form.invalid;\r\n }\r\n // todo need make this customizable\r\n public get secondaryDisable(): boolean {\r\n return false;\r\n }\r\n\r\n constructor(public dialogRef: MatDialogRef<CustomDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private changeDetector: ChangeDetectorRef) {\r\n this.title = data.title;\r\n this.tempRef = data.templateRef;\r\n this.icon = data.icon;\r\n this.context = data.context;\r\n const actionConfig: GDActionConfig = data.actionConfig ? data.actionConfig as GDActionConfig : null;\r\n this.actions = actionConfig ? actionConfig.actions : [];\r\n this.form = actionConfig && actionConfig.formSource ? actionConfig.formSource : null;\r\n\r\n }\r\n\r\n ngOnInit() {\r\n this.context.dialog = this.dialogRef;\r\n this.vcr.createEmbeddedView<any>(this.tempRef, this.context);\r\n\r\n }\r\n\r\n onClose() {\r\n this.dialogRef.close();\r\n }\r\n\r\n onMouseDownHeader(event: any): void {\r\n if (!event) {\r\n return;\r\n }\r\n\r\n this.positionX = this.topmostLeftmost.nativeElement.offsetLeft;\r\n this.positionY = this.topmostLeftmost.nativeElement.offsetTop;\r\n\r\n this.originalXClick = event.screenX;\r\n this.originalYClick = event.screenY;\r\n\r\n this.movingDialog = true;\r\n this.changeDetector.detach();\r\n }\r\n @HostListener('window:mousemove', ['$event'])\r\n onMouseMove(event: any): void {\r\n if (!event) {\r\n return;\r\n }\r\n\r\n if (this.movingDialog) {\r\n this.positionX += event.screenX - this.originalXClick;\r\n this.positionY += event.screenY - this.originalYClick;\r\n\r\n this.originalXClick = event.screenX;\r\n this.originalYClick = event.screenY;\r\n\r\n const newDialogPosition: DialogPosition = {\r\n left: '' + this.positionX + 'px',\r\n top: '' + this.positionY + 'px',\r\n };\r\n\r\n this.dialogRef.updatePosition(newDialogPosition);\r\n }\r\n }\r\n @HostListener('window:mouseup', ['$event'])\r\n onMouseUp(): void {\r\n this.movingDialog = false;\r\n this.changeDetector.reattach();\r\n }\r\n\r\n executeAction(action: GDAction): void {\r\n if (action.externalAction) {\r\n action.externalAction(this.dialogRef);\r\n }\r\n if (action.internalAction && action.internalAction === 'onClose') {\r\n this.onClose();\r\n }\r\n }\r\n\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n HostListener,\r\n Inject,\r\n OnInit,\r\n OnDestroy,\r\n ViewChild, ComponentRef, ChangeDetectorRef, HostBinding\r\n} from '@angular/core';\r\nimport {MatDialogRef, MatDialog, MAT_DIALOG_DATA, DialogPosition} from '@angular/material/dialog';\r\n\r\nimport {Router} from '@angular/router';\r\nimport {BaseGenericContainerDialog} from '../model/base-generic-container-dialog';\r\nimport {ActionType, GDAction} from '../model/generic-dialog-action.model';\r\n\r\n@Component({\r\n selector: 'hci-generic-container-dialog',\r\n templateUrl: './generic-container-dialog.component.html',\r\n styles: [`\r\n\r\n .no-padding{\r\n padding:0;\r\n }\r\n .no-margin{\r\n margin: 0;\r\n }\r\n .grabbable {\r\n cursor: move;\r\n cursor: grab;\r\n cursor: -moz-grab;\r\n cursor: -webkit-grab;\r\n }\r\n .grabbed:active {\r\n cursor: move;\r\n cursor: grabbing;\r\n cursor: -moz-grabbing;\r\n cursor: -webkit-grabbing;\r\n }\r\n .exit{\r\n max-width: 20px;\r\n cursor: pointer;\r\n }\r\n .i-class {\r\n margin-left: 0.3em;\r\n margin-right: 0.3em;\r\n }\r\n mat-dialog-content {\r\n max-height: 100% !important;\r\n }\r\n\r\n `]\r\n})\r\nexport class GenericContainerDialogComponent implements OnInit, OnDestroy {\r\n\r\n @HostBinding('class') classList = 'd-flex flex-column flex-grow-1 flex-shrink-1';\r\n\r\n @ViewChild('topmostLeftmost', {static: false}) topmostLeftmost: ElementRef;\r\n\r\n type = ActionType;\r\n title: string;\r\n icon: string;\r\n dialogContentBluePrint: any;\r\n actions: GDAction[] = [];\r\n originalXClick = 0;\r\n originalYClick = 0;\r\n dialogContent: BaseGenericContainerDialog;\r\n\r\n protected positionX = 0;\r\n protected positionY = 0;\r\n movingDialog = false;\r\n useSaveFooter: boolean;\r\n\r\n\r\n constructor(private dialog: MatDialog,\r\n private router: Router,\r\n private changeDetector: ChangeDetectorRef,\r\n private dialogRef: MatDialogRef<GenericContainerDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data) {\r\n if (data) {\r\n this.dialogContentBluePrint = data.dialogContent;\r\n this.icon = data.icon;\r\n this.title = data.title;\r\n this.useSaveFooter = data.actionConfig ? data.actionConfig.useSaveFooter : false;\r\n this.actions = data.actionConfig ? data.actionConfig.actions as GDAction[] : [];\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n createdComponent(event: ComponentRef<any>) {\r\n this.dialogContent = (event.instance as BaseGenericContainerDialog);\r\n }\r\n\r\n executeAction(action: GDAction): void {\r\n if (action.externalAction) {\r\n action.externalAction();\r\n }\r\n if (action.internalAction) {\r\n const internalAction: string = action.internalAction;\r\n if (action.internalAction === 'cancel' || action.internalAction === 'onClose') {\r\n if (this.dialogContent[internalAction]) {\r\n this.dialogContent[internalAction]();\r\n } else {\r\n this.onClose();\r\n }\r\n } else {\r\n if (typeof action.internalActionReturnValue !== 'undefined') {\r\n if (action.internalActionReturnValue){\r\n this.dialogContent[internalAction](action.internalActionReturnValue);\r\n }\r\n }else {\r\n this.dialogContent[internalAction]();\r\n }\r\n\r\n }\r\n }\r\n }\r\n\r\n onMouseDownHeader(event: any): void {\r\n if (!event) {\r\n return;\r\n }\r\n\r\n this.positionX = this.topmostLeftmost.nativeElement.offsetLeft;\r\n this.positionY = this.topmostLeftmost.nativeElement.offsetTop;\r\n\r\n this.originalXClick = event.screenX;\r\n this.originalYClick = event.screenY;\r\n\r\n this.movingDialog = true;\r\n this.changeDetector.detach();\r\n }\r\n @HostListener('window:mousemove', ['$event'])\r\n onMouseMove(event: any): void {\r\n if (!event) {\r\n return;\r\n }\r\n\r\n if (this.movingDialog) {\r\n this.positionX += event.screenX - this.originalXClick;\r\n this.positionY += event.screenY - this.originalYClick;\r\n\r\n this.originalXClick = event.screenX;\r\n this.originalYClick = event.screenY;\r\n\r\n const newDialogPosition: DialogPosition = {\r\n left: '' + this.positionX + 'px',\r\n top: '' + this.positionY + 'px',\r\n };\r\n\r\n this.dialogRef.updatePosition(newDialogPosition);\r\n }\r\n }\r\n @HostListener('window:mouseup', ['$event'])\r\n onMouseUp(): void {\r\n this.movingDialog = false;\r\n this.changeDetector.reattach();\r\n }\r\n\r\n onClose() {\r\n this.dialogRef.close();\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n}\r\n","<div class=\"full-height full-width d-flex flex-column\" style=\"height: 100%;\">\r\n <div class=\"full-width generic-dialog-header-colors no-margin no-padding\">\r\n <div #topmostLeftmost mat-dialog-title (mousedown)=\"onMouseDownHeader($event)\"\r\n class=\"d-flex align-items-center full-width\" [ngClass]=\"{'grabbed':movingDialog, 'grabbable': !movingDialog}\">\r\n <div class=\"d-flex flex-row align-items-center p-2\">\r\n <img class=\"icon\" *ngIf=\"icon && icon.substr(0, 2) !== '<i'\" [src]=\"icon\">\r\n <div *ngIf=\"icon && icon.substr(0, 2) === '<i'\" class=\"i-class\" [innerHTML]=\"icon\" ></div>\r\n <h3 style=\"margin:0;\">{{this.title ? this.title : this.dialogContent.innerTitle}}</h3>\r\n </div>\r\n <div class=\"flex-grow-1\"></div>\r\n <div class=\"padded\" (click)=\"onClose()\">\r\n <i class=\"exit fas fa-times\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <mat-dialog-content class=\"flex-grow-1 no-margin no-padding\">\r\n <div class=\"flex-grow-1 full-height full-width padded\">\r\n <ndc-dynamic [ndcDynamicComponent]=\"this.dialogContentBluePrint\"\r\n [ndcDynamicInputs]=\"this.data\"\r\n (ndcDynamicCreated)=\"createdComponent($event)\">\r\n </ndc-dynamic>\r\n </div>\r\n </mat-dialog-content>\r\n <mat-dialog-actions *ngIf=\"actions && actions.length > 0\"\r\n class=\"d-flex flex-row justify-content-end no-margin no-padding generic-dialog-footer-colors\">\r\n <div *ngFor=\"let action of actions\">\r\n <save-footer *ngIf=\"action.type === type.PRIMARY;else secondary\"\r\n [actionType]=\"action.type\"\r\n [icon]=\"action.icon\"\r\n (saveClicked)=\"executeAction(action)\"\r\n [disableSave]=\"this.dialogContent.primaryDisable(action)\"\r\n [dirty]=\"this.dialogContent.dirty()\"\r\n [name]=\"action.name\"\r\n [showSpinner]=\"this.dialogContent.showSpinner\">\r\n </save-footer>\r\n <!-- to avoid issue with multiple spinner or dirty notes-->\r\n <ng-template #secondary>\r\n <save-footer [actionType]=\"action.type\"\r\n (saveClicked)=\"executeAction(action)\"\r\n [icon]=\"action.icon\"\r\n [disableSave]=\"this.dialogContent.secondaryDisable(action)\"\r\n [name]=\"action.name\">\r\n\r\n </save-footer>\r\n </ng-template>\r\n </div>\r\n </mat-dialog-actions>\r\n</div>\r\n","\r\nexport enum ConfirmType {\r\n DELETE = 'delete',\r\n DELETE_W_MESSAGE = 'deleteMessage',\r\n DELETE_W_PROMPT = 'deletePrompt',\r\n DISCARD = 'discard',\r\n CONFIRM_AND_CLOSE = 'confirmAndClose',\r\n ADD = 'add',\r\n ALERT = 'alert',\r\n GENERIC = 'generic',\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {GDAction} from './generic-dialog-action.model';\r\n\r\n@Component({\r\n template: ''\r\n})\r\nexport abstract class BaseGenericContainerDialog {\r\n @Input() inputData: any;\r\n public showSpinner: boolean = false;\r\n public innerTitle: string = '';\r\n\r\n public primaryDisable: (action?: GDAction) => boolean = (action) => {\r\n return false;\r\n }\r\n\r\n public secondaryDisable: (action?: GDAction) => boolean = (action) => {\r\n return false;\r\n }\r\n\r\n public dirty: () => boolean = () => { return false; };\r\n\r\n protected constructor() {\r\n }\r\n}\r\n","import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\nimport {Component, Inject} from '@angular/core';\r\nimport {BaseGenericContainerDialog} from '../model/base-generic-container-dialog';\r\nimport {ConfirmType} from '../model/confirm-type.model';\r\n\r\n@Component({\r\n selector: 'hci-confirm-dialog',\r\n template: `\r\n <div class=\"ri-confirm-body\">\r\n\r\n <div *ngIf=\"confirmType !== ConfirmType.ALERT; else alertBlock\">\r\n {{prompt}}\r\n <div class=\"ri-confirm-text-delete\">{{ message1 }}</div>\r\n {{message2}}\r\n </div>\r\n\r\n\r\n <div #alertBlock>\r\n <p>We are working to correct it. Contact CODE support if the error persists.</p>\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n <strong>Show details</strong>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div>{{ message1 }}</div>\r\n </mat-expansion-panel>\r\n </div>\r\n\r\n </div>\r\n `,\r\n styles: [`\r\n\r\n `]\r\n})\r\nexport class ConfirmDialogComponent extends BaseGenericContainerDialog {\r\n\r\n public ConfirmType = ConfirmType; // make enum available in template\r\n\r\n prompt = '';\r\n message1 = '';\r\n message2 = '';\r\n\r\n confirmType: ConfirmType = ConfirmType.GENERIC;\r\n\r\n constructor(private dialogRef: MatDialogRef<ConfirmDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) private data: any) {\r\n super();\r\n\r\n const temp = data.confirmType ? data.confirmType : ConfirmType.GENERIC;\r\n if (Object.values(ConfirmType).includes(temp as ConfirmType)){\r\n this.confirmType = temp;\r\n }\r\n\r\n this.prompt = data.prompt ? data.prompt : '';\r\n this.message1 = data.message1 ? data.message1 : '';\r\n this.message2 = data.message2 ? data.message2 : '';\r\n\r\n this.setupMessagesByType();\r\n }\r\n\r\n setupMessagesByType(){\r\n\r\n // by enum type, setup the messages/prompt\r\n switch (this.confirmType) {\r\n case ConfirmType.DELETE:\r\n this.prompt = 'The following will be deleted:';\r\n this.message2 = 'Continue?';\r\n break;\r\n case ConfirmType.DELETE_W_MESSAGE:\r\n this.prompt = 'The following will be deleted:';\r\n break;\r\n case ConfirmType.DELETE_W_PROMPT:\r\n // noop, take all of what was passed in\r\n break;\r\n case ConfirmType.DISCARD:\r\n this.prompt = '';\r\n this.message2 = 'Continue?';\r\n break;\r\n case ConfirmType.CONFIRM_AND_CLOSE:\r\n this.prompt = '';\r\n this.message2 = '';\r\n break;\r\n case ConfirmType.ADD:\r\n this.prompt = 'The following will be added:';\r\n this.message2 = 'Continue?';\r\n break;\r\n case ConfirmType.ALERT:\r\n // noop, will only use the message1 in a special template, and just ignore rest\r\n break;\r\n case ConfirmType.GENERIC:\r\n // TODO: either only use message 1 or just take all passed in...\r\n this.prompt = '';\r\n this.message2 = '';\r\n break;\r\n default:\r\n throw new Error('Confirm type doesn\\'t exist');\r\n }\r\n\r\n\r\n }\r\n\r\n onConfirmClick(value: boolean | any){\r\n this.dialogRef.close(value);\r\n }\r\n}\r\n","import {Injectable, TemplateRef} from '@angular/core';\r\nimport { MatDialogRef, MatDialog, MatDialogConfig } from '@angular/material/dialog';\r\n\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { AlertDialogComponent } from '../alert/alert-dialog.component';\r\nimport { SpinnerDialogComponent } from '../spinner/spinner-dialog.component';\r\nimport {CustomDialogComponent} from '../custom/custom-dialog.component';\r\nimport {GenericContainerDialogComponent} from '../generic/generic-container-dialog.component';\r\nimport {ActionType, GDActionConfig} from '../model/generic-dialog-action.model';\r\nimport {DialogType} from '../model/dialog-type.model';\r\nimport {ConfirmType} from '../model/confirm-type.model';\r\nimport {ConfirmDialogComponent} from '../confirm/confirm-dialog.component';\r\n\r\n\r\n\r\n@Injectable()\r\nexport class DialogService {\r\n\r\n private _spinnerDialogIsOpen = false;\r\n private spinnerWorkItemCount = 0;\r\n private checkingSpinnerWorkItems = false;\r\n\r\n public spinnerDialogRefs: MatDialogRef<SpinnerDialogComponent>[] = [];\r\n\r\n public get spinnerDialogIsOpen(): boolean {\r\n return this._spinnerDialogIsOpen;\r\n }\r\n\r\n constructor(private dialog: MatDialog) {\r\n }\r\n\r\n public alert(message: string | string[], title?: string,\r\n dialogType?: DialogType, icon?: string,\r\n config?: MatDialogConfig): Observable<boolean> {\r\n return this.openDialog(message, title, dialogType ? dialogType : DialogType.ALERT, icon, config);\r\n }\r\n\r\n public confirm(message: string | string[], title?: string,\r\n icon?: string, config?: MatDialogConfig): Observable<boolean> {\r\n return this.openDialog(message, title, DialogType.CONFIRM, icon, config);\r\n\r\n }\r\n\r\n /**\r\n * Creates a ConfirmDialogComponent with different display depending on\r\n * the ConfirmType.\r\n * @param title defaults to 'Confirm'\r\n * @param icon defaults to 'fa fa-info-circle'\r\n * @param config config.data can contain a prompt, message1 and/or\r\n * message2 according to the ConfirmType chosen\r\n * @param actionConfig sets up the dialog buttons and actions if you want\r\n * to override the defaults\r\n */\r\n public confirmByType(confirmType: ConfirmType, title?: string,\r\n icon?: string, config?: MatDialogConfig,\r\n actionConfig?: GDActionConfig): Observable<boolean> {\r\n if (!title){\r\n title = 'Confirm';\r\n }\r\n\r\n if (!icon){\r\n icon = 'fa fa-info-circle';\r\n }\r\n\r\n // set up a default if needed\r\n if (!config){\r\n config = new MatDialogConfig<any>();\r\n config.width = '33vw';\r\n config.minWidth = '300px';\r\n config.disableClose = true;\r\n }\r\n\r\n if (config.data){\r\n config.data.confirmType = confirmType;\r\n }else {\r\n config.data = {\r\n confirmType\r\n };\r\n }\r\n\r\n // if no actions passed in, set up the defaults\r\n if (!actionConfig){\r\n\r\n // default actions\r\n let primary = {type: ActionType.PRIMARY, name: 'YES',\r\n internalAction: 'onConfirmClick', internalActionReturnValue: true};\r\n let secondary = {type: ActionType.SECONDARY, name: 'GO BACK',\r\n internalAction: 'onClose'};\r\n\r\n // by enum type, setup the messages/prompt\r\n // only two need different defaults than generic defaults\r\n switch (confirmType) {\r\n case ConfirmType.CONFIRM_AND_CLOSE:\r\n primary = {type: ActionType.PRIMARY, name: 'CONFIRM AND CLOSE',\r\n internalAction: 'onConfirmClick', internalActionReturnValue: true};\r\n break;\r\n case ConfirmType.ALERT:\r\n primary = undefined;\r\n secondary = {type: ActionType.SECONDARY, name: 'CLOSE',\r\n internalAction: 'onClose'};\r\n break;\r\n // case ConfirmType.DELETE:\r\n // case ConfirmType.DELETE_W_MESSAGE:\r\n // case ConfirmType.DELETE_W_PROMPT:\r\n // case ConfirmType.DISCARD:\r\n // case ConfirmType.ADD:\r\n // case ConfirmType.GENERIC:\r\n default:\r\n throw new Error('Confirm type doesn\\'t exist');\r\n }\r\n\r\n const actions = [];\r\n if (primary){\r\n actions.push(primary);\r\n }\r\n if (secondary){\r\n actions.push(secondary);\r\n }\r\n\r\n actionConfig = {\r\n actions\r\n };\r\n }\r\n\r\n return this.genericDialogContainer(ConfirmDialogComponent,\r\n title, icon, config, actionConfig);\r\n }\r\n\r\n public error(message: string | string[], title?: string,\r\n icon?: string, config?: MatDialogConfig): Observable<boolean> {\r\n return this.openDialog(message, title, DialogType.ERROR, icon, config);\r\n }\r\n\r\n public info(message: string | string[], title?: string,\r\n icon?: string, config?: MatDialogConfig): Observable<boolean> {\r\n return this.openDialog(message, title, DialogType.INFO, icon, config);\r\n }\r\n\r\n public createCustomDialog(tempRef: TemplateRef<any>, context?: any, title?: string,\r\n icon?: string, config?: MatDialogConfig,\r\n actionConfig?: GDActionConfig) {\r\n let configuration: MatDialogConfig = null;\r\n if (!config) {\r\n configuration = new MatDialogConfig();\r\n } else {\r\n configuration = config;\r\n }\r\n\r\n configuration.data = configuration.data ? configuration.data : {};\r\n configuration.data.templateRef = tempRef;\r\n configuration.data.title = title ? title : '';\r\n configuration.data.icon = icon ? icon : '';\r\n configuration.data.context = context;\r\n if (actionConfig) {\r\n configuration.data.actionConfig = actionConfig;\r\n }\r\n\r\n configuration.minWidth = configuration.minWidth ? configuration.minWidth : '10em';\r\n configuration.width = configuration.width ? configuration.width : '30em';\r\n\r\n configuration.panelClass = ['mx-sized-dialog', 'no-padding'];\r\n configuration.disableClose = true;\r\n configuration.hasBackdrop = true;\r\n\r\n const dialogRef = this.dialog.open(CustomDialogComponent, configuration);\r\n\r\n return dialogRef;\r\n }\r\n\r\n public startDefaultSpinnerDialog(): MatDialogRef<SpinnerDialogComponent> {\r\n return this.startSpinnerDialog('Please wait...', 3, 30);\r\n }\r\n\r\n public startSpinnerDialog(message: string, strokeWidth: number, diameter: number): MatDialogRef<SpinnerDialogComponent> {\r\n if (this._spinnerDialogIsOpen) {\r\n return null;\r\n }\r\n\r\n this._spinnerDialogIsOpen = true;\r\n\r\n const configuration: MatDialogConfig = new MatDialogConfig();\r\n configuration.data = {\r\n message,\r\n strokeWidth,\r\n diameter\r\n };\r\n configuration.width = '13em';\r\n configuration.disableClose = true;\r\n\r\n const dialogRef: MatDialogRef<SpinnerDialogComponent> = this.dialog.open(SpinnerDialogComponent, configuration);\r\n\r\n dialogRef.afterClosed().subscribe(() => {\r\n this._spinnerDialogIsOpen = false;\r\n });\r\n\r\n this.spinnerDialogRefs.push(dialogRef);\r\n\r\n return dialogRef;\r\n }\r\n\r\n public startNonModalSpinnerDialog(message: string, strokeWidth: number, diameter: number): MatDialogRef<SpinnerDialogComponent> {\r\n if (this._spinnerDialogIsOpen) {\r\n return null;\r\n }\r\n\r\n this._spinnerDialogIsOpen = true;\r\n\r\n const configuration: MatDialogConfig = new MatDialogConfig();\r\n configuration.data = {\r\n message,\r\n strokeWidth,\r\n diameter\r\n };\r\n configuration.width = '13em';\r\n configuration.disableClose = true;\r\n configuration.hasBackdrop = false;\r\n\r\n const dialogRef: MatDialogRef<SpinnerDialogComponent> = this.dialog.open(SpinnerDialogComponent, configuration);\r\n\r\n dialogRef.afterClosed().subscribe(() => {\r\n this._spinnerDialogIsOpen = false;\r\n });\r\n\r\n this.spinnerDialogRefs.push(dialogRef);\r\n\r\n return dialogRef;\r\n }\r\n\r\n // Let there be an alternative, global way to stop all active spinner dialogs.\r\n public stopAllSpinnerDialogs(): void {\r\n this.spinnerWorkItemCount = 0;\r\n for (const dialogRef of this.spinnerDialogRefs) {\r\n setTimeout(() => {\r\n dialogRef.close();\r\n });\r\n }\r\n this.spinnerDialogRefs = [];\r\n }\r\n\r\n public addSpinnerWorkItem(): void {\r\n this.spinnerWorkItemCount++;\r\n if (!this.checkingSpinnerWorkItems) {\r\n this.checkingSpinnerWorkItems = true;\r\n setTimeout(() => {\r\n this.checkSpinnerWorkItems();\r\n });\r\n }\r\n }\r\n\r\n public removeSpinnerWorkItem(): void {\r\n this.spinnerWorkItemCount--;\r\n if (this.spinnerWorkItemCount < 0) {\r\n this.spinnerWorkItemCount = 0;\r\n }\r\n if (!this.checkingSpinnerWorkItems) {\r\n this.checkingSpinnerWorkItems = true;\r\n setTimeout(() => {\r\n this.checkSpinnerWorkItems();\r\n });\r\n }\r\n }\r\n\r\n private checkSpinnerWorkItems(): void {\r\n this.checkingSpinnerWorkItems = false;\r\n if (this.spinnerWorkItemCount) {\r\n if (!this._spinnerDialogIsOpen) {\r\n this.startDefaultSpinnerDialog();\r\n }\r\n } else if (this._spinnerDialogIsOpen) {\r\n this.stopAllSpinnerDialogs();\r\n }\r\n }\r\n\r\n public genericDialogContainer(dialogContent: any, title: string,\r\n icon?: string, config?: MatDialogConfig,\r\n actionConfig?: GDActionConfig): Observable<any> {\r\n let configuration: MatDialogConfig = null;\r\n\r\n\r\n if (!config) {\r\n configuration = new MatDialogConfig();\r\n } else {\r\n configuration = config;\r\n }\r\n configuration.data = configuration.data ? configuration.data : {};\r\n configuration.data.dialogContent = dialogContent;\r\n configuration.data.title = title;\r\n if (icon) {\r\n configuration.data.icon = icon;\r\n }\r\n if (actionConfig) {\r\n configuration.data.actionConfig = actionConfig;\r\n }\r\n configuration.panelClass = ['mx-sized-dialog', 'no-padding'];\r\n configuration.disableClose = true;\r\n configuration.hasBackdrop = true;\r\n const dialogRef = this.dialog.open(GenericContainerDialogComponent, configuration);\r\n\r\n return dialogRef.afterClosed();\r\n }\r\n\r\n private openDialog(message: string | string[], title?: string,\r\n type?: DialogType, icon?: string, config?: MatDialogConfig): Observable<any> {\r\n let configuration: MatDialogConfig = null;\r\n if (!config) {\r\n configuration = new MatDialogConfig();\r\n } else {\r\n configuration = config;\r\n }\r\n\r\n configuration.data = configuration.data ? configuration.data : {};\r\n configuration.data.message = message;\r\n configuration.data.title = title ? title : '';\r\n configuration.data.icon = icon ? icon : '';\r\n configuration.data.dialogType = type ? type : '';\r\n\r\n configuration.maxWidth = configuration.maxWidth ? configuration.maxWidth : '80vw';\r\n configuration.maxHeight = configuration.maxHeight ? configuration.maxHeight : '80vh';\r\n configuration.minWidth = configuration.minWidth ? configuration.minWidth : '30em';\r\n\r\n configuration.panelClass = 'no-padding';\r\n configuration.disableClose = true;\r\n configuration.autoFocus = false;\r\n configuration.hasBackdrop = false;\r\n\r\n let dialogRef: MatDialogRef<AlertDialogComponent>;\r\n\r\n dialogRef = this.dialog.open(AlertDialogComponent, configuration);\r\n\r\n return dialogRef.afterClosed();\r\n }\r\n\r\n\r\n}\r\n","import {Component, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\r\nimport {DialogService} from '../service/dialog.service';\r\nimport {ActionType} from '../model/generic-dialog-action.model';\r\n\r\n\r\n@Component({\r\n selector: 'hci-save-footer',\r\n template: `\r\n <div class=\"full-height full-width\" style=\"margin-bottom: 8px;\">\r\n <div class=\"d-flex flex-row align-items-center right-align padded\">\r\n <div *ngIf=\"dirty\" class=\"warning-background padded\">\r\n {{ message }}\r\n </div>\r\n <div class=\"major-left-right-margin\">\r\n <button mat-raised-button [disabled]=\"disableSave\"\r\n [color]=\"actionType\" (click)=\"notifySave()\"\r\n [ngClass]=\"{'primary-action': actionType === type.PRIMARY,\r\n 'secondary-action': actionType === type.SECONDARY && !disableSave }\">\r\n <img *ngIf=\"icon\" [src]=\"icon\" alt=\"\">\r\n {{ name }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n styles: [`\r\n .primary-action{\r\n background-color: #0077B3FF;\r\n font-weight: bolder;\r\n color: white;\r\n }\r\n .secondary-action{\r\n background-color: #DEF4FFFF;\r\n font-weight: bolder;\r\n color: #0077B3FF;\r\n border: #0077B3FF solid 1px;\r\n }\r\n\r\n .major-left-right-margin {\r\n margin-left: 0.5em;\r\n margin-right: 0.5em;\r\n }\r\n\r\n .right-align {\r\n text-align: right;\r\n justify-content: flex-end;\r\n }\r\n\r\n\r\n .warning-background { background:#feec89; }\r\n\r\n `]\r\n})\r\nexport class SaveFooterComponent implements OnInit, OnDestroy {\r\n\r\n private _dirty: boolean;\r\n\r\n\r\n @Input() actionType: ActionType = ActionType.PRIMARY;\r\n @Input() icon: string;\r\n @Input() message = 'Your changes have not been saved';\r\n @Input() name = 'Save';\r\n @Input() set dirty(data: any){\r\n if (data){\r\n this._dirty = data;\r\n }else{\r\n this._dirty = false;\r\n }\r\n\r\n }\r\n get dirty(){\r\n return this._dirty;\r\n }\r\n\r\n\r\n @Input() set showSpinner(showSpinner: boolean) {\r\n setTimeout( () => {\r\n if (showSpinner) {\r\n this.dialogService.startDefaultSpinnerDialog();\r\n } else {\r\n this.dialogService.stopAllSpinnerDialogs();\r\n }\r\n });\r\n\r\n }\r\n\r\n @Input() disableSave = false;\r\n @Output() saveClicked = new EventEmitter<any>();\r\n type = ActionType;\r\n\r\n constructor(private dialogService: DialogService) { }\r\n\r\n ngOnInit(){\r\n // console.log(this.disableSave);\r\n }\r\n notifySave(): void{\r\n this.saveClicked.emit();\r\n }\r\n ngOnDestroy(){\r\n this.saveClicked.unsubscribe();\r\n }\r\n\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {ModuleWithProviders, NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FormsModule} from '@angular/forms';\r\nimport {DialogService} from './service/dialog.service';\r\nimport {AlertDialogComponent} from './alert/alert-dialog.component';\r\nimport {CustomDialogComponent} from './custom/custom-dialog.component';\r\nimport {GenericContainerDialogComponent} from './generic/generic-container-dialog.component';\r\nimport {SaveFooterComponent} from './save-footer/save-footer.component';\r\nimport {SpinnerDialogComponent} from './spinner/spinner-dialog.component';\r\nimport {MatButtonModule} from '@angular/material/button';\r\nimport {MatDialogModule} from '@angular/material/dialog';\r\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\r\nimport {DynamicModule} from 'ng-dynamic-component';\r\nimport {ConfirmDialogComponent} from './confirm/confirm-dialog.component';\r\nimport {MatExpansionModule} from '@angular/material/expansion';\r\n// import {RouterModule} from \"@angular/router\";\r\n// import {MatButtonToggleModule} from \"@angular/material/button-toggle\";\r\n// import {MatInputModule} from \"@angular/material/input\";\r\n// import {MatIconModule} from \"@angular/material/icon\";\r\n// import {TreeModule} from \"@circlon/angular-tree-component\";\r\n// import {MatDatepickerModule} from \"@angular/material/datepicker\";\r\n// import {MatSelectModule} from \"@angular/material/select\";\r\n// import {NgbModule, NgbNavModule} from \"@ng-bootstrap/ng-bootstrap\";\r\n// import {MiscModule} from \"@huntsman-cancer-institute/misc\";\r\n// import { MatNativeDateModule } from \"@angular/material/core\";\r\n// import { MatCheckboxModule } from '@angular/material/checkbox';\r\n\r\n\r\n/**\r\n * The main @huntsman-cancer-institute/dialog module. The module exports all components that an implementation might use\r\n * and the forRoot() provides a global service for an implementing application.\r\n *\r\n * @since 1.0.0\r\n */\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n DynamicModule,\r\n MatButtonModule,\r\n MatDialogModule,\r\n MatExpansionModule,\r\n MatProgressSpinnerModule\r\n // RouterModule,\r\n // MiscModule,\r\n // NgbModule,\r\n // MatButtonToggleModule,\r\n // MatInputModule,\r\n // MatIconModule,\r\n // MatDatepickerModule,\r\n // MatNativeDateModule,\r\n // MatCheckboxModule,\r\n // MatRadioModule,\r\n // MatSelectModule,\r\n // TreeModule,\r\n // NgbNavModule\r\n ],\r\n providers: [\r\n // MatDatepickerModule,\r\n ],\r\n declarations: [\r\n AlertDialogComponent,\r\n ConfirmDialogComponent,\r\n CustomDialogComponent,\r\n GenericContainerDialogComponent,\r\n SaveFooterComponent,\r\n SpinnerDialogComponent\r\n ],\r\n entryComponents: [\r\n AlertDialogComponent,\r\n ConfirmDialogComponent,\r\n CustomDialogComponent,\r\n GenericContainerDialogComponent,\r\n SaveFooterComponent,\r\n SpinnerDialogComponent\r\n ],\r\n exports: [\r\n AlertDialogComponent,\r\n ConfirmDialogComponent,\r\n CustomDialogComponent,\r\n GenericContainerDialogComponent,\r\n SaveFooterComponent,\r\n SpinnerDialogComponent\r\n ]\r\n})\r\nexport class DialogModule {\r\n static forRoot(): ModuleWithProviders<DialogModule> {\r\n return {\r\n providers: [\r\n DialogService\r\n ],\r\n ngModule: DialogModule\r\n };\r\n }\r\n}\r\n"],"names":["DialogType","ActionType","MAT_DIALOG_DATA","Component","Inject","ViewChild","HostListener","Input","ViewContainerRef","HostBinding","ConfirmType","MatDialogConfig","Injectable","EventEmitter","Output","CommonModule","FormsModule","DynamicModule","MatButtonModule","MatDialogModule","MatExpansionModule","MatProgressSpinnerModule","NgModule"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ !function(n,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@angular/core"),require("@angular/common"),require("@angular/forms"),require("@angular/material/dialog"),require("@angular/material/progress-spinner"),require("@angular/router"),require("ng-dynamic-component"),require("@angular/material/expansion"),require("@angular/material/button")):"function"==typeof define&&define.amd?define("@huntsman-cancer-institute/dialog",["exports","@angular/core","@angular/common","@angular/forms","@angular/material/dialog","@angular/material/progress-spinner","@angular/router","ng-dynamic-component","@angular/material/expansion","@angular/material/button"],e):e(((n=n||self)["huntsman-cancer-institute"]=n["huntsman-cancer-institute"]||{},n["huntsman-cancer-institute"].dialog={}),n.ng.core,n.ng.common,n.ng.forms,n.ng.material.dialog,n.ng.material.progressSpinner,n.ng.router,n.ngDynamicComponent,n.ng.material.expansion,n.ng.material.button)}(this,(function(n,e,t,i,o,a,r,s,l,c){"use strict";var g,d;(g=n.DialogType||(n.DialogType={})).ERROR="Error",g.WARNING="Warning",g.ALERT="Alert",g.SUCCESS="Succeed",g.FAILED="Failed",g.CONFIRM="Confirm",g.INFO="Info",g.VALIDATION="Validation Error",(d=n.ActionType||(n.ActionType={})).PRIMARY="primary",d.SECONDARY="accent";var p=function(){function i(e,t,i){this.dialogRef=e,this.data=t,this.changeDetector=i,this.type=n.DialogType,this.message=null,this.title="",this.icon="",this.dialogType="",this.defaultTitle="",this.actionType=n.ActionType.SECONDARY,this.originalXClick=0,this.originalYClick=0,this.positionX=0,this.positionY=0,this.movingDialog=!1,t&&(this.message=Array.isArray(t.message)?t.message:[t.message],this.title=t.title,this.icon=t.icon,this.dialogType=t.dialogType)}return i.prototype.ngOnInit=function(){this.dialogType&&(this.defaultTitle=this.dialogType);for(var n=0;n<this.message.length;n++)this.message[n]=this.message[n].replace(/\n/g,"<br>")+"<br>"},i.prototype.onClickOk=function(){this.dialogRef.close(!0)},i.prototype.onClickYes=function(){this.dialogRef.close(!0)},i.prototype.onClickNo=function(){this.dialogRef.close()},i.prototype.onMouseDownHeader=function(n){n&&(this.positionX=this.topmostLeftmost.nativeElement.offsetLeft,this.positionY=this.topmostLeftmost.nativeElement.offsetTop,this.originalXClick=n.screenX,this.originalYClick=n.screenY,this.movingDialog=!0,this.changeDetector.detach())},i.prototype.onMouseMove=function(n){if(n&&this.movingDialog){this.positionX+=n.screenX-this.originalXClick,this.positionY+=n.screenY-this.originalYClick,this.originalXClick=n.screenX,this.originalYClick=n.screenY;var e={left:this.positionX+"px",top:this.positionY+"px"};this.dialogRef.updatePosition(e)}},i.prototype.onMouseUp=function(){this.movingDialog=!1,this.changeDetector.reattach()},i.ɵfac=e.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"12.2.17",ngImport:e,type:i,deps:[{token:o.MatDialogRef},{token:o.MAT_DIALOG_DATA},{token:e.ChangeDetectorRef}],target:e.ɵɵFactoryTarget.Component}),i.ɵcmp=e.ɵɵngDeclareComponent({minVersion:"12.0.0",version:"12.2.17",type:i,selector:"hci-alert-dialog",host:{listeners:{"window:mousemove":"onMouseMove($event)","window:mouseup":"onMouseUp($event)"}},viewQueries:[{propertyName:"topmostLeftmost",first:!0,predicate:["topmostLeftmost"],descendants:!0}],ngImport:e,template:'\n <div class="full-height full-width d-flex flex-column">\n <div class="full-width dialog-header-colors no-margin no-padding">\n <div #topmostLeftmost mat-dialog-title (mousedown)="onMouseDownHeader($event)"\n class="force-flex-container-row align-center full-width padding {{ movingDialog ? \'grabbed\' : \'grabbable\' }}">\n <div class="d-flex flex-row align-items-center padded">\n <img *ngIf="icon" class="icon" [src]="this.icon">\n <div *ngIf="!icon">\n <i *ngIf="dialogType === type.ALERT" class="fa fa-exclamation fa-2x i-margin i-color-blue"></i>\n <i *ngIf="dialogType === type.SUCCESS" class="fa fa-check-circle fa-2x i-margin i-color-blue"></i>\n <i *ngIf="dialogType === type.FAILED || dialogType === type.ERROR" class="fa fa-exclamation-triangle fa-2x i-margin i-color-red"></i>\n <i *ngIf="dialogType === type.WARNING || dialogType === type.VALIDATION" class="fa fa-exclamation-triangle fa-2x i-margin i-color-blue"></i>\n <i *ngIf="dialogType === type.INFO" class="fa fa-info-circle fa-2x i-margin i-color-blue"></i>\n <i *ngIf="dialogType === type.CONFIRM" class="fa fa-check fa-2x i-margin i-color-blue"></i>\n </div>\n <h1 *ngIf="dialogType !== type.ERROR"\n style="margin:0;">{{this.title ? this.title : defaultTitle}}</h1>\n <h1 *ngIf="dialogType === type.ERROR"\n style="margin:0; color: Red">{{this.title ? this.title : defaultTitle}}</h1>\n </div>\n </div>\n </div>\n <mat-dialog-content class="flex-grow-1 no-margin no-padding">\n <hr>\n <div class="flex-grow-1 full-width extra-padded message">\n <div *ngFor="let line of message" class="full-width"\n [innerHTML]="line" style="white-space: pre-line">\n </div>\n </div>\n <br>\n </mat-dialog-content>\n <mat-dialog-actions class="d-flex justify-content-center no-margin no-padding">\n <save-footer *ngIf="dialogType !== type.CONFIRM" class="centered-text large-size"\n (saveClicked)="onClickOk()" name="Ok"></save-footer>\n <save-footer *ngIf="dialogType === type.CONFIRM" class="centered-text large-size"\n (saveClicked)="onClickYes()" name="Yes"></save-footer>\n <save-footer *ngIf="dialogType === type.CONFIRM" [actionType]="actionType"\n class="centered-text large-size" (saveClicked)="onClickNo()"\n name="No"></save-footer>\n </mat-dialog-actions>\n </div>\n ',isInline:!0,styles:["\n hr {\n width: 98%;\n }\n\n .i-margin {\n margin-left: 0.3em;\n margin-right: 0.3em;\n }\n .i-color-blue {\n color: #0077B3FF;\n }\n .i-color-red {\n color: red;\n }\n\n .centered-text { text-align: center; }\n\n .no-padding{\n padding:0;\n\n }\n\n .no-margin{\n margin: 0;\n }\n\n .grabbable {\n cursor: move;\n cursor: grab;\n cursor: -moz-grab;\n cursor: -webkit-grab;\n }\n .grabbed {\n cursor: move;\n cursor: grabbing;\n cursor: -moz-grabbing;\n cursor: -webkit-grabbing;\n }\n\n .force-flex-container-row{\n display:flex !important;\n }\n .extra-padded {\n padding: 0.6em 0.9em 0.6em 0.9em;\n }\n .large-size {\n font-size: large;\n }\n .primary-action {\n font-size: large;\n }\n .secondary-action {\n font-size: large;\n }\n .message {\n color: #0F244DFF;\n }\n "],directives:[{type:o.MatDialogTitle,selector:"[mat-dialog-title], [matDialogTitle]",inputs:["id"],exportAs:["matDialogTitle"]},{type:t.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{type:o.MatDialogContent,selector:"[mat-dialog-content], mat-dialog-content, [matDialogContent]"},{type:t.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{type:o.MatDialogActions,selector:"[mat-dialog-actions], mat-dialog-actions, [matDialogActions]"}]}),i}();e.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"12.2.17",ngImport:e,type:p,decorators:[{type:e.Component,args:[{selector:"hci-alert-dialog",template:'\n <div class="full-height full-width d-flex flex-column">\n <div class="full-width dialog-header-colors no-margin no-padding">\n <div #topmostLeftmost mat-dialog-title (mousedown)="onMouseDownHeader($event)"\n class="force-flex-container-row align-center full-width padding {{ movingDialog ? \'grabbed\' : \'grabbable\' }}">\n <div class="d-flex flex-row align-items-center padded">\n <img *ngIf="icon" class="icon" [src]="this.icon">\n <div *ngIf="!icon">\n <i *ngIf="dialogType === type.ALERT" class="fa fa-exclamation fa-2x i-margin i-color-blue"></i>\n <i *ngIf="dialogType === type.SUCCESS" class="fa fa-check-circle fa-2x i-margin i-color-blue"></i>\n <i *ngIf="dialogType === type.FAILED || dialogType === type.ERROR" class="fa fa-exclamation-triangle fa-2x i-margin i-color-red"></i>\n <i *ngIf="dialogType === type.WARNING || dialogType === type.VALIDATION" class="fa fa-exclamation-triangle fa-2x i-margin i-color-blue"></i>\n <i *ngIf="dialogType === type.INFO" class="fa fa-info-circle fa-2x i-margin i-color-blue"></i>\n <i *ngIf="dialogType === type.CONFIRM" class="fa fa-check fa-2x i-margin i-color-blue"></i>\n </div>\n <h1 *ngIf="dialogType !== type.ERROR"\n style="margin:0;">{{this.title ? this.title : defaultTitle}}</h1>\n <h1 *ngIf="dialogType === type.ERROR"\n style="margin:0; color: Red">{{this.title ? this.title : defaultTitle}}</h1>\n </div>\n </div>\n </div>\n <mat-dialog-content class="flex-grow-1 no-margin no-padding">\n <hr>\n <div class="flex-grow-1 full-width extra-padded message">\n <div *ngFor="let line of message" class="full-width"\n [innerHTML]="line" style="white-space: pre-line">\n </div>\n </div>\n <br>\n </mat-dialog-content>\n <mat-dialog-actions class="d-flex justify-content-center no-margin no-padding">\n <save-footer *ngIf="dialogType !== type.CONFIRM" class="centered-text large-size"\n (saveClicked)="onClickOk()" name="Ok"></save-footer>\n <save-footer *ngIf="dialogType === type.CONFIRM" class="centered-text large-size"\n (saveClicked)="onClickYes()" name="Yes"></save-footer>\n <save-footer *ngIf="dialogType === type.CONFIRM" [actionType]="actionType"\n class="centered-text large-size" (saveClicked)="onClickNo()"\n name="No"></save-footer>\n </mat-dialog-actions>\n </div>\n ',styles:["\n hr {\n width: 98%;\n }\n\n .i-margin {\n margin-left: 0.3em;\n margin-right: 0.3em;\n }\n .i-color-blue {\n color: #0077B3FF;\n }\n .i-color-red {\n color: red;\n }\n\n .centered-text { text-align: center; }\n\n .no-padding{\n padding:0;\n\n }\n\n .no-margin{\n margin: 0;\n }\n\n .grabbable {\n cursor: move;\n cursor: grab;\n cursor: -moz-grab;\n cursor: -webkit-grab;\n }\n .grabbed {\n cursor: move;\n cursor: grabbing;\n cursor: -moz-grabbing;\n cursor: -webkit-grabbing;\n }\n\n .force-flex-container-row{\n display:flex !important;\n }\n .extra-padded {\n padding: 0.6em 0.9em 0.6em 0.9em;\n }\n .large-size {\n font-size: large;\n }\n .primary-action {\n font-size: large;\n }\n .secondary-action {\n font-size: large;\n }\n .message {\n color: #0F244DFF;\n }\n "]}]}],ctorParameters:function(){return[{type:o.MatDialogRef},{type:void 0,decorators:[{type:e.Inject,args:[o.MAT_DIALOG_DATA]}]},{type:e.ChangeDetectorRef}]},propDecorators:{topmostLeftmost:[{type:e.ViewChild,args:["topmostLeftmost",{static:!1}]}],onMouseMove:[{type:e.HostListener,args:["window:mousemove",["$event"]]}],onMouseUp:[{type:e.HostListener,args:["window:mouseup",["$event"]]}]}});var m=function(){function n(n,e){this.dialogRef=n,this.data=e,this.strokeWidth=3,this.diameter=30,this.message="Loading...",this.data&&(this.data.message&&(this.message=this.data.message),this.data.diameter&&(this.diameter=this.data.diameter),this.data.strokeWidth&&(this.strokeWidth=this.data.strokeWidth))}return n.ɵfac=e.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"12.2.17",ngImport:e,type:n,deps:[{token:o.MatDialogRef},{token:o.MAT_DIALOG_DATA}],target:e.ɵɵFactoryTarget.Component}),n.ɵcmp=e.ɵɵngDeclareComponent({minVersion:"12.0.0",version:"12.2.17",type:n,selector:"hci-spinner-dialog",inputs:{strokeWidth:"strokeWidth",diameter:"diameter",message:"message"},ngImport:e,template:'<div mat-dialog-title class="not-rendered">\r\n\x3c!--<div mat-dialog-title>--\x3e\r\n</div>\r\n<div mat-dialog-content class="full-height padded">\r\n <div class="full-width full-height t">\r\n <div class="tr">\r\n <div class="td vertical-center" [style.height.px]="diameter + 5">\r\n <mat-spinner [hidden]="false" strokeWidth="{{strokeWidth}}" [diameter]="diameter"></mat-spinner>\r\n </div>\r\n <div class="td vertical-center">\r\n {{message}}\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div mat-dialog-actions class="not-rendered">\r\n\x3c!--<div mat-dialog-actions>--\x3e\r\n</div>\r\n',styles:["\n .t { display: table; }\n .tr { display: table-row; }\n .td { display: table-cell; }\n\n .full-height { height: 100%; }\n .full-width { width: 100%; }\n\n .vertical-center { vertical-align: middle; }\n\n .padded {\n padding-top: 0.4em;\n padding-bottom: 0.4em;\n }\n\n .not-rendered {\n padding: 0;\n margin: 0;\n\n min-height: 0;\n max-height: 0;\n height: 0;\n }\n\n "],components:[{type:a.MatSpinner,selector:"mat-spinner",inputs:["color"]}],directives:[{type:o.MatDialogTitle,selector:"[mat-dialog-title], [matDialogTitle]",inputs:["id"],exportAs:["matDialogTitle"]},{type:o.MatDialogContent,selector:"[mat-dialog-content], mat-dialog-content, [matDialogContent]"},{type:o.MatDialogActions,selector:"[mat-dialog-actions], mat-dialog-actions, [matDialogActions]"}]}),n}();e.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"12.2.17",ngImport:e,type:m,decorators:[{type:e.Component,args:[{selector:"hci-spinner-dialog",templateUrl:"spinner-dialog.component.html",styles:["\n .t { display: table; }\n .tr { display: table-row; }\n .td { display: table-cell; }\n\n .full-height { height: 100%; }\n .full-width { width: 100%; }\n\n .vertical-center { vertical-align: middle; }\n\n .padded {\n padding-top: 0.4em;\n padding-bottom: 0.4em;\n }\n\n .not-rendered {\n padding: 0;\n margin: 0;\n\n min-height: 0;\n max-height: 0;\n height: 0;\n }\n\n "]}]}],ctorParameters:function(){return[{type:o.MatDialogRef},{type:void 0,decorators:[{type:e.Inject,args:[o.MAT_DIALOG_DATA]}]}]},propDecorators:{strokeWidth:[{type:e.Input}],diameter:[{type:e.Input}],message:[{type:e.Input}]}});var f=function(){function i(e,t,i){this.dialogRef=e,this.data=t,this.changeDetector=i,this.title="",this.icon="",this.actionType=n.ActionType,this.originalXClick=0,this.originalYClick=0,this.movingDialog=!1,this.positionX=0,this.positionY=0,this.actions=[],this.title=t.title,this.tempRef=t.templateRef,this.icon=t.icon,this.context=t.context;var o=t.actionConfig?t.actionConfig:null;this.actions=o?o.actions:[],this.form=o&&o.formSource?o.formSource:null}return Object.defineProperty(i.prototype,"primaryDisable",{get:function(){return this.form&&this.form.invalid},enumerable:!1,configurable:!0}),Object.defineProperty(i.prototype,"secondaryDisable",{get:function(){return!1},enumerable:!1,configurable:!0}),i.prototype.ngOnInit=function(){this.context.dialog=this.dialogRef,this.vcr.createEmbeddedView(this.tempRef,this.context)},i.prototype.onClose=function(){this.dialogRef.close()},i.prototype.onMouseDownHeader=function(n){n&&(this.positionX=this.topmostLeftmost.nativeElement.offsetLeft,this.positionY=this.topmostLeftmost.nativeElement.offsetTop,this.originalXClick=n.screenX,this.originalYClick=n.screenY,this.movingDialog=!0,this.changeDetector.detach())},i.prototype.onMouseMove=function(n){if(n&&this.movingDialog){this.positionX+=n.screenX-this.originalXClick,this.positionY+=n.screenY-this.originalYClick,this.originalXClick=n.screenX,this.originalYClick=n.screenY;var e={left:this.positionX+"px",top:this.positionY+"px"};this.dialogRef.updatePosition(e)}},i.prototype.onMouseUp=function(){this.movingDialog=!1,this.changeDetector.reattach()},i.prototype.executeAction=function(n){n.externalAction&&n.externalAction(this.dialogRef),n.internalAction&&"onClose"===n.internalAction&&this.onClose()},i.ɵfac=e.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"12.2.17",ngImport:e,type:i,deps:[{token:o.MatDialogRef},{token:o.MAT_DIALOG_DATA},{token:e.ChangeDetectorRef}],target:e.ɵɵFactoryTarget.Component}),i.ɵcmp=e.ɵɵngDeclareComponent({minVersion:"12.0.0",version:"12.2.17",type:i,selector:"hci-custom-dialog",host:{listeners:{"window:mousemove":"onMouseMove($event)","window:mouseup":"onMouseUp($event)"}},viewQueries:[{propertyName:"vcr",first:!0,predicate:["anchor"],descendants:!0,read:e.ViewContainerRef,static:!0},{propertyName:"topmostLeftmost",first:!0,predicate:["topmostLeftmost"],descendants:!0}],ngImport:e,template:'\n <div class="d-flex full-height full-width flex-column">\n <div *ngIf="this.title" class="full-width generic-dialog-header-colors no-margin no-padding">\n <div #topmostLeftmost mat-dialog-title (mousedown)="onMouseDownHeader($event)"\n class="force-flex-container-row align-items-center full-width p-2 {{ movingDialog ? \'grabbed\' : \'grabbable\' }}">\n <div class="-flex flex-row align-items-center padded">\n <img *ngIf="icon" class="icon" [src]="this.icon">\n <div *ngIf="icon && icon.substr(0, 2) === \'<i\'" class="i-class" [innerHTML]="icon" ></div>\n <h3 style="margin:0;">{{this.title}}</h3>\n </div>\n <div class="flex-grow-1"></div>\n <div class="padded" (click)="onClose()">\n <i class="exit fas fa-times"></i>\n </div>\n </div>\n </div>\n <mat-dialog-content class="flex-grow-1 full-width no-margin p-2" style="min-height: 6em;">\n <div #anchor></div>\n </mat-dialog-content>\n <mat-dialog-actions *ngIf="actions && actions.length > 0"\n class="d-flex flex-row justify-content-end no-margin no-padding generic-dialog-footer-colors">\n <div *ngFor="let action of actions">\n <save-footer *ngIf="action.type === actionType.PRIMARY;else secondary"\n [actionType]="action.type"\n [icon]="action.icon"\n [disableSave]="primaryDisable"\n (saveClicked)="executeAction(action)"\n [name]="action.name">\n </save-footer>\n \x3c!-- to avoid issue with multiple spinner or dirty notes--\x3e\n <ng-template #secondary>\n <save-footer [actionType]="action.type"\n (saveClicked)="executeAction(action)"\n [icon]="action.icon"\n [disableSave]="secondaryDisable"\n [name]="action.name">\n </save-footer>\n </ng-template>\n </div>\n </mat-dialog-actions>\n </div>\n ',isInline:!0,styles:["\n .centered-text { text-align: center; }\n\n .no-padding{\n padding:0;\n\n }\n\n .no-margin{\n margin: 0;\n }\n\n .grabbable {\n cursor: move;\n cursor: grab;\n cursor: -moz-grab;\n cursor: -webkit-grab;\n }\n .grabbed:active {\n cursor: grabbing;\n cursor: -moz-grabbing;\n cursor: -webkit-grabbing;\n }\n\n .force-flex-container-row{\n display:flex !important;\n }\n\n .exit{\n max-width: 20px;\n cursor: pointer;\n }\n\n .i-class {\n margin-left: 0.3em;\n margin-right: 0.3em;\n }\n mat-dialog-content {\n max-height: 100vh !important;\n max-width: 100vw !important ;\n }\n "],directives:[{type:t.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{type:o.MatDialogTitle,selector:"[mat-dialog-title], [matDialogTitle]",inputs:["id"],exportAs:["matDialogTitle"]},{type:o.MatDialogContent,selector:"[mat-dialog-content], mat-dialog-content, [matDialogContent]"},{type:o.MatDialogActions,selector:"[mat-dialog-actions], mat-dialog-actions, [matDialogActions]"},{type:t.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]}]}),i}();e.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"12.2.17",ngImport:e,type:f,decorators:[{type:e.Component,args:[{selector:"hci-custom-dialog",template:'\n <div class="d-flex full-height full-width flex-column">\n <div *ngIf="this.title" class="full-width generic-dialog-header-colors no-margin no-padding">\n <div #topmostLeftmost mat-dialog-title (mousedown)="onMouseDownHeader($event)"\n class="force-flex-container-row align-items-center full-width p-2 {{ movingDialog ? \'grabbed\' : \'grabbable\' }}">\n <div class="-flex flex-row align-items-center padded">\n <img *ngIf="icon" class="icon" [src]="this.icon">\n <div *ngIf="icon && icon.substr(0, 2) === \'<i\'" class="i-class" [innerHTML]="icon" ></div>\n <h3 style="margin:0;">{{this.title}}</h3>\n </div>\n <div class="flex-grow-1"></div>\n <div class="padded" (click)="onClose()">\n <i class="exit fas fa-times"></i>\n </div>\n </div>\n </div>\n <mat-dialog-content class="flex-grow-1 full-width no-margin p-2" style="min-height: 6em;">\n <div #anchor></div>\n </mat-dialog-content>\n <mat-dialog-actions *ngIf="actions && actions.length > 0"\n class="d-flex flex-row justify-content-end no-margin no-padding generic-dialog-footer-colors">\n <div *ngFor="let action of actions">\n <save-footer *ngIf="action.type === actionType.PRIMARY;else secondary"\n [actionType]="action.type"\n [icon]="action.icon"\n [disableSave]="primaryDisable"\n (saveClicked)="executeAction(action)"\n [name]="action.name">\n </save-footer>\n \x3c!-- to avoid issue with multiple spinner or dirty notes--\x3e\n <ng-template #secondary>\n <save-footer [actionType]="action.type"\n (saveClicked)="executeAction(action)"\n [icon]="action.icon"\n [disableSave]="secondaryDisable"\n [name]="action.name">\n </save-footer>\n </ng-template>\n </div>\n </mat-dialog-actions>\n </div>\n ',styles:["\n .centered-text { text-align: center; }\n\n .no-padding{\n padding:0;\n\n }\n\n .no-margin{\n margin: 0;\n }\n\n .grabbable {\n cursor: move;\n cursor: grab;\n cursor: -moz-grab;\n cursor: -webkit-grab;\n }\n .grabbed:active {\n cursor: grabbing;\n cursor: -moz-grabbing;\n cursor: -webkit-grabbing;\n }\n\n .force-flex-container-row{\n display:flex !important;\n }\n\n .exit{\n max-width: 20px;\n cursor: pointer;\n }\n\n .i-class {\n margin-left: 0.3em;\n margin-right: 0.3em;\n }\n mat-dialog-content {\n max-height: 100vh !important;\n max-width: 100vw !important ;\n }\n "]}]}],ctorParameters:function(){return[{type:o.MatDialogRef},{type:void 0,decorators:[{type:e.Inject,args:[o.MAT_DIALOG_DATA]}]},{type:e.ChangeDetectorRef}]},propDecorators:{vcr:[{type:e.ViewChild,args:["anchor",{read:e.ViewContainerRef,static:!0}]}],topmostLeftmost:[{type:e.ViewChild,args:["topmostLeftmost",{static:!1}]}],onMouseMove:[{type:e.HostListener,args:["window:mousemove",["$event"]]}],onMouseUp:[{type:e.HostListener,args:["window:mouseup",["$event"]]}]}});var u,h=function(){function i(e,t,i,o,a){this.dialog=e,this.router=t,this.changeDetector=i,this.dialogRef=o,this.data=a,this.classList="d-flex flex-column flex-grow-1 flex-shrink-1",this.type=n.ActionType,this.actions=[],this.originalXClick=0,this.originalYClick=0,this.positionX=0,this.positionY=0,this.movingDialog=!1,a&&(this.dialogContentBluePrint=a.dialogContent,this.icon=a.icon,this.title=a.title,this.useSaveFooter=!!a.actionConfig&&a.actionConfig.useSaveFooter,this.actions=a.actionConfig?a.actionConfig.actions:[])}return i.prototype.ngOnInit=function(){},i.prototype.createdComponent=function(n){this.dialogContent=n.instance},i.prototype.executeAction=function(n){if(n.externalAction&&n.externalAction(),n.internalAction){var e=n.internalAction;"cancel"===n.internalAction||"onClose"===n.internalAction?this.dialogContent[e]?this.dialogContent[e]():this.onClose():void 0!==n.internalActionReturnValue?n.internalActionReturnValue&&this.dialogContent[e](n.internalActionReturnValue):this.dialogContent[e]()}},i.prototype.onMouseDownHeader=function(n){n&&(this.positionX=this.topmostLeftmost.nativeElement.offsetLeft,this.positionY=this.topmostLeftmost.nativeElement.offsetTop,this.originalXClick=n.screenX,this.originalYClick=n.screenY,this.movingDialog=!0,this.changeDetector.detach())},i.prototype.onMouseMove=function(n){if(n&&this.movingDialog){this.positionX+=n.screenX-this.originalXClick,this.positionY+=n.screenY-this.originalYClick,this.originalXClick=n.screenX,this.originalYClick=n.screenY;var e={left:this.positionX+"px",top:this.positionY+"px"};this.dialogRef.updatePosition(e)}},i.prototype.onMouseUp=function(){this.movingDialog=!1,this.changeDetector.reattach()},i.prototype.onClose=function(){this.dialogRef.close()},i.prototype.ngOnDestroy=function(){},i.ɵfac=e.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"12.2.17",ngImport:e,type:i,deps:[{token:o.MatDialog},{token:r.Router},{token:e.ChangeDetectorRef},{token:o.MatDialogRef},{token:o.MAT_DIALOG_DATA}],target:e.ɵɵFactoryTarget.Component}),i.ɵcmp=e.ɵɵngDeclareComponent({minVersion:"12.0.0",version:"12.2.17",type:i,selector:"hci-generic-container-dialog",host:{listeners:{"window:mousemove":"onMouseMove($event)","window:mouseup":"onMouseUp($event)"},properties:{class:"this.classList"}},viewQueries:[{propertyName:"topmostLeftmost",first:!0,predicate:["topmostLeftmost"],descendants:!0}],ngImport:e,template:'<div class="full-height full-width d-flex flex-column" style="height: 100%;">\r\n <div class="full-width generic-dialog-header-colors no-margin no-padding">\r\n <div #topmostLeftmost mat-dialog-title (mousedown)="onMouseDownHeader($event)"\r\n class="d-flex align-items-center full-width" [ngClass]="{\'grabbed\':movingDialog, \'grabbable\': !movingDialog}">\r\n <div class="d-flex flex-row align-items-center p-2">\r\n <img class="icon" *ngIf="icon && icon.substr(0, 2) !== \'<i\'" [src]="icon">\r\n <div *ngIf="icon && icon.substr(0, 2) === \'<i\'" class="i-class" [innerHTML]="icon" ></div>\r\n <h3 style="margin:0;">{{this.title ? this.title : this.dialogContent.innerTitle}}</h3>\r\n </div>\r\n <div class="flex-grow-1"></div>\r\n <div class="padded" (click)="onClose()">\r\n <i class="exit fas fa-times"></i>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <mat-dialog-content class="flex-grow-1 no-margin no-padding">\r\n <div class="flex-grow-1 full-height full-width padded">\r\n <ndc-dynamic [ndcDynamicComponent]="this.dialogContentBluePrint"\r\n [ndcDynamicInputs]="this.data"\r\n (ndcDynamicCreated)="createdComponent($event)">\r\n </ndc-dynamic>\r\n </div>\r\n </mat-dialog-content>\r\n <mat-dialog-actions *ngIf="actions && actions.length > 0"\r\n class="d-flex flex-row justify-content-end no-margin no-padding generic-dialog-footer-colors">\r\n <div *ngFor="let action of actions">\r\n <save-footer *ngIf="action.type === type.PRIMARY;else secondary"\r\n [actionType]="action.type"\r\n [icon]="action.icon"\r\n (saveClicked)="executeAction(action)"\r\n [disableSave]="this.dialogContent.primaryDisable(action)"\r\n [dirty]="this.dialogContent.dirty()"\r\n [name]="action.name"\r\n [showSpinner]="this.dialogContent.showSpinner">\r\n </save-footer>\r\n \x3c!-- to avoid issue with multiple spinner or dirty notes--\x3e\r\n <ng-template #secondary>\r\n <save-footer [actionType]="action.type"\r\n (saveClicked)="executeAction(action)"\r\n [icon]="action.icon"\r\n [disableSave]="this.dialogContent.secondaryDisable(action)"\r\n [name]="action.name">\r\n\r\n </save-footer>\r\n </ng-template>\r\n </div>\r\n </mat-dialog-actions>\r\n</div>\r\n',styles:["\n\n .no-padding{\n padding:0;\n }\n .no-margin{\n margin: 0;\n }\n .grabbable {\n cursor: move;\n cursor: grab;\n cursor: -moz-grab;\n cursor: -webkit-grab;\n }\n .grabbed:active {\n cursor: move;\n cursor: grabbing;\n cursor: -moz-grabbing;\n cursor: -webkit-grabbing;\n }\n .exit{\n max-width: 20px;\n cursor: pointer;\n }\n .i-class {\n margin-left: 0.3em;\n margin-right: 0.3em;\n }\n mat-dialog-content {\n max-height: 100% !important;\n }\n\n "],components:[{type:s.DynamicComponent,selector:"ndc-dynamic",inputs:["ndcDynamicComponent","ndcDynamicInjector","ndcDynamicProviders","ndcDynamicContent"],outputs:["ndcDynamicCreated"]}],directives:[{type:o.MatDialogTitle,selector:"[mat-dialog-title], [matDialogTitle]",inputs:["id"],exportAs:["matDialogTitle"]},{type:t.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{type:t.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{type:o.MatDialogContent,selector:"[mat-dialog-content], mat-dialog-content, [matDialogContent]"},{type:s.DynamicIoDirective,selector:"[ndcDynamicInputs],[ndcDynamicOutputs],[ngComponentOutletNdcDynamicInputs],[ngComponentOutletNdcDynamicOutputs]",inputs:["ndcDynamicInputs","ngComponentOutletNdcDynamicInputs","ndcDynamicOutputs","ngComponentOutletNdcDynamicOutputs"]},{type:o.MatDialogActions,selector:"[mat-dialog-actions], mat-dialog-actions, [matDialogActions]"},{type:t.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]}]}),i}();e.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"12.2.17",ngImport:e,type:h,decorators:[{type:e.Component,args:[{selector:"hci-generic-container-dialog",templateUrl:"./generic-container-dialog.component.html",styles:["\n\n .no-padding{\n padding:0;\n }\n .no-margin{\n margin: 0;\n }\n .grabbable {\n cursor: move;\n cursor: grab;\n cursor: -moz-grab;\n cursor: -webkit-grab;\n }\n .grabbed:active {\n cursor: move;\n cursor: grabbing;\n cursor: -moz-grabbing;\n cursor: -webkit-grabbing;\n }\n .exit{\n max-width: 20px;\n cursor: pointer;\n }\n .i-class {\n margin-left: 0.3em;\n margin-right: 0.3em;\n }\n mat-dialog-content {\n max-height: 100% !important;\n }\n\n "]}]}],ctorParameters:function(){return[{type:o.MatDialog},{type:r.Router},{type:e.ChangeDetectorRef},{type:o.MatDialogRef},{type:void 0,decorators:[{type:e.Inject,args:[o.MAT_DIALOG_DATA]}]}]},propDecorators:{classList:[{type:e.HostBinding,args:["class"]}],topmostLeftmost:[{type:e.ViewChild,args:["topmostLeftmost",{static:!1}]}],onMouseMove:[{type:e.HostListener,args:["window:mousemove",["$event"]]}],onMouseUp:[{type:e.HostListener,args:["window:mouseup",["$event"]]}]}}),(u=n.ConfirmType||(n.ConfirmType={})).DELETE="delete",u.DELETE_W_MESSAGE="deleteMessage",u.DELETE_W_PROMPT="deletePrompt",u.DISCARD="discard",u.CONFIRM_AND_CLOSE="confirmAndClose",u.ADD="add",u.ALERT="alert",u.GENERIC="generic";var y=function(){function n(){this.showSpinner=!1,this.innerTitle="",this.primaryDisable=function(n){return!1},this.secondaryDisable=function(n){return!1},this.dirty=function(){return!1}}return n.ɵfac=e.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"12.2.17",ngImport:e,type:n,deps:[],target:e.ɵɵFactoryTarget.Component}),n.ɵcmp=e.ɵɵngDeclareComponent({minVersion:"12.0.0",version:"12.2.17",type:n,selector:"ng-component",inputs:{inputData:"inputData"},ngImport:e,template:"",isInline:!0}),n}();e.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"12.2.17",ngImport:e,type:y,decorators:[{type:e.Component,args:[{template:""}]}],ctorParameters:function(){return[]},propDecorators:{inputData:[{type:e.Input}]}});var v,b=this&&this.__extends||(v=function(n,e){return(v=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,e){n.__proto__=e}||function(n,e){for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(n[t]=e[t])})(n,e)},function(n,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function t(){this.constructor=n}v(n,e),n.prototype=null===e?Object.create(e):(t.prototype=e.prototype,new t)}),C=function(i){function a(e,t){var o=i.call(this)||this;o.dialogRef=e,o.data=t,o.ConfirmType=n.ConfirmType,o.prompt="",o.message1="",o.message2="",o.confirmType=n.ConfirmType.GENERIC;var a=t.confirmType?t.confirmType:n.ConfirmType.GENERIC;return Object.values(n.ConfirmType).includes(a)&&(o.confirmType=a),o.prompt=t.prompt?t.prompt:"",o.message1=t.message1?t.message1:"",o.message2=t.message2?t.message2:"",o.setupMessagesByType(),o}return b(a,i),a.prototype.setupMessagesByType=function(){switch(this.confirmType){case n.ConfirmType.DELETE:this.prompt="The following will be deleted:",this.message2="Continue?";break;case n.ConfirmType.DELETE_W_MESSAGE:this.prompt="The following will be deleted:";break;case n.ConfirmType.DELETE_W_PROMPT:break;case n.ConfirmType.DISCARD:this.prompt="",this.message2="Continue?";break;case n.ConfirmType.CONFIRM_AND_CLOSE:this.prompt="",this.message2="";break;case n.ConfirmType.ADD:this.prompt="The following will be added:",this.message2="Continue?";break;case n.ConfirmType.ALERT:break;case n.ConfirmType.GENERIC:this.prompt="",this.message2="";break;default:throw new Error("Confirm type doesn't exist")}},a.prototype.onConfirmClick=function(n){this.dialogRef.close(n)},a.ɵfac=e.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"12.2.17",ngImport:e,type:a,deps:[{token:o.MatDialogRef},{token:o.MAT_DIALOG_DATA}],target:e.ɵɵFactoryTarget.Component}),a.ɵcmp=e.ɵɵngDeclareComponent({minVersion:"12.0.0",version:"12.2.17",type:a,selector:"hci-confirm-dialog",usesInheritance:!0,ngImport:e,template:'\n <div class="ri-confirm-body">\n\n <div *ngIf="confirmType !== ConfirmType.ALERT; else alertBlock">\n {{prompt}}\n <div class="ri-confirm-text-delete">{{ message1 }}</div>\n {{message2}}\n </div>\n\n\n <div #alertBlock>\n <p>We are working to correct it. Contact CODE support if the error persists.</p>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <strong>Show details</strong>\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div>{{ message1 }}</div>\n </mat-expansion-panel>\n </div>\n\n </div>\n ',isInline:!0,styles:["\n\n "],components:[{type:l.MatExpansionPanel,selector:"mat-expansion-panel",inputs:["disabled","expanded","hideToggle","togglePosition"],outputs:["opened","closed","expandedChange","afterExpand","afterCollapse"],exportAs:["matExpansionPanel"]},{type:l.MatExpansionPanelHeader,selector:"mat-expansion-panel-header",inputs:["tabIndex","expandedHeight","collapsedHeight"]}],directives:[{type:t.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{type:l.MatExpansionPanelTitle,selector:"mat-panel-title"}]}),a}(y);e.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"12.2.17",ngImport:e,type:C,decorators:[{type:e.Component,args:[{selector:"hci-confirm-dialog",template:'\n <div class="ri-confirm-body">\n\n <div *ngIf="confirmType !== ConfirmType.ALERT; else alertBlock">\n {{prompt}}\n <div class="ri-confirm-text-delete">{{ message1 }}</div>\n {{message2}}\n </div>\n\n\n <div #alertBlock>\n <p>We are working to correct it. Contact CODE support if the error persists.</p>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <strong>Show details</strong>\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div>{{ message1 }}</div>\n </mat-expansion-panel>\n </div>\n\n </div>\n ',styles:["\n\n "]}]}],ctorParameters:function(){return[{type:o.MatDialogRef},{type:void 0,decorators:[{type:e.Inject,args:[o.MAT_DIALOG_DATA]}]}]}});var D=this&&this.__values||function(n){var e="function"==typeof Symbol&&Symbol.iterator,t=e&&n[e],i=0;if(t)return t.call(n);if(n&&"number"==typeof n.length)return{next:function(){return n&&i>=n.length&&(n=void 0),{value:n&&n[i++],done:!n}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},I=function(){function t(n){this.dialog=n,this._spinnerDialogIsOpen=!1,this.spinnerWorkItemCount=0,this.checkingSpinnerWorkItems=!1,this.spinnerDialogRefs=[]}return Object.defineProperty(t.prototype,"spinnerDialogIsOpen",{get:function(){return this._spinnerDialogIsOpen},enumerable:!1,configurable:!0}),t.prototype.alert=function(e,t,i,o,a){return this.openDialog(e,t,i||n.DialogType.ALERT,o,a)},t.prototype.confirm=function(e,t,i,o){return this.openDialog(e,t,n.DialogType.CONFIRM,i,o)},t.prototype.confirmByType=function(e,t,i,a,r){if(t||(t="Confirm"),i||(i="fa fa-info-circle"),a||((a=new o.MatDialogConfig).width="33vw",a.minWidth="300px",a.disableClose=!0),a.data?a.data.confirmType=e:a.data={confirmType:e},!r){var s={type:n.ActionType.PRIMARY,name:"YES",internalAction:"onConfirmClick",internalActionReturnValue:!0},l={type:n.ActionType.SECONDARY,name:"GO BACK",internalAction:"onClose"};switch(e){case n.ConfirmType.CONFIRM_AND_CLOSE:s={type:n.ActionType.PRIMARY,name:"CONFIRM AND CLOSE",internalAction:"onConfirmClick",internalActionReturnValue:!0};break;case n.ConfirmType.ALERT:s=void 0,l={type:n.ActionType.SECONDARY,name:"CLOSE",internalAction:"onClose"};break;default:throw new Error("Confirm type doesn't exist")}var c=[];s&&c.push(s),l&&c.push(l),r={actions:c}}return this.genericDialogContainer(C,t,i,a,r)},t.prototype.error=function(e,t,i,o){return this.openDialog(e,t,n.DialogType.ERROR,i,o)},t.prototype.info=function(e,t,i,o){return this.openDialog(e,t,n.DialogType.INFO,i,o)},t.prototype.createCustomDialog=function(n,e,t,i,a,r){var s=null;return(s=a||new o.MatDialogConfig).data=s.data?s.data:{},s.data.templateRef=n,s.data.title=t||"",s.data.icon=i||"",s.data.context=e,r&&(s.data.actionConfig=r),s.minWidth=s.minWidth?s.minWidth:"10em",s.width=s.width?s.width:"30em",s.panelClass=["mx-sized-dialog","no-padding"],s.disableClose=!0,s.hasBackdrop=!0,this.dialog.open(f,s)},t.prototype.startDefaultSpinnerDialog=function(){return this.startSpinnerDialog("Please wait...",3,30)},t.prototype.startSpinnerDialog=function(n,e,t){var i=this;if(this._spinnerDialogIsOpen)return null;this._spinnerDialogIsOpen=!0;var a=new o.MatDialogConfig;a.data={message:n,strokeWidth:e,diameter:t},a.width="13em",a.disableClose=!0;var r=this.dialog.open(m,a);return r.afterClosed().subscribe((function(){i._spinnerDialogIsOpen=!1})),this.spinnerDialogRefs.push(r),r},t.prototype.startNonModalSpinnerDialog=function(n,e,t){var i=this;if(this._spinnerDialogIsOpen)return null;this._spinnerDialogIsOpen=!0;var a=new o.MatDialogConfig;a.data={message:n,strokeWidth:e,diameter:t},a.width="13em",a.disableClose=!0,a.hasBackdrop=!1;var r=this.dialog.open(m,a);return r.afterClosed().subscribe((function(){i._spinnerDialogIsOpen=!1})),this.spinnerDialogRefs.push(r),r},t.prototype.stopAllSpinnerDialogs=function(){var n,e;this.spinnerWorkItemCount=0;var t=function(n){setTimeout((function(){n.close()}))};try{for(var i=D(this.spinnerDialogRefs),o=i.next();!o.done;o=i.next()){t(o.value)}}catch(e){n={error:e}}finally{try{o&&!o.done&&(e=i.return)&&e.call(i)}finally{if(n)throw n.error}}this.spinnerDialogRefs=[]},t.prototype.addSpinnerWorkItem=function(){var n=this;this.spinnerWorkItemCount++,this.checkingSpinnerWorkItems||(this.checkingSpinnerWorkItems=!0,setTimeout((function(){n.checkSpinnerWorkItems()})))},t.prototype.removeSpinnerWorkItem=function(){var n=this;this.spinnerWorkItemCount--,this.spinnerWorkItemCount<0&&(this.spinnerWorkItemCount=0),this.checkingSpinnerWorkItems||(this.checkingSpinnerWorkItems=!0,setTimeout((function(){n.checkSpinnerWorkItems()})))},t.prototype.checkSpinnerWorkItems=function(){this.checkingSpinnerWorkItems=!1,this.spinnerWorkItemCount?this._spinnerDialogIsOpen||this.startDefaultSpinnerDialog():this._spinnerDialogIsOpen&&this.stopAllSpinnerDialogs()},t.prototype.genericDialogContainer=function(n,e,t,i,a){var r=null;return(r=i||new o.MatDialogConfig).data=r.data?r.data:{},r.data.dialogContent=n,r.data.title=e,t&&(r.data.icon=t),a&&(r.data.actionConfig=a),r.panelClass=["mx-sized-dialog","no-padding"],r.disableClose=!0,r.hasBackdrop=!0,this.dialog.open(h,r).afterClosed()},t.prototype.openDialog=function(n,e,t,i,a){var r=null;return(r=a||new o.MatDialogConfig).data=r.data?r.data:{},r.data.message=n,r.data.title=e||"",r.data.icon=i||"",r.data.dialogType=t||"",r.maxWidth=r.maxWidth?r.maxWidth:"80vw",r.maxHeight=r.maxHeight?r.maxHeight:"80vh",r.minWidth=r.minWidth?r.minWidth:"30em",r.panelClass="no-padding",r.disableClose=!0,r.autoFocus=!1,r.hasBackdrop=!1,this.dialog.open(p,r).afterClosed()},t.ɵfac=e.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"12.2.17",ngImport:e,type:t,deps:[{token:o.MatDialog}],target:e.ɵɵFactoryTarget.Injectable}),t.ɵprov=e.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"12.2.17",ngImport:e,type:t}),t}();e.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"12.2.17",ngImport:e,type:I,decorators:[{type:e.Injectable}],ctorParameters:function(){return[{type:o.MatDialog}]}});var x=function(){function i(t){this.dialogService=t,this.actionType=n.ActionType.PRIMARY,this.message="Your changes have not been saved",this.name="Save",this.disableSave=!1,this.saveClicked=new e.EventEmitter,this.type=n.ActionType}return Object.defineProperty(i.prototype,"dirty",{get:function(){return this._dirty},set:function(n){this._dirty=n||!1},enumerable:!1,configurable:!0}),Object.defineProperty(i.prototype,"showSpinner",{set:function(n){var e=this;setTimeout((function(){n?e.dialogService.startDefaultSpinnerDialog():e.dialogService.stopAllSpinnerDialogs()}))},enumerable:!1,configurable:!0}),i.prototype.ngOnInit=function(){},i.prototype.notifySave=function(){this.saveClicked.emit()},i.prototype.ngOnDestroy=function(){this.saveClicked.unsubscribe()},i.ɵfac=e.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"12.2.17",ngImport:e,type:i,deps:[{token:I}],target:e.ɵɵFactoryTarget.Component}),i.ɵcmp=e.ɵɵngDeclareComponent({minVersion:"12.0.0",version:"12.2.17",type:i,selector:"hci-save-footer",inputs:{actionType:"actionType",icon:"icon",message:"message",name:"name",dirty:"dirty",showSpinner:"showSpinner",disableSave:"disableSave"},outputs:{saveClicked:"saveClicked"},ngImport:e,template:'\n <div class="full-height full-width" style="margin-bottom: 8px;">\n <div class="d-flex flex-row align-items-center right-align padded">\n <div *ngIf="dirty" class="warning-background padded">\n {{ message }}\n </div>\n <div class="major-left-right-margin">\n <button mat-raised-button [disabled]="disableSave"\n [color]="actionType" (click)="notifySave()"\n [ngClass]="{\'primary-action\': actionType === type.PRIMARY,\n \'secondary-action\': actionType === type.SECONDARY && !disableSave }">\n <img *ngIf="icon" [src]="icon" alt="">\n {{ name }}\n </button>\n </div>\n </div>\n </div>\n ',isInline:!0,styles:["\n .primary-action{\n background-color: #0077B3FF;\n font-weight: bolder;\n color: white;\n }\n .secondary-action{\n background-color: #DEF4FFFF;\n font-weight: bolder;\n color: #0077B3FF;\n border: #0077B3FF solid 1px;\n }\n\n .major-left-right-margin {\n margin-left: 0.5em;\n margin-right: 0.5em;\n }\n\n .right-align {\n text-align: right;\n justify-content: flex-end;\n }\n\n\n .warning-background { background:#feec89; }\n\n "],components:[{type:c.MatButton,selector:"button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]}],directives:[{type:t.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{type:t.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]}]}),i}();e.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"12.2.17",ngImport:e,type:x,decorators:[{type:e.Component,args:[{selector:"hci-save-footer",template:'\n <div class="full-height full-width" style="margin-bottom: 8px;">\n <div class="d-flex flex-row align-items-center right-align padded">\n <div *ngIf="dirty" class="warning-background padded">\n {{ message }}\n </div>\n <div class="major-left-right-margin">\n <button mat-raised-button [disabled]="disableSave"\n [color]="actionType" (click)="notifySave()"\n [ngClass]="{\'primary-action\': actionType === type.PRIMARY,\n \'secondary-action\': actionType === type.SECONDARY && !disableSave }">\n <img *ngIf="icon" [src]="icon" alt="">\n {{ name }}\n </button>\n </div>\n </div>\n </div>\n ',styles:["\n .primary-action{\n background-color: #0077B3FF;\n font-weight: bolder;\n color: white;\n }\n .secondary-action{\n background-color: #DEF4FFFF;\n font-weight: bolder;\n color: #0077B3FF;\n border: #0077B3FF solid 1px;\n }\n\n .major-left-right-margin {\n margin-left: 0.5em;\n margin-right: 0.5em;\n }\n\n .right-align {\n text-align: right;\n justify-content: flex-end;\n }\n\n\n .warning-background { background:#feec89; }\n\n "]}]}],ctorParameters:function(){return[{type:I}]},propDecorators:{actionType:[{type:e.Input}],icon:[{type:e.Input}],message:[{type:e.Input}],name:[{type:e.Input}],dirty:[{type:e.Input}],showSpinner:[{type:e.Input}],disableSave:[{type:e.Input}],saveClicked:[{type:e.Output}]}});var T=function(){function n(){}return n.forRoot=function(){return{providers:[I],ngModule:n}},n.ɵfac=e.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"12.2.17",ngImport:e,type:n,deps:[],target:e.ɵɵFactoryTarget.NgModule}),n.ɵmod=e.ɵɵngDeclareNgModule({minVersion:"12.0.0",version:"12.2.17",ngImport:e,type:n,declarations:[p,C,f,h,x,m],imports:[t.CommonModule,i.FormsModule,s.DynamicModule,c.MatButtonModule,o.MatDialogModule,l.MatExpansionModule,a.MatProgressSpinnerModule],exports:[p,C,f,h,x,m]}),n.ɵinj=e.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"12.2.17",ngImport:e,type:n,providers:[],imports:[[t.CommonModule,i.FormsModule,s.DynamicModule,c.MatButtonModule,o.MatDialogModule,l.MatExpansionModule,a.MatProgressSpinnerModule]]}),n}();e.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"12.2.17",ngImport:e,type:T,decorators:[{type:e.NgModule,args:[{imports:[t.CommonModule,i.FormsModule,s.DynamicModule,c.MatButtonModule,o.MatDialogModule,l.MatExpansionModule,a.MatProgressSpinnerModule],providers:[],declarations:[p,C,f,h,x,m],entryComponents:[p,C,f,h,x,m],exports:[p,C,f,h,x,m]}]}]}),n.AlertDialogComponent=p,n.BaseGenericContainerDialog=y,n.ConfirmDialogComponent=C,n.CustomDialogComponent=f,n.DialogModule=T,n.DialogService=I,n.GenericContainerDialogComponent=h,n.SaveFooterComponent=x,n.SpinnerDialogComponent=m,Object.defineProperty(n,"__esModule",{value:!0})}));
2
+ //# sourceMappingURL=huntsman-cancer-institute-dialog.umd.min.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ng://@huntsman-cancer-institute/dialog/model/dialog-type.model.ts","ng://@huntsman-cancer-institute/dialog/model/generic-dialog-action.model.ts","ng://@huntsman-cancer-institute/dialog/alert/alert-dialog.component.ts","ng://@huntsman-cancer-institute/dialog/spinner/spinner-dialog.component.ts","ng://@huntsman-cancer-institute/dialog/spinner/spinner-dialog.component.html","ng://@huntsman-cancer-institute/dialog/custom/custom-dialog.component.ts","ng://@huntsman-cancer-institute/dialog/model/confirm-type.model.ts","ng://@huntsman-cancer-institute/dialog/generic/generic-container-dialog.component.ts","ng://@huntsman-cancer-institute/dialog/generic/generic-container-dialog.component.html","ng://@huntsman-cancer-institute/dialog/model/base-generic-container-dialog.ts","ng://@huntsman-cancer-institute/dialog/confirm/confirm-dialog.component.ts","ng://@huntsman-cancer-institute/dialog/service/dialog.service.ts","ng://@huntsman-cancer-institute/dialog/save-footer/save-footer.component.ts","ng://@huntsman-cancer-institute/dialog/dialog.module.ts"],"names":["DialogType","ActionType","AlertDialogComponent","dialogRef","data","changeDetector","this","type","message","title","icon","dialogType","defaultTitle","actionType","SECONDARY","originalXClick","originalYClick","positionX","positionY","movingDialog","Array","isArray","prototype","ngOnInit","i","length","replace","onClickOk","close","onClickYes","onClickNo","onMouseDownHeader","event","topmostLeftmost","nativeElement","offsetLeft","offsetTop","screenX","screenY","detach","onMouseMove","newDialogPosition","left","top","updatePosition","onMouseUp","reattach","deps","token","dialog","MatDialogRef","MAT_DIALOG_DATA","i0","ChangeDetectorRef","target","ɵɵFactoryTarget","Component","selector","host","listeners","window:mousemove","window:mouseup","viewQueries","propertyName","first","predicate","descendants","ngImport","template","isInline","styles","directives","MatDialogTitle","inputs","exportAs","common","NgIf","MatDialogContent","NgForOf","MatDialogActions","decorators","Inject","ViewChild","static","HostListener","SpinnerDialogComponent","strokeWidth","diameter","components","progressSpinner","MatSpinner","templateUrl","Input","CustomDialogComponent","actions","tempRef","templateRef","context","actionConfig","form","formSource","Object","defineProperty","invalid","vcr","createEmbeddedView","onClose","executeAction","action","externalAction","internalAction","read","ViewContainerRef","ConfirmType","GenericContainerDialogComponent","router","classList","dialogContentBluePrint","dialogContent","useSaveFooter","createdComponent","instance","internalActionReturnValue","ngOnDestroy","MatDialog","Router","properties","class","ngDynamicComponent","DynamicComponent","outputs","NgClass","DynamicIoDirective","HostBinding","BaseGenericContainerDialog","showSpinner","innerTitle","primaryDisable","secondaryDisable","dirty","inputData","ConfirmDialogComponent","_this","_super","call","prompt","message1","message2","confirmType","GENERIC","temp","values","includes","setupMessagesByType","__extends","DELETE","DELETE_W_MESSAGE","DELETE_W_PROMPT","DISCARD","CONFIRM_AND_CLOSE","ADD","ALERT","Error","onConfirmClick","value","usesInheritance","expansion","MatExpansionPanel","MatExpansionPanelHeader","MatExpansionPanelTitle","DialogService","_spinnerDialogIsOpen","spinnerWorkItemCount","checkingSpinnerWorkItems","spinnerDialogRefs","alert","config","openDialog","confirm","CONFIRM","confirmByType","MatDialogConfig","width","minWidth","disableClose","primary","PRIMARY","name","secondary","undefined","push","genericDialogContainer","error","ERROR","info","INFO","createCustomDialog","configuration","panelClass","hasBackdrop","open","startDefaultSpinnerDialog","startSpinnerDialog","afterClosed","subscribe","startNonModalSpinnerDialog","stopAllSpinnerDialogs","setTimeout","_b","__values","_c","next","done","addSpinnerWorkItem","checkSpinnerWorkItems","removeSpinnerWorkItem","maxWidth","maxHeight","autoFocus","Injectable","SaveFooterComponent","dialogService","disableSave","saveClicked","EventEmitter","_dirty","notifySave","emit","unsubscribe","button","MatButton","Output","DialogModule","forRoot","providers","ngModule","NgModule","declarations","imports","CommonModule","FormsModule","DynamicModule","MatButtonModule","MatDialogModule","MatExpansionModule","MatProgressSpinnerModule","entryComponents","exports"],"mappings":"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","sourcesContent":["\r\n\r\nexport enum DialogType {\r\n ERROR = 'Error',\r\n WARNING = 'Warning',\r\n ALERT = 'Alert',\r\n SUCCESS = 'Succeed',\r\n FAILED = 'Failed',\r\n CONFIRM = 'Confirm',\r\n INFO = 'Info',\r\n VALIDATION = 'Validation Error',\r\n}\r\n","import {MatDialogRef} from '@angular/material/dialog';\r\nimport {FormGroup} from '@angular/forms';\r\n\r\nexport enum ActionType {\r\n PRIMARY = 'primary',\r\n SECONDARY = 'accent'\r\n}\r\nexport interface GDActionConfig {\r\n formSource?: FormGroup;\r\n actions: GDAction[];\r\n}\r\nexport interface GDAction {\r\n type: ActionType;\r\n internalAction?: string;\r\n internalActionReturnValue?: boolean | any;\r\n externalAction?: (dialogRef?: MatDialogRef<any>) => void | string;\r\n icon?: string;\r\n name: string;\r\n\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n HostListener,\r\n Inject, OnInit,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport {DialogPosition, MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\nimport {DialogType} from '../model/dialog-type.model';\r\nimport {ActionType} from '../model/generic-dialog-action.model';\r\n\r\n@Component({\r\n selector: 'hci-alert-dialog',\r\n template: `\r\n <div class=\"full-height full-width d-flex flex-column\">\r\n <div class=\"full-width dialog-header-colors no-margin no-padding\">\r\n <div #topmostLeftmost mat-dialog-title (mousedown)=\"onMouseDownHeader($event)\"\r\n class=\"force-flex-container-row align-center full-width padding {{ movingDialog ? 'grabbed' : 'grabbable' }}\">\r\n <div class=\"d-flex flex-row align-items-center padded\">\r\n <img *ngIf=\"icon\" class=\"icon\" [src]=\"this.icon\">\r\n <div *ngIf=\"!icon\">\r\n <i *ngIf=\"dialogType === type.ALERT\" class=\"fa fa-exclamation fa-2x i-margin i-color-blue\"></i>\r\n <i *ngIf=\"dialogType === type.SUCCESS\" class=\"fa fa-check-circle fa-2x i-margin i-color-blue\"></i>\r\n <i *ngIf=\"dialogType === type.FAILED || dialogType === type.ERROR\" class=\"fa fa-exclamation-triangle fa-2x i-margin i-color-red\"></i>\r\n <i *ngIf=\"dialogType === type.WARNING || dialogType === type.VALIDATION\" class=\"fa fa-exclamation-triangle fa-2x i-margin i-color-blue\"></i>\r\n <i *ngIf=\"dialogType === type.INFO\" class=\"fa fa-info-circle fa-2x i-margin i-color-blue\"></i>\r\n <i *ngIf=\"dialogType === type.CONFIRM\" class=\"fa fa-check fa-2x i-margin i-color-blue\"></i>\r\n </div>\r\n <h1 *ngIf=\"dialogType !== type.ERROR\"\r\n style=\"margin:0;\">{{this.title ? this.title : defaultTitle}}</h1>\r\n <h1 *ngIf=\"dialogType === type.ERROR\"\r\n style=\"margin:0; color: Red\">{{this.title ? this.title : defaultTitle}}</h1>\r\n </div>\r\n </div>\r\n </div>\r\n <mat-dialog-content class=\"flex-grow-1 no-margin no-padding\">\r\n <hr>\r\n <div class=\"flex-grow-1 full-width extra-padded message\">\r\n <div *ngFor=\"let line of message\" class=\"full-width\"\r\n [innerHTML]=\"line\" style=\"white-space: pre-line\">\r\n </div>\r\n </div>\r\n <br>\r\n </mat-dialog-content>\r\n <mat-dialog-actions class=\"d-flex justify-content-center no-margin no-padding\">\r\n <save-footer *ngIf=\"dialogType !== type.CONFIRM\" class=\"centered-text large-size\"\r\n (saveClicked)=\"onClickOk()\" name=\"Ok\"></save-footer>\r\n <save-footer *ngIf=\"dialogType === type.CONFIRM\" class=\"centered-text large-size\"\r\n (saveClicked)=\"onClickYes()\" name=\"Yes\"></save-footer>\r\n <save-footer *ngIf=\"dialogType === type.CONFIRM\" [actionType]=\"actionType\"\r\n class=\"centered-text large-size\" (saveClicked)=\"onClickNo()\"\r\n name=\"No\"></save-footer>\r\n </mat-dialog-actions>\r\n </div>\r\n `,\r\n styles: [`\r\n hr {\r\n width: 98%;\r\n }\r\n\r\n .i-margin {\r\n margin-left: 0.3em;\r\n margin-right: 0.3em;\r\n }\r\n .i-color-blue {\r\n color: #0077B3FF;\r\n }\r\n .i-color-red {\r\n color: red;\r\n }\r\n\r\n .centered-text { text-align: center; }\r\n\r\n .no-padding{\r\n padding:0;\r\n\r\n }\r\n\r\n .no-margin{\r\n margin: 0;\r\n }\r\n\r\n .grabbable {\r\n cursor: move;\r\n cursor: grab;\r\n cursor: -moz-grab;\r\n cursor: -webkit-grab;\r\n }\r\n .grabbed {\r\n cursor: move;\r\n cursor: grabbing;\r\n cursor: -moz-grabbing;\r\n cursor: -webkit-grabbing;\r\n }\r\n\r\n .force-flex-container-row{\r\n display:flex !important;\r\n }\r\n .extra-padded {\r\n padding: 0.6em 0.9em 0.6em 0.9em;\r\n }\r\n .large-size {\r\n font-size: large;\r\n }\r\n .primary-action {\r\n font-size: large;\r\n }\r\n .secondary-action {\r\n font-size: large;\r\n }\r\n .message {\r\n color: #0F244DFF;\r\n }\r\n `]\r\n}) export class AlertDialogComponent implements OnInit {\r\n public type: any = DialogType;\r\n\r\n @ViewChild('topmostLeftmost', {static: false}) topmostLeftmost: ElementRef;\r\n\r\n public message: string[] = null;\r\n public title = '';\r\n public icon = '';\r\n public dialogType = '';\r\n public defaultTitle = '';\r\n public actionType: any = ActionType.SECONDARY;\r\n\r\n originalXClick = 0;\r\n originalYClick = 0;\r\n protected positionX = 0;\r\n protected positionY = 0;\r\n movingDialog = false;\r\n\r\n constructor(public dialogRef: MatDialogRef<AlertDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) private data,\r\n private changeDetector: ChangeDetectorRef) {\r\n if (data) {\r\n this.message = Array.isArray(data.message) ? data.message : [data.message];\r\n this.title = data.title;\r\n this.icon = data.icon;\r\n this.dialogType = data.dialogType;\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.dialogType) {\r\n this.defaultTitle = this.dialogType;\r\n }\r\n for (let i = 0; i < this.message.length; i++) {\r\n this.message[i] = this.message[i].replace(/\\n/g, '<br>') + '<br>';\r\n }\r\n }\r\n\r\n onClickOk(): void {\r\n this.dialogRef.close(true);\r\n }\r\n\r\n onClickYes(): void {\r\n this.dialogRef.close(true);\r\n }\r\n\r\n onClickNo(): void {\r\n this.dialogRef.close();\r\n }\r\n\r\n onMouseDownHeader(event: any): void {\r\n if (!event) {\r\n return;\r\n }\r\n\r\n this.positionX = this.topmostLeftmost.nativeElement.offsetLeft;\r\n this.positionY = this.topmostLeftmost.nativeElement.offsetTop;\r\n\r\n this.originalXClick = event.screenX;\r\n this.originalYClick = event.screenY;\r\n\r\n this.movingDialog = true;\r\n this.changeDetector.detach();\r\n }\r\n @HostListener('window:mousemove', ['$event'])\r\n onMouseMove(event: any): void {\r\n if (!event) {\r\n return;\r\n }\r\n\r\n if (this.movingDialog) {\r\n this.positionX += event.screenX - this.originalXClick;\r\n this.positionY += event.screenY - this.originalYClick;\r\n\r\n this.originalXClick = event.screenX;\r\n this.originalYClick = event.screenY;\r\n\r\n const newDialogPosition: DialogPosition = {\r\n left: '' + this.positionX + 'px',\r\n top: '' + this.positionY + 'px',\r\n };\r\n\r\n this.dialogRef.updatePosition(newDialogPosition);\r\n }\r\n }\r\n @HostListener('window:mouseup', ['$event'])\r\n onMouseUp(): void {\r\n this.movingDialog = false;\r\n this.changeDetector.reattach();\r\n }\r\n}\r\n","import {Component, Inject, Input} from '@angular/core';\r\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'hci-spinner-dialog',\r\n templateUrl: 'spinner-dialog.component.html',\r\n styles: [`\r\n .t { display: table; }\r\n .tr { display: table-row; }\r\n .td { display: table-cell; }\r\n\r\n .full-height { height: 100%; }\r\n .full-width { width: 100%; }\r\n\r\n .vertical-center { vertical-align: middle; }\r\n\r\n .padded {\r\n padding-top: 0.4em;\r\n padding-bottom: 0.4em;\r\n }\r\n\r\n .not-rendered {\r\n padding: 0;\r\n margin: 0;\r\n\r\n min-height: 0;\r\n max-height: 0;\r\n height: 0;\r\n }\r\n\r\n `]\r\n})\r\nexport class SpinnerDialogComponent {\r\n @Input() strokeWidth = 3;\r\n @Input() diameter = 30;\r\n\r\n @Input() message = 'Loading...';\r\n\r\n constructor(private dialogRef: MatDialogRef<SpinnerDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) private data) {\r\n if (this.data) {\r\n if (!!this.data.message) {\r\n this.message = this.data.message;\r\n }\r\n if (!!this.data.diameter) {\r\n this.diameter = this.data.diameter;\r\n }\r\n if (!!this.data.strokeWidth) {\r\n this.strokeWidth = this.data.strokeWidth;\r\n }\r\n }\r\n }\r\n\r\n\r\n}\r\n","<div mat-dialog-title class=\"not-rendered\">\r\n<!--<div mat-dialog-title>-->\r\n</div>\r\n<div mat-dialog-content class=\"full-height padded\">\r\n <div class=\"full-width full-height t\">\r\n <div class=\"tr\">\r\n <div class=\"td vertical-center\" [style.height.px]=\"diameter + 5\">\r\n <mat-spinner [hidden]=\"false\" strokeWidth=\"{{strokeWidth}}\" [diameter]=\"diameter\"></mat-spinner>\r\n </div>\r\n <div class=\"td vertical-center\">\r\n {{message}}\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div mat-dialog-actions class=\"not-rendered\">\r\n<!--<div mat-dialog-actions>-->\r\n</div>\r\n","import {DialogPosition, MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\nimport {\r\n ChangeDetectorRef,\r\n Component, ElementRef,\r\n HostListener,\r\n Inject, OnInit,\r\n TemplateRef,\r\n ViewChild,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\nimport {ActionType, GDAction, GDActionConfig} from '../model/generic-dialog-action.model';\r\nimport {FormGroup} from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'hci-custom-dialog',\r\n template: `\r\n <div class=\"d-flex full-height full-width flex-column\">\r\n <div *ngIf=\"this.title\" class=\"full-width generic-dialog-header-colors no-margin no-padding\">\r\n <div #topmostLeftmost mat-dialog-title (mousedown)=\"onMouseDownHeader($event)\"\r\n class=\"force-flex-container-row align-items-center full-width p-2 {{ movingDialog ? 'grabbed' : 'grabbable' }}\">\r\n <div class=\"-flex flex-row align-items-center padded\">\r\n <img *ngIf=\"icon\" class=\"icon\" [src]=\"this.icon\">\r\n <div *ngIf=\"icon && icon.substr(0, 2) === '<i'\" class=\"i-class\" [innerHTML]=\"icon\" ></div>\r\n <h3 style=\"margin:0;\">{{this.title}}</h3>\r\n </div>\r\n <div class=\"flex-grow-1\"></div>\r\n <div class=\"padded\" (click)=\"onClose()\">\r\n <i class=\"exit fas fa-times\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n <mat-dialog-content class=\"flex-grow-1 full-width no-margin p-2\" style=\"min-height: 6em;\">\r\n <div #anchor></div>\r\n </mat-dialog-content>\r\n <mat-dialog-actions *ngIf=\"actions && actions.length > 0\"\r\n class=\"d-flex flex-row justify-content-end no-margin no-padding generic-dialog-footer-colors\">\r\n <div *ngFor=\"let action of actions\">\r\n <save-footer *ngIf=\"action.type === actionType.PRIMARY;else secondary\"\r\n [actionType]=\"action.type\"\r\n [icon]=\"action.icon\"\r\n [disableSave]=\"primaryDisable\"\r\n (saveClicked)=\"executeAction(action)\"\r\n [name]=\"action.name\">\r\n </save-footer>\r\n <!-- to avoid issue with multiple spinner or dirty notes-->\r\n <ng-template #secondary>\r\n <save-footer [actionType]=\"action.type\"\r\n (saveClicked)=\"executeAction(action)\"\r\n [icon]=\"action.icon\"\r\n [disableSave]=\"secondaryDisable\"\r\n [name]=\"action.name\">\r\n </save-footer>\r\n </ng-template>\r\n </div>\r\n </mat-dialog-actions>\r\n </div>\r\n `,\r\n styles: [`\r\n .centered-text { text-align: center; }\r\n\r\n .no-padding{\r\n padding:0;\r\n\r\n }\r\n\r\n .no-margin{\r\n margin: 0;\r\n }\r\n\r\n .grabbable {\r\n cursor: move;\r\n cursor: grab;\r\n cursor: -moz-grab;\r\n cursor: -webkit-grab;\r\n }\r\n .grabbed:active {\r\n cursor: grabbing;\r\n cursor: -moz-grabbing;\r\n cursor: -webkit-grabbing;\r\n }\r\n\r\n .force-flex-container-row{\r\n display:flex !important;\r\n }\r\n\r\n .exit{\r\n max-width: 20px;\r\n cursor: pointer;\r\n }\r\n\r\n .i-class {\r\n margin-left: 0.3em;\r\n margin-right: 0.3em;\r\n }\r\n mat-dialog-content {\r\n max-height: 100vh !important;\r\n max-width: 100vw !important ;\r\n }\r\n `]\r\n})\r\n\r\nexport class CustomDialogComponent implements OnInit {\r\n @ViewChild('anchor', { read: ViewContainerRef, static : true }) vcr: ViewContainerRef;\r\n @ViewChild('topmostLeftmost', {static: false}) topmostLeftmost: ElementRef;\r\n public title = '';\r\n public icon = '';\r\n\r\n public actionType: any = ActionType;\r\n\r\n originalXClick = 0;\r\n originalYClick = 0;\r\n movingDialog = false;\r\n protected positionX = 0;\r\n protected positionY = 0;\r\n context: any;\r\n\r\n private tempRef: TemplateRef<any>;\r\n public actions: GDAction[] = [];\r\n public form: FormGroup;\r\n public get primaryDisable(): boolean {\r\n return this.form && this.form.invalid;\r\n }\r\n // todo need make this customizable\r\n public get secondaryDisable(): boolean {\r\n return false;\r\n }\r\n\r\n constructor(public dialogRef: MatDialogRef<CustomDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private changeDetector: ChangeDetectorRef) {\r\n this.title = data.title;\r\n this.tempRef = data.templateRef;\r\n this.icon = data.icon;\r\n this.context = data.context;\r\n const actionConfig: GDActionConfig = data.actionConfig ? data.actionConfig as GDActionConfig : null;\r\n this.actions = actionConfig ? actionConfig.actions : [];\r\n this.form = actionConfig && actionConfig.formSource ? actionConfig.formSource : null;\r\n\r\n }\r\n\r\n ngOnInit() {\r\n this.context.dialog = this.dialogRef;\r\n this.vcr.createEmbeddedView<any>(this.tempRef, this.context);\r\n\r\n }\r\n\r\n onClose() {\r\n this.dialogRef.close();\r\n }\r\n\r\n onMouseDownHeader(event: any): void {\r\n if (!event) {\r\n return;\r\n }\r\n\r\n this.positionX = this.topmostLeftmost.nativeElement.offsetLeft;\r\n this.positionY = this.topmostLeftmost.nativeElement.offsetTop;\r\n\r\n this.originalXClick = event.screenX;\r\n this.originalYClick = event.screenY;\r\n\r\n this.movingDialog = true;\r\n this.changeDetector.detach();\r\n }\r\n @HostListener('window:mousemove', ['$event'])\r\n onMouseMove(event: any): void {\r\n if (!event) {\r\n return;\r\n }\r\n\r\n if (this.movingDialog) {\r\n this.positionX += event.screenX - this.originalXClick;\r\n this.positionY += event.screenY - this.originalYClick;\r\n\r\n this.originalXClick = event.screenX;\r\n this.originalYClick = event.screenY;\r\n\r\n const newDialogPosition: DialogPosition = {\r\n left: '' + this.positionX + 'px',\r\n top: '' + this.positionY + 'px',\r\n };\r\n\r\n this.dialogRef.updatePosition(newDialogPosition);\r\n }\r\n }\r\n @HostListener('window:mouseup', ['$event'])\r\n onMouseUp(): void {\r\n this.movingDialog = false;\r\n this.changeDetector.reattach();\r\n }\r\n\r\n executeAction(action: GDAction): void {\r\n if (action.externalAction) {\r\n action.externalAction(this.dialogRef);\r\n }\r\n if (action.internalAction && action.internalAction === 'onClose') {\r\n this.onClose();\r\n }\r\n }\r\n\r\n}\r\n","\r\nexport enum ConfirmType {\r\n DELETE = 'delete',\r\n DELETE_W_MESSAGE = 'deleteMessage',\r\n DELETE_W_PROMPT = 'deletePrompt',\r\n DISCARD = 'discard',\r\n CONFIRM_AND_CLOSE = 'confirmAndClose',\r\n ADD = 'add',\r\n ALERT = 'alert',\r\n GENERIC = 'generic',\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n HostListener,\r\n Inject,\r\n OnInit,\r\n OnDestroy,\r\n ViewChild, ComponentRef, ChangeDetectorRef, HostBinding\r\n} from '@angular/core';\r\nimport {MatDialogRef, MatDialog, MAT_DIALOG_DATA, DialogPosition} from '@angular/material/dialog';\r\n\r\nimport {Router} from '@angular/router';\r\nimport {BaseGenericContainerDialog} from '../model/base-generic-container-dialog';\r\nimport {ActionType, GDAction} from '../model/generic-dialog-action.model';\r\n\r\n@Component({\r\n selector: 'hci-generic-container-dialog',\r\n templateUrl: './generic-container-dialog.component.html',\r\n styles: [`\r\n\r\n .no-padding{\r\n padding:0;\r\n }\r\n .no-margin{\r\n margin: 0;\r\n }\r\n .grabbable {\r\n cursor: move;\r\n cursor: grab;\r\n cursor: -moz-grab;\r\n cursor: -webkit-grab;\r\n }\r\n .grabbed:active {\r\n cursor: move;\r\n cursor: grabbing;\r\n cursor: -moz-grabbing;\r\n cursor: -webkit-grabbing;\r\n }\r\n .exit{\r\n max-width: 20px;\r\n cursor: pointer;\r\n }\r\n .i-class {\r\n margin-left: 0.3em;\r\n margin-right: 0.3em;\r\n }\r\n mat-dialog-content {\r\n max-height: 100% !important;\r\n }\r\n\r\n `]\r\n})\r\nexport class GenericContainerDialogComponent implements OnInit, OnDestroy {\r\n\r\n @HostBinding('class') classList = 'd-flex flex-column flex-grow-1 flex-shrink-1';\r\n\r\n @ViewChild('topmostLeftmost', {static: false}) topmostLeftmost: ElementRef;\r\n\r\n type = ActionType;\r\n title: string;\r\n icon: string;\r\n dialogContentBluePrint: any;\r\n actions: GDAction[] = [];\r\n originalXClick = 0;\r\n originalYClick = 0;\r\n dialogContent: BaseGenericContainerDialog;\r\n\r\n protected positionX = 0;\r\n protected positionY = 0;\r\n movingDialog = false;\r\n useSaveFooter: boolean;\r\n\r\n\r\n constructor(private dialog: MatDialog,\r\n private router: Router,\r\n private changeDetector: ChangeDetectorRef,\r\n private dialogRef: MatDialogRef<GenericContainerDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data) {\r\n if (data) {\r\n this.dialogContentBluePrint = data.dialogContent;\r\n this.icon = data.icon;\r\n this.title = data.title;\r\n this.useSaveFooter = data.actionConfig ? data.actionConfig.useSaveFooter : false;\r\n this.actions = data.actionConfig ? data.actionConfig.actions as GDAction[] : [];\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n createdComponent(event: ComponentRef<any>) {\r\n this.dialogContent = (event.instance as BaseGenericContainerDialog);\r\n }\r\n\r\n executeAction(action: GDAction): void {\r\n if (action.externalAction) {\r\n action.externalAction();\r\n }\r\n if (action.internalAction) {\r\n const internalAction: string = action.internalAction;\r\n if (action.internalAction === 'cancel' || action.internalAction === 'onClose') {\r\n if (this.dialogContent[internalAction]) {\r\n this.dialogContent[internalAction]();\r\n } else {\r\n this.onClose();\r\n }\r\n } else {\r\n if (typeof action.internalActionReturnValue !== 'undefined') {\r\n if (action.internalActionReturnValue){\r\n this.dialogContent[internalAction](action.internalActionReturnValue);\r\n }\r\n }else {\r\n this.dialogContent[internalAction]();\r\n }\r\n\r\n }\r\n }\r\n }\r\n\r\n onMouseDownHeader(event: any): void {\r\n if (!event) {\r\n return;\r\n }\r\n\r\n this.positionX = this.topmostLeftmost.nativeElement.offsetLeft;\r\n this.positionY = this.topmostLeftmost.nativeElement.offsetTop;\r\n\r\n this.originalXClick = event.screenX;\r\n this.originalYClick = event.screenY;\r\n\r\n this.movingDialog = true;\r\n this.changeDetector.detach();\r\n }\r\n @HostListener('window:mousemove', ['$event'])\r\n onMouseMove(event: any): void {\r\n if (!event) {\r\n return;\r\n }\r\n\r\n if (this.movingDialog) {\r\n this.positionX += event.screenX - this.originalXClick;\r\n this.positionY += event.screenY - this.originalYClick;\r\n\r\n this.originalXClick = event.screenX;\r\n this.originalYClick = event.screenY;\r\n\r\n const newDialogPosition: DialogPosition = {\r\n left: '' + this.positionX + 'px',\r\n top: '' + this.positionY + 'px',\r\n };\r\n\r\n this.dialogRef.updatePosition(newDialogPosition);\r\n }\r\n }\r\n @HostListener('window:mouseup', ['$event'])\r\n onMouseUp(): void {\r\n this.movingDialog = false;\r\n this.changeDetector.reattach();\r\n }\r\n\r\n onClose() {\r\n this.dialogRef.close();\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n}\r\n","<div class=\"full-height full-width d-flex flex-column\" style=\"height: 100%;\">\r\n <div class=\"full-width generic-dialog-header-colors no-margin no-padding\">\r\n <div #topmostLeftmost mat-dialog-title (mousedown)=\"onMouseDownHeader($event)\"\r\n class=\"d-flex align-items-center full-width\" [ngClass]=\"{'grabbed':movingDialog, 'grabbable': !movingDialog}\">\r\n <div class=\"d-flex flex-row align-items-center p-2\">\r\n <img class=\"icon\" *ngIf=\"icon && icon.substr(0, 2) !== '<i'\" [src]=\"icon\">\r\n <div *ngIf=\"icon && icon.substr(0, 2) === '<i'\" class=\"i-class\" [innerHTML]=\"icon\" ></div>\r\n <h3 style=\"margin:0;\">{{this.title ? this.title : this.dialogContent.innerTitle}}</h3>\r\n </div>\r\n <div class=\"flex-grow-1\"></div>\r\n <div class=\"padded\" (click)=\"onClose()\">\r\n <i class=\"exit fas fa-times\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <mat-dialog-content class=\"flex-grow-1 no-margin no-padding\">\r\n <div class=\"flex-grow-1 full-height full-width padded\">\r\n <ndc-dynamic [ndcDynamicComponent]=\"this.dialogContentBluePrint\"\r\n [ndcDynamicInputs]=\"this.data\"\r\n (ndcDynamicCreated)=\"createdComponent($event)\">\r\n </ndc-dynamic>\r\n </div>\r\n </mat-dialog-content>\r\n <mat-dialog-actions *ngIf=\"actions && actions.length > 0\"\r\n class=\"d-flex flex-row justify-content-end no-margin no-padding generic-dialog-footer-colors\">\r\n <div *ngFor=\"let action of actions\">\r\n <save-footer *ngIf=\"action.type === type.PRIMARY;else secondary\"\r\n [actionType]=\"action.type\"\r\n [icon]=\"action.icon\"\r\n (saveClicked)=\"executeAction(action)\"\r\n [disableSave]=\"this.dialogContent.primaryDisable(action)\"\r\n [dirty]=\"this.dialogContent.dirty()\"\r\n [name]=\"action.name\"\r\n [showSpinner]=\"this.dialogContent.showSpinner\">\r\n </save-footer>\r\n <!-- to avoid issue with multiple spinner or dirty notes-->\r\n <ng-template #secondary>\r\n <save-footer [actionType]=\"action.type\"\r\n (saveClicked)=\"executeAction(action)\"\r\n [icon]=\"action.icon\"\r\n [disableSave]=\"this.dialogContent.secondaryDisable(action)\"\r\n [name]=\"action.name\">\r\n\r\n </save-footer>\r\n </ng-template>\r\n </div>\r\n </mat-dialog-actions>\r\n</div>\r\n","import {Component, Input} from '@angular/core';\r\nimport {GDAction} from './generic-dialog-action.model';\r\n\r\n@Component({\r\n template: ''\r\n})\r\nexport abstract class BaseGenericContainerDialog {\r\n @Input() inputData: any;\r\n public showSpinner: boolean = false;\r\n public innerTitle: string = '';\r\n\r\n public primaryDisable: (action?: GDAction) => boolean = (action) => {\r\n return false;\r\n }\r\n\r\n public secondaryDisable: (action?: GDAction) => boolean = (action) => {\r\n return false;\r\n }\r\n\r\n public dirty: () => boolean = () => { return false; };\r\n\r\n protected constructor() {\r\n }\r\n}\r\n","import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\nimport {Component, Inject} from '@angular/core';\r\nimport {BaseGenericContainerDialog} from '../model/base-generic-container-dialog';\r\nimport {ConfirmType} from '../model/confirm-type.model';\r\n\r\n@Component({\r\n selector: 'hci-confirm-dialog',\r\n template: `\r\n <div class=\"ri-confirm-body\">\r\n\r\n <div *ngIf=\"confirmType !== ConfirmType.ALERT; else alertBlock\">\r\n {{prompt}}\r\n <div class=\"ri-confirm-text-delete\">{{ message1 }}</div>\r\n {{message2}}\r\n </div>\r\n\r\n\r\n <div #alertBlock>\r\n <p>We are working to correct it. Contact CODE support if the error persists.</p>\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n <strong>Show details</strong>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div>{{ message1 }}</div>\r\n </mat-expansion-panel>\r\n </div>\r\n\r\n </div>\r\n `,\r\n styles: [`\r\n\r\n `]\r\n})\r\nexport class ConfirmDialogComponent extends BaseGenericContainerDialog {\r\n\r\n public ConfirmType = ConfirmType; // make enum available in template\r\n\r\n prompt = '';\r\n message1 = '';\r\n message2 = '';\r\n\r\n confirmType: ConfirmType = ConfirmType.GENERIC;\r\n\r\n constructor(private dialogRef: MatDialogRef<ConfirmDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) private data: any) {\r\n super();\r\n\r\n const temp = data.confirmType ? data.confirmType : ConfirmType.GENERIC;\r\n if (Object.values(ConfirmType).includes(temp as ConfirmType)){\r\n this.confirmType = temp;\r\n }\r\n\r\n this.prompt = data.prompt ? data.prompt : '';\r\n this.message1 = data.message1 ? data.message1 : '';\r\n this.message2 = data.message2 ? data.message2 : '';\r\n\r\n this.setupMessagesByType();\r\n }\r\n\r\n setupMessagesByType(){\r\n\r\n // by enum type, setup the messages/prompt\r\n switch (this.confirmType) {\r\n case ConfirmType.DELETE:\r\n this.prompt = 'The following will be deleted:';\r\n this.message2 = 'Continue?';\r\n break;\r\n case ConfirmType.DELETE_W_MESSAGE:\r\n this.prompt = 'The following will be deleted:';\r\n break;\r\n case ConfirmType.DELETE_W_PROMPT:\r\n // noop, take all of what was passed in\r\n break;\r\n case ConfirmType.DISCARD:\r\n this.prompt = '';\r\n this.message2 = 'Continue?';\r\n break;\r\n case ConfirmType.CONFIRM_AND_CLOSE:\r\n this.prompt = '';\r\n this.message2 = '';\r\n break;\r\n case ConfirmType.ADD:\r\n this.prompt = 'The following will be added:';\r\n this.message2 = 'Continue?';\r\n break;\r\n case ConfirmType.ALERT:\r\n // noop, will only use the message1 in a special template, and just ignore rest\r\n break;\r\n case ConfirmType.GENERIC:\r\n // TODO: either only use message 1 or just take all passed in...\r\n this.prompt = '';\r\n this.message2 = '';\r\n break;\r\n default:\r\n throw new Error('Confirm type doesn\\'t exist');\r\n }\r\n\r\n\r\n }\r\n\r\n onConfirmClick(value: boolean | any){\r\n this.dialogRef.close(value);\r\n }\r\n}\r\n","import {Injectable, TemplateRef} from '@angular/core';\r\nimport { MatDialogRef, MatDialog, MatDialogConfig } from '@angular/material/dialog';\r\n\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { AlertDialogComponent } from '../alert/alert-dialog.component';\r\nimport { SpinnerDialogComponent } from '../spinner/spinner-dialog.component';\r\nimport {CustomDialogComponent} from '../custom/custom-dialog.component';\r\nimport {GenericContainerDialogComponent} from '../generic/generic-container-dialog.component';\r\nimport {ActionType, GDActionConfig} from '../model/generic-dialog-action.model';\r\nimport {DialogType} from '../model/dialog-type.model';\r\nimport {ConfirmType} from '../model/confirm-type.model';\r\nimport {ConfirmDialogComponent} from '../confirm/confirm-dialog.component';\r\n\r\n\r\n\r\n@Injectable()\r\nexport class DialogService {\r\n\r\n private _spinnerDialogIsOpen = false;\r\n private spinnerWorkItemCount = 0;\r\n private checkingSpinnerWorkItems = false;\r\n\r\n public spinnerDialogRefs: MatDialogRef<SpinnerDialogComponent>[] = [];\r\n\r\n public get spinnerDialogIsOpen(): boolean {\r\n return this._spinnerDialogIsOpen;\r\n }\r\n\r\n constructor(private dialog: MatDialog) {\r\n }\r\n\r\n public alert(message: string | string[], title?: string,\r\n dialogType?: DialogType, icon?: string,\r\n config?: MatDialogConfig): Observable<boolean> {\r\n return this.openDialog(message, title, dialogType ? dialogType : DialogType.ALERT, icon, config);\r\n }\r\n\r\n public confirm(message: string | string[], title?: string,\r\n icon?: string, config?: MatDialogConfig): Observable<boolean> {\r\n return this.openDialog(message, title, DialogType.CONFIRM, icon, config);\r\n\r\n }\r\n\r\n /**\r\n * Creates a ConfirmDialogComponent with different display depending on\r\n * the ConfirmType.\r\n * @param title defaults to 'Confirm'\r\n * @param icon defaults to 'fa fa-info-circle'\r\n * @param config config.data can contain a prompt, message1 and/or\r\n * message2 according to the ConfirmType chosen\r\n * @param actionConfig sets up the dialog buttons and actions if you want\r\n * to override the defaults\r\n */\r\n public confirmByType(confirmType: ConfirmType, title?: string,\r\n icon?: string, config?: MatDialogConfig,\r\n actionConfig?: GDActionConfig): Observable<boolean> {\r\n if (!title){\r\n title = 'Confirm';\r\n }\r\n\r\n if (!icon){\r\n icon = 'fa fa-info-circle';\r\n }\r\n\r\n // set up a default if needed\r\n if (!config){\r\n config = new MatDialogConfig<any>();\r\n config.width = '33vw';\r\n config.minWidth = '300px';\r\n config.disableClose = true;\r\n }\r\n\r\n if (config.data){\r\n config.data.confirmType = confirmType;\r\n }else {\r\n config.data = {\r\n confirmType\r\n };\r\n }\r\n\r\n // if no actions passed in, set up the defaults\r\n if (!actionConfig){\r\n\r\n // default actions\r\n let primary = {type: ActionType.PRIMARY, name: 'YES',\r\n internalAction: 'onConfirmClick', internalActionReturnValue: true};\r\n let secondary = {type: ActionType.SECONDARY, name: 'GO BACK',\r\n internalAction: 'onClose'};\r\n\r\n // by enum type, setup the messages/prompt\r\n // only two need different defaults than generic defaults\r\n switch (confirmType) {\r\n case ConfirmType.CONFIRM_AND_CLOSE:\r\n primary = {type: ActionType.PRIMARY, name: 'CONFIRM AND CLOSE',\r\n internalAction: 'onConfirmClick', internalActionReturnValue: true};\r\n break;\r\n case ConfirmType.ALERT:\r\n primary = undefined;\r\n secondary = {type: ActionType.SECONDARY, name: 'CLOSE',\r\n internalAction: 'onClose'};\r\n break;\r\n // case ConfirmType.DELETE:\r\n // case ConfirmType.DELETE_W_MESSAGE:\r\n // case ConfirmType.DELETE_W_PROMPT:\r\n // case ConfirmType.DISCARD:\r\n // case ConfirmType.ADD:\r\n // case ConfirmType.GENERIC:\r\n default:\r\n throw new Error('Confirm type doesn\\'t exist');\r\n }\r\n\r\n const actions = [];\r\n if (primary){\r\n actions.push(primary);\r\n }\r\n if (secondary){\r\n actions.push(secondary);\r\n }\r\n\r\n actionConfig = {\r\n actions\r\n };\r\n }\r\n\r\n return this.genericDialogContainer(ConfirmDialogComponent,\r\n title, icon, config, actionConfig);\r\n }\r\n\r\n public error(message: string | string[], title?: string,\r\n icon?: string, config?: MatDialogConfig): Observable<boolean> {\r\n return this.openDialog(message, title, DialogType.ERROR, icon, config);\r\n }\r\n\r\n public info(message: string | string[], title?: string,\r\n icon?: string, config?: MatDialogConfig): Observable<boolean> {\r\n return this.openDialog(message, title, DialogType.INFO, icon, config);\r\n }\r\n\r\n public createCustomDialog(tempRef: TemplateRef<any>, context?: any, title?: string,\r\n icon?: string, config?: MatDialogConfig,\r\n actionConfig?: GDActionConfig) {\r\n let configuration: MatDialogConfig = null;\r\n if (!config) {\r\n configuration = new MatDialogConfig();\r\n } else {\r\n configuration = config;\r\n }\r\n\r\n configuration.data = configuration.data ? configuration.data : {};\r\n configuration.data.templateRef = tempRef;\r\n configuration.data.title = title ? title : '';\r\n configuration.data.icon = icon ? icon : '';\r\n configuration.data.context = context;\r\n if (actionConfig) {\r\n configuration.data.actionConfig = actionConfig;\r\n }\r\n\r\n configuration.minWidth = configuration.minWidth ? configuration.minWidth : '10em';\r\n configuration.width = configuration.width ? configuration.width : '30em';\r\n\r\n configuration.panelClass = ['mx-sized-dialog', 'no-padding'];\r\n configuration.disableClose = true;\r\n configuration.hasBackdrop = true;\r\n\r\n const dialogRef = this.dialog.open(CustomDialogComponent, configuration);\r\n\r\n return dialogRef;\r\n }\r\n\r\n public startDefaultSpinnerDialog(): MatDialogRef<SpinnerDialogComponent> {\r\n return this.startSpinnerDialog('Please wait...', 3, 30);\r\n }\r\n\r\n public startSpinnerDialog(message: string, strokeWidth: number, diameter: number): MatDialogRef<SpinnerDialogComponent> {\r\n if (this._spinnerDialogIsOpen) {\r\n return null;\r\n }\r\n\r\n this._spinnerDialogIsOpen = true;\r\n\r\n const configuration: MatDialogConfig = new MatDialogConfig();\r\n configuration.data = {\r\n message,\r\n strokeWidth,\r\n diameter\r\n };\r\n configuration.width = '13em';\r\n configuration.disableClose = true;\r\n\r\n const dialogRef: MatDialogRef<SpinnerDialogComponent> = this.dialog.open(SpinnerDialogComponent, configuration);\r\n\r\n dialogRef.afterClosed().subscribe(() => {\r\n this._spinnerDialogIsOpen = false;\r\n });\r\n\r\n this.spinnerDialogRefs.push(dialogRef);\r\n\r\n return dialogRef;\r\n }\r\n\r\n public startNonModalSpinnerDialog(message: string, strokeWidth: number, diameter: number): MatDialogRef<SpinnerDialogComponent> {\r\n if (this._spinnerDialogIsOpen) {\r\n return null;\r\n }\r\n\r\n this._spinnerDialogIsOpen = true;\r\n\r\n const configuration: MatDialogConfig = new MatDialogConfig();\r\n configuration.data = {\r\n message,\r\n strokeWidth,\r\n diameter\r\n };\r\n configuration.width = '13em';\r\n configuration.disableClose = true;\r\n configuration.hasBackdrop = false;\r\n\r\n const dialogRef: MatDialogRef<SpinnerDialogComponent> = this.dialog.open(SpinnerDialogComponent, configuration);\r\n\r\n dialogRef.afterClosed().subscribe(() => {\r\n this._spinnerDialogIsOpen = false;\r\n });\r\n\r\n this.spinnerDialogRefs.push(dialogRef);\r\n\r\n return dialogRef;\r\n }\r\n\r\n // Let there be an alternative, global way to stop all active spinner dialogs.\r\n public stopAllSpinnerDialogs(): void {\r\n this.spinnerWorkItemCount = 0;\r\n for (const dialogRef of this.spinnerDialogRefs) {\r\n setTimeout(() => {\r\n dialogRef.close();\r\n });\r\n }\r\n this.spinnerDialogRefs = [];\r\n }\r\n\r\n public addSpinnerWorkItem(): void {\r\n this.spinnerWorkItemCount++;\r\n if (!this.checkingSpinnerWorkItems) {\r\n this.checkingSpinnerWorkItems = true;\r\n setTimeout(() => {\r\n this.checkSpinnerWorkItems();\r\n });\r\n }\r\n }\r\n\r\n public removeSpinnerWorkItem(): void {\r\n this.spinnerWorkItemCount--;\r\n if (this.spinnerWorkItemCount < 0) {\r\n this.spinnerWorkItemCount = 0;\r\n }\r\n if (!this.checkingSpinnerWorkItems) {\r\n this.checkingSpinnerWorkItems = true;\r\n setTimeout(() => {\r\n this.checkSpinnerWorkItems();\r\n });\r\n }\r\n }\r\n\r\n private checkSpinnerWorkItems(): void {\r\n this.checkingSpinnerWorkItems = false;\r\n if (this.spinnerWorkItemCount) {\r\n if (!this._spinnerDialogIsOpen) {\r\n this.startDefaultSpinnerDialog();\r\n }\r\n } else if (this._spinnerDialogIsOpen) {\r\n this.stopAllSpinnerDialogs();\r\n }\r\n }\r\n\r\n public genericDialogContainer(dialogContent: any, title: string,\r\n icon?: string, config?: MatDialogConfig,\r\n actionConfig?: GDActionConfig): Observable<any> {\r\n let configuration: MatDialogConfig = null;\r\n\r\n\r\n if (!config) {\r\n configuration = new MatDialogConfig();\r\n } else {\r\n configuration = config;\r\n }\r\n configuration.data = configuration.data ? configuration.data : {};\r\n configuration.data.dialogContent = dialogContent;\r\n configuration.data.title = title;\r\n if (icon) {\r\n configuration.data.icon = icon;\r\n }\r\n if (actionConfig) {\r\n configuration.data.actionConfig = actionConfig;\r\n }\r\n configuration.panelClass = ['mx-sized-dialog', 'no-padding'];\r\n configuration.disableClose = true;\r\n configuration.hasBackdrop = true;\r\n const dialogRef = this.dialog.open(GenericContainerDialogComponent, configuration);\r\n\r\n return dialogRef.afterClosed();\r\n }\r\n\r\n private openDialog(message: string | string[], title?: string,\r\n type?: DialogType, icon?: string, config?: MatDialogConfig): Observable<any> {\r\n let configuration: MatDialogConfig = null;\r\n if (!config) {\r\n configuration = new MatDialogConfig();\r\n } else {\r\n configuration = config;\r\n }\r\n\r\n configuration.data = configuration.data ? configuration.data : {};\r\n configuration.data.message = message;\r\n configuration.data.title = title ? title : '';\r\n configuration.data.icon = icon ? icon : '';\r\n configuration.data.dialogType = type ? type : '';\r\n\r\n configuration.maxWidth = configuration.maxWidth ? configuration.maxWidth : '80vw';\r\n configuration.maxHeight = configuration.maxHeight ? configuration.maxHeight : '80vh';\r\n configuration.minWidth = configuration.minWidth ? configuration.minWidth : '30em';\r\n\r\n configuration.panelClass = 'no-padding';\r\n configuration.disableClose = true;\r\n configuration.autoFocus = false;\r\n configuration.hasBackdrop = false;\r\n\r\n let dialogRef: MatDialogRef<AlertDialogComponent>;\r\n\r\n dialogRef = this.dialog.open(AlertDialogComponent, configuration);\r\n\r\n return dialogRef.afterClosed();\r\n }\r\n\r\n\r\n}\r\n","import {Component, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\r\nimport {DialogService} from '../service/dialog.service';\r\nimport {ActionType} from '../model/generic-dialog-action.model';\r\n\r\n\r\n@Component({\r\n selector: 'hci-save-footer',\r\n template: `\r\n <div class=\"full-height full-width\" style=\"margin-bottom: 8px;\">\r\n <div class=\"d-flex flex-row align-items-center right-align padded\">\r\n <div *ngIf=\"dirty\" class=\"warning-background padded\">\r\n {{ message }}\r\n </div>\r\n <div class=\"major-left-right-margin\">\r\n <button mat-raised-button [disabled]=\"disableSave\"\r\n [color]=\"actionType\" (click)=\"notifySave()\"\r\n [ngClass]=\"{'primary-action': actionType === type.PRIMARY,\r\n 'secondary-action': actionType === type.SECONDARY && !disableSave }\">\r\n <img *ngIf=\"icon\" [src]=\"icon\" alt=\"\">\r\n {{ name }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n styles: [`\r\n .primary-action{\r\n background-color: #0077B3FF;\r\n font-weight: bolder;\r\n color: white;\r\n }\r\n .secondary-action{\r\n background-color: #DEF4FFFF;\r\n font-weight: bolder;\r\n color: #0077B3FF;\r\n border: #0077B3FF solid 1px;\r\n }\r\n\r\n .major-left-right-margin {\r\n margin-left: 0.5em;\r\n margin-right: 0.5em;\r\n }\r\n\r\n .right-align {\r\n text-align: right;\r\n justify-content: flex-end;\r\n }\r\n\r\n\r\n .warning-background { background:#feec89; }\r\n\r\n `]\r\n})\r\nexport class SaveFooterComponent implements OnInit, OnDestroy {\r\n\r\n private _dirty: boolean;\r\n\r\n\r\n @Input() actionType: ActionType = ActionType.PRIMARY;\r\n @Input() icon: string;\r\n @Input() message = 'Your changes have not been saved';\r\n @Input() name = 'Save';\r\n @Input() set dirty(data: any){\r\n if (data){\r\n this._dirty = data;\r\n }else{\r\n this._dirty = false;\r\n }\r\n\r\n }\r\n get dirty(){\r\n return this._dirty;\r\n }\r\n\r\n\r\n @Input() set showSpinner(showSpinner: boolean) {\r\n setTimeout( () => {\r\n if (showSpinner) {\r\n this.dialogService.startDefaultSpinnerDialog();\r\n } else {\r\n this.dialogService.stopAllSpinnerDialogs();\r\n }\r\n });\r\n\r\n }\r\n\r\n @Input() disableSave = false;\r\n @Output() saveClicked = new EventEmitter<any>();\r\n type = ActionType;\r\n\r\n constructor(private dialogService: DialogService) { }\r\n\r\n ngOnInit(){\r\n // console.log(this.disableSave);\r\n }\r\n notifySave(): void{\r\n this.saveClicked.emit();\r\n }\r\n ngOnDestroy(){\r\n this.saveClicked.unsubscribe();\r\n }\r\n\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {ModuleWithProviders, NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FormsModule} from '@angular/forms';\r\nimport {DialogService} from './service/dialog.service';\r\nimport {AlertDialogComponent} from './alert/alert-dialog.component';\r\nimport {CustomDialogComponent} from './custom/custom-dialog.component';\r\nimport {GenericContainerDialogComponent} from './generic/generic-container-dialog.component';\r\nimport {SaveFooterComponent} from './save-footer/save-footer.component';\r\nimport {SpinnerDialogComponent} from './spinner/spinner-dialog.component';\r\nimport {MatButtonModule} from '@angular/material/button';\r\nimport {MatDialogModule} from '@angular/material/dialog';\r\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\r\nimport {DynamicModule} from 'ng-dynamic-component';\r\nimport {ConfirmDialogComponent} from './confirm/confirm-dialog.component';\r\nimport {MatExpansionModule} from '@angular/material/expansion';\r\n// import {RouterModule} from \"@angular/router\";\r\n// import {MatButtonToggleModule} from \"@angular/material/button-toggle\";\r\n// import {MatInputModule} from \"@angular/material/input\";\r\n// import {MatIconModule} from \"@angular/material/icon\";\r\n// import {TreeModule} from \"@circlon/angular-tree-component\";\r\n// import {MatDatepickerModule} from \"@angular/material/datepicker\";\r\n// import {MatSelectModule} from \"@angular/material/select\";\r\n// import {NgbModule, NgbNavModule} from \"@ng-bootstrap/ng-bootstrap\";\r\n// import {MiscModule} from \"@huntsman-cancer-institute/misc\";\r\n// import { MatNativeDateModule } from \"@angular/material/core\";\r\n// import { MatCheckboxModule } from '@angular/material/checkbox';\r\n\r\n\r\n/**\r\n * The main @huntsman-cancer-institute/dialog module. The module exports all components that an implementation might use\r\n * and the forRoot() provides a global service for an implementing application.\r\n *\r\n * @since 1.0.0\r\n */\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n DynamicModule,\r\n MatButtonModule,\r\n MatDialogModule,\r\n MatExpansionModule,\r\n MatProgressSpinnerModule\r\n // RouterModule,\r\n // MiscModule,\r\n // NgbModule,\r\n // MatButtonToggleModule,\r\n // MatInputModule,\r\n // MatIconModule,\r\n // MatDatepickerModule,\r\n // MatNativeDateModule,\r\n // MatCheckboxModule,\r\n // MatRadioModule,\r\n // MatSelectModule,\r\n // TreeModule,\r\n // NgbNavModule\r\n ],\r\n providers: [\r\n // MatDatepickerModule,\r\n ],\r\n declarations: [\r\n AlertDialogComponent,\r\n ConfirmDialogComponent,\r\n CustomDialogComponent,\r\n GenericContainerDialogComponent,\r\n SaveFooterComponent,\r\n SpinnerDialogComponent\r\n ],\r\n entryComponents: [\r\n AlertDialogComponent,\r\n ConfirmDialogComponent,\r\n CustomDialogComponent,\r\n GenericContainerDialogComponent,\r\n SaveFooterComponent,\r\n SpinnerDialogComponent\r\n ],\r\n exports: [\r\n AlertDialogComponent,\r\n ConfirmDialogComponent,\r\n CustomDialogComponent,\r\n GenericContainerDialogComponent,\r\n SaveFooterComponent,\r\n SpinnerDialogComponent\r\n ]\r\n})\r\nexport class DialogModule {\r\n static forRoot(): ModuleWithProviders<DialogModule> {\r\n return {\r\n providers: [\r\n DialogService\r\n ],\r\n ngModule: DialogModule\r\n };\r\n }\r\n}\r\n"]}
@@ -0,0 +1,18 @@
1
+ import { MatDialogRef } from '@angular/material/dialog';
2
+ import { BaseGenericContainerDialog } from '../model/base-generic-container-dialog';
3
+ import { ConfirmType } from '../model/confirm-type.model';
4
+ import * as i0 from "@angular/core";
5
+ export declare class ConfirmDialogComponent extends BaseGenericContainerDialog {
6
+ private dialogRef;
7
+ private data;
8
+ ConfirmType: typeof ConfirmType;
9
+ prompt: string;
10
+ message1: string;
11
+ message2: string;
12
+ confirmType: ConfirmType;
13
+ constructor(dialogRef: MatDialogRef<ConfirmDialogComponent>, data: any);
14
+ setupMessagesByType(): void;
15
+ onConfirmClick(value: boolean | any): void;
16
+ static ɵfac: i0.ɵɵFactoryDeclaration<ConfirmDialogComponent, never>;
17
+ static ɵcmp: i0.ɵɵComponentDeclaration<ConfirmDialogComponent, "hci-confirm-dialog", never, {}, {}, never, never>;
18
+ }
@@ -0,0 +1,35 @@
1
+ import { MatDialogRef } from '@angular/material/dialog';
2
+ import { ChangeDetectorRef, ElementRef, OnInit, ViewContainerRef } from '@angular/core';
3
+ import { GDAction } from '../model/generic-dialog-action.model';
4
+ import { FormGroup } from '@angular/forms';
5
+ import * as i0 from "@angular/core";
6
+ export declare class CustomDialogComponent implements OnInit {
7
+ dialogRef: MatDialogRef<CustomDialogComponent>;
8
+ private data;
9
+ private changeDetector;
10
+ vcr: ViewContainerRef;
11
+ topmostLeftmost: ElementRef;
12
+ title: string;
13
+ icon: string;
14
+ actionType: any;
15
+ originalXClick: number;
16
+ originalYClick: number;
17
+ movingDialog: boolean;
18
+ protected positionX: number;
19
+ protected positionY: number;
20
+ context: any;
21
+ private tempRef;
22
+ actions: GDAction[];
23
+ form: FormGroup;
24
+ get primaryDisable(): boolean;
25
+ get secondaryDisable(): boolean;
26
+ constructor(dialogRef: MatDialogRef<CustomDialogComponent>, data: any, changeDetector: ChangeDetectorRef);
27
+ ngOnInit(): void;
28
+ onClose(): void;
29
+ onMouseDownHeader(event: any): void;
30
+ onMouseMove(event: any): void;
31
+ onMouseUp(): void;
32
+ executeAction(action: GDAction): void;
33
+ static ɵfac: i0.ɵɵFactoryDeclaration<CustomDialogComponent, never>;
34
+ static ɵcmp: i0.ɵɵComponentDeclaration<CustomDialogComponent, "hci-custom-dialog", never, {}, {}, never, never>;
35
+ }