kwikid-agent-dashboard 0.0.37 → 0.0.39
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/bundles/kwikid-agent-dashboard.umd.js +3655 -1317
- package/bundles/kwikid-agent-dashboard.umd.js.map +1 -1
- package/esm2015/lib/kwikid-agent-dashboard.component.js +39 -120
- package/esm2015/lib/kwikid-agent-dashboard.module.js +26 -35
- package/esm2015/lib/v1/components/action-button/action-button.component.js +91 -0
- package/esm2015/lib/v1/components/customer-details/customer-details.component.js +139 -0
- package/esm2015/lib/v1/components/customer-list/customer-list.component.js +201 -0
- package/esm2015/lib/v1/components/customer-tile/customer-tile.component.js +137 -0
- package/esm2015/lib/v1/components/customer-tile/status-pill/status-pill.component.js +54 -0
- package/esm2015/lib/v1/components/customer-tile/status-pill/status-pill.definitions.js +36 -0
- package/esm2015/lib/v1/helpers/maps.helpers.js +46 -0
- package/esm2015/lib/v1/kwikid-agent-dashboard.component.js +177 -0
- package/esm2015/lib/v1/kwikid-agent-dashboard.module.js +120 -0
- package/esm2015/lib/v1/pipes/search-filter.pipe.js +62 -0
- package/esm2015/lib/v1/services/agent.service.js +149 -0
- package/esm2015/lib/v1/services/google-maps.service.js +201 -0
- package/esm2015/lib/v1/services/open-street-maps.service.js +252 -0
- package/esm2015/lib/v2/components/agent-info/agent-info.component.js +20 -0
- package/esm2015/lib/v2/components/agent-info/agent-info.module.js +37 -0
- package/esm2015/lib/v2/components/bottom-sheet/bottom-sheet.component.js +111 -0
- package/esm2015/lib/v2/components/bottom-sheet/bottom-sheet.module.js +41 -0
- package/esm2015/lib/v2/components/components.module.js +79 -0
- package/esm2015/lib/v2/components/map-view/map-view.component.js +39 -0
- package/esm2015/lib/v2/components/map-view/map-view.module.js +37 -0
- package/esm2015/lib/v2/components/primary-actions/primary-actions.component.js +65 -0
- package/esm2015/lib/v2/components/primary-actions/primary-actions.module.js +54 -0
- package/esm2015/lib/v2/components/task-detail/task-detail.component.js +82 -0
- package/esm2015/lib/v2/components/task-detail/task-detail.module.js +41 -0
- package/esm2015/lib/v2/components/task-item/task-item.component.js +107 -0
- package/esm2015/lib/v2/components/task-item/task-item.constant.js +12 -0
- package/esm2015/lib/v2/components/task-item/task-item.module.js +45 -0
- package/esm2015/lib/v2/components/task-item-status/task-item-status.component.js +51 -0
- package/esm2015/lib/v2/components/task-item-status/task-item-status.module.js +19 -0
- package/esm2015/lib/v2/components/task-list/task-list.component.js +186 -0
- package/esm2015/lib/v2/components/task-list/task-list.module.js +57 -0
- package/esm2015/lib/v2/components/task-list-search/task-list-search.component.js +118 -0
- package/esm2015/lib/v2/components/task-list-search/task-list-search.module.js +41 -0
- package/esm2015/lib/v2/components/task-preview/task-preview.component.js +30 -0
- package/esm2015/lib/v2/components/task-preview/task-preview.module.js +37 -0
- package/esm2015/lib/v2/helpers/array.helper.js +10 -0
- package/esm2015/lib/v2/helpers/date.helplers.js +17 -0
- package/esm2015/lib/v2/kwikid-agent-dashboard.component.js +61 -0
- package/esm2015/lib/v2/kwikid-agent-dashboard.module.js +45 -0
- package/esm2015/lib/v2/layout/layout-body/layout-body.component.js +274 -0
- package/esm2015/lib/v2/layout/layout-body/layout-body.module.js +55 -0
- package/esm2015/lib/v2/layout/layout-header/layout-header.component.js +60 -0
- package/esm2015/lib/v2/layout/layout-header/layout-header.module.js +48 -0
- package/esm2015/lib/v2/layout/layout.module.js +18 -0
- package/esm2015/lib/v2/pipes/search-filter.pipe.js +62 -0
- package/fesm2015/kwikid-agent-dashboard.js +3255 -1100
- package/fesm2015/kwikid-agent-dashboard.js.map +1 -1
- package/lib/kwikid-agent-dashboard.component.d.ts +11 -36
- package/lib/kwikid-agent-dashboard.module.d.ts +13 -16
- package/lib/v1/components/action-button/action-button.component.d.ts +18 -0
- package/lib/{components → v1/components}/customer-details/customer-details.component.d.ts +13 -6
- package/lib/{components → v1/components}/customer-list/customer-list.component.d.ts +25 -15
- package/lib/{components → v1/components}/customer-tile/customer-tile.component.d.ts +12 -5
- package/lib/{components → v1/components}/customer-tile/status-pill/status-pill.component.d.ts +6 -2
- package/lib/{components → v1/components}/customer-tile/status-pill/status-pill.definitions.d.ts +1 -1
- package/lib/v1/kwikid-agent-dashboard.component.d.ts +54 -0
- package/lib/v1/kwikid-agent-dashboard.module.d.ts +23 -0
- package/lib/{pipes → v1/pipes}/search-filter.pipe.d.ts +1 -1
- package/lib/{services → v1/services}/agent.service.d.ts +1 -1
- package/lib/{services → v1/services}/google-maps.service.d.ts +4 -4
- package/lib/{services → v1/services}/open-street-maps.service.d.ts +5 -5
- package/lib/v2/components/agent-info/agent-info.component.d.ts +8 -0
- package/lib/v2/components/agent-info/agent-info.module.d.ts +11 -0
- package/lib/v2/components/bottom-sheet/bottom-sheet.component.d.ts +24 -0
- package/lib/v2/components/bottom-sheet/bottom-sheet.module.d.ts +12 -0
- package/lib/v2/components/components.module.d.ts +15 -0
- package/lib/v2/components/map-view/map-view.component.d.ts +10 -0
- package/lib/v2/components/map-view/map-view.module.d.ts +11 -0
- package/lib/v2/components/primary-actions/primary-actions.component.d.ts +14 -0
- package/lib/v2/components/primary-actions/primary-actions.module.d.ts +13 -0
- package/lib/v2/components/task-detail/task-detail.component.d.ts +23 -0
- package/lib/v2/components/task-detail/task-detail.module.d.ts +12 -0
- package/lib/v2/components/task-item/task-item.component.d.ts +23 -0
- package/lib/v2/components/task-item/task-item.constant.d.ts +11 -0
- package/lib/v2/components/task-item/task-item.module.d.ts +13 -0
- package/lib/v2/components/task-item-status/task-item-status.component.d.ts +14 -0
- package/lib/v2/components/task-item-status/task-item-status.module.d.ts +9 -0
- package/lib/v2/components/task-list/task-list.component.d.ts +45 -0
- package/lib/v2/components/task-list/task-list.module.d.ts +16 -0
- package/lib/v2/components/task-list-search/task-list-search.component.d.ts +34 -0
- package/lib/v2/components/task-list-search/task-list-search.module.d.ts +12 -0
- package/lib/v2/components/task-preview/task-preview.component.d.ts +11 -0
- package/lib/v2/components/task-preview/task-preview.module.d.ts +11 -0
- package/lib/v2/helpers/array.helper.d.ts +1 -0
- package/lib/v2/helpers/date.helplers.d.ts +3 -0
- package/lib/v2/kwikid-agent-dashboard.component.d.ts +17 -0
- package/lib/v2/kwikid-agent-dashboard.module.d.ts +13 -0
- package/lib/v2/layout/layout-body/layout-body.component.d.ts +42 -0
- package/lib/v2/layout/layout-body/layout-body.module.d.ts +14 -0
- package/lib/v2/layout/layout-header/layout-header.component.d.ts +20 -0
- package/lib/v2/layout/layout-header/layout-header.module.d.ts +13 -0
- package/lib/v2/layout/layout.module.d.ts +8 -0
- package/lib/v2/pipes/search-filter.pipe.d.ts +25 -0
- package/package.json +2 -2
- package/esm2015/lib/components/customer-details/customer-details.component.js +0 -90
- package/esm2015/lib/components/customer-list/customer-list.component.js +0 -165
- package/esm2015/lib/components/customer-tile/customer-tile.component.js +0 -87
- package/esm2015/lib/components/customer-tile/status-pill/status-pill.component.js +0 -32
- package/esm2015/lib/components/customer-tile/status-pill/status-pill.definitions.js +0 -36
- package/esm2015/lib/helpers/maps.helpers.js +0 -46
- package/esm2015/lib/pipes/search-filter.pipe.js +0 -62
- package/esm2015/lib/services/agent.service.js +0 -153
- package/esm2015/lib/services/google-maps.service.js +0 -201
- package/esm2015/lib/services/open-street-maps.service.js +0 -252
- /package/lib/{helpers → v1/helpers}/maps.helpers.d.ts +0 -0
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { EStatus } from '../components/customer-tile/status-pill/status-pill.definitions';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export class AgentService {
|
|
5
|
-
constructor() {
|
|
6
|
-
this.isListOpen = true;
|
|
7
|
-
this.showMapview = false;
|
|
8
|
-
this.addTaskForm = {
|
|
9
|
-
key: 'ADD_TASK',
|
|
10
|
-
title: 'Add Task',
|
|
11
|
-
fields: [
|
|
12
|
-
{
|
|
13
|
-
key: 'name',
|
|
14
|
-
label: 'Customer Name',
|
|
15
|
-
validators: {
|
|
16
|
-
required: true
|
|
17
|
-
},
|
|
18
|
-
properties: {
|
|
19
|
-
placeholder: 'Please enter the Customer Name',
|
|
20
|
-
readOnly: false,
|
|
21
|
-
case: 'default'
|
|
22
|
-
},
|
|
23
|
-
type: 'text'
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
key: 'phone',
|
|
27
|
-
label: 'Phone Number',
|
|
28
|
-
validators: {
|
|
29
|
-
required: true
|
|
30
|
-
},
|
|
31
|
-
properties: {
|
|
32
|
-
countryCode: '+91',
|
|
33
|
-
removeCountryCodeFromValue: true,
|
|
34
|
-
phoneMaskAfterCountryCode: '##########',
|
|
35
|
-
placeholder: 'Please enter your Mobile Number',
|
|
36
|
-
readOnly: false
|
|
37
|
-
},
|
|
38
|
-
type: 'phone'
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
key: 'address',
|
|
42
|
-
label: 'Address',
|
|
43
|
-
validators: {
|
|
44
|
-
required: true
|
|
45
|
-
},
|
|
46
|
-
properties: {
|
|
47
|
-
placeholder: 'Please enter the Address',
|
|
48
|
-
readOnly: false,
|
|
49
|
-
case: 'default'
|
|
50
|
-
},
|
|
51
|
-
type: 'text'
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
key: 'city',
|
|
55
|
-
label: 'City',
|
|
56
|
-
validators: {
|
|
57
|
-
required: true
|
|
58
|
-
},
|
|
59
|
-
properties: {
|
|
60
|
-
placeholder: 'Please enter the City',
|
|
61
|
-
readOnly: false,
|
|
62
|
-
case: 'default'
|
|
63
|
-
},
|
|
64
|
-
type: 'text'
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
key: 'location',
|
|
68
|
-
label: 'Location URL',
|
|
69
|
-
validators: {
|
|
70
|
-
required: true
|
|
71
|
-
},
|
|
72
|
-
properties: {
|
|
73
|
-
placeholder: 'Please enter the Location URL',
|
|
74
|
-
readOnly: false,
|
|
75
|
-
case: 'default'
|
|
76
|
-
},
|
|
77
|
-
type: 'text'
|
|
78
|
-
}
|
|
79
|
-
],
|
|
80
|
-
properties: {
|
|
81
|
-
header: {
|
|
82
|
-
title: {
|
|
83
|
-
hidden: true,
|
|
84
|
-
label: 'Add Task'
|
|
85
|
-
},
|
|
86
|
-
steps: {
|
|
87
|
-
hidden: true
|
|
88
|
-
},
|
|
89
|
-
logo: {
|
|
90
|
-
hidden: true
|
|
91
|
-
}
|
|
92
|
-
},
|
|
93
|
-
footer: {
|
|
94
|
-
viewFormsButton: {
|
|
95
|
-
hidden: true,
|
|
96
|
-
label: 'View Forms'
|
|
97
|
-
},
|
|
98
|
-
saveButton: {
|
|
99
|
-
hidden: false,
|
|
100
|
-
label: 'Submit'
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
};
|
|
105
|
-
this.notRequiredStatus = [
|
|
106
|
-
EStatus.REJECTED,
|
|
107
|
-
EStatus.AFTER_AUDIT,
|
|
108
|
-
EStatus.COMPLETE,
|
|
109
|
-
EStatus.SESSION_EXPIRED,
|
|
110
|
-
EStatus.KYC_REJECTED,
|
|
111
|
-
EStatus.KYC_RESULT_APPROVED,
|
|
112
|
-
EStatus.KYC_RESULT_REJECTED,
|
|
113
|
-
EStatus.KYC_RESULT_UNDER_REVIEW,
|
|
114
|
-
EStatus.KYC_REQUEST_REJECTED
|
|
115
|
-
];
|
|
116
|
-
}
|
|
117
|
-
ngOnInit() { }
|
|
118
|
-
setAgentConfig(config) {
|
|
119
|
-
this.config = config;
|
|
120
|
-
}
|
|
121
|
-
toggleMapview() {
|
|
122
|
-
this.showMapview = !this.showMapview;
|
|
123
|
-
}
|
|
124
|
-
canStartJourney(status) {
|
|
125
|
-
var _a, _b;
|
|
126
|
-
const noneEditableStatus = (_b = (_a = this.config.dashboard) === null || _a === void 0 ? void 0 : _a.cannotStartJourney) !== null && _b !== void 0 ? _b : this.notRequiredStatus;
|
|
127
|
-
if (noneEditableStatus.includes(status)) {
|
|
128
|
-
return false;
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
return true;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
canPlotMarkers(status) {
|
|
135
|
-
var _a, _b;
|
|
136
|
-
const nonePlottingSessions = (_b = (_a = this.config.dashboard) === null || _a === void 0 ? void 0 : _a.dontPlotMarkers) !== null && _b !== void 0 ? _b : [];
|
|
137
|
-
if (nonePlottingSessions.includes(status)) {
|
|
138
|
-
return false;
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
return true;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
/** @nocollapse */ AgentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AgentService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
146
|
-
/** @nocollapse */ AgentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AgentService, providedIn: 'root' });
|
|
147
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AgentService, decorators: [{
|
|
148
|
-
type: Injectable,
|
|
149
|
-
args: [{
|
|
150
|
-
providedIn: 'root'
|
|
151
|
-
}]
|
|
152
|
-
}], ctorParameters: function () { return []; } });
|
|
153
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWtpZC1hZ2VudC1kYXNoYm9hcmQvc3JjL2xpYi9zZXJ2aWNlcy9hZ2VudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlFQUFpRSxDQUFDOztBQUsxRixNQUFNLE9BQU8sWUFBWTtJQXlIdkI7UUF0SEEsZUFBVSxHQUFHLElBQUksQ0FBQztRQUlsQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUlwQixnQkFBVyxHQUFHO1lBQ1osR0FBRyxFQUFFLFVBQVU7WUFDZixLQUFLLEVBQUUsVUFBVTtZQUNqQixNQUFNLEVBQUU7Z0JBQ047b0JBQ0UsR0FBRyxFQUFFLE1BQU07b0JBQ1gsS0FBSyxFQUFFLGVBQWU7b0JBQ3RCLFVBQVUsRUFBRTt3QkFDVixRQUFRLEVBQUUsSUFBSTtxQkFDZjtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsV0FBVyxFQUFFLGdDQUFnQzt3QkFDN0MsUUFBUSxFQUFFLEtBQUs7d0JBQ2YsSUFBSSxFQUFFLFNBQVM7cUJBQ2hCO29CQUNELElBQUksRUFBRSxNQUFNO2lCQUNiO2dCQUNEO29CQUNFLEdBQUcsRUFBRSxPQUFPO29CQUNaLEtBQUssRUFBRSxjQUFjO29CQUNyQixVQUFVLEVBQUU7d0JBQ1YsUUFBUSxFQUFFLElBQUk7cUJBQ2Y7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLFdBQVcsRUFBRSxLQUFLO3dCQUNsQiwwQkFBMEIsRUFBRSxJQUFJO3dCQUNoQyx5QkFBeUIsRUFBRSxZQUFZO3dCQUN2QyxXQUFXLEVBQUUsaUNBQWlDO3dCQUM5QyxRQUFRLEVBQUUsS0FBSztxQkFDaEI7b0JBQ0QsSUFBSSxFQUFFLE9BQU87aUJBQ2Q7Z0JBQ0Q7b0JBQ0UsR0FBRyxFQUFFLFNB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Q0gsQ0FBQzs7NkhBeEpVLFlBQVk7aUlBQVosWUFBWSxjQUZYLE1BQU07NEZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFU3RhdHVzIH0gZnJvbSAnLi4vY29tcG9uZW50cy9jdXN0b21lci10aWxlL3N0YXR1cy1waWxsL3N0YXR1cy1waWxsLmRlZmluaXRpb25zJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQWdlbnRTZXJ2aWNlIHtcbiAgY29uZmlnO1xuXG4gIGlzTGlzdE9wZW4gPSB0cnVlO1xuXG4gIGlzTW9iaWxlVmlldztcblxuICBzaG93TWFwdmlldyA9IGZhbHNlO1xuXG4gIGN1cnJlbnRUYXNrRGV0YWlscztcblxuICBhZGRUYXNrRm9ybSA9IHtcbiAgICBrZXk6ICdBRERfVEFTSycsXG4gICAgdGl0bGU6ICdBZGQgVGFzaycsXG4gICAgZmllbGRzOiBbXG4gICAgICB7XG4gICAgICAgIGtleTogJ25hbWUnLFxuICAgICAgICBsYWJlbDogJ0N1c3RvbWVyIE5hbWUnLFxuICAgICAgICB2YWxpZGF0b3JzOiB7XG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIHBsYWNlaG9sZGVyOiAnUGxlYXNlIGVudGVyIHRoZSBDdXN0b21lciBOYW1lJyxcbiAgICAgICAgICByZWFkT25seTogZmFsc2UsXG4gICAgICAgICAgY2FzZTogJ2RlZmF1bHQnXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAncGhvbmUnLFxuICAgICAgICBsYWJlbDogJ1Bob25lIE51bWJlcicsXG4gICAgICAgIHZhbGlkYXRvcnM6IHtcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgY291bnRyeUNvZGU6ICcrOTEnLFxuICAgICAgICAgIHJlbW92ZUNvdW50cnlDb2RlRnJvbVZhbHVlOiB0cnVlLFxuICAgICAgICAgIHBob25lTWFza0FmdGVyQ291bnRyeUNvZGU6ICcjIyMjIyMjIyMjJyxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogJ1BsZWFzZSBlbnRlciB5b3VyIE1vYmlsZSBOdW1iZXInLFxuICAgICAgICAgIHJlYWRPbmx5OiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICB0eXBlOiAncGhvbmUnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdhZGRyZXNzJyxcbiAgICAgICAgbGFiZWw6ICdBZGRyZXNzJyxcbiAgICAgICAgdmFsaWRhdG9yczoge1xuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBwbGFjZWhvbGRlcjogJ1BsZWFzZSBlbnRlciB0aGUgQWRkcmVzcycsXG4gICAgICAgICAgcmVhZE9ubHk6IGZhbHNlLFxuICAgICAgICAgIGNhc2U6ICdkZWZhdWx0J1xuICAgICAgICB9LFxuICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ2NpdHknLFxuICAgICAgICBsYWJlbDogJ0NpdHknLFxuICAgICAgICB2YWxpZGF0b3JzOiB7XG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIHBsYWNlaG9sZGVyOiAnUGxlYXNlIGVudGVyIHRoZSBDaXR5JyxcbiAgICAgICAgICByZWFkT25seTogZmFsc2UsXG4gICAgICAgICAgY2FzZTogJ2RlZmF1bHQnXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnbG9jYXRpb24nLFxuICAgICAgICBsYWJlbDogJ0xvY2F0aW9uIFVSTCcsXG4gICAgICAgIHZhbGlkYXRvcnM6IHtcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgcGxhY2Vob2xkZXI6ICdQbGVhc2UgZW50ZXIgdGhlIExvY2F0aW9uIFVSTCcsXG4gICAgICAgICAgcmVhZE9ubHk6IGZhbHNlLFxuICAgICAgICAgIGNhc2U6ICdkZWZhdWx0J1xuICAgICAgICB9LFxuICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgIH1cbiAgICBdLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIGhlYWRlcjoge1xuICAgICAgICB0aXRsZToge1xuICAgICAgICAgIGhpZGRlbjogdHJ1ZSxcbiAgICAgICAgICBsYWJlbDogJ0FkZCBUYXNrJ1xuICAgICAgICB9LFxuICAgICAgICBzdGVwczoge1xuICAgICAgICAgIGhpZGRlbjogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBsb2dvOiB7XG4gICAgICAgICAgaGlkZGVuOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBmb290ZXI6IHtcbiAgICAgICAgdmlld0Zvcm1zQnV0dG9uOiB7XG4gICAgICAgICAgaGlkZGVuOiB0cnVlLFxuICAgICAgICAgIGxhYmVsOiAnVmlldyBGb3JtcydcbiAgICAgICAgfSxcbiAgICAgICAgc2F2ZUJ1dHRvbjoge1xuICAgICAgICAgIGhpZGRlbjogZmFsc2UsXG4gICAgICAgICAgbGFiZWw6ICdTdWJtaXQnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgbm90UmVxdWlyZWRTdGF0dXMgPSBbXG4gICAgRVN0YXR1cy5SRUpFQ1RFRCxcbiAgICBFU3RhdHVzLkFGVEVSX0FVRElULFxuICAgIEVTdGF0dXMuQ09NUExFVEUsXG4gICAgRVN0YXR1cy5TRVNTSU9OX0VYUElSRUQsXG4gICAgRVN0YXR1cy5LWUNfUkVKRUNURUQsXG4gICAgRVN0YXR1cy5LWUNfUkVTVUxUX0FQUFJPVkVELFxuICAgIEVTdGF0dXMuS1lDX1JFU1VMVF9SRUpFQ1RFRCxcbiAgICBFU3RhdHVzLktZQ19SRVNVTFRfVU5ERVJfUkVWSUVXLFxuICAgIEVTdGF0dXMuS1lDX1JFUVVFU1RfUkVKRUNURURcbiAgXTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgbmdPbkluaXQoKSB7fVxuXG4gIHNldEFnZW50Q29uZmlnKGNvbmZpZykge1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICB9XG5cbiAgdG9nZ2xlTWFwdmlldygpIHtcbiAgICB0aGlzLnNob3dNYXB2aWV3ID0gIXRoaXMuc2hvd01hcHZpZXc7XG4gIH1cblxuICBjYW5TdGFydEpvdXJuZXkoc3RhdHVzKSB7XG4gICAgY29uc3Qgbm9uZUVkaXRhYmxlU3RhdHVzID1cbiAgICAgIHRoaXMuY29uZmlnLmRhc2hib2FyZD8uY2Fubm90U3RhcnRKb3VybmV5ID8/IHRoaXMubm90UmVxdWlyZWRTdGF0dXM7XG5cbiAgICBpZiAobm9uZUVkaXRhYmxlU3RhdHVzLmluY2x1ZGVzKHN0YXR1cykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgY2FuUGxvdE1hcmtlcnMoc3RhdHVzKSB7XG4gICAgY29uc3Qgbm9uZVBsb3R0aW5nU2Vzc2lvbnMgPSB0aGlzLmNvbmZpZy5kYXNoYm9hcmQ/LmRvbnRQbG90TWFya2VycyA/PyBbXTtcblxuICAgIGlmIChub25lUGxvdHRpbmdTZXNzaW9ucy5pbmNsdWRlcyhzdGF0dXMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { Injectable, ViewChildren } from '@angular/core';
|
|
3
|
-
import { checkObjectPathExists, getObjectValueFromPath, isNotEmptyArray } from 'kwikid-toolkit';
|
|
4
|
-
import { map } from 'rxjs/operators';
|
|
5
|
-
import { addressConcator, nearestNeighborAlgorithm } from '../helpers/maps.helpers';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "./agent.service";
|
|
8
|
-
import * as i2 from "@angular/google-maps";
|
|
9
|
-
import * as i3 from "@angular/common/http";
|
|
10
|
-
export class GoogleMapsService {
|
|
11
|
-
constructor(agentService, mapDirectionsService, httpClient) {
|
|
12
|
-
this.agentService = agentService;
|
|
13
|
-
this.mapDirectionsService = mapDirectionsService;
|
|
14
|
-
this.httpClient = httpClient;
|
|
15
|
-
this.allMarkers = [];
|
|
16
|
-
}
|
|
17
|
-
// To get Current Position
|
|
18
|
-
getPosition() {
|
|
19
|
-
return new Promise((resolve, reject) => {
|
|
20
|
-
navigator.geolocation.watchPosition((resp) => {
|
|
21
|
-
resolve({
|
|
22
|
-
lng: resp.coords.longitude,
|
|
23
|
-
lat: resp.coords.latitude
|
|
24
|
-
});
|
|
25
|
-
}, (err) => {
|
|
26
|
-
reject(err);
|
|
27
|
-
});
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
// To Initialize Google Maps
|
|
31
|
-
initializeMap() {
|
|
32
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
33
|
-
this.myPosition = yield this.getPosition();
|
|
34
|
-
this.map = {
|
|
35
|
-
zoom: 10,
|
|
36
|
-
center: this.myPosition,
|
|
37
|
-
streetViewControl: false,
|
|
38
|
-
mapTypeControl: false,
|
|
39
|
-
fullscreenControl: false,
|
|
40
|
-
zoomControl: false
|
|
41
|
-
};
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
// To extract Location from the Task Details
|
|
45
|
-
getLocation(task) {
|
|
46
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
47
|
-
return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
|
|
48
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
49
|
-
let encodedAddres;
|
|
50
|
-
// If Fetch Address from Multiple Paths
|
|
51
|
-
if (checkObjectPathExists(this.agentService.config, 'dashboard.taskLocationPaths')) {
|
|
52
|
-
// Get address string from multiple paths
|
|
53
|
-
const config = this.agentService.config.dashboard.taskLocationPaths;
|
|
54
|
-
const address = addressConcator(task, config);
|
|
55
|
-
// Encode the Address in URI
|
|
56
|
-
encodedAddres = encodeURI(address);
|
|
57
|
-
}
|
|
58
|
-
// If Fetch Address from Single Path
|
|
59
|
-
else if (checkObjectPathExists(this.agentService.config, 'dashboard.taskLocationPath')) {
|
|
60
|
-
// Get Address from Single Path
|
|
61
|
-
const config = this.agentService.config.dashboard.taskLocationPath;
|
|
62
|
-
const address = getObjectValueFromPath(task, config);
|
|
63
|
-
// Encode the Address in URI
|
|
64
|
-
encodedAddres = encodeURI(address);
|
|
65
|
-
}
|
|
66
|
-
// Default Address Paths Avaiable
|
|
67
|
-
else {
|
|
68
|
-
const address = (_k = (_j = (_g = (_d = (_c = (_b = (_a = task === null || task === void 0 ? void 0 : task.extras) === null || _a === void 0 ? void 0 : _a.task_details) === null || _b === void 0 ? void 0 : _b.customer_details) === null || _c === void 0 ? void 0 : _c.address) !== null && _d !== void 0 ? _d : (_f = (_e = task === null || task === void 0 ? void 0 : task.task_details) === null || _e === void 0 ? void 0 : _e.customer_details) === null || _f === void 0 ? void 0 : _f.address) !== null && _g !== void 0 ? _g : (_h = task === null || task === void 0 ? void 0 : task.extras) === null || _h === void 0 ? void 0 : _h.address) !== null && _j !== void 0 ? _j : task === null || task === void 0 ? void 0 : task.address) !== null && _k !== void 0 ? _k : '';
|
|
69
|
-
// Encode the Address in URI
|
|
70
|
-
encodedAddres = encodeURI(address);
|
|
71
|
-
}
|
|
72
|
-
// URL to geocode Address String to Latitude & Longitude
|
|
73
|
-
const url = `https://maps.googleapis.com/maps/api/geocode/json?key=${this.apiKey}&address=${encodedAddres}`;
|
|
74
|
-
const response = yield fetch(url);
|
|
75
|
-
const data = yield response.json();
|
|
76
|
-
// Set Location {lat: LAT, lng: LNG} from address geocoded
|
|
77
|
-
const isValidLocation = isNotEmptyArray(data === null || data === void 0 ? void 0 : data.results);
|
|
78
|
-
const location = isValidLocation
|
|
79
|
-
? (_m = (_l = data === null || data === void 0 ? void 0 : data.results[0]) === null || _l === void 0 ? void 0 : _l.geometry) === null || _m === void 0 ? void 0 : _m.location
|
|
80
|
-
: { lat: null, lng: null };
|
|
81
|
-
// Set Location validation & Google Maps URL
|
|
82
|
-
location['isValidLocation'] = isValidLocation;
|
|
83
|
-
location['googleMapsUrl'] = `https://www.google.com/maps/place/${location === null || location === void 0 ? void 0 : location.lat},${location === null || location === void 0 ? void 0 : location.lng}`;
|
|
84
|
-
resolve(location);
|
|
85
|
-
}));
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
// Get Tasks | Markers Location Co Ordinates
|
|
89
|
-
getMarkersLocation(myMarker, tasks) {
|
|
90
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
91
|
-
return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
|
|
92
|
-
let markers = [];
|
|
93
|
-
markers.push(myMarker);
|
|
94
|
-
const promises = tasks.map((task) => __awaiter(this, void 0, void 0, function* () {
|
|
95
|
-
const marker = yield this.getLocation(task);
|
|
96
|
-
task = Object.assign(Object.assign({}, task), marker);
|
|
97
|
-
markers.push(task);
|
|
98
|
-
}));
|
|
99
|
-
yield Promise.all(promises);
|
|
100
|
-
resolve(markers);
|
|
101
|
-
}));
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
// Plot All Markers
|
|
105
|
-
plotAllMarkers(tasks) {
|
|
106
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
107
|
-
return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
|
|
108
|
-
let path = [];
|
|
109
|
-
const promises = tasks.map((task) => {
|
|
110
|
-
if (task === null || task === void 0 ? void 0 : task.isValidLocation) {
|
|
111
|
-
path.push({
|
|
112
|
-
location: task,
|
|
113
|
-
stopover: true
|
|
114
|
-
});
|
|
115
|
-
this.allMarkers.push(task);
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
yield Promise.all(promises);
|
|
119
|
-
resolve(path);
|
|
120
|
-
}));
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
// To Plot Directions for All Tasks
|
|
124
|
-
plotDirectionsForAllTasks(tasks) {
|
|
125
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
126
|
-
this.allMarkers = [];
|
|
127
|
-
// Create Agent Marker & Plot It.
|
|
128
|
-
const myMarker = {
|
|
129
|
-
lat: this.myPosition.lat,
|
|
130
|
-
lng: this.myPosition.lng,
|
|
131
|
-
title: 0,
|
|
132
|
-
color: 'red'
|
|
133
|
-
};
|
|
134
|
-
// Get All Markers Location Co Ordinates
|
|
135
|
-
const markers = yield this.getMarkersLocation(myMarker, tasks);
|
|
136
|
-
// Run Algorithm to get optimized Routes
|
|
137
|
-
const startingPoint = markers[0];
|
|
138
|
-
const unvisitedWaypoints = markers.slice(1);
|
|
139
|
-
const optimizedRoute = nearestNeighborAlgorithm(startingPoint, unvisitedWaypoints);
|
|
140
|
-
// Sort All Tasks as per optimized routes
|
|
141
|
-
tasks = optimizedRoute.slice(1);
|
|
142
|
-
this.allMarkers = [myMarker];
|
|
143
|
-
// Plot all markers & get path for directions
|
|
144
|
-
const path = yield this.plotAllMarkers(tasks);
|
|
145
|
-
// Set Directions in Google Maps
|
|
146
|
-
const request = {
|
|
147
|
-
origin: this.myPosition,
|
|
148
|
-
destination: this.myPosition,
|
|
149
|
-
waypoints: path,
|
|
150
|
-
travelMode: google.maps.TravelMode.DRIVING
|
|
151
|
-
};
|
|
152
|
-
this.directionsRenderOption = {
|
|
153
|
-
suppressMarkers: true
|
|
154
|
-
};
|
|
155
|
-
this.directionsResults$ = this.mapDirectionsService
|
|
156
|
-
.route(request)
|
|
157
|
-
.pipe(map((response) => response.result));
|
|
158
|
-
this.directionsResults$.subscribe((val) => { });
|
|
159
|
-
this.allDirectionsResults$ = this.directionsResults$;
|
|
160
|
-
return tasks;
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
// To Plot Directions for Selected Tasks
|
|
164
|
-
plotDirectionsForSelectedTask(task) {
|
|
165
|
-
if (task != null) {
|
|
166
|
-
const taskMarker = task;
|
|
167
|
-
// If Location is Available in Task Details
|
|
168
|
-
if (taskMarker === null || taskMarker === void 0 ? void 0 : taskMarker.isValidLocation) {
|
|
169
|
-
const request = {
|
|
170
|
-
origin: this.myPosition,
|
|
171
|
-
destination: taskMarker,
|
|
172
|
-
optimizeWaypoints: true,
|
|
173
|
-
travelMode: google.maps.TravelMode.DRIVING
|
|
174
|
-
};
|
|
175
|
-
this.directionsResults$ = this.mapDirectionsService
|
|
176
|
-
.route(request)
|
|
177
|
-
.pipe(map((response) => response.result));
|
|
178
|
-
this.directionsResults$.subscribe();
|
|
179
|
-
}
|
|
180
|
-
else {
|
|
181
|
-
alert('No Location Available');
|
|
182
|
-
this.directionsResults$ = this.allDirectionsResults$;
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
else {
|
|
186
|
-
this.directionsResults$ = this.allDirectionsResults$;
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
/** @nocollapse */ GoogleMapsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: GoogleMapsService, deps: [{ token: i1.AgentService }, { token: i2.MapDirectionsService }, { token: i3.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
191
|
-
/** @nocollapse */ GoogleMapsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: GoogleMapsService, providedIn: 'root' });
|
|
192
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: GoogleMapsService, decorators: [{
|
|
193
|
-
type: Injectable,
|
|
194
|
-
args: [{
|
|
195
|
-
providedIn: 'root'
|
|
196
|
-
}]
|
|
197
|
-
}], ctorParameters: function () { return [{ type: i1.AgentService }, { type: i2.MapDirectionsService }, { type: i3.HttpClient }]; }, propDecorators: { directionsRenders: [{
|
|
198
|
-
type: ViewChildren,
|
|
199
|
-
args: ['directionsRender']
|
|
200
|
-
}] } });
|
|
201
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLW1hcHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWtpZC1hZ2VudC1kYXNoYm9hcmQvc3JjL2xpYi9zZXJ2aWNlcy9nb29nbGUtbWFwcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWMsVUFBVSxFQUFhLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0QixlQUFlLEVBQ2hCLE1BQU0sZ0JBQWdCLENBQUM7QUFJeEIsT0FBTyxFQUFjLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE9BQU8sRUFDTCxlQUFlLEVBQ2Ysd0JBQXdCLEVBQ3pCLE1BQU0seUJBQXlCLENBQUM7Ozs7O0FBSWpDLE1BQU0sT0FBTyxpQkFBaUI7SUFlNUIsWUFDVSxZQUEwQixFQUMzQixvQkFBMEMsRUFDMUMsVUFBc0I7UUFGckIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDM0IseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBYi9CLGVBQVUsR0FBUSxFQUFFLENBQUM7SUFjbEIsQ0FBQztJQUVKLDBCQUEwQjtJQUMxQixXQUFXO1FBQ1QsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxTQUFTLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FDakMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDUCxPQUFPLENBQUM7b0JBQ04sR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUztvQkFDMUIsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUTtpQkFDMUIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ04sTUFBTSxDQUFDLEdB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RUFBRTtZQUNoQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFFeEIsMkNBQTJDO1lBQzNDLElBQUksVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLGVBQWUsRUFBRTtnQkFDL0IsTUFBTSxPQUFPLEdBQWtDO29CQUM3QyxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVU7b0JBQ3ZCLFdBQVcsRUFBRSxVQUFVO29CQUN2QixpQkFBaUIsRUFBRSxJQUFJO29CQUN2QixVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTztpQkFDM0MsQ0FBQztnQkFFRixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQjtxQkFDaEQsS0FBSyxDQUFDLE9BQU8sQ0FBQztxQkFDZCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFFNUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQ3JDO2lCQUFNO2dCQUNMLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO2FBQ3REO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7U0FDdEQ7SUFDSCxDQUFDOztrSUE3T1UsaUJBQWlCO3NJQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs0RkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COytKQVltQyxpQkFBaUI7c0JBQWxELFlBQVk7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgSW5qZWN0YWJsZSwgUXVlcnlMaXN0LCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFnZW50U2VydmljZSB9IGZyb20gJy4vYWdlbnQuc2VydmljZSc7XG5pbXBvcnQge1xuICBjaGVja09iamVjdFBhdGhFeGlzdHMsXG4gIGdldE9iamVjdFZhbHVlRnJvbVBhdGgsXG4gIGlzTm90RW1wdHlBcnJheVxufSBmcm9tICdrd2lraWQtdG9vbGtpdCc7XG5cbmltcG9ydCB7IE1hcERpcmVjdGlvbnNTZXJ2aWNlIH0gZnJvbSAnQGFuZ3VsYXIvZ29vZ2xlLW1hcHMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge1xuICBhZGRyZXNzQ29uY2F0b3IsXG4gIG5lYXJlc3ROZWlnaGJvckFsZ29yaXRobVxufSBmcm9tICcuLi9oZWxwZXJzL21hcHMuaGVscGVycyc7XG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBHb29nbGVNYXBzU2VydmljZSB7XG4gIG15UG9zaXRpb247XG4gIG1hcDogYW55O1xuXG4gIGFwaUtleTogYW55O1xuICBhbGxNYXJrZXJzOiBhbnkgPSBbXTtcblxuICBkaXJlY3Rpb25zUmVuZGVyT3B0aW9uOiBhbnk7XG4gIGRpcmVjdGlvbnNSZXN1bHRzJDogYW55O1xuICBhbGxEaXJlY3Rpb25zUmVzdWx0cyQ6IGFueTtcblxuICBAVmlld0NoaWxkcmVuKCdkaXJlY3Rpb25zUmVuZGVyJykgZGlyZWN0aW9uc1JlbmRlcnM6IFF1ZXJ5TGlzdDxcbiAgICBFbGVtZW50UmVmPGdvb2dsZS5tYXBzLkRpcmVjdGlvbnNSZW5kZXJlcj5cbiAgPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFnZW50U2VydmljZTogQWdlbnRTZXJ2aWNlLFxuICAgIHB1YmxpYyBtYXBEaXJlY3Rpb25zU2VydmljZTogTWFwRGlyZWN0aW9uc1NlcnZpY2UsXG4gICAgcHVibGljIGh0dHBDbGllbnQ6IEh0dHBDbGllbnRcbiAgKSB7fVxuXG4gIC8vIFRvIGdldCBDdXJyZW50IFBvc2l0aW9uXG4gIGdldFBvc2l0aW9uKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uKFxuICAgICAgICAocmVzcCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgbG5nOiByZXNwLmNvb3Jkcy5sb25naXR1ZGUsXG4gICAgICAgICAgICBsYXQ6IHJlc3AuY29vcmRzLmxhdGl0dWRlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFRvIEluaXRpYWxpemUgR29vZ2xlIE1hcHNcbiAgYXN5bmMgaW5pdGlhbGl6ZU1hcCgpIHtcbiAgICB0aGlzLm15UG9zaXRpb24gPSBhd2FpdCB0aGlzLmdldFBvc2l0aW9uKCk7XG4gICAgdGhpcy5tYXAgPSB7XG4gICAgICB6b29tOiAxMCxcbiAgICAgIGNlbnRlcjogdGhpcy5teVBvc2l0aW9uLFxuICAgICAgc3RyZWV0Vmlld0NvbnRyb2w6IGZhbHNlLFxuICAgICAgbWFwVHlwZUNvbnRyb2w6IGZhbHNlLFxuICAgICAgZnVsbHNjcmVlbkNvbnRyb2w6IGZhbHNlLFxuICAgICAgem9vbUNvbnRyb2w6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIC8vIFRvIGV4dHJhY3QgTG9jYXRpb24gZnJvbSB0aGUgVGFzayBEZXRhaWxzXG4gIGFzeW5jIGdldExvY2F0aW9uKHRhc2spIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcbiAgICAgIGxldCBlbmNvZGVkQWRkcmVzO1xuXG4gICAgICAvLyBJZiBGZXRjaCBBZGRyZXNzIGZyb20gTXVsdGlwbGUgUGF0aHNcbiAgICAgIGlmIChcbiAgICAgICAgY2hlY2tPYmplY3RQYXRoRXhpc3RzKFxuICAgICAgICAgIHRoaXMuYWdlbnRTZXJ2aWNlLmNvbmZpZyxcbiAgICAgICAgICAnZGFzaGJvYXJkLnRhc2tMb2NhdGlvblBhdGhzJ1xuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgLy8gR2V0IGFkZHJlc3Mgc3RyaW5nIGZyb20gbXVsdGlwbGUgcGF0aHNcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5hZ2VudFNlcnZpY2UuY29uZmlnLmRhc2hib2FyZC50YXNrTG9jYXRpb25QYXRocztcbiAgICAgICAgY29uc3QgYWRkcmVzcyA9IGFkZHJlc3NDb25jYXRvcih0YXNrLCBjb25maWcpO1xuXG4gICAgICAgIC8vIEVuY29kZSB0aGUgQWRkcmVzcyBpbiBVUklcbiAgICAgICAgZW5jb2RlZEFkZHJlcyA9IGVuY29kZVVSSShhZGRyZXNzKTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgRmV0Y2ggQWRkcmVzcyBmcm9tIFNpbmdsZSBQYXRoXG4gICAgICBlbHNlIGlmIChcbiAgICAgICAgY2hlY2tPYmplY3RQYXRoRXhpc3RzKFxuICAgICAgICAgIHRoaXMuYWdlbnRTZXJ2aWNlLmNvbmZpZyxcbiAgICAgICAgICAnZGFzaGJvYXJkLnRhc2tMb2NhdGlvblBhdGgnXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICAvLyBHZXQgQWRkcmVzcyBmcm9tIFNpbmdsZSBQYXRoXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuYWdlbnRTZXJ2aWNlLmNvbmZpZy5kYXNoYm9hcmQudGFza0xvY2F0aW9uUGF0aDtcbiAgICAgICAgY29uc3QgYWRkcmVzcyA9IGdldE9iamVjdFZhbHVlRnJvbVBhdGgodGFzaywgY29uZmlnKTtcblxuICAgICAgICAvLyBFbmNvZGUgdGhlIEFkZHJlc3MgaW4gVVJJXG4gICAgICAgIGVuY29kZWRBZGRyZXMgPSBlbmNvZGVVUkkoYWRkcmVzcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIERlZmF1bHQgQWRkcmVzcyBQYXRocyBBdmFpYWJsZVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IGFkZHJlc3MgPVxuICAgICAgICAgIHRhc2s/LmV4dHJhcz8udGFza19kZXRhaWxzPy5jdXN0b21lcl9kZXRhaWxzPy5hZGRyZXNzID8/XG4gICAgICAgICAgdGFzaz8udGFza19kZXRhaWxzPy5jdXN0b21lcl9kZXRhaWxzPy5hZGRyZXNzID8/XG4gICAgICAgICAgdGFzaz8uZXh0cmFzPy5hZGRyZXNzID8/XG4gICAgICAgICAgdGFzaz8uYWRkcmVzcyA/P1xuICAgICAgICAgICcnO1xuXG4gICAgICAgIC8vIEVuY29kZSB0aGUgQWRkcmVzcyBpbiBVUklcbiAgICAgICAgZW5jb2RlZEFkZHJlcyA9IGVuY29kZVVSSShhZGRyZXNzKTtcbiAgICAgIH1cblxuICAgICAgLy8gVVJMIHRvIGdlb2NvZGUgQWRkcmVzcyBTdHJpbmcgdG8gTGF0aXR1ZGUgJiBMb25naXR1ZGVcbiAgICAgIGNvbnN0IHVybCA9IGBodHRwczovL21hcHMuZ29vZ2xlYXBpcy5jb20vbWFwcy9hcGkvZ2VvY29kZS9qc29uP2tleT0ke3RoaXMuYXBpS2V5fSZhZGRyZXNzPSR7ZW5jb2RlZEFkZHJlc31gO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCk7XG4gICAgICBjb25zdCBkYXRhOiBhbnkgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgICAgIC8vIFNldCBMb2NhdGlvbiB7bGF0OiBMQVQsIGxuZzogTE5HfSBmcm9tIGFkZHJlc3MgZ2VvY29kZWRcbiAgICAgIGNvbnN0IGlzVmFsaWRMb2NhdGlvbiA9IGlzTm90RW1wdHlBcnJheShkYXRhPy5yZXN1bHRzKTtcbiAgICAgIGNvbnN0IGxvY2F0aW9uID0gaXNWYWxpZExvY2F0aW9uXG4gICAgICAgID8gZGF0YT8ucmVzdWx0c1swXT8uZ2VvbWV0cnk/LmxvY2F0aW9uXG4gICAgICAgIDoge2xhdDogbnVsbCwgbG5nOiBudWxsfTtcblxuICAgICAgLy8gU2V0IExvY2F0aW9uIHZhbGlkYXRpb24gJiBHb29nbGUgTWFwcyBVUkxcbiAgICAgIGxvY2F0aW9uWydpc1ZhbGlkTG9jYXRpb24nXSA9IGlzVmFsaWRMb2NhdGlvbjtcbiAgICAgIGxvY2F0aW9uW1xuICAgICAgICAnZ29vZ2xlTWFwc1VybCdcbiAgICAgIF0gPSBgaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9tYXBzL3BsYWNlLyR7bG9jYXRpb24/LmxhdH0sJHtsb2NhdGlvbj8ubG5nfWA7XG5cbiAgICAgIHJlc29sdmUobG9jYXRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gR2V0IFRhc2tzIHwgTWFya2VycyBMb2NhdGlvbiBDbyBPcmRpbmF0ZXNcbiAgYXN5bmMgZ2V0TWFya2Vyc0xvY2F0aW9uKG15TWFya2VyLCB0YXNrcykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xuICAgICAgbGV0IG1hcmtlcnMgPSBbXTtcbiAgICAgIG1hcmtlcnMucHVzaChteU1hcmtlcik7XG4gICAgICBjb25zdCBwcm9taXNlcyA9IHRhc2tzLm1hcChhc3luYyAodGFzaykgPT4ge1xuICAgICAgICBjb25zdCBtYXJrZXI6IGFueSA9IGF3YWl0IHRoaXMuZ2V0TG9jYXRpb24odGFzayk7XG4gICAgICAgIHRhc2sgPSB7IC4uLnRhc2ssIC4uLm1hcmtlciB9O1xuICAgICAgICBtYXJrZXJzLnB1c2godGFzayk7XG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXG4gICAgICByZXNvbHZlKG1hcmtlcnMpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gUGxvdCBBbGwgTWFya2Vyc1xuICBhc3luYyBwbG90QWxsTWFya2Vycyh0YXNrcykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xuICAgICAgbGV0IHBhdGggPSBbXTtcbiAgICAgIGNvbnN0IHByb21pc2VzID0gdGFza3MubWFwKCh0YXNrKSA9PiB7XG4gICAgICAgIGlmICh0YXNrPy5pc1ZhbGlkTG9jYXRpb24pIHtcbiAgICAgICAgICBwYXRoLnB1c2goe1xuICAgICAgICAgICAgbG9jYXRpb246IHRhc2ssXG4gICAgICAgICAgICBzdG9wb3ZlcjogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuYWxsTWFya2Vycy5wdXNoKHRhc2spO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXG4gICAgICByZXNvbHZlKHBhdGgpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gVG8gUGxvdCBEaXJlY3Rpb25zIGZvciBBbGwgVGFza3NcbiAgYXN5bmMgcGxvdERpcmVjdGlvbnNGb3JBbGxUYXNrcyh0YXNrcykge1xuICAgIHRoaXMuYWxsTWFya2VycyA9IFtdO1xuXG4gICAgLy8gQ3JlYXRlIEFnZW50IE1hcmtlciAmIFBsb3QgSXQuXG4gICAgY29uc3QgbXlNYXJrZXIgPSB7XG4gICAgICBsYXQ6IHRoaXMubXlQb3NpdGlvbi5sYXQsXG4gICAgICBsbmc6IHRoaXMubXlQb3NpdGlvbi5sbmcsXG4gICAgICB0aXRsZTogMCxcbiAgICAgIGNvbG9yOiAncmVkJ1xuICAgIH07XG5cbiAgICAvLyBHZXQgQWxsIE1hcmtlcnMgTG9jYXRpb24gQ28gT3JkaW5hdGVzXG4gICAgY29uc3QgbWFya2VyczogYW55ID0gYXdhaXQgdGhpcy5nZXRNYXJrZXJzTG9jYXRpb24obXlNYXJrZXIsIHRhc2tzKTtcblxuICAgIC8vIFJ1biBBbGdvcml0aG0gdG8gZ2V0IG9wdGltaXplZCBSb3V0ZXNcbiAgICBjb25zdCBzdGFydGluZ1BvaW50ID0gbWFya2Vyc1swXTtcbiAgICBjb25zdCB1bnZpc2l0ZWRXYXlwb2ludHMgPSBtYXJrZXJzLnNsaWNlKDEpO1xuICAgIGNvbnN0IG9wdGltaXplZFJvdXRlID0gbmVhcmVzdE5laWdoYm9yQWxnb3JpdGhtKFxuICAgICAgc3RhcnRpbmdQb2ludCxcbiAgICAgIHVudmlzaXRlZFdheXBvaW50c1xuICAgICk7XG5cbiAgICAvLyBTb3J0IEFsbCBUYXNrcyBhcyBwZXIgb3B0aW1pemVkIHJvdXRlc1xuICAgIHRhc2tzID0gb3B0aW1pemVkUm91dGUuc2xpY2UoMSk7XG4gICAgdGhpcy5hbGxNYXJrZXJzID0gW215TWFya2VyXTtcblxuICAgIC8vIFBsb3QgYWxsIG1hcmtlcnMgJiBnZXQgcGF0aCBmb3IgZGlyZWN0aW9uc1xuICAgIGNvbnN0IHBhdGg6IGFueSA9IGF3YWl0IHRoaXMucGxvdEFsbE1hcmtlcnModGFza3MpO1xuXG4gICAgLy8gU2V0IERpcmVjdGlvbnMgaW4gR29vZ2xlIE1hcHNcbiAgICBjb25zdCByZXF1ZXN0OiBnb29nbGUubWFwcy5EaXJlY3Rpb25zUmVxdWVzdCA9IHtcbiAgICAgIG9yaWdpbjogdGhpcy5teVBvc2l0aW9uLFxuICAgICAgZGVzdGluYXRpb246IHRoaXMubXlQb3NpdGlvbixcbiAgICAgIHdheXBvaW50czogcGF0aCxcbiAgICAgIHRyYXZlbE1vZGU6IGdvb2dsZS5tYXBzLlRyYXZlbE1vZGUuRFJJVklOR1xuICAgIH07XG5cbiAgICB0aGlzLmRpcmVjdGlvbnNSZW5kZXJPcHRpb24gPSB7XG4gICAgICBzdXBwcmVzc01hcmtlcnM6IHRydWVcbiAgICB9O1xuXG4gICAgdGhpcy5kaXJlY3Rpb25zUmVzdWx0cyQgPSB0aGlzLm1hcERpcmVjdGlvbnNTZXJ2aWNlXG4gICAgICAucm91dGUocmVxdWVzdClcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2UpID0+IHJlc3BvbnNlLnJlc3VsdCkpO1xuXG4gICAgdGhpcy5kaXJlY3Rpb25zUmVzdWx0cyQuc3Vic2NyaWJlKCh2YWwpID0+IHt9KTtcblxuICAgIHRoaXMuYWxsRGlyZWN0aW9uc1Jlc3VsdHMkID0gdGhpcy5kaXJlY3Rpb25zUmVzdWx0cyQ7XG5cbiAgICByZXR1cm4gdGFza3M7XG4gIH1cblxuICAvLyBUbyBQbG90IERpcmVjdGlvbnMgZm9yIFNlbGVjdGVkIFRhc2tzXG4gIHBsb3REaXJlY3Rpb25zRm9yU2VsZWN0ZWRUYXNrKHRhc2spIHtcbiAgICBpZiAodGFzayAhPSBudWxsKSB7XG4gICAgICBjb25zdCB0YXNrTWFya2VyID0gdGFzaztcblxuICAgICAgLy8gSWYgTG9jYXRpb24gaXMgQXZhaWxhYmxlIGluIFRhc2sgRGV0YWlsc1xuICAgICAgaWYgKHRhc2tNYXJrZXI/LmlzVmFsaWRMb2NhdGlvbikge1xuICAgICAgICBjb25zdCByZXF1ZXN0OiBnb29nbGUubWFwcy5EaXJlY3Rpb25zUmVxdWVzdCA9IHtcbiAgICAgICAgICBvcmlnaW46IHRoaXMubXlQb3NpdGlvbixcbiAgICAgICAgICBkZXN0aW5hdGlvbjogdGFza01hcmtlcixcbiAgICAgICAgICBvcHRpbWl6ZVdheXBvaW50czogdHJ1ZSxcbiAgICAgICAgICB0cmF2ZWxNb2RlOiBnb29nbGUubWFwcy5UcmF2ZWxNb2RlLkRSSVZJTkdcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmRpcmVjdGlvbnNSZXN1bHRzJCA9IHRoaXMubWFwRGlyZWN0aW9uc1NlcnZpY2VcbiAgICAgICAgICAucm91dGUocmVxdWVzdClcbiAgICAgICAgICAucGlwZShtYXAoKHJlc3BvbnNlKSA9PiByZXNwb25zZS5yZXN1bHQpKTtcblxuICAgICAgICB0aGlzLmRpcmVjdGlvbnNSZXN1bHRzJC5zdWJzY3JpYmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsZXJ0KCdObyBMb2NhdGlvbiBBdmFpbGFibGUnKTtcbiAgICAgICAgdGhpcy5kaXJlY3Rpb25zUmVzdWx0cyQgPSB0aGlzLmFsbERpcmVjdGlvbnNSZXN1bHRzJDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXJlY3Rpb25zUmVzdWx0cyQgPSB0aGlzLmFsbERpcmVjdGlvbnNSZXN1bHRzJDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|