@cleavelandprice/ngx-lib 2.2.2 → 2.2.3
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/esm2020/src/authentication/services/authentication.service.mjs +11 -5
- package/fesm2015/cleavelandprice-ngx-lib.mjs +10 -4
- package/fesm2015/cleavelandprice-ngx-lib.mjs.map +1 -1
- package/fesm2020/cleavelandprice-ngx-lib.mjs +10 -4
- package/fesm2020/cleavelandprice-ngx-lib.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cleavelandprice-ngx-lib.mjs","sources":["../../src/dialog/model/confirmation-dialog-mode.enum.ts","../../src/dialog/components/_dialog/dialog.component.ts","../../src/dialog/components/_dialog/dialog.component.html","../../src/dialog/components/confirmation-dialog/confirmation-dialog.component.ts","../../src/dialog/components/confirmation-dialog/confirmation-dialog.component.html","../../src/dialog/components/input-dialog/input-dialog.component.ts","../../src/dialog/components/input-dialog/input-dialog.component.html","../../src/dialog/components/message-dialog/message-dialog.component.ts","../../src/dialog/components/message-dialog/message-dialog.component.html","../../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-form/login-form.component.html","../../src/authentication/components/login/login.component.ts","../../src/authentication/components/login/login.component.html","../../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-dialog/upload-dialog.component.html","../../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 {\r\n OkCancel,\r\n YesNo,\r\n TrueFalse,\r\n Custom\r\n}\r\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\r\nimport { ConfirmationDialogMode } from './../../model/confirmation-dialog-mode.enum';\r\n\r\n@Component({\r\n selector: 'cp-dialog',\r\n templateUrl: './dialog.component.html',\r\n styleUrls: ['./dialog.component.css']\r\n})\r\nexport class DialogComponent implements OnInit {\r\n @Input() dialogType: string;\r\n @Input() data: any;\r\n @Output() closed = new EventEmitter<any>();\r\n\r\n ConfirmationDialogMode = ConfirmationDialogMode;\r\n mode = ConfirmationDialogMode.OkCancel;\r\n title: string;\r\n message: string;\r\n checkboxMessage: string;\r\n placeholder: string;\r\n customTrueFalseText: string[] = null;\r\n\r\n userInput: string;\r\n checkboxValue: boolean;\r\n\r\n ngOnInit(): void {\r\n if (this.data) {\r\n this.title = this.data.title || null;\r\n this.message = this.data.message || null;\r\n this.checkboxMessage = this.data.checkboxMessage || null;\r\n this.placeholder = this.data.placeholder || null;\r\n this.userInput = this.data.value || null;\r\n this.mode = this.data.mode || ConfirmationDialogMode.OkCancel;\r\n this.customTrueFalseText = this.data.customTrueFalseText;\r\n }\r\n }\r\n\r\n close(): void {\r\n let data: any;\r\n\r\n switch (this.dialogType) {\r\n case 'message':\r\n data = this.checkboxMessage ?\r\n {\r\n checkbox: this.checkboxValue || false\r\n } :\r\n null;\r\n break;\r\n case 'input':\r\n data = this.checkboxMessage ?\r\n {\r\n response: this.userInput,\r\n checkbox: this.checkboxValue || false\r\n } :\r\n this.userInput;\r\n break;\r\n case 'confirmation':\r\n data = this.checkboxMessage ?\r\n {\r\n response: true,\r\n checkbox: this.checkboxValue || false\r\n } :\r\n true;\r\n break;\r\n }\r\n\r\n this.closed.emit(data);\r\n }\r\n\r\n cancel(): void {\r\n let data: any;\r\n\r\n if (this.dialogType === 'confirmation') {\r\n data = this.checkboxMessage ?\r\n {\r\n response: false,\r\n checkbox: this.checkboxValue || false\r\n } :\r\n false;\r\n }\r\n\r\n this.closed.emit(data);\r\n }\r\n}\r\n","<h2 *ngIf=\"title\" mat-dialog-title [innerHTML]=\"title\"></h2>\r\n\r\n<mat-dialog-content>\r\n <div *ngIf=\"message\" [innerHTML]=\"message\"></div>\r\n\r\n <mat-form-field *ngIf=\"dialogType === 'input'\">\r\n <textarea matInput [placeholder]=\"placeholder\" [(ngModel)]=\"userInput\"></textarea>\r\n </mat-form-field>\r\n\r\n <div id=\"checkbox\" *ngIf=\"checkboxMessage\">\r\n <mat-checkbox [(ngModel)]=\"checkboxValue\">\r\n <span [innerHTML]=\"checkboxMessage\"></span>\r\n </mat-checkbox>\r\n </div>\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions>\r\n <button mat-raised-button (click)=\"close()\" [disabled]=\"dialogType === 'input' && !userInput\">\r\n <span [ngSwitch]=\"mode\">\r\n <span *ngSwitchCase=\"ConfirmationDialogMode.YesNo\">Yes</span>\r\n <span *ngSwitchCase=\"ConfirmationDialogMode.TrueFalse\">True</span>\r\n <span *ngSwitchCase=\"ConfirmationDialogMode.Custom\">{{ customTrueFalseText[0] }}</span>\r\n <span *ngSwitchDefault>OK</span>\r\n </span>\r\n </button>\r\n <button *ngIf=\"dialogType !== 'message'\" mat-raised-button (click)=\"cancel()\">\r\n <span [ngSwitch]=\"mode\">\r\n <span *ngSwitchCase=\"ConfirmationDialogMode.YesNo\">No</span>\r\n <span *ngSwitchCase=\"ConfirmationDialogMode.TrueFalse\">False</span>\r\n <span *ngSwitchCase=\"ConfirmationDialogMode.Custom\">{{ customTrueFalseText[1] }}</span>\r\n <span *ngSwitchDefault>Cancel</span>\r\n </span>\r\n </button>\r\n</mat-dialog-actions>","import { Component, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'cp-confirmation-dialog',\r\n templateUrl: './confirmation-dialog.component.html'\r\n})\r\nexport class ConfirmationDialogComponent {\r\n\r\n constructor(public dialogRef: MatDialogRef<ConfirmationDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: any) {\r\n }\r\n}\r\n","<cp-dialog\r\n [data]=\"data\"\r\n [dialogType]=\"'confirmation'\"\r\n (closed)=\"dialogRef.close($event)\">\r\n</cp-dialog>","import { Component, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'cp-input-dialog',\r\n templateUrl: './input-dialog.component.html'\r\n})\r\nexport class InputDialogComponent {\r\n constructor(public dialogRef: MatDialogRef<InputDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: any) {\r\n }\r\n}\r\n","<cp-dialog\r\n [data]=\"data\"\r\n [dialogType]=\"'input'\"\r\n (closed)=\"dialogRef.close($event)\">\r\n</cp-dialog>","import { Component, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'cp-message-dialog',\r\n templateUrl: './message-dialog.component.html'\r\n})\r\nexport class MessageDialogComponent {\r\n constructor(public dialogRef: MatDialogRef<MessageDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: any) {\r\n }\r\n}\r\n","<cp-dialog\r\n [data]=\"data\"\r\n [dialogType]=\"'message'\"\r\n (closed)=\"dialogRef.close($event)\">\r\n</cp-dialog>","//#region Imports\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n// Angular Material\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatInputModule } from '@angular/material/input';\r\n\r\n// Components\r\nimport { DialogComponent } from './components/_dialog/dialog.component';\r\nimport { ConfirmationDialogComponent } from './components/confirmation-dialog/confirmation-dialog.component';\r\nimport { InputDialogComponent } from './components/input-dialog/input-dialog.component';\r\nimport { MessageDialogComponent } from './components/message-dialog/message-dialog.component';\r\n//#endregion\r\n\r\n//#region Exports\r\n// Model\r\nexport * from './model/confirmation-dialog-mode.enum';\r\n\r\n// Components\r\nexport * from './components/confirmation-dialog/confirmation-dialog.component';\r\nexport * from './components/input-dialog/input-dialog.component';\r\nexport * from './components/message-dialog/message-dialog.component';\r\n//#endregion\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n MatButtonModule,\r\n MatCheckboxModule,\r\n MatInputModule,\r\n MatDialogModule\r\n ],\r\n declarations: [\r\n DialogComponent,\r\n ConfirmationDialogComponent,\r\n InputDialogComponent,\r\n MessageDialogComponent\r\n ],\r\n exports: [\r\n ConfirmationDialogComponent,\r\n InputDialogComponent,\r\n MessageDialogComponent\r\n ],\r\n entryComponents: [\r\n ConfirmationDialogComponent,\r\n InputDialogComponent,\r\n MessageDialogComponent\r\n ]\r\n})\r\nexport class DialogModule { }\r\n","export class AuthenticationServiceConfig {\r\n authenticationApiUrl: string;\r\n}\r\n","export class SharePointServiceConfig {\r\n sharePointApiUrl: string;\r\n userName?: string;\r\n password?: string;\r\n}\r\n","//#region Imports\r\nimport { Injectable, Optional } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, of } from 'rxjs';\r\n\r\nimport { SharePointServiceConfig } from './../model/sharepoint.service.config';\r\nimport { SharePointList } from './../model/sharepoint-list';\r\nimport { SharePointListItem } from './../model/sharepoint-list-item';\r\nimport { SharePointEmployeePicture } from './../model/sharepoint-employee-picture';\r\nimport { SharePointCustomerVisit } from './../model/sharepoint-customer-visit';\r\nimport { SharePointPerson } from './../model/sharepoint-person';\r\n//#endregion\r\n\r\n@Injectable()\r\nexport class SharePointService {\r\n //#region Fields\r\n people: SharePointPerson[];\r\n photos: SharePointEmployeePicture[];\r\n //#endregion\r\n\r\n constructor(@Optional() private config: SharePointServiceConfig,\r\n private http: HttpClient) { }\r\n\r\n //#region Utilities\r\n getListItems(list: SharePointList): Observable<SharePointListItem[]> {\r\n return this.http.post<SharePointListItem[]>(this.config.sharePointApiUrl, list);\r\n }\r\n\r\n getListItemsSimple(list: string, view: string, site?: string, limit?: string): Observable<SharePointListItem[]> {\r\n return this.http.get<SharePointListItem[]>(`${this.config.sharePointApiUrl}/${list}/${view}/${site}/${limit}`);\r\n }\r\n\r\n getPeople(storePeople?: boolean): Observable<SharePointPerson[]> {\r\n // Do we already have people stored locally?\r\n if (this.people) {\r\n return of(this.people);\r\n // return Observable.of(this.people);\r\n }\r\n\r\n // Should we store people locally for subsequent calls?\r\n if (storePeople) {\r\n this.http.get<SharePointPerson[]>(`${this.config.sharePointApiUrl}/people`)\r\n .subscribe(peeps => this.people = peeps);\r\n }\r\n\r\n return this.http.get<SharePointPerson[]>(`${this.config.sharePointApiUrl}/people`);\r\n }\r\n\r\n getPhotos(storePhotos?: boolean): Observable<SharePointEmployeePicture[]> {\r\n // Do we already have photos stored locally?\r\n if (this.photos) {\r\n return of(this.photos);\r\n // return Observable.of(this.photos);\r\n }\r\n\r\n /*const spList: SharePointList = {\r\n list: 'Employee Thumbnail Photos',\r\n view: 'All Pictures',\r\n site: 'https://sharepoint.cleavelandprice.com/DigitalDisplay',\r\n userName: this.config.userName,\r\n password: this.config.password\r\n };*/\r\n const request = {\r\n list: 'Employee Thumbnail Photos',\r\n site: 'https://sharepoint.cleavelandprice.com/DigitalDisplay',\r\n username: this.config.userName,\r\n password: this.config.password\r\n };\r\n\r\n // Should we store photos locally for subsequent calls?\r\n if (storePhotos) {\r\n this.http.post<SharePointEmployeePicture[]>(`${this.config.sharePointApiUrl}/listitems`, request)\r\n .subscribe(photos => this.photos = photos);\r\n }\r\n\r\n return this.http.post<SharePointEmployeePicture[]>(`${this.config.sharePointApiUrl}/listitems`, request);\r\n }\r\n\r\n getCustomerVisits(): Observable<SharePointCustomerVisit[]> {\r\n const list: SharePointList = {\r\n list: 'Customer Visits',\r\n view: 'All Events',\r\n userName: this.config.userName,\r\n password: this.config.password\r\n };\r\n\r\n return this.http.post<SharePointCustomerVisit[]>(this.config.sharePointApiUrl, list);\r\n }\r\n //#endregion\r\n}\r\n","//#region Imports\r\nimport { Injectable, Output, EventEmitter, Optional } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { AuthenticationToken } from './../model/authentication-token';\r\n// import { JwtHelper } from 'angular2-jwt';\r\nimport { JwtHelperService } from '@auth0/angular-jwt';\r\nimport { AuthenticationServiceConfig } from './../model/authentication.service.config';\r\nimport { SharePointService } from './../../sharepoint/services/sharepoint.service';\r\n//#endregion\r\n\r\n/**\r\n * Authenticate Active Directory user\r\n */\r\n@Injectable()\r\nexport class AuthenticationService {\r\n //#region Fields\r\n /**\r\n * @ignore\r\n */\r\n private authenticationApiUrl: string;\r\n\r\n @Output() authenticatedChanged = new EventEmitter<boolean>();\r\n @Output() authenticatingChanged = new EventEmitter<boolean>();\r\n\r\n /**\r\n * Flag set to true while the service is attempting to authenticate the user\r\n */\r\n authenticating = false;\r\n\r\n /**\r\n * Flag set to true when the user is successfully authenticated\r\n */\r\n authenticated = false;\r\n\r\n /**\r\n * Object representing the authenticated user\r\n */\r\n authenticatedUser: {\r\n admin: boolean,\r\n accountName: string,\r\n displayName: string,\r\n distinguishedName: string;\r\n employeeNumber: string;\r\n photoUrl?: string;\r\n memberOf?: string;\r\n };\r\n //#endregion\r\n\r\n //#region Lifecycle\r\n /**\r\n * @ignore\r\n */\r\n constructor( @Optional() config: AuthenticationServiceConfig,\r\n private http: HttpClient,\r\n private sharePointService: SharePointService) {\r\n\r\n this.authenticationApiUrl = config.authenticationApiUrl;\r\n this.checkForExistingToken();\r\n }\r\n //#endregion\r\n\r\n //#region Utilities\r\n /**\r\n * Authenticate the user and store the token in Local Storage\r\n *\r\n * @param username AD sAMAccountName\r\n * @param password\r\n * @param adminGroup AD group that determines if authenticated user is considered an administrator of the app\r\n */\r\n login(username: string, password: string, adminGroup?: string): void {\r\n const today = new Date();\r\n const expiration = new Date().setFullYear(today.getFullYear() + 10);\r\n\r\n const request = {\r\n username: username,\r\n password: password,\r\n adminGroup: adminGroup,\r\n //expirationDate: expiration // moment().add(10, 'years').toDate()\r\n includeThumbnail: false\r\n };\r\n\r\n this.authenticating = true;\r\n this.authenticatingChanged.emit(this.authenticating);\r\n\r\n this.http.post<string>(this.authenticationApiUrl, request)\r\n .subscribe(token => this.validateUser(token),\r\n err => {\r\n console.log(err);\r\n this.authenticating = false;\r\n this.authenticatingChanged.emit(this.authenticating);\r\n });\r\n }\r\n\r\n /**\r\n * Logout the user and delete the token from Local Storage\r\n */\r\n logout(): void {\r\n if (localStorage.getItem('token')) {\r\n localStorage.removeItem('token');\r\n }\r\n\r\n this.authenticatedUser = null;\r\n this.authenticated = false;\r\n this.authenticatedChanged.emit(false);\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n private validateUser(token: string): void {\r\n if (!token) { return; }\r\n\r\n const jwtHelper = new JwtHelperService();\r\n const decoded = jwtHelper.decodeToken(token) as AuthenticationToken;\r\n\r\n if (jwtHelper.isTokenExpired(token)) {\r\n this.logout();\r\n return;\r\n }\r\n\r\n this.authenticatedUser = {\r\n admin: decoded.role === 'Admin',\r\n displayName: decoded.displayName,\r\n accountName: decoded.winaccountname,\r\n distinguishedName: decoded.distinguishedName,\r\n employeeNumber: decoded.employeeNumber,\r\n memberOf: decoded.memberOf\r\n };\r\n\r\n localStorage.setItem('token', token);\r\n\r\n this.getPhoto();\r\n\r\n this.authenticated = true;\r\n this.authenticatedChanged.emit(this.authenticated);\r\n\r\n this.authenticating = false;\r\n this.authenticatingChanged.emit(this.authenticating);\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n private getPhoto(): void {\r\n this.sharePointService.getPhotos()\r\n .subscribe(photos => {\r\n // The user may have been logged out by the time the photos came back\r\n if (!this.authenticatedUser || !this.authenticatedUser.employeeNumber) {\r\n return;\r\n }\r\n\r\n const photo = photos.find(pic => +pic.ows_EmployeeNumber === +this.authenticatedUser.employeeNumber);\r\n\r\n if (photo) {\r\n this.authenticatedUser.photoUrl = photo.ows_EncodedAbsUrl;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n private checkForExistingToken(): void {\r\n if (localStorage.getItem('token')) {\r\n this.validateUser(localStorage.getItem('token'));\r\n }\r\n }\r\n //#endregion\r\n}\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { AuthenticationService } from './../../services/authentication.service';\r\nimport { SharePointService } from './../../../sharepoint/services/sharepoint.service';\r\n\r\n@Component({\r\n selector: 'cp-login-form',\r\n templateUrl: './login-form.component.html',\r\n styleUrls: ['./login-form.component.css']\r\n})\r\nexport class LoginFormComponent implements OnInit {\r\n username: string;\r\n password: string;\r\n adminGroup: string;\r\n loginError: boolean;\r\n\r\n constructor(public dialogRef: MatDialogRef<LoginFormComponent>,\r\n private sharePointService: SharePointService,\r\n public authenticationService: AuthenticationService,\r\n @Inject(MAT_DIALOG_DATA) public data: any) {\r\n this.adminGroup = data.adminGroup;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.authenticationService.authenticatedChanged\r\n .subscribe(authenticated => {\r\n if (authenticated) {\r\n this.dialogRef.close();\r\n }\r\n });\r\n }\r\n\r\n authenticate() {\r\n if (!this.sharePointService || !this.username || !this.password) {\r\n return;\r\n }\r\n this.authenticationService.login(this.username, this.password, this.adminGroup);\r\n }\r\n}\r\n","<h2 mat-dialog-title>\r\n <span *ngIf=\"!authenticationService.authenticating\">Login</span>\r\n <span *ngIf=\"authenticationService.authenticating\">Authenticating...</span>\r\n</h2>\r\n\r\n<mat-dialog-content [class.loginError]=\"loginError\">\r\n <div id=\"spinner\" *ngIf=\"authenticationService.authenticating\">\r\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\"></mat-progress-spinner>\r\n </div>\r\n\r\n <div *ngIf=\"!authenticationService.authenticating\">\r\n <div>\r\n <mat-form-field>\r\n <input matInput placeholder=\"Username\" [(ngModel)]=\"username\" name=\"username\" required (keyup.enter)=\"authenticate()\">\r\n </mat-form-field>\r\n </div>\r\n\r\n <div>\r\n <mat-form-field>\r\n <input matInput type=\"password\" placeholder=\"Password\" [(ngModel)]=\"password\" name=\"password\" required (keyup.enter)=\"authenticate()\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!authenticationService.authenticating && loginError\" class=\"alert alert-danger\">\r\n Bad username or password\r\n </div>\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions *ngIf=\"!authenticationService.authenticating\">\r\n <button type=\"button\" mat-raised-button (click)=\"authenticate()\">OK</button>\r\n <button type=\"button\" mat-button (click)=\"dialogRef.close()\">Cancel</button>\r\n</mat-dialog-actions>","import { Component, OnInit, Input } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { LoginFormComponent } from './../login-form/login-form.component';\r\nimport { AuthenticationService } from './../../services/authentication.service';\r\nimport { ConfirmationDialogComponent } from './../../../dialog/components/confirmation-dialog/confirmation-dialog.component';\r\n\r\n@Component({\r\n selector: 'cp-login',\r\n templateUrl: './login.component.html',\r\n styleUrls: ['./login.component.css']\r\n})\r\nexport class LoginComponent implements OnInit {\r\n @Input() adminGroup: string;\r\n\r\n constructor(public dialog: MatDialog,\r\n public authenticationService: AuthenticationService) {\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n login(): void {\r\n this.dialog.open(LoginFormComponent, {\r\n data: { adminGroup: this.adminGroup }\r\n });\r\n }\r\n\r\n confirmLogout(): void {\r\n const dialogRef = this.dialog.open(ConfirmationDialogComponent, {\r\n data: { message: `Are you sure you want to logout?` }\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (result) {\r\n this.authenticationService.logout();\r\n }\r\n });\r\n }\r\n}\r\n","<div id=\"user-id\">\r\n <i id=\"unauthenticated-user-image\" *ngIf=\"!authenticationService.authenticated\"\r\n class=\"fa fa-user-circle\"\r\n [class.fa-spin]=\"authenticationService.authenticating\"\r\n aria-hidden=\"true\"\r\n matTooltip=\"Login\"\r\n (click)=\"login()\"></i>\r\n\r\n <img id=\"authenticated-user-image\"\r\n *ngIf=\"authenticationService.authenticated && authenticationService.authenticatedUser.photoUrl\"\r\n [src]=\"authenticationService.authenticatedUser.photoUrl\"\r\n matTooltip=\"Logout\"\r\n (click)=\"confirmLogout()\" />\r\n\r\n <i id=\"authenticated-user-image\"\r\n *ngIf=\"authenticationService.authenticated && !authenticationService.authenticatedUser.photoUrl\"\r\n class=\"fa fa-user-circle\"\r\n matTooltip=\"Logout\"\r\n (click)=\"confirmLogout()\"></i>\r\n\r\n <div id=\"user-name\" *ngIf=\"authenticationService.authenticated\">\r\n {{ authenticationService.authenticatedUser.displayName }}\r\n </div>\r\n</div>","//#region Imports\r\nimport { NgModule, ModuleWithProviders, Optional, SkipSelf } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n// Angular Material\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n// Modules\r\nimport { DialogModule } from './../dialog/dialog.module';\r\n\r\n// Services\r\nimport { AuthenticationServiceConfig } from './model/authentication.service.config';\r\nimport { AuthenticationService } from './services/authentication.service';\r\n\r\n// Components\r\nimport { LoginComponent } from './components/login/login.component';\r\nimport { LoginFormComponent } from './components/login-form/login-form.component';\r\n//#endregion\r\n\r\n//#region Exports\r\n// Model\r\nexport * from './model/authentication.service.config';\r\nexport * from './model/authentication-token';\r\n\r\n// Services\r\nexport * from './services/authentication.service';\r\n\r\n// Components\r\nexport * from './components/login/login.component';\r\nexport * from './components/login-form/login-form.component';\r\n//#endregion\r\n\r\n/**\r\n * Provides a component and a service that allows you to perform Active/Directory authentication\r\n */\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n MatButtonModule,\r\n MatCheckboxModule,\r\n MatDialogModule,\r\n MatInputModule,\r\n MatProgressBarModule,\r\n MatProgressSpinnerModule,\r\n MatTooltipModule,\r\n MatSelectModule,\r\n DialogModule\r\n ],\r\n declarations: [\r\n LoginComponent,\r\n LoginFormComponent\r\n ],\r\n exports: [\r\n LoginComponent,\r\n LoginFormComponent\r\n ],\r\n providers: [],\r\n entryComponents: [\r\n LoginFormComponent\r\n ]\r\n})\r\nexport class AuthenticationModule {\r\n static forRoot(authenticationConfig: AuthenticationServiceConfig): ModuleWithProviders<AuthenticationModule> {\r\n return {\r\n ngModule: AuthenticationModule,\r\n providers: [\r\n AuthenticationService,\r\n { provide: AuthenticationServiceConfig, useValue: authenticationConfig }\r\n ]\r\n };\r\n }\r\n\r\n constructor( @Optional() @SkipSelf() parentModule: AuthenticationModule) {\r\n if (parentModule) {\r\n throw new Error(\r\n 'AuthenticationModule is already loaded. Import it in the AppModule only');\r\n }\r\n }\r\n}\r\n","import { EmailSender } from './email-sender';\r\n\r\nexport class EmailServiceConfig {\r\n emailApiUrl: string;\r\n server: string;\r\n smtpPort: number;\r\n sender: EmailSender;\r\n}\r\n","//#region Imports\r\nimport { Injectable, Optional } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { EmailServiceConfig } from './../model/email.service.config';\r\nimport { Email } from './../model/email';\r\nimport { EmailDto } from './../model/email-dto';\r\n//#endregion\r\n\r\n@Injectable()\r\nexport class EmailService {\r\n private emailServiceConfig: EmailServiceConfig;\r\n\r\n constructor(@Optional() config: EmailServiceConfig,\r\n private http: HttpClient) {\r\n this.emailServiceConfig = config;\r\n }\r\n\r\n send(email: Email): Observable<Email> {\r\n const dto: EmailDto = {\r\n server: this.emailServiceConfig.server,\r\n smtpPort: this.emailServiceConfig.smtpPort,\r\n sender: this.emailServiceConfig.sender,\r\n subject: email.subject,\r\n content: email.content,\r\n recipients: email.recipients\r\n };\r\n\r\n return this.http.post<Email>(this.emailServiceConfig.emailApiUrl, dto);\r\n }\r\n}\r\n","//#region Imports\r\nimport { NgModule, ModuleWithProviders, Optional, SkipSelf } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n// Services\r\nimport { EmailServiceConfig } from './model/email.service.config';\r\nimport { EmailService } from './services/email.service';\r\n//#endregion\r\n\r\n//#region Exports\r\n// Model\r\nexport * from './model/email.service.config';\r\nexport * from './model/email';\r\n\r\n// Services\r\nexport * from './services/email.service';\r\n//#endregion\r\n\r\n@NgModule({\r\n imports: [ CommonModule ],\r\n declarations: [],\r\n exports: []\r\n})\r\nexport class EmailModule {\r\n static forRoot(emailConfig: EmailServiceConfig): ModuleWithProviders<EmailModule> {\r\n return {\r\n ngModule: EmailModule,\r\n providers: [\r\n EmailService,\r\n { provide: EmailServiceConfig, useValue: emailConfig }\r\n ]\r\n };\r\n }\r\n\r\n constructor( @Optional() @SkipSelf() parentModule: EmailModule) {\r\n if (parentModule) {\r\n throw new Error(\r\n 'EmailModule is already loaded. Import it in the AppModule only');\r\n }\r\n }\r\n}\r\n","export class EmployeeServiceConfig {\r\n employeeApiUrl: string;\r\n}\r\n","//#region Imports\r\nimport { Injectable, Optional } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, of } from 'rxjs';\r\n\r\nimport { Employee } from './../model/employee';\r\nimport { EmployeeServiceConfig } from './../model/employee.service.config';\r\n//#endregion\r\n\r\n@Injectable()\r\nexport class EmployeeService {\r\n //#region Fields\r\n private employeeApiUrl: string;\r\n employees: Employee[];\r\n //#endregion\r\n\r\n //#region Lifecycle\r\n constructor( @Optional() config: EmployeeServiceConfig,\r\n private http: HttpClient) {\r\n this.employeeApiUrl = config.employeeApiUrl;\r\n }\r\n //#endregion\r\n\r\n //#region Utilities\r\n getEmployees(storeEmployees = false, includeDisabled = false): Observable<Employee[]> {\r\n // Do we already have employees stored locally?\r\n if (this.employees) {\r\n return of(this.employees);\r\n // return Observable.of(this.employees);\r\n }\r\n\r\n // Should we store employees locally for subsequent calls?\r\n if (storeEmployees) {\r\n this.http.get<Employee[]>(`${this.employeeApiUrl}/false/${includeDisabled}`)\r\n .subscribe(emps => this.employees = emps);\r\n }\r\n\r\n return this.http.get<Employee[]>(`${this.employeeApiUrl}/false/${includeDisabled}`);\r\n }\r\n\r\n getEmployee(sAMAccountName: string): Observable<Employee> {\r\n return this.http.get<Employee>(`${this.employeeApiUrl}/name/${sAMAccountName}`);\r\n }\r\n //#endregion\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Employee } from './../model/employee';\r\n\r\n@Pipe({\r\n name: 'departments'\r\n})\r\nexport class DepartmentsPipe implements PipeTransform {\r\n\r\n transform(employees: Employee[], args?: any): string[] {\r\n const departments: string[] = [];\r\n\r\n employees\r\n .filter(emp => emp.department)\r\n .forEach(emp => {\r\n if (departments.indexOf(emp.department) === -1) {\r\n departments.push(emp.department);\r\n }\r\n });\r\n\r\n return departments.sort();\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Employee } from './../model/employee';\r\n\r\n@Pipe({\r\n name: 'employeeByDn'\r\n})\r\nexport class EmployeeByDnPipe implements PipeTransform {\r\n\r\n transform(employees: Employee[], dn: string): Employee {\r\n return employees\r\n .find(emp => emp.distinguishedName.toLowerCase() === dn.toLowerCase());\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Employee } from './../model/employee';\r\nimport { SharePointEmployeePicture } from './../../sharepoint/model/sharepoint-employee-picture';\r\n\r\n@Pipe({\r\n name: 'employeePhotoUrl'\r\n})\r\nexport class EmployeePhotoUrlPipe implements PipeTransform {\r\n transform(employee: Employee, photos: SharePointEmployeePicture[]): any {\r\n if (!photos) { return null; }\r\n\r\n // Try to match by employeeNumber, accountName, or title\r\n const photo = photos\r\n .find(pic =>\r\n (pic.ows_EmployeeNumber && employee.employeeNumber && +pic.ows_EmployeeNumber === +employee.employeeNumber) ||\r\n (pic.ows_AccountName && pic.ows_AccountName.toLowerCase() === employee.sAMAccountName.toLowerCase()) ||\r\n (pic.ows_Title && pic.ows_Title.toLowerCase() === employee.displayName.toLowerCase()));\r\n\r\n if (!photo) {\r\n console.log(`No photo match for ${employee.displayName}`);\r\n }\r\n\r\n return photo ? photo.ows_EncodedAbsUrl : null;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Employee } from './../model/employee';\r\n\r\n@Pipe({\r\n name: 'employeesWithPropertyValue'\r\n})\r\nexport class EmployeesWithPropertyValuePipe implements PipeTransform {\r\n\r\n transform(employees: Employee[], propertyName: string, propertyValue: any): Employee[] {\r\n return employees\r\n .filter(emp => emp[propertyName] && emp[propertyName] === propertyValue);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Employee } from './../model/employee';\r\n\r\n@Pipe({\r\n name: 'filterEmployees'\r\n})\r\nexport class FilterEmployeesPipe implements PipeTransform {\r\n transform(employees: Employee[], filter: string): Employee[] {\r\n return filter ?\r\n employees\r\n .filter(emp =>\r\n emp.displayName.toLowerCase().indexOf(filter.toLowerCase()) !== -1 ||\r\n (emp.department && emp.department.toLowerCase().indexOf(filter.toLowerCase()) !== -1) ||\r\n (emp.title && emp.title.toLowerCase().indexOf(filter.toLowerCase()) !== -1) ||\r\n emp.sAMAccountName.toLowerCase().indexOf(filter.toLowerCase()) !== -1\r\n ) :\r\n employees;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Employee } from './../model/employee';\r\n\r\n@Pipe({\r\n name: 'isMemberOf'\r\n})\r\nexport class IsMemberOfPipe implements PipeTransform {\r\n\r\n transform(employee: Employee, groupName: string): boolean {\r\n return employee.memberOf &&\r\n (employee.memberOf.find(m => m.toLowerCase().indexOf(groupName.toLowerCase()) !== -1) !== undefined);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Employee } from './../model/employee';\r\n\r\n@Pipe({\r\n name: 'sortEmployees'\r\n})\r\nexport class SortEmployeesPipe implements PipeTransform {\r\n transform(employees: Employee[], sortBy?: string, dataType?: string, reverse?: boolean): Employee[] {\r\n return this.getSorted(employees,\r\n sortBy ? sortBy : 'displayName',\r\n dataType ? dataType : 'string',\r\n reverse ? reverse : false);\r\n }\r\n\r\n private getSorted(employees: Employee[], sortBy: string, dataType: string, reverse: boolean): Employee[] {\r\n const sorted = employees\r\n .sort((a, b) => {\r\n let valA, valB: any;\r\n\r\n switch (dataType.toLowerCase()) {\r\n case 'string':\r\n valA = a[sortBy] ? a[sortBy].toString().toLowerCase() : null;\r\n valB = b[sortBy] ? b[sortBy].toString().toLowerCase() : null;\r\n break;\r\n case 'number':\r\n valA = a[sortBy] ? +a[sortBy] : null;\r\n valB = b[sortBy] ? +b[sortBy] : null;\r\n break;\r\n case 'date':\r\n valA = a[sortBy] ? a[sortBy] as Date : null;\r\n valB = b[sortBy] ? b[sortBy] as Date : null;\r\n break;\r\n }\r\n\r\n if (valA < valB) { return -1; }\r\n if (valA > valB) { return 1; }\r\n return 0;\r\n });\r\n\r\n return reverse ? sorted.reverse() : sorted;\r\n }\r\n}\r\n","//#region Imports\r\nimport { NgModule, ModuleWithProviders, Optional, SkipSelf } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n// Services\r\nimport { EmployeeServiceConfig } from './model/employee.service.config';\r\nimport { EmployeeService } from './services/employee.service';\r\n\r\n// Pipes\r\nimport { DepartmentsPipe } from './pipes/departments.pipe';\r\nimport { EmployeeByDnPipe } from './pipes/employee-by-dn.pipe';\r\nimport { EmployeePhotoUrlPipe } from './pipes/employee-photo-url.pipe';\r\nimport { EmployeesWithPropertyValuePipe } from './pipes/employees-with-property-value.pipe';\r\nimport { FilterEmployeesPipe } from './pipes/filter-employees.pipe';\r\nimport { IsMemberOfPipe } from './pipes/is-member-of.pipe';\r\nimport { SortEmployeesPipe } from './pipes/sort-employees.pipe';\r\n//#endregion\r\n\r\n//#region Exports\r\n// Model\r\nexport * from './model/employee.service.config';\r\nexport * from './model/employee';\r\n\r\n// Services\r\nexport * from './services/employee.service';\r\n\r\n// Pipes\r\nexport * from './pipes/departments.pipe';\r\nexport * from './pipes/employee-by-dn.pipe';\r\nexport * from './pipes/employee-photo-url.pipe';\r\nexport * from './pipes/employees-with-property-value.pipe';\r\nexport * from './pipes/filter-employees.pipe';\r\nexport * from './pipes/is-member-of.pipe';\r\nexport * from './pipes/sort-employees.pipe';\r\n//#endregion\r\n\r\n@NgModule({\r\n imports: [CommonModule],\r\n declarations: [\r\n DepartmentsPipe,\r\n EmployeeByDnPipe,\r\n EmployeesWithPropertyValuePipe,\r\n FilterEmployeesPipe,\r\n IsMemberOfPipe,\r\n EmployeePhotoUrlPipe,\r\n SortEmployeesPipe\r\n ],\r\n exports: [\r\n DepartmentsPipe,\r\n EmployeeByDnPipe,\r\n EmployeesWithPropertyValuePipe,\r\n FilterEmployeesPipe,\r\n IsMemberOfPipe,\r\n EmployeePhotoUrlPipe,\r\n SortEmployeesPipe\r\n ]\r\n})\r\nexport class EmployeeModule {\r\n static forRoot(employeeConfig: EmployeeServiceConfig): ModuleWithProviders<EmployeeModule> {\r\n return {\r\n ngModule: EmployeeModule,\r\n providers: [\r\n EmployeeService,\r\n { provide: EmployeeServiceConfig, useValue: employeeConfig }\r\n ]\r\n };\r\n }\r\n\r\n constructor( @Optional() @SkipSelf() parentModule: EmployeeModule) {\r\n if (parentModule) {\r\n throw new Error(\r\n 'EmployeeModule is already loaded. Import it in the AppModule only');\r\n }\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SharePointPicture } from './../model/sharepoint-picture';\r\n\r\n@Pipe({\r\n name: 'sharePointPhotoUrl'\r\n})\r\nexport class SharePointPhotoUrlPipe implements PipeTransform {\r\n transform(photo: SharePointPicture): string {\r\n return photo.ows_EncodedAbsUrl;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'sharePointUrl'\r\n})\r\nexport class SharePointUrlPipe implements PipeTransform {\r\n\r\n transform(url: string): string {\r\n return url !== null ? url.split(',')[0] : null;\r\n }\r\n}\r\n","//#region Imports\r\nimport { NgModule, ModuleWithProviders, Optional, SkipSelf } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n// Services\r\nimport { SharePointServiceConfig } from './model/sharepoint.service.config';\r\nimport { SharePointService } from './services/sharepoint.service';\r\n\r\n// Pipes\r\nimport { SharePointPhotoUrlPipe } from './pipes/sharepoint-photo-url.pipe';\r\nimport { SharePointUrlPipe } from './pipes/sharepoint-url.pipe';\r\n//#endregion\r\n\r\n//#region Exports\r\n// Model\r\nexport * from './model/sharepoint-calendar-event';\r\nexport * from './model/sharepoint-customer-visit';\r\nexport * from './model/sharepoint-employee-picture';\r\nexport * from './model/sharepoint-list';\r\nexport * from './model/sharepoint-list-item';\r\nexport * from './model/sharepoint-person';\r\nexport * from './model/sharepoint-picture';\r\nexport * from './model/sharepoint.service.config';\r\n\r\n// Services\r\nexport * from './services/sharepoint.service';\r\n\r\n// Pipes\r\nexport * from './pipes/sharepoint-photo-url.pipe';\r\nexport * from './pipes/sharepoint-url.pipe';\r\n//#endregion\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule\r\n ],\r\n declarations: [\r\n SharePointPhotoUrlPipe,\r\n SharePointUrlPipe\r\n ],\r\n exports: [\r\n SharePointPhotoUrlPipe,\r\n SharePointUrlPipe\r\n ]\r\n})\r\nexport class SharePointModule {\r\n static forRoot(sharePointConfig: SharePointServiceConfig): ModuleWithProviders<SharePointModule> {\r\n return {\r\n ngModule: SharePointModule,\r\n providers: [\r\n SharePointService,\r\n { provide: SharePointServiceConfig, useValue: sharePointConfig }\r\n ]\r\n };\r\n }\r\n\r\n constructor( @Optional() @SkipSelf() parentModule: SharePointModule) {\r\n if (parentModule) {\r\n throw new Error(\r\n 'SharePointModule is already loaded. Import it in the AppModule only');\r\n }\r\n }\r\n}\r\n","export class UploadServiceConfig {\r\n uploadApiUrl: string;\r\n uploadPath?: string;\r\n dbAppId?: string;\r\n externalReferenceId?: string;\r\n comment?: string;\r\n\r\n // UI configuration\r\n uploadButtonText?: string;\r\n uploadDialogTitle?: string;\r\n uploadDialogAddFilesButtonText?: string;\r\n uploadDialogCancelButtonText?: string;\r\n uploadDialogUploadButtonText?: string;\r\n uploadDialogFinishButtonText?: string;\r\n}\r\n","import { Injectable, Optional } from '@angular/core';\r\nimport { HttpClient, HttpRequest, HttpEventType, HttpResponse, HttpHeaders } from '@angular/common/http';\r\nimport { Subject , Observable } from 'rxjs';\r\nimport { UploadServiceConfig } from './../model/upload.service.config';\r\nimport { FileUploadRequest } from './../model/file-upload-request';\r\nimport { DatabaseFileInfo } from './../model/database-file-info';\r\nimport { FilesystemFileInfo } from './../model/filesystem-file-info';\r\n\r\n// https://malcoded.com/posts/angular-file-upload-component-with-express\r\n\r\n@Injectable()\r\nexport class UploadService {\r\n public uploadApiUrl: string;\r\n public uploadPath: string;\r\n public dbAppId: string;\r\n public externalReferenceId: string;\r\n public comment: string;\r\n\r\n // UI configuration\r\n public uploadButtonText: string;\r\n public uploadDialogTitle: string;\r\n public uploadDialogAddFilesButtonText: string;\r\n public uploadDialogCancelButtonText: string;\r\n public uploadDialogUploadButtonText: string;\r\n public uploadDialogFinishButtonText: string;\r\n\r\n constructor(private http: HttpClient,\r\n @Optional() config: UploadServiceConfig) {\r\n this.uploadApiUrl = config.uploadApiUrl;\r\n this.uploadPath = config.uploadPath || '';\r\n this.dbAppId = config.dbAppId || '';\r\n this.externalReferenceId = config.externalReferenceId || '';\r\n this.comment = config.comment || '';\r\n\r\n // UI configuration\r\n this.uploadButtonText = config.uploadButtonText;\r\n this.uploadDialogTitle = config.uploadDialogTitle;\r\n this.uploadDialogAddFilesButtonText = config.uploadDialogAddFilesButtonText;\r\n this.uploadDialogCancelButtonText = config.uploadDialogCancelButtonText;\r\n this.uploadDialogUploadButtonText = config.uploadDialogUploadButtonText;\r\n this.uploadDialogFinishButtonText = config.uploadDialogFinishButtonText;\r\n }\r\n\r\n public upload(files: Set<File>): {[key: string]: Observable<number>} {\r\n // this will be the our resulting map\r\n const status = {};\r\n\r\n files.forEach(file => {\r\n // create a new multipart-form for every file\r\n const formData: FormData = new FormData();\r\n formData.append('file', file, file.name);\r\n\r\n // create a http-post request and pass the form\r\n // tell it to report the upload progress\r\n\r\n // A 'Destination' header is used to optionally configure the file upload destination (filesystem)\r\n // A 'DbAppId' header is used to configure the unique identifier of database uploads\r\n const req = new HttpRequest('POST', this.uploadApiUrl, formData, {\r\n reportProgress: true,\r\n responseType: 'blob',\r\n headers: new HttpHeaders()\r\n .set('Destination', this.uploadPath)\r\n .set('DbAppId', this.dbAppId)\r\n .set('ExternalReferenceId', this.externalReferenceId)\r\n .set('Comment', this.comment)\r\n /*headers: this.uploadPath ?\r\n new HttpHeaders({ 'Destination': this.uploadPath }) :\r\n this.dbAppId ?\r\n new HttpHeaders({ 'DbAppId': this.dbAppId }) :\r\n null*/\r\n });\r\n\r\n // create a new progress-subject for every file\r\n const progress = new Subject<number>();\r\n\r\n // send the http-request and subscribe for progress-updates\r\n this.http.request(req).subscribe(event => {\r\n if (event.type === HttpEventType.UploadProgress) {\r\n\r\n // calculate the progress percentage\r\n const percentDone = Math.round(100 * event.loaded / event.total);\r\n\r\n // pass the percentage into the progress-stream\r\n progress.next(percentDone);\r\n } else if (event instanceof HttpResponse) {\r\n\r\n // Close the progress-stream if we get an answer form the API\r\n // The upload is complete\r\n progress.complete();\r\n }\r\n });\r\n\r\n // Save every progress-observable in a map of all observables\r\n status[file.name] = {\r\n progress: progress.asObservable()\r\n };\r\n });\r\n\r\n // return the map of progress.observables\r\n return status;\r\n }\r\n\r\n public exists(fileName: string): Observable<boolean> {\r\n const query = this.uploadApiUrl.toLowerCase().indexOf('filesystem') === -1 ?\r\n { name: fileName, dbAppId: this.dbAppId } :\r\n { name: fileName, destination: this.uploadPath };\r\n\r\n return this.http.post<boolean>(`${this.uploadApiUrl}/exists`, query);\r\n }\r\n\r\n public download(request: FileUploadRequest): Observable<Blob> {\r\n return this.http.post(`${this.uploadApiUrl}/stream`, request, { responseType: 'blob' });\r\n }\r\n\r\n public getUploadInfo(request: FileUploadRequest):\r\n Observable<DatabaseFileInfo | DatabaseFileInfo[] | FilesystemFileInfo | FilesystemFileInfo[]> {\r\n return this.http.post<DatabaseFileInfo | DatabaseFileInfo[] | FilesystemFileInfo | FilesystemFileInfo[]>\r\n (`${this.uploadApiUrl}/info`, request);\r\n }\r\n}\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { UploadService } from './../../services/upload.service';\r\nimport { forkJoin } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'cp-upload-dialog',\r\n templateUrl: './upload-dialog.component.html',\r\n styleUrls: ['./upload-dialog.component.css']\r\n})\r\nexport class UploadDialogComponent implements OnInit {\r\n @ViewChild('file', { static: true }) file;\r\n public files: Set<File> = new Set();\r\n existingFileConflict: string;\r\n\r\n // State\r\n progress;\r\n canBeClosed = true;\r\n primaryButtonText: string;\r\n showCancelButton = true;\r\n uploading = false;\r\n uploadSuccessful = false;\r\n\r\n // UI configuration\r\n uploadDialogTitle: string;\r\n uploadDialogAddFilesButtonText: string;\r\n uploadDialogCancelButtonText: string;\r\n uploadDialogUploadButtonText: string;\r\n uploadDialogFinishButtonText: string;\r\n\r\n constructor(public dialogRef: MatDialogRef<UploadDialogComponent>, public uploadService: UploadService) { }\r\n\r\n ngOnInit() {\r\n this.uploadDialogTitle = this.uploadService.uploadDialogTitle ?\r\n this.uploadService.uploadDialogTitle :\r\n 'Upload Files';\r\n\r\n this.uploadDialogAddFilesButtonText = this.uploadService.uploadDialogAddFilesButtonText ?\r\n this.uploadService.uploadDialogAddFilesButtonText :\r\n 'Add Files';\r\n\r\n this.uploadDialogCancelButtonText = this.uploadService.uploadDialogCancelButtonText ?\r\n this.uploadService.uploadDialogCancelButtonText :\r\n 'Cancel';\r\n\r\n this.uploadDialogUploadButtonText = this.uploadService.uploadDialogUploadButtonText ?\r\n this.uploadService.uploadDialogUploadButtonText :\r\n 'Upload';\r\n\r\n this.uploadDialogFinishButtonText = this.uploadService.uploadDialogFinishButtonText ?\r\n this.uploadService.uploadDialogFinishButtonText :\r\n 'Finish';\r\n\r\n this.primaryButtonText = this.uploadDialogUploadButtonText;\r\n }\r\n\r\n addFiles() {\r\n this.file.nativeElement.click();\r\n }\r\n\r\n onFilesAdded() {\r\n const files: { [key: string]: File } = this.file.nativeElement.files;\r\n for (const key in files) {\r\n if (!isNaN(parseInt(key))) {\r\n // See if the file already exists\r\n this.uploadService.exists(files[key].name)\r\n .subscribe(exists => {\r\n if (exists) {\r\n this.existingFileConflict = files[key].name;\r\n }\r\n\r\n if (!exists) {\r\n this.files.add(files[key]);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n closeDialog() {\r\n // if everything was uploaded already, just close the dialog\r\n if (this.uploadSuccessful) {\r\n return this.dialogRef.close();\r\n }\r\n\r\n // set the component state to \"uploading\"\r\n this.uploading = true;\r\n\r\n // start the upload and save the progress map\r\n this.progress = this.uploadService.upload(this.files);\r\n\r\n // convert the progress map into an array\r\n const allProgressObservables = [];\r\n\r\n for (let key in this.progress) {\r\n allProgressObservables.push(this.progress[key].progress);\r\n }\r\n\r\n // Adjust the state variables\r\n\r\n // The OK-button should have the text \"Finish\" now\r\n this.primaryButtonText = this.uploadDialogFinishButtonText;\r\n\r\n // The dialog should not be closed while uploading\r\n this.canBeClosed = false;\r\n this.dialogRef.disableClose = true;\r\n\r\n // Hide the cancel-button\r\n this.showCancelButton = false;\r\n\r\n // When all progress-observables are completed...\r\n forkJoin(allProgressObservables).subscribe(end => {\r\n // ... the dialog can be closed again...\r\n this.canBeClosed = true;\r\n this.dialogRef.disableClose = false;\r\n\r\n // ... the upload was successful...\r\n this.uploadSuccessful = true;\r\n\r\n // ... and the component is no longer uploading\r\n this.uploading = false;\r\n });\r\n }\r\n}\r\n","<input type=\"file\" #file style=\"display: none\" (change)=\"onFilesAdded()\" multiple />\r\n\r\n<div mat-dialog-title id=\"title\">\r\n <div>{{ uploadDialogTitle }}</div>\r\n <button [disabled]=\"uploading || uploadSuccessful\" mat-raised-button color=\"primary\" class=\"add-files-btn\" (click)=\"addFiles()\">\r\n {{ uploadDialogAddFilesButtonText }}\r\n </button>\r\n</div>\r\n\r\n<div id=\"conflict\" *ngIf=\"existingFileConflict\">\r\n {{ existingFileConflict }} already exists on the server and cannot be overwritten\r\n</div>\r\n\r\n<mat-dialog-content>\r\n <mat-list>\r\n <mat-list-item *ngFor=\"let file of files\">\r\n <h4 mat-line>{{file.name}}</h4>\r\n <mat-progress-bar *ngIf=\"progress\" mode=\"determinate\" [value]=\"progress[file.name].progress | async\"></mat-progress-bar>\r\n </mat-list-item>\r\n </mat-list>\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions id=\"actions\">\r\n <button *ngIf=\"showCancelButton\" mat-button mat-dialog-close>{{ uploadDialogCancelButtonText }}</button>\r\n <button *ngIf=\"files.size > 0\" mat-raised-button color=\"primary\" [disabled]=\"!canBeClosed\" (click)=\"closeDialog()\">{{ primaryButtonText }}</button>\r\n</mat-dialog-actions>\r\n","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { UploadDialogComponent } from './../upload-dialog/upload-dialog.component';\r\nimport { UploadService } from './../../services/upload.service';\r\n\r\n@Component({\r\n selector: 'cp-upload',\r\n template: '<button mat-raised-button (click)=\"openUploadDialog()\">{{ uploadButtonText }}</button>'\r\n})\r\nexport class UploadComponent implements OnInit {\r\n @Output() dialogClosed = new EventEmitter();\r\n uploadButtonText: string;\r\n\r\n constructor(public dialog: MatDialog, public uploadService: UploadService) { }\r\n\r\n ngOnInit(): void {\r\n this.uploadButtonText = this.uploadService.uploadButtonText ?\r\n this.uploadService.uploadButtonText :\r\n 'Upload';\r\n }\r\n\r\n public openUploadDialog() {\r\n this.dialog.open(UploadDialogComponent, { width: '50%' })\r\n .afterClosed().subscribe(() => this.dialogClosed.emit());\r\n }\r\n}\r\n","//#region Imports\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule, ModuleWithProviders, Optional, SkipSelf } from '@angular/core';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations'\r\nimport { HttpClientModule } from '@angular/common/http';\r\n\r\n// Angular Material\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\n\r\n// Services\r\nimport { UploadServiceConfig } from './model/upload.service.config';\r\nimport { UploadService } from './services/upload.service';\r\n\r\n// Components\r\nimport { UploadDialogComponent } from './components/upload-dialog/upload-dialog.component';\r\nimport { UploadComponent } from './components/upload/upload.component';\r\n//#endregion\r\n\r\n//#region Exports\r\n// Model\r\nexport * from './model/database-file-info';\r\nexport * from './model/file-upload-request';\r\nexport * from './model/filesystem-file-info';\r\nexport * from './model/upload.service.config';\r\n\r\n// Services\r\nexport * from './services/upload.service';\r\n\r\n// Components\r\nexport * from './components/upload-dialog/upload-dialog.component';\r\nexport * from './components/upload/upload.component';\r\n//#endregion\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n BrowserAnimationsModule,\r\n HttpClientModule,\r\n\r\n MatButtonModule,\r\n MatDialogModule,\r\n MatListModule,\r\n MatProgressBarModule],\r\n declarations: [\r\n UploadComponent,\r\n UploadDialogComponent\r\n ],\r\n exports: [\r\n UploadComponent,\r\n UploadDialogComponent\r\n ],\r\n entryComponents: [\r\n UploadDialogComponent\r\n ]\r\n })\r\n export class UploadModule {\r\n static forRoot(uploadConfig: UploadServiceConfig): ModuleWithProviders<UploadModule> {\r\n return {\r\n ngModule: UploadModule,\r\n providers: [\r\n UploadService,\r\n { provide: UploadServiceConfig, useValue: uploadConfig }\r\n ]\r\n };\r\n }\r\n\r\n constructor(@Optional() @SkipSelf() parentModule: UploadModule) {\r\n if (parentModule) {\r\n throw new Error(\r\n 'UploadModule is already loaded. Import it in the AppModule only');\r\n }\r\n }\r\n }\r\n","// This pipe whitelists URLs so that they aren't prefixed with 'unsafe:' when they render in the DOM\r\n\r\nimport { Pipe, PipeTransform } from '@angular/core';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\n\r\n@Pipe({\r\n name: 'safeUrl'\r\n})\r\nexport class SafeUrlPipe implements PipeTransform {\r\n\r\n constructor(private domSanitizer: DomSanitizer) { }\r\n\r\n transform(value: string): SafeUrl {\r\n return this.domSanitizer.bypassSecurityTrustUrl(value);\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'uriScheme',\r\n pure: false\r\n})\r\nexport class UriSchemePipe implements PipeTransform {\r\n // https://docs.microsoft.com/en-us/office/client-developer/office-uri-schemes\r\n\r\n transform(value: string): string {\r\n if (!localStorage.getItem('useUriScheme')) { return value; }\r\n\r\n const urlSplit = value.split('.');\r\n const extension = urlSplit[urlSplit.length - 1];\r\n\r\n if (!extension) { return value; }\r\n\r\n const command = this.command(extension);\r\n const app = this.app(extension);\r\n\r\n return `ms-${app}:${command}|u|${value}`;\r\n }\r\n\r\n private app(extension: string): string {\r\n switch (extension.toLowerCase()) {\r\n // documents\r\n case 'doc': case 'docx':\r\n case 'docm': case 'docb':\r\n case 'dot': case 'dotx': case 'dotm': // templates\r\n return 'word';\r\n case 'xls': case 'xlsx':\r\n case 'xlm': case 'xlsm': case 'xlsb': case 'xlw':\r\n case 'xlt': case 'xltx': case 'xltm': // templates\r\n return 'excel';\r\n case 'ppt': case 'pptx':\r\n case 'pps': case 'ppsx': case 'pptm': case 'ppsm':\r\n case 'sldx': case 'sldm':\r\n case 'pot': case 'potx': case 'potm': // templates\r\n return 'powerpoint';\r\n case 'vsd': case 'vsdx':\r\n case 'vst': case 'vstx': // templates\r\n return 'visio';\r\n case 'mdb': case 'accdb': case 'accde': case 'accdr':\r\n case 'accdt': // templates\r\n return 'access';\r\n case 'mpp': case 'mppx':\r\n case 'mpt': // templates\r\n return 'project';\r\n case 'pub':\r\n return 'publisher';\r\n case 'xsn':\r\n return 'infopath';\r\n }\r\n }\r\n\r\n private command(extension: string): string {\r\n switch (extension.toLowerCase()) {\r\n case 'dot': case 'dotx': case 'dotm':\r\n case 'xlt': case 'xltx': case 'xltm':\r\n case 'pot': case 'potx': case 'potm':\r\n case 'vst': case 'vstx':\r\n case 'accdt':\r\n case 'mpt':\r\n return 'nft'; // new from template\r\n default:\r\n const openMode = 'v'; // for view, or 'e' or edit\r\n return `of${openMode}`; // default: open file as view/edit\r\n }\r\n }\r\n}\r\n","//#region Imports\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\n\r\n// Pipes\r\nimport { SafeUrlPipe } from './pipes/safe-url.pipe';\r\nimport { UriSchemePipe } from './pipes/uri-scheme.pipe';\r\n//#endregion\r\n\r\n//#region Exports\r\n// Pipes\r\nexport * from './pipes/safe-url.pipe';\r\nexport * from './pipes/uri-scheme.pipe';\r\n//#endregion\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule\r\n ],\r\n declarations: [\r\n SafeUrlPipe,\r\n UriSchemePipe\r\n ],\r\n exports: [\r\n SafeUrlPipe,\r\n UriSchemePipe\r\n ],\r\n entryComponents: [ ]\r\n})\r\nexport class UrlModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i5","i7","i2.DialogComponent","i1.SharePointServiceConfig","i1.AuthenticationServiceConfig","i3.SharePointService","i4","i6","i1","i8","i2.AuthenticationService","i3","i1.EmailServiceConfig","i1.EmployeeServiceConfig","i2.UploadServiceConfig","i2.UploadService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cleavelandprice-ngx-lib.mjs","sources":["../../src/dialog/model/confirmation-dialog-mode.enum.ts","../../src/dialog/components/_dialog/dialog.component.ts","../../src/dialog/components/_dialog/dialog.component.html","../../src/dialog/components/confirmation-dialog/confirmation-dialog.component.ts","../../src/dialog/components/confirmation-dialog/confirmation-dialog.component.html","../../src/dialog/components/input-dialog/input-dialog.component.ts","../../src/dialog/components/input-dialog/input-dialog.component.html","../../src/dialog/components/message-dialog/message-dialog.component.ts","../../src/dialog/components/message-dialog/message-dialog.component.html","../../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-form/login-form.component.html","../../src/authentication/components/login/login.component.ts","../../src/authentication/components/login/login.component.html","../../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-dialog/upload-dialog.component.html","../../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 {\r\n OkCancel,\r\n YesNo,\r\n TrueFalse,\r\n Custom\r\n}\r\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\r\nimport { ConfirmationDialogMode } from './../../model/confirmation-dialog-mode.enum';\r\n\r\n@Component({\r\n selector: 'cp-dialog',\r\n templateUrl: './dialog.component.html',\r\n styleUrls: ['./dialog.component.css']\r\n})\r\nexport class DialogComponent implements OnInit {\r\n @Input() dialogType: string;\r\n @Input() data: any;\r\n @Output() closed = new EventEmitter<any>();\r\n\r\n ConfirmationDialogMode = ConfirmationDialogMode;\r\n mode = ConfirmationDialogMode.OkCancel;\r\n title: string;\r\n message: string;\r\n checkboxMessage: string;\r\n placeholder: string;\r\n customTrueFalseText: string[] = null;\r\n\r\n userInput: string;\r\n checkboxValue: boolean;\r\n\r\n ngOnInit(): void {\r\n if (this.data) {\r\n this.title = this.data.title || null;\r\n this.message = this.data.message || null;\r\n this.checkboxMessage = this.data.checkboxMessage || null;\r\n this.placeholder = this.data.placeholder || null;\r\n this.userInput = this.data.value || null;\r\n this.mode = this.data.mode || ConfirmationDialogMode.OkCancel;\r\n this.customTrueFalseText = this.data.customTrueFalseText;\r\n }\r\n }\r\n\r\n close(): void {\r\n let data: any;\r\n\r\n switch (this.dialogType) {\r\n case 'message':\r\n data = this.checkboxMessage ?\r\n {\r\n checkbox: this.checkboxValue || false\r\n } :\r\n null;\r\n break;\r\n case 'input':\r\n data = this.checkboxMessage ?\r\n {\r\n response: this.userInput,\r\n checkbox: this.checkboxValue || false\r\n } :\r\n this.userInput;\r\n break;\r\n case 'confirmation':\r\n data = this.checkboxMessage ?\r\n {\r\n response: true,\r\n checkbox: this.checkboxValue || false\r\n } :\r\n true;\r\n break;\r\n }\r\n\r\n this.closed.emit(data);\r\n }\r\n\r\n cancel(): void {\r\n let data: any;\r\n\r\n if (this.dialogType === 'confirmation') {\r\n data = this.checkboxMessage ?\r\n {\r\n response: false,\r\n checkbox: this.checkboxValue || false\r\n } :\r\n false;\r\n }\r\n\r\n this.closed.emit(data);\r\n }\r\n}\r\n","<h2 *ngIf=\"title\" mat-dialog-title [innerHTML]=\"title\"></h2>\r\n\r\n<mat-dialog-content>\r\n <div *ngIf=\"message\" [innerHTML]=\"message\"></div>\r\n\r\n <mat-form-field *ngIf=\"dialogType === 'input'\">\r\n <textarea matInput [placeholder]=\"placeholder\" [(ngModel)]=\"userInput\"></textarea>\r\n </mat-form-field>\r\n\r\n <div id=\"checkbox\" *ngIf=\"checkboxMessage\">\r\n <mat-checkbox [(ngModel)]=\"checkboxValue\">\r\n <span [innerHTML]=\"checkboxMessage\"></span>\r\n </mat-checkbox>\r\n </div>\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions>\r\n <button mat-raised-button (click)=\"close()\" [disabled]=\"dialogType === 'input' && !userInput\">\r\n <span [ngSwitch]=\"mode\">\r\n <span *ngSwitchCase=\"ConfirmationDialogMode.YesNo\">Yes</span>\r\n <span *ngSwitchCase=\"ConfirmationDialogMode.TrueFalse\">True</span>\r\n <span *ngSwitchCase=\"ConfirmationDialogMode.Custom\">{{ customTrueFalseText[0] }}</span>\r\n <span *ngSwitchDefault>OK</span>\r\n </span>\r\n </button>\r\n <button *ngIf=\"dialogType !== 'message'\" mat-raised-button (click)=\"cancel()\">\r\n <span [ngSwitch]=\"mode\">\r\n <span *ngSwitchCase=\"ConfirmationDialogMode.YesNo\">No</span>\r\n <span *ngSwitchCase=\"ConfirmationDialogMode.TrueFalse\">False</span>\r\n <span *ngSwitchCase=\"ConfirmationDialogMode.Custom\">{{ customTrueFalseText[1] }}</span>\r\n <span *ngSwitchDefault>Cancel</span>\r\n </span>\r\n </button>\r\n</mat-dialog-actions>","import { Component, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'cp-confirmation-dialog',\r\n templateUrl: './confirmation-dialog.component.html'\r\n})\r\nexport class ConfirmationDialogComponent {\r\n\r\n constructor(public dialogRef: MatDialogRef<ConfirmationDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: any) {\r\n }\r\n}\r\n","<cp-dialog\r\n [data]=\"data\"\r\n [dialogType]=\"'confirmation'\"\r\n (closed)=\"dialogRef.close($event)\">\r\n</cp-dialog>","import { Component, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'cp-input-dialog',\r\n templateUrl: './input-dialog.component.html'\r\n})\r\nexport class InputDialogComponent {\r\n constructor(public dialogRef: MatDialogRef<InputDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: any) {\r\n }\r\n}\r\n","<cp-dialog\r\n [data]=\"data\"\r\n [dialogType]=\"'input'\"\r\n (closed)=\"dialogRef.close($event)\">\r\n</cp-dialog>","import { Component, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'cp-message-dialog',\r\n templateUrl: './message-dialog.component.html'\r\n})\r\nexport class MessageDialogComponent {\r\n constructor(public dialogRef: MatDialogRef<MessageDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: any) {\r\n }\r\n}\r\n","<cp-dialog\r\n [data]=\"data\"\r\n [dialogType]=\"'message'\"\r\n (closed)=\"dialogRef.close($event)\">\r\n</cp-dialog>","//#region Imports\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n// Angular Material\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatInputModule } from '@angular/material/input';\r\n\r\n// Components\r\nimport { DialogComponent } from './components/_dialog/dialog.component';\r\nimport { ConfirmationDialogComponent } from './components/confirmation-dialog/confirmation-dialog.component';\r\nimport { InputDialogComponent } from './components/input-dialog/input-dialog.component';\r\nimport { MessageDialogComponent } from './components/message-dialog/message-dialog.component';\r\n//#endregion\r\n\r\n//#region Exports\r\n// Model\r\nexport * from './model/confirmation-dialog-mode.enum';\r\n\r\n// Components\r\nexport * from './components/confirmation-dialog/confirmation-dialog.component';\r\nexport * from './components/input-dialog/input-dialog.component';\r\nexport * from './components/message-dialog/message-dialog.component';\r\n//#endregion\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n MatButtonModule,\r\n MatCheckboxModule,\r\n MatInputModule,\r\n MatDialogModule\r\n ],\r\n declarations: [\r\n DialogComponent,\r\n ConfirmationDialogComponent,\r\n InputDialogComponent,\r\n MessageDialogComponent\r\n ],\r\n exports: [\r\n ConfirmationDialogComponent,\r\n InputDialogComponent,\r\n MessageDialogComponent\r\n ],\r\n entryComponents: [\r\n ConfirmationDialogComponent,\r\n InputDialogComponent,\r\n MessageDialogComponent\r\n ]\r\n})\r\nexport class DialogModule { }\r\n","export class AuthenticationServiceConfig {\r\n authenticationApiUrl: string;\r\n}\r\n","export class SharePointServiceConfig {\r\n sharePointApiUrl: string;\r\n userName?: string;\r\n password?: string;\r\n}\r\n","//#region Imports\r\nimport { Injectable, Optional } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, of } from 'rxjs';\r\n\r\nimport { SharePointServiceConfig } from './../model/sharepoint.service.config';\r\nimport { SharePointList } from './../model/sharepoint-list';\r\nimport { SharePointListItem } from './../model/sharepoint-list-item';\r\nimport { SharePointEmployeePicture } from './../model/sharepoint-employee-picture';\r\nimport { SharePointCustomerVisit } from './../model/sharepoint-customer-visit';\r\nimport { SharePointPerson } from './../model/sharepoint-person';\r\n//#endregion\r\n\r\n@Injectable()\r\nexport class SharePointService {\r\n //#region Fields\r\n people: SharePointPerson[];\r\n photos: SharePointEmployeePicture[];\r\n //#endregion\r\n\r\n constructor(@Optional() private config: SharePointServiceConfig,\r\n private http: HttpClient) { }\r\n\r\n //#region Utilities\r\n getListItems(list: SharePointList): Observable<SharePointListItem[]> {\r\n return this.http.post<SharePointListItem[]>(this.config.sharePointApiUrl, list);\r\n }\r\n\r\n getListItemsSimple(list: string, view: string, site?: string, limit?: string): Observable<SharePointListItem[]> {\r\n return this.http.get<SharePointListItem[]>(`${this.config.sharePointApiUrl}/${list}/${view}/${site}/${limit}`);\r\n }\r\n\r\n getPeople(storePeople?: boolean): Observable<SharePointPerson[]> {\r\n // Do we already have people stored locally?\r\n if (this.people) {\r\n return of(this.people);\r\n // return Observable.of(this.people);\r\n }\r\n\r\n // Should we store people locally for subsequent calls?\r\n if (storePeople) {\r\n this.http.get<SharePointPerson[]>(`${this.config.sharePointApiUrl}/people`)\r\n .subscribe(peeps => this.people = peeps);\r\n }\r\n\r\n return this.http.get<SharePointPerson[]>(`${this.config.sharePointApiUrl}/people`);\r\n }\r\n\r\n getPhotos(storePhotos?: boolean): Observable<SharePointEmployeePicture[]> {\r\n // Do we already have photos stored locally?\r\n if (this.photos) {\r\n return of(this.photos);\r\n // return Observable.of(this.photos);\r\n }\r\n\r\n /*const spList: SharePointList = {\r\n list: 'Employee Thumbnail Photos',\r\n view: 'All Pictures',\r\n site: 'https://sharepoint.cleavelandprice.com/DigitalDisplay',\r\n userName: this.config.userName,\r\n password: this.config.password\r\n };*/\r\n const request = {\r\n list: 'Employee Thumbnail Photos',\r\n site: 'https://sharepoint.cleavelandprice.com/DigitalDisplay',\r\n username: this.config.userName,\r\n password: this.config.password\r\n };\r\n\r\n // Should we store photos locally for subsequent calls?\r\n if (storePhotos) {\r\n this.http.post<SharePointEmployeePicture[]>(`${this.config.sharePointApiUrl}/listitems`, request)\r\n .subscribe(photos => this.photos = photos);\r\n }\r\n\r\n return this.http.post<SharePointEmployeePicture[]>(`${this.config.sharePointApiUrl}/listitems`, request);\r\n }\r\n\r\n getCustomerVisits(): Observable<SharePointCustomerVisit[]> {\r\n const list: SharePointList = {\r\n list: 'Customer Visits',\r\n view: 'All Events',\r\n userName: this.config.userName,\r\n password: this.config.password\r\n };\r\n\r\n return this.http.post<SharePointCustomerVisit[]>(this.config.sharePointApiUrl, list);\r\n }\r\n //#endregion\r\n}\r\n","//#region Imports\r\nimport { Injectable, Output, EventEmitter, Optional } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { AuthenticationToken } from './../model/authentication-token';\r\n// import { JwtHelper } from 'angular2-jwt';\r\nimport { JwtHelperService } from '@auth0/angular-jwt';\r\nimport { AuthenticationServiceConfig } from './../model/authentication.service.config';\r\nimport { SharePointService } from './../../sharepoint/services/sharepoint.service';\r\n//#endregion\r\n\r\n/**\r\n * Authenticate Active Directory user\r\n */\r\n@Injectable()\r\nexport class AuthenticationService {\r\n //#region Fields\r\n /**\r\n * @ignore\r\n */\r\n private authenticationApiUrl: string;\r\n\r\n @Output() authenticatedChanged = new EventEmitter<boolean>();\r\n @Output() authenticatingChanged = new EventEmitter<boolean>();\r\n\r\n /**\r\n * Flag set to true while the service is attempting to authenticate the user\r\n */\r\n authenticating = false;\r\n\r\n /**\r\n * Flag set to true when the user is successfully authenticated\r\n */\r\n authenticated = false;\r\n\r\n /**\r\n * Object representing the authenticated user\r\n */\r\n authenticatedUser: {\r\n admin: boolean,\r\n accountName: string,\r\n displayName: string,\r\n distinguishedName: string;\r\n employeeNumber: string;\r\n photoUrl?: string;\r\n memberOf?: string;\r\n };\r\n //#endregion\r\n\r\n //#region Lifecycle\r\n /**\r\n * @ignore\r\n */\r\n constructor( @Optional() config: AuthenticationServiceConfig,\r\n private http: HttpClient,\r\n private sharePointService: SharePointService) {\r\n\r\n this.authenticationApiUrl = config.authenticationApiUrl;\r\n this.checkForExistingToken();\r\n }\r\n //#endregion\r\n\r\n //#region Utilities\r\n /**\r\n * Authenticate the user and store the token in Local Storage\r\n *\r\n * @param username AD sAMAccountName\r\n * @param password\r\n * @param adminGroup AD group that determines if authenticated user is considered an administrator of the app\r\n */\r\n login(username: string, password: string, adminGroup?: string): void {\r\n const today = new Date();\r\n //const expiration = new Date().setFullYear(today.getFullYear() + 10);\r\n\r\n const request = {\r\n username: username,\r\n password: password,\r\n adminGroup: adminGroup,\r\n //expirationDate: expiration // moment().add(10, 'years').toDate()\r\n };\r\n\r\n this.authenticating = true;\r\n this.authenticatingChanged.emit(this.authenticating);\r\n\r\n /*this.http.post<string>(this.authenticationApiUrl, request)\r\n .subscribe(token => this.validateUser(token),\r\n err => {\r\n console.log(err);\r\n this.authenticating = false;\r\n this.authenticatingChanged.emit(this.authenticating);\r\n });*/\r\n\r\n this.http.request('POST', this.authenticationApiUrl, { body: request, responseType: 'text' })\r\n .subscribe(token => this.validateUser(token),\r\n err => {\r\n console.log('Authentication error', err);\r\n this.authenticating = false;\r\n this.authenticatingChanged.emit(this.authenticating);\r\n });\r\n }\r\n\r\n /**\r\n * Logout the user and delete the token from Local Storage\r\n */\r\n logout(): void {\r\n if (localStorage.getItem('token')) {\r\n localStorage.removeItem('token');\r\n }\r\n\r\n this.authenticatedUser = null;\r\n this.authenticated = false;\r\n this.authenticatedChanged.emit(false);\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n private validateUser(token: string): void {\r\n if (!token) { return; }\r\n\r\n const jwtHelper = new JwtHelperService();\r\n const decoded = jwtHelper.decodeToken(token) as AuthenticationToken;\r\n\r\n if (jwtHelper.isTokenExpired(token)) {\r\n this.logout();\r\n return;\r\n }\r\n\r\n this.authenticatedUser = {\r\n admin: decoded.role === 'Admin',\r\n displayName: decoded.displayName,\r\n accountName: decoded.winaccountname,\r\n distinguishedName: decoded.distinguishedName,\r\n employeeNumber: decoded.employeeNumber,\r\n memberOf: decoded.memberOf\r\n };\r\n\r\n localStorage.setItem('token', token);\r\n\r\n this.getPhoto();\r\n\r\n this.authenticated = true;\r\n this.authenticatedChanged.emit(this.authenticated);\r\n\r\n this.authenticating = false;\r\n this.authenticatingChanged.emit(this.authenticating);\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n private getPhoto(): void {\r\n this.sharePointService.getPhotos()\r\n .subscribe(photos => {\r\n // The user may have been logged out by the time the photos came back\r\n if (!this.authenticatedUser || !this.authenticatedUser.employeeNumber) {\r\n return;\r\n }\r\n\r\n const photo = photos.find(pic => +pic.ows_EmployeeNumber === +this.authenticatedUser.employeeNumber);\r\n\r\n if (photo) {\r\n this.authenticatedUser.photoUrl = photo.ows_EncodedAbsUrl;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n private checkForExistingToken(): void {\r\n if (localStorage.getItem('token')) {\r\n this.validateUser(localStorage.getItem('token'));\r\n }\r\n }\r\n //#endregion\r\n}\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { AuthenticationService } from './../../services/authentication.service';\r\nimport { SharePointService } from './../../../sharepoint/services/sharepoint.service';\r\n\r\n@Component({\r\n selector: 'cp-login-form',\r\n templateUrl: './login-form.component.html',\r\n styleUrls: ['./login-form.component.css']\r\n})\r\nexport class LoginFormComponent implements OnInit {\r\n username: string;\r\n password: string;\r\n adminGroup: string;\r\n loginError: boolean;\r\n\r\n constructor(public dialogRef: MatDialogRef<LoginFormComponent>,\r\n private sharePointService: SharePointService,\r\n public authenticationService: AuthenticationService,\r\n @Inject(MAT_DIALOG_DATA) public data: any) {\r\n this.adminGroup = data.adminGroup;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.authenticationService.authenticatedChanged\r\n .subscribe(authenticated => {\r\n if (authenticated) {\r\n this.dialogRef.close();\r\n }\r\n });\r\n }\r\n\r\n authenticate() {\r\n if (!this.sharePointService || !this.username || !this.password) {\r\n return;\r\n }\r\n this.authenticationService.login(this.username, this.password, this.adminGroup);\r\n }\r\n}\r\n","<h2 mat-dialog-title>\r\n <span *ngIf=\"!authenticationService.authenticating\">Login</span>\r\n <span *ngIf=\"authenticationService.authenticating\">Authenticating...</span>\r\n</h2>\r\n\r\n<mat-dialog-content [class.loginError]=\"loginError\">\r\n <div id=\"spinner\" *ngIf=\"authenticationService.authenticating\">\r\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\"></mat-progress-spinner>\r\n </div>\r\n\r\n <div *ngIf=\"!authenticationService.authenticating\">\r\n <div>\r\n <mat-form-field>\r\n <input matInput placeholder=\"Username\" [(ngModel)]=\"username\" name=\"username\" required (keyup.enter)=\"authenticate()\">\r\n </mat-form-field>\r\n </div>\r\n\r\n <div>\r\n <mat-form-field>\r\n <input matInput type=\"password\" placeholder=\"Password\" [(ngModel)]=\"password\" name=\"password\" required (keyup.enter)=\"authenticate()\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!authenticationService.authenticating && loginError\" class=\"alert alert-danger\">\r\n Bad username or password\r\n </div>\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions *ngIf=\"!authenticationService.authenticating\">\r\n <button type=\"button\" mat-raised-button (click)=\"authenticate()\">OK</button>\r\n <button type=\"button\" mat-button (click)=\"dialogRef.close()\">Cancel</button>\r\n</mat-dialog-actions>","import { Component, OnInit, Input } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { LoginFormComponent } from './../login-form/login-form.component';\r\nimport { AuthenticationService } from './../../services/authentication.service';\r\nimport { ConfirmationDialogComponent } from './../../../dialog/components/confirmation-dialog/confirmation-dialog.component';\r\n\r\n@Component({\r\n selector: 'cp-login',\r\n templateUrl: './login.component.html',\r\n styleUrls: ['./login.component.css']\r\n})\r\nexport class LoginComponent implements OnInit {\r\n @Input() adminGroup: string;\r\n\r\n constructor(public dialog: MatDialog,\r\n public authenticationService: AuthenticationService) {\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n login(): void {\r\n this.dialog.open(LoginFormComponent, {\r\n data: { adminGroup: this.adminGroup }\r\n });\r\n }\r\n\r\n confirmLogout(): void {\r\n const dialogRef = this.dialog.open(ConfirmationDialogComponent, {\r\n data: { message: `Are you sure you want to logout?` }\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (result) {\r\n this.authenticationService.logout();\r\n }\r\n });\r\n }\r\n}\r\n","<div id=\"user-id\">\r\n <i id=\"unauthenticated-user-image\" *ngIf=\"!authenticationService.authenticated\"\r\n class=\"fa fa-user-circle\"\r\n [class.fa-spin]=\"authenticationService.authenticating\"\r\n aria-hidden=\"true\"\r\n matTooltip=\"Login\"\r\n (click)=\"login()\"></i>\r\n\r\n <img id=\"authenticated-user-image\"\r\n *ngIf=\"authenticationService.authenticated && authenticationService.authenticatedUser.photoUrl\"\r\n [src]=\"authenticationService.authenticatedUser.photoUrl\"\r\n matTooltip=\"Logout\"\r\n (click)=\"confirmLogout()\" />\r\n\r\n <i id=\"authenticated-user-image\"\r\n *ngIf=\"authenticationService.authenticated && !authenticationService.authenticatedUser.photoUrl\"\r\n class=\"fa fa-user-circle\"\r\n matTooltip=\"Logout\"\r\n (click)=\"confirmLogout()\"></i>\r\n\r\n <div id=\"user-name\" *ngIf=\"authenticationService.authenticated\">\r\n {{ authenticationService.authenticatedUser.displayName }}\r\n </div>\r\n</div>","//#region Imports\r\nimport { NgModule, ModuleWithProviders, Optional, SkipSelf } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n// Angular Material\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n// Modules\r\nimport { DialogModule } from './../dialog/dialog.module';\r\n\r\n// Services\r\nimport { AuthenticationServiceConfig } from './model/authentication.service.config';\r\nimport { AuthenticationService } from './services/authentication.service';\r\n\r\n// Components\r\nimport { LoginComponent } from './components/login/login.component';\r\nimport { LoginFormComponent } from './components/login-form/login-form.component';\r\n//#endregion\r\n\r\n//#region Exports\r\n// Model\r\nexport * from './model/authentication.service.config';\r\nexport * from './model/authentication-token';\r\n\r\n// Services\r\nexport * from './services/authentication.service';\r\n\r\n// Components\r\nexport * from './components/login/login.component';\r\nexport * from './components/login-form/login-form.component';\r\n//#endregion\r\n\r\n/**\r\n * Provides a component and a service that allows you to perform Active/Directory authentication\r\n */\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n MatButtonModule,\r\n MatCheckboxModule,\r\n MatDialogModule,\r\n MatInputModule,\r\n MatProgressBarModule,\r\n MatProgressSpinnerModule,\r\n MatTooltipModule,\r\n MatSelectModule,\r\n DialogModule\r\n ],\r\n declarations: [\r\n LoginComponent,\r\n LoginFormComponent\r\n ],\r\n exports: [\r\n LoginComponent,\r\n LoginFormComponent\r\n ],\r\n providers: [],\r\n entryComponents: [\r\n LoginFormComponent\r\n ]\r\n})\r\nexport class AuthenticationModule {\r\n static forRoot(authenticationConfig: AuthenticationServiceConfig): ModuleWithProviders<AuthenticationModule> {\r\n return {\r\n ngModule: AuthenticationModule,\r\n providers: [\r\n AuthenticationService,\r\n { provide: AuthenticationServiceConfig, useValue: authenticationConfig }\r\n ]\r\n };\r\n }\r\n\r\n constructor( @Optional() @SkipSelf() parentModule: AuthenticationModule) {\r\n if (parentModule) {\r\n throw new Error(\r\n 'AuthenticationModule is already loaded. Import it in the AppModule only');\r\n }\r\n }\r\n}\r\n","import { EmailSender } from './email-sender';\r\n\r\nexport class EmailServiceConfig {\r\n emailApiUrl: string;\r\n server: string;\r\n smtpPort: number;\r\n sender: EmailSender;\r\n}\r\n","//#region Imports\r\nimport { Injectable, Optional } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { EmailServiceConfig } from './../model/email.service.config';\r\nimport { Email } from './../model/email';\r\nimport { EmailDto } from './../model/email-dto';\r\n//#endregion\r\n\r\n@Injectable()\r\nexport class EmailService {\r\n private emailServiceConfig: EmailServiceConfig;\r\n\r\n constructor(@Optional() config: EmailServiceConfig,\r\n private http: HttpClient) {\r\n this.emailServiceConfig = config;\r\n }\r\n\r\n send(email: Email): Observable<Email> {\r\n const dto: EmailDto = {\r\n server: this.emailServiceConfig.server,\r\n smtpPort: this.emailServiceConfig.smtpPort,\r\n sender: this.emailServiceConfig.sender,\r\n subject: email.subject,\r\n content: email.content,\r\n recipients: email.recipients\r\n };\r\n\r\n return this.http.post<Email>(this.emailServiceConfig.emailApiUrl, dto);\r\n }\r\n}\r\n","//#region Imports\r\nimport { NgModule, ModuleWithProviders, Optional, SkipSelf } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n// Services\r\nimport { EmailServiceConfig } from './model/email.service.config';\r\nimport { EmailService } from './services/email.service';\r\n//#endregion\r\n\r\n//#region Exports\r\n// Model\r\nexport * from './model/email.service.config';\r\nexport * from './model/email';\r\n\r\n// Services\r\nexport * from './services/email.service';\r\n//#endregion\r\n\r\n@NgModule({\r\n imports: [ CommonModule ],\r\n declarations: [],\r\n exports: []\r\n})\r\nexport class EmailModule {\r\n static forRoot(emailConfig: EmailServiceConfig): ModuleWithProviders<EmailModule> {\r\n return {\r\n ngModule: EmailModule,\r\n providers: [\r\n EmailService,\r\n { provide: EmailServiceConfig, useValue: emailConfig }\r\n ]\r\n };\r\n }\r\n\r\n constructor( @Optional() @SkipSelf() parentModule: EmailModule) {\r\n if (parentModule) {\r\n throw new Error(\r\n 'EmailModule is already loaded. Import it in the AppModule only');\r\n }\r\n }\r\n}\r\n","export class EmployeeServiceConfig {\r\n employeeApiUrl: string;\r\n}\r\n","//#region Imports\r\nimport { Injectable, Optional } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, of } from 'rxjs';\r\n\r\nimport { Employee } from './../model/employee';\r\nimport { EmployeeServiceConfig } from './../model/employee.service.config';\r\n//#endregion\r\n\r\n@Injectable()\r\nexport class EmployeeService {\r\n //#region Fields\r\n private employeeApiUrl: string;\r\n employees: Employee[];\r\n //#endregion\r\n\r\n //#region Lifecycle\r\n constructor( @Optional() config: EmployeeServiceConfig,\r\n private http: HttpClient) {\r\n this.employeeApiUrl = config.employeeApiUrl;\r\n }\r\n //#endregion\r\n\r\n //#region Utilities\r\n getEmployees(storeEmployees = false, includeDisabled = false): Observable<Employee[]> {\r\n // Do we already have employees stored locally?\r\n if (this.employees) {\r\n return of(this.employees);\r\n // return Observable.of(this.employees);\r\n }\r\n\r\n // Should we store employees locally for subsequent calls?\r\n if (storeEmployees) {\r\n this.http.get<Employee[]>(`${this.employeeApiUrl}/false/${includeDisabled}`)\r\n .subscribe(emps => this.employees = emps);\r\n }\r\n\r\n return this.http.get<Employee[]>(`${this.employeeApiUrl}/false/${includeDisabled}`);\r\n }\r\n\r\n getEmployee(sAMAccountName: string): Observable<Employee> {\r\n return this.http.get<Employee>(`${this.employeeApiUrl}/name/${sAMAccountName}`);\r\n }\r\n //#endregion\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Employee } from './../model/employee';\r\n\r\n@Pipe({\r\n name: 'departments'\r\n})\r\nexport class DepartmentsPipe implements PipeTransform {\r\n\r\n transform(employees: Employee[], args?: any): string[] {\r\n const departments: string[] = [];\r\n\r\n employees\r\n .filter(emp => emp.department)\r\n .forEach(emp => {\r\n if (departments.indexOf(emp.department) === -1) {\r\n departments.push(emp.department);\r\n }\r\n });\r\n\r\n return departments.sort();\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Employee } from './../model/employee';\r\n\r\n@Pipe({\r\n name: 'employeeByDn'\r\n})\r\nexport class EmployeeByDnPipe implements PipeTransform {\r\n\r\n transform(employees: Employee[], dn: string): Employee {\r\n return employees\r\n .find(emp => emp.distinguishedName.toLowerCase() === dn.toLowerCase());\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Employee } from './../model/employee';\r\nimport { SharePointEmployeePicture } from './../../sharepoint/model/sharepoint-employee-picture';\r\n\r\n@Pipe({\r\n name: 'employeePhotoUrl'\r\n})\r\nexport class EmployeePhotoUrlPipe implements PipeTransform {\r\n transform(employee: Employee, photos: SharePointEmployeePicture[]): any {\r\n if (!photos) { return null; }\r\n\r\n // Try to match by employeeNumber, accountName, or title\r\n const photo = photos\r\n .find(pic =>\r\n (pic.ows_EmployeeNumber && employee.employeeNumber && +pic.ows_EmployeeNumber === +employee.employeeNumber) ||\r\n (pic.ows_AccountName && pic.ows_AccountName.toLowerCase() === employee.sAMAccountName.toLowerCase()) ||\r\n (pic.ows_Title && pic.ows_Title.toLowerCase() === employee.displayName.toLowerCase()));\r\n\r\n if (!photo) {\r\n console.log(`No photo match for ${employee.displayName}`);\r\n }\r\n\r\n return photo ? photo.ows_EncodedAbsUrl : null;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Employee } from './../model/employee';\r\n\r\n@Pipe({\r\n name: 'employeesWithPropertyValue'\r\n})\r\nexport class EmployeesWithPropertyValuePipe implements PipeTransform {\r\n\r\n transform(employees: Employee[], propertyName: string, propertyValue: any): Employee[] {\r\n return employees\r\n .filter(emp => emp[propertyName] && emp[propertyName] === propertyValue);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Employee } from './../model/employee';\r\n\r\n@Pipe({\r\n name: 'filterEmployees'\r\n})\r\nexport class FilterEmployeesPipe implements PipeTransform {\r\n transform(employees: Employee[], filter: string): Employee[] {\r\n return filter ?\r\n employees\r\n .filter(emp =>\r\n emp.displayName.toLowerCase().indexOf(filter.toLowerCase()) !== -1 ||\r\n (emp.department && emp.department.toLowerCase().indexOf(filter.toLowerCase()) !== -1) ||\r\n (emp.title && emp.title.toLowerCase().indexOf(filter.toLowerCase()) !== -1) ||\r\n emp.sAMAccountName.toLowerCase().indexOf(filter.toLowerCase()) !== -1\r\n ) :\r\n employees;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Employee } from './../model/employee';\r\n\r\n@Pipe({\r\n name: 'isMemberOf'\r\n})\r\nexport class IsMemberOfPipe implements PipeTransform {\r\n\r\n transform(employee: Employee, groupName: string): boolean {\r\n return employee.memberOf &&\r\n (employee.memberOf.find(m => m.toLowerCase().indexOf(groupName.toLowerCase()) !== -1) !== undefined);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Employee } from './../model/employee';\r\n\r\n@Pipe({\r\n name: 'sortEmployees'\r\n})\r\nexport class SortEmployeesPipe implements PipeTransform {\r\n transform(employees: Employee[], sortBy?: string, dataType?: string, reverse?: boolean): Employee[] {\r\n return this.getSorted(employees,\r\n sortBy ? sortBy : 'displayName',\r\n dataType ? dataType : 'string',\r\n reverse ? reverse : false);\r\n }\r\n\r\n private getSorted(employees: Employee[], sortBy: string, dataType: string, reverse: boolean): Employee[] {\r\n const sorted = employees\r\n .sort((a, b) => {\r\n let valA, valB: any;\r\n\r\n switch (dataType.toLowerCase()) {\r\n case 'string':\r\n valA = a[sortBy] ? a[sortBy].toString().toLowerCase() : null;\r\n valB = b[sortBy] ? b[sortBy].toString().toLowerCase() : null;\r\n break;\r\n case 'number':\r\n valA = a[sortBy] ? +a[sortBy] : null;\r\n valB = b[sortBy] ? +b[sortBy] : null;\r\n break;\r\n case 'date':\r\n valA = a[sortBy] ? a[sortBy] as Date : null;\r\n valB = b[sortBy] ? b[sortBy] as Date : null;\r\n break;\r\n }\r\n\r\n if (valA < valB) { return -1; }\r\n if (valA > valB) { return 1; }\r\n return 0;\r\n });\r\n\r\n return reverse ? sorted.reverse() : sorted;\r\n }\r\n}\r\n","//#region Imports\r\nimport { NgModule, ModuleWithProviders, Optional, SkipSelf } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n// Services\r\nimport { EmployeeServiceConfig } from './model/employee.service.config';\r\nimport { EmployeeService } from './services/employee.service';\r\n\r\n// Pipes\r\nimport { DepartmentsPipe } from './pipes/departments.pipe';\r\nimport { EmployeeByDnPipe } from './pipes/employee-by-dn.pipe';\r\nimport { EmployeePhotoUrlPipe } from './pipes/employee-photo-url.pipe';\r\nimport { EmployeesWithPropertyValuePipe } from './pipes/employees-with-property-value.pipe';\r\nimport { FilterEmployeesPipe } from './pipes/filter-employees.pipe';\r\nimport { IsMemberOfPipe } from './pipes/is-member-of.pipe';\r\nimport { SortEmployeesPipe } from './pipes/sort-employees.pipe';\r\n//#endregion\r\n\r\n//#region Exports\r\n// Model\r\nexport * from './model/employee.service.config';\r\nexport * from './model/employee';\r\n\r\n// Services\r\nexport * from './services/employee.service';\r\n\r\n// Pipes\r\nexport * from './pipes/departments.pipe';\r\nexport * from './pipes/employee-by-dn.pipe';\r\nexport * from './pipes/employee-photo-url.pipe';\r\nexport * from './pipes/employees-with-property-value.pipe';\r\nexport * from './pipes/filter-employees.pipe';\r\nexport * from './pipes/is-member-of.pipe';\r\nexport * from './pipes/sort-employees.pipe';\r\n//#endregion\r\n\r\n@NgModule({\r\n imports: [CommonModule],\r\n declarations: [\r\n DepartmentsPipe,\r\n EmployeeByDnPipe,\r\n EmployeesWithPropertyValuePipe,\r\n FilterEmployeesPipe,\r\n IsMemberOfPipe,\r\n EmployeePhotoUrlPipe,\r\n SortEmployeesPipe\r\n ],\r\n exports: [\r\n DepartmentsPipe,\r\n EmployeeByDnPipe,\r\n EmployeesWithPropertyValuePipe,\r\n FilterEmployeesPipe,\r\n IsMemberOfPipe,\r\n EmployeePhotoUrlPipe,\r\n SortEmployeesPipe\r\n ]\r\n})\r\nexport class EmployeeModule {\r\n static forRoot(employeeConfig: EmployeeServiceConfig): ModuleWithProviders<EmployeeModule> {\r\n return {\r\n ngModule: EmployeeModule,\r\n providers: [\r\n EmployeeService,\r\n { provide: EmployeeServiceConfig, useValue: employeeConfig }\r\n ]\r\n };\r\n }\r\n\r\n constructor( @Optional() @SkipSelf() parentModule: EmployeeModule) {\r\n if (parentModule) {\r\n throw new Error(\r\n 'EmployeeModule is already loaded. Import it in the AppModule only');\r\n }\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SharePointPicture } from './../model/sharepoint-picture';\r\n\r\n@Pipe({\r\n name: 'sharePointPhotoUrl'\r\n})\r\nexport class SharePointPhotoUrlPipe implements PipeTransform {\r\n transform(photo: SharePointPicture): string {\r\n return photo.ows_EncodedAbsUrl;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'sharePointUrl'\r\n})\r\nexport class SharePointUrlPipe implements PipeTransform {\r\n\r\n transform(url: string): string {\r\n return url !== null ? url.split(',')[0] : null;\r\n }\r\n}\r\n","//#region Imports\r\nimport { NgModule, ModuleWithProviders, Optional, SkipSelf } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n// Services\r\nimport { SharePointServiceConfig } from './model/sharepoint.service.config';\r\nimport { SharePointService } from './services/sharepoint.service';\r\n\r\n// Pipes\r\nimport { SharePointPhotoUrlPipe } from './pipes/sharepoint-photo-url.pipe';\r\nimport { SharePointUrlPipe } from './pipes/sharepoint-url.pipe';\r\n//#endregion\r\n\r\n//#region Exports\r\n// Model\r\nexport * from './model/sharepoint-calendar-event';\r\nexport * from './model/sharepoint-customer-visit';\r\nexport * from './model/sharepoint-employee-picture';\r\nexport * from './model/sharepoint-list';\r\nexport * from './model/sharepoint-list-item';\r\nexport * from './model/sharepoint-person';\r\nexport * from './model/sharepoint-picture';\r\nexport * from './model/sharepoint.service.config';\r\n\r\n// Services\r\nexport * from './services/sharepoint.service';\r\n\r\n// Pipes\r\nexport * from './pipes/sharepoint-photo-url.pipe';\r\nexport * from './pipes/sharepoint-url.pipe';\r\n//#endregion\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule\r\n ],\r\n declarations: [\r\n SharePointPhotoUrlPipe,\r\n SharePointUrlPipe\r\n ],\r\n exports: [\r\n SharePointPhotoUrlPipe,\r\n SharePointUrlPipe\r\n ]\r\n})\r\nexport class SharePointModule {\r\n static forRoot(sharePointConfig: SharePointServiceConfig): ModuleWithProviders<SharePointModule> {\r\n return {\r\n ngModule: SharePointModule,\r\n providers: [\r\n SharePointService,\r\n { provide: SharePointServiceConfig, useValue: sharePointConfig }\r\n ]\r\n };\r\n }\r\n\r\n constructor( @Optional() @SkipSelf() parentModule: SharePointModule) {\r\n if (parentModule) {\r\n throw new Error(\r\n 'SharePointModule is already loaded. Import it in the AppModule only');\r\n }\r\n }\r\n}\r\n","export class UploadServiceConfig {\r\n uploadApiUrl: string;\r\n uploadPath?: string;\r\n dbAppId?: string;\r\n externalReferenceId?: string;\r\n comment?: string;\r\n\r\n // UI configuration\r\n uploadButtonText?: string;\r\n uploadDialogTitle?: string;\r\n uploadDialogAddFilesButtonText?: string;\r\n uploadDialogCancelButtonText?: string;\r\n uploadDialogUploadButtonText?: string;\r\n uploadDialogFinishButtonText?: string;\r\n}\r\n","import { Injectable, Optional } from '@angular/core';\r\nimport { HttpClient, HttpRequest, HttpEventType, HttpResponse, HttpHeaders } from '@angular/common/http';\r\nimport { Subject , Observable } from 'rxjs';\r\nimport { UploadServiceConfig } from './../model/upload.service.config';\r\nimport { FileUploadRequest } from './../model/file-upload-request';\r\nimport { DatabaseFileInfo } from './../model/database-file-info';\r\nimport { FilesystemFileInfo } from './../model/filesystem-file-info';\r\n\r\n// https://malcoded.com/posts/angular-file-upload-component-with-express\r\n\r\n@Injectable()\r\nexport class UploadService {\r\n public uploadApiUrl: string;\r\n public uploadPath: string;\r\n public dbAppId: string;\r\n public externalReferenceId: string;\r\n public comment: string;\r\n\r\n // UI configuration\r\n public uploadButtonText: string;\r\n public uploadDialogTitle: string;\r\n public uploadDialogAddFilesButtonText: string;\r\n public uploadDialogCancelButtonText: string;\r\n public uploadDialogUploadButtonText: string;\r\n public uploadDialogFinishButtonText: string;\r\n\r\n constructor(private http: HttpClient,\r\n @Optional() config: UploadServiceConfig) {\r\n this.uploadApiUrl = config.uploadApiUrl;\r\n this.uploadPath = config.uploadPath || '';\r\n this.dbAppId = config.dbAppId || '';\r\n this.externalReferenceId = config.externalReferenceId || '';\r\n this.comment = config.comment || '';\r\n\r\n // UI configuration\r\n this.uploadButtonText = config.uploadButtonText;\r\n this.uploadDialogTitle = config.uploadDialogTitle;\r\n this.uploadDialogAddFilesButtonText = config.uploadDialogAddFilesButtonText;\r\n this.uploadDialogCancelButtonText = config.uploadDialogCancelButtonText;\r\n this.uploadDialogUploadButtonText = config.uploadDialogUploadButtonText;\r\n this.uploadDialogFinishButtonText = config.uploadDialogFinishButtonText;\r\n }\r\n\r\n public upload(files: Set<File>): {[key: string]: Observable<number>} {\r\n // this will be the our resulting map\r\n const status = {};\r\n\r\n files.forEach(file => {\r\n // create a new multipart-form for every file\r\n const formData: FormData = new FormData();\r\n formData.append('file', file, file.name);\r\n\r\n // create a http-post request and pass the form\r\n // tell it to report the upload progress\r\n\r\n // A 'Destination' header is used to optionally configure the file upload destination (filesystem)\r\n // A 'DbAppId' header is used to configure the unique identifier of database uploads\r\n const req = new HttpRequest('POST', this.uploadApiUrl, formData, {\r\n reportProgress: true,\r\n responseType: 'blob',\r\n headers: new HttpHeaders()\r\n .set('Destination', this.uploadPath)\r\n .set('DbAppId', this.dbAppId)\r\n .set('ExternalReferenceId', this.externalReferenceId)\r\n .set('Comment', this.comment)\r\n /*headers: this.uploadPath ?\r\n new HttpHeaders({ 'Destination': this.uploadPath }) :\r\n this.dbAppId ?\r\n new HttpHeaders({ 'DbAppId': this.dbAppId }) :\r\n null*/\r\n });\r\n\r\n // create a new progress-subject for every file\r\n const progress = new Subject<number>();\r\n\r\n // send the http-request and subscribe for progress-updates\r\n this.http.request(req).subscribe(event => {\r\n if (event.type === HttpEventType.UploadProgress) {\r\n\r\n // calculate the progress percentage\r\n const percentDone = Math.round(100 * event.loaded / event.total);\r\n\r\n // pass the percentage into the progress-stream\r\n progress.next(percentDone);\r\n } else if (event instanceof HttpResponse) {\r\n\r\n // Close the progress-stream if we get an answer form the API\r\n // The upload is complete\r\n progress.complete();\r\n }\r\n });\r\n\r\n // Save every progress-observable in a map of all observables\r\n status[file.name] = {\r\n progress: progress.asObservable()\r\n };\r\n });\r\n\r\n // return the map of progress.observables\r\n return status;\r\n }\r\n\r\n public exists(fileName: string): Observable<boolean> {\r\n const query = this.uploadApiUrl.toLowerCase().indexOf('filesystem') === -1 ?\r\n { name: fileName, dbAppId: this.dbAppId } :\r\n { name: fileName, destination: this.uploadPath };\r\n\r\n return this.http.post<boolean>(`${this.uploadApiUrl}/exists`, query);\r\n }\r\n\r\n public download(request: FileUploadRequest): Observable<Blob> {\r\n return this.http.post(`${this.uploadApiUrl}/stream`, request, { responseType: 'blob' });\r\n }\r\n\r\n public getUploadInfo(request: FileUploadRequest):\r\n Observable<DatabaseFileInfo | DatabaseFileInfo[] | FilesystemFileInfo | FilesystemFileInfo[]> {\r\n return this.http.post<DatabaseFileInfo | DatabaseFileInfo[] | FilesystemFileInfo | FilesystemFileInfo[]>\r\n (`${this.uploadApiUrl}/info`, request);\r\n }\r\n}\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { UploadService } from './../../services/upload.service';\r\nimport { forkJoin } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'cp-upload-dialog',\r\n templateUrl: './upload-dialog.component.html',\r\n styleUrls: ['./upload-dialog.component.css']\r\n})\r\nexport class UploadDialogComponent implements OnInit {\r\n @ViewChild('file', { static: true }) file;\r\n public files: Set<File> = new Set();\r\n existingFileConflict: string;\r\n\r\n // State\r\n progress;\r\n canBeClosed = true;\r\n primaryButtonText: string;\r\n showCancelButton = true;\r\n uploading = false;\r\n uploadSuccessful = false;\r\n\r\n // UI configuration\r\n uploadDialogTitle: string;\r\n uploadDialogAddFilesButtonText: string;\r\n uploadDialogCancelButtonText: string;\r\n uploadDialogUploadButtonText: string;\r\n uploadDialogFinishButtonText: string;\r\n\r\n constructor(public dialogRef: MatDialogRef<UploadDialogComponent>, public uploadService: UploadService) { }\r\n\r\n ngOnInit() {\r\n this.uploadDialogTitle = this.uploadService.uploadDialogTitle ?\r\n this.uploadService.uploadDialogTitle :\r\n 'Upload Files';\r\n\r\n this.uploadDialogAddFilesButtonText = this.uploadService.uploadDialogAddFilesButtonText ?\r\n this.uploadService.uploadDialogAddFilesButtonText :\r\n 'Add Files';\r\n\r\n this.uploadDialogCancelButtonText = this.uploadService.uploadDialogCancelButtonText ?\r\n this.uploadService.uploadDialogCancelButtonText :\r\n 'Cancel';\r\n\r\n this.uploadDialogUploadButtonText = this.uploadService.uploadDialogUploadButtonText ?\r\n this.uploadService.uploadDialogUploadButtonText :\r\n 'Upload';\r\n\r\n this.uploadDialogFinishButtonText = this.uploadService.uploadDialogFinishButtonText ?\r\n this.uploadService.uploadDialogFinishButtonText :\r\n 'Finish';\r\n\r\n this.primaryButtonText = this.uploadDialogUploadButtonText;\r\n }\r\n\r\n addFiles() {\r\n this.file.nativeElement.click();\r\n }\r\n\r\n onFilesAdded() {\r\n const files: { [key: string]: File } = this.file.nativeElement.files;\r\n for (const key in files) {\r\n if (!isNaN(parseInt(key))) {\r\n // See if the file already exists\r\n this.uploadService.exists(files[key].name)\r\n .subscribe(exists => {\r\n if (exists) {\r\n this.existingFileConflict = files[key].name;\r\n }\r\n\r\n if (!exists) {\r\n this.files.add(files[key]);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n closeDialog() {\r\n // if everything was uploaded already, just close the dialog\r\n if (this.uploadSuccessful) {\r\n return this.dialogRef.close();\r\n }\r\n\r\n // set the component state to \"uploading\"\r\n this.uploading = true;\r\n\r\n // start the upload and save the progress map\r\n this.progress = this.uploadService.upload(this.files);\r\n\r\n // convert the progress map into an array\r\n const allProgressObservables = [];\r\n\r\n for (let key in this.progress) {\r\n allProgressObservables.push(this.progress[key].progress);\r\n }\r\n\r\n // Adjust the state variables\r\n\r\n // The OK-button should have the text \"Finish\" now\r\n this.primaryButtonText = this.uploadDialogFinishButtonText;\r\n\r\n // The dialog should not be closed while uploading\r\n this.canBeClosed = false;\r\n this.dialogRef.disableClose = true;\r\n\r\n // Hide the cancel-button\r\n this.showCancelButton = false;\r\n\r\n // When all progress-observables are completed...\r\n forkJoin(allProgressObservables).subscribe(end => {\r\n // ... the dialog can be closed again...\r\n this.canBeClosed = true;\r\n this.dialogRef.disableClose = false;\r\n\r\n // ... the upload was successful...\r\n this.uploadSuccessful = true;\r\n\r\n // ... and the component is no longer uploading\r\n this.uploading = false;\r\n });\r\n }\r\n}\r\n","<input type=\"file\" #file style=\"display: none\" (change)=\"onFilesAdded()\" multiple />\r\n\r\n<div mat-dialog-title id=\"title\">\r\n <div>{{ uploadDialogTitle }}</div>\r\n <button [disabled]=\"uploading || uploadSuccessful\" mat-raised-button color=\"primary\" class=\"add-files-btn\" (click)=\"addFiles()\">\r\n {{ uploadDialogAddFilesButtonText }}\r\n </button>\r\n</div>\r\n\r\n<div id=\"conflict\" *ngIf=\"existingFileConflict\">\r\n {{ existingFileConflict }} already exists on the server and cannot be overwritten\r\n</div>\r\n\r\n<mat-dialog-content>\r\n <mat-list>\r\n <mat-list-item *ngFor=\"let file of files\">\r\n <h4 mat-line>{{file.name}}</h4>\r\n <mat-progress-bar *ngIf=\"progress\" mode=\"determinate\" [value]=\"progress[file.name].progress | async\"></mat-progress-bar>\r\n </mat-list-item>\r\n </mat-list>\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions id=\"actions\">\r\n <button *ngIf=\"showCancelButton\" mat-button mat-dialog-close>{{ uploadDialogCancelButtonText }}</button>\r\n <button *ngIf=\"files.size > 0\" mat-raised-button color=\"primary\" [disabled]=\"!canBeClosed\" (click)=\"closeDialog()\">{{ primaryButtonText }}</button>\r\n</mat-dialog-actions>\r\n","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { UploadDialogComponent } from './../upload-dialog/upload-dialog.component';\r\nimport { UploadService } from './../../services/upload.service';\r\n\r\n@Component({\r\n selector: 'cp-upload',\r\n template: '<button mat-raised-button (click)=\"openUploadDialog()\">{{ uploadButtonText }}</button>'\r\n})\r\nexport class UploadComponent implements OnInit {\r\n @Output() dialogClosed = new EventEmitter();\r\n uploadButtonText: string;\r\n\r\n constructor(public dialog: MatDialog, public uploadService: UploadService) { }\r\n\r\n ngOnInit(): void {\r\n this.uploadButtonText = this.uploadService.uploadButtonText ?\r\n this.uploadService.uploadButtonText :\r\n 'Upload';\r\n }\r\n\r\n public openUploadDialog() {\r\n this.dialog.open(UploadDialogComponent, { width: '50%' })\r\n .afterClosed().subscribe(() => this.dialogClosed.emit());\r\n }\r\n}\r\n","//#region Imports\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule, ModuleWithProviders, Optional, SkipSelf } from '@angular/core';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations'\r\nimport { HttpClientModule } from '@angular/common/http';\r\n\r\n// Angular Material\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\n\r\n// Services\r\nimport { UploadServiceConfig } from './model/upload.service.config';\r\nimport { UploadService } from './services/upload.service';\r\n\r\n// Components\r\nimport { UploadDialogComponent } from './components/upload-dialog/upload-dialog.component';\r\nimport { UploadComponent } from './components/upload/upload.component';\r\n//#endregion\r\n\r\n//#region Exports\r\n// Model\r\nexport * from './model/database-file-info';\r\nexport * from './model/file-upload-request';\r\nexport * from './model/filesystem-file-info';\r\nexport * from './model/upload.service.config';\r\n\r\n// Services\r\nexport * from './services/upload.service';\r\n\r\n// Components\r\nexport * from './components/upload-dialog/upload-dialog.component';\r\nexport * from './components/upload/upload.component';\r\n//#endregion\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n BrowserAnimationsModule,\r\n HttpClientModule,\r\n\r\n MatButtonModule,\r\n MatDialogModule,\r\n MatListModule,\r\n MatProgressBarModule],\r\n declarations: [\r\n UploadComponent,\r\n UploadDialogComponent\r\n ],\r\n exports: [\r\n UploadComponent,\r\n UploadDialogComponent\r\n ],\r\n entryComponents: [\r\n UploadDialogComponent\r\n ]\r\n })\r\n export class UploadModule {\r\n static forRoot(uploadConfig: UploadServiceConfig): ModuleWithProviders<UploadModule> {\r\n return {\r\n ngModule: UploadModule,\r\n providers: [\r\n UploadService,\r\n { provide: UploadServiceConfig, useValue: uploadConfig }\r\n ]\r\n };\r\n }\r\n\r\n constructor(@Optional() @SkipSelf() parentModule: UploadModule) {\r\n if (parentModule) {\r\n throw new Error(\r\n 'UploadModule is already loaded. Import it in the AppModule only');\r\n }\r\n }\r\n }\r\n","// This pipe whitelists URLs so that they aren't prefixed with 'unsafe:' when they render in the DOM\r\n\r\nimport { Pipe, PipeTransform } from '@angular/core';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\n\r\n@Pipe({\r\n name: 'safeUrl'\r\n})\r\nexport class SafeUrlPipe implements PipeTransform {\r\n\r\n constructor(private domSanitizer: DomSanitizer) { }\r\n\r\n transform(value: string): SafeUrl {\r\n return this.domSanitizer.bypassSecurityTrustUrl(value);\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'uriScheme',\r\n pure: false\r\n})\r\nexport class UriSchemePipe implements PipeTransform {\r\n // https://docs.microsoft.com/en-us/office/client-developer/office-uri-schemes\r\n\r\n transform(value: string): string {\r\n if (!localStorage.getItem('useUriScheme')) { return value; }\r\n\r\n const urlSplit = value.split('.');\r\n const extension = urlSplit[urlSplit.length - 1];\r\n\r\n if (!extension) { return value; }\r\n\r\n const command = this.command(extension);\r\n const app = this.app(extension);\r\n\r\n return `ms-${app}:${command}|u|${value}`;\r\n }\r\n\r\n private app(extension: string): string {\r\n switch (extension.toLowerCase()) {\r\n // documents\r\n case 'doc': case 'docx':\r\n case 'docm': case 'docb':\r\n case 'dot': case 'dotx': case 'dotm': // templates\r\n return 'word';\r\n case 'xls': case 'xlsx':\r\n case 'xlm': case 'xlsm': case 'xlsb': case 'xlw':\r\n case 'xlt': case 'xltx': case 'xltm': // templates\r\n return 'excel';\r\n case 'ppt': case 'pptx':\r\n case 'pps': case 'ppsx': case 'pptm': case 'ppsm':\r\n case 'sldx': case 'sldm':\r\n case 'pot': case 'potx': case 'potm': // templates\r\n return 'powerpoint';\r\n case 'vsd': case 'vsdx':\r\n case 'vst': case 'vstx': // templates\r\n return 'visio';\r\n case 'mdb': case 'accdb': case 'accde': case 'accdr':\r\n case 'accdt': // templates\r\n return 'access';\r\n case 'mpp': case 'mppx':\r\n case 'mpt': // templates\r\n return 'project';\r\n case 'pub':\r\n return 'publisher';\r\n case 'xsn':\r\n return 'infopath';\r\n }\r\n }\r\n\r\n private command(extension: string): string {\r\n switch (extension.toLowerCase()) {\r\n case 'dot': case 'dotx': case 'dotm':\r\n case 'xlt': case 'xltx': case 'xltm':\r\n case 'pot': case 'potx': case 'potm':\r\n case 'vst': case 'vstx':\r\n case 'accdt':\r\n case 'mpt':\r\n return 'nft'; // new from template\r\n default:\r\n const openMode = 'v'; // for view, or 'e' or edit\r\n return `of${openMode}`; // default: open file as view/edit\r\n }\r\n }\r\n}\r\n","//#region Imports\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\n\r\n// Pipes\r\nimport { SafeUrlPipe } from './pipes/safe-url.pipe';\r\nimport { UriSchemePipe } from './pipes/uri-scheme.pipe';\r\n//#endregion\r\n\r\n//#region Exports\r\n// Pipes\r\nexport * from './pipes/safe-url.pipe';\r\nexport * from './pipes/uri-scheme.pipe';\r\n//#endregion\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule\r\n ],\r\n declarations: [\r\n SafeUrlPipe,\r\n UriSchemePipe\r\n ],\r\n exports: [\r\n SafeUrlPipe,\r\n UriSchemePipe\r\n ],\r\n entryComponents: [ ]\r\n})\r\nexport class UrlModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i5","i7","i2.DialogComponent","i1.SharePointServiceConfig","i1.AuthenticationServiceConfig","i3.SharePointService","i4","i6","i1","i8","i2.AuthenticationService","i3","i1.EmailServiceConfig","i1.EmployeeServiceConfig","i2.UploadServiceConfig","i2.UploadService"],"mappings":"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"}
|
|
@@ -327,21 +327,27 @@ class AuthenticationService {
|
|
|
327
327
|
*/
|
|
328
328
|
login(username, password, adminGroup) {
|
|
329
329
|
const today = new Date();
|
|
330
|
-
const expiration = new Date().setFullYear(today.getFullYear() + 10);
|
|
330
|
+
//const expiration = new Date().setFullYear(today.getFullYear() + 10);
|
|
331
331
|
const request = {
|
|
332
332
|
username: username,
|
|
333
333
|
password: password,
|
|
334
334
|
adminGroup: adminGroup,
|
|
335
335
|
//expirationDate: expiration // moment().add(10, 'years').toDate()
|
|
336
|
-
includeThumbnail: false
|
|
337
336
|
};
|
|
338
337
|
this.authenticating = true;
|
|
339
338
|
this.authenticatingChanged.emit(this.authenticating);
|
|
340
|
-
this.http.post(this.authenticationApiUrl, request)
|
|
341
|
-
|
|
339
|
+
/*this.http.post<string>(this.authenticationApiUrl, request)
|
|
340
|
+
.subscribe(token => this.validateUser(token),
|
|
341
|
+
err => {
|
|
342
342
|
console.log(err);
|
|
343
343
|
this.authenticating = false;
|
|
344
344
|
this.authenticatingChanged.emit(this.authenticating);
|
|
345
|
+
});*/
|
|
346
|
+
this.http.request('POST', this.authenticationApiUrl, { body: request, responseType: 'text' })
|
|
347
|
+
.subscribe(token => this.validateUser(token), err => {
|
|
348
|
+
console.log('Authentication error', err);
|
|
349
|
+
this.authenticating = false;
|
|
350
|
+
this.authenticatingChanged.emit(this.authenticating);
|
|
345
351
|
});
|
|
346
352
|
}
|
|
347
353
|
/**
|