@cleavelandprice/ngx-lib 2.1.3 → 2.2.2
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.
- package/README.md +615 -615
- package/esm2020/cleavelandprice-ngx-lib.mjs +5 -0
- package/{esm2015/public_api.js → esm2020/public_api.mjs} +1 -1
- package/esm2020/src/authentication/authentication.module.mjs +112 -0
- package/esm2020/src/authentication/components/login/login.component.mjs +40 -0
- package/esm2020/src/authentication/components/login-form/login-form.component.mjs +45 -0
- package/esm2020/src/authentication/model/authentication-token.mjs +2 -0
- package/{esm2015/src/authentication/model/authentication.service.config.js → esm2020/src/authentication/model/authentication.service.config.mjs} +1 -1
- package/esm2020/src/authentication/services/authentication.service.mjs +138 -0
- package/esm2020/src/dialog/components/_dialog/dialog.component.mjs +83 -0
- package/esm2020/src/dialog/components/confirmation-dialog/confirmation-dialog.component.mjs +21 -0
- package/esm2020/src/dialog/components/input-dialog/input-dialog.component.mjs +21 -0
- package/esm2020/src/dialog/components/message-dialog/message-dialog.component.mjs +21 -0
- package/esm2020/src/dialog/dialog.module.mjs +74 -0
- package/{esm2015/src/dialog/model/confirmation-dialog-mode.enum.js → esm2020/src/dialog/model/confirmation-dialog-mode.enum.mjs} +1 -1
- package/esm2020/src/email/email.module.mjs +47 -0
- package/esm2020/src/email/model/email-dto.mjs +2 -0
- package/{esm2015/src/email/model/email-sender.js → esm2020/src/email/model/email-sender.mjs} +2 -1
- package/{esm2015/src/email/model/email.js → esm2020/src/email/model/email.mjs} +2 -1
- package/{esm2015/src/email/model/email.service.config.js → esm2020/src/email/model/email.service.config.mjs} +1 -1
- package/esm2020/src/email/services/email.service.mjs +31 -0
- package/esm2020/src/employee/employee.module.mjs +91 -0
- package/esm2020/src/employee/model/employee.mjs +2 -0
- package/{esm2015/src/employee/model/employee.service.config.js → esm2020/src/employee/model/employee.service.config.mjs} +1 -1
- package/esm2020/src/employee/pipes/departments.pipe.mjs +24 -0
- package/esm2020/src/employee/pipes/employee-by-dn.pipe.mjs +17 -0
- package/esm2020/src/employee/pipes/employee-photo-url.pipe.mjs +27 -0
- package/esm2020/src/employee/pipes/employees-with-property-value.pipe.mjs +17 -0
- package/esm2020/src/employee/pipes/filter-employees.pipe.mjs +22 -0
- package/esm2020/src/employee/pipes/is-member-of.pipe.mjs +17 -0
- package/esm2020/src/employee/pipes/sort-employees.pipe.mjs +44 -0
- package/esm2020/src/employee/services/employee.service.mjs +41 -0
- package/esm2020/src/file-upload/components/upload/upload.component.mjs +34 -0
- package/esm2020/src/file-upload/components/upload-dialog/upload-dialog.component.mjs +102 -0
- package/{esm2015/src/file-upload/model/database-file-info.js → esm2020/src/file-upload/model/database-file-info.mjs} +2 -1
- package/{esm2015/src/file-upload/model/file-upload-request.js → esm2020/src/file-upload/model/file-upload-request.mjs} +2 -1
- package/esm2020/src/file-upload/model/filesystem-file-info.mjs +2 -0
- package/esm2020/src/file-upload/model/upload.service.config.mjs +3 -0
- package/esm2020/src/file-upload/services/upload.service.mjs +93 -0
- package/esm2020/src/file-upload/upload.module.mjs +93 -0
- package/{esm2015/src/sharepoint/model/sharepoint-calendar-event.js → esm2020/src/sharepoint/model/sharepoint-calendar-event.mjs} +2 -1
- package/esm2020/src/sharepoint/model/sharepoint-customer-visit.mjs +2 -0
- package/{esm2015/src/sharepoint/model/sharepoint-employee-picture.js → esm2020/src/sharepoint/model/sharepoint-employee-picture.mjs} +2 -1
- package/esm2020/src/sharepoint/model/sharepoint-list-item.mjs +2 -0
- package/esm2020/src/sharepoint/model/sharepoint-list.mjs +2 -0
- package/esm2020/src/sharepoint/model/sharepoint-person.mjs +2 -0
- package/esm2020/src/sharepoint/model/sharepoint-picture.mjs +2 -0
- package/{esm2015/src/sharepoint/model/sharepoint.service.config.js → esm2020/src/sharepoint/model/sharepoint.service.config.mjs} +1 -1
- package/esm2020/src/sharepoint/pipes/sharepoint-photo-url.pipe.mjs +16 -0
- package/esm2020/src/sharepoint/pipes/sharepoint-url.pipe.mjs +16 -0
- package/esm2020/src/sharepoint/services/sharepoint.service.mjs +77 -0
- package/esm2020/src/sharepoint/sharepoint.module.mjs +69 -0
- package/esm2020/src/url/pipes/safe-url.pipe.mjs +21 -0
- package/esm2020/src/url/pipes/uri-scheme.pipe.mjs +103 -0
- package/esm2020/src/url/url.module.mjs +38 -0
- package/fesm2015/cleavelandprice-ngx-lib.mjs +1414 -0
- package/fesm2015/cleavelandprice-ngx-lib.mjs.map +1 -0
- package/fesm2020/cleavelandprice-ngx-lib.mjs +1386 -0
- package/fesm2020/cleavelandprice-ngx-lib.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/package.json +22 -10
- package/src/authentication/authentication.module.d.ts +17 -0
- package/src/authentication/components/login/login.component.d.ts +6 -1
- package/src/authentication/components/login-form/login-form.component.d.ts +3 -0
- package/src/authentication/model/authentication-token.d.ts +1 -8
- package/src/authentication/services/authentication.service.d.ts +12 -2
- package/src/dialog/components/_dialog/dialog.component.d.ts +3 -0
- package/src/dialog/components/confirmation-dialog/confirmation-dialog.component.d.ts +3 -0
- package/src/dialog/components/input-dialog/input-dialog.component.d.ts +3 -0
- package/src/dialog/components/message-dialog/message-dialog.component.d.ts +3 -0
- package/src/dialog/dialog.module.d.ts +14 -0
- package/src/email/email.module.d.ts +5 -0
- package/src/email/services/email.service.d.ts +3 -0
- package/src/employee/employee.module.d.ts +12 -0
- package/src/employee/pipes/departments.pipe.d.ts +3 -0
- package/src/employee/pipes/employee-by-dn.pipe.d.ts +3 -0
- package/src/employee/pipes/employee-photo-url.pipe.d.ts +3 -0
- package/src/employee/pipes/employees-with-property-value.pipe.d.ts +3 -0
- package/src/employee/pipes/filter-employees.pipe.d.ts +3 -0
- package/src/employee/pipes/is-member-of.pipe.d.ts +3 -0
- package/src/employee/pipes/sort-employees.pipe.d.ts +3 -0
- package/src/employee/services/employee.service.d.ts +3 -0
- package/src/file-upload/components/upload/upload.component.d.ts +3 -0
- package/src/file-upload/components/upload-dialog/upload-dialog.component.d.ts +3 -0
- package/src/file-upload/services/upload.service.d.ts +3 -0
- package/src/file-upload/upload.module.d.ts +13 -0
- package/src/sharepoint/model/sharepoint-calendar-event.d.ts +3 -3
- package/src/sharepoint/model/sharepoint-customer-visit.d.ts +5 -5
- package/src/sharepoint/model/sharepoint-employee-picture.d.ts +2 -3
- package/src/sharepoint/model/sharepoint-list-item.d.ts +9 -9
- package/src/sharepoint/model/sharepoint-list.d.ts +8 -0
- package/src/sharepoint/model/sharepoint-person.d.ts +9 -0
- package/src/sharepoint/model/sharepoint-picture.d.ts +11 -8
- package/src/sharepoint/model/sharepoint.service.config.d.ts +2 -5
- package/src/sharepoint/pipes/sharepoint-photo-url.pipe.d.ts +3 -0
- package/src/sharepoint/pipes/sharepoint-url.pipe.d.ts +3 -0
- package/src/sharepoint/services/sharepoint.service.d.ts +11 -6
- package/src/sharepoint/sharepoint.module.d.ts +9 -4
- package/src/url/pipes/safe-url.pipe.d.ts +3 -0
- package/src/url/pipes/uri-scheme.pipe.d.ts +3 -0
- package/src/url/url.module.d.ts +7 -0
- package/bundles/cleavelandprice-ngx-lib.umd.js +0 -1360
- package/bundles/cleavelandprice-ngx-lib.umd.js.map +0 -1
- package/bundles/cleavelandprice-ngx-lib.umd.min.js +0 -2
- package/bundles/cleavelandprice-ngx-lib.umd.min.js.map +0 -1
- package/cleavelandprice-ngx-lib.d.ts +0 -5
- package/cleavelandprice-ngx-lib.metadata.json +0 -1
- package/esm2015/cleavelandprice-ngx-lib.js +0 -6
- package/esm2015/src/authentication/authentication.module.js +0 -84
- package/esm2015/src/authentication/components/login/login.component.js +0 -41
- package/esm2015/src/authentication/components/login-form/login-form.component.js +0 -41
- package/esm2015/src/authentication/model/authentication-token.js +0 -1
- package/esm2015/src/authentication/services/authentication.service.js +0 -129
- package/esm2015/src/dialog/components/_dialog/dialog.component.js +0 -75
- package/esm2015/src/dialog/components/confirmation-dialog/confirmation-dialog.component.js +0 -19
- package/esm2015/src/dialog/components/input-dialog/input-dialog.component.js +0 -19
- package/esm2015/src/dialog/components/message-dialog/message-dialog.component.js +0 -19
- package/esm2015/src/dialog/dialog.module.js +0 -54
- package/esm2015/src/email/email.module.js +0 -41
- package/esm2015/src/email/model/email-dto.js +0 -1
- package/esm2015/src/email/services/email.service.js +0 -30
- package/esm2015/src/employee/employee.module.js +0 -73
- package/esm2015/src/employee/model/employee.js +0 -1
- package/esm2015/src/employee/pipes/departments.pipe.js +0 -20
- package/esm2015/src/employee/pipes/employee-by-dn.pipe.js +0 -13
- package/esm2015/src/employee/pipes/employee-photo-url.pipe.js +0 -23
- package/esm2015/src/employee/pipes/employees-with-property-value.pipe.js +0 -13
- package/esm2015/src/employee/pipes/filter-employees.pipe.js +0 -18
- package/esm2015/src/employee/pipes/is-member-of.pipe.js +0 -13
- package/esm2015/src/employee/pipes/sort-employees.pipe.js +0 -40
- package/esm2015/src/employee/services/employee.service.js +0 -40
- package/esm2015/src/file-upload/components/upload/upload.component.js +0 -34
- package/esm2015/src/file-upload/components/upload-dialog/upload-dialog.component.js +0 -101
- package/esm2015/src/file-upload/model/filesystem-file-info.js +0 -1
- package/esm2015/src/file-upload/model/upload.service.config.js +0 -3
- package/esm2015/src/file-upload/services/upload.service.js +0 -91
- package/esm2015/src/file-upload/upload.module.js +0 -73
- package/esm2015/src/sharepoint/model/sharepoint-customer-visit.js +0 -1
- package/esm2015/src/sharepoint/model/sharepoint-list-item.js +0 -1
- package/esm2015/src/sharepoint/model/sharepoint-list-items-request.js +0 -1
- package/esm2015/src/sharepoint/model/sharepoint-picture.js +0 -1
- package/esm2015/src/sharepoint/model/sharepoint-uri-request.js +0 -1
- package/esm2015/src/sharepoint/model/sharepoint-user-request.js +0 -1
- package/esm2015/src/sharepoint/model/sharepoint-user.js +0 -1
- package/esm2015/src/sharepoint/pipes/sharepoint-photo-url.pipe.js +0 -12
- package/esm2015/src/sharepoint/pipes/sharepoint-url.pipe.js +0 -12
- package/esm2015/src/sharepoint/services/sharepoint.service.js +0 -71
- package/esm2015/src/sharepoint/sharepoint.module.js +0 -65
- package/esm2015/src/url/pipes/safe-url.pipe.js +0 -20
- package/esm2015/src/url/pipes/uri-scheme.pipe.js +0 -99
- package/esm2015/src/url/url.module.js +0 -31
- package/fesm2015/cleavelandprice-ngx-lib.js +0 -1247
- package/fesm2015/cleavelandprice-ngx-lib.js.map +0 -1
- package/src/sharepoint/model/sharepoint-list-items-request.d.ts +0 -10
- package/src/sharepoint/model/sharepoint-uri-request.d.ts +0 -5
- package/src/sharepoint/model/sharepoint-user-request.d.ts +0 -6
- package/src/sharepoint/model/sharepoint-user.d.ts +0 -8
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cleavelandprice-ngx-lib.umd.js","sources":["../../src/dialog/model/confirmation-dialog-mode.enum.ts","../../src/dialog/components/_dialog/dialog.component.ts","../../src/dialog/components/confirmation-dialog/confirmation-dialog.component.ts","../../src/dialog/components/input-dialog/input-dialog.component.ts","../../src/dialog/components/message-dialog/message-dialog.component.ts","../../src/dialog/dialog.module.ts","../../src/authentication/model/authentication.service.config.ts","../../src/sharepoint/model/sharepoint.service.config.ts","../../src/sharepoint/services/sharepoint.service.ts","../../src/authentication/services/authentication.service.ts","../../src/authentication/components/login-form/login-form.component.ts","../../src/authentication/components/login/login.component.ts","../../src/authentication/authentication.module.ts","../../src/email/model/email.service.config.ts","../../src/email/services/email.service.ts","../../src/email/email.module.ts","../../src/employee/model/employee.service.config.ts","../../src/employee/services/employee.service.ts","../../src/employee/pipes/departments.pipe.ts","../../src/employee/pipes/employee-by-dn.pipe.ts","../../src/employee/pipes/employee-photo-url.pipe.ts","../../src/employee/pipes/employees-with-property-value.pipe.ts","../../src/employee/pipes/filter-employees.pipe.ts","../../src/employee/pipes/is-member-of.pipe.ts","../../src/employee/pipes/sort-employees.pipe.ts","../../src/employee/employee.module.ts","../../src/sharepoint/pipes/sharepoint-photo-url.pipe.ts","../../src/sharepoint/pipes/sharepoint-url.pipe.ts","../../src/sharepoint/sharepoint.module.ts","../../src/file-upload/model/upload.service.config.ts","../../src/file-upload/services/upload.service.ts","../../src/file-upload/components/upload-dialog/upload-dialog.component.ts","../../src/file-upload/components/upload/upload.component.ts","../../src/file-upload/upload.module.ts","../../src/url/pipes/safe-url.pipe.ts","../../src/url/pipes/uri-scheme.pipe.ts","../../src/url/url.module.ts","../../cleavelandprice-ngx-lib.ts"],"sourcesContent":["export enum ConfirmationDialogMode {\n OkCancel,\n YesNo,\n TrueFalse,\n Custom\n}\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { ConfirmationDialogMode } from './../../model/confirmation-dialog-mode.enum';\n\n@Component({\n selector: 'cp-dialog',\n templateUrl: './dialog.component.html',\n styleUrls: ['./dialog.component.css']\n})\nexport class DialogComponent implements OnInit {\n @Input() dialogType: string;\n @Input() data: any;\n @Output() closed = new EventEmitter<any>();\n\n ConfirmationDialogMode = ConfirmationDialogMode;\n mode = ConfirmationDialogMode.OkCancel;\n title: string;\n message: string;\n checkboxMessage: string;\n placeholder: string;\n customTrueFalseText: string[] = null;\n\n userInput: string;\n checkboxValue: boolean;\n\n ngOnInit(): void {\n if (this.data) {\n this.title = this.data.title || null;\n this.message = this.data.message || null;\n this.checkboxMessage = this.data.checkboxMessage || null;\n this.placeholder = this.data.placeholder || null;\n this.userInput = this.data.value || null;\n this.mode = this.data.mode || ConfirmationDialogMode.OkCancel;\n this.customTrueFalseText = this.data.customTrueFalseText;\n }\n }\n\n close(): void {\n let data: any;\n\n switch (this.dialogType) {\n case 'message':\n data = this.checkboxMessage ?\n {\n checkbox: this.checkboxValue || false\n } :\n null;\n break;\n case 'input':\n data = this.checkboxMessage ?\n {\n response: this.userInput,\n checkbox: this.checkboxValue || false\n } :\n this.userInput;\n break;\n case 'confirmation':\n data = this.checkboxMessage ?\n {\n response: true,\n checkbox: this.checkboxValue || false\n } :\n true;\n break;\n }\n\n this.closed.emit(data);\n }\n\n cancel(): void {\n let data: any;\n\n if (this.dialogType === 'confirmation') {\n data = this.checkboxMessage ?\n {\n response: false,\n checkbox: this.checkboxValue || false\n } :\n false;\n }\n\n this.closed.emit(data);\n }\n}\n","import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n selector: 'cp-confirmation-dialog',\n templateUrl: './confirmation-dialog.component.html'\n})\nexport class ConfirmationDialogComponent {\n\n constructor(public dialogRef: MatDialogRef<ConfirmationDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any) {\n }\n}\n","import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n selector: 'cp-input-dialog',\n templateUrl: './input-dialog.component.html'\n})\nexport class InputDialogComponent {\n constructor(public dialogRef: MatDialogRef<InputDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any) {\n }\n}\n","import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n selector: 'cp-message-dialog',\n templateUrl: './message-dialog.component.html'\n})\nexport class MessageDialogComponent {\n constructor(public dialogRef: MatDialogRef<MessageDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any) {\n }\n}\n","//#region Imports\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\n// Angular Material\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatInputModule } from '@angular/material/input';\n\n// Components\nimport { DialogComponent } from './components/_dialog/dialog.component';\nimport { ConfirmationDialogComponent } from './components/confirmation-dialog/confirmation-dialog.component';\nimport { InputDialogComponent } from './components/input-dialog/input-dialog.component';\nimport { MessageDialogComponent } from './components/message-dialog/message-dialog.component';\n//#endregion\n\n//#region Exports\n// Model\nexport * from './model/confirmation-dialog-mode.enum';\n\n// Components\nexport * from './components/confirmation-dialog/confirmation-dialog.component';\nexport * from './components/input-dialog/input-dialog.component';\nexport * from './components/message-dialog/message-dialog.component';\n//#endregion\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n MatButtonModule,\n MatCheckboxModule,\n MatInputModule,\n MatDialogModule\n ],\n declarations: [\n DialogComponent,\n ConfirmationDialogComponent,\n InputDialogComponent,\n MessageDialogComponent\n ],\n exports: [\n ConfirmationDialogComponent,\n InputDialogComponent,\n MessageDialogComponent\n ],\n entryComponents: [\n ConfirmationDialogComponent,\n InputDialogComponent,\n MessageDialogComponent\n ]\n})\nexport class DialogModule { }\n","export class AuthenticationServiceConfig {\n authenticationApiUrl: string;\n}\n","export class SharePointServiceConfig {\n sharePointApiUrl: string;\n sharePointServerUrl: string;\n employeePhotoSite: string;\n employeePhotoList: string;\n username: string;\n password: string;\n}\n","//#region Imports\nimport { Injectable, Optional } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\n\nimport { SharePointServiceConfig } from './../model/sharepoint.service.config';\n// import { SharePointList } from '../model/DELETE_sharepoint-list';\nimport { SharePointListItemsRequest } from './../model/sharepoint-list-items-request';\nimport { SharePointUserRequest } from './../model/sharepoint-user-request';\nimport { SharePointListItem } from './../model/sharepoint-list-item';\nimport { SharePointEmployeePicture } from './../model/sharepoint-employee-picture';\n// import { SharePointCustomerVisit } from './../model/sharepoint-customer-visit';\n// import { SharePointPerson } from '../model/DELETE_sharepoint-person';\nimport { SharePointUser } from '../model/sharepoint-user';\n//#endregion\n\n@Injectable()\nexport class SharePointService {\n //#region Fields\n // people: SharePointPerson[];\n users: SharePointUser[];\n photos: SharePointEmployeePicture[];\n //#endregion\n\n constructor(@Optional() private config: SharePointServiceConfig,\n private http: HttpClient) { }\n\n //#region Utilities\n getListItems(request: SharePointListItemsRequest): Observable<SharePointListItem[]> {\n if (!request.username) { request.username = this.config.username; }\n if (!request.password) { request.password = this.config.password; }\n\n return this.http.post<SharePointListItem[]>(`${this.config.sharePointApiUrl}/listitems`, request);\n }\n\n /*getListItemsSimple(list: string, view: string, site?: string, limit?: string): Observable<SharePointListItem[]> {\n return this.http.get<SharePointListItem[]>(`${this.config.sharePointApiUrl}/${list}/${view}/${site}/${limit}`);\n }*/\n\n getPeople(request: SharePointUserRequest, storePeople?: boolean): Observable<SharePointUser[]> {\n // Do we already have people stored locally?\n if (this.users) {\n return of(this.users);\n }\n\n if (!request.username) { request.username = this.config.username; }\n if (!request.password) { request.password = this.config.password; }\n\n // Should we store people locally for subsequent calls?\n if (storePeople) {\n this.http.post<SharePointUser[]>(`${this.config.sharePointApiUrl}/users`, request)\n .subscribe(users => this.users = users);\n }\n\n return this.http.post<SharePointUser[]>(`${this.config.sharePointApiUrl}/users`, request);\n }\n\n getPhotos(storePhotos?: boolean): Observable<SharePointEmployeePicture[]> {\n // Do we already have photos stored locally?\n if (this.photos) {\n return of(this.photos);\n }\n\n const request: SharePointListItemsRequest = {\n list: this.config.employeePhotoList,\n site: `${this.config.sharePointServerUrl}/${this.config.employeePhotoSite}`,\n username: this.config.username,\n password: this.config.password,\n additionalPropertiesToRetrieve: [ 'EncodedAbsUrl' ]\n };\n\n // Should we store photos locally for subsequent calls?\n if (storePhotos) {\n this.http.post<SharePointEmployeePicture[]>(`${this.config.sharePointApiUrl}/listitems`, request)\n .subscribe(photos => this.photos = photos);\n }\n\n return this.http.post<SharePointEmployeePicture[]>(`${this.config.sharePointApiUrl}/listitems`, request);\n }\n\n /*getCustomerVisits(): Observable<SharePointCustomerVisit[]> {\n const list: SharePointList = {\n list: 'Customer Visits',\n view: 'All Events',\n userName: this.config.userName,\n password: this.config.password\n };\n\n return this.http.post<SharePointCustomerVisit[]>(this.config.sharePointApiUrl, list);\n }*/\n //#endregion\n}\n","//#region Imports\nimport { Injectable, Output, EventEmitter, Optional } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { AuthenticationToken } from './../model/authentication-token';\n// import { JwtHelper } from 'angular2-jwt';\nimport { JwtHelperService } from '@auth0/angular-jwt';\nimport { AuthenticationServiceConfig } from './../model/authentication.service.config';\nimport { SharePointService } from './../../sharepoint/services/sharepoint.service';\n//#endregion\n\n/**\n * Authenticate Active Directory user\n */\n@Injectable()\nexport class AuthenticationService {\n //#region Fields\n /**\n * @ignore\n */\n private authenticationApiUrl: string;\n\n @Output() authenticatedChanged = new EventEmitter<boolean>();\n @Output() authenticatingChanged = new EventEmitter<boolean>();\n\n /**\n * Flag set to true while the service is attempting to authenticate the user\n */\n authenticating = false;\n\n /**\n * Flag set to true when the user is successfully authenticated\n */\n authenticated = false;\n\n /**\n * Object representing the authenticated user\n */\n /*authenticatedUser: {\n admin: boolean,\n accountName: string,\n displayName: string,\n distinguishedName: string;\n employeeNumber: string;\n photoUrl?: string;\n memberOf?: string;\n };*/\n authenticatedUser: AuthenticationToken;\n //#endregion\n\n //#region Lifecycle\n /**\n * @ignore\n */\n constructor( @Optional() config: AuthenticationServiceConfig,\n private http: HttpClient,\n private sharePointService: SharePointService) {\n\n this.authenticationApiUrl = config.authenticationApiUrl;\n this.checkForExistingToken();\n }\n //#endregion\n\n //#region Utilities\n /**\n * Authenticate the user and store the token in Local Storage\n *\n * @param username AD sAMAccountName\n * @param password\n * @param adminGroup AD group that determines if authenticated user is considered an administrator of the app\n */\n login(username: string, password: string, adminGroup?: string): void {\n const request = {\n username: username,\n password: password,\n adminGroup: adminGroup\n };\n\n this.authenticating = true;\n this.authenticatingChanged.emit(this.authenticating);\n\n this.http.request('POST', this.authenticationApiUrl, { responseType: 'text', body: request})\n // this.http.post<string>(this.authenticationApiUrl, request)\n .subscribe(token => this.validateUser(token),\n err => {\n this.authenticating = false;\n this.authenticatingChanged.emit(this.authenticating);\n });\n }\n\n /**\n * Logout the user and delete the token from Local Storage\n */\n logout(): void {\n if (localStorage.getItem('token')) {\n localStorage.removeItem('token');\n }\n\n this.authenticatedUser = null;\n this.authenticated = false;\n this.authenticatedChanged.emit(false);\n }\n\n /**\n * @ignore\n */\n private validateUser(token: string): void {\n if (!token) { return; }\n\n const jwtHelper = new JwtHelperService();\n const decoded = jwtHelper.decodeToken(token) as AuthenticationToken;\n\n if (jwtHelper.isTokenExpired(token)) {\n this.logout();\n return;\n }\n\n this.authenticatedUser = decoded;\n this.authenticatedUser.accountName = decoded.winaccountname;\n this.authenticatedUser.admin = decoded.role === 'Admin';\n\n localStorage.setItem('token', token);\n\n this.getPhoto();\n\n this.authenticated = true;\n this.authenticatedChanged.emit(this.authenticated);\n\n this.authenticating = false;\n this.authenticatingChanged.emit(this.authenticating);\n }\n\n /**\n * @ignore\n */\n private getPhoto(): void {\n this.sharePointService.getPhotos()\n .subscribe(photos => {\n // The user may have been logged out by the time the photos came back\n if (!this.authenticatedUser || !this.authenticatedUser.employeeNumber) {\n return;\n }\n\n const photo = photos.find(pic => +pic.employeeNumber === +this.authenticatedUser.employeeNumber);\n\n if (photo) {\n this.authenticatedUser.photoUrl = photo.encodedAbsUrl;\n }\n });\n }\n\n /**\n * @ignore\n */\n private checkForExistingToken(): void {\n if (localStorage.getItem('token')) {\n this.validateUser(localStorage.getItem('token'));\n }\n }\n //#endregion\n}\n","import { Component, OnInit, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { AuthenticationService } from './../../services/authentication.service';\nimport { SharePointService } from './../../../sharepoint/services/sharepoint.service';\n\n@Component({\n selector: 'cp-login-form',\n templateUrl: './login-form.component.html',\n styleUrls: ['./login-form.component.css']\n})\nexport class LoginFormComponent implements OnInit {\n username: string;\n password: string;\n adminGroup: string;\n loginError: boolean;\n\n constructor(public dialogRef: MatDialogRef<LoginFormComponent>,\n private sharePointService: SharePointService,\n public authenticationService: AuthenticationService,\n @Inject(MAT_DIALOG_DATA) public data: any) {\n this.adminGroup = data.adminGroup;\n }\n\n ngOnInit(): void {\n this.authenticationService.authenticatedChanged\n .subscribe((authenticated: boolean) => {\n if (authenticated) {\n this.dialogRef.close();\n }\n });\n }\n\n authenticate() {\n if (!this.sharePointService || !this.username || !this.password) {\n return;\n }\n this.authenticationService.login(this.username, this.password, this.adminGroup);\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { LoginFormComponent } from './../login-form/login-form.component';\nimport { AuthenticationService } from './../../services/authentication.service';\nimport { ConfirmationDialogComponent } from './../../../dialog/components/confirmation-dialog/confirmation-dialog.component';\n\n@Component({\n selector: 'cp-login',\n templateUrl: './login.component.html',\n styleUrls: ['./login.component.css']\n})\nexport class LoginComponent {\n @Input() adminGroup: string;\n\n constructor(public dialog: MatDialog,\n public authenticationService: AuthenticationService) {\n }\n\n login(): void {\n this.dialog.open(LoginFormComponent, {\n data: { adminGroup: this.adminGroup }\n });\n }\n\n confirmLogout(): void {\n const dialogRef = this.dialog.open(ConfirmationDialogComponent, {\n data: { message: `Are you sure you want to logout?` }\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n this.authenticationService.logout();\n }\n });\n }\n}\n","//#region Imports\nimport { NgModule, ModuleWithProviders, Optional, SkipSelf } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\n// Angular Material\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\n// Modules\nimport { DialogModule } from './../dialog/dialog.module';\n\n// Services\nimport { AuthenticationServiceConfig } from './model/authentication.service.config';\nimport { AuthenticationService } from './services/authentication.service';\n\n// Components\nimport { LoginComponent } from './components/login/login.component';\nimport { LoginFormComponent } from './components/login-form/login-form.component';\n//#endregion\n\n//#region Exports\n// Model\nexport * from './model/authentication.service.config';\nexport * from './model/authentication-token';\n\n// Services\nexport * from './services/authentication.service';\n\n// Components\nexport * from './components/login/login.component';\nexport * from './components/login-form/login-form.component';\n//#endregion\n\n/**\n * Provides a component and a service that allows you to perform Active/Directory authentication\n */\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n MatButtonModule,\n MatCheckboxModule,\n MatDialogModule,\n MatInputModule,\n MatProgressBarModule,\n MatProgressSpinnerModule,\n MatTooltipModule,\n MatSelectModule,\n DialogModule\n ],\n declarations: [\n LoginComponent,\n LoginFormComponent\n ],\n exports: [\n LoginComponent,\n LoginFormComponent\n ],\n providers: [],\n entryComponents: [\n LoginFormComponent\n ]\n})\nexport class AuthenticationModule {\n static forRoot(authenticationConfig: AuthenticationServiceConfig): ModuleWithProviders<AuthenticationModule> {\n return {\n ngModule: AuthenticationModule,\n providers: [\n AuthenticationService,\n { provide: AuthenticationServiceConfig, useValue: authenticationConfig }\n ]\n };\n }\n\n constructor( @Optional() @SkipSelf() parentModule: AuthenticationModule) {\n if (parentModule) {\n throw new Error(\n 'AuthenticationModule is already loaded. Import it in the AppModule only');\n }\n }\n}\n","import { EmailSender } from './email-sender';\n\nexport class EmailServiceConfig {\n emailApiUrl: string;\n server: string;\n smtpPort: number;\n sender: EmailSender;\n}\n","//#region Imports\nimport { Injectable, Optional } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { EmailServiceConfig } from './../model/email.service.config';\nimport { Email } from './../model/email';\nimport { EmailDto } from './../model/email-dto';\n//#endregion\n\n@Injectable()\nexport class EmailService {\n private emailServiceConfig: EmailServiceConfig;\n\n constructor(@Optional() config: EmailServiceConfig,\n private http: HttpClient) {\n this.emailServiceConfig = config;\n }\n\n send(email: Email): Observable<Email> {\n const dto: EmailDto = {\n server: this.emailServiceConfig.server,\n smtpPort: this.emailServiceConfig.smtpPort,\n sender: this.emailServiceConfig.sender,\n subject: email.subject,\n content: email.content,\n recipients: email.recipients\n };\n\n return this.http.post<Email>(this.emailServiceConfig.emailApiUrl, dto);\n }\n}\n","//#region Imports\nimport { NgModule, ModuleWithProviders, Optional, SkipSelf } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n// Services\nimport { EmailServiceConfig } from './model/email.service.config';\nimport { EmailService } from './services/email.service';\n//#endregion\n\n//#region Exports\n// Model\nexport * from './model/email.service.config';\nexport * from './model/email';\n\n// Services\nexport * from './services/email.service';\n//#endregion\n\n@NgModule({\n imports: [ CommonModule ],\n declarations: [],\n exports: []\n})\nexport class EmailModule {\n static forRoot(emailConfig: EmailServiceConfig): ModuleWithProviders<EmailModule> {\n return {\n ngModule: EmailModule,\n providers: [\n EmailService,\n { provide: EmailServiceConfig, useValue: emailConfig }\n ]\n };\n }\n\n constructor( @Optional() @SkipSelf() parentModule: EmailModule) {\n if (parentModule) {\n throw new Error(\n 'EmailModule is already loaded. Import it in the AppModule only');\n }\n }\n}\n","export class EmployeeServiceConfig {\n employeeApiUrl: string;\n}\n","//#region Imports\nimport { Injectable, Optional } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\n\nimport { Employee } from './../model/employee';\nimport { EmployeeServiceConfig } from './../model/employee.service.config';\n//#endregion\n\n@Injectable()\nexport class EmployeeService {\n //#region Fields\n private employeeApiUrl: string;\n employees: Employee[];\n //#endregion\n\n //#region Lifecycle\n constructor( @Optional() config: EmployeeServiceConfig,\n private http: HttpClient) {\n this.employeeApiUrl = config.employeeApiUrl;\n }\n //#endregion\n\n //#region Utilities\n getEmployees(storeEmployees = false, includeDisabled = false): Observable<Employee[]> {\n // Do we already have employees stored locally?\n if (this.employees) {\n return of(this.employees);\n // return Observable.of(this.employees);\n }\n\n // Should we store employees locally for subsequent calls?\n if (storeEmployees) {\n this.http.get<Employee[]>(`${this.employeeApiUrl}/false/${includeDisabled}`)\n .subscribe(emps => this.employees = emps);\n }\n\n return this.http.get<Employee[]>(`${this.employeeApiUrl}/false/${includeDisabled}`);\n }\n\n getEmployee(sAMAccountName: string): Observable<Employee> {\n return this.http.get<Employee>(`${this.employeeApiUrl}/name/${sAMAccountName}`);\n }\n //#endregion\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Employee } from './../model/employee';\n\n@Pipe({\n name: 'departments'\n})\nexport class DepartmentsPipe implements PipeTransform {\n\n transform(employees: Employee[], args?: any): string[] {\n const departments: string[] = [];\n\n employees\n .filter(emp => emp.department)\n .forEach(emp => {\n if (departments.indexOf(emp.department) === -1) {\n departments.push(emp.department);\n }\n });\n\n return departments.sort();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Employee } from './../model/employee';\n\n@Pipe({\n name: 'employeeByDn'\n})\nexport class EmployeeByDnPipe implements PipeTransform {\n\n transform(employees: Employee[], dn: string): Employee {\n return employees\n .find(emp => emp.distinguishedName.toLowerCase() === dn.toLowerCase());\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Employee } from './../model/employee';\nimport { SharePointEmployeePicture } from './../../sharepoint/model/sharepoint-employee-picture';\n\n@Pipe({\n name: 'employeePhotoUrl'\n})\nexport class EmployeePhotoUrlPipe implements PipeTransform {\n transform(employee: Employee, photos: SharePointEmployeePicture[]): any {\n if (!photos) { return null; }\n\n // Try to match by employeeNumber, accountName, or title\n const photo = photos\n .find(pic =>\n (pic.employeeNumber && employee.employeeNumber && +pic.employeeNumber === +employee.employeeNumber) ||\n (pic.accountName && pic.accountName.toLowerCase() === employee.sAMAccountName.toLowerCase()) ||\n (pic.title && pic.title.toLowerCase() === employee.displayName.toLowerCase()));\n\n if (!photo) {\n console.log(`No photo match for ${employee.displayName}`);\n }\n\n return photo ? photo.encodedAbsUrl : null;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Employee } from './../model/employee';\n\n@Pipe({\n name: 'employeesWithPropertyValue'\n})\nexport class EmployeesWithPropertyValuePipe implements PipeTransform {\n\n transform(employees: Employee[], propertyName: string, propertyValue: any): Employee[] {\n return employees\n .filter(emp => emp[propertyName] && emp[propertyName] === propertyValue);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Employee } from './../model/employee';\n\n@Pipe({\n name: 'filterEmployees'\n})\nexport class FilterEmployeesPipe implements PipeTransform {\n transform(employees: Employee[], filter: string): Employee[] {\n return filter ?\n employees\n .filter(emp =>\n emp.displayName.toLowerCase().indexOf(filter.toLowerCase()) !== -1 ||\n (emp.department && emp.department.toLowerCase().indexOf(filter.toLowerCase()) !== -1) ||\n (emp.title && emp.title.toLowerCase().indexOf(filter.toLowerCase()) !== -1) ||\n emp.sAMAccountName.toLowerCase().indexOf(filter.toLowerCase()) !== -1\n ) :\n employees;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Employee } from './../model/employee';\n\n@Pipe({\n name: 'isMemberOf'\n})\nexport class IsMemberOfPipe implements PipeTransform {\n\n transform(employee: Employee, groupName: string): boolean {\n return employee.memberOf &&\n (employee.memberOf.find(m => m.toLowerCase().indexOf(groupName.toLowerCase()) !== -1) !== undefined);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Employee } from './../model/employee';\n\n@Pipe({\n name: 'sortEmployees'\n})\nexport class SortEmployeesPipe implements PipeTransform {\n transform(employees: Employee[], sortBy?: string, dataType?: string, reverse?: boolean): Employee[] {\n return this.getSorted(employees,\n sortBy ? sortBy : 'displayName',\n dataType ? dataType : 'string',\n reverse ? reverse : false);\n }\n\n private getSorted(employees: Employee[], sortBy: string, dataType: string, reverse: boolean): Employee[] {\n const sorted = employees\n .sort((a, b) => {\n let valA, valB: any;\n\n switch (dataType.toLowerCase()) {\n case 'string':\n valA = a[sortBy] ? a[sortBy].toString().toLowerCase() : null;\n valB = b[sortBy] ? b[sortBy].toString().toLowerCase() : null;\n break;\n case 'number':\n valA = a[sortBy] ? +a[sortBy] : null;\n valB = b[sortBy] ? +b[sortBy] : null;\n break;\n case 'date':\n valA = a[sortBy] ? a[sortBy] as Date : null;\n valB = b[sortBy] ? b[sortBy] as Date : null;\n break;\n }\n\n if (valA < valB) { return -1; }\n if (valA > valB) { return 1; }\n return 0;\n });\n\n return reverse ? sorted.reverse() : sorted;\n }\n}\n","//#region Imports\nimport { NgModule, ModuleWithProviders, Optional, SkipSelf } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n// Services\nimport { EmployeeServiceConfig } from './model/employee.service.config';\nimport { EmployeeService } from './services/employee.service';\n\n// Pipes\nimport { DepartmentsPipe } from './pipes/departments.pipe';\nimport { EmployeeByDnPipe } from './pipes/employee-by-dn.pipe';\nimport { EmployeePhotoUrlPipe } from './pipes/employee-photo-url.pipe';\nimport { EmployeesWithPropertyValuePipe } from './pipes/employees-with-property-value.pipe';\nimport { FilterEmployeesPipe } from './pipes/filter-employees.pipe';\nimport { IsMemberOfPipe } from './pipes/is-member-of.pipe';\nimport { SortEmployeesPipe } from './pipes/sort-employees.pipe';\n//#endregion\n\n//#region Exports\n// Model\nexport * from './model/employee.service.config';\nexport * from './model/employee';\n\n// Services\nexport * from './services/employee.service';\n\n// Pipes\nexport * from './pipes/departments.pipe';\nexport * from './pipes/employee-by-dn.pipe';\nexport * from './pipes/employee-photo-url.pipe';\nexport * from './pipes/employees-with-property-value.pipe';\nexport * from './pipes/filter-employees.pipe';\nexport * from './pipes/is-member-of.pipe';\nexport * from './pipes/sort-employees.pipe';\n//#endregion\n\n@NgModule({\n imports: [CommonModule],\n declarations: [\n DepartmentsPipe,\n EmployeeByDnPipe,\n EmployeesWithPropertyValuePipe,\n FilterEmployeesPipe,\n IsMemberOfPipe,\n EmployeePhotoUrlPipe,\n SortEmployeesPipe\n ],\n exports: [\n DepartmentsPipe,\n EmployeeByDnPipe,\n EmployeesWithPropertyValuePipe,\n FilterEmployeesPipe,\n IsMemberOfPipe,\n EmployeePhotoUrlPipe,\n SortEmployeesPipe\n ]\n})\nexport class EmployeeModule {\n static forRoot(employeeConfig: EmployeeServiceConfig): ModuleWithProviders<EmployeeModule> {\n return {\n ngModule: EmployeeModule,\n providers: [\n EmployeeService,\n { provide: EmployeeServiceConfig, useValue: employeeConfig }\n ]\n };\n }\n\n constructor( @Optional() @SkipSelf() parentModule: EmployeeModule) {\n if (parentModule) {\n throw new Error(\n 'EmployeeModule is already loaded. Import it in the AppModule only');\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SharePointPicture } from './../model/sharepoint-picture';\n\n@Pipe({\n name: 'sharePointPhotoUrl'\n})\nexport class SharePointPhotoUrlPipe implements PipeTransform {\n transform(photo: SharePointPicture): string {\n return photo.encodedAbsUrl;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'sharePointUrl'\n})\nexport class SharePointUrlPipe implements PipeTransform {\n\n transform(url: string): string {\n return url !== null ? url.split(',')[0] : null;\n }\n}\n","//#region Imports\nimport { NgModule, ModuleWithProviders, Optional, SkipSelf } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n// Services\nimport { SharePointServiceConfig } from './model/sharepoint.service.config';\nimport { SharePointService } from './services/sharepoint.service';\n\n// Pipes\nimport { SharePointPhotoUrlPipe } from './pipes/sharepoint-photo-url.pipe';\nimport { SharePointUrlPipe } from './pipes/sharepoint-url.pipe';\n//#endregion\n\n//#region Exports\n// Model\nexport * from './model/sharepoint-calendar-event';\nexport * from './model/sharepoint-customer-visit';\nexport * from './model/sharepoint-employee-picture';\n// export * from './model/sharepoint-list';\nexport * from './model/sharepoint-list-item';\n// export * from './model/sharepoint-person';\nexport * from './model/sharepoint-user';\nexport * from './model/sharepoint-picture';\nexport * from './model/sharepoint-list-items-request';\nexport * from './model/sharepoint-user-request';\nexport * from './model/sharepoint-uri-request';\nexport * from './model/sharepoint.service.config';\n\n// Services\nexport * from './services/sharepoint.service';\n\n// Pipes\nexport * from './pipes/sharepoint-photo-url.pipe';\nexport * from './pipes/sharepoint-url.pipe';\n//#endregion\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [\n SharePointPhotoUrlPipe,\n SharePointUrlPipe\n ],\n exports: [\n SharePointPhotoUrlPipe,\n SharePointUrlPipe\n ]\n})\nexport class SharePointModule {\n static forRoot(sharePointConfig: SharePointServiceConfig): ModuleWithProviders<SharePointModule> {\n return {\n ngModule: SharePointModule,\n providers: [\n SharePointService,\n { provide: SharePointServiceConfig, useValue: sharePointConfig }\n ]\n };\n }\n\n constructor( @Optional() @SkipSelf() parentModule: SharePointModule) {\n if (parentModule) {\n throw new Error(\n 'SharePointModule is already loaded. Import it in the AppModule only');\n }\n }\n}\n","export class UploadServiceConfig {\n uploadApiUrl: string;\n uploadPath?: string;\n dbAppId?: string;\n externalReferenceId?: string;\n comment?: string;\n\n // UI configuration\n uploadButtonText?: string;\n uploadDialogTitle?: string;\n uploadDialogAddFilesButtonText?: string;\n uploadDialogCancelButtonText?: string;\n uploadDialogUploadButtonText?: string;\n uploadDialogFinishButtonText?: string;\n}\n","import { Injectable, Optional } from '@angular/core';\nimport { HttpClient, HttpRequest, HttpEventType, HttpResponse, HttpHeaders } from '@angular/common/http';\nimport { Subject , Observable } from 'rxjs';\nimport { UploadServiceConfig } from './../model/upload.service.config';\nimport { FileUploadRequest } from './../model/file-upload-request';\nimport { DatabaseFileInfo } from './../model/database-file-info';\nimport { FilesystemFileInfo } from './../model/filesystem-file-info';\n\n// https://malcoded.com/posts/angular-file-upload-component-with-express\n\n@Injectable()\nexport class UploadService {\n public uploadApiUrl: string;\n public uploadPath: string;\n public dbAppId: string;\n public externalReferenceId: string;\n public comment: string;\n\n // UI configuration\n public uploadButtonText: string;\n public uploadDialogTitle: string;\n public uploadDialogAddFilesButtonText: string;\n public uploadDialogCancelButtonText: string;\n public uploadDialogUploadButtonText: string;\n public uploadDialogFinishButtonText: string;\n\n constructor(private http: HttpClient,\n @Optional() config: UploadServiceConfig) {\n this.uploadApiUrl = config.uploadApiUrl;\n this.uploadPath = config.uploadPath || '';\n this.dbAppId = config.dbAppId || '';\n this.externalReferenceId = config.externalReferenceId || '';\n this.comment = config.comment || '';\n\n // UI configuration\n this.uploadButtonText = config.uploadButtonText;\n this.uploadDialogTitle = config.uploadDialogTitle;\n this.uploadDialogAddFilesButtonText = config.uploadDialogAddFilesButtonText;\n this.uploadDialogCancelButtonText = config.uploadDialogCancelButtonText;\n this.uploadDialogUploadButtonText = config.uploadDialogUploadButtonText;\n this.uploadDialogFinishButtonText = config.uploadDialogFinishButtonText;\n }\n\n public upload(files: Set<File>): {[key: string]: Observable<number>} {\n // this will be the our resulting map\n const status = {};\n\n files.forEach(file => {\n // create a new multipart-form for every file\n const formData: FormData = new FormData();\n formData.append('file', file, file.name);\n\n // create a http-post request and pass the form\n // tell it to report the upload progress\n\n // A 'Destination' header is used to optionally configure the file upload destination (filesystem)\n // A 'DbAppId' header is used to configure the unique identifier of database uploads\n const req = new HttpRequest('POST', this.uploadApiUrl, formData, {\n reportProgress: true,\n responseType: 'blob',\n headers: new HttpHeaders()\n .set('Destination', this.uploadPath)\n .set('DbAppId', this.dbAppId)\n .set('ExternalReferenceId', this.externalReferenceId)\n .set('Comment', this.comment)\n /*headers: this.uploadPath ?\n new HttpHeaders({ 'Destination': this.uploadPath }) :\n this.dbAppId ?\n new HttpHeaders({ 'DbAppId': this.dbAppId }) :\n null*/\n });\n\n // create a new progress-subject for every file\n const progress = new Subject<number>();\n\n // send the http-request and subscribe for progress-updates\n this.http.request(req).subscribe(event => {\n if (event.type === HttpEventType.UploadProgress) {\n\n // calculate the progress percentage\n const percentDone = Math.round(100 * event.loaded / event.total);\n\n // pass the percentage into the progress-stream\n progress.next(percentDone);\n } else if (event instanceof HttpResponse) {\n\n // Close the progress-stream if we get an answer form the API\n // The upload is complete\n progress.complete();\n }\n });\n\n // Save every progress-observable in a map of all observables\n status[file.name] = {\n progress: progress.asObservable()\n };\n });\n\n // return the map of progress.observables\n return status;\n }\n\n public exists(fileName: string): Observable<boolean> {\n const query = this.uploadApiUrl.toLowerCase().indexOf('filesystem') === -1 ?\n { name: fileName, dbAppId: this.dbAppId } :\n { name: fileName, destination: this.uploadPath };\n\n return this.http.post<boolean>(`${this.uploadApiUrl}/exists`, query);\n }\n\n public download(request: FileUploadRequest): Observable<Blob> {\n return this.http.post(`${this.uploadApiUrl}/stream`, request, { responseType: 'blob' });\n }\n\n public getUploadInfo(request: FileUploadRequest):\n Observable<DatabaseFileInfo | DatabaseFileInfo[] | FilesystemFileInfo | FilesystemFileInfo[]> {\n return this.http.post<DatabaseFileInfo | DatabaseFileInfo[] | FilesystemFileInfo | FilesystemFileInfo[]>\n (`${this.uploadApiUrl}/info`, request);\n }\n}\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { UploadService } from './../../services/upload.service';\nimport { forkJoin } from 'rxjs';\n\n@Component({\n selector: 'cp-upload-dialog',\n templateUrl: './upload-dialog.component.html',\n styleUrls: ['./upload-dialog.component.css']\n})\nexport class UploadDialogComponent implements OnInit {\n @ViewChild('file', { static: true }) file;\n public files: Set<File> = new Set();\n existingFileConflict: string;\n\n // State\n progress;\n canBeClosed = true;\n primaryButtonText: string;\n showCancelButton = true;\n uploading = false;\n uploadSuccessful = false;\n\n // UI configuration\n uploadDialogTitle: string;\n uploadDialogAddFilesButtonText: string;\n uploadDialogCancelButtonText: string;\n uploadDialogUploadButtonText: string;\n uploadDialogFinishButtonText: string;\n\n constructor(public dialogRef: MatDialogRef<UploadDialogComponent>, public uploadService: UploadService) { }\n\n ngOnInit() {\n this.uploadDialogTitle = this.uploadService.uploadDialogTitle ?\n this.uploadService.uploadDialogTitle :\n 'Upload Files';\n\n this.uploadDialogAddFilesButtonText = this.uploadService.uploadDialogAddFilesButtonText ?\n this.uploadService.uploadDialogAddFilesButtonText :\n 'Add Files';\n\n this.uploadDialogCancelButtonText = this.uploadService.uploadDialogCancelButtonText ?\n this.uploadService.uploadDialogCancelButtonText :\n 'Cancel';\n\n this.uploadDialogUploadButtonText = this.uploadService.uploadDialogUploadButtonText ?\n this.uploadService.uploadDialogUploadButtonText :\n 'Upload';\n\n this.uploadDialogFinishButtonText = this.uploadService.uploadDialogFinishButtonText ?\n this.uploadService.uploadDialogFinishButtonText :\n 'Finish';\n\n this.primaryButtonText = this.uploadDialogUploadButtonText;\n }\n\n addFiles() {\n this.file.nativeElement.click();\n }\n\n onFilesAdded() {\n const files: { [key: string]: File } = this.file.nativeElement.files;\n for (const key in files) {\n if (!isNaN(parseInt(key))) {\n // See if the file already exists\n this.uploadService.exists(files[key].name)\n .subscribe(exists => {\n if (exists) {\n this.existingFileConflict = files[key].name;\n }\n\n if (!exists) {\n this.files.add(files[key]);\n }\n });\n }\n }\n }\n\n closeDialog() {\n // if everything was uploaded already, just close the dialog\n if (this.uploadSuccessful) {\n return this.dialogRef.close();\n }\n\n // set the component state to \"uploading\"\n this.uploading = true;\n\n // start the upload and save the progress map\n this.progress = this.uploadService.upload(this.files);\n\n // convert the progress map into an array\n const allProgressObservables = [];\n\n for (let key in this.progress) {\n allProgressObservables.push(this.progress[key].progress);\n }\n\n // Adjust the state variables\n\n // The OK-button should have the text \"Finish\" now\n this.primaryButtonText = this.uploadDialogFinishButtonText;\n\n // The dialog should not be closed while uploading\n this.canBeClosed = false;\n this.dialogRef.disableClose = true;\n\n // Hide the cancel-button\n this.showCancelButton = false;\n\n // When all progress-observables are completed...\n forkJoin(allProgressObservables).subscribe(end => {\n // ... the dialog can be closed again...\n this.canBeClosed = true;\n this.dialogRef.disableClose = false;\n\n // ... the upload was successful...\n this.uploadSuccessful = true;\n\n // ... and the component is no longer uploading\n this.uploading = false;\n });\n }\n}\n","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { UploadDialogComponent } from './../upload-dialog/upload-dialog.component';\nimport { UploadService } from './../../services/upload.service';\n\n@Component({\n selector: 'cp-upload',\n template: '<button mat-raised-button (click)=\"openUploadDialog()\">{{ uploadButtonText }}</button>'\n})\nexport class UploadComponent implements OnInit {\n @Output() dialogClosed = new EventEmitter();\n uploadButtonText: string;\n\n constructor(public dialog: MatDialog, public uploadService: UploadService) { }\n\n ngOnInit(): void {\n this.uploadButtonText = this.uploadService.uploadButtonText ?\n this.uploadService.uploadButtonText :\n 'Upload';\n }\n\n public openUploadDialog() {\n this.dialog.open(UploadDialogComponent, { width: '50%' })\n .afterClosed().subscribe(() => this.dialogClosed.emit());\n }\n}\n","//#region Imports\nimport { CommonModule } from '@angular/common';\nimport { NgModule, ModuleWithProviders, Optional, SkipSelf } from '@angular/core';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations'\nimport { HttpClientModule } from '@angular/common/http';\n\n// Angular Material\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatListModule } from '@angular/material/list';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\n\n// Services\nimport { UploadServiceConfig } from './model/upload.service.config';\nimport { UploadService } from './services/upload.service';\n\n// Components\nimport { UploadDialogComponent } from './components/upload-dialog/upload-dialog.component';\nimport { UploadComponent } from './components/upload/upload.component';\n//#endregion\n\n//#region Exports\n// Model\nexport * from './model/database-file-info';\nexport * from './model/file-upload-request';\nexport * from './model/filesystem-file-info';\nexport * from './model/upload.service.config';\n\n// Services\nexport * from './services/upload.service';\n\n// Components\nexport * from './components/upload-dialog/upload-dialog.component';\nexport * from './components/upload/upload.component';\n//#endregion\n\n@NgModule({\n imports: [\n CommonModule,\n BrowserAnimationsModule,\n HttpClientModule,\n\n MatButtonModule,\n MatDialogModule,\n MatListModule,\n MatProgressBarModule],\n declarations: [\n UploadComponent,\n UploadDialogComponent\n ],\n exports: [\n UploadComponent,\n UploadDialogComponent\n ],\n entryComponents: [\n UploadDialogComponent\n ]\n })\n export class UploadModule {\n static forRoot(uploadConfig: UploadServiceConfig): ModuleWithProviders<UploadModule> {\n return {\n ngModule: UploadModule,\n providers: [\n UploadService,\n { provide: UploadServiceConfig, useValue: uploadConfig }\n ]\n };\n }\n\n constructor(@Optional() @SkipSelf() parentModule: UploadModule) {\n if (parentModule) {\n throw new Error(\n 'UploadModule is already loaded. Import it in the AppModule only');\n }\n }\n }\n","// This pipe whitelists URLs so that they aren't prefixed with 'unsafe:' when they render in the DOM\n\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\n\n@Pipe({\n name: 'safeUrl'\n})\nexport class SafeUrlPipe implements PipeTransform {\n\n constructor(private domSanitizer: DomSanitizer) { }\n\n transform(value: string): SafeUrl {\n return this.domSanitizer.bypassSecurityTrustUrl(value);\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'uriScheme',\n pure: false\n})\nexport class UriSchemePipe implements PipeTransform {\n // https://docs.microsoft.com/en-us/office/client-developer/office-uri-schemes\n\n transform(value: string): string {\n if (!localStorage.getItem('useUriScheme')) { return value; }\n\n const urlSplit = value.split('.');\n const extension = urlSplit[urlSplit.length - 1];\n\n if (!extension) { return value; }\n\n const command = this.command(extension);\n const app = this.app(extension);\n\n return `ms-${app}:${command}|u|${value}`;\n }\n\n private app(extension: string): string {\n switch (extension.toLowerCase()) {\n // documents\n case 'doc': case 'docx':\n case 'docm': case 'docb':\n case 'dot': case 'dotx': case 'dotm': // templates\n return 'word';\n case 'xls': case 'xlsx':\n case 'xlm': case 'xlsm': case 'xlsb': case 'xlw':\n case 'xlt': case 'xltx': case 'xltm': // templates\n return 'excel';\n case 'ppt': case 'pptx':\n case 'pps': case 'ppsx': case 'pptm': case 'ppsm':\n case 'sldx': case 'sldm':\n case 'pot': case 'potx': case 'potm': // templates\n return 'powerpoint';\n case 'vsd': case 'vsdx':\n case 'vst': case 'vstx': // templates\n return 'visio';\n case 'mdb': case 'accdb': case 'accde': case 'accdr':\n case 'accdt': // templates\n return 'access';\n case 'mpp': case 'mppx':\n case 'mpt': // templates\n return 'project';\n case 'pub':\n return 'publisher';\n case 'xsn':\n return 'infopath';\n }\n }\n\n private command(extension: string): string {\n switch (extension.toLowerCase()) {\n case 'dot': case 'dotx': case 'dotm':\n case 'xlt': case 'xltx': case 'xltm':\n case 'pot': case 'potx': case 'potm':\n case 'vst': case 'vstx':\n case 'accdt':\n case 'mpt':\n return 'nft'; // new from template\n default:\n const openMode = 'v'; // for view, or 'e' or edit\n return `of${openMode}`; // default: open file as view/edit\n }\n }\n}\n","//#region Imports\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\n// Pipes\nimport { SafeUrlPipe } from './pipes/safe-url.pipe';\nimport { UriSchemePipe } from './pipes/uri-scheme.pipe';\n//#endregion\n\n//#region Exports\n// Pipes\nexport * from './pipes/safe-url.pipe';\nexport * from './pipes/uri-scheme.pipe';\n//#endregion\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [\n SafeUrlPipe,\n UriSchemePipe\n ],\n exports: [\n SafeUrlPipe,\n UriSchemePipe\n ],\n entryComponents: [ ]\n})\nexport class UrlModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n\nexport {DialogComponent as ɵa} from './src/dialog/components/_dialog/dialog.component';"],"names":["ConfirmationDialogMode","EventEmitter","Component","Input","Output","MatDialogRef","Inject","MAT_DIALOG_DATA","NgModule","CommonModule","FormsModule","MatButtonModule","MatCheckboxModule","MatInputModule","MatDialogModule","of","Injectable","Optional","HttpClient","JwtHelperService","MatDialog","MatProgressBarModule","MatProgressSpinnerModule","MatTooltipModule","MatSelectModule","SkipSelf","Pipe","HttpRequest","HttpHeaders","Subject","HttpEventType","HttpResponse","forkJoin","ViewChild","BrowserAnimationsModule","HttpClientModule","MatListModule","DomSanitizer"],"mappings":";;;;;;IAAA,WAAY,sBAAsB;QAC9B,2EAAQ,CAAA;QACR,qEAAK,CAAA;QACL,6EAAS,CAAA;QACT,uEAAM,CAAA;IACV,CAAC,EALWA,8BAAsB,KAAtBA,8BAAsB;;;QCGlC;YAQc,WAAM,GAAG,IAAIC,iBAAY,EAAO,CAAC;YAE3C,2BAAsB,GAAGD,8BAAsB,CAAC;YAChD,SAAI,GAAGA,8BAAsB,CAAC,QAAQ,CAAC;YAKvC,wBAAmB,GAAa,IAAI,CAAC;SA+DxC;QA1DG,kCAAQ,GAAR;YACI,IAAI,IAAI,CAAC,IAAI,EAAE;gBACX,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;gBACrC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;gBACzC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC;gBACzD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC;gBACjD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;gBACzC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,IAAIA,8BAAsB,CAAC,QAAQ,CAAC;gBAC9D,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC;aAC5D;SACJ;QAED,+BAAK,GAAL;YACI,IAAI,IAAS,CAAC;YAEd,QAAQ,IAAI,CAAC,UAAU;gBACnB,KAAK,SAAS;oBACV,IAAI,GAAG,IAAI,CAAC,eAAe;wBACvB;4BACI,QAAQ,EAAE,IAAI,CAAC,aAAa,IAAI,KAAK;yBACxC;wBACD,IAAI,CAAC;oBACT,MAAM;gBACV,KAAK,OAAO;oBACR,IAAI,GAAG,IAAI,CAAC,eAAe;wBACvB;4BACI,QAAQ,EAAE,IAAI,CAAC,SAAS;4BACxB,QAAQ,EAAE,IAAI,CAAC,aAAa,IAAI,KAAK;yBACxC;wBACD,IAAI,CAAC,SAAS,CAAC;oBACnB,MAAM;gBACV,KAAK,cAAc;oBACf,IAAI,GAAG,IAAI,CAAC,eAAe;wBACvB;4BACI,QAAQ,EAAE,IAAI;4BACd,QAAQ,EAAE,IAAI,CAAC,aAAa,IAAI,KAAK;yBACxC;wBACD,IAAI,CAAC;oBACT,MAAM;aACb;YAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC1B;QAED,gCAAM,GAAN;YACI,IAAI,IAAS,CAAC;YAEd,IAAI,IAAI,CAAC,UAAU,KAAK,cAAc,EAAE;gBACpC,IAAI,GAAG,IAAI,CAAC,eAAe;oBACvB;wBACI,QAAQ,EAAE,KAAK;wBACf,QAAQ,EAAE,IAAI,CAAC,aAAa,IAAI,KAAK;qBACxC;oBACD,KAAK,CAAC;aACb;YAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC1B;;;;gBA9EJE,cAAS,SAAC;oBACP,QAAQ,EAAE,WAAW;oBACrB,shDAAsC;;iBAEzC;;;6BAEIC,UAAK;uBACLA,UAAK;yBACLC,WAAM;;;;QCFT,qCAAmB,SAAoD,EACrC,IAAS;YADxB,cAAS,GAAT,SAAS,CAA2C;YACrC,SAAI,GAAJ,IAAI,CAAK;SAC1C;;;;gBARFF,cAAS,SAAC;oBACT,QAAQ,EAAE,wBAAwB;oBAClC,mIAAmD;iBACpD;;;gBALQG,mBAAY;gDAShBC,WAAM,SAACC,sBAAe;;;;QCFvB,8BAAmB,SAA6C,EAC5B,IAAS;YAD1B,cAAS,GAAT,SAAS,CAAoC;YAC5B,SAAI,GAAJ,IAAI,CAAK;SAC5C;;;;gBAPJL,cAAS,SAAC;oBACP,QAAQ,EAAE,iBAAiB;oBAC3B,4HAA4C;iBAC/C;;;gBALQG,mBAAY;gDAQZC,WAAM,SAACC,sBAAe;;;;QCD3B,gCAAmB,SAA+C,EAC9B,IAAS;YAD1B,cAAS,GAAT,SAAS,CAAsC;YAC9B,SAAI,GAAJ,IAAI,CAAK;SAC5C;;;;gBAPJL,cAAS,SAAC;oBACP,QAAQ,EAAE,mBAAmB;oBAC7B,8HAA8C;iBACjD;;;gBALQG,mBAAY;gDAQZC,WAAM,SAACC,sBAAe;;;ICT/B;IA0BA;;QA4BA;;;;;gBA1BCC,aAAQ,SAAC;oBACN,OAAO,EAAE;wBACLC,mBAAY;wBACZC,iBAAW;wBACXC,sBAAe;wBACfC,0BAAiB;wBACjBC,oBAAc;wBACdC,sBAAe;qBAClB;oBACD,YAAY,EAAE;wBACV,eAAe;wBACf,2BAA2B;wBAC3B,oBAAoB;wBACpB,sBAAsB;qBACzB;oBACD,OAAO,EAAE;wBACL,2BAA2B;wBAC3B,oBAAoB;wBACpB,sBAAsB;qBACzB;oBACD,eAAe,EAAE;wBACb,2BAA2B;wBAC3B,oBAAoB;wBACpB,sBAAsB;qBACzB;iBACJ;;;;QCrDD;SAEC;0CAAA;KAAA;;;QCFD;SAOC;sCAAA;KAAA;;ICPD;IAcA;;;QAUE,2BAAgC,MAA+B,EACrD,IAAgB;YADM,WAAM,GAAN,MAAM,CAAyB;YACrD,SAAI,GAAJ,IAAI,CAAY;SAAK;;QAG/B,wCAAY,GAAZ,UAAa,OAAmC;YAC9C,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;gBAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;aAAE;YACnE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;gBAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;aAAE;YAEnE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAA0B,IAAI,CAAC,MAAM,CAAC,gBAAgB,eAAY,EAAE,OAAO,CAAC,CAAC;SACnG;;;;QAMD,qCAAS,GAAT,UAAU,OAA8B,EAAE,WAAqB;YAA/D,iBAgBC;;YAdC,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,OAAOC,OAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACvB;YAED,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;gBAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;aAAE;YACnE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;gBAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;aAAE;;YAGnE,IAAI,WAAW,EAAE;gBACf,IAAI,CAAC,IAAI,CAAC,IAAI,CAAsB,IAAI,CAAC,MAAM,CAAC,gBAAgB,WAAQ,EAAE,OAAO,CAAC;qBAC/E,SAAS,CAAC,UAAA,KAAK,IAAI,OAAA,KAAI,CAAC,KAAK,GAAG,KAAK,GAAA,CAAC,CAAC;aAC3C;YAED,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAsB,IAAI,CAAC,MAAM,CAAC,gBAAgB,WAAQ,EAAE,OAAO,CAAC,CAAC;SAC3F;QAED,qCAAS,GAAT,UAAU,WAAqB;YAA/B,iBAqBC;;YAnBC,IAAI,IAAI,CAAC,MAAM,EAAE;gBACf,OAAOA,OAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACxB;YAED,IAAM,OAAO,GAA+B;gBAC1C,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB;gBACnC,IAAI,EAAK,IAAI,CAAC,MAAM,CAAC,mBAAmB,SAAI,IAAI,CAAC,MAAM,CAAC,iBAAmB;gBAC3E,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAC9B,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAC9B,8BAA8B,EAAE,CAAE,eAAe,CAAE;aACpD,CAAC;;YAGF,IAAI,WAAW,EAAE;gBACf,IAAI,CAAC,IAAI,CAAC,IAAI,CAAiC,IAAI,CAAC,MAAM,CAAC,gBAAgB,eAAY,EAAE,OAAO,CAAC;qBAC9F,SAAS,CAAC,UAAA,MAAM,IAAI,OAAA,KAAI,CAAC,MAAM,GAAG,MAAM,GAAA,CAAC,CAAC;aAC9C;YAED,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAiC,IAAI,CAAC,MAAM,CAAC,gBAAgB,eAAY,EAAE,OAAO,CAAC,CAAC;SAC1G;;;;gBA9DFC,eAAU;;;gBAXF,uBAAuB,uBAmBjBC,aAAQ;gBAtBdC,eAAU;;;ICFnB;IAQA;IAEA;;;;;;;;;QA2CE,+BAAyB,MAAmC,EAClD,IAAgB,EAChB,iBAAoC;YADpC,SAAI,GAAJ,IAAI,CAAY;YAChB,sBAAiB,GAAjB,iBAAiB,CAAmB;YAlCpC,yBAAoB,GAAG,IAAIjB,iBAAY,EAAW,CAAC;YACnD,0BAAqB,GAAG,IAAIA,iBAAY,EAAW,CAAC;;;;YAK9D,mBAAc,GAAG,KAAK,CAAC;;;;YAKvB,kBAAa,GAAG,KAAK,CAAC;YAyBpB,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;YACxD,IAAI,CAAC,qBAAqB,EAAE,CAAC;SAC9B;;;;;;;;;;QAWD,qCAAK,GAAL,UAAM,QAAgB,EAAE,QAAgB,EAAE,UAAmB;YAA7D,iBAiBC;YAhBC,IAAM,OAAO,GAAG;gBACd,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,QAAQ;gBAClB,UAAU,EAAE,UAAU;aACvB,CAAC;YAEF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAErD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAC,CAAC;;iBAEzF,SAAS,CAAC,UAAA,KAAK,IAAI,OAAA,KAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAA,EAC5C,UAAA,GAAG;gBACD,KAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,KAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAI,CAAC,cAAc,CAAC,CAAC;aACtD,CAAC,CAAC;SACN;;;;QAKD,sCAAM,GAAN;YACE,IAAI,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBACjC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;aAClC;YAED,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAC9B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACvC;;;;QAKO,4CAAY,GAAZ,UAAa,KAAa;YAChC,IAAI,CAAC,KAAK,EAAE;gBAAE,OAAO;aAAE;YAEvB,IAAM,SAAS,GAAG,IAAIkB,2BAAgB,EAAE,CAAC;YACzC,IAAM,OAAO,GAAG,SAAS,CAAC,WAAW,CAAC,KAAK,CAAwB,CAAC;YAEpE,IAAI,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;gBACnC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACd,OAAO;aACR;YAED,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC;YACjC,IAAI,CAAC,iBAAiB,CAAC,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC;YAC5D,IAAI,CAAC,iBAAiB,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC;YAExD,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAErC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAEhB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAEnD,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAC5B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SACtD;;;;QAKO,wCAAQ,GAAR;YAAA,iBAcP;YAbC,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE;iBAC/B,SAAS,CAAC,UAAA,MAAM;;gBAEf,IAAI,CAAC,KAAI,CAAC,iBAAiB,IAAI,CAAC,KAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE;oBACrE,OAAO;iBACR;gBAED,IAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,UAAA,GAAG,IAAI,OAAA,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,KAAI,CAAC,iBAAiB,CAAC,cAAc,GAAA,CAAC,CAAC;gBAEjG,IAAI,KAAK,EAAE;oBACT,KAAI,CAAC,iBAAiB,CAAC,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC;iBACvD;aACF,CAAC,CAAC;SACN;;;;QAKO,qDAAqB,GAArB;YACN,IAAI,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBACjC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;aAClD;SACF;;;;gBAhJFH,eAAU;;;gBAPF,2BAA2B,uBA+CpBC,aAAQ;gBAnDfC,eAAU;gBAKV,iBAAiB;;;uCAcvBd,WAAM;wCACNA,WAAM;;;;QCNP,4BAAmB,SAA2C,EACpD,iBAAoC,EACrC,qBAA4C,EACnB,IAAS;YAHxB,cAAS,GAAT,SAAS,CAAkC;YACpD,sBAAiB,GAAjB,iBAAiB,CAAmB;YACrC,0BAAqB,GAArB,qBAAqB,CAAuB;YACnB,SAAI,GAAJ,IAAI,CAAK;YACvC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;SACrC;QAED,qCAAQ,GAAR;YAAA,iBAOC;YANC,IAAI,CAAC,qBAAqB,CAAC,oBAAoB;iBAC5C,SAAS,CAAC,UAAC,aAAsB;gBAChC,IAAI,aAAa,EAAE;oBACjB,KAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;iBACxB;aACF,CAAC,CAAC;SACN;QAED,yCAAY,GAAZ;YACE,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAC/D,OAAO;aACR;YACD,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;SACjF;;;;gBAhCFF,cAAS,SAAC;oBACT,QAAQ,EAAE,eAAe;oBACzB,20CAA0C;;iBAE3C;;;gBARQG,mBAAY;gBAEZ,iBAAiB;gBADjB,qBAAqB;gDAiBzBC,WAAM,SAACC,sBAAe;;;;QCLzB,wBAAmB,MAAiB,EAC3B,qBAA4C;YADlC,WAAM,GAAN,MAAM,CAAW;YAC3B,0BAAqB,GAArB,qBAAqB,CAAuB;SACpD;QAED,8BAAK,GAAL;YACE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE;gBACnC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;aACtC,CAAC,CAAC;SACJ;QAED,sCAAa,GAAb;YAAA,iBAUC;YATC,IAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE;gBAC9D,IAAI,EAAE,EAAE,OAAO,EAAE,kCAAkC,EAAE;aACtD,CAAC,CAAC;YAEH,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,UAAA,MAAM;gBACtC,IAAI,MAAM,EAAE;oBACV,KAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,CAAC;iBACrC;aACF,CAAC,CAAC;SACJ;;;;gBA5BFL,cAAS,SAAC;oBACT,QAAQ,EAAE,UAAU;oBACpB,q8BAAqC;;iBAEtC;;;gBATQkB,gBAAS;gBAET,qBAAqB;;;6BAS3BjB,UAAK;;;ICZR;IAsCA;IAEA;;;;QAyCE,8BAAqC,YAAkC;YACrE,IAAI,YAAY,EAAE;gBAChB,MAAM,IAAI,KAAK,CACb,yEAAyE,CAAC,CAAC;aAC9E;SACF;QAfM,4BAAO,GAAd,UAAe,oBAAiD;YAC9D,OAAO;gBACL,QAAQ,EAAE,oBAAoB;gBAC9B,SAAS,EAAE;oBACT,qBAAqB;oBACrB,EAAE,OAAO,EAAE,2BAA2B,EAAE,QAAQ,EAAE,oBAAoB,EAAE;iBACzE;aACF,CAAC;SACH;;;;gBApCFK,aAAQ,SAAC;oBACR,OAAO,EAAE;wBACPC,mBAAY;wBACZC,iBAAW;wBACXC,sBAAe;wBACfC,0BAAiB;wBACjBE,sBAAe;wBACfD,oBAAc;wBACdQ,gCAAoB;wBACpBC,wCAAwB;wBACxBC,wBAAgB;wBAChBC,sBAAe;wBACf,YAAY;qBACb;oBACD,YAAY,EAAE;wBACZ,cAAc;wBACd,kBAAkB;qBACnB;oBACD,OAAO,EAAE;wBACP,cAAc;wBACd,kBAAkB;qBACnB;oBACD,SAAS,EAAE,EAAE;oBACb,eAAe,EAAE;wBACf,kBAAkB;qBACnB;iBACF;;;gBAYoD,oBAAoB,uBAAzDP,aAAQ,YAAIQ,aAAQ;;;;QC/EpC;SAKC;iCAAA;KAAA;;ICPD;IAOA;;QAME,sBAAwB,MAA0B,EACxC,IAAgB;YAAhB,SAAI,GAAJ,IAAI,CAAY;YACtB,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC;SACpC;QAED,2BAAI,GAAJ,UAAK,KAAY;YACf,IAAM,GAAG,GAAa;gBACpB,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,MAAM;gBACtC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,QAAQ;gBAC1C,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,MAAM;gBACtC,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,UAAU,EAAE,KAAK,CAAC,UAAU;aAC7B,CAAC;YAEF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAQ,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;SACxE;;;;gBApBFT,eAAU;;;gBALF,kBAAkB,uBASZC,aAAQ;gBAXdC,eAAU;;;ICFnB;IAgBA;;QAkBE,qBAAqC,YAAyB;YAC5D,IAAI,YAAY,EAAE;gBAChB,MAAM,IAAI,KAAK,CACb,gEAAgE,CAAC,CAAC;aACrE;SACF;QAfM,mBAAO,GAAd,UAAe,WAA+B;YAC5C,OAAO;gBACL,QAAQ,EAAE,WAAW;gBACrB,SAAS,EAAE;oBACT,YAAY;oBACZ,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,WAAW,EAAE;iBACvD;aACF,CAAC;SACH;;;;gBAdFV,aAAQ,SAAC;oBACR,OAAO,EAAE,CAAEC,mBAAY,CAAE;oBACzB,YAAY,EAAE,EAAE;oBAChB,OAAO,EAAE,EAAE;iBACZ;;;gBAYoD,WAAW,uBAAhDQ,aAAQ,YAAIQ,aAAQ;;;;QClCpC;SAEC;oCAAA;KAAA;;ICFD;IAOA;;;;QAUE,yBAAyB,MAA6B,EAC5C,IAAgB;YAAhB,SAAI,GAAJ,IAAI,CAAY;YACxB,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;SAC7C;;;QAID,sCAAY,GAAZ,UAAa,cAAsB,EAAE,eAAuB;YAA5D,iBAcC;YAdY,+BAAA,EAAA,sBAAsB;YAAE,gCAAA,EAAA,uBAAuB;;YAE1D,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,OAAOV,OAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;aAE3B;;YAGD,IAAI,cAAc,EAAE;gBAClB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAgB,IAAI,CAAC,cAAc,eAAU,eAAiB,CAAC;qBACzE,SAAS,CAAC,UAAA,IAAI,IAAI,OAAA,KAAI,CAAC,SAAS,GAAG,IAAI,GAAA,CAAC,CAAC;aAC7C;YAED,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAgB,IAAI,CAAC,cAAc,eAAU,eAAiB,CAAC,CAAC;SACrF;QAED,qCAAW,GAAX,UAAY,cAAsB;YAChC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAc,IAAI,CAAC,cAAc,cAAS,cAAgB,CAAC,CAAC;SACjF;;;;gBAjCFC,eAAU;;;gBAHF,qBAAqB,uBAWdC,aAAQ;gBAffC,eAAU;;;;QCInB;;QAEE,mCAAS,GAAT,UAAU,SAAqB,EAAE,IAAU;YACzC,IAAM,WAAW,GAAa,EAAE,CAAC;YAEjC,SAAS;iBACN,MAAM,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,UAAU,GAAA,CAAC;iBAC7B,OAAO,CAAC,UAAA,GAAG;gBACV,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE;oBAC9C,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;iBAClC;aACF,CAAC,CAAC;YAEL,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC;SAC3B;;;;gBAjBFQ,SAAI,SAAC;oBACJ,IAAI,EAAE,aAAa;iBACpB;;;;QCCD;;QAEE,oCAAS,GAAT,UAAU,SAAqB,EAAE,EAAU;YACzC,OAAO,SAAS;iBACb,IAAI,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,iBAAiB,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,WAAW,EAAE,GAAA,CAAC,CAAC;SAC1E;;;;gBARFA,SAAI,SAAC;oBACJ,IAAI,EAAE,cAAc;iBACrB;;;;QCED;;QACE,wCAAS,GAAT,UAAU,QAAkB,EAAE,MAAmC;YAC/D,IAAI,CAAC,MAAM,EAAE;gBAAE,OAAO,IAAI,CAAC;aAAE;;YAG7B,IAAM,KAAK,GAAG,MAAM;iBACjB,IAAI,CAAC,UAAA,GAAG,IACP,OAAA,CAAC,GAAG,CAAC,cAAc,IAAI,QAAQ,CAAC,cAAc,IAAI,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,QAAQ,CAAC,cAAc;iBACjG,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;iBAC3F,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,GAAA,CAAC,CAAC;YAEnF,IAAI,CAAC,KAAK,EAAE;gBACV,OAAO,CAAC,GAAG,CAAC,wBAAsB,QAAQ,CAAC,WAAa,CAAC,CAAC;aAC3D;YAED,OAAO,KAAK,GAAG,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;SAC3C;;;;gBAnBFA,SAAI,SAAC;oBACJ,IAAI,EAAE,kBAAkB;iBACzB;;;;QCAD;;QAEE,kDAAS,GAAT,UAAU,SAAqB,EAAE,YAAoB,EAAE,aAAkB;YACvE,OAAO,SAAS;iBACb,MAAM,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,KAAK,aAAa,GAAA,CAAC,CAAC;SAC5E;;;;gBARFA,SAAI,SAAC;oBACJ,IAAI,EAAE,4BAA4B;iBACnC;;;;QCCD;;QACI,uCAAS,GAAT,UAAU,SAAqB,EAAE,MAAc;YAC3C,OAAO,MAAM;gBACT,SAAS;qBACJ,MAAM,CAAC,UAAA,GAAG,IACP,OAAA,GAAG,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC;qBACjE,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;qBACpF,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC3E,GAAG,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,GAAA,CACxE;gBACL,SAAS,CAAC;SACjB;;;;gBAdJA,SAAI,SAAC;oBACF,IAAI,EAAE,iBAAiB;iBAC1B;;;;QCCD;;QAEE,kCAAS,GAAT,UAAU,QAAkB,EAAE,SAAiB;YAC7C,OAAO,QAAQ,CAAC,QAAQ;iBACrB,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,GAAA,CAAC,KAAK,SAAS,CAAC,CAAC;SACxG;;;;gBARFA,SAAI,SAAC;oBACJ,IAAI,EAAE,YAAY;iBACnB;;;;QCCD;;QACE,qCAAS,GAAT,UAAU,SAAqB,EAAE,MAAe,EAAE,QAAiB,EAAE,OAAiB;YACpF,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,EAC7B,MAAM,GAAG,MAAM,GAAG,aAAa,EAC/B,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EAC9B,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC,CAAC;SAC9B;QAEO,qCAAS,GAAT,UAAU,SAAqB,EAAE,MAAc,EAAE,QAAgB,EAAE,OAAgB;YACzF,IAAM,MAAM,GAAG,SAAS;iBACrB,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC;gBACT,IAAI,IAAI,EAAE,IAAS,CAAC;gBAEpB,QAAQ,QAAQ,CAAC,WAAW,EAAE;oBAC5B,KAAK,QAAQ;wBACX,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC;wBAC7D,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC;wBAC7D,MAAM;oBACR,KAAK,QAAQ;wBACX,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;wBACrC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;wBACrC,MAAM;oBACR,KAAK,MAAM;wBACT,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAS,GAAG,IAAI,CAAC;wBAC5C,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAS,GAAG,IAAI,CAAC;wBAC5C,MAAM;iBACT;gBAED,IAAI,IAAI,GAAG,IAAI,EAAE;oBAAE,OAAO,CAAC,CAAC,CAAC;iBAAE;gBAC/B,IAAI,IAAI,GAAG,IAAI,EAAE;oBAAE,OAAO,CAAC,CAAC;iBAAE;gBAC9B,OAAO,CAAC,CAAC;aACV,CAAC,CAAC;YAEL,OAAO,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC;SAC5C;;;;gBArCFA,SAAI,SAAC;oBACJ,IAAI,EAAE,eAAe;iBACtB;;;ICLD;IAkCA;;QAkCE,wBAAqC,YAA4B;YAC/D,IAAI,YAAY,EAAE;gBAChB,MAAM,IAAI,KAAK,CACb,mEAAmE,CAAC,CAAC;aACxE;SACF;QAfM,sBAAO,GAAd,UAAe,cAAqC;YAClD,OAAO;gBACL,QAAQ,EAAE,cAAc;gBACxB,SAAS,EAAE;oBACT,eAAe;oBACf,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,cAAc,EAAE;iBAC7D;aACF,CAAC;SACH;;;;gBA9BFlB,aAAQ,SAAC;oBACR,OAAO,EAAE,CAACC,mBAAY,CAAC;oBACvB,YAAY,EAAE;wBACZ,eAAe;wBACf,gBAAgB;wBAChB,8BAA8B;wBAC9B,mBAAmB;wBACnB,cAAc;wBACd,oBAAoB;wBACpB,iBAAiB;qBAClB;oBACD,OAAO,EAAE;wBACP,eAAe;wBACf,gBAAgB;wBAChB,8BAA8B;wBAC9B,mBAAmB;wBACnB,cAAc;wBACd,oBAAoB;wBACpB,iBAAiB;qBAClB;iBACF;;;gBAYoD,cAAc,uBAAnDQ,aAAQ,YAAIQ,aAAQ;;;;QC9DpC;;QACI,0CAAS,GAAT,UAAU,KAAwB;YAC9B,OAAO,KAAK,CAAC,aAAa,CAAC;SAC9B;;;;gBANJC,SAAI,SAAC;oBACF,IAAI,EAAE,oBAAoB;iBAC7B;;;;QCAD;;QAEE,qCAAS,GAAT,UAAU,GAAW;YACnB,OAAO,GAAG,KAAK,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;SAChD;;;;gBAPFA,SAAI,SAAC;oBACJ,IAAI,EAAE,eAAe;iBACtB;;;ICJD;IAkCA;;QA0BE,0BAAqC,YAA8B;YACjE,IAAI,YAAY,EAAE;gBAChB,MAAM,IAAI,KAAK,CACb,qEAAqE,CAAC,CAAC;aAC1E;SACF;QAfM,wBAAO,GAAd,UAAe,gBAAyC;YACtD,OAAO;gBACL,QAAQ,EAAE,gBAAgB;gBAC1B,SAAS,EAAE;oBACT,iBAAiB;oBACjB,EAAE,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,gBAAgB,EAAE;iBACjE;aACF,CAAC;SACH;;;;gBAtBFlB,aAAQ,SAAC;oBACR,OAAO,EAAE;wBACPC,mBAAY;qBACb;oBACD,YAAY,EAAE;wBACZ,sBAAsB;wBACtB,iBAAiB;qBAClB;oBACD,OAAO,EAAE;wBACP,sBAAsB;wBACtB,iBAAiB;qBAClB;iBACF;;;gBAYoD,gBAAgB,uBAArDQ,aAAQ,YAAIQ,aAAQ;;;;QC5DpC;SAcC;kCAAA;KAAA;;ICND;;QAkBE,uBAAoB,IAAgB,EACtB,MAA2B;YADrB,SAAI,GAAJ,IAAI,CAAY;YAEhC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;YACxC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;YAC1C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;YACpC,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,IAAI,EAAE,CAAC;YAC5D,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;;YAGpC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;YAChD,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;YAClD,IAAI,CAAC,8BAA8B,GAAG,MAAM,CAAC,8BAA8B,CAAC;YAC5E,IAAI,CAAC,4BAA4B,GAAG,MAAM,CAAC,4BAA4B,CAAC;YACxE,IAAI,CAAC,4BAA4B,GAAG,MAAM,CAAC,4BAA4B,CAAC;YACxE,IAAI,CAAC,4BAA4B,GAAG,MAAM,CAAC,4BAA4B,CAAC;SACzE;QAEI,8BAAM,GAAN,UAAO,KAAgB;YAAvB,iBAyDN;;YAvDC,IAAM,MAAM,GAAG,EAAE,CAAC;YAElB,KAAK,CAAC,OAAO,CAAC,UAAA,IAAI;;gBAEhB,IAAM,QAAQ,GAAa,IAAI,QAAQ,EAAE,CAAC;gBAC1C,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;;;;;gBAOzC,IAAM,GAAG,GAAG,IAAIE,gBAAW,CAAC,MAAM,EAAE,KAAI,CAAC,YAAY,EAAE,QAAQ,EAAE;oBAC/D,cAAc,EAAE,IAAI;oBACpB,YAAY,EAAE,MAAM;oBACpB,OAAO,EAAE,IAAIC,gBAAW,EAAE;yBACvB,GAAG,CAAC,aAAa,EAAE,KAAI,CAAC,UAAU,CAAC;yBACnC,GAAG,CAAC,SAAS,EAAE,KAAI,CAAC,OAAO,CAAC;yBAC5B,GAAG,CAAC,qBAAqB,EAAE,KAAI,CAAC,mBAAmB,CAAC;yBACpD,GAAG,CAAC,SAAS,EAAE,KAAI,CAAC,OAAO,CAAC;;;;;;iBAMhC,CAAC,CAAC;;gBAGH,IAAM,QAAQ,GAAG,IAAIC,YAAO,EAAU,CAAC;;gBAGvC,KAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,UAAA,KAAK;oBACpC,IAAI,KAAK,CAAC,IAAI,KAAKC,kBAAa,CAAC,cAAc,EAAE;;wBAG/C,IAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;;wBAGjE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;qBAC5B;yBAAM,IAAI,KAAK,YAAYC,iBAAY,EAAE;;;wBAIxC,QAAQ,CAAC,QAAQ,EAAE,CAAC;qBACrB;iBACF,CAAC,CAAC;;gBAGH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;oBAClB,QAAQ,EAAE,QAAQ,CAAC,YAAY,EAAE;iBAClC,CAAC;aACH,CAAC,CAAC;;YAGH,OAAO,MAAM,CAAC;SACf;QAEM,8BAAM,GAAN,UAAO,QAAgB;YAC5B,IAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBACxE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;gBACzC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;YAEnD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAa,IAAI,CAAC,YAAY,YAAS,EAAE,KAAK,CAAC,CAAC;SACtE;QAEM,gCAAQ,GAAR,UAAS,OAA0B;YACxC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAI,IAAI,CAAC,YAAY,YAAS,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;SACzF;QAEM,qCAAa,GAAb,UAAc,OAA0B;YAE7C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACf,IAAI,CAAC,YAAY,UAAO,EAAE,OAAO,CAAC,CAAC;SAC1C;;;;gBA5GFf,eAAU;;;gBATFE,eAAU;gBAEV,mBAAmB,uBAwBvBD,aAAQ;;;;QCGX,+BAAmB,SAA8C,EAAS,aAA4B;YAAnF,cAAS,GAAT,SAAS,CAAqC;YAAS,kBAAa,GAAb,aAAa,CAAe;YAlB/F,UAAK,GAAc,IAAI,GAAG,EAAE,CAAC;YAKpC,gBAAW,GAAG,IAAI,CAAC;YAEnB,qBAAgB,GAAG,IAAI,CAAC;YACxB,cAAS,GAAG,KAAK,CAAC;YAClB,qBAAgB,GAAG,KAAK,CAAC;SASkF;QAE3G,wCAAQ,GAAR;YACE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,iBAAiB;gBAC3D,IAAI,CAAC,aAAa,CAAC,iBAAiB;gBACpC,cAAc,CAAC;YAEjB,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC,aAAa,CAAC,8BAA8B;gBACrF,IAAI,CAAC,aAAa,CAAC,8BAA8B;gBACjD,WAAW,CAAC;YAEd,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC,aAAa,CAAC,4BAA4B;gBACjF,IAAI,CAAC,aAAa,CAAC,4BAA4B;gBAC/C,QAAQ,CAAC;YAEX,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC,aAAa,CAAC,4BAA4B;gBACjF,IAAI,CAAC,aAAa,CAAC,4BAA4B;gBAC/C,QAAQ,CAAC;YAEX,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC,aAAa,CAAC,4BAA4B;gBACjF,IAAI,CAAC,aAAa,CAAC,4BAA4B;gBAC/C,QAAQ,CAAC;YAEX,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,4BAA4B,CAAC;SAC5D;QAED,wCAAQ,GAAR;YACE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;SACjC;QAED,4CAAY,GAAZ;YAAA,iBAiBC;YAhBC,IAAM,KAAK,GAA4B,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;oCAC1D,GAAG;gBACZ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;;oBAEzB,OAAK,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;yBACvC,SAAS,CAAC,UAAA,MAAM;wBACf,IAAI,MAAM,EAAE;4BACV,KAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;yBAC7C;wBAED,IAAI,CAAC,MAAM,EAAE;4BACX,KAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;yBAC5B;qBACF,CAAC,CAAC;iBACN;;;YAbH,KAAK,IAAM,GAAG,IAAI,KAAK;wBAAZ,GAAG;aAcb;SACF;QAED,2CAAW,GAAX;YAAA,iBA2CC;;YAzCC,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACzB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;aAC/B;;YAGD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;;YAGtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;YAGtD,IAAM,sBAAsB,GAAG,EAAE,CAAC;YAElC,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAC7B,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;aAC1D;;;YAKD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,4BAA4B,CAAC;;YAG3D,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC;;YAGnC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;;YAG9Be,aAAQ,CAAC,sBAAsB,CAAC,CAAC,SAAS,CAAC,UAAA,GAAG;;gBAE5C,KAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,KAAI,CAAC,SAAS,CAAC,YAAY,GAAG,KAAK,CAAC;;gBAGpC,KAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;;gBAG7B,KAAI,CAAC,SAAS,GAAG,KAAK,CAAC;aACxB,CAAC,CAAC;SACJ;;;;gBArHF9B,cAAS,SAAC;oBACT,QAAQ,EAAE,kBAAkB;oBAC5B,iqCAA6C;;iBAE9C;;;gBARQG,mBAAY;gBACZ,aAAa;;;uBASnB4B,cAAS,SAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;;QCEjC,yBAAmB,MAAiB,EAAS,aAA4B;YAAtD,WAAM,GAAN,MAAM,CAAW;YAAS,kBAAa,GAAb,aAAa,CAAe;YAH/D,iBAAY,GAAG,IAAIhC,iBAAY,EAAE,CAAC;SAGkC;QAE9E,kCAAQ,GAAR;YACI,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB;gBACvD,IAAI,CAAC,aAAa,CAAC,gBAAgB;gBACnC,QAAQ,CAAC;SAChB;QAEM,0CAAgB,GAAhB;YAAA,iBAGN;YAFG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;iBACpD,WAAW,EAAE,CAAC,SAAS,CAAC,cAAM,OAAA,KAAI,CAAC,YAAY,CAAC,IAAI,EAAE,GAAA,CAAC,CAAC;SAChE;;;;gBAnBJC,cAAS,SAAC;oBACP,QAAQ,EAAE,WAAW;oBACrB,QAAQ,EAAE,wFAAwF;iBACrG;;;gBAPQkB,gBAAS;gBAET,aAAa;;;+BAOjBhB,WAAM;;;ICVX;IAkCA;;QAmCM,sBAAoC,YAA0B;YAC5D,IAAI,YAAY,EAAE;gBAChB,MAAM,IAAI,KAAK,CACb,iEAAiE,CAAC,CAAC;aACtE;SACF;QAfI,oBAAO,GAAd,UAAe,YAAiC;YAC5C,OAAO;gBACL,QAAQ,EAAE,YAAY;gBACtB,SAAS,EAAE;oBACT,aAAa;oBACb,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,YAAY,EAAE;iBACzD;aACF,CAAC;SACH;;;;gBA/BNI,aAAQ,SAAC;oBACN,OAAO,EAAE;wBACLC,mBAAY;wBACZyB,kCAAuB;wBACvBC,qBAAgB;wBAEhBxB,sBAAe;wBACfG,sBAAe;wBACfsB,kBAAa;wBACbf,gCAAoB;qBAAC;oBACzB,YAAY,EAAE;wBACV,eAAe;wBACf,qBAAqB;qBACxB;oBACD,OAAO,EAAE;wBACL,eAAe;wBACf,qBAAqB;qBACxB;oBACD,eAAe,EAAE;wBACb,qBAAqB;qBACxB;iBACF;;;gBAYqD,YAAY,uBAAjDJ,aAAQ,YAAIQ,aAAQ;;;ICrEvC;;QAUE,qBAAoB,YAA0B;YAA1B,iBAAY,GAAZ,YAAY,CAAc;SAAK;QAEnD,+BAAS,GAAT,UAAU,KAAa;YACrB,OAAO,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;SACxD;;;;gBATFC,SAAI,SAAC;oBACJ,IAAI,EAAE,SAAS;iBAChB;;;gBAJQW,4BAAY;;;;QCGrB;;;QAGE,iCAAS,GAAT,UAAU,KAAa;YACrB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;gBAAE,OAAO,KAAK,CAAC;aAAE;YAE5D,IAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAClC,IAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAEhD,IAAI,CAAC,SAAS,EAAE;gBAAE,OAAO,KAAK,CAAC;aAAE;YAEjC,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACxC,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAEhC,OAAO,QAAM,GAAG,SAAI,OAAO,WAAM,KAAO,CAAC;SAC1C;QAEO,2BAAG,GAAH,UAAI,SAAiB;YAC3B,QAAQ,SAAS,CAAC,WAAW,EAAE;;gBAE7B,KAAK,KAAK,CAAC;gBAAC,KAAK,MAAM,CAAC;gBACxB,KAAK,MAAM,CAAC;gBAAC,KAAK,MAAM,CAAC;gBACzB,KAAK,KAAK,CAAC;gBAAC,KAAK,MAAM,CAAC;gBAAC,KAAK,MAAM;oBAClC,OAAO,MAAM,CAAC;gBAChB,KAAK,KAAK,CAAC;gBAAC,KAAK,MAAM,CAAC;gBACxB,KAAK,KAAK,CAAC;gBAAC,KAAK,MAAM,CAAC;gBAAC,KAAK,MAAM,CAAC;gBAAC,KAAK,KAAK,CAAC;gBACjD,KAAK,KAAK,CAAC;gBAAC,KAAK,MAAM,CAAC;gBAAC,KAAK,MAAM;oBAClC,OAAO,OAAO,CAAC;gBACjB,KAAK,KAAK,CAAC;gBAAC,KAAK,MAAM,CAAC;gBACxB,KAAK,KAAK,CAAC;gBAAC,KAAK,MAAM,CAAC;gBAAC,KAAK,MAAM,CAAC;gBAAC,KAAK,MAAM,CAAC;gBAClD,KAAK,MAAM,CAAC;gBAAC,KAAK,MAAM,CAAC;gBACzB,KAAK,KAAK,CAAC;gBAAC,KAAK,MAAM,CAAC;gBAAC,KAAK,MAAM;oBAClC,OAAO,YAAY,CAAC;gBACtB,KAAK,KAAK,CAAC;gBAAC,KAAK,MAAM,CAAC;gBACxB,KAAK,KAAK,CAAC;gBAAC,KAAK,MAAM;oBACrB,OAAO,OAAO,CAAC;gBACjB,KAAK,KAAK,CAAC;gBAAC,KAAK,OAAO,CAAC;gBAAC,KAAK,OAAO,CAAC;gBAAC,KAAK,OAAO,CAAC;gBACrD,KAAK,OAAO;oBACV,OAAO,QAAQ,CAAC;gBAClB,KAAK,KAAK,CAAC;gBAAC,KAAK,MAAM,CAAC;gBACxB,KAAK,KAAK;oBACR,OAAO,SAAS,CAAC;gBACnB,KAAK,KAAK;oBACR,OAAO,WAAW,CAAC;gBACrB,KAAK,KAAK;oBACR,OAAO,UAAU,CAAC;aACrB;SACF;QAEO,+BAAO,GAAP,UAAQ,SAAiB;YAC/B,QAAQ,SAAS,CAAC,WAAW,EAAE;gBAC7B,KAAK,KAAK,CAAC;gBAAC,KAAK,MAAM,CAAC;gBAAC,KAAK,MAAM,CAAC;gBACrC,KAAK,KAAK,CAAC;gBAAC,KAAK,MAAM,CAAC;gBAAC,KAAK,MAAM,CAAC;gBACrC,KAAK,KAAK,CAAC;gBAAC,KAAK,MAAM,CAAC;gBAAC,KAAK,MAAM,CAAC;gBACrC,KAAK,KAAK,CAAC;gBAAC,KAAK,MAAM,CAAC;gBACxB,KAAK,OAAO,CAAC;gBACb,KAAK,KAAK;oBACR,OAAO,KAAK,CAAC;gBACf;oBACE,IAAM,QAAQ,GAAG,GAAG,CAAC;oBACrB,OAAO,OAAK,QAAU,CAAC;aAC1B;SACF;;;;gBAlEFX,SAAI,SAAC;oBACJ,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,KAAK;iBACZ;;;ICLD;IAaA;;QAgBA;;;;;gBAdClB,aAAQ,SAAC;oBACN,OAAO,EAAE;wBACLC,mBAAY;qBACf;oBACD,YAAY,EAAE;wBACZ,WAAW;wBACX,aAAa;qBACd;oBACD,OAAO,EAAE;wBACP,WAAW;wBACX,aAAa;qBACd;oBACD,eAAe,EAAE,EAAG;iBACvB;;;IC5BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@angular/core"),require("@angular/common"),require("@angular/forms"),require("@angular/material/button"),require("@angular/material/checkbox"),require("@angular/material/dialog"),require("@angular/material/input"),require("@angular/material/progress-bar"),require("@angular/material/progress-spinner"),require("@angular/material/select"),require("@angular/material/tooltip"),require("@angular/common/http"),require("@auth0/angular-jwt"),require("rxjs"),require("@angular/platform-browser/animations"),require("@angular/material/list"),require("@angular/platform-browser")):"function"==typeof define&&define.amd?define("@cleavelandprice/ngx-lib",["exports","@angular/core","@angular/common","@angular/forms","@angular/material/button","@angular/material/checkbox","@angular/material/dialog","@angular/material/input","@angular/material/progress-bar","@angular/material/progress-spinner","@angular/material/select","@angular/material/tooltip","@angular/common/http","@auth0/angular-jwt","rxjs","@angular/platform-browser/animations","@angular/material/list","@angular/platform-browser"],e):e(((t="undefined"!=typeof globalThis?globalThis:t||self).cleavelandprice=t.cleavelandprice||{},t.cleavelandprice["ngx-lib"]={}),t.ng.core,t.ng.common,t.ng.forms,t.ng.material.button,t.ng.material.checkbox,t.ng.material.dialog,t.ng.material.input,t.ng.material.progressBar,t.ng.material.progressSpinner,t.ng.material.select,t.ng.material.tooltip,t.ng.common.http,t.angularJwt,t.rxjs,t.ng.platformBrowser.animations,t.ng.material.list,t.ng.platformBrowser)}(this,(function(t,e,o,n,a,i,r,s,l,u,c,p,d,h,m,g,f,y){"use strict";var v;(v=t.ConfirmationDialogMode||(t.ConfirmationDialogMode={}))[v.OkCancel=0]="OkCancel",v[v.YesNo=1]="YesNo",v[v.TrueFalse=2]="TrueFalse",v[v.Custom=3]="Custom";var b=function(){function o(){this.closed=new e.EventEmitter,this.ConfirmationDialogMode=t.ConfirmationDialogMode,this.mode=t.ConfirmationDialogMode.OkCancel,this.customTrueFalseText=null}return o.prototype.ngOnInit=function(){this.data&&(this.title=this.data.title||null,this.message=this.data.message||null,this.checkboxMessage=this.data.checkboxMessage||null,this.placeholder=this.data.placeholder||null,this.userInput=this.data.value||null,this.mode=this.data.mode||t.ConfirmationDialogMode.OkCancel,this.customTrueFalseText=this.data.customTrueFalseText)},o.prototype.close=function(){var t;switch(this.dialogType){case"message":t=this.checkboxMessage?{checkbox:this.checkboxValue||!1}:null;break;case"input":t=this.checkboxMessage?{response:this.userInput,checkbox:this.checkboxValue||!1}:this.userInput;break;case"confirmation":t=!this.checkboxMessage||{response:!0,checkbox:this.checkboxValue||!1}}this.closed.emit(t)},o.prototype.cancel=function(){var t;"confirmation"===this.dialogType&&(t=!!this.checkboxMessage&&{response:!1,checkbox:this.checkboxValue||!1}),this.closed.emit(t)},o}();b.decorators=[{type:e.Component,args:[{selector:"cp-dialog",template:'<h2 *ngIf="title" mat-dialog-title [innerHTML]="title"></h2>\n\n<mat-dialog-content>\n <div *ngIf="message" [innerHTML]="message"></div>\n\n <mat-form-field *ngIf="dialogType === \'input\'">\n <textarea matInput [placeholder]="placeholder" [(ngModel)]="userInput"></textarea>\n </mat-form-field>\n\n <div id="checkbox" *ngIf="checkboxMessage">\n <mat-checkbox [(ngModel)]="checkboxValue">\n <span [innerHTML]="checkboxMessage"></span>\n </mat-checkbox>\n </div>\n</mat-dialog-content>\n\n<mat-dialog-actions>\n <button mat-raised-button (click)="close()" [disabled]="dialogType === \'input\' && !userInput">\n <span [ngSwitch]="mode">\n <span *ngSwitchCase="ConfirmationDialogMode.YesNo">Yes</span>\n <span *ngSwitchCase="ConfirmationDialogMode.TrueFalse">True</span>\n <span *ngSwitchCase="ConfirmationDialogMode.Custom">{{ customTrueFalseText[0] }}</span>\n <span *ngSwitchDefault>OK</span>\n </span>\n </button>\n <button *ngIf="dialogType !== \'message\'" mat-raised-button (click)="cancel()">\n <span [ngSwitch]="mode">\n <span *ngSwitchCase="ConfirmationDialogMode.YesNo">No</span>\n <span *ngSwitchCase="ConfirmationDialogMode.TrueFalse">False</span>\n <span *ngSwitchCase="ConfirmationDialogMode.Custom">{{ customTrueFalseText[1] }}</span>\n <span *ngSwitchDefault>Cancel</span>\n </span>\n </button>\n</mat-dialog-actions>',styles:["mat-form-field{margin-top:2em;width:100%}#checkbox{margin:2em 0}"]}]}],b.propDecorators={dialogType:[{type:e.Input}],data:[{type:e.Input}],closed:[{type:e.Output}]};var x=function(t,e){this.dialogRef=t,this.data=e};x.decorators=[{type:e.Component,args:[{selector:"cp-confirmation-dialog",template:'<cp-dialog\n [data]="data"\n [dialogType]="\'confirmation\'"\n (closed)="dialogRef.close($event)">\n</cp-dialog>'}]}],x.ctorParameters=function(){return[{type:r.MatDialogRef},{type:void 0,decorators:[{type:e.Inject,args:[r.MAT_DIALOG_DATA]}]}]};var C=function(t,e){this.dialogRef=t,this.data=e};C.decorators=[{type:e.Component,args:[{selector:"cp-input-dialog",template:'<cp-dialog\n [data]="data"\n [dialogType]="\'input\'"\n (closed)="dialogRef.close($event)">\n</cp-dialog>'}]}],C.ctorParameters=function(){return[{type:r.MatDialogRef},{type:void 0,decorators:[{type:e.Inject,args:[r.MAT_DIALOG_DATA]}]}]};var M=function(t,e){this.dialogRef=t,this.data=e};M.decorators=[{type:e.Component,args:[{selector:"cp-message-dialog",template:'<cp-dialog\n [data]="data"\n [dialogType]="\'message\'"\n (closed)="dialogRef.close($event)">\n</cp-dialog>'}]}],M.ctorParameters=function(){return[{type:r.MatDialogRef},{type:void 0,decorators:[{type:e.Inject,args:[r.MAT_DIALOG_DATA]}]}]};var S=function(){};S.decorators=[{type:e.NgModule,args:[{imports:[o.CommonModule,n.FormsModule,a.MatButtonModule,i.MatCheckboxModule,s.MatInputModule,r.MatDialogModule],declarations:[b,x,C,M],exports:[x,C,M],entryComponents:[x,C,M]}]}];var w=function(){},T=function(){},P=function(){function t(t,e){this.config=t,this.http=e}return t.prototype.getListItems=function(t){return t.username||(t.username=this.config.username),t.password||(t.password=this.config.password),this.http.post(this.config.sharePointApiUrl+"/listitems",t)},t.prototype.getPeople=function(t,e){var o=this;return this.users?m.of(this.users):(t.username||(t.username=this.config.username),t.password||(t.password=this.config.password),e&&this.http.post(this.config.sharePointApiUrl+"/users",t).subscribe((function(t){return o.users=t})),this.http.post(this.config.sharePointApiUrl+"/users",t))},t.prototype.getPhotos=function(t){var e=this;if(this.photos)return m.of(this.photos);var o={list:this.config.employeePhotoList,site:this.config.sharePointServerUrl+"/"+this.config.employeePhotoSite,username:this.config.username,password:this.config.password,additionalPropertiesToRetrieve:["EncodedAbsUrl"]};return t&&this.http.post(this.config.sharePointApiUrl+"/listitems",o).subscribe((function(t){return e.photos=t})),this.http.post(this.config.sharePointApiUrl+"/listitems",o)},t}();P.decorators=[{type:e.Injectable}],P.ctorParameters=function(){return[{type:T,decorators:[{type:e.Optional}]},{type:d.HttpClient}]};var D=function(){function t(t,o,n){this.http=o,this.sharePointService=n,this.authenticatedChanged=new e.EventEmitter,this.authenticatingChanged=new e.EventEmitter,this.authenticating=!1,this.authenticated=!1,this.authenticationApiUrl=t.authenticationApiUrl,this.checkForExistingToken()}return t.prototype.login=function(t,e,o){var n=this,a={username:t,password:e,adminGroup:o};this.authenticating=!0,this.authenticatingChanged.emit(this.authenticating),this.http.request("POST",this.authenticationApiUrl,{responseType:"text",body:a}).subscribe((function(t){return n.validateUser(t)}),(function(t){n.authenticating=!1,n.authenticatingChanged.emit(n.authenticating)}))},t.prototype.logout=function(){localStorage.getItem("token")&&localStorage.removeItem("token"),this.authenticatedUser=null,this.authenticated=!1,this.authenticatedChanged.emit(!1)},t.prototype.validateUser=function(t){if(t){var e=new h.JwtHelperService,o=e.decodeToken(t);e.isTokenExpired(t)?this.logout():(this.authenticatedUser=o,this.authenticatedUser.accountName=o.winaccountname,this.authenticatedUser.admin="Admin"===o.role,localStorage.setItem("token",t),this.getPhoto(),this.authenticated=!0,this.authenticatedChanged.emit(this.authenticated),this.authenticating=!1,this.authenticatingChanged.emit(this.authenticating))}},t.prototype.getPhoto=function(){var t=this;this.sharePointService.getPhotos().subscribe((function(e){if(t.authenticatedUser&&t.authenticatedUser.employeeNumber){var o=e.find((function(e){return+e.employeeNumber==+t.authenticatedUser.employeeNumber}));o&&(t.authenticatedUser.photoUrl=o.encodedAbsUrl)}}))},t.prototype.checkForExistingToken=function(){localStorage.getItem("token")&&this.validateUser(localStorage.getItem("token"))},t}();D.decorators=[{type:e.Injectable}],D.ctorParameters=function(){return[{type:w,decorators:[{type:e.Optional}]},{type:d.HttpClient},{type:P}]},D.propDecorators={authenticatedChanged:[{type:e.Output}],authenticatingChanged:[{type:e.Output}]};var U=function(){function t(t,e,o,n){this.dialogRef=t,this.sharePointService=e,this.authenticationService=o,this.data=n,this.adminGroup=n.adminGroup}return t.prototype.ngOnInit=function(){var t=this;this.authenticationService.authenticatedChanged.subscribe((function(e){e&&t.dialogRef.close()}))},t.prototype.authenticate=function(){this.sharePointService&&this.username&&this.password&&this.authenticationService.login(this.username,this.password,this.adminGroup)},t}();U.decorators=[{type:e.Component,args:[{selector:"cp-login-form",template:'<h2 mat-dialog-title>\n <span *ngIf="!authenticationService.authenticating">Login</span>\n <span *ngIf="authenticationService.authenticating">Authenticating...</span>\n</h2>\n\n<mat-dialog-content [class.loginError]="loginError">\n <div id="spinner" *ngIf="authenticationService.authenticating">\n <mat-progress-spinner color="primary" mode="indeterminate"></mat-progress-spinner>\n </div>\n\n <div *ngIf="!authenticationService.authenticating">\n <div>\n <mat-form-field>\n <input matInput placeholder="Username" [(ngModel)]="username" name="username" required (keyup.enter)="authenticate()">\n </mat-form-field>\n </div>\n\n <div>\n <mat-form-field>\n <input matInput type="password" placeholder="Password" [(ngModel)]="password" name="password" required (keyup.enter)="authenticate()">\n </mat-form-field>\n </div>\n </div>\n\n <div *ngIf="!authenticationService.authenticating && loginError" class="alert alert-danger">\n Bad username or password\n </div>\n</mat-dialog-content>\n\n<mat-dialog-actions *ngIf="!authenticationService.authenticating">\n <button type="button" mat-raised-button (click)="authenticate()">OK</button>\n <button type="button" mat-button (click)="dialogRef.close()">Cancel</button>\n</mat-dialog-actions>',styles:["#spinner{align-items:center;display:flex;height:100%;justify-content:center;width:100%}mat-dialog-content{height:150px}mat-dialog-content.loginError{height:200px}"]}]}],U.ctorParameters=function(){return[{type:r.MatDialogRef},{type:P},{type:D},{type:void 0,decorators:[{type:e.Inject,args:[r.MAT_DIALOG_DATA]}]}]};var I=function(){function t(t,e){this.dialog=t,this.authenticationService=e}return t.prototype.login=function(){this.dialog.open(U,{data:{adminGroup:this.adminGroup}})},t.prototype.confirmLogout=function(){var t=this;this.dialog.open(x,{data:{message:"Are you sure you want to logout?"}}).afterClosed().subscribe((function(e){e&&t.authenticationService.logout()}))},t}();I.decorators=[{type:e.Component,args:[{selector:"cp-login",template:'<div id="user-id">\n <i id="unauthenticated-user-image" *ngIf="!authenticationService.authenticated"\n class="fa fa-user-circle"\n [class.fa-spin]="authenticationService.authenticating"\n aria-hidden="true"\n matTooltip="Login"\n (click)="login()"></i>\n\n <img id="authenticated-user-image"\n *ngIf="authenticationService.authenticated && authenticationService.authenticatedUser.photoUrl"\n [src]="authenticationService.authenticatedUser.photoUrl"\n matTooltip="Logout"\n (click)="confirmLogout()" />\n\n <i id="authenticated-user-image"\n *ngIf="authenticationService.authenticated && !authenticationService.authenticatedUser.photoUrl"\n class="fa fa-user-circle"\n matTooltip="Logout"\n (click)="confirmLogout()"></i>\n\n <div id="user-name" *ngIf="authenticationService.authenticated">\n {{ authenticationService.authenticatedUser.displayName }}\n </div>\n</div>',styles:["#user-id{display:flex;font-family:Verdana,Geneva,Tahoma,sans-serif;height:2em;padding:.3em}.fa{font-size:2em}img{border-radius:100%;height:2em;width:2em}#user-id>div{align-items:center;display:flex;font-size:1.15em;height:100%;margin-left:.75em}"]}]}],I.ctorParameters=function(){return[{type:r.MatDialog},{type:D}]},I.propDecorators={adminGroup:[{type:e.Input}]};var A=function(){function t(t){if(t)throw new Error("AuthenticationModule is already loaded. Import it in the AppModule only")}return t.forRoot=function(e){return{ngModule:t,providers:[D,{provide:w,useValue:e}]}},t}();A.decorators=[{type:e.NgModule,args:[{imports:[o.CommonModule,n.FormsModule,a.MatButtonModule,i.MatCheckboxModule,r.MatDialogModule,s.MatInputModule,l.MatProgressBarModule,u.MatProgressSpinnerModule,p.MatTooltipModule,c.MatSelectModule,S],declarations:[I,U],exports:[I,U],providers:[],entryComponents:[U]}]}],A.ctorParameters=function(){return[{type:A,decorators:[{type:e.Optional},{type:e.SkipSelf}]}]};var k=function(){},B=function(){function t(t,e){this.http=e,this.emailServiceConfig=t}return t.prototype.send=function(t){var e={server:this.emailServiceConfig.server,smtpPort:this.emailServiceConfig.smtpPort,sender:this.emailServiceConfig.sender,subject:t.subject,content:t.content,recipients:t.recipients};return this.http.post(this.emailServiceConfig.emailApiUrl,e)},t}();B.decorators=[{type:e.Injectable}],B.ctorParameters=function(){return[{type:k,decorators:[{type:e.Optional}]},{type:d.HttpClient}]};var E=function(){function t(t){if(t)throw new Error("EmailModule is already loaded. Import it in the AppModule only")}return t.forRoot=function(e){return{ngModule:t,providers:[B,{provide:k,useValue:e}]}},t}();E.decorators=[{type:e.NgModule,args:[{imports:[o.CommonModule],declarations:[],exports:[]}]}],E.ctorParameters=function(){return[{type:E,decorators:[{type:e.Optional},{type:e.SkipSelf}]}]};var O=function(){},L=function(){function t(t,e){this.http=e,this.employeeApiUrl=t.employeeApiUrl}return t.prototype.getEmployees=function(t,e){var o=this;return void 0===t&&(t=!1),void 0===e&&(e=!1),this.employees?m.of(this.employees):(t&&this.http.get(this.employeeApiUrl+"/false/"+e).subscribe((function(t){return o.employees=t})),this.http.get(this.employeeApiUrl+"/false/"+e))},t.prototype.getEmployee=function(t){return this.http.get(this.employeeApiUrl+"/name/"+t)},t}();L.decorators=[{type:e.Injectable}],L.ctorParameters=function(){return[{type:O,decorators:[{type:e.Optional}]},{type:d.HttpClient}]};var F=function(){function t(){}return t.prototype.transform=function(t,e){var o=[];return t.filter((function(t){return t.department})).forEach((function(t){-1===o.indexOf(t.department)&&o.push(t.department)})),o.sort()},t}();F.decorators=[{type:e.Pipe,args:[{name:"departments"}]}];var N=function(){function t(){}return t.prototype.transform=function(t,e){return t.find((function(t){return t.distinguishedName.toLowerCase()===e.toLowerCase()}))},t}();N.decorators=[{type:e.Pipe,args:[{name:"employeeByDn"}]}];var R=function(){function t(){}return t.prototype.transform=function(t,e){if(!e)return null;var o=e.find((function(e){return e.employeeNumber&&t.employeeNumber&&+e.employeeNumber==+t.employeeNumber||e.accountName&&e.accountName.toLowerCase()===t.sAMAccountName.toLowerCase()||e.title&&e.title.toLowerCase()===t.displayName.toLowerCase()}));return o||console.log("No photo match for "+t.displayName),o?o.encodedAbsUrl:null},t}();R.decorators=[{type:e.Pipe,args:[{name:"employeePhotoUrl"}]}];var j=function(){function t(){}return t.prototype.transform=function(t,e,o){return t.filter((function(t){return t[e]&&t[e]===o}))},t}();j.decorators=[{type:e.Pipe,args:[{name:"employeesWithPropertyValue"}]}];var q=function(){function t(){}return t.prototype.transform=function(t,e){return e?t.filter((function(t){return-1!==t.displayName.toLowerCase().indexOf(e.toLowerCase())||t.department&&-1!==t.department.toLowerCase().indexOf(e.toLowerCase())||t.title&&-1!==t.title.toLowerCase().indexOf(e.toLowerCase())||-1!==t.sAMAccountName.toLowerCase().indexOf(e.toLowerCase())})):t},t}();q.decorators=[{type:e.Pipe,args:[{name:"filterEmployees"}]}];var H=function(){function t(){}return t.prototype.transform=function(t,e){return t.memberOf&&void 0!==t.memberOf.find((function(t){return-1!==t.toLowerCase().indexOf(e.toLowerCase())}))},t}();H.decorators=[{type:e.Pipe,args:[{name:"isMemberOf"}]}];var V=function(){function t(){}return t.prototype.transform=function(t,e,o,n){return this.getSorted(t,e||"displayName",o||"string",n||!1)},t.prototype.getSorted=function(t,e,o,n){var a=t.sort((function(t,n){var a,i;switch(o.toLowerCase()){case"string":a=t[e]?t[e].toString().toLowerCase():null,i=n[e]?n[e].toString().toLowerCase():null;break;case"number":a=t[e]?+t[e]:null,i=n[e]?+n[e]:null;break;case"date":a=t[e]?t[e]:null,i=n[e]?n[e]:null}return a<i?-1:a>i?1:0}));return n?a.reverse():a},t}();V.decorators=[{type:e.Pipe,args:[{name:"sortEmployees"}]}];var G=function(){function t(t){if(t)throw new Error("EmployeeModule is already loaded. Import it in the AppModule only")}return t.forRoot=function(e){return{ngModule:t,providers:[L,{provide:O,useValue:e}]}},t}();G.decorators=[{type:e.NgModule,args:[{imports:[o.CommonModule],declarations:[F,N,j,q,H,R,V],exports:[F,N,j,q,H,R,V]}]}],G.ctorParameters=function(){return[{type:G,decorators:[{type:e.Optional},{type:e.SkipSelf}]}]};var _=function(){function t(){}return t.prototype.transform=function(t){return t.encodedAbsUrl},t}();_.decorators=[{type:e.Pipe,args:[{name:"sharePointPhotoUrl"}]}];var z=function(){function t(){}return t.prototype.transform=function(t){return null!==t?t.split(",")[0]:null},t}();z.decorators=[{type:e.Pipe,args:[{name:"sharePointUrl"}]}];var Y=function(){function t(t){if(t)throw new Error("SharePointModule is already loaded. Import it in the AppModule only")}return t.forRoot=function(e){return{ngModule:t,providers:[P,{provide:T,useValue:e}]}},t}();Y.decorators=[{type:e.NgModule,args:[{imports:[o.CommonModule],declarations:[_,z],exports:[_,z]}]}],Y.ctorParameters=function(){return[{type:Y,decorators:[{type:e.Optional},{type:e.SkipSelf}]}]};var J=function(){},$=function(){function t(t,e){this.http=t,this.uploadApiUrl=e.uploadApiUrl,this.uploadPath=e.uploadPath||"",this.dbAppId=e.dbAppId||"",this.externalReferenceId=e.externalReferenceId||"",this.comment=e.comment||"",this.uploadButtonText=e.uploadButtonText,this.uploadDialogTitle=e.uploadDialogTitle,this.uploadDialogAddFilesButtonText=e.uploadDialogAddFilesButtonText,this.uploadDialogCancelButtonText=e.uploadDialogCancelButtonText,this.uploadDialogUploadButtonText=e.uploadDialogUploadButtonText,this.uploadDialogFinishButtonText=e.uploadDialogFinishButtonText}return t.prototype.upload=function(t){var e=this,o={};return t.forEach((function(t){var n=new FormData;n.append("file",t,t.name);var a=new d.HttpRequest("POST",e.uploadApiUrl,n,{reportProgress:!0,responseType:"blob",headers:(new d.HttpHeaders).set("Destination",e.uploadPath).set("DbAppId",e.dbAppId).set("ExternalReferenceId",e.externalReferenceId).set("Comment",e.comment)}),i=new m.Subject;e.http.request(a).subscribe((function(t){if(t.type===d.HttpEventType.UploadProgress){var e=Math.round(100*t.loaded/t.total);i.next(e)}else t instanceof d.HttpResponse&&i.complete()})),o[t.name]={progress:i.asObservable()}})),o},t.prototype.exists=function(t){var e=-1===this.uploadApiUrl.toLowerCase().indexOf("filesystem")?{name:t,dbAppId:this.dbAppId}:{name:t,destination:this.uploadPath};return this.http.post(this.uploadApiUrl+"/exists",e)},t.prototype.download=function(t){return this.http.post(this.uploadApiUrl+"/stream",t,{responseType:"blob"})},t.prototype.getUploadInfo=function(t){return this.http.post(this.uploadApiUrl+"/info",t)},t}();$.decorators=[{type:e.Injectable}],$.ctorParameters=function(){return[{type:d.HttpClient},{type:J,decorators:[{type:e.Optional}]}]};var K=function(){function t(t,e){this.dialogRef=t,this.uploadService=e,this.files=new Set,this.canBeClosed=!0,this.showCancelButton=!0,this.uploading=!1,this.uploadSuccessful=!1}return t.prototype.ngOnInit=function(){this.uploadDialogTitle=this.uploadService.uploadDialogTitle?this.uploadService.uploadDialogTitle:"Upload Files",this.uploadDialogAddFilesButtonText=this.uploadService.uploadDialogAddFilesButtonText?this.uploadService.uploadDialogAddFilesButtonText:"Add Files",this.uploadDialogCancelButtonText=this.uploadService.uploadDialogCancelButtonText?this.uploadService.uploadDialogCancelButtonText:"Cancel",this.uploadDialogUploadButtonText=this.uploadService.uploadDialogUploadButtonText?this.uploadService.uploadDialogUploadButtonText:"Upload",this.uploadDialogFinishButtonText=this.uploadService.uploadDialogFinishButtonText?this.uploadService.uploadDialogFinishButtonText:"Finish",this.primaryButtonText=this.uploadDialogUploadButtonText},t.prototype.addFiles=function(){this.file.nativeElement.click()},t.prototype.onFilesAdded=function(){var t=this,e=this.file.nativeElement.files,o=function(o){isNaN(parseInt(o))||n.uploadService.exists(e[o].name).subscribe((function(n){n&&(t.existingFileConflict=e[o].name),n||t.files.add(e[o])}))},n=this;for(var a in e)o(a)},t.prototype.closeDialog=function(){var t=this;if(this.uploadSuccessful)return this.dialogRef.close();this.uploading=!0,this.progress=this.uploadService.upload(this.files);var e=[];for(var o in this.progress)e.push(this.progress[o].progress);this.primaryButtonText=this.uploadDialogFinishButtonText,this.canBeClosed=!1,this.dialogRef.disableClose=!0,this.showCancelButton=!1,m.forkJoin(e).subscribe((function(e){t.canBeClosed=!0,t.dialogRef.disableClose=!1,t.uploadSuccessful=!0,t.uploading=!1}))},t}();K.decorators=[{type:e.Component,args:[{selector:"cp-upload-dialog",template:'<input type="file" #file style="display: none" (change)="onFilesAdded()" multiple />\n\n<div mat-dialog-title id="title">\n <div>{{ uploadDialogTitle }}</div>\n <button [disabled]="uploading || uploadSuccessful" mat-raised-button color="primary" class="add-files-btn" (click)="addFiles()">\n {{ uploadDialogAddFilesButtonText }}\n </button>\n</div>\n\n<div id="conflict" *ngIf="existingFileConflict">\n {{ existingFileConflict }} already exists on the server and cannot be overwritten\n</div>\n\n<mat-dialog-content>\n <mat-list>\n <mat-list-item *ngFor="let file of files">\n <h4 mat-line>{{file.name}}</h4>\n <mat-progress-bar *ngIf="progress" mode="determinate" [value]="progress[file.name].progress | async"></mat-progress-bar>\n </mat-list-item>\n </mat-list>\n</mat-dialog-content>\n\n<mat-dialog-actions id="actions">\n <button *ngIf="showCancelButton" mat-button mat-dialog-close>{{ uploadDialogCancelButtonText }}</button>\n <button *ngIf="files.size > 0" mat-raised-button color="primary" [disabled]="!canBeClosed" (click)="closeDialog()">{{ primaryButtonText }}</button>\n</mat-dialog-actions>\n',styles:["#title{display:flex;justify-content:space-between}#actions{display:flex;justify-content:flex-end}#conflict{color:red;font-size:.8em;margin-top:.5em}"]}]}],K.ctorParameters=function(){return[{type:r.MatDialogRef},{type:$}]},K.propDecorators={file:[{type:e.ViewChild,args:["file",{static:!0}]}]};var W=function(){function t(t,o){this.dialog=t,this.uploadService=o,this.dialogClosed=new e.EventEmitter}return t.prototype.ngOnInit=function(){this.uploadButtonText=this.uploadService.uploadButtonText?this.uploadService.uploadButtonText:"Upload"},t.prototype.openUploadDialog=function(){var t=this;this.dialog.open(K,{width:"50%"}).afterClosed().subscribe((function(){return t.dialogClosed.emit()}))},t}();W.decorators=[{type:e.Component,args:[{selector:"cp-upload",template:'<button mat-raised-button (click)="openUploadDialog()">{{ uploadButtonText }}</button>'}]}],W.ctorParameters=function(){return[{type:r.MatDialog},{type:$}]},W.propDecorators={dialogClosed:[{type:e.Output}]};var Q=function(){function t(t){if(t)throw new Error("UploadModule is already loaded. Import it in the AppModule only")}return t.forRoot=function(e){return{ngModule:t,providers:[$,{provide:J,useValue:e}]}},t}();Q.decorators=[{type:e.NgModule,args:[{imports:[o.CommonModule,g.BrowserAnimationsModule,d.HttpClientModule,a.MatButtonModule,r.MatDialogModule,f.MatListModule,l.MatProgressBarModule],declarations:[W,K],exports:[W,K],entryComponents:[K]}]}],Q.ctorParameters=function(){return[{type:Q,decorators:[{type:e.Optional},{type:e.SkipSelf}]}]};var X=function(){function t(t){this.domSanitizer=t}return t.prototype.transform=function(t){return this.domSanitizer.bypassSecurityTrustUrl(t)},t}();X.decorators=[{type:e.Pipe,args:[{name:"safeUrl"}]}],X.ctorParameters=function(){return[{type:y.DomSanitizer}]};var Z=function(){function t(){}return t.prototype.transform=function(t){if(!localStorage.getItem("useUriScheme"))return t;var e=t.split("."),o=e[e.length-1];if(!o)return t;var n=this.command(o);return"ms-"+this.app(o)+":"+n+"|u|"+t},t.prototype.app=function(t){switch(t.toLowerCase()){case"doc":case"docx":case"docm":case"docb":case"dot":case"dotx":case"dotm":return"word";case"xls":case"xlsx":case"xlm":case"xlsm":case"xlsb":case"xlw":case"xlt":case"xltx":case"xltm":return"excel";case"ppt":case"pptx":case"pps":case"ppsx":case"pptm":case"ppsm":case"sldx":case"sldm":case"pot":case"potx":case"potm":return"powerpoint";case"vsd":case"vsdx":case"vst":case"vstx":return"visio";case"mdb":case"accdb":case"accde":case"accdr":case"accdt":return"access";case"mpp":case"mppx":case"mpt":return"project";case"pub":return"publisher";case"xsn":return"infopath"}},t.prototype.command=function(t){switch(t.toLowerCase()){case"dot":case"dotx":case"dotm":case"xlt":case"xltx":case"xltm":case"pot":case"potx":case"potm":case"vst":case"vstx":case"accdt":case"mpt":return"nft";default:return"ofv"}},t}();Z.decorators=[{type:e.Pipe,args:[{name:"uriScheme",pure:!1}]}];var tt=function(){};tt.decorators=[{type:e.NgModule,args:[{imports:[o.CommonModule],declarations:[X,Z],exports:[X,Z],entryComponents:[]}]}],t.AuthenticationModule=A,t.AuthenticationService=D,t.AuthenticationServiceConfig=w,t.ConfirmationDialogComponent=x,t.DepartmentsPipe=F,t.DialogModule=S,t.EmailModule=E,t.EmailService=B,t.EmailServiceConfig=k,t.EmployeeByDnPipe=N,t.EmployeeModule=G,t.EmployeePhotoUrlPipe=R,t.EmployeeService=L,t.EmployeeServiceConfig=O,t.EmployeesWithPropertyValuePipe=j,t.FilterEmployeesPipe=q,t.InputDialogComponent=C,t.IsMemberOfPipe=H,t.LoginComponent=I,t.LoginFormComponent=U,t.MessageDialogComponent=M,t.SafeUrlPipe=X,t.SharePointModule=Y,t.SharePointPhotoUrlPipe=_,t.SharePointService=P,t.SharePointServiceConfig=T,t.SharePointUrlPipe=z,t.SortEmployeesPipe=V,t.UploadComponent=W,t.UploadDialogComponent=K,t.UploadModule=Q,t.UploadService=$,t.UploadServiceConfig=J,t.UriSchemePipe=Z,t.UrlModule=tt,t.ɵa=b,Object.defineProperty(t,"__esModule",{value:!0})}));
|
|
2
|
-
//# sourceMappingURL=cleavelandprice-ngx-lib.umd.min.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/dialog/model/confirmation-dialog-mode.enum.ts","../../src/dialog/components/_dialog/dialog.component.ts","../../src/dialog/components/confirmation-dialog/confirmation-dialog.component.ts","../../src/dialog/components/input-dialog/input-dialog.component.ts","../../src/dialog/components/message-dialog/message-dialog.component.ts","../../src/dialog/dialog.module.ts","../../src/authentication/model/authentication.service.config.ts","../../src/sharepoint/model/sharepoint.service.config.ts","../../src/sharepoint/services/sharepoint.service.ts","../../src/authentication/services/authentication.service.ts","../../src/authentication/components/login-form/login-form.component.ts","../../src/authentication/components/login/login.component.ts","../../src/authentication/authentication.module.ts","../../src/email/model/email.service.config.ts","../../src/email/services/email.service.ts","../../src/email/email.module.ts","../../src/employee/model/employee.service.config.ts","../../src/employee/services/employee.service.ts","../../src/employee/pipes/departments.pipe.ts","../../src/employee/pipes/employee-by-dn.pipe.ts","../../src/employee/pipes/employee-photo-url.pipe.ts","../../src/employee/pipes/employees-with-property-value.pipe.ts","../../src/employee/pipes/filter-employees.pipe.ts","../../src/employee/pipes/is-member-of.pipe.ts","../../src/employee/pipes/sort-employees.pipe.ts","../../src/employee/employee.module.ts","../../src/sharepoint/pipes/sharepoint-photo-url.pipe.ts","../../src/sharepoint/pipes/sharepoint-url.pipe.ts","../../src/sharepoint/sharepoint.module.ts","../../src/file-upload/model/upload.service.config.ts","../../src/file-upload/services/upload.service.ts","../../src/file-upload/components/upload-dialog/upload-dialog.component.ts","../../src/file-upload/components/upload/upload.component.ts","../../src/file-upload/upload.module.ts","../../src/url/pipes/safe-url.pipe.ts","../../src/url/pipes/uri-scheme.pipe.ts","../../src/url/url.module.ts"],"names":["ConfirmationDialogMode","DialogComponent","this","closed","EventEmitter","mode","OkCancel","customTrueFalseText","prototype","ngOnInit","data","title","message","checkboxMessage","placeholder","userInput","value","close","dialogType","checkbox","checkboxValue","response","emit","cancel","Component","args","selector","template","Input","Output","dialogRef","MatDialogRef","Inject","MAT_DIALOG_DATA","NgModule","imports","CommonModule","FormsModule","MatButtonModule","MatCheckboxModule","MatInputModule","MatDialogModule","declarations","ConfirmationDialogComponent","InputDialogComponent","MessageDialogComponent","exports","entryComponents","SharePointService","config","http","getListItems","request","username","password","post","sharePointApiUrl","getPeople","storePeople","_this","users","of","subscribe","getPhotos","storePhotos","photos","list","employeePhotoList","site","sharePointServerUrl","employeePhotoSite","additionalPropertiesToRetrieve","Injectable","SharePointServiceConfig","decorators","type","Optional","HttpClient","AuthenticationService","sharePointService","authenticatedChanged","authenticatingChanged","authenticating","authenticated","authenticationApiUrl","checkForExistingToken","login","adminGroup","responseType","body","token","validateUser","err","logout","localStorage","getItem","removeItem","authenticatedUser","jwtHelper","JwtHelperService","decoded","decodeToken","isTokenExpired","accountName","winaccountname","admin","role","setItem","getPhoto","employeeNumber","photo","find","pic","photoUrl","encodedAbsUrl","AuthenticationServiceConfig","LoginFormComponent","authenticationService","authenticate","LoginComponent","dialog","open","confirmLogout","afterClosed","result","MatDialog","AuthenticationModule","parentModule","Error","forRoot","authenticationConfig","ngModule","providers","provide","useValue","MatProgressBarModule","MatProgressSpinnerModule","MatTooltipModule","MatSelectModule","DialogModule","SkipSelf","EmailService","emailServiceConfig","send","email","dto","server","smtpPort","sender","subject","content","recipients","emailApiUrl","EmailServiceConfig","EmailModule","emailConfig","EmployeeService","employeeApiUrl","getEmployees","storeEmployees","includeDisabled","employees","get","emps","getEmployee","sAMAccountName","EmployeeServiceConfig","DepartmentsPipe","transform","departments","filter","emp","department","forEach","indexOf","push","sort","Pipe","name","EmployeeByDnPipe","dn","distinguishedName","toLowerCase","EmployeePhotoUrlPipe","employee","displayName","console","log","EmployeesWithPropertyValuePipe","propertyName","propertyValue","FilterEmployeesPipe","IsMemberOfPipe","groupName","memberOf","undefined","m","SortEmployeesPipe","sortBy","dataType","reverse","getSorted","sorted","a","b","valA","valB","toString","EmployeeModule","employeeConfig","SharePointPhotoUrlPipe","SharePointUrlPipe","url","split","SharePointModule","sharePointConfig","UploadService","uploadApiUrl","uploadPath","dbAppId","externalReferenceId","comment","uploadButtonText","uploadDialogTitle","uploadDialogAddFilesButtonText","uploadDialogCancelButtonText","uploadDialogUploadButtonText","uploadDialogFinishButtonText","upload","files","status","file","formData","FormData","append","req","HttpRequest","reportProgress","headers","HttpHeaders","set","progress","Subject","event","HttpEventType","UploadProgress","percentDone","Math","round","loaded","total","next","HttpResponse","complete","asObservable","exists","fileName","query","destination","download","getUploadInfo","UploadServiceConfig","UploadDialogComponent","uploadService","Set","canBeClosed","showCancelButton","uploading","uploadSuccessful","primaryButtonText","addFiles","nativeElement","click","onFilesAdded","key","isNaN","parseInt","this_1","existingFileConflict","add","closeDialog","allProgressObservables","disableClose","forkJoin","end","ViewChild","static","UploadComponent","dialogClosed","openUploadDialog","width","UploadModule","uploadConfig","BrowserAnimationsModule","HttpClientModule","MatListModule","SafeUrlPipe","domSanitizer","bypassSecurityTrustUrl","DomSanitizer","UriSchemePipe","urlSplit","extension","length","command","app","pure"],"mappings":"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","sourcesContent":["export enum ConfirmationDialogMode {\n OkCancel,\n YesNo,\n TrueFalse,\n Custom\n}\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { ConfirmationDialogMode } from './../../model/confirmation-dialog-mode.enum';\n\n@Component({\n selector: 'cp-dialog',\n templateUrl: './dialog.component.html',\n styleUrls: ['./dialog.component.css']\n})\nexport class DialogComponent implements OnInit {\n @Input() dialogType: string;\n @Input() data: any;\n @Output() closed = new EventEmitter<any>();\n\n ConfirmationDialogMode = ConfirmationDialogMode;\n mode = ConfirmationDialogMode.OkCancel;\n title: string;\n message: string;\n checkboxMessage: string;\n placeholder: string;\n customTrueFalseText: string[] = null;\n\n userInput: string;\n checkboxValue: boolean;\n\n ngOnInit(): void {\n if (this.data) {\n this.title = this.data.title || null;\n this.message = this.data.message || null;\n this.checkboxMessage = this.data.checkboxMessage || null;\n this.placeholder = this.data.placeholder || null;\n this.userInput = this.data.value || null;\n this.mode = this.data.mode || ConfirmationDialogMode.OkCancel;\n this.customTrueFalseText = this.data.customTrueFalseText;\n }\n }\n\n close(): void {\n let data: any;\n\n switch (this.dialogType) {\n case 'message':\n data = this.checkboxMessage ?\n {\n checkbox: this.checkboxValue || false\n } :\n null;\n break;\n case 'input':\n data = this.checkboxMessage ?\n {\n response: this.userInput,\n checkbox: this.checkboxValue || false\n } :\n this.userInput;\n break;\n case 'confirmation':\n data = this.checkboxMessage ?\n {\n response: true,\n checkbox: this.checkboxValue || false\n } :\n true;\n break;\n }\n\n this.closed.emit(data);\n }\n\n cancel(): void {\n let data: any;\n\n if (this.dialogType === 'confirmation') {\n data = this.checkboxMessage ?\n {\n response: false,\n checkbox: this.checkboxValue || false\n } :\n false;\n }\n\n this.closed.emit(data);\n }\n}\n","import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n selector: 'cp-confirmation-dialog',\n templateUrl: './confirmation-dialog.component.html'\n})\nexport class ConfirmationDialogComponent {\n\n constructor(public dialogRef: MatDialogRef<ConfirmationDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any) {\n }\n}\n","import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n selector: 'cp-input-dialog',\n templateUrl: './input-dialog.component.html'\n})\nexport class InputDialogComponent {\n constructor(public dialogRef: MatDialogRef<InputDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any) {\n }\n}\n","import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n selector: 'cp-message-dialog',\n templateUrl: './message-dialog.component.html'\n})\nexport class MessageDialogComponent {\n constructor(public dialogRef: MatDialogRef<MessageDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any) {\n }\n}\n","//#region Imports\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\n// Angular Material\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatInputModule } from '@angular/material/input';\n\n// Components\nimport { DialogComponent } from './components/_dialog/dialog.component';\nimport { ConfirmationDialogComponent } from './components/confirmation-dialog/confirmation-dialog.component';\nimport { InputDialogComponent } from './components/input-dialog/input-dialog.component';\nimport { MessageDialogComponent } from './components/message-dialog/message-dialog.component';\n//#endregion\n\n//#region Exports\n// Model\nexport * from './model/confirmation-dialog-mode.enum';\n\n// Components\nexport * from './components/confirmation-dialog/confirmation-dialog.component';\nexport * from './components/input-dialog/input-dialog.component';\nexport * from './components/message-dialog/message-dialog.component';\n//#endregion\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n MatButtonModule,\n MatCheckboxModule,\n MatInputModule,\n MatDialogModule\n ],\n declarations: [\n DialogComponent,\n ConfirmationDialogComponent,\n InputDialogComponent,\n MessageDialogComponent\n ],\n exports: [\n ConfirmationDialogComponent,\n InputDialogComponent,\n MessageDialogComponent\n ],\n entryComponents: [\n ConfirmationDialogComponent,\n InputDialogComponent,\n MessageDialogComponent\n ]\n})\nexport class DialogModule { }\n","export class AuthenticationServiceConfig {\n authenticationApiUrl: string;\n}\n","export class SharePointServiceConfig {\n sharePointApiUrl: string;\n sharePointServerUrl: string;\n employeePhotoSite: string;\n employeePhotoList: string;\n username: string;\n password: string;\n}\n","//#region Imports\nimport { Injectable, Optional } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\n\nimport { SharePointServiceConfig } from './../model/sharepoint.service.config';\n// import { SharePointList } from '../model/DELETE_sharepoint-list';\nimport { SharePointListItemsRequest } from './../model/sharepoint-list-items-request';\nimport { SharePointUserRequest } from './../model/sharepoint-user-request';\nimport { SharePointListItem } from './../model/sharepoint-list-item';\nimport { SharePointEmployeePicture } from './../model/sharepoint-employee-picture';\n// import { SharePointCustomerVisit } from './../model/sharepoint-customer-visit';\n// import { SharePointPerson } from '../model/DELETE_sharepoint-person';\nimport { SharePointUser } from '../model/sharepoint-user';\n//#endregion\n\n@Injectable()\nexport class SharePointService {\n //#region Fields\n // people: SharePointPerson[];\n users: SharePointUser[];\n photos: SharePointEmployeePicture[];\n //#endregion\n\n constructor(@Optional() private config: SharePointServiceConfig,\n private http: HttpClient) { }\n\n //#region Utilities\n getListItems(request: SharePointListItemsRequest): Observable<SharePointListItem[]> {\n if (!request.username) { request.username = this.config.username; }\n if (!request.password) { request.password = this.config.password; }\n\n return this.http.post<SharePointListItem[]>(`${this.config.sharePointApiUrl}/listitems`, request);\n }\n\n /*getListItemsSimple(list: string, view: string, site?: string, limit?: string): Observable<SharePointListItem[]> {\n return this.http.get<SharePointListItem[]>(`${this.config.sharePointApiUrl}/${list}/${view}/${site}/${limit}`);\n }*/\n\n getPeople(request: SharePointUserRequest, storePeople?: boolean): Observable<SharePointUser[]> {\n // Do we already have people stored locally?\n if (this.users) {\n return of(this.users);\n }\n\n if (!request.username) { request.username = this.config.username; }\n if (!request.password) { request.password = this.config.password; }\n\n // Should we store people locally for subsequent calls?\n if (storePeople) {\n this.http.post<SharePointUser[]>(`${this.config.sharePointApiUrl}/users`, request)\n .subscribe(users => this.users = users);\n }\n\n return this.http.post<SharePointUser[]>(`${this.config.sharePointApiUrl}/users`, request);\n }\n\n getPhotos(storePhotos?: boolean): Observable<SharePointEmployeePicture[]> {\n // Do we already have photos stored locally?\n if (this.photos) {\n return of(this.photos);\n }\n\n const request: SharePointListItemsRequest = {\n list: this.config.employeePhotoList,\n site: `${this.config.sharePointServerUrl}/${this.config.employeePhotoSite}`,\n username: this.config.username,\n password: this.config.password,\n additionalPropertiesToRetrieve: [ 'EncodedAbsUrl' ]\n };\n\n // Should we store photos locally for subsequent calls?\n if (storePhotos) {\n this.http.post<SharePointEmployeePicture[]>(`${this.config.sharePointApiUrl}/listitems`, request)\n .subscribe(photos => this.photos = photos);\n }\n\n return this.http.post<SharePointEmployeePicture[]>(`${this.config.sharePointApiUrl}/listitems`, request);\n }\n\n /*getCustomerVisits(): Observable<SharePointCustomerVisit[]> {\n const list: SharePointList = {\n list: 'Customer Visits',\n view: 'All Events',\n userName: this.config.userName,\n password: this.config.password\n };\n\n return this.http.post<SharePointCustomerVisit[]>(this.config.sharePointApiUrl, list);\n }*/\n //#endregion\n}\n","//#region Imports\nimport { Injectable, Output, EventEmitter, Optional } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { AuthenticationToken } from './../model/authentication-token';\n// import { JwtHelper } from 'angular2-jwt';\nimport { JwtHelperService } from '@auth0/angular-jwt';\nimport { AuthenticationServiceConfig } from './../model/authentication.service.config';\nimport { SharePointService } from './../../sharepoint/services/sharepoint.service';\n//#endregion\n\n/**\n * Authenticate Active Directory user\n */\n@Injectable()\nexport class AuthenticationService {\n //#region Fields\n /**\n * @ignore\n */\n private authenticationApiUrl: string;\n\n @Output() authenticatedChanged = new EventEmitter<boolean>();\n @Output() authenticatingChanged = new EventEmitter<boolean>();\n\n /**\n * Flag set to true while the service is attempting to authenticate the user\n */\n authenticating = false;\n\n /**\n * Flag set to true when the user is successfully authenticated\n */\n authenticated = false;\n\n /**\n * Object representing the authenticated user\n */\n /*authenticatedUser: {\n admin: boolean,\n accountName: string,\n displayName: string,\n distinguishedName: string;\n employeeNumber: string;\n photoUrl?: string;\n memberOf?: string;\n };*/\n authenticatedUser: AuthenticationToken;\n //#endregion\n\n //#region Lifecycle\n /**\n * @ignore\n */\n constructor( @Optional() config: AuthenticationServiceConfig,\n private http: HttpClient,\n private sharePointService: SharePointService) {\n\n this.authenticationApiUrl = config.authenticationApiUrl;\n this.checkForExistingToken();\n }\n //#endregion\n\n //#region Utilities\n /**\n * Authenticate the user and store the token in Local Storage\n *\n * @param username AD sAMAccountName\n * @param password\n * @param adminGroup AD group that determines if authenticated user is considered an administrator of the app\n */\n login(username: string, password: string, adminGroup?: string): void {\n const request = {\n username: username,\n password: password,\n adminGroup: adminGroup\n };\n\n this.authenticating = true;\n this.authenticatingChanged.emit(this.authenticating);\n\n this.http.request('POST', this.authenticationApiUrl, { responseType: 'text', body: request})\n // this.http.post<string>(this.authenticationApiUrl, request)\n .subscribe(token => this.validateUser(token),\n err => {\n this.authenticating = false;\n this.authenticatingChanged.emit(this.authenticating);\n });\n }\n\n /**\n * Logout the user and delete the token from Local Storage\n */\n logout(): void {\n if (localStorage.getItem('token')) {\n localStorage.removeItem('token');\n }\n\n this.authenticatedUser = null;\n this.authenticated = false;\n this.authenticatedChanged.emit(false);\n }\n\n /**\n * @ignore\n */\n private validateUser(token: string): void {\n if (!token) { return; }\n\n const jwtHelper = new JwtHelperService();\n const decoded = jwtHelper.decodeToken(token) as AuthenticationToken;\n\n if (jwtHelper.isTokenExpired(token)) {\n this.logout();\n return;\n }\n\n this.authenticatedUser = decoded;\n this.authenticatedUser.accountName = decoded.winaccountname;\n this.authenticatedUser.admin = decoded.role === 'Admin';\n\n localStorage.setItem('token', token);\n\n this.getPhoto();\n\n this.authenticated = true;\n this.authenticatedChanged.emit(this.authenticated);\n\n this.authenticating = false;\n this.authenticatingChanged.emit(this.authenticating);\n }\n\n /**\n * @ignore\n */\n private getPhoto(): void {\n this.sharePointService.getPhotos()\n .subscribe(photos => {\n // The user may have been logged out by the time the photos came back\n if (!this.authenticatedUser || !this.authenticatedUser.employeeNumber) {\n return;\n }\n\n const photo = photos.find(pic => +pic.employeeNumber === +this.authenticatedUser.employeeNumber);\n\n if (photo) {\n this.authenticatedUser.photoUrl = photo.encodedAbsUrl;\n }\n });\n }\n\n /**\n * @ignore\n */\n private checkForExistingToken(): void {\n if (localStorage.getItem('token')) {\n this.validateUser(localStorage.getItem('token'));\n }\n }\n //#endregion\n}\n","import { Component, OnInit, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { AuthenticationService } from './../../services/authentication.service';\nimport { SharePointService } from './../../../sharepoint/services/sharepoint.service';\n\n@Component({\n selector: 'cp-login-form',\n templateUrl: './login-form.component.html',\n styleUrls: ['./login-form.component.css']\n})\nexport class LoginFormComponent implements OnInit {\n username: string;\n password: string;\n adminGroup: string;\n loginError: boolean;\n\n constructor(public dialogRef: MatDialogRef<LoginFormComponent>,\n private sharePointService: SharePointService,\n public authenticationService: AuthenticationService,\n @Inject(MAT_DIALOG_DATA) public data: any) {\n this.adminGroup = data.adminGroup;\n }\n\n ngOnInit(): void {\n this.authenticationService.authenticatedChanged\n .subscribe((authenticated: boolean) => {\n if (authenticated) {\n this.dialogRef.close();\n }\n });\n }\n\n authenticate() {\n if (!this.sharePointService || !this.username || !this.password) {\n return;\n }\n this.authenticationService.login(this.username, this.password, this.adminGroup);\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { LoginFormComponent } from './../login-form/login-form.component';\nimport { AuthenticationService } from './../../services/authentication.service';\nimport { ConfirmationDialogComponent } from './../../../dialog/components/confirmation-dialog/confirmation-dialog.component';\n\n@Component({\n selector: 'cp-login',\n templateUrl: './login.component.html',\n styleUrls: ['./login.component.css']\n})\nexport class LoginComponent {\n @Input() adminGroup: string;\n\n constructor(public dialog: MatDialog,\n public authenticationService: AuthenticationService) {\n }\n\n login(): void {\n this.dialog.open(LoginFormComponent, {\n data: { adminGroup: this.adminGroup }\n });\n }\n\n confirmLogout(): void {\n const dialogRef = this.dialog.open(ConfirmationDialogComponent, {\n data: { message: `Are you sure you want to logout?` }\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n this.authenticationService.logout();\n }\n });\n }\n}\n","//#region Imports\nimport { NgModule, ModuleWithProviders, Optional, SkipSelf } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\n// Angular Material\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\n// Modules\nimport { DialogModule } from './../dialog/dialog.module';\n\n// Services\nimport { AuthenticationServiceConfig } from './model/authentication.service.config';\nimport { AuthenticationService } from './services/authentication.service';\n\n// Components\nimport { LoginComponent } from './components/login/login.component';\nimport { LoginFormComponent } from './components/login-form/login-form.component';\n//#endregion\n\n//#region Exports\n// Model\nexport * from './model/authentication.service.config';\nexport * from './model/authentication-token';\n\n// Services\nexport * from './services/authentication.service';\n\n// Components\nexport * from './components/login/login.component';\nexport * from './components/login-form/login-form.component';\n//#endregion\n\n/**\n * Provides a component and a service that allows you to perform Active/Directory authentication\n */\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n MatButtonModule,\n MatCheckboxModule,\n MatDialogModule,\n MatInputModule,\n MatProgressBarModule,\n MatProgressSpinnerModule,\n MatTooltipModule,\n MatSelectModule,\n DialogModule\n ],\n declarations: [\n LoginComponent,\n LoginFormComponent\n ],\n exports: [\n LoginComponent,\n LoginFormComponent\n ],\n providers: [],\n entryComponents: [\n LoginFormComponent\n ]\n})\nexport class AuthenticationModule {\n static forRoot(authenticationConfig: AuthenticationServiceConfig): ModuleWithProviders<AuthenticationModule> {\n return {\n ngModule: AuthenticationModule,\n providers: [\n AuthenticationService,\n { provide: AuthenticationServiceConfig, useValue: authenticationConfig }\n ]\n };\n }\n\n constructor( @Optional() @SkipSelf() parentModule: AuthenticationModule) {\n if (parentModule) {\n throw new Error(\n 'AuthenticationModule is already loaded. Import it in the AppModule only');\n }\n }\n}\n","import { EmailSender } from './email-sender';\n\nexport class EmailServiceConfig {\n emailApiUrl: string;\n server: string;\n smtpPort: number;\n sender: EmailSender;\n}\n","//#region Imports\nimport { Injectable, Optional } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { EmailServiceConfig } from './../model/email.service.config';\nimport { Email } from './../model/email';\nimport { EmailDto } from './../model/email-dto';\n//#endregion\n\n@Injectable()\nexport class EmailService {\n private emailServiceConfig: EmailServiceConfig;\n\n constructor(@Optional() config: EmailServiceConfig,\n private http: HttpClient) {\n this.emailServiceConfig = config;\n }\n\n send(email: Email): Observable<Email> {\n const dto: EmailDto = {\n server: this.emailServiceConfig.server,\n smtpPort: this.emailServiceConfig.smtpPort,\n sender: this.emailServiceConfig.sender,\n subject: email.subject,\n content: email.content,\n recipients: email.recipients\n };\n\n return this.http.post<Email>(this.emailServiceConfig.emailApiUrl, dto);\n }\n}\n","//#region Imports\nimport { NgModule, ModuleWithProviders, Optional, SkipSelf } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n// Services\nimport { EmailServiceConfig } from './model/email.service.config';\nimport { EmailService } from './services/email.service';\n//#endregion\n\n//#region Exports\n// Model\nexport * from './model/email.service.config';\nexport * from './model/email';\n\n// Services\nexport * from './services/email.service';\n//#endregion\n\n@NgModule({\n imports: [ CommonModule ],\n declarations: [],\n exports: []\n})\nexport class EmailModule {\n static forRoot(emailConfig: EmailServiceConfig): ModuleWithProviders<EmailModule> {\n return {\n ngModule: EmailModule,\n providers: [\n EmailService,\n { provide: EmailServiceConfig, useValue: emailConfig }\n ]\n };\n }\n\n constructor( @Optional() @SkipSelf() parentModule: EmailModule) {\n if (parentModule) {\n throw new Error(\n 'EmailModule is already loaded. Import it in the AppModule only');\n }\n }\n}\n","export class EmployeeServiceConfig {\n employeeApiUrl: string;\n}\n","//#region Imports\nimport { Injectable, Optional } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\n\nimport { Employee } from './../model/employee';\nimport { EmployeeServiceConfig } from './../model/employee.service.config';\n//#endregion\n\n@Injectable()\nexport class EmployeeService {\n //#region Fields\n private employeeApiUrl: string;\n employees: Employee[];\n //#endregion\n\n //#region Lifecycle\n constructor( @Optional() config: EmployeeServiceConfig,\n private http: HttpClient) {\n this.employeeApiUrl = config.employeeApiUrl;\n }\n //#endregion\n\n //#region Utilities\n getEmployees(storeEmployees = false, includeDisabled = false): Observable<Employee[]> {\n // Do we already have employees stored locally?\n if (this.employees) {\n return of(this.employees);\n // return Observable.of(this.employees);\n }\n\n // Should we store employees locally for subsequent calls?\n if (storeEmployees) {\n this.http.get<Employee[]>(`${this.employeeApiUrl}/false/${includeDisabled}`)\n .subscribe(emps => this.employees = emps);\n }\n\n return this.http.get<Employee[]>(`${this.employeeApiUrl}/false/${includeDisabled}`);\n }\n\n getEmployee(sAMAccountName: string): Observable<Employee> {\n return this.http.get<Employee>(`${this.employeeApiUrl}/name/${sAMAccountName}`);\n }\n //#endregion\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Employee } from './../model/employee';\n\n@Pipe({\n name: 'departments'\n})\nexport class DepartmentsPipe implements PipeTransform {\n\n transform(employees: Employee[], args?: any): string[] {\n const departments: string[] = [];\n\n employees\n .filter(emp => emp.department)\n .forEach(emp => {\n if (departments.indexOf(emp.department) === -1) {\n departments.push(emp.department);\n }\n });\n\n return departments.sort();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Employee } from './../model/employee';\n\n@Pipe({\n name: 'employeeByDn'\n})\nexport class EmployeeByDnPipe implements PipeTransform {\n\n transform(employees: Employee[], dn: string): Employee {\n return employees\n .find(emp => emp.distinguishedName.toLowerCase() === dn.toLowerCase());\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Employee } from './../model/employee';\nimport { SharePointEmployeePicture } from './../../sharepoint/model/sharepoint-employee-picture';\n\n@Pipe({\n name: 'employeePhotoUrl'\n})\nexport class EmployeePhotoUrlPipe implements PipeTransform {\n transform(employee: Employee, photos: SharePointEmployeePicture[]): any {\n if (!photos) { return null; }\n\n // Try to match by employeeNumber, accountName, or title\n const photo = photos\n .find(pic =>\n (pic.employeeNumber && employee.employeeNumber && +pic.employeeNumber === +employee.employeeNumber) ||\n (pic.accountName && pic.accountName.toLowerCase() === employee.sAMAccountName.toLowerCase()) ||\n (pic.title && pic.title.toLowerCase() === employee.displayName.toLowerCase()));\n\n if (!photo) {\n console.log(`No photo match for ${employee.displayName}`);\n }\n\n return photo ? photo.encodedAbsUrl : null;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Employee } from './../model/employee';\n\n@Pipe({\n name: 'employeesWithPropertyValue'\n})\nexport class EmployeesWithPropertyValuePipe implements PipeTransform {\n\n transform(employees: Employee[], propertyName: string, propertyValue: any): Employee[] {\n return employees\n .filter(emp => emp[propertyName] && emp[propertyName] === propertyValue);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Employee } from './../model/employee';\n\n@Pipe({\n name: 'filterEmployees'\n})\nexport class FilterEmployeesPipe implements PipeTransform {\n transform(employees: Employee[], filter: string): Employee[] {\n return filter ?\n employees\n .filter(emp =>\n emp.displayName.toLowerCase().indexOf(filter.toLowerCase()) !== -1 ||\n (emp.department && emp.department.toLowerCase().indexOf(filter.toLowerCase()) !== -1) ||\n (emp.title && emp.title.toLowerCase().indexOf(filter.toLowerCase()) !== -1) ||\n emp.sAMAccountName.toLowerCase().indexOf(filter.toLowerCase()) !== -1\n ) :\n employees;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Employee } from './../model/employee';\n\n@Pipe({\n name: 'isMemberOf'\n})\nexport class IsMemberOfPipe implements PipeTransform {\n\n transform(employee: Employee, groupName: string): boolean {\n return employee.memberOf &&\n (employee.memberOf.find(m => m.toLowerCase().indexOf(groupName.toLowerCase()) !== -1) !== undefined);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Employee } from './../model/employee';\n\n@Pipe({\n name: 'sortEmployees'\n})\nexport class SortEmployeesPipe implements PipeTransform {\n transform(employees: Employee[], sortBy?: string, dataType?: string, reverse?: boolean): Employee[] {\n return this.getSorted(employees,\n sortBy ? sortBy : 'displayName',\n dataType ? dataType : 'string',\n reverse ? reverse : false);\n }\n\n private getSorted(employees: Employee[], sortBy: string, dataType: string, reverse: boolean): Employee[] {\n const sorted = employees\n .sort((a, b) => {\n let valA, valB: any;\n\n switch (dataType.toLowerCase()) {\n case 'string':\n valA = a[sortBy] ? a[sortBy].toString().toLowerCase() : null;\n valB = b[sortBy] ? b[sortBy].toString().toLowerCase() : null;\n break;\n case 'number':\n valA = a[sortBy] ? +a[sortBy] : null;\n valB = b[sortBy] ? +b[sortBy] : null;\n break;\n case 'date':\n valA = a[sortBy] ? a[sortBy] as Date : null;\n valB = b[sortBy] ? b[sortBy] as Date : null;\n break;\n }\n\n if (valA < valB) { return -1; }\n if (valA > valB) { return 1; }\n return 0;\n });\n\n return reverse ? sorted.reverse() : sorted;\n }\n}\n","//#region Imports\nimport { NgModule, ModuleWithProviders, Optional, SkipSelf } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n// Services\nimport { EmployeeServiceConfig } from './model/employee.service.config';\nimport { EmployeeService } from './services/employee.service';\n\n// Pipes\nimport { DepartmentsPipe } from './pipes/departments.pipe';\nimport { EmployeeByDnPipe } from './pipes/employee-by-dn.pipe';\nimport { EmployeePhotoUrlPipe } from './pipes/employee-photo-url.pipe';\nimport { EmployeesWithPropertyValuePipe } from './pipes/employees-with-property-value.pipe';\nimport { FilterEmployeesPipe } from './pipes/filter-employees.pipe';\nimport { IsMemberOfPipe } from './pipes/is-member-of.pipe';\nimport { SortEmployeesPipe } from './pipes/sort-employees.pipe';\n//#endregion\n\n//#region Exports\n// Model\nexport * from './model/employee.service.config';\nexport * from './model/employee';\n\n// Services\nexport * from './services/employee.service';\n\n// Pipes\nexport * from './pipes/departments.pipe';\nexport * from './pipes/employee-by-dn.pipe';\nexport * from './pipes/employee-photo-url.pipe';\nexport * from './pipes/employees-with-property-value.pipe';\nexport * from './pipes/filter-employees.pipe';\nexport * from './pipes/is-member-of.pipe';\nexport * from './pipes/sort-employees.pipe';\n//#endregion\n\n@NgModule({\n imports: [CommonModule],\n declarations: [\n DepartmentsPipe,\n EmployeeByDnPipe,\n EmployeesWithPropertyValuePipe,\n FilterEmployeesPipe,\n IsMemberOfPipe,\n EmployeePhotoUrlPipe,\n SortEmployeesPipe\n ],\n exports: [\n DepartmentsPipe,\n EmployeeByDnPipe,\n EmployeesWithPropertyValuePipe,\n FilterEmployeesPipe,\n IsMemberOfPipe,\n EmployeePhotoUrlPipe,\n SortEmployeesPipe\n ]\n})\nexport class EmployeeModule {\n static forRoot(employeeConfig: EmployeeServiceConfig): ModuleWithProviders<EmployeeModule> {\n return {\n ngModule: EmployeeModule,\n providers: [\n EmployeeService,\n { provide: EmployeeServiceConfig, useValue: employeeConfig }\n ]\n };\n }\n\n constructor( @Optional() @SkipSelf() parentModule: EmployeeModule) {\n if (parentModule) {\n throw new Error(\n 'EmployeeModule is already loaded. Import it in the AppModule only');\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SharePointPicture } from './../model/sharepoint-picture';\n\n@Pipe({\n name: 'sharePointPhotoUrl'\n})\nexport class SharePointPhotoUrlPipe implements PipeTransform {\n transform(photo: SharePointPicture): string {\n return photo.encodedAbsUrl;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'sharePointUrl'\n})\nexport class SharePointUrlPipe implements PipeTransform {\n\n transform(url: string): string {\n return url !== null ? url.split(',')[0] : null;\n }\n}\n","//#region Imports\nimport { NgModule, ModuleWithProviders, Optional, SkipSelf } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n// Services\nimport { SharePointServiceConfig } from './model/sharepoint.service.config';\nimport { SharePointService } from './services/sharepoint.service';\n\n// Pipes\nimport { SharePointPhotoUrlPipe } from './pipes/sharepoint-photo-url.pipe';\nimport { SharePointUrlPipe } from './pipes/sharepoint-url.pipe';\n//#endregion\n\n//#region Exports\n// Model\nexport * from './model/sharepoint-calendar-event';\nexport * from './model/sharepoint-customer-visit';\nexport * from './model/sharepoint-employee-picture';\n// export * from './model/sharepoint-list';\nexport * from './model/sharepoint-list-item';\n// export * from './model/sharepoint-person';\nexport * from './model/sharepoint-user';\nexport * from './model/sharepoint-picture';\nexport * from './model/sharepoint-list-items-request';\nexport * from './model/sharepoint-user-request';\nexport * from './model/sharepoint-uri-request';\nexport * from './model/sharepoint.service.config';\n\n// Services\nexport * from './services/sharepoint.service';\n\n// Pipes\nexport * from './pipes/sharepoint-photo-url.pipe';\nexport * from './pipes/sharepoint-url.pipe';\n//#endregion\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [\n SharePointPhotoUrlPipe,\n SharePointUrlPipe\n ],\n exports: [\n SharePointPhotoUrlPipe,\n SharePointUrlPipe\n ]\n})\nexport class SharePointModule {\n static forRoot(sharePointConfig: SharePointServiceConfig): ModuleWithProviders<SharePointModule> {\n return {\n ngModule: SharePointModule,\n providers: [\n SharePointService,\n { provide: SharePointServiceConfig, useValue: sharePointConfig }\n ]\n };\n }\n\n constructor( @Optional() @SkipSelf() parentModule: SharePointModule) {\n if (parentModule) {\n throw new Error(\n 'SharePointModule is already loaded. Import it in the AppModule only');\n }\n }\n}\n","export class UploadServiceConfig {\n uploadApiUrl: string;\n uploadPath?: string;\n dbAppId?: string;\n externalReferenceId?: string;\n comment?: string;\n\n // UI configuration\n uploadButtonText?: string;\n uploadDialogTitle?: string;\n uploadDialogAddFilesButtonText?: string;\n uploadDialogCancelButtonText?: string;\n uploadDialogUploadButtonText?: string;\n uploadDialogFinishButtonText?: string;\n}\n","import { Injectable, Optional } from '@angular/core';\nimport { HttpClient, HttpRequest, HttpEventType, HttpResponse, HttpHeaders } from '@angular/common/http';\nimport { Subject , Observable } from 'rxjs';\nimport { UploadServiceConfig } from './../model/upload.service.config';\nimport { FileUploadRequest } from './../model/file-upload-request';\nimport { DatabaseFileInfo } from './../model/database-file-info';\nimport { FilesystemFileInfo } from './../model/filesystem-file-info';\n\n// https://malcoded.com/posts/angular-file-upload-component-with-express\n\n@Injectable()\nexport class UploadService {\n public uploadApiUrl: string;\n public uploadPath: string;\n public dbAppId: string;\n public externalReferenceId: string;\n public comment: string;\n\n // UI configuration\n public uploadButtonText: string;\n public uploadDialogTitle: string;\n public uploadDialogAddFilesButtonText: string;\n public uploadDialogCancelButtonText: string;\n public uploadDialogUploadButtonText: string;\n public uploadDialogFinishButtonText: string;\n\n constructor(private http: HttpClient,\n @Optional() config: UploadServiceConfig) {\n this.uploadApiUrl = config.uploadApiUrl;\n this.uploadPath = config.uploadPath || '';\n this.dbAppId = config.dbAppId || '';\n this.externalReferenceId = config.externalReferenceId || '';\n this.comment = config.comment || '';\n\n // UI configuration\n this.uploadButtonText = config.uploadButtonText;\n this.uploadDialogTitle = config.uploadDialogTitle;\n this.uploadDialogAddFilesButtonText = config.uploadDialogAddFilesButtonText;\n this.uploadDialogCancelButtonText = config.uploadDialogCancelButtonText;\n this.uploadDialogUploadButtonText = config.uploadDialogUploadButtonText;\n this.uploadDialogFinishButtonText = config.uploadDialogFinishButtonText;\n }\n\n public upload(files: Set<File>): {[key: string]: Observable<number>} {\n // this will be the our resulting map\n const status = {};\n\n files.forEach(file => {\n // create a new multipart-form for every file\n const formData: FormData = new FormData();\n formData.append('file', file, file.name);\n\n // create a http-post request and pass the form\n // tell it to report the upload progress\n\n // A 'Destination' header is used to optionally configure the file upload destination (filesystem)\n // A 'DbAppId' header is used to configure the unique identifier of database uploads\n const req = new HttpRequest('POST', this.uploadApiUrl, formData, {\n reportProgress: true,\n responseType: 'blob',\n headers: new HttpHeaders()\n .set('Destination', this.uploadPath)\n .set('DbAppId', this.dbAppId)\n .set('ExternalReferenceId', this.externalReferenceId)\n .set('Comment', this.comment)\n /*headers: this.uploadPath ?\n new HttpHeaders({ 'Destination': this.uploadPath }) :\n this.dbAppId ?\n new HttpHeaders({ 'DbAppId': this.dbAppId }) :\n null*/\n });\n\n // create a new progress-subject for every file\n const progress = new Subject<number>();\n\n // send the http-request and subscribe for progress-updates\n this.http.request(req).subscribe(event => {\n if (event.type === HttpEventType.UploadProgress) {\n\n // calculate the progress percentage\n const percentDone = Math.round(100 * event.loaded / event.total);\n\n // pass the percentage into the progress-stream\n progress.next(percentDone);\n } else if (event instanceof HttpResponse) {\n\n // Close the progress-stream if we get an answer form the API\n // The upload is complete\n progress.complete();\n }\n });\n\n // Save every progress-observable in a map of all observables\n status[file.name] = {\n progress: progress.asObservable()\n };\n });\n\n // return the map of progress.observables\n return status;\n }\n\n public exists(fileName: string): Observable<boolean> {\n const query = this.uploadApiUrl.toLowerCase().indexOf('filesystem') === -1 ?\n { name: fileName, dbAppId: this.dbAppId } :\n { name: fileName, destination: this.uploadPath };\n\n return this.http.post<boolean>(`${this.uploadApiUrl}/exists`, query);\n }\n\n public download(request: FileUploadRequest): Observable<Blob> {\n return this.http.post(`${this.uploadApiUrl}/stream`, request, { responseType: 'blob' });\n }\n\n public getUploadInfo(request: FileUploadRequest):\n Observable<DatabaseFileInfo | DatabaseFileInfo[] | FilesystemFileInfo | FilesystemFileInfo[]> {\n return this.http.post<DatabaseFileInfo | DatabaseFileInfo[] | FilesystemFileInfo | FilesystemFileInfo[]>\n (`${this.uploadApiUrl}/info`, request);\n }\n}\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { UploadService } from './../../services/upload.service';\nimport { forkJoin } from 'rxjs';\n\n@Component({\n selector: 'cp-upload-dialog',\n templateUrl: './upload-dialog.component.html',\n styleUrls: ['./upload-dialog.component.css']\n})\nexport class UploadDialogComponent implements OnInit {\n @ViewChild('file', { static: true }) file;\n public files: Set<File> = new Set();\n existingFileConflict: string;\n\n // State\n progress;\n canBeClosed = true;\n primaryButtonText: string;\n showCancelButton = true;\n uploading = false;\n uploadSuccessful = false;\n\n // UI configuration\n uploadDialogTitle: string;\n uploadDialogAddFilesButtonText: string;\n uploadDialogCancelButtonText: string;\n uploadDialogUploadButtonText: string;\n uploadDialogFinishButtonText: string;\n\n constructor(public dialogRef: MatDialogRef<UploadDialogComponent>, public uploadService: UploadService) { }\n\n ngOnInit() {\n this.uploadDialogTitle = this.uploadService.uploadDialogTitle ?\n this.uploadService.uploadDialogTitle :\n 'Upload Files';\n\n this.uploadDialogAddFilesButtonText = this.uploadService.uploadDialogAddFilesButtonText ?\n this.uploadService.uploadDialogAddFilesButtonText :\n 'Add Files';\n\n this.uploadDialogCancelButtonText = this.uploadService.uploadDialogCancelButtonText ?\n this.uploadService.uploadDialogCancelButtonText :\n 'Cancel';\n\n this.uploadDialogUploadButtonText = this.uploadService.uploadDialogUploadButtonText ?\n this.uploadService.uploadDialogUploadButtonText :\n 'Upload';\n\n this.uploadDialogFinishButtonText = this.uploadService.uploadDialogFinishButtonText ?\n this.uploadService.uploadDialogFinishButtonText :\n 'Finish';\n\n this.primaryButtonText = this.uploadDialogUploadButtonText;\n }\n\n addFiles() {\n this.file.nativeElement.click();\n }\n\n onFilesAdded() {\n const files: { [key: string]: File } = this.file.nativeElement.files;\n for (const key in files) {\n if (!isNaN(parseInt(key))) {\n // See if the file already exists\n this.uploadService.exists(files[key].name)\n .subscribe(exists => {\n if (exists) {\n this.existingFileConflict = files[key].name;\n }\n\n if (!exists) {\n this.files.add(files[key]);\n }\n });\n }\n }\n }\n\n closeDialog() {\n // if everything was uploaded already, just close the dialog\n if (this.uploadSuccessful) {\n return this.dialogRef.close();\n }\n\n // set the component state to \"uploading\"\n this.uploading = true;\n\n // start the upload and save the progress map\n this.progress = this.uploadService.upload(this.files);\n\n // convert the progress map into an array\n const allProgressObservables = [];\n\n for (let key in this.progress) {\n allProgressObservables.push(this.progress[key].progress);\n }\n\n // Adjust the state variables\n\n // The OK-button should have the text \"Finish\" now\n this.primaryButtonText = this.uploadDialogFinishButtonText;\n\n // The dialog should not be closed while uploading\n this.canBeClosed = false;\n this.dialogRef.disableClose = true;\n\n // Hide the cancel-button\n this.showCancelButton = false;\n\n // When all progress-observables are completed...\n forkJoin(allProgressObservables).subscribe(end => {\n // ... the dialog can be closed again...\n this.canBeClosed = true;\n this.dialogRef.disableClose = false;\n\n // ... the upload was successful...\n this.uploadSuccessful = true;\n\n // ... and the component is no longer uploading\n this.uploading = false;\n });\n }\n}\n","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { UploadDialogComponent } from './../upload-dialog/upload-dialog.component';\nimport { UploadService } from './../../services/upload.service';\n\n@Component({\n selector: 'cp-upload',\n template: '<button mat-raised-button (click)=\"openUploadDialog()\">{{ uploadButtonText }}</button>'\n})\nexport class UploadComponent implements OnInit {\n @Output() dialogClosed = new EventEmitter();\n uploadButtonText: string;\n\n constructor(public dialog: MatDialog, public uploadService: UploadService) { }\n\n ngOnInit(): void {\n this.uploadButtonText = this.uploadService.uploadButtonText ?\n this.uploadService.uploadButtonText :\n 'Upload';\n }\n\n public openUploadDialog() {\n this.dialog.open(UploadDialogComponent, { width: '50%' })\n .afterClosed().subscribe(() => this.dialogClosed.emit());\n }\n}\n","//#region Imports\nimport { CommonModule } from '@angular/common';\nimport { NgModule, ModuleWithProviders, Optional, SkipSelf } from '@angular/core';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations'\nimport { HttpClientModule } from '@angular/common/http';\n\n// Angular Material\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatListModule } from '@angular/material/list';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\n\n// Services\nimport { UploadServiceConfig } from './model/upload.service.config';\nimport { UploadService } from './services/upload.service';\n\n// Components\nimport { UploadDialogComponent } from './components/upload-dialog/upload-dialog.component';\nimport { UploadComponent } from './components/upload/upload.component';\n//#endregion\n\n//#region Exports\n// Model\nexport * from './model/database-file-info';\nexport * from './model/file-upload-request';\nexport * from './model/filesystem-file-info';\nexport * from './model/upload.service.config';\n\n// Services\nexport * from './services/upload.service';\n\n// Components\nexport * from './components/upload-dialog/upload-dialog.component';\nexport * from './components/upload/upload.component';\n//#endregion\n\n@NgModule({\n imports: [\n CommonModule,\n BrowserAnimationsModule,\n HttpClientModule,\n\n MatButtonModule,\n MatDialogModule,\n MatListModule,\n MatProgressBarModule],\n declarations: [\n UploadComponent,\n UploadDialogComponent\n ],\n exports: [\n UploadComponent,\n UploadDialogComponent\n ],\n entryComponents: [\n UploadDialogComponent\n ]\n })\n export class UploadModule {\n static forRoot(uploadConfig: UploadServiceConfig): ModuleWithProviders<UploadModule> {\n return {\n ngModule: UploadModule,\n providers: [\n UploadService,\n { provide: UploadServiceConfig, useValue: uploadConfig }\n ]\n };\n }\n\n constructor(@Optional() @SkipSelf() parentModule: UploadModule) {\n if (parentModule) {\n throw new Error(\n 'UploadModule is already loaded. Import it in the AppModule only');\n }\n }\n }\n","// This pipe whitelists URLs so that they aren't prefixed with 'unsafe:' when they render in the DOM\n\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\n\n@Pipe({\n name: 'safeUrl'\n})\nexport class SafeUrlPipe implements PipeTransform {\n\n constructor(private domSanitizer: DomSanitizer) { }\n\n transform(value: string): SafeUrl {\n return this.domSanitizer.bypassSecurityTrustUrl(value);\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'uriScheme',\n pure: false\n})\nexport class UriSchemePipe implements PipeTransform {\n // https://docs.microsoft.com/en-us/office/client-developer/office-uri-schemes\n\n transform(value: string): string {\n if (!localStorage.getItem('useUriScheme')) { return value; }\n\n const urlSplit = value.split('.');\n const extension = urlSplit[urlSplit.length - 1];\n\n if (!extension) { return value; }\n\n const command = this.command(extension);\n const app = this.app(extension);\n\n return `ms-${app}:${command}|u|${value}`;\n }\n\n private app(extension: string): string {\n switch (extension.toLowerCase()) {\n // documents\n case 'doc': case 'docx':\n case 'docm': case 'docb':\n case 'dot': case 'dotx': case 'dotm': // templates\n return 'word';\n case 'xls': case 'xlsx':\n case 'xlm': case 'xlsm': case 'xlsb': case 'xlw':\n case 'xlt': case 'xltx': case 'xltm': // templates\n return 'excel';\n case 'ppt': case 'pptx':\n case 'pps': case 'ppsx': case 'pptm': case 'ppsm':\n case 'sldx': case 'sldm':\n case 'pot': case 'potx': case 'potm': // templates\n return 'powerpoint';\n case 'vsd': case 'vsdx':\n case 'vst': case 'vstx': // templates\n return 'visio';\n case 'mdb': case 'accdb': case 'accde': case 'accdr':\n case 'accdt': // templates\n return 'access';\n case 'mpp': case 'mppx':\n case 'mpt': // templates\n return 'project';\n case 'pub':\n return 'publisher';\n case 'xsn':\n return 'infopath';\n }\n }\n\n private command(extension: string): string {\n switch (extension.toLowerCase()) {\n case 'dot': case 'dotx': case 'dotm':\n case 'xlt': case 'xltx': case 'xltm':\n case 'pot': case 'potx': case 'potm':\n case 'vst': case 'vstx':\n case 'accdt':\n case 'mpt':\n return 'nft'; // new from template\n default:\n const openMode = 'v'; // for view, or 'e' or edit\n return `of${openMode}`; // default: open file as view/edit\n }\n }\n}\n","//#region Imports\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\n// Pipes\nimport { SafeUrlPipe } from './pipes/safe-url.pipe';\nimport { UriSchemePipe } from './pipes/uri-scheme.pipe';\n//#endregion\n\n//#region Exports\n// Pipes\nexport * from './pipes/safe-url.pipe';\nexport * from './pipes/uri-scheme.pipe';\n//#endregion\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [\n SafeUrlPipe,\n UriSchemePipe\n ],\n exports: [\n SafeUrlPipe,\n UriSchemePipe\n ],\n entryComponents: [ ]\n})\nexport class UrlModule { }\n"]}
|