@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.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","ng://@huntsman-cancer-institute/dialog/huntsman-cancer-institute-dialog.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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { ElementRef, OnInit, OnDestroy, ComponentRef, ChangeDetectorRef } from '@angular/core';
2
+ import { MatDialogRef, MatDialog } from '@angular/material/dialog';
3
+ import { Router } from '@angular/router';
4
+ import { BaseGenericContainerDialog } from '../model/base-generic-container-dialog';
5
+ import { ActionType, GDAction } from '../model/generic-dialog-action.model';
6
+ import * as i0 from "@angular/core";
7
+ export declare class GenericContainerDialogComponent implements OnInit, OnDestroy {
8
+ private dialog;
9
+ private router;
10
+ private changeDetector;
11
+ private dialogRef;
12
+ data: any;
13
+ classList: string;
14
+ topmostLeftmost: ElementRef;
15
+ type: typeof ActionType;
16
+ title: string;
17
+ icon: string;
18
+ dialogContentBluePrint: any;
19
+ actions: GDAction[];
20
+ originalXClick: number;
21
+ originalYClick: number;
22
+ dialogContent: BaseGenericContainerDialog;
23
+ protected positionX: number;
24
+ protected positionY: number;
25
+ movingDialog: boolean;
26
+ useSaveFooter: boolean;
27
+ constructor(dialog: MatDialog, router: Router, changeDetector: ChangeDetectorRef, dialogRef: MatDialogRef<GenericContainerDialogComponent>, data: any);
28
+ ngOnInit(): void;
29
+ createdComponent(event: ComponentRef<any>): void;
30
+ executeAction(action: GDAction): void;
31
+ onMouseDownHeader(event: any): void;
32
+ onMouseMove(event: any): void;
33
+ onMouseUp(): void;
34
+ onClose(): void;
35
+ ngOnDestroy(): void;
36
+ static ɵfac: i0.ɵɵFactoryDeclaration<GenericContainerDialogComponent, never>;
37
+ static ɵcmp: i0.ɵɵComponentDeclaration<GenericContainerDialogComponent, "hci-generic-container-dialog", never, {}, {}, never, never>;
38
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@huntsman-cancer-institute/dialog" />
5
+ export * from './index';
package/index.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ export { DialogModule } from './dialog.module';
2
+ export { DialogService } from './service/dialog.service';
3
+ export { BaseGenericContainerDialog } from './model/base-generic-container-dialog';
4
+ export { ActionType } from './model/generic-dialog-action.model';
5
+ export { GDActionConfig } from './model/generic-dialog-action.model';
6
+ export { GDAction } from './model/generic-dialog-action.model';
7
+ export { DialogType } from './model/dialog-type.model';
8
+ export { ConfirmType } from './model/confirm-type.model';
9
+ export { AlertDialogComponent } from './alert/alert-dialog.component';
10
+ export { ConfirmDialogComponent } from './confirm/confirm-dialog.component';
11
+ export { CustomDialogComponent } from './custom/custom-dialog.component';
12
+ export { GenericContainerDialogComponent } from './generic/generic-container-dialog.component';
13
+ export { SaveFooterComponent } from './save-footer/save-footer.component';
14
+ export { SpinnerDialogComponent } from './spinner/spinner-dialog.component';
@@ -0,0 +1,13 @@
1
+ import { GDAction } from './generic-dialog-action.model';
2
+ import * as i0 from "@angular/core";
3
+ export declare abstract class BaseGenericContainerDialog {
4
+ inputData: any;
5
+ showSpinner: boolean;
6
+ innerTitle: string;
7
+ primaryDisable: (action?: GDAction) => boolean;
8
+ secondaryDisable: (action?: GDAction) => boolean;
9
+ dirty: () => boolean;
10
+ protected constructor();
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<BaseGenericContainerDialog, never>;
12
+ static ɵcmp: i0.ɵɵComponentDeclaration<BaseGenericContainerDialog, "ng-component", never, { "inputData": "inputData"; }, {}, never, never>;
13
+ }
@@ -0,0 +1,10 @@
1
+ export declare enum ConfirmType {
2
+ DELETE = "delete",
3
+ DELETE_W_MESSAGE = "deleteMessage",
4
+ DELETE_W_PROMPT = "deletePrompt",
5
+ DISCARD = "discard",
6
+ CONFIRM_AND_CLOSE = "confirmAndClose",
7
+ ADD = "add",
8
+ ALERT = "alert",
9
+ GENERIC = "generic"
10
+ }
@@ -0,0 +1,10 @@
1
+ export declare enum DialogType {
2
+ ERROR = "Error",
3
+ WARNING = "Warning",
4
+ ALERT = "Alert",
5
+ SUCCESS = "Succeed",
6
+ FAILED = "Failed",
7
+ CONFIRM = "Confirm",
8
+ INFO = "Info",
9
+ VALIDATION = "Validation Error"
10
+ }
@@ -0,0 +1,18 @@
1
+ import { MatDialogRef } from '@angular/material/dialog';
2
+ import { FormGroup } from '@angular/forms';
3
+ export declare enum ActionType {
4
+ PRIMARY = "primary",
5
+ SECONDARY = "accent"
6
+ }
7
+ export interface GDActionConfig {
8
+ formSource?: FormGroup;
9
+ actions: GDAction[];
10
+ }
11
+ export interface GDAction {
12
+ type: ActionType;
13
+ internalAction?: string;
14
+ internalActionReturnValue?: boolean | any;
15
+ externalAction?: (dialogRef?: MatDialogRef<any>) => void | string;
16
+ icon?: string;
17
+ name: string;
18
+ }
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "@huntsman-cancer-institute/dialog",
3
+ "version": "12.11.9-SNAPSHOT",
4
+ "repository": {
5
+ "type": "git",
6
+ "url": "git@gitlab.com:huntsman-cancer-institute/risr/ng/hci-ng-lib.git"
7
+ },
8
+ "publishConfig": {
9
+ "registry": "https://registry.npmjs.org",
10
+ "access": "public"
11
+ },
12
+ "peerDependencies": {
13
+ "@angular/common": ">=12.2.0",
14
+ "@angular/core": ">=12.2.0",
15
+ "@angular/material": ">=12.2.0"
16
+ },
17
+ "dependencies": {
18
+ "ng-dynamic-component": "9.0.0",
19
+ "rxjs": ">=6.5.3",
20
+ "tslib": "^2.2.0"
21
+ },
22
+ "main": "bundles/huntsman-cancer-institute-dialog.umd.js",
23
+ "module": "fesm5/huntsman-cancer-institute-dialog.js",
24
+ "es2015": "fesm2015/huntsman-cancer-institute-dialog.js",
25
+ "esm5": "esm5/huntsman-cancer-institute-dialog.js",
26
+ "esm2015": "esm2015/huntsman-cancer-institute-dialog.js",
27
+ "fesm5": "fesm5/huntsman-cancer-institute-dialog.js",
28
+ "fesm2015": "fesm2015/huntsman-cancer-institute-dialog.js",
29
+ "typings": "huntsman-cancer-institute-dialog.d.ts",
30
+ "sideEffects": false,
31
+ "scripts": {
32
+ "prepublishOnly": "node --eval \"console.error('ERROR: Trying to publish a package that has been compiled by Ivy. This is not allowed.\\nPlease delete and rebuild the package, without compiling with Ivy, before attempting to publish.\\n')\" && exit 1"
33
+ }
34
+ }
@@ -0,0 +1,24 @@
1
+ import { EventEmitter, OnDestroy, OnInit } from '@angular/core';
2
+ import { DialogService } from '../service/dialog.service';
3
+ import { ActionType } from '../model/generic-dialog-action.model';
4
+ import * as i0 from "@angular/core";
5
+ export declare class SaveFooterComponent implements OnInit, OnDestroy {
6
+ private dialogService;
7
+ private _dirty;
8
+ actionType: ActionType;
9
+ icon: string;
10
+ message: string;
11
+ name: string;
12
+ set dirty(data: any);
13
+ get dirty(): any;
14
+ set showSpinner(showSpinner: boolean);
15
+ disableSave: boolean;
16
+ saveClicked: EventEmitter<any>;
17
+ type: typeof ActionType;
18
+ constructor(dialogService: DialogService);
19
+ ngOnInit(): void;
20
+ notifySave(): void;
21
+ ngOnDestroy(): void;
22
+ static ɵfac: i0.ɵɵFactoryDeclaration<SaveFooterComponent, never>;
23
+ static ɵcmp: i0.ɵɵComponentDeclaration<SaveFooterComponent, "hci-save-footer", never, { "actionType": "actionType"; "icon": "icon"; "message": "message"; "name": "name"; "dirty": "dirty"; "showSpinner": "showSpinner"; "disableSave": "disableSave"; }, { "saveClicked": "saveClicked"; }, never, never>;
24
+ }
@@ -0,0 +1,45 @@
1
+ import { TemplateRef } from '@angular/core';
2
+ import { MatDialogRef, MatDialog, MatDialogConfig } from '@angular/material/dialog';
3
+ import { Observable } from 'rxjs';
4
+ import { SpinnerDialogComponent } from '../spinner/spinner-dialog.component';
5
+ import { CustomDialogComponent } from '../custom/custom-dialog.component';
6
+ import { GDActionConfig } from '../model/generic-dialog-action.model';
7
+ import { DialogType } from '../model/dialog-type.model';
8
+ import { ConfirmType } from '../model/confirm-type.model';
9
+ import * as i0 from "@angular/core";
10
+ export declare class DialogService {
11
+ private dialog;
12
+ private _spinnerDialogIsOpen;
13
+ private spinnerWorkItemCount;
14
+ private checkingSpinnerWorkItems;
15
+ spinnerDialogRefs: MatDialogRef<SpinnerDialogComponent>[];
16
+ get spinnerDialogIsOpen(): boolean;
17
+ constructor(dialog: MatDialog);
18
+ alert(message: string | string[], title?: string, dialogType?: DialogType, icon?: string, config?: MatDialogConfig): Observable<boolean>;
19
+ confirm(message: string | string[], title?: string, icon?: string, config?: MatDialogConfig): Observable<boolean>;
20
+ /**
21
+ * Creates a ConfirmDialogComponent with different display depending on
22
+ * the ConfirmType.
23
+ * @param title defaults to 'Confirm'
24
+ * @param icon defaults to 'fa fa-info-circle'
25
+ * @param config config.data can contain a prompt, message1 and/or
26
+ * message2 according to the ConfirmType chosen
27
+ * @param actionConfig sets up the dialog buttons and actions if you want
28
+ * to override the defaults
29
+ */
30
+ confirmByType(confirmType: ConfirmType, title?: string, icon?: string, config?: MatDialogConfig, actionConfig?: GDActionConfig): Observable<boolean>;
31
+ error(message: string | string[], title?: string, icon?: string, config?: MatDialogConfig): Observable<boolean>;
32
+ info(message: string | string[], title?: string, icon?: string, config?: MatDialogConfig): Observable<boolean>;
33
+ createCustomDialog(tempRef: TemplateRef<any>, context?: any, title?: string, icon?: string, config?: MatDialogConfig, actionConfig?: GDActionConfig): MatDialogRef<CustomDialogComponent, any>;
34
+ startDefaultSpinnerDialog(): MatDialogRef<SpinnerDialogComponent>;
35
+ startSpinnerDialog(message: string, strokeWidth: number, diameter: number): MatDialogRef<SpinnerDialogComponent>;
36
+ startNonModalSpinnerDialog(message: string, strokeWidth: number, diameter: number): MatDialogRef<SpinnerDialogComponent>;
37
+ stopAllSpinnerDialogs(): void;
38
+ addSpinnerWorkItem(): void;
39
+ removeSpinnerWorkItem(): void;
40
+ private checkSpinnerWorkItems;
41
+ genericDialogContainer(dialogContent: any, title: string, icon?: string, config?: MatDialogConfig, actionConfig?: GDActionConfig): Observable<any>;
42
+ private openDialog;
43
+ static ɵfac: i0.ɵɵFactoryDeclaration<DialogService, never>;
44
+ static ɵprov: i0.ɵɵInjectableDeclaration<DialogService>;
45
+ }
@@ -0,0 +1,12 @@
1
+ import { MatDialogRef } from '@angular/material/dialog';
2
+ import * as i0 from "@angular/core";
3
+ export declare class SpinnerDialogComponent {
4
+ private dialogRef;
5
+ private data;
6
+ strokeWidth: number;
7
+ diameter: number;
8
+ message: string;
9
+ constructor(dialogRef: MatDialogRef<SpinnerDialogComponent>, data: any);
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<SpinnerDialogComponent, never>;
11
+ static ɵcmp: i0.ɵɵComponentDeclaration<SpinnerDialogComponent, "hci-spinner-dialog", never, { "strokeWidth": "strokeWidth"; "diameter": "diameter"; "message": "message"; }, {}, never, never>;
12
+ }