@cleavelandprice/ngx-lib 3.1.28 → 3.1.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/sharepoint/pipes/employee-photo-url.pipe.mjs +22 -11
- package/fesm2015/cleavelandprice-ngx-lib-sharepoint.mjs +39 -27
- package/fesm2015/cleavelandprice-ngx-lib-sharepoint.mjs.map +1 -1
- package/fesm2020/cleavelandprice-ngx-lib-sharepoint.mjs +36 -27
- package/fesm2020/cleavelandprice-ngx-lib-sharepoint.mjs.map +1 -1
- package/package.json +1 -1
- package/sharepoint/pipes/employee-photo-url.pipe.d.ts +4 -1
|
@@ -1,27 +1,38 @@
|
|
|
1
1
|
import { Pipe } from '@angular/core';
|
|
2
|
+
import { of, map } from 'rxjs';
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../services/sharepoint.service";
|
|
3
5
|
export class EmployeePhotoUrlPipe {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
constructor(sharePointService) {
|
|
7
|
+
this.sharePointService = sharePointService;
|
|
8
|
+
}
|
|
9
|
+
transform(user, userPhotos) {
|
|
10
|
+
const observable$ = userPhotos ? of(userPhotos) : this.sharePointService.getPhotos();
|
|
11
|
+
return observable$
|
|
12
|
+
.pipe(map(photos => photos.find(pic =>
|
|
8
13
|
// Try to match by employeeNumber, accountName, or title
|
|
9
|
-
|
|
10
|
-
|
|
14
|
+
(pic.employeeNumber && user.employeeNumber && +pic.employeeNumber === +user.employeeNumber) ||
|
|
15
|
+
(pic.accountName && pic.accountName.toLowerCase() === user.sAMAccountName.toLowerCase()) ||
|
|
16
|
+
(pic.title && pic.title.toLowerCase() === user.displayName.toLowerCase()))?.encodedAbsUrl));
|
|
17
|
+
/*const photo = photos
|
|
18
|
+
.find(pic =>
|
|
19
|
+
(pic.employeeNumber && user.employeeNumber && +pic.employeeNumber === +user.employeeNumber) ||
|
|
11
20
|
(pic.accountName && pic.accountName.toLowerCase() === user.sAMAccountName.toLowerCase()) ||
|
|
12
21
|
(pic.title && pic.title.toLowerCase() === user.displayName.toLowerCase()));
|
|
22
|
+
|
|
13
23
|
if (!photo) {
|
|
14
|
-
|
|
24
|
+
console.log(`No photo match for ${user.displayName}`);
|
|
15
25
|
}
|
|
16
|
-
|
|
26
|
+
|
|
27
|
+
return photo ? photo.encodedAbsUrl : null;*/
|
|
17
28
|
}
|
|
18
29
|
}
|
|
19
|
-
EmployeePhotoUrlPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: EmployeePhotoUrlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
30
|
+
EmployeePhotoUrlPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: EmployeePhotoUrlPipe, deps: [{ token: i1.SharePointService }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
20
31
|
EmployeePhotoUrlPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.1", ngImport: i0, type: EmployeePhotoUrlPipe, name: "employeePhotoUrl" });
|
|
21
32
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: EmployeePhotoUrlPipe, decorators: [{
|
|
22
33
|
type: Pipe,
|
|
23
34
|
args: [{
|
|
24
35
|
name: 'employeePhotoUrl'
|
|
25
36
|
}]
|
|
26
|
-
}] });
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
}], ctorParameters: function () { return [{ type: i1.SharePointService }]; } });
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wbG95ZWUtcGhvdG8tdXJsLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9zaGFyZXBvaW50L3NyYy9waXBlcy9lbXBsb3llZS1waG90by11cmwucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBUS9CLE1BQU0sT0FBTyxvQkFBb0I7SUFDL0IsWUFBcUIsaUJBQW9DO1FBQXBDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7SUFBSSxDQUFDO0lBRTlELFNBQVMsQ0FBQyxJQUF5QixFQUFFLFVBQXdCO1FBQzNELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFckYsT0FBTyxXQUFXO2FBQ2YsSUFBSSxDQUNILEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUNYLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDaEIsd0RBQXdEO1FBQ3hELENBQUMsR0FBRyxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDM0YsQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN4RixDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQzFFLEVBQUUsYUFBYSxDQUNqQixDQUNGLENBQUM7UUFFSjs7Ozs7Ozs7OztvREFVNEM7SUFDOUMsQ0FBQzs7aUhBN0JVLG9CQUFvQjsrR0FBcEIsb0JBQW9COzJGQUFwQixvQkFBb0I7a0JBSGhDLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGtCQUFrQjtpQkFDekIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvZiwgbWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDbGVhdmVsYW5kUHJpY2VVc2VyIH0gZnJvbSAnQGNsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3RvcnknO1xuaW1wb3J0IHsgUGhvdG9JdGVtIH0gZnJvbSAnLi4vbW9kZWwvcGhvdG8taXRlbSc7XG5pbXBvcnQgeyBTaGFyZVBvaW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3NoYXJlcG9pbnQuc2VydmljZSc7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2VtcGxveWVlUGhvdG9VcmwnXG59KVxuZXhwb3J0IGNsYXNzIEVtcGxveWVlUGhvdG9VcmxQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yIChwcml2YXRlIHNoYXJlUG9pbnRTZXJ2aWNlOiBTaGFyZVBvaW50U2VydmljZSkgeyB9XG5cbiAgdHJhbnNmb3JtKHVzZXI6IENsZWF2ZWxhbmRQcmljZVVzZXIsIHVzZXJQaG90b3M/OiBQaG90b0l0ZW1bXSk6IGFueSB7XG4gICAgY29uc3Qgb2JzZXJ2YWJsZSQgPSB1c2VyUGhvdG9zID8gb2YodXNlclBob3RvcykgOiB0aGlzLnNoYXJlUG9pbnRTZXJ2aWNlLmdldFBob3RvcygpO1xuXG4gICAgcmV0dXJuIG9ic2VydmFibGUkXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHBob3RvcyA9PlxuICAgICAgICAgIHBob3Rvcy5maW5kKHBpYyA9PlxuICAgICAgICAgICAgLy8gVHJ5IHRvIG1hdGNoIGJ5IGVtcGxveWVlTnVtYmVyLCBhY2NvdW50TmFtZSwgb3IgdGl0bGVcbiAgICAgICAgICAgIChwaWMuZW1wbG95ZWVOdW1iZXIgJiYgdXNlci5lbXBsb3llZU51bWJlciAmJiArcGljLmVtcGxveWVlTnVtYmVyID09PSArdXNlci5lbXBsb3llZU51bWJlcikgfHxcbiAgICAgICAgICAgIChwaWMuYWNjb3VudE5hbWUgJiYgcGljLmFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkgPT09IHVzZXIuc0FNQWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgICAgICAgIChwaWMudGl0bGUgJiYgcGljLnRpdGxlLnRvTG93ZXJDYXNlKCkgPT09IHVzZXIuZGlzcGxheU5hbWUudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICApPy5lbmNvZGVkQWJzVXJsXG4gICAgICAgIClcbiAgICAgICk7XG5cbiAgICAvKmNvbnN0IHBob3RvID0gcGhvdG9zXG4gICAgICAuZmluZChwaWMgPT5cbiAgICAgICAgKHBpYy5lbXBsb3llZU51bWJlciAmJiB1c2VyLmVtcGxveWVlTnVtYmVyICYmICtwaWMuZW1wbG95ZWVOdW1iZXIgPT09ICt1c2VyLmVtcGxveWVlTnVtYmVyKSB8fFxuICAgICAgICAocGljLmFjY291bnROYW1lICYmIHBpYy5hY2NvdW50TmFtZS50b0xvd2VyQ2FzZSgpID09PSB1c2VyLnNBTUFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICAgIChwaWMudGl0bGUgJiYgcGljLnRpdGxlLnRvTG93ZXJDYXNlKCkgPT09IHVzZXIuZGlzcGxheU5hbWUudG9Mb3dlckNhc2UoKSkpO1xuXG4gICAgaWYgKCFwaG90bykge1xuICAgICAgY29uc29sZS5sb2coYE5vIHBob3RvIG1hdGNoIGZvciAke3VzZXIuZGlzcGxheU5hbWV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBob3RvID8gcGhvdG8uZW5jb2RlZEFic1VybCA6IG51bGw7Ki9cbiAgfVxufSJdfQ==
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defaultConfig as defaultConfig$1 } from '@cleavelandprice/ngx-lib';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
|
-
import {
|
|
4
|
-
import { of } from 'rxjs';
|
|
3
|
+
import { Injectable, Optional, Pipe, NgModule, SkipSelf } from '@angular/core';
|
|
4
|
+
import { of, map } from 'rxjs';
|
|
5
5
|
import moment from 'moment';
|
|
6
6
|
import * as i2 from '@angular/common/http';
|
|
7
7
|
import { CommonModule } from '@angular/common';
|
|
@@ -34,31 +34,6 @@ const defaultConfig = {
|
|
|
34
34
|
class ServiceConfig {
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
class EmployeePhotoUrlPipe {
|
|
38
|
-
transform(user, photos) {
|
|
39
|
-
if (!photos) {
|
|
40
|
-
return null;
|
|
41
|
-
}
|
|
42
|
-
// Try to match by employeeNumber, accountName, or title
|
|
43
|
-
const photo = photos
|
|
44
|
-
.find(pic => (pic.employeeNumber && user.employeeNumber && +pic.employeeNumber === +user.employeeNumber) ||
|
|
45
|
-
(pic.accountName && pic.accountName.toLowerCase() === user.sAMAccountName.toLowerCase()) ||
|
|
46
|
-
(pic.title && pic.title.toLowerCase() === user.displayName.toLowerCase()));
|
|
47
|
-
if (!photo) {
|
|
48
|
-
console.log(`No photo match for ${user.displayName}`);
|
|
49
|
-
}
|
|
50
|
-
return photo ? photo.encodedAbsUrl : null;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
EmployeePhotoUrlPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: EmployeePhotoUrlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
54
|
-
EmployeePhotoUrlPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.1", ngImport: i0, type: EmployeePhotoUrlPipe, name: "employeePhotoUrl" });
|
|
55
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: EmployeePhotoUrlPipe, decorators: [{
|
|
56
|
-
type: Pipe,
|
|
57
|
-
args: [{
|
|
58
|
-
name: 'employeePhotoUrl'
|
|
59
|
-
}]
|
|
60
|
-
}] });
|
|
61
|
-
|
|
62
37
|
class SharePointService {
|
|
63
38
|
//#endregion
|
|
64
39
|
//#region Initialization
|
|
@@ -213,6 +188,43 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImpor
|
|
|
213
188
|
}] }, { type: i2.HttpClient }];
|
|
214
189
|
} });
|
|
215
190
|
|
|
191
|
+
class EmployeePhotoUrlPipe {
|
|
192
|
+
constructor(sharePointService) {
|
|
193
|
+
this.sharePointService = sharePointService;
|
|
194
|
+
}
|
|
195
|
+
transform(user, userPhotos) {
|
|
196
|
+
const observable$ = userPhotos ? of(userPhotos) : this.sharePointService.getPhotos();
|
|
197
|
+
return observable$
|
|
198
|
+
.pipe(map(photos => {
|
|
199
|
+
var _a;
|
|
200
|
+
return (_a = photos.find(pic =>
|
|
201
|
+
// Try to match by employeeNumber, accountName, or title
|
|
202
|
+
(pic.employeeNumber && user.employeeNumber && +pic.employeeNumber === +user.employeeNumber) ||
|
|
203
|
+
(pic.accountName && pic.accountName.toLowerCase() === user.sAMAccountName.toLowerCase()) ||
|
|
204
|
+
(pic.title && pic.title.toLowerCase() === user.displayName.toLowerCase()))) === null || _a === void 0 ? void 0 : _a.encodedAbsUrl;
|
|
205
|
+
}));
|
|
206
|
+
/*const photo = photos
|
|
207
|
+
.find(pic =>
|
|
208
|
+
(pic.employeeNumber && user.employeeNumber && +pic.employeeNumber === +user.employeeNumber) ||
|
|
209
|
+
(pic.accountName && pic.accountName.toLowerCase() === user.sAMAccountName.toLowerCase()) ||
|
|
210
|
+
(pic.title && pic.title.toLowerCase() === user.displayName.toLowerCase()));
|
|
211
|
+
|
|
212
|
+
if (!photo) {
|
|
213
|
+
console.log(`No photo match for ${user.displayName}`);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
return photo ? photo.encodedAbsUrl : null;*/
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
EmployeePhotoUrlPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: EmployeePhotoUrlPipe, deps: [{ token: SharePointService }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
220
|
+
EmployeePhotoUrlPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.1", ngImport: i0, type: EmployeePhotoUrlPipe, name: "employeePhotoUrl" });
|
|
221
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: EmployeePhotoUrlPipe, decorators: [{
|
|
222
|
+
type: Pipe,
|
|
223
|
+
args: [{
|
|
224
|
+
name: 'employeePhotoUrl'
|
|
225
|
+
}]
|
|
226
|
+
}], ctorParameters: function () { return [{ type: SharePointService }]; } });
|
|
227
|
+
|
|
216
228
|
class SharePointModule {
|
|
217
229
|
constructor(parentModule) {
|
|
218
230
|
if (parentModule) {
|
|
@@ -1 +1 @@
|
|
|
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/pipes/employee-photo-url.pipe.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 { defaultConfig as NgxLibDefaultConfig } from '@cleavelandprice/ngx-lib';\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: NgxLibDefaultConfig.apiUrl,\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","import { Pipe, PipeTransform } from '@angular/core';\nimport { CleavelandPriceUser } from '@cleavelandprice/ngx-lib/active-directory';\nimport { PhotoItem } from '../model/photo-item';\n\n@Pipe({\n name: 'employeePhotoUrl'\n})\nexport class EmployeePhotoUrlPipe implements PipeTransform {\n transform(user: CleavelandPriceUser, photos: PhotoItem[]): any {\n if (!photos) { return null; }\n\n // Try to match by employeeNumber, accountName, or title\n const photo = photos\n .find(pic =>\n (pic.employeeNumber && user.employeeNumber && +pic.employeeNumber === +user.employeeNumber) ||\n (pic.accountName && pic.accountName.toLowerCase() === user.sAMAccountName.toLowerCase()) ||\n (pic.title && pic.title.toLowerCase() === user.displayName.toLowerCase()));\n\n if (!photo) {\n console.log(`No photo match for ${user.displayName}`);\n }\n\n return photo ? photo.encodedAbsUrl : null;\n }\n}","import { Injectable, Optional } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, of } from 'rxjs';\r\nimport moment from 'moment';\r\n\r\nimport { defaultConfig } from '../model/default-config';\r\n\r\nimport { CacheObject } from '../model/cache-object';\r\nimport { ListItem } from '../model/list-item';\r\nimport { ListItemsRequest } from '../model/list-items-request';\r\nimport { PhotoItem } from '../model/photo-item';\r\nimport { ServiceConfig } from '../model/service-config';\r\nimport { UserRequest } from '../model/user-request';\r\nimport { User } from '../model/user';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SharePointService {\r\n private cache: {\r\n users: CacheObject<User> | null,\r\n photos: CacheObject<PhotoItem> | null\r\n } | null = null;\r\n\r\n private defaultCacheLifeMinutes = 720;\r\n\r\n //#region Utilities\r\n private cacheExpired<T>(cache: CacheObject<T>): boolean {\r\n if (!cache) {\r\n return true;\r\n }\r\n\r\n const lifeMinutes = this.config.caching?.lifeMinutes ?? this.defaultCacheLifeMinutes;\r\n const expiration = moment(cache.lastUpdate)\r\n .add(lifeMinutes, 'minutes');\r\n\r\n return moment().isAfter(expiration);\r\n }\r\n //#endregion\r\n\r\n //#region Initialization\r\n // If a ServiceConfig object is not provided when the module is imported, then default values are pulled in from default-config.ts.\r\n constructor(@Optional() private config: ServiceConfig,\r\n private http: HttpClient) {\r\n\r\n this.config = {\r\n ...defaultConfig,\r\n ...this.config\r\n };\r\n\r\n this.configureCaching();\r\n this.configureLogging();\r\n }\r\n\r\n private configureCaching(): void {\r\n // If caching config is missing entirely, give it a default\r\n this.config.caching = this.config.caching ?? {\r\n enabled: false,\r\n lifeMinutes: this.defaultCacheLifeMinutes\r\n };\r\n\r\n this.cache = {\r\n photos: null,\r\n users: null\r\n };\r\n }\r\n\r\n private configureLogging(): void {\r\n // If logging config is missing entirely, give it a default\r\n this.config.logging = this.config.logging ?? {\r\n dataCached: false,\r\n cachedDataReturned: false,\r\n freshDataReturned: false,\r\n cacheCleared: false\r\n }\r\n }\r\n //#endregion\r\n\r\n getListItems(request: ListItemsRequest): Observable<ListItem[]> {\r\n const apiUrl = this.config?.apiUrl ?? defaultConfig.apiUrl;\r\n const endpoint = this.config?.listItemsEndpoint ?? defaultConfig.listItemsEndpoint;\r\n\r\n return this.http.post<ListItem[]>(`${apiUrl}${endpoint}`, request);\r\n }\r\n\r\n getPhotos(): Observable<PhotoItem[]> {\r\n const request: ListItemsRequest = {\r\n username: this.config?.username ?? defaultConfig.username,\r\n password: this.config?.password ?? defaultConfig.password,\r\n site: this.config?.photos.site ?? defaultConfig.photos.site,\r\n list: this.config?.photos.list ?? defaultConfig.photos.list,\r\n additionalPropertiesToRetrieve: defaultConfig.photos.additionalPropertiesToRetrieve\r\n };\r\n\r\n const observable$ = this.getListItems(request) as Observable<PhotoItem[]>;\r\n\r\n if (this.config.caching?.enabled) {\r\n if (this.cacheExpired<PhotoItem>(this.cache?.photos!)) {\r\n // Get the data and cache it\r\n observable$.subscribe(data => {\r\n this.cache!.photos = {\r\n data,\r\n lastUpdate: moment()\r\n };\r\n\r\n if (this.config.logging?.dataCached) {\r\n const lifeMinutes = this.config.caching?.lifeMinutes ?? this.defaultCacheLifeMinutes;\r\n console.log(`Photos cached for ${lifeMinutes} minutes`);\r\n }\r\n });\r\n } else {\r\n // Cache exists and hasn't expired yet\r\n if (this.config.logging?.cachedDataReturned) {\r\n console.log('Returning cached photos');\r\n }\r\n\r\n return of(this.cache!.photos!.data);\r\n }\r\n }\r\n\r\n // Cache is either disabled or expired, return data from API\r\n if (this.config.logging?.freshDataReturned) {\r\n console.log('Returning fresh photos');\r\n }\r\n\r\n return observable$;\r\n }\r\n\r\n getUsers(request: UserRequest, id?: number): Observable<User | User[]> {\r\n const apiUrl = this.config?.apiUrl ?? defaultConfig.apiUrl;\r\n const endpoint = this.config?.usersEndpoint ?? defaultConfig.usersEndpoint;\r\n \r\n const observable$ = this.http.post<User | User[]>(`${apiUrl}${endpoint}/${id ?? ''}`, request);\r\n\r\n //#region Single user\r\n if (id) {\r\n return observable$;\r\n }\r\n //#endregion\r\n\r\n //#region Multiple users\r\n if (this.config.caching?.enabled) {\r\n if (this.cacheExpired<User>(this.cache!.users!)) {\r\n // Get the data and cache it\r\n observable$.subscribe(data => {\r\n this.cache!.users = {\r\n data: data as User[],\r\n lastUpdate: moment()\r\n };\r\n\r\n if (this.config.logging?.dataCached) {\r\n const lifeMinutes = this.config.caching?.lifeMinutes ?? this.defaultCacheLifeMinutes;\r\n console.log(`Users cached for ${lifeMinutes} minutes`);\r\n }\r\n });\r\n } else {\r\n // Cache exists and hasn't expired yet\r\n if (this.config.logging?.cachedDataReturned) {\r\n console.log('Returning cached users');\r\n }\r\n\r\n return of(this.cache!.users!.data);\r\n }\r\n }\r\n\r\n // Cache is either disabled or expired, return data from API\r\n if (this.config.logging?.freshDataReturned) {\r\n console.log('Returning fresh users');\r\n }\r\n\r\n return observable$;\r\n //#endregion\r\n }\r\n\r\n clearCache(): void {\r\n this.cache = null;\r\n\r\n if (this.config.logging?.cacheCleared) {\r\n console.log('Cache cleared');\r\n }\r\n }\r\n}","import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { ServiceConfig } from './model/service-config';\r\nimport { SharePointService } from './services/sharepoint.service';\r\nimport { EmployeePhotoUrlPipe } from './pipes/employee-photo-url.pipe';\r\n\r\n@NgModule({\r\n declarations: [\r\n EmployeePhotoUrlPipe\r\n ],\r\n imports: [\r\n CommonModule\r\n ],\r\n exports: [\r\n EmployeePhotoUrlPipe\r\n ]\r\n})\r\nexport class SharePointModule {\r\n static forRoot(config: ServiceConfig): ModuleWithProviders<SharePointModule> {\r\n return {\r\n ngModule: SharePointModule,\r\n providers: [\r\n SharePointService,\r\n { provide: ServiceConfig, useValue: config }\r\n ]\r\n };\r\n }\r\n\r\n constructor(@Optional() @SkipSelf() parentModule: SharePointModule) {\r\n if (parentModule) {\r\n throw new Error(\r\n 'SharePointModule is already loaded. Import it in the AppModule only');\r\n }\r\n }\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["NgxLibDefaultConfig","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/pipes/employee-photo-url.pipe.ts","../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/sharepoint.module.ts","../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/cleavelandprice-ngx-lib-sharepoint.ts"],"sourcesContent":["import { defaultConfig as NgxLibDefaultConfig } from '@cleavelandprice/ngx-lib';\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: NgxLibDefaultConfig.apiUrl,\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","import { Injectable, Optional } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, of } from 'rxjs';\r\nimport moment from 'moment';\r\n\r\nimport { defaultConfig } from '../model/default-config';\r\n\r\nimport { CacheObject } from '../model/cache-object';\r\nimport { ListItem } from '../model/list-item';\r\nimport { ListItemsRequest } from '../model/list-items-request';\r\nimport { PhotoItem } from '../model/photo-item';\r\nimport { ServiceConfig } from '../model/service-config';\r\nimport { UserRequest } from '../model/user-request';\r\nimport { User } from '../model/user';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SharePointService {\r\n private cache: {\r\n users: CacheObject<User> | null,\r\n photos: CacheObject<PhotoItem> | null\r\n } | null = null;\r\n\r\n private defaultCacheLifeMinutes = 720;\r\n\r\n //#region Utilities\r\n private cacheExpired<T>(cache: CacheObject<T>): boolean {\r\n if (!cache) {\r\n return true;\r\n }\r\n\r\n const lifeMinutes = this.config.caching?.lifeMinutes ?? this.defaultCacheLifeMinutes;\r\n const expiration = moment(cache.lastUpdate)\r\n .add(lifeMinutes, 'minutes');\r\n\r\n return moment().isAfter(expiration);\r\n }\r\n //#endregion\r\n\r\n //#region Initialization\r\n // If a ServiceConfig object is not provided when the module is imported, then default values are pulled in from default-config.ts.\r\n constructor(@Optional() private config: ServiceConfig,\r\n private http: HttpClient) {\r\n\r\n this.config = {\r\n ...defaultConfig,\r\n ...this.config\r\n };\r\n\r\n this.configureCaching();\r\n this.configureLogging();\r\n }\r\n\r\n private configureCaching(): void {\r\n // If caching config is missing entirely, give it a default\r\n this.config.caching = this.config.caching ?? {\r\n enabled: false,\r\n lifeMinutes: this.defaultCacheLifeMinutes\r\n };\r\n\r\n this.cache = {\r\n photos: null,\r\n users: null\r\n };\r\n }\r\n\r\n private configureLogging(): void {\r\n // If logging config is missing entirely, give it a default\r\n this.config.logging = this.config.logging ?? {\r\n dataCached: false,\r\n cachedDataReturned: false,\r\n freshDataReturned: false,\r\n cacheCleared: false\r\n }\r\n }\r\n //#endregion\r\n\r\n getListItems(request: ListItemsRequest): Observable<ListItem[]> {\r\n const apiUrl = this.config?.apiUrl ?? defaultConfig.apiUrl;\r\n const endpoint = this.config?.listItemsEndpoint ?? defaultConfig.listItemsEndpoint;\r\n\r\n return this.http.post<ListItem[]>(`${apiUrl}${endpoint}`, request);\r\n }\r\n\r\n getPhotos(): Observable<PhotoItem[]> {\r\n const request: ListItemsRequest = {\r\n username: this.config?.username ?? defaultConfig.username,\r\n password: this.config?.password ?? defaultConfig.password,\r\n site: this.config?.photos.site ?? defaultConfig.photos.site,\r\n list: this.config?.photos.list ?? defaultConfig.photos.list,\r\n additionalPropertiesToRetrieve: defaultConfig.photos.additionalPropertiesToRetrieve\r\n };\r\n\r\n const observable$ = this.getListItems(request) as Observable<PhotoItem[]>;\r\n\r\n if (this.config.caching?.enabled) {\r\n if (this.cacheExpired<PhotoItem>(this.cache?.photos!)) {\r\n // Get the data and cache it\r\n observable$.subscribe(data => {\r\n this.cache!.photos = {\r\n data,\r\n lastUpdate: moment()\r\n };\r\n\r\n if (this.config.logging?.dataCached) {\r\n const lifeMinutes = this.config.caching?.lifeMinutes ?? this.defaultCacheLifeMinutes;\r\n console.log(`Photos cached for ${lifeMinutes} minutes`);\r\n }\r\n });\r\n } else {\r\n // Cache exists and hasn't expired yet\r\n if (this.config.logging?.cachedDataReturned) {\r\n console.log('Returning cached photos');\r\n }\r\n\r\n return of(this.cache!.photos!.data);\r\n }\r\n }\r\n\r\n // Cache is either disabled or expired, return data from API\r\n if (this.config.logging?.freshDataReturned) {\r\n console.log('Returning fresh photos');\r\n }\r\n\r\n return observable$;\r\n }\r\n\r\n getUsers(request: UserRequest, id?: number): Observable<User | User[]> {\r\n const apiUrl = this.config?.apiUrl ?? defaultConfig.apiUrl;\r\n const endpoint = this.config?.usersEndpoint ?? defaultConfig.usersEndpoint;\r\n \r\n const observable$ = this.http.post<User | User[]>(`${apiUrl}${endpoint}/${id ?? ''}`, request);\r\n\r\n //#region Single user\r\n if (id) {\r\n return observable$;\r\n }\r\n //#endregion\r\n\r\n //#region Multiple users\r\n if (this.config.caching?.enabled) {\r\n if (this.cacheExpired<User>(this.cache!.users!)) {\r\n // Get the data and cache it\r\n observable$.subscribe(data => {\r\n this.cache!.users = {\r\n data: data as User[],\r\n lastUpdate: moment()\r\n };\r\n\r\n if (this.config.logging?.dataCached) {\r\n const lifeMinutes = this.config.caching?.lifeMinutes ?? this.defaultCacheLifeMinutes;\r\n console.log(`Users cached for ${lifeMinutes} minutes`);\r\n }\r\n });\r\n } else {\r\n // Cache exists and hasn't expired yet\r\n if (this.config.logging?.cachedDataReturned) {\r\n console.log('Returning cached users');\r\n }\r\n\r\n return of(this.cache!.users!.data);\r\n }\r\n }\r\n\r\n // Cache is either disabled or expired, return data from API\r\n if (this.config.logging?.freshDataReturned) {\r\n console.log('Returning fresh users');\r\n }\r\n\r\n return observable$;\r\n //#endregion\r\n }\r\n\r\n clearCache(): void {\r\n this.cache = null;\r\n\r\n if (this.config.logging?.cacheCleared) {\r\n console.log('Cache cleared');\r\n }\r\n }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\nimport { of, map } from 'rxjs';\nimport { CleavelandPriceUser } from '@cleavelandprice/ngx-lib/active-directory';\nimport { PhotoItem } from '../model/photo-item';\nimport { SharePointService } from '../services/sharepoint.service';\n\n@Pipe({\n name: 'employeePhotoUrl'\n})\nexport class EmployeePhotoUrlPipe implements PipeTransform {\n constructor (private sharePointService: SharePointService) { }\n\n transform(user: CleavelandPriceUser, userPhotos?: PhotoItem[]): any {\n const observable$ = userPhotos ? of(userPhotos) : this.sharePointService.getPhotos();\n\n return observable$\n .pipe(\n map(photos =>\n photos.find(pic =>\n // Try to match by employeeNumber, accountName, or title\n (pic.employeeNumber && user.employeeNumber && +pic.employeeNumber === +user.employeeNumber) ||\n (pic.accountName && pic.accountName.toLowerCase() === user.sAMAccountName.toLowerCase()) ||\n (pic.title && pic.title.toLowerCase() === user.displayName.toLowerCase())\n )?.encodedAbsUrl\n )\n );\n\n /*const photo = photos\n .find(pic =>\n (pic.employeeNumber && user.employeeNumber && +pic.employeeNumber === +user.employeeNumber) ||\n (pic.accountName && pic.accountName.toLowerCase() === user.sAMAccountName.toLowerCase()) ||\n (pic.title && pic.title.toLowerCase() === user.displayName.toLowerCase()));\n\n if (!photo) {\n console.log(`No photo match for ${user.displayName}`);\n }\n\n return photo ? photo.encodedAbsUrl : null;*/\n }\n}","import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { ServiceConfig } from './model/service-config';\r\nimport { SharePointService } from './services/sharepoint.service';\r\nimport { EmployeePhotoUrlPipe } from './pipes/employee-photo-url.pipe';\r\n\r\n@NgModule({\r\n declarations: [\r\n EmployeePhotoUrlPipe\r\n ],\r\n imports: [\r\n CommonModule\r\n ],\r\n exports: [\r\n EmployeePhotoUrlPipe\r\n ]\r\n})\r\nexport class SharePointModule {\r\n static forRoot(config: ServiceConfig): ModuleWithProviders<SharePointModule> {\r\n return {\r\n ngModule: SharePointModule,\r\n providers: [\r\n SharePointService,\r\n { provide: ServiceConfig, useValue: config }\r\n ]\r\n };\r\n }\r\n\r\n constructor(@Optional() @SkipSelf() parentModule: SharePointModule) {\r\n if (parentModule) {\r\n throw new Error(\r\n 'SharePointModule is already loaded. Import it in the AppModule only');\r\n }\r\n }\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["NgxLibDefaultConfig","i1.ServiceConfig","i1.SharePointService"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defaultConfig as defaultConfig$1 } from '@cleavelandprice/ngx-lib';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
|
-
import {
|
|
4
|
-
import { of } from 'rxjs';
|
|
3
|
+
import { Injectable, Optional, Pipe, NgModule, SkipSelf } from '@angular/core';
|
|
4
|
+
import { of, map } from 'rxjs';
|
|
5
5
|
import moment from 'moment';
|
|
6
6
|
import * as i2 from '@angular/common/http';
|
|
7
7
|
import { CommonModule } from '@angular/common';
|
|
@@ -34,31 +34,6 @@ const defaultConfig = {
|
|
|
34
34
|
class ServiceConfig {
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
class EmployeePhotoUrlPipe {
|
|
38
|
-
transform(user, photos) {
|
|
39
|
-
if (!photos) {
|
|
40
|
-
return null;
|
|
41
|
-
}
|
|
42
|
-
// Try to match by employeeNumber, accountName, or title
|
|
43
|
-
const photo = photos
|
|
44
|
-
.find(pic => (pic.employeeNumber && user.employeeNumber && +pic.employeeNumber === +user.employeeNumber) ||
|
|
45
|
-
(pic.accountName && pic.accountName.toLowerCase() === user.sAMAccountName.toLowerCase()) ||
|
|
46
|
-
(pic.title && pic.title.toLowerCase() === user.displayName.toLowerCase()));
|
|
47
|
-
if (!photo) {
|
|
48
|
-
console.log(`No photo match for ${user.displayName}`);
|
|
49
|
-
}
|
|
50
|
-
return photo ? photo.encodedAbsUrl : null;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
EmployeePhotoUrlPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: EmployeePhotoUrlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
54
|
-
EmployeePhotoUrlPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.1", ngImport: i0, type: EmployeePhotoUrlPipe, name: "employeePhotoUrl" });
|
|
55
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: EmployeePhotoUrlPipe, decorators: [{
|
|
56
|
-
type: Pipe,
|
|
57
|
-
args: [{
|
|
58
|
-
name: 'employeePhotoUrl'
|
|
59
|
-
}]
|
|
60
|
-
}] });
|
|
61
|
-
|
|
62
37
|
class SharePointService {
|
|
63
38
|
//#endregion
|
|
64
39
|
//#region Initialization
|
|
@@ -205,6 +180,40 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImpor
|
|
|
205
180
|
type: Optional
|
|
206
181
|
}] }, { type: i2.HttpClient }]; } });
|
|
207
182
|
|
|
183
|
+
class EmployeePhotoUrlPipe {
|
|
184
|
+
constructor(sharePointService) {
|
|
185
|
+
this.sharePointService = sharePointService;
|
|
186
|
+
}
|
|
187
|
+
transform(user, userPhotos) {
|
|
188
|
+
const observable$ = userPhotos ? of(userPhotos) : this.sharePointService.getPhotos();
|
|
189
|
+
return observable$
|
|
190
|
+
.pipe(map(photos => photos.find(pic =>
|
|
191
|
+
// Try to match by employeeNumber, accountName, or title
|
|
192
|
+
(pic.employeeNumber && user.employeeNumber && +pic.employeeNumber === +user.employeeNumber) ||
|
|
193
|
+
(pic.accountName && pic.accountName.toLowerCase() === user.sAMAccountName.toLowerCase()) ||
|
|
194
|
+
(pic.title && pic.title.toLowerCase() === user.displayName.toLowerCase()))?.encodedAbsUrl));
|
|
195
|
+
/*const photo = photos
|
|
196
|
+
.find(pic =>
|
|
197
|
+
(pic.employeeNumber && user.employeeNumber && +pic.employeeNumber === +user.employeeNumber) ||
|
|
198
|
+
(pic.accountName && pic.accountName.toLowerCase() === user.sAMAccountName.toLowerCase()) ||
|
|
199
|
+
(pic.title && pic.title.toLowerCase() === user.displayName.toLowerCase()));
|
|
200
|
+
|
|
201
|
+
if (!photo) {
|
|
202
|
+
console.log(`No photo match for ${user.displayName}`);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
return photo ? photo.encodedAbsUrl : null;*/
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
EmployeePhotoUrlPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: EmployeePhotoUrlPipe, deps: [{ token: SharePointService }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
209
|
+
EmployeePhotoUrlPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.1", ngImport: i0, type: EmployeePhotoUrlPipe, name: "employeePhotoUrl" });
|
|
210
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: EmployeePhotoUrlPipe, decorators: [{
|
|
211
|
+
type: Pipe,
|
|
212
|
+
args: [{
|
|
213
|
+
name: 'employeePhotoUrl'
|
|
214
|
+
}]
|
|
215
|
+
}], ctorParameters: function () { return [{ type: SharePointService }]; } });
|
|
216
|
+
|
|
208
217
|
class SharePointModule {
|
|
209
218
|
constructor(parentModule) {
|
|
210
219
|
if (parentModule) {
|
|
@@ -1 +1 @@
|
|
|
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/pipes/employee-photo-url.pipe.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 { defaultConfig as NgxLibDefaultConfig } from '@cleavelandprice/ngx-lib';\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: NgxLibDefaultConfig.apiUrl,\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","import { Pipe, PipeTransform } from '@angular/core';\nimport { CleavelandPriceUser } from '@cleavelandprice/ngx-lib/active-directory';\nimport { PhotoItem } from '../model/photo-item';\n\n@Pipe({\n name: 'employeePhotoUrl'\n})\nexport class EmployeePhotoUrlPipe implements PipeTransform {\n transform(user: CleavelandPriceUser, photos: PhotoItem[]): any {\n if (!photos) { return null; }\n\n // Try to match by employeeNumber, accountName, or title\n const photo = photos\n .find(pic =>\n (pic.employeeNumber && user.employeeNumber && +pic.employeeNumber === +user.employeeNumber) ||\n (pic.accountName && pic.accountName.toLowerCase() === user.sAMAccountName.toLowerCase()) ||\n (pic.title && pic.title.toLowerCase() === user.displayName.toLowerCase()));\n\n if (!photo) {\n console.log(`No photo match for ${user.displayName}`);\n }\n\n return photo ? photo.encodedAbsUrl : null;\n }\n}","import { Injectable, Optional } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, of } from 'rxjs';\r\nimport moment from 'moment';\r\n\r\nimport { defaultConfig } from '../model/default-config';\r\n\r\nimport { CacheObject } from '../model/cache-object';\r\nimport { ListItem } from '../model/list-item';\r\nimport { ListItemsRequest } from '../model/list-items-request';\r\nimport { PhotoItem } from '../model/photo-item';\r\nimport { ServiceConfig } from '../model/service-config';\r\nimport { UserRequest } from '../model/user-request';\r\nimport { User } from '../model/user';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SharePointService {\r\n private cache: {\r\n users: CacheObject<User> | null,\r\n photos: CacheObject<PhotoItem> | null\r\n } | null = null;\r\n\r\n private defaultCacheLifeMinutes = 720;\r\n\r\n //#region Utilities\r\n private cacheExpired<T>(cache: CacheObject<T>): boolean {\r\n if (!cache) {\r\n return true;\r\n }\r\n\r\n const lifeMinutes = this.config.caching?.lifeMinutes ?? this.defaultCacheLifeMinutes;\r\n const expiration = moment(cache.lastUpdate)\r\n .add(lifeMinutes, 'minutes');\r\n\r\n return moment().isAfter(expiration);\r\n }\r\n //#endregion\r\n\r\n //#region Initialization\r\n // If a ServiceConfig object is not provided when the module is imported, then default values are pulled in from default-config.ts.\r\n constructor(@Optional() private config: ServiceConfig,\r\n private http: HttpClient) {\r\n\r\n this.config = {\r\n ...defaultConfig,\r\n ...this.config\r\n };\r\n\r\n this.configureCaching();\r\n this.configureLogging();\r\n }\r\n\r\n private configureCaching(): void {\r\n // If caching config is missing entirely, give it a default\r\n this.config.caching = this.config.caching ?? {\r\n enabled: false,\r\n lifeMinutes: this.defaultCacheLifeMinutes\r\n };\r\n\r\n this.cache = {\r\n photos: null,\r\n users: null\r\n };\r\n }\r\n\r\n private configureLogging(): void {\r\n // If logging config is missing entirely, give it a default\r\n this.config.logging = this.config.logging ?? {\r\n dataCached: false,\r\n cachedDataReturned: false,\r\n freshDataReturned: false,\r\n cacheCleared: false\r\n }\r\n }\r\n //#endregion\r\n\r\n getListItems(request: ListItemsRequest): Observable<ListItem[]> {\r\n const apiUrl = this.config?.apiUrl ?? defaultConfig.apiUrl;\r\n const endpoint = this.config?.listItemsEndpoint ?? defaultConfig.listItemsEndpoint;\r\n\r\n return this.http.post<ListItem[]>(`${apiUrl}${endpoint}`, request);\r\n }\r\n\r\n getPhotos(): Observable<PhotoItem[]> {\r\n const request: ListItemsRequest = {\r\n username: this.config?.username ?? defaultConfig.username,\r\n password: this.config?.password ?? defaultConfig.password,\r\n site: this.config?.photos.site ?? defaultConfig.photos.site,\r\n list: this.config?.photos.list ?? defaultConfig.photos.list,\r\n additionalPropertiesToRetrieve: defaultConfig.photos.additionalPropertiesToRetrieve\r\n };\r\n\r\n const observable$ = this.getListItems(request) as Observable<PhotoItem[]>;\r\n\r\n if (this.config.caching?.enabled) {\r\n if (this.cacheExpired<PhotoItem>(this.cache?.photos!)) {\r\n // Get the data and cache it\r\n observable$.subscribe(data => {\r\n this.cache!.photos = {\r\n data,\r\n lastUpdate: moment()\r\n };\r\n\r\n if (this.config.logging?.dataCached) {\r\n const lifeMinutes = this.config.caching?.lifeMinutes ?? this.defaultCacheLifeMinutes;\r\n console.log(`Photos cached for ${lifeMinutes} minutes`);\r\n }\r\n });\r\n } else {\r\n // Cache exists and hasn't expired yet\r\n if (this.config.logging?.cachedDataReturned) {\r\n console.log('Returning cached photos');\r\n }\r\n\r\n return of(this.cache!.photos!.data);\r\n }\r\n }\r\n\r\n // Cache is either disabled or expired, return data from API\r\n if (this.config.logging?.freshDataReturned) {\r\n console.log('Returning fresh photos');\r\n }\r\n\r\n return observable$;\r\n }\r\n\r\n getUsers(request: UserRequest, id?: number): Observable<User | User[]> {\r\n const apiUrl = this.config?.apiUrl ?? defaultConfig.apiUrl;\r\n const endpoint = this.config?.usersEndpoint ?? defaultConfig.usersEndpoint;\r\n \r\n const observable$ = this.http.post<User | User[]>(`${apiUrl}${endpoint}/${id ?? ''}`, request);\r\n\r\n //#region Single user\r\n if (id) {\r\n return observable$;\r\n }\r\n //#endregion\r\n\r\n //#region Multiple users\r\n if (this.config.caching?.enabled) {\r\n if (this.cacheExpired<User>(this.cache!.users!)) {\r\n // Get the data and cache it\r\n observable$.subscribe(data => {\r\n this.cache!.users = {\r\n data: data as User[],\r\n lastUpdate: moment()\r\n };\r\n\r\n if (this.config.logging?.dataCached) {\r\n const lifeMinutes = this.config.caching?.lifeMinutes ?? this.defaultCacheLifeMinutes;\r\n console.log(`Users cached for ${lifeMinutes} minutes`);\r\n }\r\n });\r\n } else {\r\n // Cache exists and hasn't expired yet\r\n if (this.config.logging?.cachedDataReturned) {\r\n console.log('Returning cached users');\r\n }\r\n\r\n return of(this.cache!.users!.data);\r\n }\r\n }\r\n\r\n // Cache is either disabled or expired, return data from API\r\n if (this.config.logging?.freshDataReturned) {\r\n console.log('Returning fresh users');\r\n }\r\n\r\n return observable$;\r\n //#endregion\r\n }\r\n\r\n clearCache(): void {\r\n this.cache = null;\r\n\r\n if (this.config.logging?.cacheCleared) {\r\n console.log('Cache cleared');\r\n }\r\n }\r\n}","import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { ServiceConfig } from './model/service-config';\r\nimport { SharePointService } from './services/sharepoint.service';\r\nimport { EmployeePhotoUrlPipe } from './pipes/employee-photo-url.pipe';\r\n\r\n@NgModule({\r\n declarations: [\r\n EmployeePhotoUrlPipe\r\n ],\r\n imports: [\r\n CommonModule\r\n ],\r\n exports: [\r\n EmployeePhotoUrlPipe\r\n ]\r\n})\r\nexport class SharePointModule {\r\n static forRoot(config: ServiceConfig): ModuleWithProviders<SharePointModule> {\r\n return {\r\n ngModule: SharePointModule,\r\n providers: [\r\n SharePointService,\r\n { provide: ServiceConfig, useValue: config }\r\n ]\r\n };\r\n }\r\n\r\n constructor(@Optional() @SkipSelf() parentModule: SharePointModule) {\r\n if (parentModule) {\r\n throw new Error(\r\n 'SharePointModule is already loaded. Import it in the AppModule only');\r\n }\r\n }\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["NgxLibDefaultConfig","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/pipes/employee-photo-url.pipe.ts","../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/sharepoint.module.ts","../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/cleavelandprice-ngx-lib-sharepoint.ts"],"sourcesContent":["import { defaultConfig as NgxLibDefaultConfig } from '@cleavelandprice/ngx-lib';\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: NgxLibDefaultConfig.apiUrl,\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","import { Injectable, Optional } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, of } from 'rxjs';\r\nimport moment from 'moment';\r\n\r\nimport { defaultConfig } from '../model/default-config';\r\n\r\nimport { CacheObject } from '../model/cache-object';\r\nimport { ListItem } from '../model/list-item';\r\nimport { ListItemsRequest } from '../model/list-items-request';\r\nimport { PhotoItem } from '../model/photo-item';\r\nimport { ServiceConfig } from '../model/service-config';\r\nimport { UserRequest } from '../model/user-request';\r\nimport { User } from '../model/user';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SharePointService {\r\n private cache: {\r\n users: CacheObject<User> | null,\r\n photos: CacheObject<PhotoItem> | null\r\n } | null = null;\r\n\r\n private defaultCacheLifeMinutes = 720;\r\n\r\n //#region Utilities\r\n private cacheExpired<T>(cache: CacheObject<T>): boolean {\r\n if (!cache) {\r\n return true;\r\n }\r\n\r\n const lifeMinutes = this.config.caching?.lifeMinutes ?? this.defaultCacheLifeMinutes;\r\n const expiration = moment(cache.lastUpdate)\r\n .add(lifeMinutes, 'minutes');\r\n\r\n return moment().isAfter(expiration);\r\n }\r\n //#endregion\r\n\r\n //#region Initialization\r\n // If a ServiceConfig object is not provided when the module is imported, then default values are pulled in from default-config.ts.\r\n constructor(@Optional() private config: ServiceConfig,\r\n private http: HttpClient) {\r\n\r\n this.config = {\r\n ...defaultConfig,\r\n ...this.config\r\n };\r\n\r\n this.configureCaching();\r\n this.configureLogging();\r\n }\r\n\r\n private configureCaching(): void {\r\n // If caching config is missing entirely, give it a default\r\n this.config.caching = this.config.caching ?? {\r\n enabled: false,\r\n lifeMinutes: this.defaultCacheLifeMinutes\r\n };\r\n\r\n this.cache = {\r\n photos: null,\r\n users: null\r\n };\r\n }\r\n\r\n private configureLogging(): void {\r\n // If logging config is missing entirely, give it a default\r\n this.config.logging = this.config.logging ?? {\r\n dataCached: false,\r\n cachedDataReturned: false,\r\n freshDataReturned: false,\r\n cacheCleared: false\r\n }\r\n }\r\n //#endregion\r\n\r\n getListItems(request: ListItemsRequest): Observable<ListItem[]> {\r\n const apiUrl = this.config?.apiUrl ?? defaultConfig.apiUrl;\r\n const endpoint = this.config?.listItemsEndpoint ?? defaultConfig.listItemsEndpoint;\r\n\r\n return this.http.post<ListItem[]>(`${apiUrl}${endpoint}`, request);\r\n }\r\n\r\n getPhotos(): Observable<PhotoItem[]> {\r\n const request: ListItemsRequest = {\r\n username: this.config?.username ?? defaultConfig.username,\r\n password: this.config?.password ?? defaultConfig.password,\r\n site: this.config?.photos.site ?? defaultConfig.photos.site,\r\n list: this.config?.photos.list ?? defaultConfig.photos.list,\r\n additionalPropertiesToRetrieve: defaultConfig.photos.additionalPropertiesToRetrieve\r\n };\r\n\r\n const observable$ = this.getListItems(request) as Observable<PhotoItem[]>;\r\n\r\n if (this.config.caching?.enabled) {\r\n if (this.cacheExpired<PhotoItem>(this.cache?.photos!)) {\r\n // Get the data and cache it\r\n observable$.subscribe(data => {\r\n this.cache!.photos = {\r\n data,\r\n lastUpdate: moment()\r\n };\r\n\r\n if (this.config.logging?.dataCached) {\r\n const lifeMinutes = this.config.caching?.lifeMinutes ?? this.defaultCacheLifeMinutes;\r\n console.log(`Photos cached for ${lifeMinutes} minutes`);\r\n }\r\n });\r\n } else {\r\n // Cache exists and hasn't expired yet\r\n if (this.config.logging?.cachedDataReturned) {\r\n console.log('Returning cached photos');\r\n }\r\n\r\n return of(this.cache!.photos!.data);\r\n }\r\n }\r\n\r\n // Cache is either disabled or expired, return data from API\r\n if (this.config.logging?.freshDataReturned) {\r\n console.log('Returning fresh photos');\r\n }\r\n\r\n return observable$;\r\n }\r\n\r\n getUsers(request: UserRequest, id?: number): Observable<User | User[]> {\r\n const apiUrl = this.config?.apiUrl ?? defaultConfig.apiUrl;\r\n const endpoint = this.config?.usersEndpoint ?? defaultConfig.usersEndpoint;\r\n \r\n const observable$ = this.http.post<User | User[]>(`${apiUrl}${endpoint}/${id ?? ''}`, request);\r\n\r\n //#region Single user\r\n if (id) {\r\n return observable$;\r\n }\r\n //#endregion\r\n\r\n //#region Multiple users\r\n if (this.config.caching?.enabled) {\r\n if (this.cacheExpired<User>(this.cache!.users!)) {\r\n // Get the data and cache it\r\n observable$.subscribe(data => {\r\n this.cache!.users = {\r\n data: data as User[],\r\n lastUpdate: moment()\r\n };\r\n\r\n if (this.config.logging?.dataCached) {\r\n const lifeMinutes = this.config.caching?.lifeMinutes ?? this.defaultCacheLifeMinutes;\r\n console.log(`Users cached for ${lifeMinutes} minutes`);\r\n }\r\n });\r\n } else {\r\n // Cache exists and hasn't expired yet\r\n if (this.config.logging?.cachedDataReturned) {\r\n console.log('Returning cached users');\r\n }\r\n\r\n return of(this.cache!.users!.data);\r\n }\r\n }\r\n\r\n // Cache is either disabled or expired, return data from API\r\n if (this.config.logging?.freshDataReturned) {\r\n console.log('Returning fresh users');\r\n }\r\n\r\n return observable$;\r\n //#endregion\r\n }\r\n\r\n clearCache(): void {\r\n this.cache = null;\r\n\r\n if (this.config.logging?.cacheCleared) {\r\n console.log('Cache cleared');\r\n }\r\n }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\nimport { of, map } from 'rxjs';\nimport { CleavelandPriceUser } from '@cleavelandprice/ngx-lib/active-directory';\nimport { PhotoItem } from '../model/photo-item';\nimport { SharePointService } from '../services/sharepoint.service';\n\n@Pipe({\n name: 'employeePhotoUrl'\n})\nexport class EmployeePhotoUrlPipe implements PipeTransform {\n constructor (private sharePointService: SharePointService) { }\n\n transform(user: CleavelandPriceUser, userPhotos?: PhotoItem[]): any {\n const observable$ = userPhotos ? of(userPhotos) : this.sharePointService.getPhotos();\n\n return observable$\n .pipe(\n map(photos =>\n photos.find(pic =>\n // Try to match by employeeNumber, accountName, or title\n (pic.employeeNumber && user.employeeNumber && +pic.employeeNumber === +user.employeeNumber) ||\n (pic.accountName && pic.accountName.toLowerCase() === user.sAMAccountName.toLowerCase()) ||\n (pic.title && pic.title.toLowerCase() === user.displayName.toLowerCase())\n )?.encodedAbsUrl\n )\n );\n\n /*const photo = photos\n .find(pic =>\n (pic.employeeNumber && user.employeeNumber && +pic.employeeNumber === +user.employeeNumber) ||\n (pic.accountName && pic.accountName.toLowerCase() === user.sAMAccountName.toLowerCase()) ||\n (pic.title && pic.title.toLowerCase() === user.displayName.toLowerCase()));\n\n if (!photo) {\n console.log(`No photo match for ${user.displayName}`);\n }\n\n return photo ? photo.encodedAbsUrl : null;*/\n }\n}","import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { ServiceConfig } from './model/service-config';\r\nimport { SharePointService } from './services/sharepoint.service';\r\nimport { EmployeePhotoUrlPipe } from './pipes/employee-photo-url.pipe';\r\n\r\n@NgModule({\r\n declarations: [\r\n EmployeePhotoUrlPipe\r\n ],\r\n imports: [\r\n CommonModule\r\n ],\r\n exports: [\r\n EmployeePhotoUrlPipe\r\n ]\r\n})\r\nexport class SharePointModule {\r\n static forRoot(config: ServiceConfig): ModuleWithProviders<SharePointModule> {\r\n return {\r\n ngModule: SharePointModule,\r\n providers: [\r\n SharePointService,\r\n { provide: ServiceConfig, useValue: config }\r\n ]\r\n };\r\n }\r\n\r\n constructor(@Optional() @SkipSelf() parentModule: SharePointModule) {\r\n if (parentModule) {\r\n throw new Error(\r\n 'SharePointModule is already loaded. Import it in the AppModule only');\r\n }\r\n }\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["NgxLibDefaultConfig","i1.ServiceConfig","i1.SharePointService"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"comment": "NGX-LIB primary entry point package.json",
|
|
3
3
|
"name": "@cleavelandprice/ngx-lib",
|
|
4
|
-
"version": "3.1.
|
|
4
|
+
"version": "3.1.29",
|
|
5
5
|
"description": "Angular 14+ library providing foundational functionality to Cleaveland-Price applications",
|
|
6
6
|
"peerDependencies": {
|
|
7
7
|
"@angular/common": "^14.2.1",
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { PipeTransform } from '@angular/core';
|
|
2
2
|
import { CleavelandPriceUser } from '@cleavelandprice/ngx-lib/active-directory';
|
|
3
3
|
import { PhotoItem } from '../model/photo-item';
|
|
4
|
+
import { SharePointService } from '../services/sharepoint.service';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
export declare class EmployeePhotoUrlPipe implements PipeTransform {
|
|
6
|
-
|
|
7
|
+
private sharePointService;
|
|
8
|
+
constructor(sharePointService: SharePointService);
|
|
9
|
+
transform(user: CleavelandPriceUser, userPhotos?: PhotoItem[]): any;
|
|
7
10
|
static ɵfac: i0.ɵɵFactoryDeclaration<EmployeePhotoUrlPipe, never>;
|
|
8
11
|
static ɵpipe: i0.ɵɵPipeDeclaration<EmployeePhotoUrlPipe, "employeePhotoUrl", false>;
|
|
9
12
|
}
|