@mis-wis/common 0.1.8 → 0.2.0
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/lib/components/create-non-shift-modal/create-non-shift-modal.component.mjs +233 -0
- package/esm2020/lib/constants/assets.constants.mjs +8 -0
- package/esm2020/lib/models/configurations.model.mjs +1 -1
- package/esm2020/lib/models/env.model.mjs +1 -1
- package/esm2020/lib/models/session.model.mjs +2 -0
- package/esm2020/lib/services/http.service.mjs +29 -9
- package/esm2020/lib/services/mfe-communication.service.mjs +7 -1
- package/esm2020/lib/services/session.errors.mjs +28 -0
- package/esm2020/lib/services/session.service.mjs +148 -0
- package/esm2020/lib/wis-common.module.mjs +13 -8
- package/esm2020/public-api.mjs +5 -1
- package/fesm2015/mis-wis-common.mjs +465 -25
- package/fesm2015/mis-wis-common.mjs.map +1 -1
- package/fesm2020/mis-wis-common.mjs +457 -25
- package/fesm2020/mis-wis-common.mjs.map +1 -1
- package/lib/components/create-non-shift-modal/create-non-shift-modal.component.d.ts +56 -0
- package/lib/constants/assets.constants.d.ts +7 -0
- package/lib/models/configurations.model.d.ts +8 -0
- package/lib/models/env.model.d.ts +1 -0
- package/lib/models/session.model.d.ts +21 -0
- package/lib/services/http.service.d.ts +16 -5
- package/lib/services/mfe-communication.service.d.ts +3 -0
- package/lib/services/session.errors.d.ts +15 -0
- package/lib/services/session.service.d.ts +49 -0
- package/lib/wis-common.module.d.ts +9 -4
- package/mis-wis-common-0.2.0.tgz +0 -0
- package/package.json +3 -2
- package/public-api.d.ts +4 -0
- package/src/assets/calendar.svg +7 -0
- package/src/assets/images/icons/Wis-icon.svg +4 -0
- package/src/assets/images/icons/brand.png +0 -0
- package/src/assets/images/icons/broascast.svg +3 -0
- package/src/assets/images/icons/bulk-upload.svg +3 -0
- package/src/assets/images/icons/desk-mgmt.svg +6 -0
- package/src/assets/images/icons/employees-sidebar.svg +3 -0
- package/src/assets/images/icons/help-section.svg +4 -0
- package/src/assets/images/icons/home.svg +3 -0
- package/src/assets/images/icons/logout.svg +4 -0
- package/src/assets/images/icons/manage-premise.svg +3 -0
- package/src/assets/images/icons/meeting-room.svg +7 -0
- package/src/assets/images/icons/mis-icon.svg +3 -0
- package/src/assets/images/icons/my-bookings.svg +5 -0
- package/src/assets/images/icons/profile.svg +3 -0
- package/src/assets/images/icons/reception.svg +14 -0
- package/src/assets/images/icons/report.svg +3 -0
- package/src/assets/images/icons/resource-group.svg +3 -0
- package/src/assets/images/icons/roles.svg +3 -0
- package/src/assets/images/icons/sanitize.svg +10 -0
- package/src/assets/images/icons/seat-mgmt.svg +3 -0
- package/src/assets/images/icons/settings-sidebar.svg +3 -0
- package/src/assets/images/icons/signout.svg +4 -0
- package/src/assets/images/icons/user-group.svg +6 -0
- package/src/assets/images/icons/user-permission.svg +5 -0
- package/src/assets/images/icons/utilisation.svg +3 -0
- package/src/assets/images/icons/vaccine_approval.svg +8 -0
- package/src/assets/images/icons/vaccine_upload.png +0 -0
- package/src/assets/images/icons/work-planner-sidebar.svg +3 -0
- package/src/assets/images/icons/workInSyncText.svg +14 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export class SessionError extends Error {
|
|
2
|
+
}
|
|
3
|
+
export class SessionTokenNotFoundError extends SessionError {
|
|
4
|
+
constructor() {
|
|
5
|
+
super('Session token was not found.');
|
|
6
|
+
this.name = 'SessionTokenNotFoundError';
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export class SessionTokenExpiredError extends SessionError {
|
|
10
|
+
constructor() {
|
|
11
|
+
super('Session token has expired.');
|
|
12
|
+
this.name = 'SessionTokenExpiredError';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export class SessionTokenInvalidError extends SessionError {
|
|
16
|
+
constructor() {
|
|
17
|
+
super('Session token could not be decoded.');
|
|
18
|
+
this.name = 'SessionTokenInvalidError';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export class SessionClaimNotFoundError extends SessionError {
|
|
22
|
+
constructor(claim) {
|
|
23
|
+
super(`Session claim "${claim}" was not found in the token.`);
|
|
24
|
+
this.claim = claim;
|
|
25
|
+
this.name = 'SessionClaimNotFoundError';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5lcnJvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvd2lzLWNvbW1vbi9zcmMvbGliL3NlcnZpY2VzL3Nlc3Npb24uZXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBZ0IsWUFBYSxTQUFRLEtBQUs7Q0FBRztBQUVuRCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsWUFBWTtJQUN6RDtRQUNFLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxJQUFJLEdBQUcsMkJBQTJCLENBQUM7SUFDMUMsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLHdCQUF5QixTQUFRLFlBQVk7SUFDeEQ7UUFDRSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsSUFBSSxHQUFHLDBCQUEwQixDQUFDO0lBQ3pDLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxZQUFZO0lBQ3hEO1FBQ0UsS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLElBQUksR0FBRywwQkFBMEIsQ0FBQztJQUN6QyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsWUFBWTtJQUN6RCxZQUE0QixLQUFhO1FBQ3ZDLEtBQUssQ0FBQyxrQkFBa0IsS0FBSywrQkFBK0IsQ0FBQyxDQUFDO1FBRHBDLFVBQUssR0FBTCxLQUFLLENBQVE7UUFFdkMsSUFBSSxDQUFDLElBQUksR0FBRywyQkFBMkIsQ0FBQztJQUMxQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgYWJzdHJhY3QgY2xhc3MgU2Vzc2lvbkVycm9yIGV4dGVuZHMgRXJyb3Ige31cblxuZXhwb3J0IGNsYXNzIFNlc3Npb25Ub2tlbk5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBTZXNzaW9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignU2Vzc2lvbiB0b2tlbiB3YXMgbm90IGZvdW5kLicpO1xuICAgIHRoaXMubmFtZSA9ICdTZXNzaW9uVG9rZW5Ob3RGb3VuZEVycm9yJztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2Vzc2lvblRva2VuRXhwaXJlZEVycm9yIGV4dGVuZHMgU2Vzc2lvbkVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ1Nlc3Npb24gdG9rZW4gaGFzIGV4cGlyZWQuJyk7XG4gICAgdGhpcy5uYW1lID0gJ1Nlc3Npb25Ub2tlbkV4cGlyZWRFcnJvcic7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNlc3Npb25Ub2tlbkludmFsaWRFcnJvciBleHRlbmRzIFNlc3Npb25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdTZXNzaW9uIHRva2VuIGNvdWxkIG5vdCBiZSBkZWNvZGVkLicpO1xuICAgIHRoaXMubmFtZSA9ICdTZXNzaW9uVG9rZW5JbnZhbGlkRXJyb3InO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXNzaW9uQ2xhaW1Ob3RGb3VuZEVycm9yIGV4dGVuZHMgU2Vzc2lvbkVycm9yIHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGNsYWltOiBzdHJpbmcpIHtcbiAgICBzdXBlcihgU2Vzc2lvbiBjbGFpbSBcIiR7Y2xhaW19XCIgd2FzIG5vdCBmb3VuZCBpbiB0aGUgdG9rZW4uYCk7XG4gICAgdGhpcy5uYW1lID0gJ1Nlc3Npb25DbGFpbU5vdEZvdW5kRXJyb3InO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import jwtDecode from 'jwt-decode';
|
|
3
|
+
import { getCookie } from '../functions/cookie.function';
|
|
4
|
+
import { getQueryParam } from '../functions/url.functions';
|
|
5
|
+
import { SessionClaimNotFoundError, SessionError, SessionTokenExpiredError, SessionTokenInvalidError, SessionTokenNotFoundError, } from './session.errors';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
const DEFAULT_SESSION_TOKEN_PREFIX = 'sso-wis-token';
|
|
8
|
+
const DEFAULT_SESSION_TOKEN_FALLBACK_KEY = 'x-wis-token';
|
|
9
|
+
const DEFAULT_VET_TOKEN_PREFIX = 'x-vet-token';
|
|
10
|
+
const LAUNCH_SOURCE_VET = 'VET';
|
|
11
|
+
export class SessionService {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.config = {};
|
|
14
|
+
this.cachedToken = null;
|
|
15
|
+
this.cachedState = null;
|
|
16
|
+
}
|
|
17
|
+
init(config) {
|
|
18
|
+
this.config = { ...config };
|
|
19
|
+
this.cachedToken = null;
|
|
20
|
+
this.cachedState = null;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Runs `handlers.next` and returns its result, or `handlers.error(error)` if it throws a `SessionError`.
|
|
24
|
+
* Centralizes the try/catch mechanics; the caller still supplies the actual handling logic.
|
|
25
|
+
*/
|
|
26
|
+
read(handlers) {
|
|
27
|
+
try {
|
|
28
|
+
return handlers.next(this);
|
|
29
|
+
}
|
|
30
|
+
catch (e) {
|
|
31
|
+
if (e instanceof SessionError) {
|
|
32
|
+
return handlers.error(e);
|
|
33
|
+
}
|
|
34
|
+
throw e;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Statement-style variant of `read` for blocks of assignments/side effects with no return value.
|
|
39
|
+
*/
|
|
40
|
+
run(handlers) {
|
|
41
|
+
this.read({
|
|
42
|
+
next: s => { handlers.next(s); return undefined; },
|
|
43
|
+
error: err => { handlers.error(err); return undefined; }
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
get isVET() {
|
|
47
|
+
return this.state.isVET;
|
|
48
|
+
}
|
|
49
|
+
get sub() { return this.getClaim('sub'); }
|
|
50
|
+
get empGuid() { return this.getClaim('employeeGUID'); }
|
|
51
|
+
get internalSsoRole() { return this.getClaim('internal_sso_role'); }
|
|
52
|
+
get roles() { return this.getClaim('roles'); }
|
|
53
|
+
get sessionId() { return this.getClaim('sessionId'); }
|
|
54
|
+
get loggedInUser() { return this.getClaim('loggedInUser'); }
|
|
55
|
+
get exp() { return this.getClaim('exp'); }
|
|
56
|
+
get iat() { return this.getClaim('iat'); }
|
|
57
|
+
get businessUnitId() { return this.getClaim('businessUnitId'); }
|
|
58
|
+
get allowedBuids() { return this.getClaim('ALLOWED_BUIDS'); }
|
|
59
|
+
get vetUserEmailId() { return this.getClaim('vetUserEmailId'); }
|
|
60
|
+
get vetUserId() { return this.getClaim('vetUserId'); }
|
|
61
|
+
get source() { return this.getClaim('source'); }
|
|
62
|
+
get roleId() {
|
|
63
|
+
const claims = this.getClaims();
|
|
64
|
+
const raw = claims.internal_sso_role?.trim() || claims.roles?.[0]?.trim();
|
|
65
|
+
if (!raw || !/^\d+$/.test(raw)) {
|
|
66
|
+
throw new SessionClaimNotFoundError('roleId');
|
|
67
|
+
}
|
|
68
|
+
return Number(raw);
|
|
69
|
+
}
|
|
70
|
+
getClaims() {
|
|
71
|
+
const state = this.state;
|
|
72
|
+
if (state.status === 'ok') {
|
|
73
|
+
return state.claims;
|
|
74
|
+
}
|
|
75
|
+
if (state.status === 'not-found') {
|
|
76
|
+
throw new SessionTokenNotFoundError();
|
|
77
|
+
}
|
|
78
|
+
if (state.status === 'expired') {
|
|
79
|
+
throw new SessionTokenExpiredError();
|
|
80
|
+
}
|
|
81
|
+
throw new SessionTokenInvalidError();
|
|
82
|
+
}
|
|
83
|
+
getClaim(key) {
|
|
84
|
+
const claims = this.getClaims();
|
|
85
|
+
const value = claims[key];
|
|
86
|
+
const isEmptyString = typeof value === 'string' && value.trim() === '';
|
|
87
|
+
if (value === undefined || value === null || isEmptyString) {
|
|
88
|
+
throw new SessionClaimNotFoundError(key);
|
|
89
|
+
}
|
|
90
|
+
return (typeof value === 'string' ? value.trim() : value);
|
|
91
|
+
}
|
|
92
|
+
get state() {
|
|
93
|
+
const { token, isVET } = this.findToken();
|
|
94
|
+
if (!this.cachedState || token !== this.cachedToken) {
|
|
95
|
+
this.cachedToken = token;
|
|
96
|
+
this.cachedState = this.build(token, isVET);
|
|
97
|
+
}
|
|
98
|
+
return this.cachedState;
|
|
99
|
+
}
|
|
100
|
+
build(token, isVET) {
|
|
101
|
+
if (!token) {
|
|
102
|
+
return { status: 'not-found', isVET };
|
|
103
|
+
}
|
|
104
|
+
let claims;
|
|
105
|
+
try {
|
|
106
|
+
claims = jwtDecode(token);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return { status: 'invalid', isVET };
|
|
110
|
+
}
|
|
111
|
+
if (this.isExpired(claims)) {
|
|
112
|
+
return { status: 'expired', isVET };
|
|
113
|
+
}
|
|
114
|
+
return { status: 'ok', claims, isVET };
|
|
115
|
+
}
|
|
116
|
+
isExpired(claims) {
|
|
117
|
+
return typeof claims.exp === 'number' && claims.exp * 1000 <= Date.now();
|
|
118
|
+
}
|
|
119
|
+
isVETSource() {
|
|
120
|
+
return getQueryParam('source') === LAUNCH_SOURCE_VET;
|
|
121
|
+
}
|
|
122
|
+
resolveBuid() {
|
|
123
|
+
return getQueryParam('buid') || getCookie('buid') || null;
|
|
124
|
+
}
|
|
125
|
+
findToken() {
|
|
126
|
+
const buid = this.resolveBuid();
|
|
127
|
+
if (this.isVETSource()) {
|
|
128
|
+
const vetKey = this.config.vetTokenCookieKey ?? (buid ? `${DEFAULT_VET_TOKEN_PREFIX}-${buid}` : null);
|
|
129
|
+
const vetToken = (vetKey ? getCookie(vetKey) : '') || '';
|
|
130
|
+
if (vetToken) {
|
|
131
|
+
return { token: vetToken, isVET: true };
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
const sessionToken = this.config.sessionTokenCookieKey
|
|
135
|
+
? getCookie(this.config.sessionTokenCookieKey)
|
|
136
|
+
: (buid ? getCookie(`${DEFAULT_SESSION_TOKEN_PREFIX}-${buid}`) : '') || getCookie(DEFAULT_SESSION_TOKEN_FALLBACK_KEY);
|
|
137
|
+
return { token: sessionToken || '', isVET: false };
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
SessionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SessionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
141
|
+
SessionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SessionService, providedIn: 'root' });
|
|
142
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SessionService, decorators: [{
|
|
143
|
+
type: Injectable,
|
|
144
|
+
args: [{
|
|
145
|
+
providedIn: 'root'
|
|
146
|
+
}]
|
|
147
|
+
}] });
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL3dpcy1jb21tb24vc3JjL2xpYi9zZXJ2aWNlcy9zZXNzaW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFFbkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUzRCxPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLFlBQVksRUFDWix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLHlCQUF5QixHQUMxQixNQUFNLGtCQUFrQixDQUFDOztBQUUxQixNQUFNLDRCQUE0QixHQUFHLGVBQWUsQ0FBQztBQUNyRCxNQUFNLGtDQUFrQyxHQUFHLGFBQWEsQ0FBQztBQUN6RCxNQUFNLHdCQUF3QixHQUFHLGFBQWEsQ0FBQztBQUMvQyxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQztBQVdoQyxNQUFNLE9BQU8sY0FBYztJQUgzQjtRQUlVLFdBQU0sR0FBMEIsRUFBRSxDQUFDO1FBQ25DLGdCQUFXLEdBQWtCLElBQUksQ0FBQztRQUNsQyxnQkFBVyxHQUF3QixJQUFJLENBQUM7S0E2SWpEO0lBM0lDLElBQUksQ0FBQyxNQUE2QjtRQUNoQyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxDQUFJLFFBQXFGO1FBQzNGLElBQUk7WUFDRixPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFB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SUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDdEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyx3QkFBd0IsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEcsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3pELElBQUksUUFBUSxFQUFFO2dCQUNaLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUN6QztTQUNGO1FBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUI7WUFDcEQsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDO1lBQzlDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsNEJBQTRCLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksU0FBUyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFFeEgsT0FBTyxFQUFFLEtBQUssRUFBRSxZQUFZLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUNyRCxDQUFDOzsyR0EvSVUsY0FBYzsrR0FBZCxjQUFjLGNBRmIsTUFBTTsyRkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBqd3REZWNvZGUgZnJvbSAnand0LWRlY29kZSc7XG5cbmltcG9ydCB7IGdldENvb2tpZSB9IGZyb20gJy4uL2Z1bmN0aW9ucy9jb29raWUuZnVuY3Rpb24nO1xuaW1wb3J0IHsgZ2V0UXVlcnlQYXJhbSB9IGZyb20gJy4uL2Z1bmN0aW9ucy91cmwuZnVuY3Rpb25zJztcbmltcG9ydCB7IE5zU2Vzc2lvbiB9IGZyb20gJy4uL21vZGVscy9zZXNzaW9uLm1vZGVsJztcbmltcG9ydCB7XG4gIFNlc3Npb25DbGFpbU5vdEZvdW5kRXJyb3IsXG4gIFNlc3Npb25FcnJvcixcbiAgU2Vzc2lvblRva2VuRXhwaXJlZEVycm9yLFxuICBTZXNzaW9uVG9rZW5JbnZhbGlkRXJyb3IsXG4gIFNlc3Npb25Ub2tlbk5vdEZvdW5kRXJyb3IsXG59IGZyb20gJy4vc2Vzc2lvbi5lcnJvcnMnO1xuXG5jb25zdCBERUZBVUxUX1NFU1NJT05fVE9LRU5fUFJFRklYID0gJ3Nzby13aXMtdG9rZW4nO1xuY29uc3QgREVGQVVMVF9TRVNTSU9OX1RPS0VOX0ZBTExCQUNLX0tFWSA9ICd4LXdpcy10b2tlbic7XG5jb25zdCBERUZBVUxUX1ZFVF9UT0tFTl9QUkVGSVggPSAneC12ZXQtdG9rZW4nO1xuY29uc3QgTEFVTkNIX1NPVVJDRV9WRVQgPSAnVkVUJztcblxudHlwZSBTZXNzaW9uU3RhdGUgPVxuICB8IHsgc3RhdHVzOiAnb2snOyBjbGFpbXM6IE5zU2Vzc2lvbi5JQ2xhaW1zOyBpc1ZFVDogYm9vbGVhbiB9XG4gIHwgeyBzdGF0dXM6ICdub3QtZm91bmQnOyBpc1ZFVDogYm9vbGVhbiB9XG4gIHwgeyBzdGF0dXM6ICdleHBpcmVkJzsgaXNWRVQ6IGJvb2xlYW4gfVxuICB8IHsgc3RhdHVzOiAnaW52YWxpZCc7IGlzVkVUOiBib29sZWFuIH07XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNlc3Npb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjb25maWc6IE5zU2Vzc2lvbi5JSW5pdENvbmZpZyA9IHt9O1xuICBwcml2YXRlIGNhY2hlZFRva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjYWNoZWRTdGF0ZTogU2Vzc2lvblN0YXRlIHwgbnVsbCA9IG51bGw7XG5cbiAgaW5pdChjb25maWc6IE5zU2Vzc2lvbi5JSW5pdENvbmZpZyk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnID0geyAuLi5jb25maWcgfTtcbiAgICB0aGlzLmNhY2hlZFRva2VuID0gbnVsbDtcbiAgICB0aGlzLmNhY2hlZFN0YXRlID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGBoYW5kbGVycy5uZXh0YCBhbmQgcmV0dXJucyBpdHMgcmVzdWx0LCBvciBgaGFuZGxlcnMuZXJyb3IoZXJyb3IpYCBpZiBpdCB0aHJvd3MgYSBgU2Vzc2lvbkVycm9yYC5cbiAgICogQ2VudHJhbGl6ZXMgdGhlIHRyeS9jYXRjaCBtZWNoYW5pY3M7IHRoZSBjYWxsZXIgc3RpbGwgc3VwcGxpZXMgdGhlIGFjdHVhbCBoYW5kbGluZyBsb2dpYy5cbiAgICovXG4gIHJlYWQ8VD4oaGFuZGxlcnM6IHsgbmV4dDogKHNlc3Npb246IFNlc3Npb25TZXJ2aWNlKSA9PiBUOyBlcnJvcjogKGVycm9yOiBTZXNzaW9uRXJyb3IpID0+IFQgfSk6IFQge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gaGFuZGxlcnMubmV4dCh0aGlzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIFNlc3Npb25FcnJvcikge1xuICAgICAgICByZXR1cm4gaGFuZGxlcnMuZXJyb3IoZSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdGF0ZW1lbnQtc3R5bGUgdmFyaWFudCBvZiBgcmVhZGAgZm9yIGJsb2NrcyBvZiBhc3NpZ25tZW50cy9zaWRlIGVmZmVjdHMgd2l0aCBubyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBydW4oaGFuZGxlcnM6IHsgbmV4dDogKHNlc3Npb246IFNlc3Npb25TZXJ2aWNlKSA9PiB2b2lkOyBlcnJvcjogKGVycm9yOiBTZXNzaW9uRXJyb3IpID0+IHZvaWQgfSk6IHZvaWQge1xuICAgIHRoaXMucmVhZCh7XG4gICAgICBuZXh0OiBzID0+IHsgaGFuZGxlcnMubmV4dChzKTsgcmV0dXJuIHVuZGVmaW5lZDsgfSxcbiAgICAgIGVycm9yOiBlcnIgPT4geyBoYW5kbGVycy5lcnJvcihlcnIpOyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gICAgfSk7XG4gIH1cblxuICBnZXQgaXNWRVQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuaXNWRVQ7XG4gIH1cblxuICBnZXQgc3ViKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmdldENsYWltKCdzdWInKTsgfVxuICBnZXQgZW1wR3VpZCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5nZXRDbGFpbSgnZW1wbG95ZWVHVUlEJyk7IH1cbiAgZ2V0IGludGVybmFsU3NvUm9sZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5nZXRDbGFpbSgnaW50ZXJuYWxfc3NvX3JvbGUnKTsgfVxuICBnZXQgcm9sZXMoKTogc3RyaW5nW10geyByZXR1cm4gdGhpcy5nZXRDbGFpbSgncm9sZXMnKTsgfVxuICBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmdldENsYWltKCdzZXNzaW9uSWQnKTsgfVxuICBnZXQgbG9nZ2VkSW5Vc2VyKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmdldENsYWltKCdsb2dnZWRJblVzZXInKTsgfVxuICBnZXQgZXhwKCk6IG51bWJlciB7IHJldHVybiB0aGlzLmdldENsYWltKCdleHAnKTsgfVxuICBnZXQgaWF0KCk6IG51bWJlciB7IHJldHVybiB0aGlzLmdldENsYWltKCdpYXQnKTsgfVxuICBnZXQgYnVzaW5lc3NVbml0SWQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZ2V0Q2xhaW0oJ2J1c2luZXNzVW5pdElkJyk7IH1cbiAgZ2V0IGFsbG93ZWRCdWlkcygpOiBzdHJpbmdbXSB7IHJldHVybiB0aGlzLmdldENsYWltKCdBTExPV0VEX0JVSURTJyk7IH1cbiAgZ2V0IHZldFVzZXJFbWFpbElkKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmdldENsYWltKCd2ZXRVc2VyRW1haWxJZCcpOyB9XG4gIGdldCB2ZXRVc2VySWQoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuZ2V0Q2xhaW0oJ3ZldFVzZXJJZCcpOyB9XG4gIGdldCBzb3VyY2UoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZ2V0Q2xhaW0oJ3NvdXJjZScpOyB9XG5cbiAgZ2V0IHJvbGVJZCgpOiBudW1iZXIge1xuICAgIGNvbnN0IGNsYWltcyA9IHRoaXMuZ2V0Q2xhaW1zKCk7XG4gICAgY29uc3QgcmF3ID0gY2xhaW1zLmludGVybmFsX3Nzb19yb2xlPy50cmltKCkgfHwgY2xhaW1zLnJvbGVzPy5bMF0/LnRyaW0oKTtcbiAgICBpZiAoIXJhdyB8fCAhL15cXGQrJC8udGVzdChyYXcpKSB7XG4gICAgICB0aHJvdyBuZXcgU2Vzc2lvbkNsYWltTm90Rm91bmRFcnJvcigncm9sZUlkJyk7XG4gICAgfVxuICAgIHJldHVybiBOdW1iZXIocmF3KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2xhaW1zKCk6IE5zU2Vzc2lvbi5JQ2xhaW1zIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGU7XG4gICAgaWYgKHN0YXRlLnN0YXR1cyA9PT0gJ29rJykge1xuICAgICAgcmV0dXJuIHN0YXRlLmNsYWltcztcbiAgICB9XG4gICAgaWYgKHN0YXRlLnN0YXR1cyA9PT0gJ25vdC1mb3VuZCcpIHtcbiAgICAgIHRocm93IG5ldyBTZXNzaW9uVG9rZW5Ob3RGb3VuZEVycm9yKCk7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5zdGF0dXMgPT09ICdleHBpcmVkJykge1xuICAgICAgdGhyb3cgbmV3IFNlc3Npb25Ub2tlbkV4cGlyZWRFcnJvcigpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgU2Vzc2lvblRva2VuSW52YWxpZEVycm9yKCk7XG4gIH1cblxuICBwcml2YXRlIGdldENsYWltPEsgZXh0ZW5kcyBrZXlvZiBOc1Nlc3Npb24uSUNsYWltcz4oa2V5OiBLKTogTm9uTnVsbGFibGU8TnNTZXNzaW9uLklDbGFpbXNbS10+IHtcbiAgICBjb25zdCBjbGFpbXMgPSB0aGlzLmdldENsYWltcygpO1xuICAgIGNvbnN0IHZhbHVlID0gY2xhaW1zW2tleV07XG4gICAgY29uc3QgaXNFbXB0eVN0cmluZyA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUudHJpbSgpID09PSAnJztcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCBpc0VtcHR5U3RyaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgU2Vzc2lvbkNsYWltTm90Rm91bmRFcnJvcihrZXkgYXMgc3RyaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUudHJpbSgpIDogdmFsdWUpIGFzIE5vbk51bGxhYmxlPE5zU2Vzc2lvbi5JQ2xhaW1zW0tdPjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHN0YXRlKCk6IFNlc3Npb25TdGF0ZSB7XG4gICAgY29uc3QgeyB0b2tlbiwgaXNWRVQgfSA9IHRoaXMuZmluZFRva2VuKCk7XG4gICAgaWYgKCF0aGlzLmNhY2hlZFN0YXRlIHx8IHRva2VuICE9PSB0aGlzLmNhY2hlZFRva2VuKSB7XG4gICAgICB0aGlzLmNhY2hlZFRva2VuID0gdG9rZW47XG4gICAgICB0aGlzLmNhY2hlZFN0YXRlID0gdGhpcy5idWlsZCh0b2tlbiwgaXNWRVQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jYWNoZWRTdGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGQodG9rZW46IHN0cmluZywgaXNWRVQ6IGJvb2xlYW4pOiBTZXNzaW9uU3RhdGUge1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHJldHVybiB7IHN0YXR1czogJ25vdC1mb3VuZCcsIGlzVkVUIH07XG4gICAgfVxuXG4gICAgbGV0IGNsYWltczogTnNTZXNzaW9uLklDbGFpbXM7XG4gICAgdHJ5IHtcbiAgICAgIGNsYWltcyA9IGp3dERlY29kZTxOc1Nlc3Npb24uSUNsYWltcz4odG9rZW4pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHsgc3RhdHVzOiAnaW52YWxpZCcsIGlzVkVUIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNFeHBpcmVkKGNsYWltcykpIHtcbiAgICAgIHJldHVybiB7IHN0YXR1czogJ2V4cGlyZWQnLCBpc1ZFVCB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHN0YXR1czogJ29rJywgY2xhaW1zLCBpc1ZFVCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBpc0V4cGlyZWQoY2xhaW1zOiBOc1Nlc3Npb24uSUNsYWltcyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgY2xhaW1zLmV4cCA9PT0gJ251bWJlcicgJiYgY2xhaW1zLmV4cCAqIDEwMDAgPD0gRGF0ZS5ub3coKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNWRVRTb3VyY2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGdldFF1ZXJ5UGFyYW0oJ3NvdXJjZScpID09PSBMQVVOQ0hfU09VUkNFX1ZFVDtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUJ1aWQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIGdldFF1ZXJ5UGFyYW0oJ2J1aWQnKSB8fCBnZXRDb29raWUoJ2J1aWQnKSB8fCBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kVG9rZW4oKTogeyB0b2tlbjogc3RyaW5nOyBpc1ZFVDogYm9vbGVhbiB9IHtcbiAgICBjb25zdCBidWlkID0gdGhpcy5yZXNvbHZlQnVpZCgpO1xuXG4gICAgaWYgKHRoaXMuaXNWRVRTb3VyY2UoKSkge1xuICAgICAgY29uc3QgdmV0S2V5ID0gdGhpcy5jb25maWcudmV0VG9rZW5Db29raWVLZXkgPz8gKGJ1aWQgPyBgJHtERUZBVUxUX1ZFVF9UT0tFTl9QUkVGSVh9LSR7YnVpZH1gIDogbnVsbCk7XG4gICAgICBjb25zdCB2ZXRUb2tlbiA9ICh2ZXRLZXkgPyBnZXRDb29raWUodmV0S2V5KSA6ICcnKSB8fCAnJztcbiAgICAgIGlmICh2ZXRUb2tlbikge1xuICAgICAgICByZXR1cm4geyB0b2tlbjogdmV0VG9rZW4sIGlzVkVUOiB0cnVlIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2Vzc2lvblRva2VuID0gdGhpcy5jb25maWcuc2Vzc2lvblRva2VuQ29va2llS2V5XG4gICAgICA/IGdldENvb2tpZSh0aGlzLmNvbmZpZy5zZXNzaW9uVG9rZW5Db29raWVLZXkpXG4gICAgICA6IChidWlkID8gZ2V0Q29va2llKGAke0RFRkFVTFRfU0VTU0lPTl9UT0tFTl9QUkVGSVh9LSR7YnVpZH1gKSA6ICcnKSB8fCBnZXRDb29raWUoREVGQVVMVF9TRVNTSU9OX1RPS0VOX0ZBTExCQUNLX0tFWSk7XG5cbiAgICByZXR1cm4geyB0b2tlbjogc2Vzc2lvblRva2VuIHx8ICcnLCBpc1ZFVDogZmFsc2UgfTtcbiAgfVxufVxuIl19
|
|
@@ -8,25 +8,30 @@ import { LoaderComponent } from "./components/loader/loader.component";
|
|
|
8
8
|
import { LoaderService } from "./services/loader.service";
|
|
9
9
|
import { OverlayModule } from "@angular/cdk/overlay";
|
|
10
10
|
import { SidenavComponent } from "./components/sidenav/sidenav.component";
|
|
11
|
+
import { CreateNonShiftModalComponent } from "./components/create-non-shift-modal/create-non-shift-modal.component";
|
|
12
|
+
import { DropdownModule } from "mis-crystal-design-system/dropdown";
|
|
13
|
+
import { ReactiveFormsModule } from "@angular/forms";
|
|
14
|
+
import { DatepickerModuleV2 } from "mis-crystal-design-system/datepicker_v2";
|
|
15
|
+
import { HttpClientModule } from "@angular/common/http";
|
|
11
16
|
import * as i0 from "@angular/core";
|
|
12
17
|
export class WisCommonModule {
|
|
13
18
|
static forRoot(env) {
|
|
14
19
|
return {
|
|
15
20
|
ngModule: WisCommonModule,
|
|
16
|
-
providers: [{ provide: CONSTANTS_WIS_COMMON, useValue: env }, ConfigurationService, LoaderService]
|
|
21
|
+
providers: [HttpService, { provide: CONSTANTS_WIS_COMMON, useValue: env }, ConfigurationService, LoaderService]
|
|
17
22
|
};
|
|
18
23
|
}
|
|
19
24
|
}
|
|
20
25
|
WisCommonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: WisCommonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
21
|
-
WisCommonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: WisCommonModule, declarations: [LoaderComponent, SidenavComponent], imports: [CommonModule, OverlayModule, LoaderModule], exports: [SidenavComponent] });
|
|
22
|
-
WisCommonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: WisCommonModule,
|
|
26
|
+
WisCommonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: WisCommonModule, declarations: [LoaderComponent, SidenavComponent, CreateNonShiftModalComponent], imports: [CommonModule, HttpClientModule, OverlayModule, LoaderModule, DropdownModule, ReactiveFormsModule, DatepickerModuleV2], exports: [SidenavComponent, CreateNonShiftModalComponent] });
|
|
27
|
+
WisCommonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: WisCommonModule, imports: [CommonModule, HttpClientModule, OverlayModule, LoaderModule, DropdownModule, ReactiveFormsModule, DatepickerModuleV2] });
|
|
23
28
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: WisCommonModule, decorators: [{
|
|
24
29
|
type: NgModule,
|
|
25
30
|
args: [{
|
|
26
|
-
declarations: [LoaderComponent, SidenavComponent],
|
|
27
|
-
imports: [CommonModule, OverlayModule, LoaderModule],
|
|
28
|
-
providers: [
|
|
29
|
-
exports: [SidenavComponent]
|
|
31
|
+
declarations: [LoaderComponent, SidenavComponent, CreateNonShiftModalComponent],
|
|
32
|
+
imports: [CommonModule, HttpClientModule, OverlayModule, LoaderModule, DropdownModule, ReactiveFormsModule, DatepickerModuleV2,],
|
|
33
|
+
providers: [],
|
|
34
|
+
exports: [SidenavComponent, CreateNonShiftModalComponent]
|
|
30
35
|
}]
|
|
31
36
|
}] });
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lzLWNvbW1vbi5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJyYXJpZXMvd2lzLWNvbW1vbi9zcmMvbGliL3dpcy1jb21tb24ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBQ3BILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFReEQsTUFBTSxPQUFPLGVBQWU7SUFDMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFxQjtRQUNsQyxPQUFPO1lBQ0wsUUFBUSxFQUFFLGVBQWU7WUFDekIsU0FBUyxFQUFFLENBQUMsV0FBVyxFQUFDLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxhQUFhLENBQUM7U0FDL0csQ0FBQztJQUNKLENBQUM7OzRHQU5VLGVBQWU7NkdBQWYsZUFBZSxpQkFMWCxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsNEJBQTRCLGFBQ3BFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsYUFFcEgsZ0JBQWdCLEVBQUUsNEJBQTRCOzZHQUU3QyxlQUFlLFlBSmhCLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0I7MkZBSW5ILGVBQWU7a0JBTjNCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsZUFBZSxFQUFFLGdCQUFnQixFQUFFLDRCQUE0QixDQUFDO29CQUMvRSxPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUU7b0JBQ2hJLFNBQVMsRUFBRSxFQUFFO29CQUNiLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixFQUFFLDRCQUE0QixDQUFDO2lCQUMxRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvY29uZmlndXJhdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBOc1dJU0NvbW1vbiB9IGZyb20gXCIuL21vZGVscy9lbnYubW9kZWxcIjtcbmltcG9ydCB7IENPTlNUQU5UU19XSVNfQ09NTU9OIH0gZnJvbSBcIi4vY29uc3RhbnRzL2VtcC13ZWItZXhwLmNvbnN0YW50c1wiO1xuaW1wb3J0IHsgSHR0cFNlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlcy9odHRwLnNlcnZpY2VcIjtcbmltcG9ydCB7IExvYWRlck1vZHVsZSB9IGZyb20gXCJtaXMtY3J5c3RhbC1kZXNpZ24tc3lzdGVtL2xvYWRlclwiO1xuaW1wb3J0IHsgTG9hZGVyQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9sb2FkZXIvbG9hZGVyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgTG9hZGVyU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2VzL2xvYWRlci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBPdmVybGF5TW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9vdmVybGF5XCI7XG5pbXBvcnQgeyBTaWRlbmF2Q29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9zaWRlbmF2L3NpZGVuYXYuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBDcmVhdGVOb25TaGlmdE1vZGFsQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9jcmVhdGUtbm9uLXNoaWZ0LW1vZGFsL2NyZWF0ZS1ub24tc2hpZnQtbW9kYWwuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBEcm9wZG93bk1vZHVsZSB9IGZyb20gXCJtaXMtY3J5c3RhbC1kZXNpZ24tc3lzdGVtL2Ryb3Bkb3duXCI7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBEYXRlcGlja2VyTW9kdWxlVjIgfSBmcm9tIFwibWlzLWNyeXN0YWwtZGVzaWduLXN5c3RlbS9kYXRlcGlja2VyX3YyXCI7XG5pbXBvcnQgeyBIdHRwQ2xpZW50TW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW0xvYWRlckNvbXBvbmVudCwgU2lkZW5hdkNvbXBvbmVudCwgQ3JlYXRlTm9uU2hpZnRNb2RhbENvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEh0dHBDbGllbnRNb2R1bGUsIE92ZXJsYXlNb2R1bGUsIExvYWRlck1vZHVsZSwgRHJvcGRvd25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIERhdGVwaWNrZXJNb2R1bGVWMixdLFxuICBwcm92aWRlcnM6IFtdLFxuICBleHBvcnRzOiBbU2lkZW5hdkNvbXBvbmVudCwgQ3JlYXRlTm9uU2hpZnRNb2RhbENvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgV2lzQ29tbW9uTW9kdWxlIHtcbiAgc3RhdGljIGZvclJvb3QoZW52OiBOc1dJU0NvbW1vbi5JRW52KTogTW9kdWxlV2l0aFByb3ZpZGVyczxXaXNDb21tb25Nb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IFdpc0NvbW1vbk1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW0h0dHBTZXJ2aWNlLHsgcHJvdmlkZTogQ09OU1RBTlRTX1dJU19DT01NT04sIHVzZVZhbHVlOiBlbnYgfSwgQ29uZmlndXJhdGlvblNlcnZpY2UsIExvYWRlclNlcnZpY2VdXG4gICAgfTtcbiAgfVxufVxuIl19
|
package/esm2020/public-api.mjs
CHANGED
|
@@ -16,4 +16,8 @@ export * from "./lib/wis-common.module";
|
|
|
16
16
|
export * from "./lib/modules/logger/logger.model";
|
|
17
17
|
export * from "./lib/components/sidenav/sidenav.component";
|
|
18
18
|
export * from "./lib/services/mfe-communication.service";
|
|
19
|
-
|
|
19
|
+
export * from "./lib/components/create-non-shift-modal/create-non-shift-modal.component";
|
|
20
|
+
export * from "./lib/services/session.service";
|
|
21
|
+
export * from "./lib/services/session.errors";
|
|
22
|
+
export * from "./lib/models/session.model";
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYnJhcmllcy93aXMtY29tbW9uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYywwRUFBMEUsQ0FBQztBQUN6RixjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyw0QkFBNEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2Ygd2lzLWNvbW1vblxuICovXG5cbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9tb2R1bGVzL2F1dGgvYXV0aC5zZXJ2aWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvbW9kdWxlcy9hdXRoL2F1dGgubW9kdWxlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvc2VydmljZXMvY29uZmlndXJhdGlvbi5zZXJ2aWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvbW9kZWxzL2NvbmZpZ3VyYXRpb25zLm1vZGVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvZnVuY3Rpb25zL25hdi1maWx0ZXIuZnVuY3Rpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9mdW5jdGlvbnMvY29va2llLmZ1bmN0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvZnVuY3Rpb25zL3VybC5mdW5jdGlvbnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9pbnRlcmNlcHRvcnMvYXV0aC5pbnRlcmNlcHRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL3NlcnZpY2VzL2xvYWRlci5zZXJ2aWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvbW9kdWxlcy9sb2dnZXIvbG9nZ2VyLm1vZHVsZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL21vZHVsZXMvbG9nZ2VyL2xvZ2dlci5zZXJ2aWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvd2lzLWNvbW1vbi5tb2R1bGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9tb2R1bGVzL2xvZ2dlci9sb2dnZXIubW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9jb21wb25lbnRzL3NpZGVuYXYvc2lkZW5hdi5jb21wb25lbnRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9zZXJ2aWNlcy9tZmUtY29tbXVuaWNhdGlvbi5zZXJ2aWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvY29tcG9uZW50cy9jcmVhdGUtbm9uLXNoaWZ0LW1vZGFsL2NyZWF0ZS1ub24tc2hpZnQtbW9kYWwuY29tcG9uZW50XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvc2VydmljZXMvc2Vzc2lvbi5zZXJ2aWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvc2VydmljZXMvc2Vzc2lvbi5lcnJvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9tb2RlbHMvc2Vzc2lvbi5tb2RlbFwiO1xuIl19
|