@cleavelandprice/ngx-lib 3.0.7 → 3.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/active-directory/public_api.d.ts +3 -0
  2. package/authentication/public_api.d.ts +1 -0
  3. package/esm2020/active-directory/public_api.mjs +4 -1
  4. package/esm2020/authentication/public_api.mjs +2 -2
  5. package/esm2020/sharepoint/public_api.mjs +2 -2
  6. package/esm2020/upload/components/upload/upload.component.mjs +3 -2
  7. package/esm2020/upload/components/upload-dialog/upload-dialog.component.mjs +6 -5
  8. package/esm2020/upload/public_api.mjs +2 -2
  9. package/esm2020/upload/upload.module.mjs +5 -1
  10. package/fesm2015/cleavelandprice-ngx-lib-active-directory.mjs +4 -4
  11. package/fesm2015/cleavelandprice-ngx-lib-active-directory.mjs.map +1 -1
  12. package/fesm2015/cleavelandprice-ngx-lib-authentication.mjs +4 -4
  13. package/fesm2015/cleavelandprice-ngx-lib-authentication.mjs.map +1 -1
  14. package/fesm2015/cleavelandprice-ngx-lib-sharepoint.mjs +4 -4
  15. package/fesm2015/cleavelandprice-ngx-lib-sharepoint.mjs.map +1 -1
  16. package/fesm2015/cleavelandprice-ngx-lib-upload.mjs +24 -19
  17. package/fesm2015/cleavelandprice-ngx-lib-upload.mjs.map +1 -1
  18. package/fesm2020/cleavelandprice-ngx-lib-active-directory.mjs +4 -4
  19. package/fesm2020/cleavelandprice-ngx-lib-active-directory.mjs.map +1 -1
  20. package/fesm2020/cleavelandprice-ngx-lib-authentication.mjs +4 -4
  21. package/fesm2020/cleavelandprice-ngx-lib-authentication.mjs.map +1 -1
  22. package/fesm2020/cleavelandprice-ngx-lib-sharepoint.mjs +4 -4
  23. package/fesm2020/cleavelandprice-ngx-lib-sharepoint.mjs.map +1 -1
  24. package/fesm2020/cleavelandprice-ngx-lib-upload.mjs +24 -19
  25. package/fesm2020/cleavelandprice-ngx-lib-upload.mjs.map +1 -1
  26. package/package.json +1 -1
  27. package/sharepoint/public_api.d.ts +1 -0
  28. package/upload/public_api.d.ts +1 -1
  29. package/upload/upload.module.d.ts +5 -4
@@ -1 +1 @@
1
- {"version":3,"file":"cleavelandprice-ngx-lib-sharepoint.mjs","sources":["../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/model/service-config.ts","../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/model/default-config.ts","../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/services/sharepoint.service.ts","../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/sharepoint.module.ts","../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/cleavelandprice-ngx-lib-sharepoint.ts"],"sourcesContent":["import { CachingConfig } from \"./caching-config\";\r\nimport { LoggingConfig } from './logging-config';\r\n\r\nexport class ServiceConfig {\r\n apiUrl!: string;\r\n usersEndpoint!: string;\r\n listItemsEndpoint!: string;\r\n username!: string;\r\n password!: string;\r\n photos!: {\r\n site: string;\r\n list: string;\r\n additionalPropertiesToRetrieve?: string[];\r\n };\r\n caching?: CachingConfig;\r\n logging?: LoggingConfig;\r\n}\r\n","// This is the default configuration, which can be overridden by providing a ServiceConfig object to the module\r\nimport { ServiceConfig } from './service-config';\r\n\r\nexport const defaultConfig: ServiceConfig = {\r\n apiUrl: 'http://utilityapi',\r\n usersEndpoint: '/sharepoint/users',\r\n listItemsEndpoint: '/sharepoint/listitems',\r\n username: 'viewer',\r\n password: 'viewer',\r\n photos: {\r\n site: 'https://sharepoint.cleavelandprice.com/digitaldisplay',\r\n list: 'Employee Thumbnail Photos',\r\n additionalPropertiesToRetrieve: [\r\n 'EncodedAbsUrl'\r\n ]\r\n },\r\n caching: {\r\n enabled: true,\r\n lifeMinutes: 720\r\n },\r\n logging: {\r\n dataCached: true,\r\n cachedDataReturned: true,\r\n freshDataReturned: true,\r\n cacheCleared: true\r\n }\r\n};\r\n","//#region Imports\nimport { Injectable, Optional } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\n\nimport { defaultConfig } from '../model/default-config';\n\nimport { CacheObject } from '../model/cache-object';\nimport { ListItem } from '../model/list-item';\nimport { ListItemsRequest } from '../model/list-items-request';\nimport { PhotoItem } from '../model/photo-item';\nimport { ServiceConfig } from '../model/service-config';\nimport { UserRequest } from '../model/user-request';\nimport { User } from '../model/user';\n\nimport moment from 'moment';\n//#endregion\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SharepointService {\n private cache: {\n users: CacheObject<User> | null,\n photos: CacheObject<PhotoItem> | null\n } | null = null;\n\n private defaultCacheLifeMinutes = 720;\n\n //#region Utilities\n private cacheExpired<T>(cache: CacheObject<T>): boolean {\n if (!cache) {\n return true;\n }\n\n const lifeMinutes = this.config.caching?.lifeMinutes ?? this.defaultCacheLifeMinutes;\n const expiration = moment(cache.lastUpdate)\n .add(lifeMinutes, 'minutes');\n\n return moment().isAfter(expiration);\n }\n //#endregion\n\n //#region Initialization\n // If a ServiceConfig object is not provided when the module is imported, then default values are pulled in from default-config.ts.\n constructor(@Optional() private config: ServiceConfig,\n private http: HttpClient) {\n\n this.config = {\n ...defaultConfig,\n ...this.config\n };\n\n this.configureCaching();\n this.configureLogging();\n }\n\n private configureCaching(): void {\n // If caching config is missing entirely, give it a default\n this.config.caching = this.config.caching ?? {\n enabled: false,\n lifeMinutes: this.defaultCacheLifeMinutes\n };\n\n this.cache = {\n photos: null,\n users: null\n };\n }\n\n private configureLogging(): void {\n // If logging config is missing entirely, give it a default\n this.config.logging = this.config.logging ?? {\n dataCached: false,\n cachedDataReturned: false,\n freshDataReturned: false,\n cacheCleared: false\n }\n }\n //#endregion\n\n getListItems(request: ListItemsRequest): Observable<ListItem[]> {\n const apiUrl = this.config?.apiUrl ?? defaultConfig.apiUrl;\n const endpoint = this.config?.listItemsEndpoint ?? defaultConfig.listItemsEndpoint;\n\n return this.http.post<ListItem[]>(`${apiUrl}${endpoint}`, request);\n }\n\n getPhotos(): Observable<PhotoItem[]> {\n const request: ListItemsRequest = {\n username: this.config?.username ?? defaultConfig.username,\n password: this.config?.password ?? defaultConfig.password,\n site: this.config?.photos.site ?? defaultConfig.photos.site,\n list: this.config?.photos.list ?? defaultConfig.photos.list,\n additionalPropertiesToRetrieve: defaultConfig.photos.additionalPropertiesToRetrieve\n };\n\n const observable$ = this.getListItems(request) as Observable<PhotoItem[]>;\n\n if (this.config.caching?.enabled) {\n if (this.cacheExpired<PhotoItem>(this.cache?.photos!)) {\n // Get the data and cache it\n observable$.subscribe(data => {\n this.cache!.photos = {\n data,\n lastUpdate: moment()\n };\n\n if (this.config.logging?.dataCached) {\n const lifeMinutes = this.config.caching?.lifeMinutes ?? this.defaultCacheLifeMinutes;\n console.log(`Photos cached for ${lifeMinutes} minutes`);\n }\n });\n } else {\n // Cache exists and hasn't expired yet\n if (this.config.logging?.cachedDataReturned) {\n console.log('Returning cached photos');\n }\n\n return of(this.cache!.photos!.data);\n }\n }\n\n // Cache is either disabled or expired, return data from API\n if (this.config.logging?.freshDataReturned) {\n console.log('Returning fresh photos');\n }\n\n return observable$;\n }\n\n getUsers(request: UserRequest, id?: number): Observable<User | User[]> {\n const apiUrl = this.config?.apiUrl ?? defaultConfig.apiUrl;\n const endpoint = this.config?.usersEndpoint ?? defaultConfig.usersEndpoint;\n \n const observable$ = this.http.post<User | User[]>(`${apiUrl}${endpoint}/${id ?? ''}`, request);\n\n //#region Single user\n if (id) {\n return observable$;\n }\n //#endregion\n\n //#region Multiple users\n if (this.config.caching?.enabled) {\n if (this.cacheExpired<User>(this.cache!.users!)) {\n // Get the data and cache it\n observable$.subscribe(data => {\n this.cache!.users = {\n data: data as User[],\n lastUpdate: moment()\n };\n\n if (this.config.logging?.dataCached) {\n const lifeMinutes = this.config.caching?.lifeMinutes ?? this.defaultCacheLifeMinutes;\n console.log(`Users cached for ${lifeMinutes} minutes`);\n }\n });\n } else {\n // Cache exists and hasn't expired yet\n if (this.config.logging?.cachedDataReturned) {\n console.log('Returning cached users');\n }\n\n return of(this.cache!.users!.data);\n }\n }\n\n // Cache is either disabled or expired, return data from API\n if (this.config.logging?.freshDataReturned) {\n console.log('Returning fresh users');\n }\n\n return observable$;\n //#endregion\n }\n\n clearCache(): void {\n this.cache = null;\n\n if (this.config.logging?.cacheCleared) {\n console.log('Cache cleared');\n }\n }\n}","import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ServiceConfig } from './model/service-config';\nimport { SharepointService } from './services/sharepoint.service';\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule\n ]\n})\nexport class SharepointModule {\n static forRoot(config: ServiceConfig): ModuleWithProviders<SharepointModule> {\n return {\n ngModule: SharepointModule,\n providers: [\n SharepointService,\n { provide: ServiceConfig, useValue: config }\n ]\n };\n }\n\n constructor( @Optional() @SkipSelf() parentModule: SharepointModule) {\n if (parentModule) {\n throw new Error(\n 'SharepointModule is already loaded. Import it in the AppModule only');\n }\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.ServiceConfig"],"mappings":"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"}
1
+ {"version":3,"file":"cleavelandprice-ngx-lib-sharepoint.mjs","sources":["../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/model/default-config.ts","../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/model/service-config.ts","../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/services/sharepoint.service.ts","../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/sharepoint.module.ts","../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/cleavelandprice-ngx-lib-sharepoint.ts"],"sourcesContent":["// This is the default configuration, which can be overridden by providing a ServiceConfig object to the module\r\nimport { ServiceConfig } from './service-config';\r\n\r\nexport const defaultConfig: ServiceConfig = {\r\n apiUrl: 'http://utilityapi',\r\n usersEndpoint: '/sharepoint/users',\r\n listItemsEndpoint: '/sharepoint/listitems',\r\n username: 'viewer',\r\n password: 'viewer',\r\n photos: {\r\n site: 'https://sharepoint.cleavelandprice.com/digitaldisplay',\r\n list: 'Employee Thumbnail Photos',\r\n additionalPropertiesToRetrieve: [\r\n 'EncodedAbsUrl'\r\n ]\r\n },\r\n caching: {\r\n enabled: true,\r\n lifeMinutes: 720\r\n },\r\n logging: {\r\n dataCached: true,\r\n cachedDataReturned: true,\r\n freshDataReturned: true,\r\n cacheCleared: true\r\n }\r\n};\r\n","import { CachingConfig } from \"./caching-config\";\r\nimport { LoggingConfig } from './logging-config';\r\n\r\nexport class ServiceConfig {\r\n apiUrl!: string;\r\n usersEndpoint!: string;\r\n listItemsEndpoint!: string;\r\n username!: string;\r\n password!: string;\r\n photos!: {\r\n site: string;\r\n list: string;\r\n additionalPropertiesToRetrieve?: string[];\r\n };\r\n caching?: CachingConfig;\r\n logging?: LoggingConfig;\r\n}\r\n","//#region Imports\nimport { Injectable, Optional } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\n\nimport { defaultConfig } from '../model/default-config';\n\nimport { CacheObject } from '../model/cache-object';\nimport { ListItem } from '../model/list-item';\nimport { ListItemsRequest } from '../model/list-items-request';\nimport { PhotoItem } from '../model/photo-item';\nimport { ServiceConfig } from '../model/service-config';\nimport { UserRequest } from '../model/user-request';\nimport { User } from '../model/user';\n\nimport moment from 'moment';\n//#endregion\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SharepointService {\n private cache: {\n users: CacheObject<User> | null,\n photos: CacheObject<PhotoItem> | null\n } | null = null;\n\n private defaultCacheLifeMinutes = 720;\n\n //#region Utilities\n private cacheExpired<T>(cache: CacheObject<T>): boolean {\n if (!cache) {\n return true;\n }\n\n const lifeMinutes = this.config.caching?.lifeMinutes ?? this.defaultCacheLifeMinutes;\n const expiration = moment(cache.lastUpdate)\n .add(lifeMinutes, 'minutes');\n\n return moment().isAfter(expiration);\n }\n //#endregion\n\n //#region Initialization\n // If a ServiceConfig object is not provided when the module is imported, then default values are pulled in from default-config.ts.\n constructor(@Optional() private config: ServiceConfig,\n private http: HttpClient) {\n\n this.config = {\n ...defaultConfig,\n ...this.config\n };\n\n this.configureCaching();\n this.configureLogging();\n }\n\n private configureCaching(): void {\n // If caching config is missing entirely, give it a default\n this.config.caching = this.config.caching ?? {\n enabled: false,\n lifeMinutes: this.defaultCacheLifeMinutes\n };\n\n this.cache = {\n photos: null,\n users: null\n };\n }\n\n private configureLogging(): void {\n // If logging config is missing entirely, give it a default\n this.config.logging = this.config.logging ?? {\n dataCached: false,\n cachedDataReturned: false,\n freshDataReturned: false,\n cacheCleared: false\n }\n }\n //#endregion\n\n getListItems(request: ListItemsRequest): Observable<ListItem[]> {\n const apiUrl = this.config?.apiUrl ?? defaultConfig.apiUrl;\n const endpoint = this.config?.listItemsEndpoint ?? defaultConfig.listItemsEndpoint;\n\n return this.http.post<ListItem[]>(`${apiUrl}${endpoint}`, request);\n }\n\n getPhotos(): Observable<PhotoItem[]> {\n const request: ListItemsRequest = {\n username: this.config?.username ?? defaultConfig.username,\n password: this.config?.password ?? defaultConfig.password,\n site: this.config?.photos.site ?? defaultConfig.photos.site,\n list: this.config?.photos.list ?? defaultConfig.photos.list,\n additionalPropertiesToRetrieve: defaultConfig.photos.additionalPropertiesToRetrieve\n };\n\n const observable$ = this.getListItems(request) as Observable<PhotoItem[]>;\n\n if (this.config.caching?.enabled) {\n if (this.cacheExpired<PhotoItem>(this.cache?.photos!)) {\n // Get the data and cache it\n observable$.subscribe(data => {\n this.cache!.photos = {\n data,\n lastUpdate: moment()\n };\n\n if (this.config.logging?.dataCached) {\n const lifeMinutes = this.config.caching?.lifeMinutes ?? this.defaultCacheLifeMinutes;\n console.log(`Photos cached for ${lifeMinutes} minutes`);\n }\n });\n } else {\n // Cache exists and hasn't expired yet\n if (this.config.logging?.cachedDataReturned) {\n console.log('Returning cached photos');\n }\n\n return of(this.cache!.photos!.data);\n }\n }\n\n // Cache is either disabled or expired, return data from API\n if (this.config.logging?.freshDataReturned) {\n console.log('Returning fresh photos');\n }\n\n return observable$;\n }\n\n getUsers(request: UserRequest, id?: number): Observable<User | User[]> {\n const apiUrl = this.config?.apiUrl ?? defaultConfig.apiUrl;\n const endpoint = this.config?.usersEndpoint ?? defaultConfig.usersEndpoint;\n \n const observable$ = this.http.post<User | User[]>(`${apiUrl}${endpoint}/${id ?? ''}`, request);\n\n //#region Single user\n if (id) {\n return observable$;\n }\n //#endregion\n\n //#region Multiple users\n if (this.config.caching?.enabled) {\n if (this.cacheExpired<User>(this.cache!.users!)) {\n // Get the data and cache it\n observable$.subscribe(data => {\n this.cache!.users = {\n data: data as User[],\n lastUpdate: moment()\n };\n\n if (this.config.logging?.dataCached) {\n const lifeMinutes = this.config.caching?.lifeMinutes ?? this.defaultCacheLifeMinutes;\n console.log(`Users cached for ${lifeMinutes} minutes`);\n }\n });\n } else {\n // Cache exists and hasn't expired yet\n if (this.config.logging?.cachedDataReturned) {\n console.log('Returning cached users');\n }\n\n return of(this.cache!.users!.data);\n }\n }\n\n // Cache is either disabled or expired, return data from API\n if (this.config.logging?.freshDataReturned) {\n console.log('Returning fresh users');\n }\n\n return observable$;\n //#endregion\n }\n\n clearCache(): void {\n this.cache = null;\n\n if (this.config.logging?.cacheCleared) {\n console.log('Cache cleared');\n }\n }\n}","import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ServiceConfig } from './model/service-config';\nimport { SharepointService } from './services/sharepoint.service';\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule\n ]\n})\nexport class SharepointModule {\n static forRoot(config: ServiceConfig): ModuleWithProviders<SharepointModule> {\n return {\n ngModule: SharepointModule,\n providers: [\n SharepointService,\n { provide: ServiceConfig, useValue: config }\n ]\n };\n }\n\n constructor( @Optional() @SkipSelf() parentModule: SharepointModule) {\n if (parentModule) {\n throw new Error(\n 'SharepointModule is already loaded. Import it in the AppModule only');\n }\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.ServiceConfig"],"mappings":"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"}
@@ -7,12 +7,28 @@ import * as i1 from '@angular/common/http';
7
7
  import { HttpHeaders, HttpRequest, HttpEventType, HttpResponse } from '@angular/common/http';
8
8
  import * as i3 from '@angular/common';
9
9
  import { CommonModule } from '@angular/common';
10
- import * as i4 from '@angular/material/list';
10
+ import * as i4 from '@angular/material/button';
11
+ import { MatButtonModule } from '@angular/material/button';
12
+ import * as i5 from '@angular/material/list';
11
13
  import { MatListModule } from '@angular/material/list';
12
- import * as i5 from '@angular/material/core';
13
- import * as i6 from '@angular/material/progress-bar';
14
+ import * as i6 from '@angular/material/core';
15
+ import * as i7 from '@angular/material/progress-bar';
14
16
  import { MatProgressBarModule } from '@angular/material/progress-bar';
15
17
 
18
+ const defaultConfig = {
19
+ apiUrl: 'http://utilityapi/upload/database',
20
+ uploadDialogTitle: 'Upload Files',
21
+ uploadPath: null,
22
+ comment: null,
23
+ dbAppId: null,
24
+ externalReferenceId: null,
25
+ uploadButtonText: 'Upload',
26
+ uploadDialogCancelButtonText: 'Cancel',
27
+ uploadDialogFinishButtonText: 'Finish',
28
+ uploadDialogUploadButtonText: 'Upload',
29
+ uploadDialogAddFilesButtonText: 'Add Files'
30
+ };
31
+
16
32
  class ServiceConfig {
17
33
  constructor() {
18
34
  this.uploadPath = null;
@@ -29,20 +45,6 @@ class ServiceConfig {
29
45
  }
30
46
  }
31
47
 
32
- const defaultConfig = {
33
- apiUrl: 'http://utilityapi/upload/database',
34
- uploadDialogTitle: 'Upload Files',
35
- uploadPath: null,
36
- comment: null,
37
- dbAppId: null,
38
- externalReferenceId: null,
39
- uploadButtonText: 'Upload',
40
- uploadDialogCancelButtonText: 'Cancel',
41
- uploadDialogFinishButtonText: 'Finish',
42
- uploadDialogUploadButtonText: 'Upload',
43
- uploadDialogAddFilesButtonText: 'Add Files'
44
- };
45
-
46
48
  // https://malcoded.com/posts/angular-file-upload-component-with-express
47
49
  class UploadService {
48
50
  constructor(http, config) {
@@ -197,7 +199,7 @@ class UploadDialogComponent {
197
199
  }
198
200
  }
199
201
  UploadDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: UploadDialogComponent, deps: [{ token: i1$1.MatDialogRef }, { token: UploadService }], target: i0.ɵɵFactoryTarget.Component });
200
- UploadDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: UploadDialogComponent, selector: "cp-upload-dialog", viewQueries: [{ propertyName: "file", first: true, predicate: ["file"], descendants: true, static: true }], ngImport: i0, template: "<input type=\"file\" #file style=\"display: none\" (change)=\"onFilesAdded()\" multiple />\n\n<div mat-dialog-title id=\"title\">\n <div>{{ uploadService.config.uploadDialogTitle }}</div>\n <button [disabled]=\"uploading || uploadSuccessful\" mat-raised-button color=\"primary\" class=\"add-files-btn\" (click)=\"addFiles()\">\n {{ uploadService.config.uploadDialogAddFilesButtonText }}\n </button>\n</div>\n\n<div id=\"conflict\" *ngIf=\"existingFileConflict\">\n {{ existingFileConflict }} already exists on the server and cannot be overwritten\n</div>\n\n<mat-dialog-content>\n <mat-list>\n <mat-list-item *ngFor=\"let file of files\">\n <h4 mat-line>{{file.name}}</h4>\n <mat-progress-bar *ngIf=\"progress\" mode=\"determinate\" [value]=\"progress[file.name].progress | async\"></mat-progress-bar>\n </mat-list-item>\n </mat-list>\n</mat-dialog-content>\n\n<mat-dialog-actions id=\"actions\">\n <button *ngIf=\"showCancelButton\" mat-button mat-dialog-close>{{ uploadService.config.uploadDialogCancelButtonText }}</button>\n <button *ngIf=\"files.size > 0\" mat-raised-button color=\"primary\" [disabled]=\"!canBeClosed\" (click)=\"closeDialog()\">{{ primaryButtonText }}</button>\n</mat-dialog-actions>\n", styles: ["#title{display:flex;justify-content:space-between}#actions{display:flex;justify-content:flex-end}#conflict{font-size:.8em;color:red;margin-top:.5em}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1$1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1$1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i4.MatList, selector: "mat-list, mat-action-list", inputs: ["disableRipple", "disabled"], exportAs: ["matList"] }, { kind: "component", type: i4.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["disableRipple", "disabled"], exportAs: ["matListItem"] }, { kind: "directive", type: i5.MatLine, selector: "[mat-line], [matLine]" }, { kind: "component", type: i6.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] });
202
+ UploadDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: UploadDialogComponent, selector: "cp-upload-dialog", viewQueries: [{ propertyName: "file", first: true, predicate: ["file"], descendants: true, static: true }], ngImport: i0, template: "<input type=\"file\" #file style=\"display: none\" (change)=\"onFilesAdded()\" multiple />\n\n<div mat-dialog-title id=\"title\">\n <div>{{ uploadService.config.uploadDialogTitle }}</div>\n <button [disabled]=\"uploading || uploadSuccessful\" mat-raised-button color=\"primary\" class=\"add-files-btn\" (click)=\"addFiles()\">\n {{ uploadService.config.uploadDialogAddFilesButtonText }}\n </button>\n</div>\n\n<div id=\"conflict\" *ngIf=\"existingFileConflict\">\n {{ existingFileConflict }} already exists on the server and cannot be overwritten\n</div>\n\n<mat-dialog-content>\n <mat-list>\n <mat-list-item *ngFor=\"let file of files\">\n <h4 mat-line>{{file.name}}</h4>\n <mat-progress-bar *ngIf=\"progress\" mode=\"determinate\" [value]=\"progress[file.name].progress | async\"></mat-progress-bar>\n </mat-list-item>\n </mat-list>\n</mat-dialog-content>\n\n<mat-dialog-actions id=\"actions\">\n <button *ngIf=\"showCancelButton\" mat-button mat-dialog-close>{{ uploadService.config.uploadDialogCancelButtonText }}</button>\n <button *ngIf=\"files.size > 0\" mat-raised-button color=\"primary\" [disabled]=\"!canBeClosed\" (click)=\"closeDialog()\">{{ primaryButtonText }}</button>\n</mat-dialog-actions>\n", styles: ["#title{display:flex;justify-content:space-between}#actions{display:flex;justify-content:flex-end}#conflict{font-size:.8em;color:red;margin-top:.5em}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i1$1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1$1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1$1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i5.MatList, selector: "mat-list, mat-action-list", inputs: ["disableRipple", "disabled"], exportAs: ["matList"] }, { kind: "component", type: i5.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["disableRipple", "disabled"], exportAs: ["matListItem"] }, { kind: "directive", type: i6.MatLine, selector: "[mat-line], [matLine]" }, { kind: "component", type: i7.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] });
201
203
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: UploadDialogComponent, decorators: [{
202
204
  type: Component,
203
205
  args: [{ selector: 'cp-upload-dialog', template: "<input type=\"file\" #file style=\"display: none\" (change)=\"onFilesAdded()\" multiple />\n\n<div mat-dialog-title id=\"title\">\n <div>{{ uploadService.config.uploadDialogTitle }}</div>\n <button [disabled]=\"uploading || uploadSuccessful\" mat-raised-button color=\"primary\" class=\"add-files-btn\" (click)=\"addFiles()\">\n {{ uploadService.config.uploadDialogAddFilesButtonText }}\n </button>\n</div>\n\n<div id=\"conflict\" *ngIf=\"existingFileConflict\">\n {{ existingFileConflict }} already exists on the server and cannot be overwritten\n</div>\n\n<mat-dialog-content>\n <mat-list>\n <mat-list-item *ngFor=\"let file of files\">\n <h4 mat-line>{{file.name}}</h4>\n <mat-progress-bar *ngIf=\"progress\" mode=\"determinate\" [value]=\"progress[file.name].progress | async\"></mat-progress-bar>\n </mat-list-item>\n </mat-list>\n</mat-dialog-content>\n\n<mat-dialog-actions id=\"actions\">\n <button *ngIf=\"showCancelButton\" mat-button mat-dialog-close>{{ uploadService.config.uploadDialogCancelButtonText }}</button>\n <button *ngIf=\"files.size > 0\" mat-raised-button color=\"primary\" [disabled]=\"!canBeClosed\" (click)=\"closeDialog()\">{{ primaryButtonText }}</button>\n</mat-dialog-actions>\n", styles: ["#title{display:flex;justify-content:space-between}#actions{display:flex;justify-content:flex-end}#conflict{font-size:.8em;color:red;margin-top:.5em}\n"] }]
@@ -223,7 +225,7 @@ class UploadComponent {
223
225
  }
224
226
  }
225
227
  UploadComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: UploadComponent, deps: [{ token: i1$1.MatDialog }, { token: UploadService }], target: i0.ɵɵFactoryTarget.Component });
226
- UploadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: UploadComponent, selector: "cp-upload", outputs: { dialogClosed: "dialogClosed" }, ngImport: i0, template: '<button mat-raised-button (click)="openUploadDialog()">{{ uploadButtonText }}</button>', isInline: true });
228
+ UploadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: UploadComponent, selector: "cp-upload", outputs: { dialogClosed: "dialogClosed" }, ngImport: i0, template: '<button mat-raised-button (click)="openUploadDialog()">{{ uploadButtonText }}</button>', isInline: true, dependencies: [{ kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }] });
227
229
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: UploadComponent, decorators: [{
228
230
  type: Component,
229
231
  args: [{
@@ -253,11 +255,13 @@ class UploadModule {
253
255
  UploadModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: UploadModule, deps: [{ token: UploadModule, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.NgModule });
254
256
  UploadModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.0", ngImport: i0, type: UploadModule, declarations: [UploadComponent,
255
257
  UploadDialogComponent], imports: [CommonModule,
258
+ MatButtonModule,
256
259
  MatDialogModule,
257
260
  MatListModule,
258
261
  MatProgressBarModule], exports: [UploadComponent,
259
262
  UploadDialogComponent] });
260
263
  UploadModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: UploadModule, imports: [CommonModule,
264
+ MatButtonModule,
261
265
  MatDialogModule,
262
266
  MatListModule,
263
267
  MatProgressBarModule] });
@@ -270,6 +274,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
270
274
  ],
271
275
  imports: [
272
276
  CommonModule,
277
+ MatButtonModule,
273
278
  MatDialogModule,
274
279
  MatListModule,
275
280
  MatProgressBarModule
@@ -1 +1 @@
1
- {"version":3,"file":"cleavelandprice-ngx-lib-upload.mjs","sources":["../../../../projects/cleavelandprice/ngx-lib/upload/src/model/service-config.ts","../../../../projects/cleavelandprice/ngx-lib/upload/src/model/default-config.ts","../../../../projects/cleavelandprice/ngx-lib/upload/src/services/upload.service.ts","../../../../projects/cleavelandprice/ngx-lib/upload/src/components/upload-dialog/upload-dialog.component.ts","../../../../projects/cleavelandprice/ngx-lib/upload/src/components/upload-dialog/upload-dialog.component.html","../../../../projects/cleavelandprice/ngx-lib/upload/src/components/upload/upload.component.ts","../../../../projects/cleavelandprice/ngx-lib/upload/src/upload.module.ts","../../../../projects/cleavelandprice/ngx-lib/upload/src/cleavelandprice-ngx-lib-upload.ts"],"sourcesContent":["export class ServiceConfig {\r\n apiUrl!: string;\r\n uploadPath: string | null = null;\r\n dbAppId: string | null = null;\r\n externalReferenceId: string | null = null;\r\n comment: string | null = null;\r\n\r\n // UI configuration\r\n uploadButtonText: string | null = null;\r\n uploadDialogTitle: string | null = null;\r\n uploadDialogAddFilesButtonText: string | null = null;\r\n uploadDialogCancelButtonText: string | null = null;\r\n uploadDialogUploadButtonText: string | null = null;\r\n uploadDialogFinishButtonText: string | null = null;\r\n}\r\n","import { ServiceConfig } from \"./service-config\";\r\n\r\nexport const defaultConfig: ServiceConfig = {\r\n apiUrl: 'http://utilityapi/upload/database',\r\n uploadDialogTitle: 'Upload Files',\r\n uploadPath: null,\r\n comment: null,\r\n dbAppId: null,\r\n externalReferenceId: null,\r\n \r\n uploadButtonText: 'Upload',\r\n uploadDialogCancelButtonText: 'Cancel',\r\n uploadDialogFinishButtonText: 'Finish',\r\n uploadDialogUploadButtonText: 'Upload',\r\n uploadDialogAddFilesButtonText: 'Add Files'\r\n}","import { Injectable, Optional } from '@angular/core';\nimport { HttpClient, HttpRequest, HttpEventType, HttpResponse, HttpHeaders } from '@angular/common/http';\nimport { Subject , Observable } from 'rxjs';\nimport { ServiceConfig } from '../model/service-config';\nimport { FileUploadRequest } from '../model/file-upload-request';\nimport { DatabaseFileInfo } from '../model/database-file-info';\nimport { FilesystemFileInfo } from '../model/filesystem-file-info';\nimport { defaultConfig } from '../model/default-config';\n\n// https://malcoded.com/posts/angular-file-upload-component-with-express\n\n@Injectable()\nexport class UploadService {\n constructor(private http: HttpClient,\n @Optional() public config: ServiceConfig) {\n this.config = {\n ...defaultConfig,\n ...this.config\n };\n }\n\n public upload(files: Set<File>): any { // {[key: string]: Observable<number>} {\n // this will be the our resulting map\n const status: {[key: string]: {progress: Observable<number>}} = {};\n\n files.forEach(file => {\n // create a new multipart-form for every file\n const formData: FormData = new FormData();\n formData.append('file', file, file.name);\n\n // create a http-post request and pass the form\n // tell it to report the upload progress\n\n // A 'Destination' header is used to optionally configure the file upload destination (filesystem)\n // A 'DbAppId' header is used to configure the unique identifier of database uploads\n \n const headers = new HttpHeaders();\n if (this.config.uploadPath) {\n headers.append('Destination', this.config.uploadPath);\n }\n if (this.config.dbAppId) {\n headers.append('DbAppId', this.config.dbAppId);\n }\n if (this.config.externalReferenceId) {\n headers.append('ExternalReferenceId', this.config.externalReferenceId);\n }\n if (this.config.comment) {\n headers.append('Comment', this.config.comment);\n }\n const req = new HttpRequest('POST', this.config.apiUrl, formData, {\n reportProgress: true,\n responseType: 'blob',\n headers\n });\n\n // create a new progress-subject for every file\n const progress = new Subject<number>();\n\n // send the http-request and subscribe for progress-updates\n this.http.request(req).subscribe(event => {\n if (event.type === HttpEventType.UploadProgress) {\n\n // calculate the progress percentage\n const percentDone = Math.round(100 * event.loaded / (event.total ?? 1));\n\n // pass the percentage into the progress-stream\n progress.next(percentDone);\n } else if (event instanceof HttpResponse) {\n\n // Close the progress-stream if we get an answer form the API\n // The upload is complete\n progress.complete();\n }\n });\n\n // Save every progress-observable in a map of all observables\n status[file.name] = {\n progress: progress.asObservable()\n };\n });\n\n // return the map of progress.observables\n return status;\n }\n\n public exists(fileName: string): Observable<boolean> {\n const query = this.config.apiUrl.toLowerCase().indexOf('filesystem') === -1 ?\n { name: fileName, dbAppId: this.config.dbAppId } :\n { name: fileName, destination: this.config.uploadPath };\n\n return this.http.post<boolean>(`${this.config.apiUrl}/exists`, query);\n }\n\n public download(request: FileUploadRequest): Observable<Blob> {\n return this.http.post(`${this.config.apiUrl}/stream`, request, { responseType: 'blob' });\n }\n\n public getUploadInfo(request: FileUploadRequest):\n Observable<DatabaseFileInfo | DatabaseFileInfo[] | FilesystemFileInfo | FilesystemFileInfo[]> {\n return this.http.post<DatabaseFileInfo | DatabaseFileInfo[] | FilesystemFileInfo | FilesystemFileInfo[]>\n (`${this.config.apiUrl}/info`, request);\n }\n}\n","import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { UploadService } from './../../services/upload.service';\nimport { forkJoin } from 'rxjs';\n\n@Component({\n selector: 'cp-upload-dialog',\n templateUrl: './upload-dialog.component.html',\n styleUrls: ['./upload-dialog.component.css']\n})\nexport class UploadDialogComponent implements OnInit {\n @ViewChild('file', { static: true }) file!: ElementRef;\n public files: Set<File> = new Set();\n existingFileConflict: string | null = null;\n\n // State\n progress: any;\n canBeClosed = true;\n primaryButtonText: string | null = null;\n showCancelButton = true;\n uploading = false;\n uploadSuccessful = false;\n \n constructor(public dialogRef: MatDialogRef<UploadDialogComponent>, public uploadService: UploadService) { }\n\n ngOnInit() {\n this.primaryButtonText = this.uploadService.config.uploadDialogUploadButtonText;\n }\n\n addFiles() {\n this.file.nativeElement.click();\n }\n\n onFilesAdded() {\n const files: { [key: string]: File } = this.file.nativeElement.files;\n for (const key in files) {\n if (!isNaN(parseInt(key))) {\n // See if the file already exists\n this.uploadService.exists(files[key].name)\n .subscribe(exists => {\n if (exists) {\n this.existingFileConflict = files[key].name;\n }\n\n if (!exists) {\n this.files.add(files[key]);\n }\n });\n }\n }\n }\n\n closeDialog() {\n // if everything was uploaded already, just close the dialog\n if (this.uploadSuccessful) {\n return this.dialogRef.close();\n }\n\n // set the component state to \"uploading\"\n this.uploading = true;\n\n // start the upload and save the progress map\n this.progress = this.uploadService.upload(this.files);\n\n // convert the progress map into an array\n const allProgressObservables = [];\n\n for (let key in this.progress) {\n allProgressObservables.push(this.progress[key].progress);\n }\n\n // Adjust the state variables\n\n // The OK-button should have the text \"Finish\" now\n this.primaryButtonText = this.uploadService.config.uploadDialogFinishButtonText;\n\n // The dialog should not be closed while uploading\n this.canBeClosed = false;\n this.dialogRef.disableClose = true;\n\n // Hide the cancel-button\n this.showCancelButton = false;\n\n // When all progress-observables are completed...\n forkJoin(allProgressObservables).subscribe(end => {\n // ... the dialog can be closed again...\n this.canBeClosed = true;\n this.dialogRef.disableClose = false;\n\n // ... the upload was successful...\n this.uploadSuccessful = true;\n\n // ... and the component is no longer uploading\n this.uploading = false;\n });\n }\n}\n","<input type=\"file\" #file style=\"display: none\" (change)=\"onFilesAdded()\" multiple />\n\n<div mat-dialog-title id=\"title\">\n <div>{{ uploadService.config.uploadDialogTitle }}</div>\n <button [disabled]=\"uploading || uploadSuccessful\" mat-raised-button color=\"primary\" class=\"add-files-btn\" (click)=\"addFiles()\">\n {{ uploadService.config.uploadDialogAddFilesButtonText }}\n </button>\n</div>\n\n<div id=\"conflict\" *ngIf=\"existingFileConflict\">\n {{ existingFileConflict }} already exists on the server and cannot be overwritten\n</div>\n\n<mat-dialog-content>\n <mat-list>\n <mat-list-item *ngFor=\"let file of files\">\n <h4 mat-line>{{file.name}}</h4>\n <mat-progress-bar *ngIf=\"progress\" mode=\"determinate\" [value]=\"progress[file.name].progress | async\"></mat-progress-bar>\n </mat-list-item>\n </mat-list>\n</mat-dialog-content>\n\n<mat-dialog-actions id=\"actions\">\n <button *ngIf=\"showCancelButton\" mat-button mat-dialog-close>{{ uploadService.config.uploadDialogCancelButtonText }}</button>\n <button *ngIf=\"files.size > 0\" mat-raised-button color=\"primary\" [disabled]=\"!canBeClosed\" (click)=\"closeDialog()\">{{ primaryButtonText }}</button>\n</mat-dialog-actions>\n","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { UploadDialogComponent } from './../upload-dialog/upload-dialog.component';\nimport { UploadService } from './../../services/upload.service';\n\n@Component({\n selector: 'cp-upload',\n template: '<button mat-raised-button (click)=\"openUploadDialog()\">{{ uploadButtonText }}</button>'\n})\nexport class UploadComponent implements OnInit {\n @Output() dialogClosed = new EventEmitter();\n uploadButtonText!: string;\n\n constructor(public dialog: MatDialog, public uploadService: UploadService) { }\n\n ngOnInit(): void {\n this.uploadButtonText = this.uploadService.config.uploadButtonText ?\n this.uploadService.config.uploadButtonText :\n 'Upload';\n }\n\n public openUploadDialog() {\n this.dialog.open(UploadDialogComponent, { width: '50%' })\n .afterClosed().subscribe(() => this.dialogClosed.emit());\n }\n}\n","import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatListModule } from '@angular/material/list';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\n\nimport { UploadComponent } from './components/upload/upload.component';\nimport { UploadDialogComponent } from './components/upload-dialog/upload-dialog.component';\nimport { ServiceConfig } from './model/service-config';\nimport { UploadService } from './services/upload.service';\n\n@NgModule({\n declarations: [\n UploadComponent,\n UploadDialogComponent\n ],\n imports: [\n CommonModule,\n MatDialogModule,\n MatListModule,\n MatProgressBarModule\n ],\n exports: [\n UploadComponent,\n UploadDialogComponent\n ]\n})\nexport class UploadModule {\n static forRoot(uploadConfig: ServiceConfig): ModuleWithProviders<UploadModule> {\n return {\n ngModule: UploadModule,\n providers: [\n UploadService,\n { provide: ServiceConfig, useValue: uploadConfig }\n ]\n };\n }\n\n constructor(@Optional() @SkipSelf() parentModule: UploadModule) {\n if (parentModule) {\n throw new Error(\n 'UploadModule is already loaded. Import it in the AppModule only');\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2.ServiceConfig","i1","i2.UploadService"],"mappings":"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"}
1
+ {"version":3,"file":"cleavelandprice-ngx-lib-upload.mjs","sources":["../../../../projects/cleavelandprice/ngx-lib/upload/src/model/default-config.ts","../../../../projects/cleavelandprice/ngx-lib/upload/src/model/service-config.ts","../../../../projects/cleavelandprice/ngx-lib/upload/src/services/upload.service.ts","../../../../projects/cleavelandprice/ngx-lib/upload/src/components/upload-dialog/upload-dialog.component.ts","../../../../projects/cleavelandprice/ngx-lib/upload/src/components/upload-dialog/upload-dialog.component.html","../../../../projects/cleavelandprice/ngx-lib/upload/src/components/upload/upload.component.ts","../../../../projects/cleavelandprice/ngx-lib/upload/src/upload.module.ts","../../../../projects/cleavelandprice/ngx-lib/upload/src/cleavelandprice-ngx-lib-upload.ts"],"sourcesContent":["import { ServiceConfig } from \"./service-config\";\r\n\r\nexport const defaultConfig: ServiceConfig = {\r\n apiUrl: 'http://utilityapi/upload/database',\r\n uploadDialogTitle: 'Upload Files',\r\n uploadPath: null,\r\n comment: null,\r\n dbAppId: null,\r\n externalReferenceId: null,\r\n \r\n uploadButtonText: 'Upload',\r\n uploadDialogCancelButtonText: 'Cancel',\r\n uploadDialogFinishButtonText: 'Finish',\r\n uploadDialogUploadButtonText: 'Upload',\r\n uploadDialogAddFilesButtonText: 'Add Files'\r\n}","export class ServiceConfig {\r\n apiUrl!: string;\r\n uploadPath: string | null = null;\r\n dbAppId: string | null = null;\r\n externalReferenceId: string | null = null;\r\n comment: string | null = null;\r\n\r\n // UI configuration\r\n uploadButtonText: string | null = null;\r\n uploadDialogTitle: string | null = null;\r\n uploadDialogAddFilesButtonText: string | null = null;\r\n uploadDialogCancelButtonText: string | null = null;\r\n uploadDialogUploadButtonText: string | null = null;\r\n uploadDialogFinishButtonText: string | null = null;\r\n}\r\n","import { Injectable, Optional } from '@angular/core';\nimport { HttpClient, HttpRequest, HttpEventType, HttpResponse, HttpHeaders } from '@angular/common/http';\nimport { Subject , Observable } from 'rxjs';\nimport { ServiceConfig } from '../model/service-config';\nimport { FileUploadRequest } from '../model/file-upload-request';\nimport { DatabaseFileInfo } from '../model/database-file-info';\nimport { FilesystemFileInfo } from '../model/filesystem-file-info';\nimport { defaultConfig } from '../model/default-config';\n\n// https://malcoded.com/posts/angular-file-upload-component-with-express\n\n@Injectable()\nexport class UploadService {\n constructor(private http: HttpClient,\n @Optional() public config: ServiceConfig) {\n this.config = {\n ...defaultConfig,\n ...this.config\n };\n }\n\n public upload(files: Set<File>): any { // {[key: string]: Observable<number>} {\n // this will be the our resulting map\n const status: {[key: string]: {progress: Observable<number>}} = {};\n\n files.forEach(file => {\n // create a new multipart-form for every file\n const formData: FormData = new FormData();\n formData.append('file', file, file.name);\n\n // create a http-post request and pass the form\n // tell it to report the upload progress\n\n // A 'Destination' header is used to optionally configure the file upload destination (filesystem)\n // A 'DbAppId' header is used to configure the unique identifier of database uploads\n \n const headers = new HttpHeaders();\n if (this.config.uploadPath) {\n headers.append('Destination', this.config.uploadPath);\n }\n if (this.config.dbAppId) {\n headers.append('DbAppId', this.config.dbAppId);\n }\n if (this.config.externalReferenceId) {\n headers.append('ExternalReferenceId', this.config.externalReferenceId);\n }\n if (this.config.comment) {\n headers.append('Comment', this.config.comment);\n }\n const req = new HttpRequest('POST', this.config.apiUrl, formData, {\n reportProgress: true,\n responseType: 'blob',\n headers\n });\n\n // create a new progress-subject for every file\n const progress = new Subject<number>();\n\n // send the http-request and subscribe for progress-updates\n this.http.request(req).subscribe(event => {\n if (event.type === HttpEventType.UploadProgress) {\n\n // calculate the progress percentage\n const percentDone = Math.round(100 * event.loaded / (event.total ?? 1));\n\n // pass the percentage into the progress-stream\n progress.next(percentDone);\n } else if (event instanceof HttpResponse) {\n\n // Close the progress-stream if we get an answer form the API\n // The upload is complete\n progress.complete();\n }\n });\n\n // Save every progress-observable in a map of all observables\n status[file.name] = {\n progress: progress.asObservable()\n };\n });\n\n // return the map of progress.observables\n return status;\n }\n\n public exists(fileName: string): Observable<boolean> {\n const query = this.config.apiUrl.toLowerCase().indexOf('filesystem') === -1 ?\n { name: fileName, dbAppId: this.config.dbAppId } :\n { name: fileName, destination: this.config.uploadPath };\n\n return this.http.post<boolean>(`${this.config.apiUrl}/exists`, query);\n }\n\n public download(request: FileUploadRequest): Observable<Blob> {\n return this.http.post(`${this.config.apiUrl}/stream`, request, { responseType: 'blob' });\n }\n\n public getUploadInfo(request: FileUploadRequest):\n Observable<DatabaseFileInfo | DatabaseFileInfo[] | FilesystemFileInfo | FilesystemFileInfo[]> {\n return this.http.post<DatabaseFileInfo | DatabaseFileInfo[] | FilesystemFileInfo | FilesystemFileInfo[]>\n (`${this.config.apiUrl}/info`, request);\n }\n}\n","import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { UploadService } from './../../services/upload.service';\nimport { forkJoin } from 'rxjs';\n\n@Component({\n selector: 'cp-upload-dialog',\n templateUrl: './upload-dialog.component.html',\n styleUrls: ['./upload-dialog.component.css']\n})\nexport class UploadDialogComponent implements OnInit {\n @ViewChild('file', { static: true }) file!: ElementRef;\n public files: Set<File> = new Set();\n existingFileConflict: string | null = null;\n\n // State\n progress: any;\n canBeClosed = true;\n primaryButtonText: string | null = null;\n showCancelButton = true;\n uploading = false;\n uploadSuccessful = false;\n \n constructor(public dialogRef: MatDialogRef<UploadDialogComponent>, public uploadService: UploadService) { }\n\n ngOnInit() {\n this.primaryButtonText = this.uploadService.config.uploadDialogUploadButtonText;\n }\n\n addFiles() {\n this.file.nativeElement.click();\n }\n\n onFilesAdded() {\n const files: { [key: string]: File } = this.file.nativeElement.files;\n for (const key in files) {\n if (!isNaN(parseInt(key))) {\n // See if the file already exists\n this.uploadService.exists(files[key].name)\n .subscribe(exists => {\n if (exists) {\n this.existingFileConflict = files[key].name;\n }\n\n if (!exists) {\n this.files.add(files[key]);\n }\n });\n }\n }\n }\n\n closeDialog() {\n // if everything was uploaded already, just close the dialog\n if (this.uploadSuccessful) {\n return this.dialogRef.close();\n }\n\n // set the component state to \"uploading\"\n this.uploading = true;\n\n // start the upload and save the progress map\n this.progress = this.uploadService.upload(this.files);\n\n // convert the progress map into an array\n const allProgressObservables = [];\n\n for (let key in this.progress) {\n allProgressObservables.push(this.progress[key].progress);\n }\n\n // Adjust the state variables\n\n // The OK-button should have the text \"Finish\" now\n this.primaryButtonText = this.uploadService.config.uploadDialogFinishButtonText;\n\n // The dialog should not be closed while uploading\n this.canBeClosed = false;\n this.dialogRef.disableClose = true;\n\n // Hide the cancel-button\n this.showCancelButton = false;\n\n // When all progress-observables are completed...\n forkJoin(allProgressObservables).subscribe(end => {\n // ... the dialog can be closed again...\n this.canBeClosed = true;\n this.dialogRef.disableClose = false;\n\n // ... the upload was successful...\n this.uploadSuccessful = true;\n\n // ... and the component is no longer uploading\n this.uploading = false;\n });\n }\n}\n","<input type=\"file\" #file style=\"display: none\" (change)=\"onFilesAdded()\" multiple />\n\n<div mat-dialog-title id=\"title\">\n <div>{{ uploadService.config.uploadDialogTitle }}</div>\n <button [disabled]=\"uploading || uploadSuccessful\" mat-raised-button color=\"primary\" class=\"add-files-btn\" (click)=\"addFiles()\">\n {{ uploadService.config.uploadDialogAddFilesButtonText }}\n </button>\n</div>\n\n<div id=\"conflict\" *ngIf=\"existingFileConflict\">\n {{ existingFileConflict }} already exists on the server and cannot be overwritten\n</div>\n\n<mat-dialog-content>\n <mat-list>\n <mat-list-item *ngFor=\"let file of files\">\n <h4 mat-line>{{file.name}}</h4>\n <mat-progress-bar *ngIf=\"progress\" mode=\"determinate\" [value]=\"progress[file.name].progress | async\"></mat-progress-bar>\n </mat-list-item>\n </mat-list>\n</mat-dialog-content>\n\n<mat-dialog-actions id=\"actions\">\n <button *ngIf=\"showCancelButton\" mat-button mat-dialog-close>{{ uploadService.config.uploadDialogCancelButtonText }}</button>\n <button *ngIf=\"files.size > 0\" mat-raised-button color=\"primary\" [disabled]=\"!canBeClosed\" (click)=\"closeDialog()\">{{ primaryButtonText }}</button>\n</mat-dialog-actions>\n","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { UploadDialogComponent } from './../upload-dialog/upload-dialog.component';\nimport { UploadService } from './../../services/upload.service';\n\n@Component({\n selector: 'cp-upload',\n template: '<button mat-raised-button (click)=\"openUploadDialog()\">{{ uploadButtonText }}</button>'\n})\nexport class UploadComponent implements OnInit {\n @Output() dialogClosed = new EventEmitter();\n uploadButtonText!: string;\n\n constructor(public dialog: MatDialog, public uploadService: UploadService) { }\n\n ngOnInit(): void {\n this.uploadButtonText = this.uploadService.config.uploadButtonText ?\n this.uploadService.config.uploadButtonText :\n 'Upload';\n }\n\n public openUploadDialog() {\n this.dialog.open(UploadDialogComponent, { width: '50%' })\n .afterClosed().subscribe(() => this.dialogClosed.emit());\n }\n}\n","import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatListModule } from '@angular/material/list';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\n\nimport { UploadComponent } from './components/upload/upload.component';\nimport { UploadDialogComponent } from './components/upload-dialog/upload-dialog.component';\nimport { ServiceConfig } from './model/service-config';\nimport { UploadService } from './services/upload.service';\n\n@NgModule({\n declarations: [\n UploadComponent,\n UploadDialogComponent\n ],\n imports: [\n CommonModule,\n MatButtonModule,\n MatDialogModule,\n MatListModule,\n MatProgressBarModule\n ],\n exports: [\n UploadComponent,\n UploadDialogComponent\n ]\n})\nexport class UploadModule {\n static forRoot(uploadConfig: ServiceConfig): ModuleWithProviders<UploadModule> {\n return {\n ngModule: UploadModule,\n providers: [\n UploadService,\n { provide: ServiceConfig, useValue: uploadConfig }\n ]\n };\n }\n\n constructor(@Optional() @SkipSelf() parentModule: UploadModule) {\n if (parentModule) {\n throw new Error(\n 'UploadModule is already loaded. Import it in the AppModule only');\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2.ServiceConfig","i1","i2.UploadService","i3"],"mappings":"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"}
@@ -5,9 +5,6 @@ import moment from 'moment';
5
5
  import * as i2 from '@angular/common/http';
6
6
  import { CommonModule } from '@angular/common';
7
7
 
8
- class ServiceConfig {
9
- }
10
-
11
8
  const defaultCachingConfig = {
12
9
  enabled: false,
13
10
  lifeMinutes: 720
@@ -26,6 +23,9 @@ const defaultConfig = {
26
23
  logging: defaultLoggingConfig
27
24
  };
28
25
 
26
+ class ServiceConfig {
27
+ }
28
+
29
29
  //#region Imports
30
30
  //#endregion
31
31
  class ActiveDirectoryService {
@@ -152,5 +152,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
152
152
  * Generated bundle index. Do not edit.
153
153
  */
154
154
 
155
- export { ActiveDirectoryModule, ActiveDirectoryService, ServiceConfig };
155
+ export { ActiveDirectoryModule, ActiveDirectoryService, ServiceConfig, defaultCachingConfig, defaultConfig, defaultLoggingConfig };
156
156
  //# sourceMappingURL=cleavelandprice-ngx-lib-active-directory.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"cleavelandprice-ngx-lib-active-directory.mjs","sources":["../../../../projects/cleavelandprice/ngx-lib/active-directory/src/model/service-config.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/src/model/default-caching-config.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/src/model/default-logging-config.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/src/model/default-config.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/src/services/active-directory.service.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/src/active-directory.module.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/src/cleavelandprice-ngx-lib-active-directory.ts"],"sourcesContent":["import { CachingConfig } from './caching-config';\r\nimport { LoggingConfig } from './logging-config';\r\n\r\nexport class ServiceConfig {\r\n apiUrl!: string;\r\n caching?: CachingConfig;\r\n logging?: LoggingConfig;\r\n}\r\n","import { CachingConfig } from \"./caching-config\";\r\n\r\nexport const defaultCachingConfig: CachingConfig = {\r\n enabled: false,\r\n lifeMinutes: 720\r\n}","import { LoggingConfig } from \"./logging-config\";\r\n\r\nexport const defaultLoggingConfig: LoggingConfig = {\r\n dataCached: false,\r\n cachedDataReturned: false,\r\n freshDataReturned: false,\r\n cacheCleared: false\r\n}","import { ServiceConfig } from \"./service-config\";\r\nimport { defaultCachingConfig } from './default-caching-config';\r\nimport { defaultLoggingConfig } from \"./default-logging-config\";\r\n\r\nexport const defaultConfig: ServiceConfig = {\r\n apiUrl: 'http://utilityapi/users',\r\n caching: defaultCachingConfig,\r\n logging: defaultLoggingConfig\r\n}","//#region Imports\nimport { Injectable, Optional } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\n\nimport { defaultConfig } from '../model/default-config';\nimport { defaultCachingConfig } from '../model/default-caching-config';\nimport { defaultLoggingConfig } from '../model/default-logging-config';\n\nimport { CacheObject } from '../model/cache-object';\nimport { ServiceConfig } from '../model/service-config';\nimport { User } from '../model/user';\n\nimport moment from 'moment';\n//#endregion\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ActiveDirectoryService {\n private cache: CacheObject<User> | null = null;\n private defaultCacheLifeMinutes = 720;\n\n //#region Properties\n private get cacheExpired(): boolean {\n if (!this.cache) {\n return true;\n }\n\n const lifeMinutes = this.config.caching?.lifeMinutes ?? this.defaultCacheLifeMinutes;\n const expiration = moment(this.cache.lastUpdate)\n .add(lifeMinutes, 'minutes');\n\n return moment().isAfter(expiration);\n }\n //#endregion\n\n //#region Initialization\n // If a ServiceConfig object is not provided when the module is imported, then default values are pulled in from default-config.ts.\n constructor(@Optional() private config: ServiceConfig,\n private http: HttpClient) {\n\n this.config = {\n ...defaultConfig,\n ...this.config\n };\n\n this.config.caching = {\n ...defaultCachingConfig,\n ...this.config.caching\n };\n\n this.config.logging = {\n ...defaultLoggingConfig,\n ...this.config.logging\n };\n }\n //#endregion\n\n getUsers(includePhoto = false, includeDisabled = false, parentOU?: string): Observable<User[]> {\n // If caching is enabled, there will be two calls to the API if the cache is null/expired\n // One call is to update the cache and the other is to return the data that the user requested\n // Subsequent calls will bypass the API and returned cached data until it expires\n\n const observable$ = this.http.get<User[]>(`${this.config.apiUrl}/${includePhoto}/${includeDisabled}/${parentOU ?? ''}`);\n\n if (this.config.caching?.enabled) {\n if (this.cacheExpired) {\n // Get the data and cache it\n observable$.subscribe(data => {\n this.cache = {\n data,\n lastUpdate: moment()\n };\n\n if (this.config.logging?.dataCached) {\n const lifeMinutes = this.config.caching?.lifeMinutes ?? this.defaultCacheLifeMinutes;\n console.log(`Data cached for ${lifeMinutes} minutes`);\n }\n });\n } else {\n // Cache exists and hasn't expired yet\n if (this.config.logging?.cachedDataReturned) {\n console.log('Returning cached users');\n }\n\n return of(this.cache!.data);\n }\n }\n\n // Cache is either disabled or expired, return data from API\n if (this.config.logging?.freshDataReturned) {\n console.log('Returning fresh users');\n }\n\n return observable$;\n }\n\n getUser(accountName: string, includePhoto = false): Observable<User> {\n return this.http.get<User>(`${this.config.apiUrl}/name/${accountName}/${includePhoto}`);\n }\n\n clearCache(): void {\n this.cache = null;\n\n if (this.config.logging?.cacheCleared) {\n console.log('Cache cleared');\n }\n }\n}\n","import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ServiceConfig } from './model/service-config';\nimport { ActiveDirectoryService } from './services/active-directory.service';\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule\n ]\n})\nexport class ActiveDirectoryModule {\n static forRoot(config: ServiceConfig): ModuleWithProviders<ActiveDirectoryModule> {\n return {\n ngModule: ActiveDirectoryModule,\n providers: [\n ActiveDirectoryService,\n { provide: ServiceConfig, useValue: config }\n ]\n };\n }\n\n constructor( @Optional() @SkipSelf() parentModule: ActiveDirectoryModule) {\n if (parentModule) {\n throw new Error(\n 'ActiveDirectoryModule is already loaded. Import it in the AppModule only');\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.ServiceConfig"],"mappings":"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"}
1
+ {"version":3,"file":"cleavelandprice-ngx-lib-active-directory.mjs","sources":["../../../../projects/cleavelandprice/ngx-lib/active-directory/src/model/default-caching-config.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/src/model/default-logging-config.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/src/model/default-config.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/src/model/service-config.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/src/services/active-directory.service.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/src/active-directory.module.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/src/cleavelandprice-ngx-lib-active-directory.ts"],"sourcesContent":["import { CachingConfig } from \"./caching-config\";\r\n\r\nexport const defaultCachingConfig: CachingConfig = {\r\n enabled: false,\r\n lifeMinutes: 720\r\n}","import { LoggingConfig } from \"./logging-config\";\r\n\r\nexport const defaultLoggingConfig: LoggingConfig = {\r\n dataCached: false,\r\n cachedDataReturned: false,\r\n freshDataReturned: false,\r\n cacheCleared: false\r\n}","import { ServiceConfig } from \"./service-config\";\r\nimport { defaultCachingConfig } from './default-caching-config';\r\nimport { defaultLoggingConfig } from \"./default-logging-config\";\r\n\r\nexport const defaultConfig: ServiceConfig = {\r\n apiUrl: 'http://utilityapi/users',\r\n caching: defaultCachingConfig,\r\n logging: defaultLoggingConfig\r\n}","import { CachingConfig } from './caching-config';\r\nimport { LoggingConfig } from './logging-config';\r\n\r\nexport class ServiceConfig {\r\n apiUrl!: string;\r\n caching?: CachingConfig;\r\n logging?: LoggingConfig;\r\n}\r\n","//#region Imports\nimport { Injectable, Optional } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\n\nimport { defaultConfig } from '../model/default-config';\nimport { defaultCachingConfig } from '../model/default-caching-config';\nimport { defaultLoggingConfig } from '../model/default-logging-config';\n\nimport { CacheObject } from '../model/cache-object';\nimport { ServiceConfig } from '../model/service-config';\nimport { User } from '../model/user';\n\nimport moment from 'moment';\n//#endregion\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ActiveDirectoryService {\n private cache: CacheObject<User> | null = null;\n private defaultCacheLifeMinutes = 720;\n\n //#region Properties\n private get cacheExpired(): boolean {\n if (!this.cache) {\n return true;\n }\n\n const lifeMinutes = this.config.caching?.lifeMinutes ?? this.defaultCacheLifeMinutes;\n const expiration = moment(this.cache.lastUpdate)\n .add(lifeMinutes, 'minutes');\n\n return moment().isAfter(expiration);\n }\n //#endregion\n\n //#region Initialization\n // If a ServiceConfig object is not provided when the module is imported, then default values are pulled in from default-config.ts.\n constructor(@Optional() private config: ServiceConfig,\n private http: HttpClient) {\n\n this.config = {\n ...defaultConfig,\n ...this.config\n };\n\n this.config.caching = {\n ...defaultCachingConfig,\n ...this.config.caching\n };\n\n this.config.logging = {\n ...defaultLoggingConfig,\n ...this.config.logging\n };\n }\n //#endregion\n\n getUsers(includePhoto = false, includeDisabled = false, parentOU?: string): Observable<User[]> {\n // If caching is enabled, there will be two calls to the API if the cache is null/expired\n // One call is to update the cache and the other is to return the data that the user requested\n // Subsequent calls will bypass the API and returned cached data until it expires\n\n const observable$ = this.http.get<User[]>(`${this.config.apiUrl}/${includePhoto}/${includeDisabled}/${parentOU ?? ''}`);\n\n if (this.config.caching?.enabled) {\n if (this.cacheExpired) {\n // Get the data and cache it\n observable$.subscribe(data => {\n this.cache = {\n data,\n lastUpdate: moment()\n };\n\n if (this.config.logging?.dataCached) {\n const lifeMinutes = this.config.caching?.lifeMinutes ?? this.defaultCacheLifeMinutes;\n console.log(`Data cached for ${lifeMinutes} minutes`);\n }\n });\n } else {\n // Cache exists and hasn't expired yet\n if (this.config.logging?.cachedDataReturned) {\n console.log('Returning cached users');\n }\n\n return of(this.cache!.data);\n }\n }\n\n // Cache is either disabled or expired, return data from API\n if (this.config.logging?.freshDataReturned) {\n console.log('Returning fresh users');\n }\n\n return observable$;\n }\n\n getUser(accountName: string, includePhoto = false): Observable<User> {\n return this.http.get<User>(`${this.config.apiUrl}/name/${accountName}/${includePhoto}`);\n }\n\n clearCache(): void {\n this.cache = null;\n\n if (this.config.logging?.cacheCleared) {\n console.log('Cache cleared');\n }\n }\n}\n","import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ServiceConfig } from './model/service-config';\nimport { ActiveDirectoryService } from './services/active-directory.service';\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule\n ]\n})\nexport class ActiveDirectoryModule {\n static forRoot(config: ServiceConfig): ModuleWithProviders<ActiveDirectoryModule> {\n return {\n ngModule: ActiveDirectoryModule,\n providers: [\n ActiveDirectoryService,\n { provide: ServiceConfig, useValue: config }\n ]\n };\n }\n\n constructor( @Optional() @SkipSelf() parentModule: ActiveDirectoryModule) {\n if (parentModule) {\n throw new Error(\n 'ActiveDirectoryModule is already loaded. Import it in the AppModule only');\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.ServiceConfig"],"mappings":"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"}
@@ -21,13 +21,13 @@ import { MatInputModule } from '@angular/material/input';
21
21
  import * as i9 from '@angular/material/progress-spinner';
22
22
  import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
23
23
 
24
- class ServiceConfig {
25
- }
26
-
27
24
  const defaultConfig = {
28
25
  apiUrl: 'http://utilityapi/authenticate/token'
29
26
  };
30
27
 
28
+ class ServiceConfig {
29
+ }
30
+
31
31
  //#region Imports
32
32
  //#endregion
33
33
  class AuthenticationService {
@@ -292,5 +292,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
292
292
  * Generated bundle index. Do not edit.
293
293
  */
294
294
 
295
- export { AuthenticationModule, AuthenticationService, LoginComponent, LoginFormComponent, ServiceConfig };
295
+ export { AuthenticationModule, AuthenticationService, LoginComponent, LoginFormComponent, ServiceConfig, defaultConfig };
296
296
  //# sourceMappingURL=cleavelandprice-ngx-lib-authentication.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"cleavelandprice-ngx-lib-authentication.mjs","sources":["../../../../projects/cleavelandprice/ngx-lib/authentication/src/model/service-config.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/src/model/default-config.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/src/services/authentication.service.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/src/components/login-form/login-form.component.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/src/components/login-form/login-form.component.html","../../../../projects/cleavelandprice/ngx-lib/authentication/src/components/login/login.component.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/src/components/login/login.component.html","../../../../projects/cleavelandprice/ngx-lib/authentication/src/authentication.module.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/src/cleavelandprice-ngx-lib-authentication.ts"],"sourcesContent":["export class ServiceConfig {\r\n apiUrl!: string;\r\n}\r\n","import { ServiceConfig } from \"./service-config\";\r\n\r\nexport const defaultConfig: ServiceConfig = {\r\n apiUrl: 'http://utilityapi/authenticate/token'\r\n}","//#region Imports\nimport { Injectable, Output, EventEmitter, Optional } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { JwtHelperService } from '@auth0/angular-jwt';\n\nimport { defaultConfig } from '../model/default-config';\n\nimport { AuthenticationToken } from '../model/authentication-token';\nimport { ServiceConfig } from '../model/service-config';\nimport { SharepointService } from '@cleavelandprice/ngx-lib/sharepoint';\nimport { AuthenticatedUser } from '../model/authenticated-user';\nimport { AuthenticationRequest } from '../model/authentication-request';\n//#endregion\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthenticationService {\n //#region Fields\n @Output() authenticatedChanged = new EventEmitter<boolean>();\n @Output() authenticatingChanged = new EventEmitter<boolean>();\n @Output() authenticationError = new EventEmitter();\n \n // Flag set to true while the service is attempting to authenticate the user\n authenticating = false;\n \n //Flag set to true when the user is successfully authenticated\n authenticated = false;\n \n // Object representing the authenticated user\n authenticatedUser!: AuthenticatedUser | null;\n //#endregion\n \n //#region Lifecycle\n // If a ServiceConfig object is not provided when the module is imported, then default values are pulled in from default-config.ts.\n constructor(@Optional() private config: ServiceConfig,\n private http: HttpClient,\n private sharePointService: SharepointService) {\n\n this.config = {\n ...defaultConfig,\n ...this.config\n };\n \n this.checkForExistingToken();\n }\n //#endregion\n\n //#region Utilities\n //Authenticate the user and store the token in Local Storage\n login(username: string, password: string, adminGroup?: string): void {\n const today = new Date();\n //const expiration = new Date().setFullYear(today.getFullYear() + 10);\n\n const request: AuthenticationRequest = {\n username: username,\n password: password,\n adminGroup: adminGroup\n //expirationDate: expiration // moment().add(10, 'years').toDate()\n };\n\n this.authenticating = true;\n this.authenticatingChanged.emit(this.authenticating);\n\n // Sending a 'raw' POST request so that we can tell HttpClient that we are expecting text instead of Json\n // Otherwise, it would throw an error trying to decode Json from the response\n this.http.request('POST', this.config.apiUrl, { body: request, responseType: 'text' })\n .subscribe({\n next: (token) =>\n this.validateUser(token)\n , error: (err) => {\n //console.log('Authentication error', err);\n this.authenticating = false;\n this.authenticatingChanged.emit(this.authenticating);\n this.authenticationError.emit(err);\n }\n });\n }\n \n //Logout the user and delete the token from Local Storage\n logout(): void {\n if (localStorage.getItem('token')) {\n localStorage.removeItem('token');\n }\n\n this.authenticatedUser = null;\n this.authenticated = false;\n this.authenticatedChanged.emit(false);\n }\n \n private validateUser(token: string | null): void {\n if (!token) { return; }\n\n const jwtHelper = new JwtHelperService();\n const decoded = jwtHelper.decodeToken(token) as AuthenticationToken;\n\n if (jwtHelper.isTokenExpired(token)) {\n this.logout();\n return;\n }\n\n this.authenticatedUser = {\n admin: decoded.role === 'Admin',\n displayName: decoded.displayName,\n accountName: decoded.winaccountname,\n distinguishedName: decoded.distinguishedName,\n employeeNumber: decoded.employeeNumber,\n memberOf: decoded.memberOf\n };\n\n localStorage.setItem('token', token);\n\n this.getPhoto();\n \n this.authenticated = true;\n this.authenticatedChanged.emit(this.authenticated);\n\n this.authenticating = false;\n this.authenticatingChanged.emit(this.authenticating);\n }\n\n private getPhoto(): void {\n this.sharePointService.getPhotos()\n .subscribe(photos => {\n // The user may have been logged out by the time the photos came back\n if (!this.authenticatedUser?.employeeNumber) {\n return;\n }\n\n const photo = photos.find(pic => pic.employeeNumber === +this.authenticatedUser!.employeeNumber);\n\n if (photo) {\n this.authenticatedUser.photoUrl = photo.encodedAbsUrl;\n }\n });\n }\n\n private checkForExistingToken(): void {\n this.validateUser(localStorage.getItem('token'));\n }\n //#endregion\n}\n ","import { Component, Inject, OnInit, OnDestroy } from '@angular/core';\nimport { UntypedFormGroup, UntypedFormControl, Validators } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Subscription } from 'rxjs';\n\nimport { AuthenticationService } from '../../services/authentication.service';\nimport { LoginFormData } from '../../model/login-form-data';\n\n@Component({\n selector: 'authentication-login-form',\n templateUrl: './login-form.component.html',\n styleUrls: [\n './login-form.component.css',\n '../../../../styles/mat-icon.css'\n ]\n})\nexport class LoginFormComponent implements OnInit, OnDestroy {\n errorMessage: string | null = null;\n authenticatedChangedSubscription!: Subscription;\n authenticationErrorSubscription!: Subscription;\n\n form = new UntypedFormGroup({\n username: new UntypedFormControl(null, [ Validators.required ]),\n password: new UntypedFormControl(null, [ Validators.required ]),\n adminGroup: new UntypedFormControl()\n });\n\n constructor(@Inject(MAT_DIALOG_DATA) data: LoginFormData,\n public dialogRef: MatDialogRef<LoginFormComponent>,\n public authenticationService: AuthenticationService) {\n\n this.form.get('adminGroup')?.setValue(data.adminGroup);\n }\n\n ngOnInit(): void {\n this.authenticatedChangedSubscription = this.authenticationService.authenticatedChanged\n .subscribe(this.authChangedHandler.bind(this));\n\n this.authenticationErrorSubscription = this.authenticationService.authenticationError\n .subscribe(this.errorHandler.bind(this));\n }\n\n ngOnDestroy(): void {\n this.authenticationErrorSubscription.unsubscribe();\n this.authenticatedChangedSubscription.unsubscribe();\n }\n\n authenticate() {\n this.errorMessage = null;\n const { username, password, adminGroup } = this.form.value;\n this.authenticationService.login(username, password, adminGroup);\n }\n\n private authChangedHandler(authenticated: boolean): void {\n if (authenticated) {\n this.dialogRef.close();\n }\n }\n\n private errorHandler(err: any): void {\n console.log('Authentication error', err);\n this.errorMessage = `${err.name}: ${err.statusText}`;\n }\n}\n","<h2 mat-dialog-title>\n <span *ngIf=\"!authenticationService.authenticating\">Login</span>\n <span *ngIf=\"authenticationService.authenticating\">Authenticating...</span>\n</h2>\n\n<mat-dialog-content>\n <div id=\"spinner\" *ngIf=\"authenticationService.authenticating\">\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\"></mat-progress-spinner>\n </div>\n\n <form *ngIf=\"!authenticationService.authenticating\" [formGroup]=\"form\">\n <mat-form-field>\n <input matInput formControlName=\"username\" placeholder=\"Username\" (keyup.enter)=\"authenticate()\">\n </mat-form-field>\n\n <mat-form-field>\n <input matInput formControlName=\"password\" type=\"password\" placeholder=\"Password\" (keyup.enter)=\"authenticate()\">\n </mat-form-field>\n </form>\n\n <div *ngIf=\"!authenticationService.authenticating && errorMessage\" id=\"error\">\n {{ errorMessage }}\n </div>\n</mat-dialog-content>\n\n<mat-dialog-actions *ngIf=\"!authenticationService.authenticating\">\n <button mat-raised-button color=\"primary\" (click)=\"authenticate()\"\n [disabled]=\"form.invalid\">\n <mat-icon fontIcon=\"done\"></mat-icon>\n <span>OK</span>\n </button>\n\n <button mat-raised-button (click)=\"dialogRef.close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n <span>Cancel</span>\n </button>\n</mat-dialog-actions>","import { Component, Input } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ConfirmationComponent } from '@cleavelandprice/ngx-lib/dialog';\nimport { LoginFormComponent } from '../login-form/login-form.component';\nimport { AuthenticationService } from '../../services/authentication.service';\n\n@Component({\n selector: 'authentication-login',\n templateUrl: './login.component.html',\n styleUrls: [\n './login.component.css',\n '../../../../styles/mat-icon.css'\n ]\n})\nexport class LoginComponent {\n @Input() adminGroup!: string;\n\n constructor(private dialog: MatDialog,\n public authenticationService: AuthenticationService) {\n }\n\n login(): void {\n this.dialog.open(LoginFormComponent, {\n data: { adminGroup: this.adminGroup }\n });\n }\n\n confirmLogout(): void {\n this.dialog.open(ConfirmationComponent, {\n data: { message: `Are you sure you want to logout?` }\n })\n .afterClosed()\n .subscribe(result => {\n if (result) {\n this.authenticationService.logout();\n }\n });\n }\n}\n","<div id=\"user-id\">\n <!-- Logged out -->\n <mat-icon *ngIf=\"!authenticationService.authenticated\"\n fontIcon=\"account_circle\"\n matTooltip=\"Login\"\n (click)=\"login()\">\n </mat-icon>\n\n <!-- Logged in -->\n <ng-container *ngIf=\"authenticationService.authenticated\">\n <!-- With photo -->\n <img *ngIf=\"authenticationService.authenticatedUser?.photoUrl\"\n id=\"authenticated-user-image\"\n [src]=\"authenticationService.authenticatedUser?.photoUrl\"\n matTooltip=\"Logout\"\n (click)=\"confirmLogout()\" />\n \n <!-- Without photo -->\n <mat-icon *ngIf=\"!authenticationService.authenticatedUser?.photoUrl\"\n fontIcon=\"account_circle\"\n matTooltip=\"Logout\"\n (click)=\"confirmLogout()\">\n </mat-icon>\n \n <!-- Name -->\n <div id=\"user-name\">\n {{ authenticationService.authenticatedUser?.displayName }}\n </div>\n </ng-container>\n</div>","import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { LoginComponent } from './components/login/login.component';\nimport { LoginFormComponent } from './components/login-form/login-form.component';\nimport { ServiceConfig } from './model/service-config';\nimport { AuthenticationService } from './services/authentication.service';\n\n@NgModule({\n declarations: [\n LoginComponent,\n LoginFormComponent\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n \n MatButtonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatProgressSpinnerModule\n ],\n exports: [\n LoginComponent,\n LoginFormComponent\n ]\n})\nexport class AuthenticationModule {\n static forRoot(config: ServiceConfig): ModuleWithProviders<AuthenticationModule> {\n return {\n ngModule: AuthenticationModule,\n providers: [\n AuthenticationService,\n { provide: ServiceConfig, useValue: config }\n ]\n };\n }\n\n constructor( @Optional() @SkipSelf() parentModule: AuthenticationModule) {\n if (parentModule) {\n throw new Error(\n 'AuthenticationModule is already loaded. Import it in the AppModule only');\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.ServiceConfig","i2.AuthenticationService","i3","i4"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;MAAa,aAAa,CAAA;AAEzB;;ACAM,MAAM,aAAa,GAAkB;AACxC,IAAA,MAAM,EAAE,sCAAsC;CACjD;;ACJD;AAYA;MAKa,qBAAqB,CAAA;;;;AAkBhC,IAAA,WAAA,CAAgC,MAAqB,EACjC,IAAgB,EAChB,iBAAoC,EAAA;QAFxB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAe;QACjC,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;QAChB,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;;AAlB9C,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAW,CAAC;AACnD,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAAW,CAAC;AACpD,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAAE,CAAC;;QAGnD,IAAc,CAAA,cAAA,GAAG,KAAK,CAAC;;QAGvB,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;QAYR,IAAI,CAAC,MAAM,GAAG;AACZ,YAAA,GAAG,aAAa;YAChB,GAAG,IAAI,CAAC,MAAM;SACf,CAAC;QAEF,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAC1C;;;;AAKD,IAAA,KAAK,CAAC,QAAgB,EAAE,QAAgB,EAAE,UAAmB,EAAA;AAC3D,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;;AAGzB,QAAA,MAAM,OAAO,GAA0B;AACrC,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,UAAU,EAAE,UAAU;;SAEvB,CAAC;AAEF,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;;;QAIrD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;AACnF,aAAA,SAAS,CAAC;YACT,IAAI,EAAE,CAAC,KAAK,KACV,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACxB,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;;AAEf,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACrD,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACpC;AACF,SAAA,CAAC,CAAC;KACN;;IAGD,MAAM,GAAA;AACJ,QAAA,IAAI,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACjC,YAAA,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAClC,SAAA;AAED,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC9B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACvC;AAEO,IAAA,YAAY,CAAC,KAAoB,EAAA;QACvC,IAAI,CAAC,KAAK,EAAE;YAAE,OAAO;AAAE,SAAA;AAEvB,QAAA,MAAM,SAAS,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,SAAS,CAAC,WAAW,CAAC,KAAK,CAAwB,CAAC;AAEpE,QAAA,IAAI,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;YACnC,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,OAAO;AACR,SAAA;QAED,IAAI,CAAC,iBAAiB,GAAG;AACvB,YAAA,KAAK,EAAE,OAAO,CAAC,IAAI,KAAK,OAAO;YAC/B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,WAAW,EAAE,OAAO,CAAC,cAAc;YACnC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC;AAEF,QAAA,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAErC,IAAI,CAAC,QAAQ,EAAE,CAAC;AAEhB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAEnD,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KACtD;IAEO,QAAQ,GAAA;AACd,QAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE;aAC/B,SAAS,CAAC,MAAM,IAAG;;AAElB,YAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,cAAc,EAAE;gBAC3C,OAAO;AACR,aAAA;YAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,iBAAkB,CAAC,cAAc,CAAC,CAAC;AAEjG,YAAA,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,iBAAiB,CAAC,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC;AACvD,aAAA;AACH,SAAC,CAAC,CAAC;KACN;IAEO,qBAAqB,GAAA;QAC3B,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;KAClD;;kHA1HU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,qBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA,CAAA;2FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;0BAmBc,QAAQ;qGAhBX,oBAAoB,EAAA,CAAA;sBAA7B,MAAM;gBACG,qBAAqB,EAAA,CAAA;sBAA9B,MAAM;gBACG,mBAAmB,EAAA,CAAA;sBAA5B,MAAM;;;MCLI,kBAAkB,CAAA;AAW7B,IAAA,WAAA,CAAqC,IAAmB,EACrC,SAA2C,EAC3C,qBAA4C,EAAA;QAD5C,IAAS,CAAA,SAAA,GAAT,SAAS,CAAkC;QAC3C,IAAqB,CAAA,qBAAA,GAArB,qBAAqB,CAAuB;QAZ/D,IAAY,CAAA,YAAA,GAAkB,IAAI,CAAC;QAInC,IAAI,CAAA,IAAA,GAAG,IAAI,gBAAgB,CAAC;YAC1B,QAAQ,EAAE,IAAI,kBAAkB,CAAC,IAAI,EAAE,CAAE,UAAU,CAAC,QAAQ,CAAE,CAAC;YAC/D,QAAQ,EAAE,IAAI,kBAAkB,CAAC,IAAI,EAAE,CAAE,UAAU,CAAC,QAAQ,CAAE,CAAC;YAC/D,UAAU,EAAE,IAAI,kBAAkB,EAAE;AACrC,SAAA,CAAC,CAAC;AAMW,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KACpE;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,gCAAgC,GAAG,IAAI,CAAC,qBAAqB,CAAC,oBAAoB;aACpF,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAEjD,QAAA,IAAI,CAAC,+BAA+B,GAAG,IAAI,CAAC,qBAAqB,CAAC,mBAAmB;aAClF,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;KAC5C;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,+BAA+B,CAAC,WAAW,EAAE,CAAC;AACnD,QAAA,IAAI,CAAC,gCAAgC,CAAC,WAAW,EAAE,CAAC;KACrD;IAED,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,QAAA,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAC3D,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;KAClE;AAEO,IAAA,kBAAkB,CAAC,aAAsB,EAAA;AAC/C,QAAA,IAAI,aAAa,EAAE;AACjB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACxB,SAAA;KACF;AAEO,IAAA,YAAY,CAAC,GAAQ,EAAA;AAC3B,QAAA,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,YAAY,GAAG,CAAA,EAAG,GAAG,CAAC,IAAI,CAAA,EAAA,EAAK,GAAG,CAAC,UAAU,CAAA,CAAE,CAAC;KACtD;;AA9CU,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,kBAWT,eAAe,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAXxB,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,iEChB/B,+6CAoCqB,EAAA,MAAA,EAAA,CAAA,uOAAA,EAAA,qWAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,4LAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDpBR,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAR9B,SAAS;+BACE,2BAA2B,EAAA,QAAA,EAAA,+6CAAA,EAAA,MAAA,EAAA,CAAA,uOAAA,EAAA,qWAAA,CAAA,EAAA,CAAA;;0BAkBxB,MAAM;2BAAC,eAAe,CAAA;;;MEbxB,cAAc,CAAA;IAGzB,WAAoB,CAAA,MAAiB,EAClB,qBAA4C,EAAA;QAD3C,IAAM,CAAA,MAAA,GAAN,MAAM,CAAW;QAClB,IAAqB,CAAA,qBAAA,GAArB,qBAAqB,CAAuB;KAC9D;IAED,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE;AACnC,YAAA,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AACtC,SAAA,CAAC,CAAC;KACJ;IAED,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE;AACtC,YAAA,IAAI,EAAE,EAAE,OAAO,EAAE,kCAAkC,EAAE;SACtD,CAAC;AACD,aAAA,WAAW,EAAE;aACb,SAAS,CAAC,MAAM,IAAG;AAClB,YAAA,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,CAAC;AACrC,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;;2GAvBU,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,cAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,kGCd3B,0hCA6BM,EAAA,MAAA,EAAA,CAAA,iTAAA,EAAA,qWAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDfO,cAAc,EAAA,UAAA,EAAA,CAAA;kBAR1B,SAAS;+BACE,sBAAsB,EAAA,QAAA,EAAA,0hCAAA,EAAA,MAAA,EAAA,CAAA,iTAAA,EAAA,qWAAA,CAAA,EAAA,CAAA;iIAQvB,UAAU,EAAA,CAAA;sBAAlB,KAAK;;;MEsBK,oBAAoB,CAAA;AAW/B,IAAA,WAAA,CAAqC,YAAkC,EAAA;AACrE,QAAA,IAAI,YAAY,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CACb,yEAAyE,CAAC,CAAC;AAC9E,SAAA;KACF;IAfD,OAAO,OAAO,CAAC,MAAqB,EAAA;QAClC,OAAO;AACL,YAAA,QAAQ,EAAE,oBAAoB;AAC9B,YAAA,SAAS,EAAE;gBACT,qBAAqB;AACrB,gBAAA,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE;AAC7C,aAAA;SACF,CAAC;KACH;;AATU,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,kBAWoB,oBAAoB,EAAA,QAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAX5D,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,iBAnB7B,cAAc;AACd,QAAA,kBAAkB,aAGlB,YAAY;QACZ,mBAAmB;QAEnB,eAAe;QACf,eAAe;QACf,kBAAkB;QAClB,aAAa;QACb,cAAc;AACd,QAAA,wBAAwB,aAGxB,cAAc;QACd,kBAAkB,CAAA,EAAA,CAAA,CAAA;AAGT,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,YAf7B,YAAY;QACZ,mBAAmB;QAEnB,eAAe;QACf,eAAe;QACf,kBAAkB;QAClB,aAAa;QACb,cAAc;QACd,wBAAwB,CAAA,EAAA,CAAA,CAAA;2FAOf,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBArBhC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,cAAc;wBACd,kBAAkB;AACnB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,mBAAmB;wBAEnB,eAAe;wBACf,eAAe;wBACf,kBAAkB;wBAClB,aAAa;wBACb,cAAc;wBACd,wBAAwB;AACzB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,cAAc;wBACd,kBAAkB;AACnB,qBAAA;AACF,iBAAA,CAAA;0DAYoD,oBAAoB,EAAA,UAAA,EAAA,CAAA;0BAAzD,QAAQ;;0BAAI,QAAQ;;;AChDpC;;AAEG;;;;"}
1
+ {"version":3,"file":"cleavelandprice-ngx-lib-authentication.mjs","sources":["../../../../projects/cleavelandprice/ngx-lib/authentication/src/model/default-config.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/src/model/service-config.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/src/services/authentication.service.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/src/components/login-form/login-form.component.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/src/components/login-form/login-form.component.html","../../../../projects/cleavelandprice/ngx-lib/authentication/src/components/login/login.component.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/src/components/login/login.component.html","../../../../projects/cleavelandprice/ngx-lib/authentication/src/authentication.module.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/src/cleavelandprice-ngx-lib-authentication.ts"],"sourcesContent":["import { ServiceConfig } from \"./service-config\";\r\n\r\nexport const defaultConfig: ServiceConfig = {\r\n apiUrl: 'http://utilityapi/authenticate/token'\r\n}","export class ServiceConfig {\r\n apiUrl!: string;\r\n}\r\n","//#region Imports\nimport { Injectable, Output, EventEmitter, Optional } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { JwtHelperService } from '@auth0/angular-jwt';\n\nimport { defaultConfig } from '../model/default-config';\n\nimport { AuthenticationToken } from '../model/authentication-token';\nimport { ServiceConfig } from '../model/service-config';\nimport { SharepointService } from '@cleavelandprice/ngx-lib/sharepoint';\nimport { AuthenticatedUser } from '../model/authenticated-user';\nimport { AuthenticationRequest } from '../model/authentication-request';\n//#endregion\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthenticationService {\n //#region Fields\n @Output() authenticatedChanged = new EventEmitter<boolean>();\n @Output() authenticatingChanged = new EventEmitter<boolean>();\n @Output() authenticationError = new EventEmitter();\n \n // Flag set to true while the service is attempting to authenticate the user\n authenticating = false;\n \n //Flag set to true when the user is successfully authenticated\n authenticated = false;\n \n // Object representing the authenticated user\n authenticatedUser!: AuthenticatedUser | null;\n //#endregion\n \n //#region Lifecycle\n // If a ServiceConfig object is not provided when the module is imported, then default values are pulled in from default-config.ts.\n constructor(@Optional() private config: ServiceConfig,\n private http: HttpClient,\n private sharePointService: SharepointService) {\n\n this.config = {\n ...defaultConfig,\n ...this.config\n };\n \n this.checkForExistingToken();\n }\n //#endregion\n\n //#region Utilities\n //Authenticate the user and store the token in Local Storage\n login(username: string, password: string, adminGroup?: string): void {\n const today = new Date();\n //const expiration = new Date().setFullYear(today.getFullYear() + 10);\n\n const request: AuthenticationRequest = {\n username: username,\n password: password,\n adminGroup: adminGroup\n //expirationDate: expiration // moment().add(10, 'years').toDate()\n };\n\n this.authenticating = true;\n this.authenticatingChanged.emit(this.authenticating);\n\n // Sending a 'raw' POST request so that we can tell HttpClient that we are expecting text instead of Json\n // Otherwise, it would throw an error trying to decode Json from the response\n this.http.request('POST', this.config.apiUrl, { body: request, responseType: 'text' })\n .subscribe({\n next: (token) =>\n this.validateUser(token)\n , error: (err) => {\n //console.log('Authentication error', err);\n this.authenticating = false;\n this.authenticatingChanged.emit(this.authenticating);\n this.authenticationError.emit(err);\n }\n });\n }\n \n //Logout the user and delete the token from Local Storage\n logout(): void {\n if (localStorage.getItem('token')) {\n localStorage.removeItem('token');\n }\n\n this.authenticatedUser = null;\n this.authenticated = false;\n this.authenticatedChanged.emit(false);\n }\n \n private validateUser(token: string | null): void {\n if (!token) { return; }\n\n const jwtHelper = new JwtHelperService();\n const decoded = jwtHelper.decodeToken(token) as AuthenticationToken;\n\n if (jwtHelper.isTokenExpired(token)) {\n this.logout();\n return;\n }\n\n this.authenticatedUser = {\n admin: decoded.role === 'Admin',\n displayName: decoded.displayName,\n accountName: decoded.winaccountname,\n distinguishedName: decoded.distinguishedName,\n employeeNumber: decoded.employeeNumber,\n memberOf: decoded.memberOf\n };\n\n localStorage.setItem('token', token);\n\n this.getPhoto();\n \n this.authenticated = true;\n this.authenticatedChanged.emit(this.authenticated);\n\n this.authenticating = false;\n this.authenticatingChanged.emit(this.authenticating);\n }\n\n private getPhoto(): void {\n this.sharePointService.getPhotos()\n .subscribe(photos => {\n // The user may have been logged out by the time the photos came back\n if (!this.authenticatedUser?.employeeNumber) {\n return;\n }\n\n const photo = photos.find(pic => pic.employeeNumber === +this.authenticatedUser!.employeeNumber);\n\n if (photo) {\n this.authenticatedUser.photoUrl = photo.encodedAbsUrl;\n }\n });\n }\n\n private checkForExistingToken(): void {\n this.validateUser(localStorage.getItem('token'));\n }\n //#endregion\n}\n ","import { Component, Inject, OnInit, OnDestroy } from '@angular/core';\nimport { UntypedFormGroup, UntypedFormControl, Validators } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Subscription } from 'rxjs';\n\nimport { AuthenticationService } from '../../services/authentication.service';\nimport { LoginFormData } from '../../model/login-form-data';\n\n@Component({\n selector: 'authentication-login-form',\n templateUrl: './login-form.component.html',\n styleUrls: [\n './login-form.component.css',\n '../../../../styles/mat-icon.css'\n ]\n})\nexport class LoginFormComponent implements OnInit, OnDestroy {\n errorMessage: string | null = null;\n authenticatedChangedSubscription!: Subscription;\n authenticationErrorSubscription!: Subscription;\n\n form = new UntypedFormGroup({\n username: new UntypedFormControl(null, [ Validators.required ]),\n password: new UntypedFormControl(null, [ Validators.required ]),\n adminGroup: new UntypedFormControl()\n });\n\n constructor(@Inject(MAT_DIALOG_DATA) data: LoginFormData,\n public dialogRef: MatDialogRef<LoginFormComponent>,\n public authenticationService: AuthenticationService) {\n\n this.form.get('adminGroup')?.setValue(data.adminGroup);\n }\n\n ngOnInit(): void {\n this.authenticatedChangedSubscription = this.authenticationService.authenticatedChanged\n .subscribe(this.authChangedHandler.bind(this));\n\n this.authenticationErrorSubscription = this.authenticationService.authenticationError\n .subscribe(this.errorHandler.bind(this));\n }\n\n ngOnDestroy(): void {\n this.authenticationErrorSubscription.unsubscribe();\n this.authenticatedChangedSubscription.unsubscribe();\n }\n\n authenticate() {\n this.errorMessage = null;\n const { username, password, adminGroup } = this.form.value;\n this.authenticationService.login(username, password, adminGroup);\n }\n\n private authChangedHandler(authenticated: boolean): void {\n if (authenticated) {\n this.dialogRef.close();\n }\n }\n\n private errorHandler(err: any): void {\n console.log('Authentication error', err);\n this.errorMessage = `${err.name}: ${err.statusText}`;\n }\n}\n","<h2 mat-dialog-title>\n <span *ngIf=\"!authenticationService.authenticating\">Login</span>\n <span *ngIf=\"authenticationService.authenticating\">Authenticating...</span>\n</h2>\n\n<mat-dialog-content>\n <div id=\"spinner\" *ngIf=\"authenticationService.authenticating\">\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\"></mat-progress-spinner>\n </div>\n\n <form *ngIf=\"!authenticationService.authenticating\" [formGroup]=\"form\">\n <mat-form-field>\n <input matInput formControlName=\"username\" placeholder=\"Username\" (keyup.enter)=\"authenticate()\">\n </mat-form-field>\n\n <mat-form-field>\n <input matInput formControlName=\"password\" type=\"password\" placeholder=\"Password\" (keyup.enter)=\"authenticate()\">\n </mat-form-field>\n </form>\n\n <div *ngIf=\"!authenticationService.authenticating && errorMessage\" id=\"error\">\n {{ errorMessage }}\n </div>\n</mat-dialog-content>\n\n<mat-dialog-actions *ngIf=\"!authenticationService.authenticating\">\n <button mat-raised-button color=\"primary\" (click)=\"authenticate()\"\n [disabled]=\"form.invalid\">\n <mat-icon fontIcon=\"done\"></mat-icon>\n <span>OK</span>\n </button>\n\n <button mat-raised-button (click)=\"dialogRef.close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n <span>Cancel</span>\n </button>\n</mat-dialog-actions>","import { Component, Input } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ConfirmationComponent } from '@cleavelandprice/ngx-lib/dialog';\nimport { LoginFormComponent } from '../login-form/login-form.component';\nimport { AuthenticationService } from '../../services/authentication.service';\n\n@Component({\n selector: 'authentication-login',\n templateUrl: './login.component.html',\n styleUrls: [\n './login.component.css',\n '../../../../styles/mat-icon.css'\n ]\n})\nexport class LoginComponent {\n @Input() adminGroup!: string;\n\n constructor(private dialog: MatDialog,\n public authenticationService: AuthenticationService) {\n }\n\n login(): void {\n this.dialog.open(LoginFormComponent, {\n data: { adminGroup: this.adminGroup }\n });\n }\n\n confirmLogout(): void {\n this.dialog.open(ConfirmationComponent, {\n data: { message: `Are you sure you want to logout?` }\n })\n .afterClosed()\n .subscribe(result => {\n if (result) {\n this.authenticationService.logout();\n }\n });\n }\n}\n","<div id=\"user-id\">\n <!-- Logged out -->\n <mat-icon *ngIf=\"!authenticationService.authenticated\"\n fontIcon=\"account_circle\"\n matTooltip=\"Login\"\n (click)=\"login()\">\n </mat-icon>\n\n <!-- Logged in -->\n <ng-container *ngIf=\"authenticationService.authenticated\">\n <!-- With photo -->\n <img *ngIf=\"authenticationService.authenticatedUser?.photoUrl\"\n id=\"authenticated-user-image\"\n [src]=\"authenticationService.authenticatedUser?.photoUrl\"\n matTooltip=\"Logout\"\n (click)=\"confirmLogout()\" />\n \n <!-- Without photo -->\n <mat-icon *ngIf=\"!authenticationService.authenticatedUser?.photoUrl\"\n fontIcon=\"account_circle\"\n matTooltip=\"Logout\"\n (click)=\"confirmLogout()\">\n </mat-icon>\n \n <!-- Name -->\n <div id=\"user-name\">\n {{ authenticationService.authenticatedUser?.displayName }}\n </div>\n </ng-container>\n</div>","import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { LoginComponent } from './components/login/login.component';\nimport { LoginFormComponent } from './components/login-form/login-form.component';\nimport { ServiceConfig } from './model/service-config';\nimport { AuthenticationService } from './services/authentication.service';\n\n@NgModule({\n declarations: [\n LoginComponent,\n LoginFormComponent\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n \n MatButtonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatProgressSpinnerModule\n ],\n exports: [\n LoginComponent,\n LoginFormComponent\n ]\n})\nexport class AuthenticationModule {\n static forRoot(config: ServiceConfig): ModuleWithProviders<AuthenticationModule> {\n return {\n ngModule: AuthenticationModule,\n providers: [\n AuthenticationService,\n { provide: ServiceConfig, useValue: config }\n ]\n };\n }\n\n constructor( @Optional() @SkipSelf() parentModule: AuthenticationModule) {\n if (parentModule) {\n throw new Error(\n 'AuthenticationModule is already loaded. Import it in the AppModule only');\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.ServiceConfig","i2.AuthenticationService","i3","i4"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAEa,MAAA,aAAa,GAAkB;AACxC,IAAA,MAAM,EAAE,sCAAsC;;;MCHrC,aAAa,CAAA;AAEzB;;ACFD;AAYA;MAKa,qBAAqB,CAAA;;;;AAkBhC,IAAA,WAAA,CAAgC,MAAqB,EACjC,IAAgB,EAChB,iBAAoC,EAAA;QAFxB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAe;QACjC,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;QAChB,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;;AAlB9C,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAW,CAAC;AACnD,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAAW,CAAC;AACpD,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAAE,CAAC;;QAGnD,IAAc,CAAA,cAAA,GAAG,KAAK,CAAC;;QAGvB,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;QAYR,IAAI,CAAC,MAAM,GAAG;AACZ,YAAA,GAAG,aAAa;YAChB,GAAG,IAAI,CAAC,MAAM;SACf,CAAC;QAEF,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAC1C;;;;AAKD,IAAA,KAAK,CAAC,QAAgB,EAAE,QAAgB,EAAE,UAAmB,EAAA;AAC3D,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;;AAGzB,QAAA,MAAM,OAAO,GAA0B;AACrC,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,UAAU,EAAE,UAAU;;SAEvB,CAAC;AAEF,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;;;QAIrD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;AACnF,aAAA,SAAS,CAAC;YACT,IAAI,EAAE,CAAC,KAAK,KACV,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACxB,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;;AAEf,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACrD,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACpC;AACF,SAAA,CAAC,CAAC;KACN;;IAGD,MAAM,GAAA;AACJ,QAAA,IAAI,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACjC,YAAA,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAClC,SAAA;AAED,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC9B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACvC;AAEO,IAAA,YAAY,CAAC,KAAoB,EAAA;QACvC,IAAI,CAAC,KAAK,EAAE;YAAE,OAAO;AAAE,SAAA;AAEvB,QAAA,MAAM,SAAS,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,SAAS,CAAC,WAAW,CAAC,KAAK,CAAwB,CAAC;AAEpE,QAAA,IAAI,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;YACnC,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,OAAO;AACR,SAAA;QAED,IAAI,CAAC,iBAAiB,GAAG;AACvB,YAAA,KAAK,EAAE,OAAO,CAAC,IAAI,KAAK,OAAO;YAC/B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,WAAW,EAAE,OAAO,CAAC,cAAc;YACnC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC;AAEF,QAAA,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAErC,IAAI,CAAC,QAAQ,EAAE,CAAC;AAEhB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAEnD,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KACtD;IAEO,QAAQ,GAAA;AACd,QAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE;aAC/B,SAAS,CAAC,MAAM,IAAG;;AAElB,YAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,cAAc,EAAE;gBAC3C,OAAO;AACR,aAAA;YAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,iBAAkB,CAAC,cAAc,CAAC,CAAC;AAEjG,YAAA,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,iBAAiB,CAAC,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC;AACvD,aAAA;AACH,SAAC,CAAC,CAAC;KACN;IAEO,qBAAqB,GAAA;QAC3B,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;KAClD;;kHA1HU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,qBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA,CAAA;2FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;0BAmBc,QAAQ;qGAhBX,oBAAoB,EAAA,CAAA;sBAA7B,MAAM;gBACG,qBAAqB,EAAA,CAAA;sBAA9B,MAAM;gBACG,mBAAmB,EAAA,CAAA;sBAA5B,MAAM;;;MCLI,kBAAkB,CAAA;AAW7B,IAAA,WAAA,CAAqC,IAAmB,EACrC,SAA2C,EAC3C,qBAA4C,EAAA;QAD5C,IAAS,CAAA,SAAA,GAAT,SAAS,CAAkC;QAC3C,IAAqB,CAAA,qBAAA,GAArB,qBAAqB,CAAuB;QAZ/D,IAAY,CAAA,YAAA,GAAkB,IAAI,CAAC;QAInC,IAAI,CAAA,IAAA,GAAG,IAAI,gBAAgB,CAAC;YAC1B,QAAQ,EAAE,IAAI,kBAAkB,CAAC,IAAI,EAAE,CAAE,UAAU,CAAC,QAAQ,CAAE,CAAC;YAC/D,QAAQ,EAAE,IAAI,kBAAkB,CAAC,IAAI,EAAE,CAAE,UAAU,CAAC,QAAQ,CAAE,CAAC;YAC/D,UAAU,EAAE,IAAI,kBAAkB,EAAE;AACrC,SAAA,CAAC,CAAC;AAMW,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KACpE;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,gCAAgC,GAAG,IAAI,CAAC,qBAAqB,CAAC,oBAAoB;aACpF,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAEjD,QAAA,IAAI,CAAC,+BAA+B,GAAG,IAAI,CAAC,qBAAqB,CAAC,mBAAmB;aAClF,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;KAC5C;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,+BAA+B,CAAC,WAAW,EAAE,CAAC;AACnD,QAAA,IAAI,CAAC,gCAAgC,CAAC,WAAW,EAAE,CAAC;KACrD;IAED,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,QAAA,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAC3D,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;KAClE;AAEO,IAAA,kBAAkB,CAAC,aAAsB,EAAA;AAC/C,QAAA,IAAI,aAAa,EAAE;AACjB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACxB,SAAA;KACF;AAEO,IAAA,YAAY,CAAC,GAAQ,EAAA;AAC3B,QAAA,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,YAAY,GAAG,CAAA,EAAG,GAAG,CAAC,IAAI,CAAA,EAAA,EAAK,GAAG,CAAC,UAAU,CAAA,CAAE,CAAC;KACtD;;AA9CU,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,kBAWT,eAAe,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAXxB,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,iEChB/B,+6CAoCqB,EAAA,MAAA,EAAA,CAAA,uOAAA,EAAA,qWAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,4LAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDpBR,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAR9B,SAAS;+BACE,2BAA2B,EAAA,QAAA,EAAA,+6CAAA,EAAA,MAAA,EAAA,CAAA,uOAAA,EAAA,qWAAA,CAAA,EAAA,CAAA;;0BAkBxB,MAAM;2BAAC,eAAe,CAAA;;;MEbxB,cAAc,CAAA;IAGzB,WAAoB,CAAA,MAAiB,EAClB,qBAA4C,EAAA;QAD3C,IAAM,CAAA,MAAA,GAAN,MAAM,CAAW;QAClB,IAAqB,CAAA,qBAAA,GAArB,qBAAqB,CAAuB;KAC9D;IAED,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE;AACnC,YAAA,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AACtC,SAAA,CAAC,CAAC;KACJ;IAED,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE;AACtC,YAAA,IAAI,EAAE,EAAE,OAAO,EAAE,kCAAkC,EAAE;SACtD,CAAC;AACD,aAAA,WAAW,EAAE;aACb,SAAS,CAAC,MAAM,IAAG;AAClB,YAAA,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,CAAC;AACrC,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;;2GAvBU,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,cAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,kGCd3B,0hCA6BM,EAAA,MAAA,EAAA,CAAA,iTAAA,EAAA,qWAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDfO,cAAc,EAAA,UAAA,EAAA,CAAA;kBAR1B,SAAS;+BACE,sBAAsB,EAAA,QAAA,EAAA,0hCAAA,EAAA,MAAA,EAAA,CAAA,iTAAA,EAAA,qWAAA,CAAA,EAAA,CAAA;iIAQvB,UAAU,EAAA,CAAA;sBAAlB,KAAK;;;MEsBK,oBAAoB,CAAA;AAW/B,IAAA,WAAA,CAAqC,YAAkC,EAAA;AACrE,QAAA,IAAI,YAAY,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CACb,yEAAyE,CAAC,CAAC;AAC9E,SAAA;KACF;IAfD,OAAO,OAAO,CAAC,MAAqB,EAAA;QAClC,OAAO;AACL,YAAA,QAAQ,EAAE,oBAAoB;AAC9B,YAAA,SAAS,EAAE;gBACT,qBAAqB;AACrB,gBAAA,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE;AAC7C,aAAA;SACF,CAAC;KACH;;AATU,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,kBAWoB,oBAAoB,EAAA,QAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAX5D,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,iBAnB7B,cAAc;AACd,QAAA,kBAAkB,aAGlB,YAAY;QACZ,mBAAmB;QAEnB,eAAe;QACf,eAAe;QACf,kBAAkB;QAClB,aAAa;QACb,cAAc;AACd,QAAA,wBAAwB,aAGxB,cAAc;QACd,kBAAkB,CAAA,EAAA,CAAA,CAAA;AAGT,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,YAf7B,YAAY;QACZ,mBAAmB;QAEnB,eAAe;QACf,eAAe;QACf,kBAAkB;QAClB,aAAa;QACb,cAAc;QACd,wBAAwB,CAAA,EAAA,CAAA,CAAA;2FAOf,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBArBhC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,cAAc;wBACd,kBAAkB;AACnB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,mBAAmB;wBAEnB,eAAe;wBACf,eAAe;wBACf,kBAAkB;wBAClB,aAAa;wBACb,cAAc;wBACd,wBAAwB;AACzB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,cAAc;wBACd,kBAAkB;AACnB,qBAAA;AACF,iBAAA,CAAA;0DAYoD,oBAAoB,EAAA,UAAA,EAAA,CAAA;0BAAzD,QAAQ;;0BAAI,QAAQ;;;AChDpC;;AAEG;;;;"}
@@ -5,9 +5,6 @@ import moment from 'moment';
5
5
  import * as i2 from '@angular/common/http';
6
6
  import { CommonModule } from '@angular/common';
7
7
 
8
- class ServiceConfig {
9
- }
10
-
11
8
  const defaultConfig = {
12
9
  apiUrl: 'http://utilityapi',
13
10
  usersEndpoint: '/sharepoint/users',
@@ -33,6 +30,9 @@ const defaultConfig = {
33
30
  }
34
31
  };
35
32
 
33
+ class ServiceConfig {
34
+ }
35
+
36
36
  //#region Imports
37
37
  //#endregion
38
38
  class SharepointService {
@@ -218,5 +218,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
218
218
  * Generated bundle index. Do not edit.
219
219
  */
220
220
 
221
- export { ServiceConfig, SharepointModule, SharepointService };
221
+ export { ServiceConfig, SharepointModule, SharepointService, defaultConfig };
222
222
  //# sourceMappingURL=cleavelandprice-ngx-lib-sharepoint.mjs.map