@mis-wis/common 0.1.9 → 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/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/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 +459 -25
- package/fesm2015/mis-wis-common.mjs.map +1 -1
- package/fesm2020/mis-wis-common.mjs +451 -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/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/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,233 @@
|
|
|
1
|
+
import { Component, Inject } from "@angular/core";
|
|
2
|
+
import { Validators } from "@angular/forms";
|
|
3
|
+
import { parseZone } from "moment";
|
|
4
|
+
import { CONSTANTS_ASSETS_WIS_COMMON } from "../../constants/assets.constants";
|
|
5
|
+
import { forkJoin } from "rxjs";
|
|
6
|
+
import { finalize } from "rxjs/operators";
|
|
7
|
+
import { MODAL_DATA_VAR } from "mis-design-system/mis-modal";
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "mis-design-system/mis-modal";
|
|
10
|
+
import * as i2 from "@angular/forms";
|
|
11
|
+
import * as i3 from "../../services/http.service";
|
|
12
|
+
import * as i4 from "mis-crystal-design-system/toast";
|
|
13
|
+
import * as i5 from "@angular/common";
|
|
14
|
+
import * as i6 from "mis-crystal-design-system/dropdown";
|
|
15
|
+
import * as i7 from "mis-crystal-design-system/datepicker_v2";
|
|
16
|
+
const PROPERTIES = ["NON_SHIFT_TRIPS_CATEGORIES", "USE_VALID_OFFICE_FOR_IRREGULAR_TRIPS"];
|
|
17
|
+
export class CreateNonShiftModalComponent {
|
|
18
|
+
constructor(modalData, modalRef, fb, http, toast) {
|
|
19
|
+
this.modalData = modalData;
|
|
20
|
+
this.modalRef = modalRef;
|
|
21
|
+
this.fb = fb;
|
|
22
|
+
this.http = http;
|
|
23
|
+
this.toast = toast;
|
|
24
|
+
this.CONSTANTS_ASSETS_WIS_COMMON = CONSTANTS_ASSETS_WIS_COMMON;
|
|
25
|
+
this.dateConfig = {
|
|
26
|
+
minDate: parseZone().format("DD/MM/YYYY"),
|
|
27
|
+
format: "DD/MM/YYYY"
|
|
28
|
+
};
|
|
29
|
+
this.offices = [];
|
|
30
|
+
this.locationDropdownData = [];
|
|
31
|
+
this.categoryDropdownData = [];
|
|
32
|
+
this.hoursDropdownData = [];
|
|
33
|
+
this.minutesDropdownData = [];
|
|
34
|
+
this.showOtherAddress = false;
|
|
35
|
+
this.loading = false;
|
|
36
|
+
this.isSubmitting = false;
|
|
37
|
+
this.TYPE_OFFICE = 6;
|
|
38
|
+
this.TYPE_TRANSPORT = 3;
|
|
39
|
+
this.TYPE_OTHER = 4;
|
|
40
|
+
this.properties = {};
|
|
41
|
+
}
|
|
42
|
+
ngOnInit() {
|
|
43
|
+
this.loading = true;
|
|
44
|
+
const $office = this.http.getOffices(this.modalData.nonce);
|
|
45
|
+
const $properties = this.http.getProperties(PROPERTIES);
|
|
46
|
+
forkJoin([$office, $properties])
|
|
47
|
+
.pipe(finalize(() => (this.loading = false)))
|
|
48
|
+
.subscribe({
|
|
49
|
+
next: ([offices, properties]) => {
|
|
50
|
+
this.properties = properties;
|
|
51
|
+
this.initializeForm();
|
|
52
|
+
this.initializeDropdownData(offices);
|
|
53
|
+
this.setupFormListeners();
|
|
54
|
+
},
|
|
55
|
+
error: error => {
|
|
56
|
+
console.error("Error loading form data:", error);
|
|
57
|
+
this.modalRef.close();
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
initializeForm() {
|
|
62
|
+
const currentTime = this.modalData?.date ?? parseZone().format("DD/MM/YYYY");
|
|
63
|
+
this.createTripsheetForm = this.fb.group({
|
|
64
|
+
direction: [this.modalData?.shiftType === "logout" ? "OUT" : "IN", Validators.required],
|
|
65
|
+
location: [{ label: "", value: "" }],
|
|
66
|
+
otherAddress: "",
|
|
67
|
+
tripCategory: [{ label: "", value: "" }],
|
|
68
|
+
date: [currentTime, Validators.required],
|
|
69
|
+
hours: [{ label: "", value: "" }],
|
|
70
|
+
mins: [{ label: "", value: "" }]
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
initializeDropdownData(offices) {
|
|
74
|
+
this.locationDropdownData = offices.map((office) => ({
|
|
75
|
+
label: office.address,
|
|
76
|
+
value: { type: this.TYPE_OFFICE, office: office || null }
|
|
77
|
+
}));
|
|
78
|
+
this.createTripsheetForm.get("location")?.setValue(this.locationDropdownData[0]);
|
|
79
|
+
if (!this.properties?.["USE_VALID_OFFICE_FOR_IRREGULAR_TRIPS"]) {
|
|
80
|
+
this.locationDropdownData.push({ label: "Airport", value: { type: this.TYPE_TRANSPORT, office: null } }, { label: "Other", value: { type: this.TYPE_OTHER, office: null } });
|
|
81
|
+
}
|
|
82
|
+
// Initialize category dropdown
|
|
83
|
+
const categoriesString = this.properties?.["NON_SHIFT_TRIPS_CATEGORIES"];
|
|
84
|
+
if (categoriesString && typeof categoriesString === "string") {
|
|
85
|
+
const categories = categoriesString.split(",").filter(cat => cat && cat.trim());
|
|
86
|
+
if (categories.length > 0) {
|
|
87
|
+
this.categoryDropdownData = categories.map(category => ({
|
|
88
|
+
label: category.trim(),
|
|
89
|
+
value: category.trim()
|
|
90
|
+
}));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const currentHour = new Date().getHours();
|
|
94
|
+
this.hoursDropdownData = Array.from({ length: 24 }, (_, i) => ({
|
|
95
|
+
label: this.padZero(i),
|
|
96
|
+
value: this.padZero(i)
|
|
97
|
+
}));
|
|
98
|
+
this.createTripsheetForm.patchValue({ hours: this.hoursDropdownData[currentHour] });
|
|
99
|
+
const currentMinute = new Date().getMinutes();
|
|
100
|
+
this.minutesDropdownData = Array.from({ length: 60 }, (_, i) => ({
|
|
101
|
+
label: this.padZero(i),
|
|
102
|
+
value: this.padZero(i)
|
|
103
|
+
}));
|
|
104
|
+
this.createTripsheetForm.patchValue({ mins: this.minutesDropdownData[currentMinute] });
|
|
105
|
+
}
|
|
106
|
+
setupFormListeners() {
|
|
107
|
+
this.createTripsheetForm?.valueChanges.subscribe(value => {
|
|
108
|
+
const { location } = this.createTripsheetForm?.value;
|
|
109
|
+
if (this.showOtherAddress !== (location?.value?.type === this.TYPE_OTHER)) {
|
|
110
|
+
this.showOtherAddress = location?.value?.type === this.TYPE_OTHER;
|
|
111
|
+
if (this.showOtherAddress) {
|
|
112
|
+
this.createTripsheetForm.get("otherAddress")?.setValidators([Validators.required]);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
this.createTripsheetForm.get("otherAddress")?.clearValidators();
|
|
116
|
+
}
|
|
117
|
+
this.createTripsheetForm.get("otherAddress")?.updateValueAndValidity();
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
padZero(num) {
|
|
122
|
+
return num.toString().padStart(2, "0");
|
|
123
|
+
}
|
|
124
|
+
onCancel() {
|
|
125
|
+
this.modalRef.close();
|
|
126
|
+
}
|
|
127
|
+
onSubmit() {
|
|
128
|
+
if (this.createTripsheetForm.invalid) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const formValue = this.createTripsheetForm.value;
|
|
132
|
+
const pickupTime = `${formValue.date} ${formValue.hours.value}/${formValue.mins.value}/00`;
|
|
133
|
+
const pickupTimeDate = parseZone(pickupTime).toDate();
|
|
134
|
+
if (this.isDateAndTimeFromPast(pickupTimeDate)) {
|
|
135
|
+
this.toast.displayMsg("Please select a future date and time.");
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
if (this.categoryDropdownData.length > 0 && (!formValue.tripCategory || !formValue.tripCategory.value)) {
|
|
139
|
+
this.toast.displayMsg("Please provide a trip category.");
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
if (formValue.location?.value?.type === this.TYPE_OTHER) {
|
|
143
|
+
if (!formValue.otherAddress || formValue.otherAddress.trim() === "") {
|
|
144
|
+
this.toast.displayMsg("Please provide the address.");
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
if (formValue.otherAddress.includes(",")) {
|
|
148
|
+
this.toast.displayMsg("Special character (,) not allowed in address.");
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
this.isSubmitting = true;
|
|
153
|
+
this.http.createEmptyIrregularTripSheet(this.modalData.nonce, formValue.direction).subscribe({
|
|
154
|
+
next: routeTripSheet => {
|
|
155
|
+
const pickupLoc = routeTripSheet.dir === "IN" ? this.modalData.employee.home : this.getLocation(formValue);
|
|
156
|
+
const dropLoc = routeTripSheet.dir === "OUT" ? this.modalData.employee.home : this.getLocation(formValue);
|
|
157
|
+
const pickupTimeFormatted = pickupTime;
|
|
158
|
+
const dropTimeFormatted = pickupTime;
|
|
159
|
+
const employee = { ...this.modalData.employee, employee_status: 1 };
|
|
160
|
+
const addEmployeeParams = {
|
|
161
|
+
tripsheet: routeTripSheet,
|
|
162
|
+
employee: employee,
|
|
163
|
+
pickupLoc: pickupLoc,
|
|
164
|
+
dropLoc: dropLoc,
|
|
165
|
+
pickUpTime: pickupTimeFormatted,
|
|
166
|
+
dropTime: dropTimeFormatted,
|
|
167
|
+
position: 0,
|
|
168
|
+
routeSource: this.modalData.routeSource,
|
|
169
|
+
assetList: this.modalData.assetList
|
|
170
|
+
};
|
|
171
|
+
this.http.addEmployeeToTripSheet(this.modalData.nonce, addEmployeeParams).subscribe({
|
|
172
|
+
next: updatedTripSheet => {
|
|
173
|
+
if (!updatedTripSheet.customMap) {
|
|
174
|
+
updatedTripSheet.customMap = {};
|
|
175
|
+
}
|
|
176
|
+
updatedTripSheet.customMap.tripCategory = formValue.tripCategory?.value || "";
|
|
177
|
+
this.modalRef.close({
|
|
178
|
+
success: true,
|
|
179
|
+
tripsheet: updatedTripSheet
|
|
180
|
+
});
|
|
181
|
+
},
|
|
182
|
+
error: error => {
|
|
183
|
+
console.error("Error adding employee to tripsheet:", error);
|
|
184
|
+
this.toast.displayMsg("Failed to add employee to tripsheet. Please try again.");
|
|
185
|
+
this.isSubmitting = false;
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
},
|
|
189
|
+
error: error => {
|
|
190
|
+
console.error("Error creating tripsheet:", error);
|
|
191
|
+
this.toast.displayMsg("Failed to create tripsheet. Please try again.");
|
|
192
|
+
this.isSubmitting = false;
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
isDateAndTimeFromPast(date) {
|
|
197
|
+
const now = new Date();
|
|
198
|
+
return date < now;
|
|
199
|
+
}
|
|
200
|
+
getLocation(formValue) {
|
|
201
|
+
const location = formValue.location?.value;
|
|
202
|
+
if (!location) {
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
205
|
+
const locType = location.type;
|
|
206
|
+
switch (locType) {
|
|
207
|
+
case this.TYPE_OFFICE:
|
|
208
|
+
return location.office;
|
|
209
|
+
case this.TYPE_TRANSPORT:
|
|
210
|
+
return {
|
|
211
|
+
id: null,
|
|
212
|
+
type: this.TYPE_TRANSPORT,
|
|
213
|
+
address: "Airport",
|
|
214
|
+
geoCord: null
|
|
215
|
+
};
|
|
216
|
+
case this.TYPE_OTHER:
|
|
217
|
+
return {
|
|
218
|
+
...location.office,
|
|
219
|
+
address: formValue.otherAddress || ""
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
CreateNonShiftModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CreateNonShiftModalComponent, deps: [{ token: MODAL_DATA_VAR }, { token: i1.ModalRef }, { token: i2.FormBuilder }, { token: i3.HttpService }, { token: i4.ToastService }], target: i0.ɵɵFactoryTarget.Component });
|
|
225
|
+
CreateNonShiftModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CreateNonShiftModalComponent, selector: "app-create-non-shift-modal", ngImport: i0, template: "<div class=\"createTripsheet\">\n <h2 class=\"modal-header\">Create Non-Shift Tripsheet</h2>\n\n <div *ngIf=\"loading\" class=\"loading-container\">\n <div class=\"spinner\"></div>\n <p>Loading...</p>\n </div>\n\n <form\n *ngIf=\"!loading && createTripsheetForm\"\n [formGroup]=\"createTripsheetForm\"\n (ngSubmit)=\"onSubmit()\"\n class=\"createTripsheetForm\"\n id=\"createTripsheetForm\"\n >\n <div class=\"form-content\">\n <!-- Radio buttons row -->\n <div [ngClass]=\"{ 'radio-row': true, disabled: modalData?.shiftSelectionDisabled }\">\n <label class=\"radio-label\">\n <input class=\"modern-checkbox\" type=\"radio\" formControlName=\"direction\" value=\"OUT\" id=\"startLoc\" />\n <span>Start Location Fixed (Logout)</span>\n </label>\n <label class=\"radio-label\">\n <input class=\"modern-checkbox\" type=\"radio\" formControlName=\"direction\" value=\"IN\" id=\"endLoc\" />\n <span>End Location Fixed (Login)</span>\n </label>\n </div>\n\n <!-- Location field -->\n <div class=\"form-field\">\n <div class=\"label-cell\">\n <label class=\"locText\">Location</label>\n </div>\n <div class=\"input-cell\">\n <mis-dropdown\n [searchEnabled]=\"true\"\n [width]=\"'100%'\"\n [height]=\"'40px'\"\n [data]=\"locationDropdownData\"\n [selectedItem]=\"createTripsheetForm.get('location')?.value\"\n [label]=\"'Select location...'\"\n (onChange)=\"createTripsheetForm.get('location')?.setValue($event)\"\n ></mis-dropdown>\n </div>\n </div>\n\n <!-- Other address field -->\n <div class=\"form-field otherAddress\" *ngIf=\"showOtherAddress\">\n <div class=\"label-cell\">\n <label>Pick/Drop point <sup>*</sup></label>\n </div>\n <div class=\"input-cell\">\n <input type=\"text\" formControlName=\"otherAddress\" class=\"modern-input\" />\n </div>\n </div>\n\n <!-- Trip category field -->\n <div class=\"form-field\" *ngIf=\"categoryDropdownData.length > 0\">\n <div class=\"label-cell\">\n <label>Trip Category</label>\n </div>\n <div class=\"input-cell\">\n <mis-dropdown\n [searchEnabled]=\"false\"\n [width]=\"'250px'\"\n [height]=\"'40px'\"\n [data]=\"categoryDropdownData\"\n [selectedItem]=\"createTripsheetForm.get('tripCategory')?.value\"\n [label]=\"'Select category...'\"\n (onChange)=\"createTripsheetForm.get('tripCategory')?.setValue($event)\"\n ></mis-dropdown>\n </div>\n </div>\n\n <!-- Time field -->\n <div class=\"form-field\">\n <div class=\"label-cell\">\n <label class=\"fixedTimeText\">Time</label>\n </div>\n <div class=\"input-cell modern-date-container\">\n <div class=\"date-select\">\n <input\n misTzDp\n readonly\n [dpConfig]=\"dateConfig\"\n [formControl]=\"createTripsheetForm.get('date')\"\n style=\"height: 44px !important; font-size: 16px !important; cursor: pointer; vertical-align: middle !important\"\n />\n <img [src]=\"CONSTANTS_ASSETS_WIS_COMMON.IMAGES.CALENDAR_ICON\" alt=\"Calendar Icon\" class=\"date-icon data-picker-icon\" />\n </div>\n\n <mis-dropdown\n [searchEnabled]=\"false\"\n [width]=\"'5rem'\"\n [height]=\"'40px'\"\n [data]=\"hoursDropdownData\"\n [selectedItem]=\"createTripsheetForm.get('hours')?.value\"\n [label]=\"'HH'\"\n (onChange)=\"createTripsheetForm.get('hours')?.setValue($event)\"\n ></mis-dropdown>\n\n <mis-dropdown\n [searchEnabled]=\"false\"\n [width]=\"'5rem'\"\n [height]=\"'40px'\"\n [data]=\"minutesDropdownData\"\n [selectedItem]=\"createTripsheetForm.get('mins')?.value\"\n [label]=\"'MM'\"\n (onChange)=\"createTripsheetForm.get('mins')?.setValue($event)\"\n ></mis-dropdown>\n </div>\n </div>\n </div>\n\n <div class=\"form-actions\">\n <button mis-button type=\"outline\" (click)=\"onCancel()\" [disabled]=\"isSubmitting\">Cancel</button>\n <button mis-button type=\"primary\" [disabled]=\"isSubmitting || createTripsheetForm?.invalid\">\n {{ isSubmitting ? \"Creating...\" : \"Create\" }}\n </button>\n </div>\n </form>\n</div>\n", styles: [".createTripsheet{width:40rem;margin:auto;background:#fff;border-radius:.5rem;padding:1.25rem}.createTripsheet .modal-header{font-size:1.25rem;font-weight:600;color:#333;margin:0 0 1.25rem;padding-bottom:.9375rem;border-bottom:.0625rem solid #e0e0e0}.createTripsheet .loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:3.75rem 1.25rem;min-height:12.5rem}.createTripsheet .loading-container .spinner{border:.1875rem solid #f3f3f3;border-top:.1875rem solid #007bff;border-radius:50%;width:2.5rem;height:2.5rem;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.createTripsheet .createTripsheetForm .form-content{display:flex;flex-direction:column}.createTripsheet .createTripsheetForm .form-field{display:flex;align-items:flex-start;gap:1.25rem;padding:.9375rem 0}.createTripsheet .createTripsheetForm .form-field .label-cell{flex:0 0 30%;padding-top:.5rem}.createTripsheet .createTripsheetForm .form-field .label-cell label{font-size:.875rem;font-weight:500;color:#333}.createTripsheet .createTripsheetForm .form-field .input-cell{flex:1;display:flex}.createTripsheet .createTripsheetForm .radio-row{display:flex;gap:1.25rem;padding:.9375rem 0}.createTripsheet .createTripsheetForm .radio-label{font-size:.875rem;display:flex;align-items:center;cursor:pointer;margin:0}.createTripsheet .createTripsheetForm .radio-label .modern-checkbox{margin-right:.625rem;vertical-align:sub;cursor:pointer;width:1rem;height:1rem;accent-color:#007bff}.createTripsheet .createTripsheetForm .radio-label span{-webkit-user-select:none;user-select:none;white-space:nowrap}.createTripsheet .createTripsheetForm .modern-input{width:100%;padding:.5rem .75rem;border:.0625rem solid #ddd;border-radius:.25rem;font-size:.875rem;transition:border-color .3s}.createTripsheet .createTripsheetForm .modern-input:focus{outline:none;border-color:#007bff;box-shadow:0 0 0 .2rem #007bff40}.createTripsheet .createTripsheetForm .modern-input:disabled{background-color:#f5f5f5;cursor:not-allowed}.createTripsheet .createTripsheetForm sup{color:#dc3545}.createTripsheet .createTripsheetForm ::ng-deep mis-dropdown{display:block;width:100%}.createTripsheet .createTripsheetForm .modern-date-container{position:inherit;float:inherit;display:flex;align-items:center;gap:.625rem}.createTripsheet .createTripsheetForm .ng-invalid{border:.0625rem solid #dc3545}.createTripsheet .createTripsheetForm .form-actions{text-align:right;margin:.625rem;border-top:.0625rem solid #e0e0e0;padding:.625rem;display:flex;justify-content:flex-end;gap:.625rem;margin-bottom:0}.createTripsheet .createTripsheetForm .form-actions button{padding:.625rem 1.5rem;font-size:.875rem;font-weight:500;border-radius:.375rem;border:none;cursor:pointer;transition:all .3s ease;min-width:6.25rem}.createTripsheet .createTripsheetForm .form-actions button[type=primary]{background-color:#0937b2;color:#fff;border:.0625rem solid #0937b2}.createTripsheet .createTripsheetForm .form-actions button[type=outline]{background-color:transparent;color:#6c757d;border:.0625rem solid #ddd}.createTripsheet .createTripsheetForm .form-actions button:disabled{opacity:.6;cursor:not-allowed;box-shadow:none}.date-select{height:2.5rem;border:.0625rem solid #e0e0e0;padding:0;border-radius:.375rem;display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;position:relative;overflow:hidden;left:-.5%;flex-shrink:0}.date-select input{background-color:transparent;display:inline-block;padding:.25rem 0 .25rem .75rem;width:100%;border:none;outline:none;cursor:pointer;font-size:.875rem}.date-select img{position:relative;right:1rem}.radio-row.disabled{pointer-events:none;opacity:.5}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.DropdownComponent, selector: "mis-dropdown", inputs: ["data", "height", "ariaLabel", "width", "label", "itemSizeForCdk", "showOnlyIcon", "higlightSelectedValue", "dropdownListHeight", "dropdownListWidth", "dropdownListPosition", "config", "searchEnabled", "selectedItem", "noDataMessage", "multiLine", "additionalInfoMessage", "scrollIntoView", "searchLabel", "customStyles", "activeItem"], outputs: ["onChange"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i7.TzDatepickerDirective, selector: "input[misTzDp]", inputs: ["dpConfig", "selectedDate", "datesDisabled", "dateMessages", "positionX", "positionY", "offsetX", "offsetY", "allowBookingOnDisabledDay", "disableBoxShadow", "disableOverLay", "openElement"], outputs: ["dateChange"] }] });
|
|
226
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CreateNonShiftModalComponent, decorators: [{
|
|
227
|
+
type: Component,
|
|
228
|
+
args: [{ selector: "app-create-non-shift-modal", template: "<div class=\"createTripsheet\">\n <h2 class=\"modal-header\">Create Non-Shift Tripsheet</h2>\n\n <div *ngIf=\"loading\" class=\"loading-container\">\n <div class=\"spinner\"></div>\n <p>Loading...</p>\n </div>\n\n <form\n *ngIf=\"!loading && createTripsheetForm\"\n [formGroup]=\"createTripsheetForm\"\n (ngSubmit)=\"onSubmit()\"\n class=\"createTripsheetForm\"\n id=\"createTripsheetForm\"\n >\n <div class=\"form-content\">\n <!-- Radio buttons row -->\n <div [ngClass]=\"{ 'radio-row': true, disabled: modalData?.shiftSelectionDisabled }\">\n <label class=\"radio-label\">\n <input class=\"modern-checkbox\" type=\"radio\" formControlName=\"direction\" value=\"OUT\" id=\"startLoc\" />\n <span>Start Location Fixed (Logout)</span>\n </label>\n <label class=\"radio-label\">\n <input class=\"modern-checkbox\" type=\"radio\" formControlName=\"direction\" value=\"IN\" id=\"endLoc\" />\n <span>End Location Fixed (Login)</span>\n </label>\n </div>\n\n <!-- Location field -->\n <div class=\"form-field\">\n <div class=\"label-cell\">\n <label class=\"locText\">Location</label>\n </div>\n <div class=\"input-cell\">\n <mis-dropdown\n [searchEnabled]=\"true\"\n [width]=\"'100%'\"\n [height]=\"'40px'\"\n [data]=\"locationDropdownData\"\n [selectedItem]=\"createTripsheetForm.get('location')?.value\"\n [label]=\"'Select location...'\"\n (onChange)=\"createTripsheetForm.get('location')?.setValue($event)\"\n ></mis-dropdown>\n </div>\n </div>\n\n <!-- Other address field -->\n <div class=\"form-field otherAddress\" *ngIf=\"showOtherAddress\">\n <div class=\"label-cell\">\n <label>Pick/Drop point <sup>*</sup></label>\n </div>\n <div class=\"input-cell\">\n <input type=\"text\" formControlName=\"otherAddress\" class=\"modern-input\" />\n </div>\n </div>\n\n <!-- Trip category field -->\n <div class=\"form-field\" *ngIf=\"categoryDropdownData.length > 0\">\n <div class=\"label-cell\">\n <label>Trip Category</label>\n </div>\n <div class=\"input-cell\">\n <mis-dropdown\n [searchEnabled]=\"false\"\n [width]=\"'250px'\"\n [height]=\"'40px'\"\n [data]=\"categoryDropdownData\"\n [selectedItem]=\"createTripsheetForm.get('tripCategory')?.value\"\n [label]=\"'Select category...'\"\n (onChange)=\"createTripsheetForm.get('tripCategory')?.setValue($event)\"\n ></mis-dropdown>\n </div>\n </div>\n\n <!-- Time field -->\n <div class=\"form-field\">\n <div class=\"label-cell\">\n <label class=\"fixedTimeText\">Time</label>\n </div>\n <div class=\"input-cell modern-date-container\">\n <div class=\"date-select\">\n <input\n misTzDp\n readonly\n [dpConfig]=\"dateConfig\"\n [formControl]=\"createTripsheetForm.get('date')\"\n style=\"height: 44px !important; font-size: 16px !important; cursor: pointer; vertical-align: middle !important\"\n />\n <img [src]=\"CONSTANTS_ASSETS_WIS_COMMON.IMAGES.CALENDAR_ICON\" alt=\"Calendar Icon\" class=\"date-icon data-picker-icon\" />\n </div>\n\n <mis-dropdown\n [searchEnabled]=\"false\"\n [width]=\"'5rem'\"\n [height]=\"'40px'\"\n [data]=\"hoursDropdownData\"\n [selectedItem]=\"createTripsheetForm.get('hours')?.value\"\n [label]=\"'HH'\"\n (onChange)=\"createTripsheetForm.get('hours')?.setValue($event)\"\n ></mis-dropdown>\n\n <mis-dropdown\n [searchEnabled]=\"false\"\n [width]=\"'5rem'\"\n [height]=\"'40px'\"\n [data]=\"minutesDropdownData\"\n [selectedItem]=\"createTripsheetForm.get('mins')?.value\"\n [label]=\"'MM'\"\n (onChange)=\"createTripsheetForm.get('mins')?.setValue($event)\"\n ></mis-dropdown>\n </div>\n </div>\n </div>\n\n <div class=\"form-actions\">\n <button mis-button type=\"outline\" (click)=\"onCancel()\" [disabled]=\"isSubmitting\">Cancel</button>\n <button mis-button type=\"primary\" [disabled]=\"isSubmitting || createTripsheetForm?.invalid\">\n {{ isSubmitting ? \"Creating...\" : \"Create\" }}\n </button>\n </div>\n </form>\n</div>\n", styles: [".createTripsheet{width:40rem;margin:auto;background:#fff;border-radius:.5rem;padding:1.25rem}.createTripsheet .modal-header{font-size:1.25rem;font-weight:600;color:#333;margin:0 0 1.25rem;padding-bottom:.9375rem;border-bottom:.0625rem solid #e0e0e0}.createTripsheet .loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:3.75rem 1.25rem;min-height:12.5rem}.createTripsheet .loading-container .spinner{border:.1875rem solid #f3f3f3;border-top:.1875rem solid #007bff;border-radius:50%;width:2.5rem;height:2.5rem;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.createTripsheet .createTripsheetForm .form-content{display:flex;flex-direction:column}.createTripsheet .createTripsheetForm .form-field{display:flex;align-items:flex-start;gap:1.25rem;padding:.9375rem 0}.createTripsheet .createTripsheetForm .form-field .label-cell{flex:0 0 30%;padding-top:.5rem}.createTripsheet .createTripsheetForm .form-field .label-cell label{font-size:.875rem;font-weight:500;color:#333}.createTripsheet .createTripsheetForm .form-field .input-cell{flex:1;display:flex}.createTripsheet .createTripsheetForm .radio-row{display:flex;gap:1.25rem;padding:.9375rem 0}.createTripsheet .createTripsheetForm .radio-label{font-size:.875rem;display:flex;align-items:center;cursor:pointer;margin:0}.createTripsheet .createTripsheetForm .radio-label .modern-checkbox{margin-right:.625rem;vertical-align:sub;cursor:pointer;width:1rem;height:1rem;accent-color:#007bff}.createTripsheet .createTripsheetForm .radio-label span{-webkit-user-select:none;user-select:none;white-space:nowrap}.createTripsheet .createTripsheetForm .modern-input{width:100%;padding:.5rem .75rem;border:.0625rem solid #ddd;border-radius:.25rem;font-size:.875rem;transition:border-color .3s}.createTripsheet .createTripsheetForm .modern-input:focus{outline:none;border-color:#007bff;box-shadow:0 0 0 .2rem #007bff40}.createTripsheet .createTripsheetForm .modern-input:disabled{background-color:#f5f5f5;cursor:not-allowed}.createTripsheet .createTripsheetForm sup{color:#dc3545}.createTripsheet .createTripsheetForm ::ng-deep mis-dropdown{display:block;width:100%}.createTripsheet .createTripsheetForm .modern-date-container{position:inherit;float:inherit;display:flex;align-items:center;gap:.625rem}.createTripsheet .createTripsheetForm .ng-invalid{border:.0625rem solid #dc3545}.createTripsheet .createTripsheetForm .form-actions{text-align:right;margin:.625rem;border-top:.0625rem solid #e0e0e0;padding:.625rem;display:flex;justify-content:flex-end;gap:.625rem;margin-bottom:0}.createTripsheet .createTripsheetForm .form-actions button{padding:.625rem 1.5rem;font-size:.875rem;font-weight:500;border-radius:.375rem;border:none;cursor:pointer;transition:all .3s ease;min-width:6.25rem}.createTripsheet .createTripsheetForm .form-actions button[type=primary]{background-color:#0937b2;color:#fff;border:.0625rem solid #0937b2}.createTripsheet .createTripsheetForm .form-actions button[type=outline]{background-color:transparent;color:#6c757d;border:.0625rem solid #ddd}.createTripsheet .createTripsheetForm .form-actions button:disabled{opacity:.6;cursor:not-allowed;box-shadow:none}.date-select{height:2.5rem;border:.0625rem solid #e0e0e0;padding:0;border-radius:.375rem;display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;position:relative;overflow:hidden;left:-.5%;flex-shrink:0}.date-select input{background-color:transparent;display:inline-block;padding:.25rem 0 .25rem .75rem;width:100%;border:none;outline:none;cursor:pointer;font-size:.875rem}.date-select img{position:relative;right:1rem}.radio-row.disabled{pointer-events:none;opacity:.5}\n"] }]
|
|
229
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
230
|
+
type: Inject,
|
|
231
|
+
args: [MODAL_DATA_VAR]
|
|
232
|
+
}] }, { type: i1.ModalRef }, { type: i2.FormBuilder }, { type: i3.HttpService }, { type: i4.ToastService }]; } });
|
|
233
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW5vbi1zaGlmdC1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvd2lzLWNvbW1vbi9zcmMvbGliL2NvbXBvbmVudHMvY3JlYXRlLW5vbi1zaGlmdC1tb2RhbC9jcmVhdGUtbm9uLXNoaWZ0LW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy93aXMtY29tbW9uL3NyYy9saWIvY29tcG9uZW50cy9jcmVhdGUtbm9uLXNoaWZ0LW1vZGFsL2NyZWF0ZS1ub24tc2hpZnQtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ25DLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRy9FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxjQUFjLEVBQVksTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7Ozs7O0FBR3ZFLE1BQU0sVUFBVSxHQUFHLENBQUMsNEJBQTRCLEVBQUUsc0NBQXNDLENBQUMsQ0FBQztBQWlCMUYsTUFBTSxPQUFPLDRCQUE0QjtJQTRCdkMsWUFBMkMsU0FBYyxFQUFVLFFBQWtCLEVBQVUsRUFBZSxFQUFVLElBQWlCLEVBQVMsS0FBbUI7UUFBMUgsY0FBUyxHQUFULFNBQVMsQ0FBSztRQUFVLGFBQVEsR0FBUixRQUFRLENBQVU7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQVUsU0FBSSxHQUFKLElBQUks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QUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUM1QixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHFCQUFxQixDQUFDLElBQVU7UUFDdEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixPQUFPLElBQUksR0FBRyxHQUFHLENBQUM7SUFDcEIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxTQUFjO1FBQ2hDLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO1FBRTNDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztRQUU5QixRQUFRLE9BQU8sRUFBRTtZQUNmLEtBQUssSUFBSSxDQUFDLFdBQVc7Z0JBQ25CLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUV6QixLQUFLLElBQUksQ0FBQyxjQUFjO2dCQUN0QixPQUFPO29CQUNMLEVBQUUsRUFBRSxJQUFJO29CQUNSLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYztvQkFDekIsT0FBTyxFQUFFLFNBQVM7b0JBQ2xCLE9BQU8sRUFBRSxJQUFJO2lCQUNkLENBQUM7WUFFSixLQUFLLElBQUksQ0FBQyxVQUFVO2dCQUNsQixPQUFPO29CQUNMLEdBQUcsUUFBUSxDQUFDLE1BQU07b0JBQ2xCLE9BQU8sRUFBRSxTQUFTLENBQUMsWUFBWSxJQUFJLEVBQUU7aUJBQ3RDLENBQUM7U0FDTDtJQUNILENBQUM7O3lIQXBQVSw0QkFBNEIsa0JBNEJuQixjQUFjOzZHQTVCdkIsNEJBQTRCLGtFQzlCekMsNmpKQTBIQTsyRkQ1RmEsNEJBQTRCO2tCQUx4QyxTQUFTOytCQUNFLDRCQUE0Qjs7MEJBZ0N6QixNQUFNOzJCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCAqIGFzIGRheWpzIGZyb20gXCJkYXlqc1wiO1xuaW1wb3J0IHsgSURhdGVQaWNrZXJDb25maWcgfSBmcm9tIFwibWlzLWNyeXN0YWwtZGVzaWduLXN5c3RlbS9kYXRlcGlja2VyX3YyXCI7XG5pbXBvcnQgeyBwYXJzZVpvbmUgfSBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQgeyBDT05TVEFOVFNfQVNTRVRTX1dJU19DT01NT04gfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL2Fzc2V0cy5jb25zdGFudHNcIjtcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2h0dHAuc2VydmljZVwiO1xuaW1wb3J0IHsgRHJvcGRvd25JdGVtIH0gZnJvbSBcIm1pcy1jcnlzdGFsLWRlc2lnbi1zeXN0ZW0vZHJvcGRvd25cIjtcbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGZpbmFsaXplIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBNT0RBTF9EQVRBX1ZBUiwgTW9kYWxSZWYgfSBmcm9tIFwibWlzLWRlc2lnbi1zeXN0ZW0vbWlzLW1vZGFsXCI7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tIFwibWlzLWNyeXN0YWwtZGVzaWduLXN5c3RlbS90b2FzdFwiO1xuXG5jb25zdCBQUk9QRVJUSUVTID0gW1wiTk9OX1NISUZUX1RSSVBTX0NBVEVHT1JJRVNcIiwgXCJVU0VfVkFMSURfT0ZGSUNFX0ZPUl9JUlJFR1VMQVJfVFJJUFNcIl07XG5cbmludGVyZmFjZSBMb2NhdGlvblZhbHVlIHtcbiAgdHlwZTogbnVtYmVyO1xuICBvZmZpY2U6IGFueSB8IG51bGw7XG59XG5cbmludGVyZmFjZSBMb2NhdGlvbkRyb3Bkb3duSXRlbSB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHZhbHVlOiBMb2NhdGlvblZhbHVlO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiYXBwLWNyZWF0ZS1ub24tc2hpZnQtbW9kYWxcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9jcmVhdGUtbm9uLXNoaWZ0LW1vZGFsLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9jcmVhdGUtbm9uLXNoaWZ0LW1vZGFsLmNvbXBvbmVudC5zY3NzXCJdXG59KVxuZXhwb3J0IGNsYXNzIENyZWF0ZU5vblNoaWZ0TW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBDT05TVEFOVFNfQVNTRVRTX1dJU19DT01NT04gPSBDT05TVEFOVFNfQVNTRVRTX1dJU19DT01NT047XG5cbiAgZGF0ZUNvbmZpZzogUGFydGlhbDxJRGF0ZVBpY2tlckNvbmZpZz4gPSB7XG4gICAgbWluRGF0ZTogcGFyc2Vab25lKCkuZm9ybWF0KFwiREQvTU0vWVlZWVwiKSxcbiAgICBmb3JtYXQ6IFwiREQvTU0vWVlZWVwiXG4gIH07XG4gIGNyZWF0ZVRyaXBzaGVldEZvcm0hOiBGb3JtR3JvdXA7XG4gIG9mZmljZXM6IERyb3Bkb3duSXRlbVtdID0gW107XG5cbiAgbG9jYXRpb25Ecm9wZG93bkRhdGE6IExvY2F0aW9uRHJvcGRvd25JdGVtW10gPSBbXTtcblxuICBjYXRlZ29yeURyb3Bkb3duRGF0YTogRHJvcGRvd25JdGVtW10gPSBbXTtcblxuICBob3Vyc0Ryb3Bkb3duRGF0YTogRHJvcGRvd25JdGVtW10gPSBbXTtcblxuICBtaW51dGVzRHJvcGRvd25EYXRhOiBEcm9wZG93bkl0ZW1bXSA9IFtdO1xuXG4gIHNob3dPdGhlckFkZHJlc3M6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU3VibWl0dGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHJlYWRvbmx5IFRZUEVfT0ZGSUNFID0gNjtcbiAgcmVhZG9ubHkgVFlQRV9UUkFOU1BPUlQgPSAzO1xuICByZWFkb25seSBUWVBFX09USEVSID0gNDtcbiAgcHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoTU9EQUxfREFUQV9WQVIpIHB1YmxpYyBtb2RhbERhdGE6IGFueSwgcHJpdmF0ZSBtb2RhbFJlZjogTW9kYWxSZWYsIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLCBwcml2YXRlIGh0dHA6IEh0dHBTZXJ2aWNlLHByaXZhdGUgdG9hc3Q6IFRvYXN0U2VydmljZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgJG9mZmljZSA9IHRoaXMuaHR0cC5nZXRPZmZpY2VzKHRoaXMubW9kYWxEYXRhLm5vbmNlKTtcbiAgICBjb25zdCAkcHJvcGVydGllcyA9IHRoaXMuaHR0cC5nZXRQcm9wZXJ0aWVzKFBST1BFUlRJRVMpO1xuXG4gICAgZm9ya0pvaW4oWyRvZmZpY2UsICRwcm9wZXJ0aWVzXSlcbiAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSkpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChbb2ZmaWNlcywgcHJvcGVydGllc10pID0+IHtcbiAgICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcbiAgICAgICAgICB0aGlzLmluaXRpYWxpemVEcm9wZG93bkRhdGEob2ZmaWNlcyk7XG4gICAgICAgICAgdGhpcy5zZXR1cEZvcm1MaXN0ZW5lcnMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgbG9hZGluZyBmb3JtIGRhdGE6XCIsIGVycm9yKTtcbiAgICAgICAgICB0aGlzLm1vZGFsUmVmLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplRm9ybSgpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHRoaXMubW9kYWxEYXRhPy5kYXRlID8/IHBhcnNlWm9uZSgpLmZvcm1hdChcIkREL01NL1lZWVlcIik7XG5cbiAgICB0aGlzLmNyZWF0ZVRyaXBzaGVldEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGRpcmVjdGlvbjogW3RoaXMubW9kYWxEYXRhPy5zaGlmdFR5cGUgPT09IFwibG9nb3V0XCIgPyBcIk9VVFwiIDogXCJJTlwiLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIGxvY2F0aW9uOiBbeyBsYWJlbDogXCJcIiwgdmFsdWU6IFwiXCIgfV0sXG4gICAgICBvdGhlckFkZHJlc3M6IFwiXCIsXG4gICAgICB0cmlwQ2F0ZWdvcnk6IFt7IGxhYmVsOiBcIlwiLCB2YWx1ZTogXCJcIiB9XSxcbiAgICAgIGRhdGU6IFtjdXJyZW50VGltZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBob3VyczogW3sgbGFiZWw6IFwiXCIsIHZhbHVlOiBcIlwiIH1dLFxuICAgICAgbWluczogW3sgbGFiZWw6IFwiXCIsIHZhbHVlOiBcIlwiIH1dXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVEcm9wZG93bkRhdGEob2ZmaWNlczogYW55KTogdm9pZCB7XG4gICAgdGhpcy5sb2NhdGlvbkRyb3Bkb3duRGF0YSA9IG9mZmljZXMubWFwKFxuICAgICAgKG9mZmljZTogYW55KTogTG9jYXRpb25Ecm9wZG93bkl0ZW0gPT4gKHtcbiAgICAgICAgbGFiZWw6IG9mZmljZS5hZGRyZXNzLFxuICAgICAgICB2YWx1ZTogeyB0eXBlOiB0aGlzLlRZUEVfT0ZGSUNFLCBvZmZpY2U6IG9mZmljZSB8fCBudWxsIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLmNyZWF0ZVRyaXBzaGVldEZvcm0uZ2V0KFwibG9jYXRpb25cIik/LnNldFZhbHVlKHRoaXMubG9jYXRpb25Ecm9wZG93bkRhdGFbMF0pO1xuXG4gICAgaWYgKCF0aGlzLnByb3BlcnRpZXM/LltcIlVTRV9WQUxJRF9PRkZJQ0VfRk9SX0lSUkVHVUxBUl9UUklQU1wiXSkge1xuICAgICAgdGhpcy5sb2NhdGlvbkRyb3Bkb3duRGF0YS5wdXNoKFxuICAgICAgICB7IGxhYmVsOiBcIkFpcnBvcnRcIiwgdmFsdWU6IHsgdHlwZTogdGhpcy5UWVBFX1RSQU5TUE9SVCwgb2ZmaWNlOiBudWxsIH0gfSBhcyBMb2NhdGlvbkRyb3Bkb3duSXRlbSxcbiAgICAgICAgeyBsYWJlbDogXCJPdGhlclwiLCB2YWx1ZTogeyB0eXBlOiB0aGlzLlRZUEVfT1RIRVIsIG9mZmljZTogbnVsbCB9IH0gYXMgTG9jYXRpb25Ecm9wZG93bkl0ZW1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBjYXRlZ29yeSBkcm9wZG93blxuICAgIGNvbnN0IGNhdGVnb3JpZXNTdHJpbmcgPSB0aGlzLnByb3BlcnRpZXM/LltcIk5PTl9TSElGVF9UUklQU19DQVRFR09SSUVTXCJdO1xuICAgIGlmIChjYXRlZ29yaWVzU3RyaW5nICYmIHR5cGVvZiBjYXRlZ29yaWVzU3RyaW5nID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBjb25zdCBjYXRlZ29yaWVzID0gY2F0ZWdvcmllc1N0cmluZy5zcGxpdChcIixcIikuZmlsdGVyKGNhdCA9PiBjYXQgJiYgY2F0LnRyaW0oKSk7XG4gICAgICBpZiAoY2F0ZWdvcmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEcm9wZG93bkRhdGEgPSBjYXRlZ29yaWVzLm1hcChjYXRlZ29yeSA9PiAoe1xuICAgICAgICAgIGxhYmVsOiBjYXRlZ29yeS50cmltKCksXG4gICAgICAgICAgdmFsdWU6IGNhdGVnb3J5LnRyaW0oKVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudEhvdXIgPSBuZXcgRGF0ZSgpLmdldEhvdXJzKCk7XG4gICAgdGhpcy5ob3Vyc0Ryb3Bkb3duRGF0YSA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDI0IH0sIChfLCBpKSA9PiAoe1xuICAgICAgbGFiZWw6IHRoaXMucGFkWmVybyhpKSxcbiAgICAgIHZhbHVlOiB0aGlzLnBhZFplcm8oaSlcbiAgICB9KSk7XG4gICAgdGhpcy5jcmVhdGVUcmlwc2hlZXRGb3JtLnBhdGNoVmFsdWUoeyBob3VyczogdGhpcy5ob3Vyc0Ryb3Bkb3duRGF0YVtjdXJyZW50SG91cl0gfSk7XG5cbiAgICBjb25zdCBjdXJyZW50TWludXRlID0gbmV3IERhdGUoKS5nZXRNaW51dGVzKCk7XG4gICAgdGhpcy5taW51dGVzRHJvcGRvd25EYXRhID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogNjAgfSwgKF8sIGkpID0+ICh7XG4gICAgICBsYWJlbDogdGhpcy5wYWRaZXJvKGkpLFxuICAgICAgdmFsdWU6IHRoaXMucGFkWmVybyhpKVxuICAgIH0pKTtcbiAgICB0aGlzLmNyZWF0ZVRyaXBzaGVldEZvcm0ucGF0Y2hWYWx1ZSh7IG1pbnM6IHRoaXMubWludXRlc0Ryb3Bkb3duRGF0YVtjdXJyZW50TWludXRlXSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBGb3JtTGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuY3JlYXRlVHJpcHNoZWV0Rm9ybT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBjb25zdCB7IGxvY2F0aW9uIH0gPSB0aGlzLmNyZWF0ZVRyaXBzaGVldEZvcm0/LnZhbHVlO1xuICAgICAgaWYgKHRoaXMuc2hvd090aGVyQWRkcmVzcyAhPT0gKGxvY2F0aW9uPy52YWx1ZT8udHlwZSA9PT0gdGhpcy5UWVBFX09USEVSKSkge1xuICAgICAgICB0aGlzLnNob3dPdGhlckFkZHJlc3MgPSBsb2NhdGlvbj8udmFsdWU/LnR5cGUgPT09IHRoaXMuVFlQRV9PVEhFUjtcbiAgICAgICAgaWYgKHRoaXMuc2hvd090aGVyQWRkcmVzcykge1xuICAgICAgICAgIHRoaXMuY3JlYXRlVHJpcHNoZWV0Rm9ybS5nZXQoXCJvdGhlckFkZHJlc3NcIik/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNyZWF0ZVRyaXBzaGVldEZvcm0uZ2V0KFwib3RoZXJBZGRyZXNzXCIpPy5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNyZWF0ZVRyaXBzaGVldEZvcm0uZ2V0KFwib3RoZXJBZGRyZXNzXCIpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHBhZFplcm8obnVtOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBudW0udG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIik7XG4gIH1cblxuICBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsUmVmLmNsb3NlKCk7XG4gIH1cblxuICBvblN1Ym1pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jcmVhdGVUcmlwc2hlZXRGb3JtLmludmFsaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmNyZWF0ZVRyaXBzaGVldEZvcm0udmFsdWU7XG5cbiAgICBjb25zdCBwaWNrdXBUaW1lID0gYCR7Zm9ybVZhbHVlLmRhdGV9ICR7Zm9ybVZhbHVlLmhvdXJzLnZhbHVlfS8ke2Zvcm1WYWx1ZS5taW5zLnZhbHVlfS8wMGA7XG4gICAgY29uc3QgcGlja3VwVGltZURhdGUgPSBwYXJzZVpvbmUocGlja3VwVGltZSkudG9EYXRlKCk7XG4gICAgaWYgKHRoaXMuaXNEYXRlQW5kVGltZUZyb21QYXN0KHBpY2t1cFRpbWVEYXRlKSkge1xuICAgICAgdGhpcy50b2FzdC5kaXNwbGF5TXNnKFwiUGxlYXNlIHNlbGVjdCBhIGZ1dHVyZSBkYXRlIGFuZCB0aW1lLlwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jYXRlZ29yeURyb3Bkb3duRGF0YS5sZW5ndGggPiAwICYmICghZm9ybVZhbHVlLnRyaXBDYXRlZ29yeSB8fCAhZm9ybVZhbHVlLnRyaXBDYXRlZ29yeS52YWx1ZSkpIHtcbiAgICAgIHRoaXMudG9hc3QuZGlzcGxheU1zZyhcIlBsZWFzZSBwcm92aWRlIGEgdHJpcCBjYXRlZ29yeS5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGZvcm1WYWx1ZS5sb2NhdGlvbj8udmFsdWU/LnR5cGUgPT09IHRoaXMuVFlQRV9PVEhFUikge1xuICAgICAgaWYgKCFmb3JtVmFsdWUub3RoZXJBZGRyZXNzIHx8IGZvcm1WYWx1ZS5vdGhlckFkZHJlc3MudHJpbSgpID09PSBcIlwiKSB7XG4gICAgICAgIHRoaXMudG9hc3QuZGlzcGxheU1zZyhcIlBsZWFzZSBwcm92aWRlIHRoZSBhZGRyZXNzLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGZvcm1WYWx1ZS5vdGhlckFkZHJlc3MuaW5jbHVkZXMoXCIsXCIpKSB7XG4gICAgICAgIHRoaXMudG9hc3QuZGlzcGxheU1zZyhcIlNwZWNpYWwgY2hhcmFjdGVyICgsKSBub3QgYWxsb3dlZCBpbiBhZGRyZXNzLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gdHJ1ZTtcblxuICAgIHRoaXMuaHR0cC5jcmVhdGVFbXB0eUlycmVndWxhclRyaXBTaGVldCh0aGlzLm1vZGFsRGF0YS5ub25jZSwgZm9ybVZhbHVlLmRpcmVjdGlvbikuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IHJvdXRlVHJpcFNoZWV0ID0+IHtcbiAgICAgICAgY29uc3QgcGlja3VwTG9jID0gcm91dGVUcmlwU2hlZXQuZGlyID09PSBcIklOXCIgPyB0aGlzLm1vZGFsRGF0YS5lbXBsb3llZS5ob21lIDogdGhpcy5nZXRMb2NhdGlvbihmb3JtVmFsdWUpO1xuICAgICAgICBjb25zdCBkcm9wTG9jID0gcm91dGVUcmlwU2hlZXQuZGlyID09PSBcIk9VVFwiID8gdGhpcy5tb2RhbERhdGEuZW1wbG95ZWUuaG9tZSA6IHRoaXMuZ2V0TG9jYXRpb24oZm9ybVZhbHVlKTtcbiAgICAgICAgY29uc3QgcGlja3VwVGltZUZvcm1hdHRlZCA9IHBpY2t1cFRpbWU7XG4gICAgICAgIGNvbnN0IGRyb3BUaW1lRm9ybWF0dGVkID0gcGlja3VwVGltZTtcblxuICAgICAgICBjb25zdCBlbXBsb3llZSA9IHsgLi4udGhpcy5tb2RhbERhdGEuZW1wbG95ZWUsIGVtcGxveWVlX3N0YXR1czogMSB9O1xuXG4gICAgICAgIGNvbnN0IGFkZEVtcGxveWVlUGFyYW1zID0ge1xuICAgICAgICAgIHRyaXBzaGVldDogcm91dGVUcmlwU2hlZXQsXG4gICAgICAgICAgZW1wbG95ZWU6IGVtcGxveWVlLFxuICAgICAgICAgIHBpY2t1cExvYzogcGlja3VwTG9jLFxuICAgICAgICAgIGRyb3BMb2M6IGRyb3BMb2MsXG4gICAgICAgICAgcGlja1VwVGltZTogcGlja3VwVGltZUZvcm1hdHRlZCxcbiAgICAgICAgICBkcm9wVGltZTogZHJvcFRpbWVGb3JtYXR0ZWQsXG4gICAgICAgICAgcG9zaXRpb246IDAsXG4gICAgICAgICAgcm91dGVTb3VyY2U6IHRoaXMubW9kYWxEYXRhLnJvdXRlU291cmNlLFxuICAgICAgICAgIGFzc2V0TGlzdDogdGhpcy5tb2RhbERhdGEuYXNzZXRMaXN0XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5odHRwLmFkZEVtcGxveWVlVG9UcmlwU2hlZXQodGhpcy5tb2RhbERhdGEubm9uY2UsIGFkZEVtcGxveWVlUGFyYW1zKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IHVwZGF0ZWRUcmlwU2hlZXQgPT4ge1xuICAgICAgICAgICAgaWYgKCF1cGRhdGVkVHJpcFNoZWV0LmN1c3RvbU1hcCkge1xuICAgICAgICAgICAgICB1cGRhdGVkVHJpcFNoZWV0LmN1c3RvbU1hcCA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdXBkYXRlZFRyaXBTaGVldC5jdXN0b21NYXAudHJpcENhdGVnb3J5ID0gZm9ybVZhbHVlLnRyaXBDYXRlZ29yeT8udmFsdWUgfHwgXCJcIjtcblxuICAgICAgICAgICAgdGhpcy5tb2RhbFJlZi5jbG9zZSh7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICAgIHRyaXBzaGVldDogdXBkYXRlZFRyaXBTaGVldFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogZXJyb3IgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGFkZGluZyBlbXBsb3llZSB0byB0cmlwc2hlZXQ6XCIsIGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMudG9hc3QuZGlzcGxheU1zZyhcIkZhaWxlZCB0byBhZGQgZW1wbG95ZWUgdG8gdHJpcHNoZWV0LiBQbGVhc2UgdHJ5IGFnYWluLlwiKTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZXJyb3IgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgY3JlYXRpbmcgdHJpcHNoZWV0OlwiLCBlcnJvcik7XG4gICAgICAgIHRoaXMudG9hc3QuZGlzcGxheU1zZyhcIkZhaWxlZCB0byBjcmVhdGUgdHJpcHNoZWV0LiBQbGVhc2UgdHJ5IGFnYWluLlwiKTtcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNEYXRlQW5kVGltZUZyb21QYXN0KGRhdGU6IERhdGUpOiBib29sZWFuIHtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIHJldHVybiBkYXRlIDwgbm93O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMb2NhdGlvbihmb3JtVmFsdWU6IGFueSk6IGFueSB7XG4gICAgY29uc3QgbG9jYXRpb24gPSBmb3JtVmFsdWUubG9jYXRpb24/LnZhbHVlO1xuXG4gICAgaWYgKCFsb2NhdGlvbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbG9jVHlwZSA9IGxvY2F0aW9uLnR5cGU7XG5cbiAgICBzd2l0Y2ggKGxvY1R5cGUpIHtcbiAgICAgIGNhc2UgdGhpcy5UWVBFX09GRklDRTpcbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uLm9mZmljZTtcblxuICAgICAgY2FzZSB0aGlzLlRZUEVfVFJBTlNQT1JUOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlkOiBudWxsLFxuICAgICAgICAgIHR5cGU6IHRoaXMuVFlQRV9UUkFOU1BPUlQsXG4gICAgICAgICAgYWRkcmVzczogXCJBaXJwb3J0XCIsXG4gICAgICAgICAgZ2VvQ29yZDogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICBjYXNlIHRoaXMuVFlQRV9PVEhFUjpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5sb2NhdGlvbi5vZmZpY2UsXG4gICAgICAgICAgYWRkcmVzczogZm9ybVZhbHVlLm90aGVyQWRkcmVzcyB8fCBcIlwiXG4gICAgICAgIH07XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY3JlYXRlVHJpcHNoZWV0XCI+XG4gIDxoMiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPkNyZWF0ZSBOb24tU2hpZnQgVHJpcHNoZWV0PC9oMj5cblxuICA8ZGl2ICpuZ0lmPVwibG9hZGluZ1wiIGNsYXNzPVwibG9hZGluZy1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lclwiPjwvZGl2PlxuICAgIDxwPkxvYWRpbmcuLi48L3A+XG4gIDwvZGl2PlxuXG4gIDxmb3JtXG4gICAgKm5nSWY9XCIhbG9hZGluZyAmJiBjcmVhdGVUcmlwc2hlZXRGb3JtXCJcbiAgICBbZm9ybUdyb3VwXT1cImNyZWF0ZVRyaXBzaGVldEZvcm1cIlxuICAgIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdCgpXCJcbiAgICBjbGFzcz1cImNyZWF0ZVRyaXBzaGVldEZvcm1cIlxuICAgIGlkPVwiY3JlYXRlVHJpcHNoZWV0Rm9ybVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250ZW50XCI+XG4gICAgICA8IS0tIFJhZGlvIGJ1dHRvbnMgcm93IC0tPlxuICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdyYWRpby1yb3cnOiB0cnVlLCBkaXNhYmxlZDogbW9kYWxEYXRhPy5zaGlmdFNlbGVjdGlvbkRpc2FibGVkIH1cIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwicmFkaW8tbGFiZWxcIj5cbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJtb2Rlcm4tY2hlY2tib3hcIiB0eXBlPVwicmFkaW9cIiBmb3JtQ29udHJvbE5hbWU9XCJkaXJlY3Rpb25cIiB2YWx1ZT1cIk9VVFwiIGlkPVwic3RhcnRMb2NcIiAvPlxuICAgICAgICAgIDxzcGFuPlN0YXJ0IExvY2F0aW9uIEZpeGVkIChMb2dvdXQpPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJyYWRpby1sYWJlbFwiPlxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cIm1vZGVybi1jaGVja2JveFwiIHR5cGU9XCJyYWRpb1wiIGZvcm1Db250cm9sTmFtZT1cImRpcmVjdGlvblwiIHZhbHVlPVwiSU5cIiBpZD1cImVuZExvY1wiIC8+XG4gICAgICAgICAgPHNwYW4+RW5kIExvY2F0aW9uIEZpeGVkIChMb2dpbik8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBMb2NhdGlvbiBmaWVsZCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1jZWxsXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwibG9jVGV4dFwiPkxvY2F0aW9uPC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1jZWxsXCI+XG4gICAgICAgICAgPG1pcy1kcm9wZG93blxuICAgICAgICAgICAgW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbd2lkdGhdPVwiJzEwMCUnXCJcbiAgICAgICAgICAgIFtoZWlnaHRdPVwiJzQwcHgnXCJcbiAgICAgICAgICAgIFtkYXRhXT1cImxvY2F0aW9uRHJvcGRvd25EYXRhXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZEl0ZW1dPVwiY3JlYXRlVHJpcHNoZWV0Rm9ybS5nZXQoJ2xvY2F0aW9uJyk/LnZhbHVlXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCInU2VsZWN0IGxvY2F0aW9uLi4uJ1wiXG4gICAgICAgICAgICAob25DaGFuZ2UpPVwiY3JlYXRlVHJpcHNoZWV0Rm9ybS5nZXQoJ2xvY2F0aW9uJyk/LnNldFZhbHVlKCRldmVudClcIlxuICAgICAgICAgID48L21pcy1kcm9wZG93bj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBPdGhlciBhZGRyZXNzIGZpZWxkIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQgb3RoZXJBZGRyZXNzXCIgKm5nSWY9XCJzaG93T3RoZXJBZGRyZXNzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1jZWxsXCI+XG4gICAgICAgICAgPGxhYmVsPlBpY2svRHJvcCBwb2ludCA8c3VwPio8L3N1cD48L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWNlbGxcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJvdGhlckFkZHJlc3NcIiBjbGFzcz1cIm1vZGVybi1pbnB1dFwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gVHJpcCBjYXRlZ29yeSBmaWVsZCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nSWY9XCJjYXRlZ29yeURyb3Bkb3duRGF0YS5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1jZWxsXCI+XG4gICAgICAgICAgPGxhYmVsPlRyaXAgQ2F0ZWdvcnk8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWNlbGxcIj5cbiAgICAgICAgICA8bWlzLWRyb3Bkb3duXG4gICAgICAgICAgICBbc2VhcmNoRW5hYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgICBbd2lkdGhdPVwiJzI1MHB4J1wiXG4gICAgICAgICAgICBbaGVpZ2h0XT1cIic0MHB4J1wiXG4gICAgICAgICAgICBbZGF0YV09XCJjYXRlZ29yeURyb3Bkb3duRGF0YVwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRJdGVtXT1cImNyZWF0ZVRyaXBzaGVldEZvcm0uZ2V0KCd0cmlwQ2F0ZWdvcnknKT8udmFsdWVcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIidTZWxlY3QgY2F0ZWdvcnkuLi4nXCJcbiAgICAgICAgICAgIChvbkNoYW5nZSk9XCJjcmVhdGVUcmlwc2hlZXRGb3JtLmdldCgndHJpcENhdGVnb3J5Jyk/LnNldFZhbHVlKCRldmVudClcIlxuICAgICAgICAgID48L21pcy1kcm9wZG93bj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBUaW1lIGZpZWxkIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLWNlbGxcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmaXhlZFRpbWVUZXh0XCI+VGltZTwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY2VsbCBtb2Rlcm4tZGF0ZS1jb250YWluZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1zZWxlY3RcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBtaXNUekRwXG4gICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAgIFtkcENvbmZpZ109XCJkYXRlQ29uZmlnXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNyZWF0ZVRyaXBzaGVldEZvcm0uZ2V0KCdkYXRlJylcIlxuICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogNDRweCAhaW1wb3J0YW50OyBmb250LXNpemU6IDE2cHggIWltcG9ydGFudDsgY3Vyc29yOiBwb2ludGVyOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlICFpbXBvcnRhbnRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxpbWcgW3NyY109XCJDT05TVEFOVFNfQVNTRVRTX1dJU19DT01NT04uSU1BR0VTLkNBTEVOREFSX0lDT05cIiBhbHQ9XCJDYWxlbmRhciBJY29uXCIgY2xhc3M9XCJkYXRlLWljb24gZGF0YS1waWNrZXItaWNvblwiIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8bWlzLWRyb3Bkb3duXG4gICAgICAgICAgICBbc2VhcmNoRW5hYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgICBbd2lkdGhdPVwiJzVyZW0nXCJcbiAgICAgICAgICAgIFtoZWlnaHRdPVwiJzQwcHgnXCJcbiAgICAgICAgICAgIFtkYXRhXT1cImhvdXJzRHJvcGRvd25EYXRhXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZEl0ZW1dPVwiY3JlYXRlVHJpcHNoZWV0Rm9ybS5nZXQoJ2hvdXJzJyk/LnZhbHVlXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCInSEgnXCJcbiAgICAgICAgICAgIChvbkNoYW5nZSk9XCJjcmVhdGVUcmlwc2hlZXRGb3JtLmdldCgnaG91cnMnKT8uc2V0VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvbWlzLWRyb3Bkb3duPlxuXG4gICAgICAgICAgPG1pcy1kcm9wZG93blxuICAgICAgICAgICAgW3NlYXJjaEVuYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW3dpZHRoXT1cIic1cmVtJ1wiXG4gICAgICAgICAgICBbaGVpZ2h0XT1cIic0MHB4J1wiXG4gICAgICAgICAgICBbZGF0YV09XCJtaW51dGVzRHJvcGRvd25EYXRhXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZEl0ZW1dPVwiY3JlYXRlVHJpcHNoZWV0Rm9ybS5nZXQoJ21pbnMnKT8udmFsdWVcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIidNTSdcIlxuICAgICAgICAgICAgKG9uQ2hhbmdlKT1cImNyZWF0ZVRyaXBzaGVldEZvcm0uZ2V0KCdtaW5zJyk/LnNldFZhbHVlKCRldmVudClcIlxuICAgICAgICAgID48L21pcy1kcm9wZG93bj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWFjdGlvbnNcIj5cbiAgICAgIDxidXR0b24gbWlzLWJ1dHRvbiB0eXBlPVwib3V0bGluZVwiIChjbGljayk9XCJvbkNhbmNlbCgpXCIgW2Rpc2FibGVkXT1cImlzU3VibWl0dGluZ1wiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBtaXMtYnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgW2Rpc2FibGVkXT1cImlzU3VibWl0dGluZyB8fCBjcmVhdGVUcmlwc2hlZXRGb3JtPy5pbnZhbGlkXCI+XG4gICAgICAgIHt7IGlzU3VibWl0dGluZyA/IFwiQ3JlYXRpbmcuLi5cIiA6IFwiQ3JlYXRlXCIgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** @format */
|
|
2
|
+
export const CONSTANTS_ASSETS_WIS_COMMON = {
|
|
3
|
+
IMAGES: {
|
|
4
|
+
CALENDAR_ICON: "assets/libraries/wis-common/calendar.svg"
|
|
5
|
+
},
|
|
6
|
+
ICONS: {}
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLmNvbnN0YW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy93aXMtY29tbW9uL3NyYy9saWIvY29uc3RhbnRzL2Fzc2V0cy5jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYztBQUVkLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHO0lBQ3pDLE1BQU0sRUFBRTtRQUNOLGFBQWEsRUFBRSwwQ0FBMEM7S0FDMUQ7SUFDRCxLQUFLLEVBQUUsRUFBRTtDQUNWLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGZvcm1hdCAqL1xuXG5leHBvcnQgY29uc3QgQ09OU1RBTlRTX0FTU0VUU19XSVNfQ09NTU9OID0ge1xuICBJTUFHRVM6IHtcbiAgICBDQUxFTkRBUl9JQ09OOiBcImFzc2V0cy9saWJyYXJpZXMvd2lzLWNvbW1vbi9jYWxlbmRhci5zdmdcIlxuICB9LFxuICBJQ09OUzoge31cbn07XG4iXX0=
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/** @format */
|
|
2
2
|
export {};
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL3dpcy1jb21tb24vc3JjL2xpYi9tb2RlbHMvZW52Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGZvcm1hdCAqL1xuXG5leHBvcnQgbmFtZXNwYWNlIE5zV0lTQ29tbW9uIHtcbiAgZXhwb3J0IGludGVyZmFjZSBJRW52IHtcbiAgICBlbXBFeHA6IHN0cmluZztcbiAgICB0bXM6IHN0cmluZztcbiAgICBldHM/OiBzdHJpbmc7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy93aXMtY29tbW9uL3NyYy9saWIvbW9kZWxzL3Nlc3Npb24ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBuYW1lc3BhY2UgTnNTZXNzaW9uIHtcbiAgZXhwb3J0IGludGVyZmFjZSBJQ2xhaW1zIHtcbiAgICBzdWI/OiBzdHJpbmc7XG4gICAgZW1wbG95ZWVHVUlEPzogc3RyaW5nO1xuICAgIGludGVybmFsX3Nzb19yb2xlPzogc3RyaW5nO1xuICAgIHNlc3Npb25JZD86IHN0cmluZztcbiAgICBsb2dnZWRJblVzZXI/OiBzdHJpbmc7XG4gICAgdmV0VXNlckVtYWlsSWQ/OiBzdHJpbmc7XG4gICAgdmV0VXNlcklkPzogbnVtYmVyO1xuICAgIHNvdXJjZT86IHN0cmluZztcbiAgICByb2xlcz86IHN0cmluZ1tdO1xuICAgIGV4cD86IG51bWJlcjsgLy8gaW4gc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2hcbiAgICBpYXQ/OiBudW1iZXI7XG4gICAgYnVzaW5lc3NVbml0SWQ/OiBzdHJpbmc7XG4gICAgQUxMT1dFRF9CVUlEUz86IHN0cmluZ1tdO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBJSW5pdENvbmZpZyB7XG4gICAgc2Vzc2lvblRva2VuQ29va2llS2V5Pzogc3RyaW5nO1xuICAgIHZldFRva2VuQ29va2llS2V5Pzogc3RyaW5nO1xuICB9XG59XG4iXX0=
|
|
@@ -1,27 +1,47 @@
|
|
|
1
1
|
import { Inject, Injectable } from "@angular/core";
|
|
2
|
+
import { map } from "rxjs";
|
|
2
3
|
import { CONSTANTS_WIS_COMMON } from "../constants/emp-web-exp.constants";
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "
|
|
5
|
-
import * as i2 from "@angular/common/http";
|
|
5
|
+
import * as i1 from "@angular/common/http";
|
|
6
6
|
const API_URLS = {
|
|
7
7
|
CONFIGURATIONS: "configurations"
|
|
8
8
|
};
|
|
9
9
|
export class HttpService {
|
|
10
|
-
constructor(env,
|
|
10
|
+
constructor(env, http) {
|
|
11
11
|
this.env = env;
|
|
12
|
-
this.auth = auth;
|
|
13
12
|
this.http = http;
|
|
14
13
|
}
|
|
15
|
-
|
|
16
|
-
return this.http.get(`${this.env.
|
|
14
|
+
getProperties(Porperties) {
|
|
15
|
+
return this.http.get(`${this.env.ets}/ets/apis/properties/${Porperties.join(",")}`).pipe(map((res) => {
|
|
16
|
+
return res.reduce((acc, item) => {
|
|
17
|
+
acc[item.propertyName] = item.propertyValue === "true" ? true : item.propertyValue === "false" ? false : item.propertyValue;
|
|
18
|
+
return acc;
|
|
19
|
+
}, {});
|
|
20
|
+
}));
|
|
21
|
+
}
|
|
22
|
+
getOffices(nonce) {
|
|
23
|
+
const body = `CSRF_NONCE=${nonce}&method=getOfficeList`;
|
|
24
|
+
return this.http.post(`${this.env.ets}/Locality_Servlet`, body, { headers: { "Content-Type": "application/x-www-form-urlencoded" } });
|
|
25
|
+
}
|
|
26
|
+
listTransportLocalities(nonce) {
|
|
27
|
+
const body = `CSRF_NONCE=${nonce}&method=listTransportLocalities`;
|
|
28
|
+
return this.http.post(`${this.env.ets}/Locality_Servlet`, body, { headers: { "Content-Type": "application/x-www-form-urlencoded" } });
|
|
29
|
+
}
|
|
30
|
+
createEmptyIrregularTripSheet(nonce, direction) {
|
|
31
|
+
const body = `CSRF_NONCE=${nonce}&method=createEmptyIrregularTripSheet&direction=${direction}`;
|
|
32
|
+
return this.http.post(`${this.env.ets}/Tripsheet_Edit_Servlet`, body, { headers: { "Content-Type": "application/x-www-form-urlencoded" } });
|
|
33
|
+
}
|
|
34
|
+
addEmployeeToTripSheet(nonce, params) {
|
|
35
|
+
const body = `CSRF_NONCE=${nonce}&method=addEmployeeToTripSheet&tripsheet=${encodeURIComponent(JSON.stringify(params.tripsheet))}&employee=${encodeURIComponent(JSON.stringify(params.employee))}&pickupLoc=${encodeURIComponent(JSON.stringify(params.pickupLoc))}&dropLoc=${encodeURIComponent(JSON.stringify(params.dropLoc))}&pickUpTime="${params.pickUpTime}"&dropTime="${params.dropTime}"&position=${params.position}${params.routeSource ? "&routeSource=" + params.routeSource : ""}${params.assetList ? "&assetList=" + encodeURIComponent(JSON.stringify(params.assetList)) : ""}`;
|
|
36
|
+
return this.http.post(`${this.env.ets}/Tripsheet_Edit_Servlet`, body, { headers: { "Content-Type": "application/x-www-form-urlencoded" } });
|
|
17
37
|
}
|
|
18
38
|
}
|
|
19
|
-
HttpService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HttpService, deps: [{ token: CONSTANTS_WIS_COMMON }, { token: i1.
|
|
39
|
+
HttpService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HttpService, deps: [{ token: CONSTANTS_WIS_COMMON }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
20
40
|
HttpService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HttpService });
|
|
21
41
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HttpService, decorators: [{
|
|
22
42
|
type: Injectable
|
|
23
43
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
24
44
|
type: Inject,
|
|
25
45
|
args: [CONSTANTS_WIS_COMMON]
|
|
26
|
-
}] }, { type: i1.
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
46
|
+
}] }, { type: i1.HttpClient }]; } });
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL3dpcy1jb21tb24vc3JjL2xpYi9zZXJ2aWNlcy9odHRwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7O0FBSzFFLE1BQU0sUUFBUSxHQUFHO0lBQ2YsY0FBYyxFQUFFLGdCQUFnQjtDQUNqQyxDQUFDO0FBR0YsTUFBTSxPQUFPLFdBQVc7SUFDdEIsWUFBaUQsR0FBcUIsRUFBVSxJQUFnQjtRQUEvQyxRQUFHLEdBQUgsR0FBRyxDQUFrQjtRQUFVLFNBQUksR0FBSixJQUFJLENBQVk7SUFBRyxDQUFDO0lBRXBHLGFBQWEsQ0FBQyxVQUFvQjtRQUNoQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLHdCQUF3QixVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RGLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBUSxFQUFFLElBQVMsRUFBRSxFQUFFO2dCQUN4QyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7Z0JBQzVILE9BQU8sR0FBRyxDQUFDO1lBQ2IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ1QsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBSztRQUNkLE1BQU0sSUFBSSxHQUFHLGNBQWMsS0FBSyx1QkFBdUIsQ0FBQztRQUN4RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLG1CQUFtQixFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxtQ0FBbUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4SSxDQUFDO0lBRUQsdUJBQXVCLENBQUMsS0FBSztRQUMzQixNQUFNLElBQUksR0FBRyxjQUFjLEtBQUssaUNBQWlDLENBQUM7UUFDbEUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsbUNBQW1DLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDeEksQ0FBQztJQUVELDZCQUE2QixDQUFDLEtBQWEsRUFBRSxTQUFpQjtRQUM1RCxNQUFNLElBQUksR0FBRyxjQUFjLEtBQUssbURBQW1ELFNBQVMsRUFBRSxDQUFDO1FBQy9GLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcseUJBQXlCLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLG1DQUFtQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzlJLENBQUM7SUFFRCxzQkFBc0IsQ0FDcEIsS0FBYSxFQUNiLE1BVUM7UUFFRCxNQUFNLElBQUksR0FBRyxjQUFjLEtBQUssNENBQTRDLGtCQUFrQixDQUM1RixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FDakMsYUFBYSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxjQUFjLGtCQUFrQixDQUMvRixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FDakMsWUFBWSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxnQkFBZ0IsTUFBTSxDQUFDLFVBQVUsZUFBZSxNQUFNLENBQUMsUUFBUSxjQUM1SCxNQUFNLENBQUMsUUFDVCxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQy9ELE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGFBQWEsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUM1RixFQUFFLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLHlCQUF5QixFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxtQ0FBbUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM5SSxDQUFDOzt3R0FyRFUsV0FBVyxrQkFDRixvQkFBb0I7NEdBRDdCLFdBQVc7MkZBQVgsV0FBVztrQkFEdkIsVUFBVTs7MEJBRUksTUFBTTsyQkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IENPTlNUQU5UU19XSVNfQ09NTU9OIH0gZnJvbSBcIi4uL2NvbnN0YW50cy9lbXAtd2ViLWV4cC5jb25zdGFudHNcIjtcbmltcG9ydCB7IE5zV0lTQ29uZmlndXJhdGlvbnMgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbmZpZ3VyYXRpb25zLm1vZGVsXCI7XG5pbXBvcnQgeyBOc1dJU0NvbW1vbiB9IGZyb20gXCIuLi9tb2RlbHMvZW52Lm1vZGVsXCI7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gXCIuLi9tb2R1bGVzL2F1dGgvYXV0aC5zZXJ2aWNlXCI7XG5cbmNvbnN0IEFQSV9VUkxTID0ge1xuICBDT05GSUdVUkFUSU9OUzogXCJjb25maWd1cmF0aW9uc1wiXG59O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSHR0cFNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihASW5qZWN0KENPTlNUQU5UU19XSVNfQ09NTU9OKSBwdWJsaWMgZW52OiBOc1dJU0NvbW1vbi5JRW52LCBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHt9XG5cbiAgZ2V0UHJvcGVydGllcyhQb3JwZXJ0aWVzOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZW52LmV0c30vZXRzL2FwaXMvcHJvcGVydGllcy8ke1BvcnBlcnRpZXMuam9pbihcIixcIil9YCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlcy5yZWR1Y2UoKGFjYzogYW55LCBpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICBhY2NbaXRlbS5wcm9wZXJ0eU5hbWVdID0gaXRlbS5wcm9wZXJ0eVZhbHVlID09PSBcInRydWVcIiA/IHRydWUgOiBpdGVtLnByb3BlcnR5VmFsdWUgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDogaXRlbS5wcm9wZXJ0eVZhbHVlO1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldE9mZmljZXMobm9uY2UpIHtcbiAgICBjb25zdCBib2R5ID0gYENTUkZfTk9OQ0U9JHtub25jZX0mbWV0aG9kPWdldE9mZmljZUxpc3RgO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmVudi5ldHN9L0xvY2FsaXR5X1NlcnZsZXRgLCBib2R5LCB7IGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiB9IH0pO1xuICB9XG5cbiAgbGlzdFRyYW5zcG9ydExvY2FsaXRpZXMobm9uY2UpIHtcbiAgICBjb25zdCBib2R5ID0gYENTUkZfTk9OQ0U9JHtub25jZX0mbWV0aG9kPWxpc3RUcmFuc3BvcnRMb2NhbGl0aWVzYDtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5lbnYuZXRzfS9Mb2NhbGl0eV9TZXJ2bGV0YCwgYm9keSwgeyBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIgfSB9KTtcbiAgfVxuXG4gIGNyZWF0ZUVtcHR5SXJyZWd1bGFyVHJpcFNoZWV0KG5vbmNlOiBzdHJpbmcsIGRpcmVjdGlvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBib2R5ID0gYENTUkZfTk9OQ0U9JHtub25jZX0mbWV0aG9kPWNyZWF0ZUVtcHR5SXJyZWd1bGFyVHJpcFNoZWV0JmRpcmVjdGlvbj0ke2RpcmVjdGlvbn1gO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmVudi5ldHN9L1RyaXBzaGVldF9FZGl0X1NlcnZsZXRgLCBib2R5LCB7IGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiB9IH0pO1xuICB9XG5cbiAgYWRkRW1wbG95ZWVUb1RyaXBTaGVldChcbiAgICBub25jZTogc3RyaW5nLFxuICAgIHBhcmFtczoge1xuICAgICAgdHJpcHNoZWV0OiBhbnk7XG4gICAgICBlbXBsb3llZTogYW55O1xuICAgICAgcGlja3VwTG9jOiBhbnk7XG4gICAgICBkcm9wTG9jOiBhbnk7XG4gICAgICBwaWNrVXBUaW1lOiBzdHJpbmc7XG4gICAgICBkcm9wVGltZTogc3RyaW5nO1xuICAgICAgcG9zaXRpb246IG51bWJlcjtcbiAgICAgIHJvdXRlU291cmNlPzogc3RyaW5nO1xuICAgICAgYXNzZXRMaXN0PzogYW55O1xuICAgIH1cbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBib2R5ID0gYENTUkZfTk9OQ0U9JHtub25jZX0mbWV0aG9kPWFkZEVtcGxveWVlVG9UcmlwU2hlZXQmdHJpcHNoZWV0PSR7ZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgICAgSlNPTi5zdHJpbmdpZnkocGFyYW1zLnRyaXBzaGVldClcbiAgICApfSZlbXBsb3llZT0ke2VuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShwYXJhbXMuZW1wbG95ZWUpKX0mcGlja3VwTG9jPSR7ZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgICAgSlNPTi5zdHJpbmdpZnkocGFyYW1zLnBpY2t1cExvYylcbiAgICApfSZkcm9wTG9jPSR7ZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHBhcmFtcy5kcm9wTG9jKSl9JnBpY2tVcFRpbWU9XCIke3BhcmFtcy5waWNrVXBUaW1lfVwiJmRyb3BUaW1lPVwiJHtwYXJhbXMuZHJvcFRpbWV9XCImcG9zaXRpb249JHtcbiAgICAgIHBhcmFtcy5wb3NpdGlvblxuICAgIH0ke3BhcmFtcy5yb3V0ZVNvdXJjZSA/IFwiJnJvdXRlU291cmNlPVwiICsgcGFyYW1zLnJvdXRlU291cmNlIDogXCJcIn0ke1xuICAgICAgcGFyYW1zLmFzc2V0TGlzdCA/IFwiJmFzc2V0TGlzdD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShwYXJhbXMuYXNzZXRMaXN0KSkgOiBcIlwiXG4gICAgfWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZW52LmV0c30vVHJpcHNoZWV0X0VkaXRfU2VydmxldGAsIGJvZHksIHsgaGVhZGVyczogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiIH0gfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -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=
|