tango-app-ui-store-builder 1.0.46 → 1.0.48
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/esm2022/lib/components/collection-update-ai/collection-update-ai.component.mjs +3 -3
- package/esm2022/lib/components/collection-update-ai/components/dynamic-filter/dynamic-filter.component.mjs +183 -0
- package/esm2022/lib/components/collection-update-ai/components/store-dropdown/store-dropdown.component.mjs +211 -0
- package/esm2022/lib/components/collection-update-ai/components/store-fixture/store-fixture.component.mjs +422 -0
- package/esm2022/lib/components/collection-update-ai/components/store-select/store-select.component.mjs +148 -0
- package/esm2022/lib/components/collection-update-ai/find-replace-layout/cancel-confirmation-modal/cancel-confirmation-modal.component.mjs +20 -0
- package/esm2022/lib/components/collection-update-ai/find-replace-layout/find-replace-layout.component.mjs +359 -0
- package/esm2022/lib/components/collection-update-ai/find-replace-layout/prepare-template/batch-confirmation-modal/batch-confirmation-modal.component.mjs +23 -0
- package/esm2022/lib/components/collection-update-ai/find-replace-layout/prepare-template/prepare-template.component.mjs +2524 -0
- package/esm2022/lib/components/collection-update-ai/find-replace-layout/review-replace/approve-complete-modal/approve-complete-modal.component.mjs +66 -0
- package/esm2022/lib/components/collection-update-ai/find-replace-layout/review-replace/fixture-before-after/fixture-before-after.component.mjs +85 -0
- package/esm2022/lib/components/collection-update-ai/find-replace-layout/review-replace/review-replace.component.mjs +2039 -0
- package/esm2022/lib/components/collection-update-ai/find-replace-table/find-replace-table.component.mjs +433 -0
- package/esm2022/lib/components/collection-update-ai/find-replace-table/reschedule-modal/reschedule-modal.component.mjs +76 -0
- package/esm2022/lib/components/collection-update-ai/models/find-replace.model.mjs +2 -0
- package/esm2022/lib/components/collection-update-ai/services/data.service.mjs +291 -0
- package/esm2022/lib/components/create-fixture/create-fixture.component.mjs +233 -138
- package/esm2022/lib/components/fixture-template/template-assign-stores/preview-modal/preview-modal.component.mjs +4 -2
- package/esm2022/lib/components/fixture-template/template-assign-stores/template-assign-stores.component.mjs +4 -2
- package/esm2022/lib/components/fixture-template/template-basic-details/template-basic-details.component.mjs +40 -4
- package/esm2022/lib/components/fixture-template/template-products/template-products.component.mjs +3 -3
- package/esm2022/lib/components/fixture-template/template-summary/template-summary.component.mjs +3 -3
- package/esm2022/lib/components/fixture-template/template-vms/template-vms.component.mjs +108 -79
- package/esm2022/lib/components/fixture-template-table/fixture-template-table.component.mjs +33 -4
- package/esm2022/lib/components/fixture-template-tree/fixture-template-tree.component.mjs +7 -3
- package/esm2022/lib/components/manage-plano/rollout-table/rollout-table.component.mjs +25 -3
- package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +4 -2
- package/esm2022/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.mjs +27 -4
- package/esm2022/lib/components/manage-store-plano/template-products/template-products.component.mjs +3 -3
- package/esm2022/lib/components/manage-store-plano/template-vms/template-vms.component.mjs +10 -14
- package/esm2022/lib/components/manage-store-plano/verification-feedback/editable-fixture/editable-fixture.component.mjs +3 -3
- package/esm2022/lib/components/manage-store-plano/verification-feedback/verification-feedback.component.mjs +3 -3
- package/esm2022/lib/components/planogram/merch-compliance/fixture-products/fixture-products.component.mjs +75 -31
- package/esm2022/lib/components/planogram/merch-compliance/merch-compliance.component.mjs +7 -8
- package/esm2022/lib/components/planogram/merch-compliance/product-locator/misplaced-product-fixture/misplaced-product-fixture.component.mjs +234 -0
- package/esm2022/lib/components/planogram/merch-compliance/product-locator/product-locator.component.mjs +1110 -0
- package/esm2022/lib/components/planogram/merch-compliance/product-locator/product-zone-locator/product-zone-locator.component.mjs +52 -0
- package/esm2022/lib/components/planogram/merch-compliance/zone-products/zone-products.component.mjs +36 -10
- package/esm2022/lib/components/planogram/plano-analytics/analytics-popup/analytics-popup.component.mjs +68 -0
- package/esm2022/lib/components/planogram/plano-analytics/date-range-picker/date-range-picker.component.mjs +92 -0
- package/esm2022/lib/components/planogram/plano-analytics/fixture-analytics/fixture-analytics.component.mjs +645 -0
- package/esm2022/lib/components/planogram/plano-analytics/plano-analytics.component.mjs +1276 -0
- package/esm2022/lib/components/planogram/plano-details-parent/plano-details-parent.component.mjs +33 -15
- package/esm2022/lib/components/planogram/plano-overview/fixture-overview/fixture-overview.component.mjs +41 -35
- package/esm2022/lib/components/planogram/plano-overview/plano-comparison/plano-comparison.component.mjs +8 -4
- package/esm2022/lib/components/planogram/plano-overview/plano-overview.component.mjs +19 -12
- package/esm2022/lib/components/planogram/plano-table/plano-table.component.mjs +3 -3
- package/esm2022/lib/components/store-plano/store-plano-tree-view/store-plano-tree-view.component.mjs +3 -2
- package/esm2022/lib/components/store-plano/store-plano.component.mjs +4 -2
- package/esm2022/lib/interfaces/fixture-library.interface.mjs +1 -1
- package/esm2022/lib/services/store-builder.service.mjs +49 -1
- package/esm2022/lib/tango-store-builder-routing.module.mjs +23 -1
- package/esm2022/lib/tango-store-builder.module.mjs +42 -5
- package/fesm2022/tango-app-ui-store-builder.mjs +12677 -2064
- package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
- package/lib/components/collection-update-ai/components/dynamic-filter/dynamic-filter.component.d.ts +51 -0
- package/lib/components/collection-update-ai/components/store-dropdown/store-dropdown.component.d.ts +36 -0
- package/lib/components/collection-update-ai/components/store-fixture/store-fixture.component.d.ts +50 -0
- package/lib/components/collection-update-ai/components/store-select/store-select.component.d.ts +33 -0
- package/lib/components/collection-update-ai/find-replace-layout/cancel-confirmation-modal/cancel-confirmation-modal.component.d.ts +9 -0
- package/lib/components/collection-update-ai/find-replace-layout/find-replace-layout.component.d.ts +58 -0
- package/lib/components/collection-update-ai/find-replace-layout/prepare-template/batch-confirmation-modal/batch-confirmation-modal.component.d.ts +10 -0
- package/lib/components/collection-update-ai/find-replace-layout/prepare-template/prepare-template.component.d.ts +141 -0
- package/lib/components/collection-update-ai/find-replace-layout/review-replace/approve-complete-modal/approve-complete-modal.component.d.ts +18 -0
- package/lib/components/collection-update-ai/find-replace-layout/review-replace/fixture-before-after/fixture-before-after.component.d.ts +19 -0
- package/lib/components/collection-update-ai/find-replace-layout/review-replace/review-replace.component.d.ts +116 -0
- package/lib/components/collection-update-ai/find-replace-table/find-replace-table.component.d.ts +63 -0
- package/lib/components/collection-update-ai/find-replace-table/reschedule-modal/reschedule-modal.component.d.ts +19 -0
- package/lib/components/collection-update-ai/models/find-replace.model.d.ts +55 -0
- package/lib/components/collection-update-ai/services/data.service.d.ts +70 -0
- package/lib/components/create-fixture/create-fixture.component.d.ts +15 -14
- package/lib/components/fixture-template/template-basic-details/template-basic-details.component.d.ts +2 -0
- package/lib/components/fixture-template/template-vms/template-vms.component.d.ts +12 -12
- package/lib/components/fixture-template-table/fixture-template-table.component.d.ts +2 -0
- package/lib/components/manage-plano/rollout-table/rollout-table.component.d.ts +4 -2
- package/lib/components/manage-plano/verification-table/verification-table.component.d.ts +4 -4
- package/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.d.ts +2 -0
- package/lib/components/manage-store-plano/template-vms/template-vms.component.d.ts +0 -1
- package/lib/components/planogram/merch-compliance/fixture-products/fixture-products.component.d.ts +8 -2
- package/lib/components/planogram/merch-compliance/merch-compliance.component.d.ts +1 -3
- package/lib/components/planogram/merch-compliance/product-locator/misplaced-product-fixture/misplaced-product-fixture.component.d.ts +47 -0
- package/lib/components/planogram/merch-compliance/product-locator/product-locator.component.d.ts +70 -0
- package/lib/components/planogram/merch-compliance/product-locator/product-zone-locator/product-zone-locator.component.d.ts +16 -0
- package/lib/components/planogram/merch-compliance/zone-products/zone-products.component.d.ts +13 -3
- package/lib/components/planogram/plano-analytics/analytics-popup/analytics-popup.component.d.ts +25 -0
- package/lib/components/planogram/plano-analytics/date-range-picker/date-range-picker.component.d.ts +24 -0
- package/lib/components/planogram/plano-analytics/fixture-analytics/fixture-analytics.component.d.ts +93 -0
- package/lib/components/planogram/plano-analytics/plano-analytics.component.d.ts +97 -0
- package/lib/components/planogram/plano-details-parent/plano-details-parent.component.d.ts +8 -3
- package/lib/components/planogram/plano-overview/fixture-overview/fixture-overview.component.d.ts +2 -4
- package/lib/interfaces/fixture-library.interface.d.ts +1 -1
- package/lib/services/store-builder.service.d.ts +25 -0
- package/lib/tango-store-builder.module.d.ts +31 -21
- package/package.json +1 -1
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { RouterOutlet } from '@angular/router';
|
|
3
|
+
import { FormsModule } from '@angular/forms';
|
|
4
|
+
import { Subject, takeUntil } from 'rxjs';
|
|
5
|
+
import { NgIf } from '@angular/common';
|
|
6
|
+
import { CancelConfirmationModalComponent } from './cancel-confirmation-modal/cancel-confirmation-modal.component';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/router";
|
|
9
|
+
import * as i2 from "../services/data.service";
|
|
10
|
+
import * as i3 from "../../../services/store-builder.service";
|
|
11
|
+
import * as i4 from "@ng-bootstrap/ng-bootstrap";
|
|
12
|
+
import * as i5 from "@angular/forms";
|
|
13
|
+
export class FindReplaceLayoutComponent {
|
|
14
|
+
route;
|
|
15
|
+
router;
|
|
16
|
+
dataService;
|
|
17
|
+
storeBuilderService;
|
|
18
|
+
modalService;
|
|
19
|
+
findReplaceData = null;
|
|
20
|
+
destroy$ = new Subject();
|
|
21
|
+
loading = false;
|
|
22
|
+
batchProgressInterval = null;
|
|
23
|
+
isPollingActive = false;
|
|
24
|
+
constructor(route, router, dataService, storeBuilderService, modalService) {
|
|
25
|
+
this.route = route;
|
|
26
|
+
this.router = router;
|
|
27
|
+
this.dataService = dataService;
|
|
28
|
+
this.storeBuilderService = storeBuilderService;
|
|
29
|
+
this.modalService = modalService;
|
|
30
|
+
}
|
|
31
|
+
ngOnInit() {
|
|
32
|
+
// Subscribe to data changes from service
|
|
33
|
+
this.dataService.getFindReplaceData()
|
|
34
|
+
.pipe(takeUntil(this.destroy$))
|
|
35
|
+
.subscribe((data) => {
|
|
36
|
+
const previousStatus = this.findReplaceData?.status;
|
|
37
|
+
this.findReplaceData = data;
|
|
38
|
+
// Handle status-based routing
|
|
39
|
+
if (data?.status) {
|
|
40
|
+
this.handleStatusBasedRouting(data.status);
|
|
41
|
+
}
|
|
42
|
+
// Handle batch-running status polling
|
|
43
|
+
if (data?.status === 'batch-running') {
|
|
44
|
+
// If status changed to batch-running or page was refreshed with batch-running status
|
|
45
|
+
// (previousStatus will be undefined/null on initial load or different status)
|
|
46
|
+
if (previousStatus !== 'batch-running') {
|
|
47
|
+
// Call API immediately on status change or page refresh
|
|
48
|
+
this.updateBatchProgressAndRefetch();
|
|
49
|
+
// Start polling if not already started
|
|
50
|
+
this.startBatchProgressPolling();
|
|
51
|
+
}
|
|
52
|
+
// Don't restart polling if it's already active (to prevent restarting on data updates)
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
// Stop polling if status is not batch-running
|
|
56
|
+
this.stopBatchProgressPolling();
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
// Subscribe to loading state from service
|
|
60
|
+
this.dataService.getLoadingState()
|
|
61
|
+
.pipe(takeUntil(this.destroy$))
|
|
62
|
+
.subscribe((loading) => {
|
|
63
|
+
this.loading = loading;
|
|
64
|
+
});
|
|
65
|
+
// Subscribe to saved ID to update URL query params for initial saves
|
|
66
|
+
this.dataService.getSavedId()
|
|
67
|
+
.pipe(takeUntil(this.destroy$))
|
|
68
|
+
.subscribe((id) => {
|
|
69
|
+
// Check if there's no ID in current query params (initial save)
|
|
70
|
+
const currentParams = this.route.snapshot.queryParams;
|
|
71
|
+
if (!currentParams?.['id'] && id) {
|
|
72
|
+
// Update URL with the new ID without navigating
|
|
73
|
+
this.router.navigate([], {
|
|
74
|
+
relativeTo: this.route,
|
|
75
|
+
queryParams: { id: id },
|
|
76
|
+
queryParamsHandling: 'merge',
|
|
77
|
+
replaceUrl: true
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
// Load data from route params
|
|
82
|
+
this.route.queryParams
|
|
83
|
+
.pipe(takeUntil(this.destroy$))
|
|
84
|
+
.subscribe((params) => {
|
|
85
|
+
if (params?.['id']) {
|
|
86
|
+
this.loadFindReplaceDataById(params['id']);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
loadFindReplaceDataById(id) {
|
|
91
|
+
this.dataService.loadAndSetFindReplaceDataById(id);
|
|
92
|
+
}
|
|
93
|
+
async onCancel() {
|
|
94
|
+
// Check if batch is running - show confirmation modal
|
|
95
|
+
if (this.isBatchRunning()) {
|
|
96
|
+
const modalRef = this.modalService.open(CancelConfirmationModalComponent, {
|
|
97
|
+
centered: true,
|
|
98
|
+
size: 'lg',
|
|
99
|
+
backdrop: 'static',
|
|
100
|
+
windowClass: 'cancel-confirmation-modal'
|
|
101
|
+
});
|
|
102
|
+
try {
|
|
103
|
+
const result = await modalRef.result;
|
|
104
|
+
// User confirmed cancellation
|
|
105
|
+
if (result) {
|
|
106
|
+
this.proceedWithCancel();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
catch (dismissed) {
|
|
110
|
+
// User dismissed the modal (clicked "Keep Processing" or outside)
|
|
111
|
+
// Do nothing, just close the modal
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
// If not batch running, proceed directly with cancel
|
|
116
|
+
this.proceedWithCancel();
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
proceedWithCancel() {
|
|
120
|
+
// If there's a findReplaceId, call the cancel API and refetch data
|
|
121
|
+
if (this.findReplaceData?._id) {
|
|
122
|
+
const findReplaceId = this.findReplaceData._id;
|
|
123
|
+
this.loading = true;
|
|
124
|
+
this.storeBuilderService.cancelFindReplace({
|
|
125
|
+
findReplaceId: findReplaceId
|
|
126
|
+
})
|
|
127
|
+
.pipe(takeUntil(this.destroy$))
|
|
128
|
+
.subscribe({
|
|
129
|
+
next: (response) => {
|
|
130
|
+
if (response?.code === 200) {
|
|
131
|
+
// Refetch find and replace data after successful cancel
|
|
132
|
+
this.dataService.loadFindReplaceDataById(findReplaceId)
|
|
133
|
+
.pipe(takeUntil(this.destroy$))
|
|
134
|
+
.subscribe({
|
|
135
|
+
next: (getResponse) => {
|
|
136
|
+
this.loading = false;
|
|
137
|
+
if (getResponse?.code === 200 && getResponse?.data) {
|
|
138
|
+
this.dataService.setFindReplaceData(getResponse.data);
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
error: (error) => {
|
|
142
|
+
this.loading = false;
|
|
143
|
+
console.error('Error fetching find replace data:', error);
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
this.loading = false;
|
|
149
|
+
console.error('Error canceling find replace:', response?.message || 'Unknown error');
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
error: (error) => {
|
|
153
|
+
this.loading = false;
|
|
154
|
+
console.error('Error canceling find replace:', error);
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
// If no ID, just navigate away
|
|
160
|
+
this.router.navigate(['/manage/planogram/find-replace-table']);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
onBackToDashboard() {
|
|
164
|
+
this.router.navigate(['/manage/planogram/find-replace-table']);
|
|
165
|
+
}
|
|
166
|
+
onSaveDraft() {
|
|
167
|
+
this.dataService.triggerSaveDraft();
|
|
168
|
+
}
|
|
169
|
+
isStep2Active() {
|
|
170
|
+
if (!this.findReplaceData?.status) {
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
const reviewStatuses = ['yet-to-approve', 'approved'];
|
|
174
|
+
return reviewStatuses.includes(this.findReplaceData.status);
|
|
175
|
+
}
|
|
176
|
+
isLineActive() {
|
|
177
|
+
return this.isStep2Active();
|
|
178
|
+
}
|
|
179
|
+
isBatchRunning() {
|
|
180
|
+
return this.findReplaceData?.status === 'batch-running';
|
|
181
|
+
}
|
|
182
|
+
getBatchProgress() {
|
|
183
|
+
return this.findReplaceData?.batchProgress ?? 0;
|
|
184
|
+
}
|
|
185
|
+
getStoreCount() {
|
|
186
|
+
return this.findReplaceData?.storeCount || this.findReplaceData?.stores?.length || 0;
|
|
187
|
+
}
|
|
188
|
+
get title() {
|
|
189
|
+
return this.findReplaceData?.name || 'Untitled';
|
|
190
|
+
}
|
|
191
|
+
set title(value) {
|
|
192
|
+
const actualValue = value === 'Untitled' ? '' : value;
|
|
193
|
+
if (this.findReplaceData) {
|
|
194
|
+
this.findReplaceData.name = actualValue;
|
|
195
|
+
// Update the service with the new name
|
|
196
|
+
this.dataService.updateData({ name: actualValue });
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
// Initialize data if it doesn't exist
|
|
200
|
+
this.dataService.updateData({
|
|
201
|
+
name: actualValue,
|
|
202
|
+
status: 'draft',
|
|
203
|
+
target: 'merch'
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Handle status-based routing
|
|
209
|
+
*/
|
|
210
|
+
handleStatusBasedRouting(status) {
|
|
211
|
+
if (!status) {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
const currentUrl = this.router.url;
|
|
215
|
+
const reviewStatuses = ['yet-to-approve', 'approved'];
|
|
216
|
+
// Redirect to /review if status is in review statuses
|
|
217
|
+
if (reviewStatuses.includes(status)) {
|
|
218
|
+
// Check if we're not already on the review route
|
|
219
|
+
if (!currentUrl.includes('/review')) {
|
|
220
|
+
this.router.navigate(['./review'], {
|
|
221
|
+
relativeTo: this.route,
|
|
222
|
+
queryParamsHandling: 'preserve'
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// Redirect to /prepare if status is draft
|
|
227
|
+
else if (status === 'draft') {
|
|
228
|
+
// Check if we're not already on the prepare route
|
|
229
|
+
if (!currentUrl.includes('/prepare')) {
|
|
230
|
+
this.router.navigate(['./prepare'], {
|
|
231
|
+
relativeTo: this.route,
|
|
232
|
+
queryParamsHandling: 'preserve'
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Update batch progress and refetch find replace data
|
|
239
|
+
* Returns a Promise that resolves when both API calls complete
|
|
240
|
+
*/
|
|
241
|
+
updateBatchProgressAndRefetch() {
|
|
242
|
+
return new Promise((resolve, reject) => {
|
|
243
|
+
if (!this.findReplaceData?._id) {
|
|
244
|
+
resolve();
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
this.storeBuilderService.updateBatchProgress({
|
|
248
|
+
findReplaceId: this.findReplaceData._id
|
|
249
|
+
})
|
|
250
|
+
.pipe(takeUntil(this.destroy$))
|
|
251
|
+
.subscribe({
|
|
252
|
+
next: (response) => {
|
|
253
|
+
// After updating batch progress, refetch the find replace data
|
|
254
|
+
if (this.findReplaceData?._id) {
|
|
255
|
+
this.dataService.loadFindReplaceDataById(this.findReplaceData._id)
|
|
256
|
+
.pipe(takeUntil(this.destroy$))
|
|
257
|
+
.subscribe({
|
|
258
|
+
next: (getResponse) => {
|
|
259
|
+
if (getResponse?.code === 200 && getResponse?.data) {
|
|
260
|
+
this.dataService.setFindReplaceData(getResponse.data);
|
|
261
|
+
}
|
|
262
|
+
resolve();
|
|
263
|
+
},
|
|
264
|
+
error: (error) => {
|
|
265
|
+
console.error('Error fetching find replace data:', error);
|
|
266
|
+
resolve(); // Resolve anyway to continue polling
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
resolve();
|
|
272
|
+
}
|
|
273
|
+
},
|
|
274
|
+
error: (error) => {
|
|
275
|
+
console.error('Error updating batch progress:', error);
|
|
276
|
+
resolve(); // Resolve anyway to continue polling
|
|
277
|
+
}
|
|
278
|
+
});
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Start polling for batch progress updates every 10 seconds
|
|
283
|
+
* Timer only starts after both update and get API calls complete
|
|
284
|
+
*/
|
|
285
|
+
startBatchProgressPolling() {
|
|
286
|
+
// Don't start if already polling
|
|
287
|
+
if (this.isPollingActive) {
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
// Clear any existing interval/timeout
|
|
291
|
+
this.stopBatchProgressPolling();
|
|
292
|
+
// Mark polling as active
|
|
293
|
+
this.isPollingActive = true;
|
|
294
|
+
// Start the polling cycle
|
|
295
|
+
this.scheduleNextPoll();
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Schedule the next poll after both API calls complete
|
|
299
|
+
*/
|
|
300
|
+
scheduleNextPoll() {
|
|
301
|
+
// Clear any existing timeout
|
|
302
|
+
if (this.batchProgressInterval) {
|
|
303
|
+
clearTimeout(this.batchProgressInterval);
|
|
304
|
+
}
|
|
305
|
+
// Check if we should continue polling
|
|
306
|
+
if (this.findReplaceData?.status !== 'batch-running') {
|
|
307
|
+
this.stopBatchProgressPolling();
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
// Call the APIs and schedule next poll after they complete
|
|
311
|
+
this.updateBatchProgressAndRefetch()
|
|
312
|
+
.then(() => {
|
|
313
|
+
// Only schedule next poll if status is still batch-running
|
|
314
|
+
if (this.findReplaceData?.status === 'batch-running') {
|
|
315
|
+
// Start timer for next poll (10 seconds after both APIs complete)
|
|
316
|
+
this.batchProgressInterval = setTimeout(() => {
|
|
317
|
+
this.scheduleNextPoll();
|
|
318
|
+
}, 10000); // 10 seconds
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
// Stop polling if status changed
|
|
322
|
+
this.stopBatchProgressPolling();
|
|
323
|
+
}
|
|
324
|
+
})
|
|
325
|
+
.catch((error) => {
|
|
326
|
+
console.error('Error in polling cycle:', error);
|
|
327
|
+
// Continue polling even on error
|
|
328
|
+
if (this.findReplaceData?.status === 'batch-running') {
|
|
329
|
+
this.batchProgressInterval = setTimeout(() => {
|
|
330
|
+
this.scheduleNextPoll();
|
|
331
|
+
}, 10000);
|
|
332
|
+
}
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Stop polling for batch progress updates
|
|
337
|
+
*/
|
|
338
|
+
stopBatchProgressPolling() {
|
|
339
|
+
if (this.batchProgressInterval) {
|
|
340
|
+
clearTimeout(this.batchProgressInterval);
|
|
341
|
+
this.batchProgressInterval = null;
|
|
342
|
+
}
|
|
343
|
+
this.isPollingActive = false;
|
|
344
|
+
}
|
|
345
|
+
ngOnDestroy() {
|
|
346
|
+
this.stopBatchProgressPolling();
|
|
347
|
+
// Clear service data when exiting the component
|
|
348
|
+
this.dataService.clearData();
|
|
349
|
+
this.destroy$.next();
|
|
350
|
+
this.destroy$.complete();
|
|
351
|
+
}
|
|
352
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FindReplaceLayoutComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.CollectionUpdateAiDataService }, { token: i3.StoreBuilderService }, { token: i4.NgbModal }], target: i0.ɵɵFactoryTarget.Component });
|
|
353
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FindReplaceLayoutComponent, isStandalone: true, selector: "lib-find-replace-layout", ngImport: i0, template: " <!-- Batch Running UI -->\r\n <div *ngIf=\"isBatchRunning()\" class=\"batch-processing-container\">\r\n <!-- SVG Illustration -->\r\n <div class=\"batch-illustration\">\r\n <svg fill=\"none\" preserveAspectRatio=\"none\" viewBox=\"0 0 331 183\">\r\n <g id=\"Group 2891\">\r\n <path d=\"M247.99 46C268.149 46 284.49 62.3416 284.49 82.5C284.49 91.0788 290.281 101 298.859 101H312C322.493 101 331 109.507 331 120C331 130.493 322.493 139 312 139H272.962C268.634 139 265.721 144.171 265.721 148.5C265.721 158.165 257.886 166 248.221 166H119.221C109.556 166 101.721 158.165 101.721 148.5C101.721 144.171 98.8077 139 94.479 139H19C8.50659 139 0 130.493 0 120C0 109.507 8.50659 101 19 101H65.121C73.6998 101 79.4902 91.0788 79.4902 82.5C79.4902 62.3416 95.8319 46 115.99 46H247.99Z\" fill=\"#EAECF0\" id=\"Union\" />\r\n <rect fill=\"#99DAFF\" height=\"104\" id=\"Rectangle 2270\" rx=\"4\" width=\"64\" x=\"176.19\" y=\"76\" />\r\n <rect fill=\"#99DAFF\" height=\"104\" id=\"Rectangle 2269\" rx=\"4\" width=\"64\" x=\"119.19\" y=\"16\" />\r\n <path d=\"M225.605 121.414C226.386 120.633 226.386 119.367 225.605 118.586L212.877 105.858C212.096 105.077 210.829 105.077 210.048 105.858C209.267 106.639 209.267 107.905 210.048 108.686L221.362 120L210.048 131.314C209.267 132.095 209.267 133.361 210.048 134.142C210.829 134.923 212.096 134.923 212.877 134.142L225.605 121.414ZM182.19 49.5C182.19 50.6046 183.086 51.5 184.19 51.5C185.295 51.5 186.19 50.6046 186.19 49.5H184.19H182.19ZM124.19 15V17H178.19V15V13H124.19V15ZM224.19 120V118H124.19V120V122H224.19V120ZM118.19 114H120.19V21H118.19H116.19V114H118.19ZM184.19 21H182.19V49.5H184.19H186.19V21H184.19ZM124.19 120V118C121.981 118 120.19 116.209 120.19 114H118.19H116.19C116.19 118.418 119.772 122 124.19 122V120ZM178.19 15V17C180.4 17 182.19 18.7909 182.19 21H184.19H186.19C186.19 16.5817 182.609 13 178.19 13V15ZM124.19 15V13C119.772 13 116.19 16.5817 116.19 21H118.19H120.19C120.19 18.7909 121.981 17 124.19 17V15Z\" fill=\"#00A3FF\" id=\"Rectangle 2254\" />\r\n <path d=\"M132.776 74.5858C131.995 75.3668 131.995 76.6332 132.776 77.4142L145.504 90.1421C146.285 90.9232 147.552 90.9232 148.333 90.1421C149.114 89.3611 149.114 88.0947 148.333 87.3137L137.019 76L148.333 64.6863C149.114 63.9052 149.114 62.6389 148.333 61.8579C147.552 61.0768 146.285 61.0768 145.504 61.8579L132.776 74.5858ZM176.19 146.5C176.19 145.395 175.295 144.5 174.19 144.5C173.086 144.5 172.19 145.395 172.19 146.5L174.19 146.5L176.19 146.5ZM234.19 181L234.19 179L180.19 179L180.19 181L180.19 183L234.19 183L234.19 181ZM134.19 76L134.19 78L234.19 78L234.19 76L234.19 74L134.19 74L134.19 76ZM240.19 82L238.19 82L238.19 175L240.19 175L242.19 175L242.19 82L240.19 82ZM174.19 175L176.19 175L176.19 146.5L174.19 146.5L172.19 146.5L172.19 175L174.19 175ZM234.19 76L234.19 78C236.4 78 238.19 79.7909 238.19 82L240.19 82L242.19 82C242.19 77.5817 238.609 74 234.19 74L234.19 76ZM180.19 181L180.19 179C177.981 179 176.19 177.209 176.19 175L174.19 175L172.19 175C172.19 179.418 175.772 183 180.19 183L180.19 181ZM234.19 181L234.19 183C238.609 183 242.19 179.418 242.19 175L240.19 175L238.19 175C238.19 177.209 236.4 179 234.19 179L234.19 181Z\" fill=\"#00A3FF\" id=\"Rectangle 2256\" />\r\n <path d=\"M140.232 30L140.95 33.4281C141.316 35.1758 142.129 36.7989 143.309 38.139C144.489 39.4791 145.996 40.4906 147.684 41.0747L149.274 41.625L147.684 42.1752C145.996 42.7594 144.489 43.7709 143.309 45.111C142.129 46.4511 141.316 48.0742 140.95 49.8219L140.232 53.25L139.514 49.8219C139.148 48.0742 138.335 46.4511 137.155 45.111C135.975 43.7709 134.468 42.7594 132.78 42.1752L131.19 41.625L132.78 41.0747C134.468 40.4906 135.975 39.4791 137.155 38.139C138.335 36.7989 139.148 35.1758 139.514 33.4281L140.232 30Z\" id=\"Vector\" stroke=\"#00A3FF\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4\" />\r\n <path d=\"M217.232 143L217.95 146.428C218.316 148.176 219.129 149.799 220.309 151.139C221.489 152.479 222.996 153.491 224.684 154.075L226.274 154.625L224.684 155.175C222.996 155.759 221.489 156.771 220.309 158.111C219.129 159.451 218.316 161.074 217.95 162.822L217.232 166.25L216.514 162.822C216.148 161.074 215.335 159.451 214.155 158.111C212.975 156.771 211.468 155.759 209.78 155.175L208.19 154.625L209.78 154.075C211.468 153.491 212.975 152.479 214.155 151.139C215.335 149.799 216.148 148.176 216.514 146.428L217.232 143Z\" id=\"Vector_2\" stroke=\"#00A3FF\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4\" />\r\n <path d=\"M192.19 148L192.588 149.917C192.79 150.894 193.239 151.802 193.892 152.551C194.545 153.3 195.378 153.866 196.311 154.192L197.19 154.5L196.311 154.808C195.378 155.134 194.545 155.7 193.892 156.449C193.239 157.198 192.79 158.106 192.588 159.083L192.19 161L191.793 159.083C191.591 158.106 191.141 157.198 190.489 156.449C189.836 155.7 189.003 155.134 188.07 154.808L187.19 154.5L188.07 154.192C189.003 153.866 189.836 153.3 190.489 152.551C191.141 151.802 191.591 150.894 191.793 149.917L192.19 148Z\" id=\"Vector_3\" stroke=\"#6BCAFF\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4\" />\r\n <path d=\"M107.19 2L107.588 3.91678C107.79 4.894 108.239 5.80152 108.892 6.55084C109.545 7.30016 110.378 7.86571 111.311 8.19233L112.19 8.5L111.311 8.80767C110.378 9.13429 109.545 9.69984 108.892 10.4492C108.239 11.1985 107.79 12.106 107.588 13.0832L107.19 15L106.793 13.0832C106.591 12.106 106.141 11.1985 105.489 10.4492C104.836 9.69984 104.003 9.13429 103.07 8.80767L102.19 8.5L103.07 8.19233C104.003 7.86571 104.836 7.30016 105.489 6.55084C106.141 5.80152 106.591 4.894 106.793 3.91678L107.19 2Z\" id=\"Vector_4\" stroke=\"#6BCAFF\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4\" />\r\n <path d=\"M262.19 81L262.588 82.9168C262.79 83.894 263.239 84.8015 263.892 85.5508C264.545 86.3002 265.378 86.8657 266.311 87.1923L267.19 87.5L266.311 87.8077C265.378 88.1343 264.545 88.6998 263.892 89.4492C263.239 90.1985 262.79 91.106 262.588 92.0832L262.19 94L261.793 92.0832C261.591 91.106 261.141 90.1985 260.489 89.4492C259.836 88.6998 259.003 88.1343 258.07 87.8077L257.19 87.5L258.07 87.1923C259.003 86.8657 259.836 86.3002 260.489 85.5508C261.141 84.8015 261.591 83.894 261.793 82.9168L262.19 81Z\" id=\"Vector_5\" stroke=\"#6BCAFF\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4\" />\r\n <path d=\"M154.5 134L154.778 135.327C154.92 136.004 155.234 136.632 155.691 137.151C156.148 137.669 156.731 138.061 157.384 138.287L158 138.5L157.384 138.713C156.731 138.939 156.148 139.331 155.691 139.849C155.234 140.368 154.92 140.996 154.778 141.673L154.5 143L154.222 141.673C154.08 140.996 153.766 140.368 153.309 139.849C152.852 139.331 152.269 138.939 151.616 138.713L151 138.5L151.616 138.287C152.269 138.061 152.852 137.669 153.309 137.151C153.766 136.632 154.08 136.004 154.222 135.327L154.5 134Z\" id=\"Vector_6\" stroke=\"#6BCAFF\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4\" />\r\n <path d=\"M95.6904 101L96.2067 103.507C96.4698 104.784 97.0541 105.971 97.9024 106.951C98.7508 107.931 99.8343 108.671 101.047 109.098L102.19 109.5L101.047 109.902C99.8343 110.329 98.7508 111.069 97.9024 112.049C97.0541 113.029 96.4698 114.216 96.2067 115.493L95.6904 118L95.1741 115.493C94.911 114.216 94.3268 113.029 93.4784 112.049C92.6301 111.069 91.5466 110.329 90.3335 109.902L89.1904 109.5L90.3335 109.098C91.5466 108.671 92.6301 107.931 93.4784 106.951C94.3268 105.971 94.911 104.784 95.1741 103.507L95.6904 101Z\" id=\"Vector_7\" stroke=\"#00A3FF\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4\" />\r\n <path d=\"M142.232 28L142.95 31.4281C143.316 33.1758 144.129 34.7989 145.309 36.139C146.489 37.4791 147.996 38.4906 149.684 39.0747L151.274 39.625L149.684 40.1752C147.996 40.7594 146.489 41.7709 145.309 43.111C144.129 44.4511 143.316 46.0742 142.95 47.8219L142.232 51.25L141.514 47.8219C141.148 46.0742 140.335 44.4511 139.155 43.111C137.975 41.7709 136.468 40.7594 134.78 40.1752L133.19 39.625L134.78 39.0747C136.468 38.4906 137.975 37.4791 139.155 36.139C140.335 34.7989 141.148 33.1758 141.514 31.4281L142.232 28Z\" id=\"Vector_8\" stroke=\"white\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4\" />\r\n </g>\r\n </svg>\r\n </div>\r\n\r\n <!-- Content Section -->\r\n <div class=\"batch-content-section\">\r\n <!-- Text Section -->\r\n <div class=\"batch-text-section\">\r\n <p class=\"batch-title\">\r\n Batch processing<span class=\"loading-dots\">\r\n <span class=\"dot\">.</span><span class=\"dot\">.</span><span class=\"dot\">.</span>\r\n </span>\r\n </p>\r\n <p class=\"batch-description\">Running a batch for all {{ getStoreCount() }} stores. This might take a while. You can continue browsing and check back later.</p>\r\n </div>\r\n\r\n <!-- Button Container -->\r\n <div class=\"batch-button-container\">\r\n <button class=\"btn-batch-custom\" type=\"button\" (click)=\"onCancel()\">Cancel</button>\r\n <button class=\"btn-batch-custom\" type=\"button\" (click)=\"onBackToDashboard()\">Back To Dashboard</button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Header -->\r\n <div *ngIf=\"!isBatchRunning()\" class=\"header-card\">\r\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\r\n <!-- Title -->\r\n <div>\r\n <input type=\"text\" class=\"header-title\" [(ngModel)]=\"title\" placeholder=\"Untitled\">\r\n </div>\r\n \r\n <!-- Stepper -->\r\n <div class=\"stepper-container\">\r\n <div class=\"stepper-step\">\r\n <div class=\"stepper-circle active\">1</div>\r\n <p class=\"stepper-text active\">Prepare template</p>\r\n </div>\r\n <div class=\"stepper-line\" [class.active]=\"isStep2Active()\"></div>\r\n <div class=\"stepper-step\">\r\n <div class=\"stepper-circle\" [class.active]=\"isStep2Active()\" [class.inactive]=\"!isStep2Active()\">2</div>\r\n <p class=\"stepper-text\" [class.active]=\"isStep2Active()\" [class.inactive]=\"!isStep2Active()\">Review and Approve</p>\r\n </div>\r\n </div>\r\n \r\n <!-- Action Buttons -->\r\n <div class=\"d-flex gap-2\">\r\n <button class=\"btn-cancel\" type=\"button\" (click)=\"onBackToDashboard()\">Cancel</button>\r\n <button class=\"btn-save-draft\" type=\"button\" (click)=\"onSaveDraft()\" [disabled]=\"loading\">Save As Draft</button>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <!-- Main Content -->\r\n <router-outlet *ngIf=\"!isBatchRunning()\"></router-outlet>", styles: [".header-card{background:#fff;border-radius:12px;padding:16px;margin-bottom:24px;box-shadow:0 1px 3px #0000001a}.header-title{font-size:18px;font-weight:600;color:#1d2939;margin:0;border:none;outline:none;background:transparent;width:100%;padding:0}.header-title:focus{outline:none;box-shadow:none;border:none}.header-title::placeholder{color:#98a2b3}.stepper-container{display:flex;align-items:center;gap:8px;flex:1;justify-content:center}.stepper-step{display:flex;align-items:center;gap:8px}.stepper-circle{width:20px;height:20px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;color:#fff}.stepper-circle.active{background-color:#1d2939}.stepper-circle.inactive{background-color:#98a2b3}.stepper-text{font-size:14px;font-weight:600;margin:0}.stepper-text.active{color:#1d2939}.stepper-text.inactive{color:#98a2b3}.stepper-line{width:50px;height:1.5px;background-color:#98a2b3}.stepper-line.active{background-color:#1d2939}.btn-cancel{padding:10px 16px;font-size:14px;font-weight:600;color:#667085;background:transparent;border:none;border-radius:8px;cursor:pointer;transition:background-color .15s ease-in-out}.btn-cancel:hover{background:#f9fafb;color:#344054}.btn-cancel:active{background:#f2f4f7}.btn-cancel:focus{outline:1px solid #00a3ff;outline-offset:1px}.btn-save-draft{padding:10px 16px;font-size:14px;font-weight:600;color:#344054;background:#fff;border:1px solid #d0d5dd;border-radius:8px;box-shadow:0 1px 2px #1018280d;cursor:pointer;transition:background-color .15s ease-in-out,border-color .15s ease-in-out}.btn-save-draft:hover{background:#f9fafb;border-color:#98a2b3}.btn-save-draft:active{background:#f2f4f7}.btn-save-draft:focus{outline:1px solid #00a3ff;outline-offset:1px}.batch-processing-container{display:flex;flex-direction:column;align-items:center;padding:176px 16px;width:100%;min-height:75vh;background-color:#fff}.batch-illustration{width:331px;height:179px;position:relative;margin-bottom:28px}.batch-illustration svg{display:block;width:100%;height:100%}.batch-content-section{display:flex;flex-direction:column;gap:24px;align-items:center;width:554px;max-width:100%}.batch-text-section{display:flex;flex-direction:column;gap:6px;align-items:center;text-align:center}.batch-title{font-size:20px;font-weight:600;line-height:30px;color:#1d2939;margin:0}.batch-description{font-size:14px;font-weight:500;line-height:20px;color:#1d2939;margin:0;max-width:554px}.batch-button-container{display:flex;justify-content:space-between;align-items:center;width:100%;gap:12px}.btn-batch-custom{background-color:#fff;color:#344054;border:1px solid #d0d5dd;border-radius:8px;padding:10px 18px;font-size:16px;font-weight:600;text-transform:capitalize;box-shadow:0 1px 2px #1018280d;transition:all .2s;white-space:nowrap;cursor:pointer}.btn-batch-custom:hover{background-color:#f9fafb;border-color:#b8bdc5;color:#344054}.btn-batch-custom:focus{outline:none;box-shadow:0 1px 2px #1018280d,0 0 0 .2rem #00a3ff40}.loading-dots{display:inline-block}.loading-dots .dot{display:inline-block;animation:dot-bounce 1.4s infinite ease-in-out;animation-fill-mode:both}.loading-dots .dot:nth-child(1){animation-delay:-.32s}.loading-dots .dot:nth-child(2){animation-delay:-.16s}.loading-dots .dot:nth-child(3){animation-delay:0s}@keyframes dot-bounce{0%,80%,to{opacity:.3;transform:scale(.8)}40%{opacity:1;transform:scale(1)}}@media (max-width: 768px){.batch-processing-container{padding:80px 16px}.batch-content-section{width:100%}.batch-description{max-width:100%}.batch-button-container{flex-direction:column;width:100%}.btn-batch-custom{width:100%}}::ng-deep .cancel-confirmation-modal .modal-dialog{max-width:480px}::ng-deep .cancel-confirmation-modal .modal-content{border:none;border-radius:12px;box-shadow:0 20px 24px -4px #10182814,0 8px 8px -4px #10182808;padding:0}::ng-deep .cancel-confirmation-modal .modal-header{border-bottom:none;padding:24px 16px 0}::ng-deep .cancel-confirmation-modal .modal-body{padding:0 16px}::ng-deep .cancel-confirmation-modal .modal-footer{border-top:none;padding:0 16px 24px}\n"], dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.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: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
354
|
+
}
|
|
355
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FindReplaceLayoutComponent, decorators: [{
|
|
356
|
+
type: Component,
|
|
357
|
+
args: [{ selector: 'lib-find-replace-layout', standalone: true, imports: [RouterOutlet, FormsModule, NgIf], template: " <!-- Batch Running UI -->\r\n <div *ngIf=\"isBatchRunning()\" class=\"batch-processing-container\">\r\n <!-- SVG Illustration -->\r\n <div class=\"batch-illustration\">\r\n <svg fill=\"none\" preserveAspectRatio=\"none\" viewBox=\"0 0 331 183\">\r\n <g id=\"Group 2891\">\r\n <path d=\"M247.99 46C268.149 46 284.49 62.3416 284.49 82.5C284.49 91.0788 290.281 101 298.859 101H312C322.493 101 331 109.507 331 120C331 130.493 322.493 139 312 139H272.962C268.634 139 265.721 144.171 265.721 148.5C265.721 158.165 257.886 166 248.221 166H119.221C109.556 166 101.721 158.165 101.721 148.5C101.721 144.171 98.8077 139 94.479 139H19C8.50659 139 0 130.493 0 120C0 109.507 8.50659 101 19 101H65.121C73.6998 101 79.4902 91.0788 79.4902 82.5C79.4902 62.3416 95.8319 46 115.99 46H247.99Z\" fill=\"#EAECF0\" id=\"Union\" />\r\n <rect fill=\"#99DAFF\" height=\"104\" id=\"Rectangle 2270\" rx=\"4\" width=\"64\" x=\"176.19\" y=\"76\" />\r\n <rect fill=\"#99DAFF\" height=\"104\" id=\"Rectangle 2269\" rx=\"4\" width=\"64\" x=\"119.19\" y=\"16\" />\r\n <path d=\"M225.605 121.414C226.386 120.633 226.386 119.367 225.605 118.586L212.877 105.858C212.096 105.077 210.829 105.077 210.048 105.858C209.267 106.639 209.267 107.905 210.048 108.686L221.362 120L210.048 131.314C209.267 132.095 209.267 133.361 210.048 134.142C210.829 134.923 212.096 134.923 212.877 134.142L225.605 121.414ZM182.19 49.5C182.19 50.6046 183.086 51.5 184.19 51.5C185.295 51.5 186.19 50.6046 186.19 49.5H184.19H182.19ZM124.19 15V17H178.19V15V13H124.19V15ZM224.19 120V118H124.19V120V122H224.19V120ZM118.19 114H120.19V21H118.19H116.19V114H118.19ZM184.19 21H182.19V49.5H184.19H186.19V21H184.19ZM124.19 120V118C121.981 118 120.19 116.209 120.19 114H118.19H116.19C116.19 118.418 119.772 122 124.19 122V120ZM178.19 15V17C180.4 17 182.19 18.7909 182.19 21H184.19H186.19C186.19 16.5817 182.609 13 178.19 13V15ZM124.19 15V13C119.772 13 116.19 16.5817 116.19 21H118.19H120.19C120.19 18.7909 121.981 17 124.19 17V15Z\" fill=\"#00A3FF\" id=\"Rectangle 2254\" />\r\n <path d=\"M132.776 74.5858C131.995 75.3668 131.995 76.6332 132.776 77.4142L145.504 90.1421C146.285 90.9232 147.552 90.9232 148.333 90.1421C149.114 89.3611 149.114 88.0947 148.333 87.3137L137.019 76L148.333 64.6863C149.114 63.9052 149.114 62.6389 148.333 61.8579C147.552 61.0768 146.285 61.0768 145.504 61.8579L132.776 74.5858ZM176.19 146.5C176.19 145.395 175.295 144.5 174.19 144.5C173.086 144.5 172.19 145.395 172.19 146.5L174.19 146.5L176.19 146.5ZM234.19 181L234.19 179L180.19 179L180.19 181L180.19 183L234.19 183L234.19 181ZM134.19 76L134.19 78L234.19 78L234.19 76L234.19 74L134.19 74L134.19 76ZM240.19 82L238.19 82L238.19 175L240.19 175L242.19 175L242.19 82L240.19 82ZM174.19 175L176.19 175L176.19 146.5L174.19 146.5L172.19 146.5L172.19 175L174.19 175ZM234.19 76L234.19 78C236.4 78 238.19 79.7909 238.19 82L240.19 82L242.19 82C242.19 77.5817 238.609 74 234.19 74L234.19 76ZM180.19 181L180.19 179C177.981 179 176.19 177.209 176.19 175L174.19 175L172.19 175C172.19 179.418 175.772 183 180.19 183L180.19 181ZM234.19 181L234.19 183C238.609 183 242.19 179.418 242.19 175L240.19 175L238.19 175C238.19 177.209 236.4 179 234.19 179L234.19 181Z\" fill=\"#00A3FF\" id=\"Rectangle 2256\" />\r\n <path d=\"M140.232 30L140.95 33.4281C141.316 35.1758 142.129 36.7989 143.309 38.139C144.489 39.4791 145.996 40.4906 147.684 41.0747L149.274 41.625L147.684 42.1752C145.996 42.7594 144.489 43.7709 143.309 45.111C142.129 46.4511 141.316 48.0742 140.95 49.8219L140.232 53.25L139.514 49.8219C139.148 48.0742 138.335 46.4511 137.155 45.111C135.975 43.7709 134.468 42.7594 132.78 42.1752L131.19 41.625L132.78 41.0747C134.468 40.4906 135.975 39.4791 137.155 38.139C138.335 36.7989 139.148 35.1758 139.514 33.4281L140.232 30Z\" id=\"Vector\" stroke=\"#00A3FF\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4\" />\r\n <path d=\"M217.232 143L217.95 146.428C218.316 148.176 219.129 149.799 220.309 151.139C221.489 152.479 222.996 153.491 224.684 154.075L226.274 154.625L224.684 155.175C222.996 155.759 221.489 156.771 220.309 158.111C219.129 159.451 218.316 161.074 217.95 162.822L217.232 166.25L216.514 162.822C216.148 161.074 215.335 159.451 214.155 158.111C212.975 156.771 211.468 155.759 209.78 155.175L208.19 154.625L209.78 154.075C211.468 153.491 212.975 152.479 214.155 151.139C215.335 149.799 216.148 148.176 216.514 146.428L217.232 143Z\" id=\"Vector_2\" stroke=\"#00A3FF\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4\" />\r\n <path d=\"M192.19 148L192.588 149.917C192.79 150.894 193.239 151.802 193.892 152.551C194.545 153.3 195.378 153.866 196.311 154.192L197.19 154.5L196.311 154.808C195.378 155.134 194.545 155.7 193.892 156.449C193.239 157.198 192.79 158.106 192.588 159.083L192.19 161L191.793 159.083C191.591 158.106 191.141 157.198 190.489 156.449C189.836 155.7 189.003 155.134 188.07 154.808L187.19 154.5L188.07 154.192C189.003 153.866 189.836 153.3 190.489 152.551C191.141 151.802 191.591 150.894 191.793 149.917L192.19 148Z\" id=\"Vector_3\" stroke=\"#6BCAFF\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4\" />\r\n <path d=\"M107.19 2L107.588 3.91678C107.79 4.894 108.239 5.80152 108.892 6.55084C109.545 7.30016 110.378 7.86571 111.311 8.19233L112.19 8.5L111.311 8.80767C110.378 9.13429 109.545 9.69984 108.892 10.4492C108.239 11.1985 107.79 12.106 107.588 13.0832L107.19 15L106.793 13.0832C106.591 12.106 106.141 11.1985 105.489 10.4492C104.836 9.69984 104.003 9.13429 103.07 8.80767L102.19 8.5L103.07 8.19233C104.003 7.86571 104.836 7.30016 105.489 6.55084C106.141 5.80152 106.591 4.894 106.793 3.91678L107.19 2Z\" id=\"Vector_4\" stroke=\"#6BCAFF\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4\" />\r\n <path d=\"M262.19 81L262.588 82.9168C262.79 83.894 263.239 84.8015 263.892 85.5508C264.545 86.3002 265.378 86.8657 266.311 87.1923L267.19 87.5L266.311 87.8077C265.378 88.1343 264.545 88.6998 263.892 89.4492C263.239 90.1985 262.79 91.106 262.588 92.0832L262.19 94L261.793 92.0832C261.591 91.106 261.141 90.1985 260.489 89.4492C259.836 88.6998 259.003 88.1343 258.07 87.8077L257.19 87.5L258.07 87.1923C259.003 86.8657 259.836 86.3002 260.489 85.5508C261.141 84.8015 261.591 83.894 261.793 82.9168L262.19 81Z\" id=\"Vector_5\" stroke=\"#6BCAFF\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4\" />\r\n <path d=\"M154.5 134L154.778 135.327C154.92 136.004 155.234 136.632 155.691 137.151C156.148 137.669 156.731 138.061 157.384 138.287L158 138.5L157.384 138.713C156.731 138.939 156.148 139.331 155.691 139.849C155.234 140.368 154.92 140.996 154.778 141.673L154.5 143L154.222 141.673C154.08 140.996 153.766 140.368 153.309 139.849C152.852 139.331 152.269 138.939 151.616 138.713L151 138.5L151.616 138.287C152.269 138.061 152.852 137.669 153.309 137.151C153.766 136.632 154.08 136.004 154.222 135.327L154.5 134Z\" id=\"Vector_6\" stroke=\"#6BCAFF\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4\" />\r\n <path d=\"M95.6904 101L96.2067 103.507C96.4698 104.784 97.0541 105.971 97.9024 106.951C98.7508 107.931 99.8343 108.671 101.047 109.098L102.19 109.5L101.047 109.902C99.8343 110.329 98.7508 111.069 97.9024 112.049C97.0541 113.029 96.4698 114.216 96.2067 115.493L95.6904 118L95.1741 115.493C94.911 114.216 94.3268 113.029 93.4784 112.049C92.6301 111.069 91.5466 110.329 90.3335 109.902L89.1904 109.5L90.3335 109.098C91.5466 108.671 92.6301 107.931 93.4784 106.951C94.3268 105.971 94.911 104.784 95.1741 103.507L95.6904 101Z\" id=\"Vector_7\" stroke=\"#00A3FF\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4\" />\r\n <path d=\"M142.232 28L142.95 31.4281C143.316 33.1758 144.129 34.7989 145.309 36.139C146.489 37.4791 147.996 38.4906 149.684 39.0747L151.274 39.625L149.684 40.1752C147.996 40.7594 146.489 41.7709 145.309 43.111C144.129 44.4511 143.316 46.0742 142.95 47.8219L142.232 51.25L141.514 47.8219C141.148 46.0742 140.335 44.4511 139.155 43.111C137.975 41.7709 136.468 40.7594 134.78 40.1752L133.19 39.625L134.78 39.0747C136.468 38.4906 137.975 37.4791 139.155 36.139C140.335 34.7989 141.148 33.1758 141.514 31.4281L142.232 28Z\" id=\"Vector_8\" stroke=\"white\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4\" />\r\n </g>\r\n </svg>\r\n </div>\r\n\r\n <!-- Content Section -->\r\n <div class=\"batch-content-section\">\r\n <!-- Text Section -->\r\n <div class=\"batch-text-section\">\r\n <p class=\"batch-title\">\r\n Batch processing<span class=\"loading-dots\">\r\n <span class=\"dot\">.</span><span class=\"dot\">.</span><span class=\"dot\">.</span>\r\n </span>\r\n </p>\r\n <p class=\"batch-description\">Running a batch for all {{ getStoreCount() }} stores. This might take a while. You can continue browsing and check back later.</p>\r\n </div>\r\n\r\n <!-- Button Container -->\r\n <div class=\"batch-button-container\">\r\n <button class=\"btn-batch-custom\" type=\"button\" (click)=\"onCancel()\">Cancel</button>\r\n <button class=\"btn-batch-custom\" type=\"button\" (click)=\"onBackToDashboard()\">Back To Dashboard</button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Header -->\r\n <div *ngIf=\"!isBatchRunning()\" class=\"header-card\">\r\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\r\n <!-- Title -->\r\n <div>\r\n <input type=\"text\" class=\"header-title\" [(ngModel)]=\"title\" placeholder=\"Untitled\">\r\n </div>\r\n \r\n <!-- Stepper -->\r\n <div class=\"stepper-container\">\r\n <div class=\"stepper-step\">\r\n <div class=\"stepper-circle active\">1</div>\r\n <p class=\"stepper-text active\">Prepare template</p>\r\n </div>\r\n <div class=\"stepper-line\" [class.active]=\"isStep2Active()\"></div>\r\n <div class=\"stepper-step\">\r\n <div class=\"stepper-circle\" [class.active]=\"isStep2Active()\" [class.inactive]=\"!isStep2Active()\">2</div>\r\n <p class=\"stepper-text\" [class.active]=\"isStep2Active()\" [class.inactive]=\"!isStep2Active()\">Review and Approve</p>\r\n </div>\r\n </div>\r\n \r\n <!-- Action Buttons -->\r\n <div class=\"d-flex gap-2\">\r\n <button class=\"btn-cancel\" type=\"button\" (click)=\"onBackToDashboard()\">Cancel</button>\r\n <button class=\"btn-save-draft\" type=\"button\" (click)=\"onSaveDraft()\" [disabled]=\"loading\">Save As Draft</button>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <!-- Main Content -->\r\n <router-outlet *ngIf=\"!isBatchRunning()\"></router-outlet>", styles: [".header-card{background:#fff;border-radius:12px;padding:16px;margin-bottom:24px;box-shadow:0 1px 3px #0000001a}.header-title{font-size:18px;font-weight:600;color:#1d2939;margin:0;border:none;outline:none;background:transparent;width:100%;padding:0}.header-title:focus{outline:none;box-shadow:none;border:none}.header-title::placeholder{color:#98a2b3}.stepper-container{display:flex;align-items:center;gap:8px;flex:1;justify-content:center}.stepper-step{display:flex;align-items:center;gap:8px}.stepper-circle{width:20px;height:20px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;color:#fff}.stepper-circle.active{background-color:#1d2939}.stepper-circle.inactive{background-color:#98a2b3}.stepper-text{font-size:14px;font-weight:600;margin:0}.stepper-text.active{color:#1d2939}.stepper-text.inactive{color:#98a2b3}.stepper-line{width:50px;height:1.5px;background-color:#98a2b3}.stepper-line.active{background-color:#1d2939}.btn-cancel{padding:10px 16px;font-size:14px;font-weight:600;color:#667085;background:transparent;border:none;border-radius:8px;cursor:pointer;transition:background-color .15s ease-in-out}.btn-cancel:hover{background:#f9fafb;color:#344054}.btn-cancel:active{background:#f2f4f7}.btn-cancel:focus{outline:1px solid #00a3ff;outline-offset:1px}.btn-save-draft{padding:10px 16px;font-size:14px;font-weight:600;color:#344054;background:#fff;border:1px solid #d0d5dd;border-radius:8px;box-shadow:0 1px 2px #1018280d;cursor:pointer;transition:background-color .15s ease-in-out,border-color .15s ease-in-out}.btn-save-draft:hover{background:#f9fafb;border-color:#98a2b3}.btn-save-draft:active{background:#f2f4f7}.btn-save-draft:focus{outline:1px solid #00a3ff;outline-offset:1px}.batch-processing-container{display:flex;flex-direction:column;align-items:center;padding:176px 16px;width:100%;min-height:75vh;background-color:#fff}.batch-illustration{width:331px;height:179px;position:relative;margin-bottom:28px}.batch-illustration svg{display:block;width:100%;height:100%}.batch-content-section{display:flex;flex-direction:column;gap:24px;align-items:center;width:554px;max-width:100%}.batch-text-section{display:flex;flex-direction:column;gap:6px;align-items:center;text-align:center}.batch-title{font-size:20px;font-weight:600;line-height:30px;color:#1d2939;margin:0}.batch-description{font-size:14px;font-weight:500;line-height:20px;color:#1d2939;margin:0;max-width:554px}.batch-button-container{display:flex;justify-content:space-between;align-items:center;width:100%;gap:12px}.btn-batch-custom{background-color:#fff;color:#344054;border:1px solid #d0d5dd;border-radius:8px;padding:10px 18px;font-size:16px;font-weight:600;text-transform:capitalize;box-shadow:0 1px 2px #1018280d;transition:all .2s;white-space:nowrap;cursor:pointer}.btn-batch-custom:hover{background-color:#f9fafb;border-color:#b8bdc5;color:#344054}.btn-batch-custom:focus{outline:none;box-shadow:0 1px 2px #1018280d,0 0 0 .2rem #00a3ff40}.loading-dots{display:inline-block}.loading-dots .dot{display:inline-block;animation:dot-bounce 1.4s infinite ease-in-out;animation-fill-mode:both}.loading-dots .dot:nth-child(1){animation-delay:-.32s}.loading-dots .dot:nth-child(2){animation-delay:-.16s}.loading-dots .dot:nth-child(3){animation-delay:0s}@keyframes dot-bounce{0%,80%,to{opacity:.3;transform:scale(.8)}40%{opacity:1;transform:scale(1)}}@media (max-width: 768px){.batch-processing-container{padding:80px 16px}.batch-content-section{width:100%}.batch-description{max-width:100%}.batch-button-container{flex-direction:column;width:100%}.btn-batch-custom{width:100%}}::ng-deep .cancel-confirmation-modal .modal-dialog{max-width:480px}::ng-deep .cancel-confirmation-modal .modal-content{border:none;border-radius:12px;box-shadow:0 20px 24px -4px #10182814,0 8px 8px -4px #10182808;padding:0}::ng-deep .cancel-confirmation-modal .modal-header{border-bottom:none;padding:24px 16px 0}::ng-deep .cancel-confirmation-modal .modal-body{padding:0 16px}::ng-deep .cancel-confirmation-modal .modal-footer{border-top:none;padding:0 16px 24px}\n"] }]
|
|
358
|
+
}], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.CollectionUpdateAiDataService }, { type: i3.StoreBuilderService }, { type: i4.NgbModal }] });
|
|
359
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZC1yZXBsYWNlLWxheW91dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9jb2xsZWN0aW9uLXVwZGF0ZS1haS9maW5kLXJlcGxhY2UtbGF5b3V0L2ZpbmQtcmVwbGFjZS1sYXlvdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvY29sbGVjdGlvbi11cGRhdGUtYWkvZmluZC1yZXBsYWNlLWxheW91dC9maW5kLXJlcGxhY2UtbGF5b3V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQTBCLE1BQU0saUJBQWlCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSTdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV2QyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQzs7Ozs7OztBQVNuSCxNQUFNLE9BQU8sMEJBQTBCO0lBUTNCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFYVixlQUFlLEdBQXVCLElBQUksQ0FBQztJQUNuQyxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUN2QyxPQUFPLEdBQVksS0FBSyxDQUFDO0lBQ2pCLHFCQUFxQixHQUFRLElBQUksQ0FBQztJQUNsQyxlQUFlLEdBQVksS0FBSyxDQUFDO0lBRXpDLFlBQ1UsS0FBcUIsRUFDckIsTUFBYyxFQUNkLFdBQTBD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USxFQUFFLENBQUM7SUFDM0IsQ0FBQzt3R0F2V1UsMEJBQTBCOzRGQUExQiwwQkFBMEIsbUZDbEJ2QywwL1ZBeUU2RCx3aUlEM0RqRCxZQUFZLDBKQUFFLFdBQVcsK21CQUFFLElBQUk7OzRGQUk5QiwwQkFBMEI7a0JBUHRDLFNBQVM7K0JBQ0UseUJBQXlCLGNBQ3ZCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXJPdXRsZXQsIEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRmluZFJlcGxhY2UgfSBmcm9tICcuLi9tb2RlbHMvZmluZC1yZXBsYWNlLm1vZGVsJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvblVwZGF0ZUFpRGF0YVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdG9yZUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc3RvcmUtYnVpbGRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgQ2FuY2VsQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQgfSBmcm9tICcuL2NhbmNlbC1jb25maXJtYXRpb24tbW9kYWwvY2FuY2VsLWNvbmZpcm1hdGlvbi1tb2RhbC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItZmluZC1yZXBsYWNlLWxheW91dCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbUm91dGVyT3V0bGV0LCBGb3Jtc01vZHVsZSwgTmdJZl0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbmQtcmVwbGFjZS1sYXlvdXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9maW5kLXJlcGxhY2UtbGF5b3V0LmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRmluZFJlcGxhY2VMYXlvdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgZmluZFJlcGxhY2VEYXRhOiBGaW5kUmVwbGFjZSB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIGJhdGNoUHJvZ3Jlc3NJbnRlcnZhbDogYW55ID0gbnVsbDtcclxuICBwcml2YXRlIGlzUG9sbGluZ0FjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IENvbGxlY3Rpb25VcGRhdGVBaURhdGFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdG9yZUJ1aWxkZXJTZXJ2aWNlOiBTdG9yZUJ1aWxkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIFN1YnNjcmliZSB0byBkYXRhIGNoYW5nZXMgZnJvbSBzZXJ2aWNlXHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEZpbmRSZXBsYWNlRGF0YSgpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzU3RhdHVzID0gdGhpcy5maW5kUmVwbGFjZURhdGE/LnN0YXR1cztcclxuICAgICAgICB0aGlzLmZpbmRSZXBsYWNlRGF0YSA9IGRhdGE7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gSGFuZGxlIHN0YXR1cy1iYXNlZCByb3V0aW5nXHJcbiAgICAgICAgaWYgKGRhdGE/LnN0YXR1cykge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVTdGF0dXNCYXNlZFJvdXRpbmcoZGF0YS5zdGF0dXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvLyBIYW5kbGUgYmF0Y2gtcnVubmluZyBzdGF0dXMgcG9sbGluZ1xyXG4gICAgICAgIGlmIChkYXRhPy5zdGF0dXMgPT09ICdiYXRjaC1ydW5uaW5nJykge1xyXG4gICAgICAgICAgLy8gSWYgc3RhdHVzIGNoYW5nZWQgdG8gYmF0Y2gtcnVubmluZyBvciBwYWdlIHdhcyByZWZyZXNoZWQgd2l0aCBiYXRjaC1ydW5uaW5nIHN0YXR1c1xyXG4gICAgICAgICAgLy8gKHByZXZpb3VzU3RhdHVzIHdpbGwgYmUgdW5kZWZpbmVkL251bGwgb24gaW5pdGlhbCBsb2FkIG9yIGRpZmZlcmVudCBzdGF0dXMpXHJcbiAgICAgICAgICBpZiAocHJldmlvdXNTdGF0dXMgIT09ICdiYXRjaC1ydW5uaW5nJykge1xyXG4gICAgICAgICAgICAvLyBDYWxsIEFQSSBpbW1lZGlhdGVseSBvbiBzdGF0dXMgY2hhbmdlIG9yIHBhZ2UgcmVmcmVzaFxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUJhdGNoUHJvZ3Jlc3NBbmRSZWZldGNoKCk7XHJcbiAgICAgICAgICAgIC8vIFN0YXJ0IHBvbGxpbmcgaWYgbm90IGFscmVhZHkgc3RhcnRlZFxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0QmF0Y2hQcm9ncmVzc1BvbGxpbmcoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIERvbid0IHJlc3RhcnQgcG9sbGluZyBpZiBpdCdzIGFscmVhZHkgYWN0aXZlICh0byBwcmV2ZW50IHJlc3RhcnRpbmcgb24gZGF0YSB1cGRhdGVzKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBTdG9wIHBvbGxpbmcgaWYgc3RhdHVzIGlzIG5vdCBiYXRjaC1ydW5uaW5nXHJcbiAgICAgICAgICB0aGlzLnN0b3BCYXRjaFByb2dyZXNzUG9sbGluZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgLy8gU3Vic2NyaWJlIHRvIGxvYWRpbmcgc3RhdGUgZnJvbSBzZXJ2aWNlXHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldExvYWRpbmdTdGF0ZSgpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgobG9hZGluZykgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGxvYWRpbmc7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIFN1YnNjcmliZSB0byBzYXZlZCBJRCB0byB1cGRhdGUgVVJMIHF1ZXJ5IHBhcmFtcyBmb3IgaW5pdGlhbCBzYXZlc1xyXG4gICAgdGhpcy5kYXRhU2VydmljZS5nZXRTYXZlZElkKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChpZCkgPT4ge1xyXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZXJlJ3Mgbm8gSUQgaW4gY3VycmVudCBxdWVyeSBwYXJhbXMgKGluaXRpYWwgc2F2ZSlcclxuICAgICAgICBjb25zdCBjdXJyZW50UGFyYW1zID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcztcclxuICAgICAgICBpZiAoIWN1cnJlbnRQYXJhbXM/LlsnaWQnXSAmJiBpZCkge1xyXG4gICAgICAgICAgLy8gVXBkYXRlIFVSTCB3aXRoIHRoZSBuZXcgSUQgd2l0aG91dCBuYXZpZ2F0aW5nXHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xyXG4gICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxyXG4gICAgICAgICAgICBxdWVyeVBhcmFtczogeyBpZDogaWQgfSxcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcclxuICAgICAgICAgICAgcmVwbGFjZVVybDogdHJ1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAvLyBMb2FkIGRhdGEgZnJvbSByb3V0ZSBwYXJhbXNcclxuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcclxuICAgICAgICBpZiAocGFyYW1zPy5bJ2lkJ10pIHtcclxuICAgICAgICAgIHRoaXMubG9hZEZpbmRSZXBsYWNlRGF0YUJ5SWQocGFyYW1zWydpZCddKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZEZpbmRSZXBsYWNlRGF0YUJ5SWQoaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRhU2VydmljZS5sb2FkQW5kU2V0RmluZFJlcGxhY2VEYXRhQnlJZChpZCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkNhbmNlbCgpIHtcclxuICAgIC8vIENoZWNrIGlmIGJhdGNoIGlzIHJ1bm5pbmcgLSBzaG93IGNvbmZpcm1hdGlvbiBtb2RhbFxyXG4gICAgaWYgKHRoaXMuaXNCYXRjaFJ1bm5pbmcoKSkge1xyXG4gICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQ2FuY2VsQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQsIHtcclxuICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgICBzaXplOiAnbGcnLFxyXG4gICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcclxuICAgICAgICB3aW5kb3dDbGFzczogJ2NhbmNlbC1jb25maXJtYXRpb24tbW9kYWwnXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2RhbFJlZi5yZXN1bHQ7XHJcbiAgICAgICAgLy8gVXNlciBjb25maXJtZWQgY2FuY2VsbGF0aW9uXHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgdGhpcy5wcm9jZWVkV2l0aENhbmNlbCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZGlzbWlzc2VkKSB7XHJcbiAgICAgICAgLy8gVXNlciBkaXNtaXNzZWQgdGhlIG1vZGFsIChjbGlja2VkIFwiS2VlcCBQcm9jZXNzaW5nXCIgb3Igb3V0c2lkZSlcclxuICAgICAgICAvLyBEbyBub3RoaW5nLCBqdXN0IGNsb3NlIHRoZSBtb2RhbFxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBJZiBub3QgYmF0Y2ggcnVubmluZywgcHJvY2VlZCBkaXJlY3RseSB3aXRoIGNhbmNlbFxyXG4gICAgICB0aGlzLnByb2NlZWRXaXRoQ2FuY2VsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByb2NlZWRXaXRoQ2FuY2VsKCkge1xyXG4gICAgLy8gSWYgdGhlcmUncyBhIGZpbmRSZXBsYWNlSWQsIGNhbGwgdGhlIGNhbmNlbCBBUEkgYW5kIHJlZmV0Y2ggZGF0YVxyXG4gICAgaWYgKHRoaXMuZmluZFJlcGxhY2VEYXRhPy5faWQpIHtcclxuICAgICAgY29uc3QgZmluZFJlcGxhY2VJZCA9IHRoaXMuZmluZFJlcGxhY2VEYXRhLl9pZDtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLmNhbmNlbEZpbmRSZXBsYWNlKHtcclxuICAgICAgICBmaW5kUmVwbGFjZUlkOiBmaW5kUmVwbGFjZUlkXHJcbiAgICAgIH0pXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlPy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAvLyBSZWZldGNoIGZpbmQgYW5kIHJlcGxhY2UgZGF0YSBhZnRlciBzdWNjZXNzZnVsIGNhbmNlbFxyXG4gICAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UubG9hZEZpbmRSZXBsYWNlRGF0YUJ5SWQoZmluZFJlcGxhY2VJZClcclxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICBuZXh0OiAoZ2V0UmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChnZXRSZXNwb25zZT8uY29kZSA9PT0gMjAwICYmIGdldFJlc3BvbnNlPy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLnNldEZpbmRSZXBsYWNlRGF0YShnZXRSZXNwb25zZS5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBmaW5kIHJlcGxhY2UgZGF0YTonLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNhbmNlbGluZyBmaW5kIHJlcGxhY2U6JywgcmVzcG9uc2U/Lm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNhbmNlbGluZyBmaW5kIHJlcGxhY2U6JywgZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gSWYgbm8gSUQsIGp1c3QgbmF2aWdhdGUgYXdheVxyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9tYW5hZ2UvcGxhbm9ncmFtL2ZpbmQtcmVwbGFjZS10YWJsZSddKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQmFja1RvRGFzaGJvYXJkKCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbWFuYWdlL3BsYW5vZ3JhbS9maW5kLXJlcGxhY2UtdGFibGUnXSk7XHJcbiAgfVxyXG5cclxuICBvblNhdmVEcmFmdCgpIHtcclxuICAgIHRoaXMuZGF0YVNlcnZpY2UudHJpZ2dlclNhdmVEcmFmdCgpO1xyXG4gIH1cclxuXHJcbiAgaXNTdGVwMkFjdGl2ZSgpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5maW5kUmVwbGFjZURhdGE/LnN0YXR1cykge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXZpZXdTdGF0dXNlczogQXJyYXk8RmluZFJlcGxhY2VbJ3N0YXR1cyddPiA9IFsneWV0LXRvLWFwcHJvdmUnLCAnYXBwcm92ZWQnXTtcclxuICAgIHJldHVybiByZXZpZXdTdGF0dXNlcy5pbmNsdWRlcyh0aGlzLmZpbmRSZXBsYWNlRGF0YS5zdGF0dXMpO1xyXG4gIH1cclxuXHJcbiAgaXNMaW5lQWN0aXZlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNTdGVwMkFjdGl2ZSgpO1xyXG4gIH1cclxuXHJcbiAgaXNCYXRjaFJ1bm5pbmcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5maW5kUmVwbGFjZURhdGE/LnN0YXR1cyA9PT0gJ2JhdGNoLXJ1bm5pbmcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0QmF0Y2hQcm9ncmVzcygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZmluZFJlcGxhY2VEYXRhPy5iYXRjaFByb2dyZXNzID8/IDA7XHJcbiAgfVxyXG5cclxuICBnZXRTdG9yZUNvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5maW5kUmVwbGFjZURhdGE/LnN0b3JlQ291bnQgfHwgdGhpcy5maW5kUmVwbGFjZURhdGE/LnN0b3Jlcz8ubGVuZ3RoIHx8IDA7XHJcbiAgfVxyXG5cclxuICBnZXQgdGl0bGUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmZpbmRSZXBsYWNlRGF0YT8ubmFtZSB8fCAnVW50aXRsZWQnO1xyXG4gIH1cclxuXHJcbiAgc2V0IHRpdGxlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGFjdHVhbFZhbHVlID0gdmFsdWUgPT09ICdVbnRpdGxlZCcgPyAnJyA6IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMuZmluZFJlcGxhY2VEYXRhKSB7XHJcbiAgICAgIHRoaXMuZmluZFJlcGxhY2VEYXRhLm5hbWUgPSBhY3R1YWxWYWx1ZTtcclxuICAgICAgLy8gVXBkYXRlIHRoZSBzZXJ2aWNlIHdpdGggdGhlIG5ldyBuYW1lXHJcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UudXBkYXRlRGF0YSh7IG5hbWU6IGFjdHVhbFZhbHVlIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gSW5pdGlhbGl6ZSBkYXRhIGlmIGl0IGRvZXNuJ3QgZXhpc3RcclxuICAgICAgdGhpcy5kYXRhU2VydmljZS51cGRhdGVEYXRhKHsgXHJcbiAgICAgICAgbmFtZTogYWN0dWFsVmFsdWUsXHJcbiAgICAgICAgc3RhdHVzOiAnZHJhZnQnLFxyXG4gICAgICAgIHRhcmdldDogJ21lcmNoJ1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSBzdGF0dXMtYmFzZWQgcm91dGluZ1xyXG4gICAqL1xyXG4gIHByaXZhdGUgaGFuZGxlU3RhdHVzQmFzZWRSb3V0aW5nKHN0YXR1czogRmluZFJlcGxhY2VbJ3N0YXR1cyddKTogdm9pZCB7XHJcbiAgICBpZiAoIXN0YXR1cykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3VycmVudFVybCA9IHRoaXMucm91dGVyLnVybDtcclxuICAgIGNvbnN0IHJldmlld1N0YXR1c2VzOiBBcnJheTxGaW5kUmVwbGFjZVsnc3RhdHVzJ10+ID0gWyd5ZXQtdG8tYXBwcm92ZScsICdhcHByb3ZlZCddO1xyXG4gICAgXHJcbiAgICAvLyBSZWRpcmVjdCB0byAvcmV2aWV3IGlmIHN0YXR1cyBpcyBpbiByZXZpZXcgc3RhdHVzZXNcclxuICAgIGlmIChyZXZpZXdTdGF0dXNlcy5pbmNsdWRlcyhzdGF0dXMpKSB7XHJcbiAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIG5vdCBhbHJlYWR5IG9uIHRoZSByZXZpZXcgcm91dGVcclxuICAgICAgaWYgKCFjdXJyZW50VXJsLmluY2x1ZGVzKCcvcmV2aWV3JykpIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4vcmV2aWV3J10sIHtcclxuICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXHJcbiAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAncHJlc2VydmUnXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIFJlZGlyZWN0IHRvIC9wcmVwYXJlIGlmIHN0YXR1cyBpcyBkcmFmdFxyXG4gICAgZWxzZSBpZiAoc3RhdHVzID09PSAnZHJhZnQnKSB7XHJcbiAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIG5vdCBhbHJlYWR5IG9uIHRoZSBwcmVwYXJlIHJvdXRlXHJcbiAgICAgIGlmICghY3VycmVudFVybC5pbmNsdWRlcygnL3ByZXBhcmUnKSkge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi9wcmVwYXJlJ10sIHtcclxuICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXHJcbiAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAncHJlc2VydmUnXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBiYXRjaCBwcm9ncmVzcyBhbmQgcmVmZXRjaCBmaW5kIHJlcGxhY2UgZGF0YVxyXG4gICAqIFJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBib3RoIEFQSSBjYWxscyBjb21wbGV0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgdXBkYXRlQmF0Y2hQcm9ncmVzc0FuZFJlZmV0Y2goKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuZmluZFJlcGxhY2VEYXRhPy5faWQpIHtcclxuICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2UudXBkYXRlQmF0Y2hQcm9ncmVzcyh7XHJcbiAgICAgICAgZmluZFJlcGxhY2VJZDogdGhpcy5maW5kUmVwbGFjZURhdGEuX2lkXHJcbiAgICAgIH0pXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgLy8gQWZ0ZXIgdXBkYXRpbmcgYmF0Y2ggcHJvZ3Jlc3MsIHJlZmV0Y2ggdGhlIGZpbmQgcmVwbGFjZSBkYXRhXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbmRSZXBsYWNlRGF0YT8uX2lkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5sb2FkRmluZFJlcGxhY2VEYXRhQnlJZCh0aGlzLmZpbmRSZXBsYWNlRGF0YS5faWQpXHJcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgbmV4dDogKGdldFJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0UmVzcG9uc2U/LmNvZGUgPT09IDIwMCAmJiBnZXRSZXNwb25zZT8uZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5zZXRGaW5kUmVwbGFjZURhdGEoZ2V0UmVzcG9uc2UuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGZpbmQgcmVwbGFjZSBkYXRhOicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7IC8vIFJlc29sdmUgYW55d2F5IHRvIGNvbnRpbnVlIHBvbGxpbmdcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB1cGRhdGluZyBiYXRjaCBwcm9ncmVzczonLCBlcnJvcik7XHJcbiAgICAgICAgICAgIHJlc29sdmUoKTsgLy8gUmVzb2x2ZSBhbnl3YXkgdG8gY29udGludWUgcG9sbGluZ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGFydCBwb2xsaW5nIGZvciBiYXRjaCBwcm9ncmVzcyB1cGRhdGVzIGV2ZXJ5IDEwIHNlY29uZHNcclxuICAgKiBUaW1lciBvbmx5IHN0YXJ0cyBhZnRlciBib3RoIHVwZGF0ZSBhbmQgZ2V0IEFQSSBjYWxscyBjb21wbGV0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc3RhcnRCYXRjaFByb2dyZXNzUG9sbGluZygpOiB2b2lkIHtcclxuICAgIC8vIERvbid0IHN0YXJ0IGlmIGFscmVhZHkgcG9sbGluZ1xyXG4gICAgaWYgKHRoaXMuaXNQb2xsaW5nQWN0aXZlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDbGVhciBhbnkgZXhpc3RpbmcgaW50ZXJ2YWwvdGltZW91dFxyXG4gICAgdGhpcy5zdG9wQmF0Y2hQcm9ncmVzc1BvbGxpbmcoKTtcclxuXHJcbiAgICAvLyBNYXJrIHBvbGxpbmcgYXMgYWN0aXZlXHJcbiAgICB0aGlzLmlzUG9sbGluZ0FjdGl2ZSA9IHRydWU7XHJcblxyXG4gICAgLy8gU3RhcnQgdGhlIHBvbGxpbmcgY3ljbGVcclxuICAgIHRoaXMuc2NoZWR1bGVOZXh0UG9sbCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2NoZWR1bGUgdGhlIG5leHQgcG9sbCBhZnRlciBib3RoIEFQSSBjYWxscyBjb21wbGV0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2NoZWR1bGVOZXh0UG9sbCgpOiB2b2lkIHtcclxuICAgIC8vIENsZWFyIGFueSBleGlzdGluZyB0aW1lb3V0XHJcbiAgICBpZiAodGhpcy5iYXRjaFByb2dyZXNzSW50ZXJ2YWwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuYmF0Y2hQcm9ncmVzc0ludGVydmFsKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBpZiB3ZSBzaG91bGQgY29udGludWUgcG9sbGluZ1xyXG4gICAgaWYgKHRoaXMuZmluZFJlcGxhY2VEYXRhPy5zdGF0dXMgIT09ICdiYXRjaC1ydW5uaW5nJykge1xyXG4gICAgICB0aGlzLnN0b3BCYXRjaFByb2dyZXNzUG9sbGluZygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2FsbCB0aGUgQVBJcyBhbmQgc2NoZWR1bGUgbmV4dCBwb2xsIGFmdGVyIHRoZXkgY29tcGxldGVcclxuICAgIHRoaXMudXBkYXRlQmF0Y2hQcm9ncmVzc0FuZFJlZmV0Y2goKVxyXG4gICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgLy8gT25seSBzY2hlZHVsZSBuZXh0IHBvbGwgaWYgc3RhdHVzIGlzIHN0aWxsIGJhdGNoLXJ1bm5pbmdcclxuICAgICAgICBpZiAodGhpcy5maW5kUmVwbGFjZURhdGE/LnN0YXR1cyA9PT0gJ2JhdGNoLXJ1bm5pbmcnKSB7XHJcbiAgICAgICAgICAvLyBTdGFydCB0aW1lciBmb3IgbmV4dCBwb2xsICgxMCBzZWNvbmRzIGFmdGVyIGJvdGggQVBJcyBjb21wbGV0ZSlcclxuICAgICAgICAgIHRoaXMuYmF0Y2hQcm9ncmVzc0ludGVydmFsID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NoZWR1bGVOZXh0UG9sbCgpO1xyXG4gICAgICAgICAgfSwgMTAwMDApOyAvLyAxMCBzZWNvbmRzXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIFN0b3AgcG9sbGluZyBpZiBzdGF0dXMgY2hhbmdlZFxyXG4gICAgICAgICAgdGhpcy5zdG9wQmF0Y2hQcm9ncmVzc1BvbGxpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBwb2xsaW5nIGN5Y2xlOicsIGVycm9yKTtcclxuICAgICAgICAvLyBDb250aW51ZSBwb2xsaW5nIGV2ZW4gb24gZXJyb3JcclxuICAgICAgICBpZiAodGhpcy5maW5kUmVwbGFjZURhdGE/LnN0YXR1cyA9PT0gJ2JhdGNoLXJ1bm5pbmcnKSB7XHJcbiAgICAgICAgICB0aGlzLmJhdGNoUHJvZ3Jlc3NJbnRlcnZhbCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNjaGVkdWxlTmV4dFBvbGwoKTtcclxuICAgICAgICAgIH0sIDEwMDAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBwb2xsaW5nIGZvciBiYXRjaCBwcm9ncmVzcyB1cGRhdGVzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzdG9wQmF0Y2hQcm9ncmVzc1BvbGxpbmcoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5iYXRjaFByb2dyZXNzSW50ZXJ2YWwpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuYmF0Y2hQcm9ncmVzc0ludGVydmFsKTtcclxuICAgICAgdGhpcy5iYXRjaFByb2dyZXNzSW50ZXJ2YWwgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc1BvbGxpbmdBY3RpdmUgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdG9wQmF0Y2hQcm9ncmVzc1BvbGxpbmcoKTtcclxuICAgIC8vIENsZWFyIHNlcnZpY2UgZGF0YSB3aGVuIGV4aXRpbmcgdGhlIGNvbXBvbmVudFxyXG4gICAgdGhpcy5kYXRhU2VydmljZS5jbGVhckRhdGEoKTtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCIgICAgPCEtLSBCYXRjaCBSdW5uaW5nIFVJIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cImlzQmF0Y2hSdW5uaW5nKClcIiBjbGFzcz1cImJhdGNoLXByb2Nlc3NpbmctY29udGFpbmVyXCI+XHJcbiAgICAgICAgPCEtLSBTVkcgSWxsdXN0cmF0aW9uIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJiYXRjaC1pbGx1c3RyYXRpb25cIj5cclxuICAgICAgICAgICAgPHN2ZyBmaWxsPVwibm9uZVwiIHByZXNlcnZlQXNwZWN0UmF0aW89XCJub25lXCIgdmlld0JveD1cIjAgMCAzMzEgMTgzXCI+XHJcbiAgICAgICAgICAgICAgICA8ZyBpZD1cIkdyb3VwIDI4OTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTI0Ny45OSA0NkMyNjguMTQ5IDQ2IDI4NC40OSA2Mi4zNDE2IDI4NC40OSA4Mi41QzI4NC40OSA5MS4wNzg4IDI5MC4yODEgMTAxIDI5OC44NTkgMTAxSDMxMkMzMjIuNDkzIDEwMSAzMzEgMTA5LjUwNyAzMzEgMTIwQzMzMSAxMzAuNDkzIDMyMi40OTMgMTM5IDMxMiAxMzlIMjcyLjk2MkMyNjguNjM0IDEzOSAyNjUuNzIxIDE0NC4xNzEgMjY1LjcyMSAxNDguNUMyNjUuNzIxIDE1OC4xNjUgMjU3Ljg4NiAxNjYgMjQ4LjIyMSAxNjZIMTE5LjIyMUMxMDkuNTU2IDE2NiAxMDEuNzIxIDE1OC4xNjUgMTAxLjcyMSAxNDguNUMxMDEuNzIxIDE0NC4xNzEgOTguODA3NyAxMzkgOTQuNDc5IDEzOUgxOUM4LjUwNjU5IDEzOSAwIDEzMC40OTMgMCAxMjBDMCAxMDkuNTA3IDguNTA2NTkgMTAxIDE5IDEwMUg2NS4xMjFDNzMuNjk5OCAxMDEgNzkuNDkwMiA5MS4wNzg4IDc5LjQ5MDIgODIuNUM3OS40OTAyIDYyLjM0MTYgOTUuODMxOSA0NiAxMTUuOTkgNDZIMjQ3Ljk5WlwiIGZpbGw9XCIjRUFFQ0YwXCIgaWQ9XCJVbmlvblwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgZmlsbD1cIiM5OURBRkZcIiBoZWlnaHQ9XCIxMDRcIiBpZD1cIlJlY3RhbmdsZSAyMjcwXCIgcng9XCI0XCIgd2lkdGg9XCI2NFwiIHg9XCIxNzYuMTlcIiB5PVwiNzZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IGZpbGw9XCIjOTlEQUZGXCIgaGVpZ2h0PVwiMTA0XCIgaWQ9XCJSZWN0YW5nbGUgMjI2OVwiIHJ4PVwiNFwiIHdpZHRoPVwiNjRcIiB4PVwiMTE5LjE5XCIgeT1cIjE2XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIyNS42MDUgMTIxLjQxNEMyMjYuMzg2IDEyMC42MzMgMjI2LjM4NiAxMTkuMzY3IDIyNS42MDUgMTE4LjU4NkwyMTIuODc3IDEwNS44NThDMjEyLjA5NiAxMDUuMDc3IDIxMC44MjkgMTA1LjA3NyAyMTAuMDQ4IDEwNS44NThDMjA5LjI2NyAxMDYuNjM5IDIwOS4yNjcgMTA3LjkwNSAyMTAuMDQ4IDEwOC42ODZMMjIxLjM2MiAxMjBMMjEwLjA0OCAxMzEuMzE0QzIwOS4yNjcgMTMyLjA5NSAyMDkuMjY3IDEzMy4zNjEgMjEwLjA0OCAxMzQuMTQyQzIxMC44MjkgMTM0LjkyMyAyMTIuMDk2IDEzNC45MjMgMjEyLjg3NyAxMzQuMTQyTDIyNS42MDUgMTIxLjQxNFpNMTgyLjE5IDQ5LjVDMTgyLjE5IDUwLjYwNDYgMTgzLjA4NiA1MS41IDE4NC4xOSA1MS41QzE4NS4yOTUgNTEuNSAxODYuMTkgNTAuNjA0NiAxODYuMTkgNDkuNUgxODQuMTlIMTgyLjE5Wk0xMjQuMTkgMTVWMTdIMTc4LjE5VjE1VjEzSDEyNC4xOVYxNVpNMjI0LjE5IDEyMFYxMThIMTI0LjE5VjEyMFYxMjJIMjI0LjE5VjEyMFpNMTE4LjE5IDExNEgxMjAuMTlWMjFIMTE4LjE5SDExNi4xOVYxMTRIMTE4LjE5Wk0xODQuMTkgMjFIMTgyLjE5VjQ5LjVIMTg0LjE5SDE4Ni4xOVYyMUgxODQuMTlaTTEyNC4xOSAxMjBWMTE4QzEyMS45ODEgMTE4IDEyMC4xOSAxMTYuMjA5IDEyMC4xOSAxMTRIMTE4LjE5SDExNi4xOUMxMTYuMTkgMTE4LjQxOCAxMTkuNzcyIDEyMiAxMjQuMTkgMTIyVjEyMFpNMTc4LjE5IDE1VjE3QzE4MC40IDE3IDE4Mi4xOSAxOC43OTA5IDE4Mi4xOSAyMUgxODQuMTlIMTg2LjE5QzE4Ni4xOSAxNi41ODE3IDE4Mi42MDkgMTMgMTc4LjE5IDEzVjE1Wk0xMjQuMTkgMTVWMTNDMTE5Ljc3MiAxMyAxMTYuMTkgMTYuNTgxNyAxMTYuMTkgMjFIMTE4LjE5SDEyMC4xOUMxMjAuMTkgMTguNzkwOSAxMjEuOTgxIDE3IDEyNC4xOSAxN1YxNVpcIiBmaWxsPVwiIzAwQTNGRlwiIGlkPVwiUmVjdGFuZ2xlIDIyNTRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMyLjc3NiA3NC41ODU4QzEzMS45OTUgNzUuMzY2OCAxMzEuOTk1IDc2LjYzMzIgMTMyLjc3NiA3Ny40MTQyTDE0NS41MDQgOTAuMTQyMUMxNDYuMjg1IDkwLjkyMzIgMTQ3LjU1MiA5MC45MjMyIDE0OC4zMzMgOTAuMTQyMUMxNDkuMTE0IDg5LjM2MTEgMTQ5LjExNCA4OC4wOTQ3IDE0OC4zMzMgODcuMzEzN0wxMzcuMDE5IDc2TDE0OC4zMzMgNjQuNjg2M0MxNDkuMTE0IDYzLjkwNTIgMTQ5LjExNCA2Mi42Mzg5IDE0OC4zMzMgNjEuODU3OUMxNDcuNTUyIDYxLjA3NjggMTQ2LjI4NSA2MS4wNzY4IDE0NS41MDQgNjEuODU3OUwxMzIuNzc2IDc0LjU4NThaTTE3Ni4xOSAxNDYuNUMxNzYuMTkgMTQ1LjM5NSAxNzUuMjk1IDE0NC41IDE3NC4xOSAxNDQuNUMxNzMuMDg2IDE0NC41IDE3Mi4xOSAxNDUuMzk1IDE3Mi4xOSAxNDYuNUwxNzQuMTkgMTQ2LjVMMTc2LjE5IDE0Ni41Wk0yMzQuMTkgMTgxTDIzNC4xOSAxNzlMMTgwLjE5IDE3OUwxODAuMTkgMTgxTDE4MC4xOSAxODNMMjM0LjE5IDE4M0wyMzQuMTkgMTgxWk0xMzQuMTkgNzZMMTM0LjE5IDc4TDIzNC4xOSA3OEwyMzQuMTkgNzZMMjM0LjE5IDc0TDEzNC4xOSA3NEwxMzQuMTkgNzZaTTI0MC4xOSA4MkwyMzguMTkgODJMMjM4LjE5IDE3NUwyNDAuMTkgMTc1TDI0Mi4xOSAxNzVMMjQyLjE5IDgyTDI0MC4xOSA4MlpNMTc0LjE5IDE3NUwxNzYuMTkgMTc1TDE3Ni4xOSAxNDYuNUwxNzQuMTkgMTQ2LjVMMTcyLjE5IDE0Ni41TDE3Mi4xOSAxNzVMMTc0LjE5IDE3NVpNMjM0LjE5IDc2TDIzNC4xOSA3OEMyMzYuNCA3OCAyMzguMTkgNzkuNzkwOSAyMzguMTkgODJMMjQwLjE5IDgyTDI0Mi4xOSA4MkMyNDIuMTkgNzcuNTgxNyAyMzguNjA5IDc0IDIzNC4xOSA3NEwyMzQuMTkgNzZaTTE4MC4xOSAxODFMMTgwLjE5IDE3OUMxNzcuOTgxIDE3OSAxNzYuMTkgMTc3LjIwOSAxNzYuMTkgMTc1TDE3NC4xOSAxNzVMMTcyLjE5IDE3NUMxNzIuMTkgMTc5LjQxOCAxNzUuNzcyIDE4MyAxODAuMTkgMTgzTDE4MC4xOSAxODFaTTIzNC4xOSAxODFMMjM0LjE5IDE4M0MyMzguNjA5IDE4MyAyNDIuMTkgMTc5LjQxOCAyNDIuMTkgMTc1TDI0MC4xOSAxNzVMMjM4LjE5IDE3NUMyMzguMTkgMTc3LjIwOSAyMzYuNCAxNzkgMjM0LjE5IDE3OUwyMzQuMTkgMTgxWlwiIGZpbGw9XCIjMDBBM0ZGXCIgaWQ9XCJSZWN0YW5nbGUgMjI1NlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNDAuMjMyIDMwTDE0MC45NSAzMy40MjgxQzE0MS4zMTYgMzUuMTc1OCAxNDIuMTI5IDM2Ljc5ODkgMTQzLjMwOSAzOC4xMzlDMTQ0LjQ4OSAzOS40NzkxIDE0NS45OTYgNDAuNDkwNiAxNDcuNjg0IDQxLjA3NDdMMTQ5LjI3NCA0MS42MjVMMTQ3LjY4NCA0Mi4xNzUyQzE0NS45OTYgNDIuNzU5NCAxNDQuNDg5IDQzLjc3MDkgMTQzLjMwOSA0NS4xMTFDMTQyLjEyOSA0Ni40NTExIDE0MS4zMTYgNDguMDc0MiAxNDAuOTUgNDkuODIxOUwxNDAuMjMyIDUzLjI1TDEzOS41MTQgNDkuODIxOUMxMzkuMTQ4IDQ4LjA3NDIgMTM4LjMzNSA0Ni40NTExIDEzNy4xNTUgNDUuMTExQzEzNS45NzUgNDMuNzcwOSAxMzQuNDY4IDQyLjc1OTQgMTMyLjc4IDQyLjE3NTJMMTMxLjE5IDQxLjYyNUwxMzIuNzggNDEuMDc0N0MxMzQuNDY4IDQwLjQ5MDYgMTM1Ljk3NSAzOS40NzkxIDEzNy4xNTUgMzguMTM5QzEzOC4zMzUgMzYuNzk4OSAxMzkuMTQ4IDM1LjE3NTggMTM5LjUxNCAzMy40MjgxTDE0MC4yMzIgMzBaXCIgaWQ9XCJWZWN0b3JcIiBzdHJva2U9XCIjMDBBM0ZGXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiNFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMTcuMjMyIDE0M0wyMTcuOTUgMTQ2LjQyOEMyMTguMzE2IDE0OC4xNzYgMjE5LjEyOSAxNDkuNzk5IDIyMC4zMDkgMTUxLjEzOUMyMjEuNDg5IDE1Mi40NzkgMjIyLjk5NiAxNTMuNDkxIDIyNC42ODQgMTU0LjA3NUwyMjYuMjc0IDE1NC42MjVMMjI0LjY4NCAxNTUuMTc1QzIyMi45OTYgMTU1Ljc1OSAyMjEuNDg5IDE1Ni43NzEgMjIwLjMwOSAxNTguMTExQzIxOS4xMjkgMTU5LjQ1MSAyMTguMzE2IDE2MS4wNzQgMjE3Ljk1IDE2Mi44MjJMMjE3LjIzMiAxNjYuMjVMMjE2LjUxNCAxNjIuODIyQzIxNi4xNDggMTYxLjA3NCAyMTUuMzM1IDE1OS40NTEgMjE0LjE1NSAxNTguMTExQzIxMi45NzUgMTU2Ljc3MSAyMTEuNDY4IDE1NS43NTkgMjA5Ljc4IDE1NS4xNzVMMjA4LjE5IDE1NC42MjVMMjA5Ljc4IDE1NC4wNzVDMjExLjQ2OCAxNTMuNDkxIDIxMi45NzUgMTUyLjQ3OSAyMTQuMTU1IDE1MS4xMzlDMjE1LjMzNSAxNDkuNzk5IDIxNi4xNDggMTQ4LjE3NiAyMTYuNTE0IDE0Ni40MjhMMjE3LjIzMiAxNDNaXCIgaWQ9XCJWZWN0b3JfMlwiIHN0cm9rZT1cIiMwMEEzRkZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCI0XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE5Mi4xOSAxNDhMMTkyLjU4OCAxNDkuOTE3QzE5Mi43OSAxNTAuODk0IDE5My4yMzkgMTUxLjgwMiAxOTMuODkyIDE1Mi41NTFDMTk0LjU0NSAxNTMuMyAxOTUuMzc4IDE1My44NjYgMTk2LjMxMSAxNTQuMTkyTDE5Ny4xOSAxNTQuNUwxOTYuMzExIDE1NC44MDhDMTk1LjM3OCAxNTUuMTM0IDE5NC41NDUgMTU1LjcgMTkzLjg5MiAxNTYuNDQ5QzE5My4yMzkgMTU3LjE5OCAxOTIuNzkgMTU4LjEwNiAxOTIuNTg4IDE1OS4wODNMMTkyLjE5IDE2MUwxOTEuNzkzIDE1OS4wODNDMTkxLjU5MSAxNTguMTA2IDE5MS4xNDEgMTU3LjE5OCAxOTAuNDg5IDE1Ni40NDlDMTg5LjgzNiAxNTUuNyAxODkuMDAzIDE1NS4xMzQgMTg4LjA3IDE1NC44MDhMMTg3LjE5IDE1NC41TDE4OC4wNyAxNTQuMTkyQzE4OS4wMDMgMTUzLjg2NiAxODkuODM2IDE1My4zIDE5MC40ODkgMTUyLjU1MUMxOTEuMTQxIDE1MS44MDIgMTkxLjU5MSAxNTAuODk0IDE5MS43OTMgMTQ5LjkxN0wxOTIuMTkgMTQ4WlwiIGlkPVwiVmVjdG9yXzNcIiBzdHJva2U9XCIjNkJDQUZGXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiNFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMDcuMTkgMkwxMDcuNTg4IDMuOTE2NzhDMTA3Ljc5IDQuODk0IDEwOC4yMzkgNS44MDE1MiAxMDguODkyIDYuNTUwODRDMTA5LjU0NSA3LjMwMDE2IDExMC4zNzggNy44NjU3MSAxMTEuMzExIDguMTkyMzNMMTEyLjE5IDguNUwxMTEuMzExIDguODA3NjdDMTEwLjM3OCA5LjEzNDI5IDEwOS41NDUgOS42OTk4NCAxMDguODkyIDEwLjQ0OTJDMTA4LjIzOSAxMS4xOTg1IDEwNy43OSAxMi4xMDYgMTA3LjU4OCAxMy4wODMyTDEwNy4xOSAxNUwxMDYuNzkzIDEzLjA4MzJDMTA2LjU5MSAxMi4xMDYgMTA2LjE0MSAxMS4xOTg1IDEwNS40ODkgMTAuNDQ5MkMxMDQuODM2IDkuNjk5ODQgMTA0LjAwMyA5LjEzNDI5IDEwMy4wNyA4LjgwNzY3TDEwMi4xOSA4LjVMMTAzLjA3IDguMTkyMzNDMTA0LjAwMyA3Ljg2NTcxIDEwNC44MzYgNy4zMDAxNiAxMDUuNDg5IDYuNTUwODRDMTA2LjE0MSA1LjgwMTUyIDEwNi41OTEgNC44OTQgMTA2Ljc5MyAzLjkxNjc4TDEwNy4xOSAyWlwiIGlkPVwiVmVjdG9yXzRcIiBzdHJva2U9XCIjNkJDQUZGXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiNFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yNjIuMTkgODFMMjYyLjU4OCA4Mi45MTY4QzI2Mi43OSA4My44OTQgMjYzLjIzOSA4NC44MDE1IDI2My44OTIgODUuNTUwOEMyNjQuNTQ1IDg2LjMwMDIgMjY1LjM3OCA4Ni44NjU3IDI2Ni4zMTEgODcuMTkyM0wyNjcuMTkgODcuNUwyNjYuMzExIDg3LjgwNzdDMjY1LjM3OCA4OC4xMzQzIDI2NC41NDUgODguNjk5OCAyNjMuODkyIDg5LjQ0OTJDMjYzLjIzOSA5MC4xOTg1IDI2Mi43OSA5MS4xMDYgMjYyLjU4OCA5Mi4wODMyTDI2Mi4xOSA5NEwyNjEuNzkzIDkyLjA4MzJDMjYxLjU5MSA5MS4xMDYgMjYxLjE0MSA5MC4xOTg1IDI2MC40ODkgODkuNDQ5MkMyNTkuODM2IDg4LjY5OTggMjU5LjAwMyA4OC4xMzQzIDI1OC4wNyA4Ny44MDc3TDI1Ny4xOSA4Ny41TDI1OC4wNyA4Ny4xOTIzQzI1OS4wMDMgODYuODY1NyAyNTkuODM2IDg2LjMwMDIgMjYwLjQ4OSA4NS41NTA4QzI2MS4xNDEgODQuODAxNSAyNjEuNTkxIDgzLjg5NCAyNjEuNzkzIDgyLjkxNjhMMjYyLjE5IDgxWlwiIGlkPVwiVmVjdG9yXzVcIiBzdHJva2U9XCIjNkJDQUZGXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiNFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNTQuNSAxMzRMMTU0Ljc3OCAxMzUuMzI3QzE1NC45MiAxMzYuMDA0IDE1NS4yMzQgMTM2LjYzMiAxNTUuNjkxIDEzNy4xNTFDMTU2LjE0OCAxMzcuNjY5IDE1Ni43MzEgMTM4LjA2MSAxNTcuMzg0IDEzOC4yODdMMTU4IDEzOC41TDE1Ny4zODQgMTM4LjcxM0MxNTYuNzMxIDEzOC45MzkgMTU2LjE0OCAxMzkuMzMxIDE1NS42OTEgMTM5Ljg0OUMxNTUuMjM0IDE0MC4zNjggMTU0LjkyIDE0MC45OTYgMTU0Ljc3OCAxNDEuNjczTDE1NC41IDE0M0wxNTQuMjIyIDE0MS42NzNDMTU0LjA4IDE0MC45OTYgMTUzLjc2NiAxNDAuMzY4IDE1My4zMDkgMTM5Ljg0OUMxNTIuODUyIDEzOS4zMzEgMTUyLjI2OSAxMzguOTM5IDE1MS42MTYgMTM4LjcxM0wxNTEgMTM4LjVMMTUxLjYxNiAxMzguMjg3QzE1Mi4yNjkgMTM4LjA2MSAxNTIuODUyIDEzNy42NjkgMTUzLjMwOSAxMzcuMTUxQzE1My43NjYgMTM2LjYzMiAxNTQuMDggMTM2LjAwNCAxNTQuMjIyIDEzNS4zMjdMMTU0LjUgMTM0WlwiIGlkPVwiVmVjdG9yXzZcIiBzdHJva2U9XCIjNkJDQUZGXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiNFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05NS42OTA0IDEwMUw5Ni4yMDY3IDEwMy41MDdDOTYuNDY5OCAxMDQuNzg0IDk3LjA1NDEgMTA1Ljk3MSA5Ny45MDI0IDEwNi45NTFDOTguNzUwOCAxMDcuOTMxIDk5LjgzNDMgMTA4LjY3MSAxMDEuMDQ3IDEwOS4wOThMMTAyLjE5IDEwOS41TDEwMS4wNDcgMTA5LjkwMkM5OS44MzQzIDExMC4zMjkgOTguNzUwOCAxMTEuMDY5IDk3LjkwMjQgMTEyLjA0OUM5Ny4wNTQxIDExMy4wMjkgOTYuNDY5OCAxMTQuMjE2IDk2LjIwNjcgMTE1LjQ5M0w5NS42OTA0IDExOEw5NS4xNzQxIDExNS40OTNDOTQuOTExIDExNC4yMTYgOTQuMzI2OCAxMTMuMDI5IDkzLjQ3ODQgMTEyLjA0OUM5Mi42MzAxIDExMS4wNjkgOTEuNTQ2NiAxMTAuMzI5IDkwLjMzMzUgMTA5LjkwMkw4OS4xOTA0IDEwOS41TDkwLjMzMzUgMTA5LjA5OEM5MS41NDY2IDEwOC42NzEgOTIuNjMwMSAxMDcuOTMxIDkzLjQ3ODQgMTA2Ljk1MUM5NC4zMjY4IDEwNS45NzEgOTQuOTExIDEwNC43ODQgOTUuMTc0MSAxMDMuNTA3TDk1LjY5MDQgMTAxWlwiIGlkPVwiVmVjdG9yXzdcIiBzdHJva2U9XCIjMDBBM0ZGXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiNFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNDIuMjMyIDI4TDE0Mi45NSAzMS40MjgxQzE0My4zMTYgMzMuMTc1OCAxNDQuMTI5IDM0Ljc5ODkgMTQ1LjMwOSAzNi4xMzlDMTQ2LjQ4OSAzNy40NzkxIDE0Ny45OTYgMzguNDkwNiAxNDkuNjg0IDM5LjA3NDdMMTUxLjI3NCAzOS42MjVMMTQ5LjY4NCA0MC4xNzUyQzE0Ny45OTYgNDAuNzU5NCAxNDYuNDg5IDQxLjc3MDkgMTQ1LjMwOSA0My4xMTFDMTQ0LjEyOSA0NC40NTExIDE0My4zMTYgNDYuMDc0MiAxNDIuOTUgNDcuODIxOUwxNDIuMjMyIDUxLjI1TDE0MS41MTQgNDcuODIxOUMxNDEuMTQ4IDQ2LjA3NDIgMTQwLjMzNSA0NC40NTExIDEzOS4xNTUgNDMuMTExQzEzNy45NzUgNDEuNzcwOSAxMzYuNDY4IDQwLjc1OTQgMTM0Ljc4IDQwLjE3NTJMMTMzLjE5IDM5LjYyNUwxMzQuNzggMzkuMDc0N0MxMzYuNDY4IDM4LjQ5MDYgMTM3Ljk3NSAzNy40NzkxIDEzOS4xNTUgMzYuMTM5QzE0MC4zMzUgMzQuNzk4OSAxNDEuMTQ4IDMzLjE3NTggMTQxLjUxNCAzMS40MjgxTDE0Mi4yMzIgMjhaXCIgaWQ9XCJWZWN0b3JfOFwiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiNFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIENvbnRlbnQgU2VjdGlvbiAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYmF0Y2gtY29udGVudC1zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgIDwhLS0gVGV4dCBTZWN0aW9uIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmF0Y2gtdGV4dC1zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImJhdGNoLXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgQmF0Y2ggcHJvY2Vzc2luZzxzcGFuIGNsYXNzPVwibG9hZGluZy1kb3RzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZG90XCI+Ljwvc3Bhbj48c3BhbiBjbGFzcz1cImRvdFwiPi48L3NwYW4+PHNwYW4gY2xhc3M9XCJkb3RcIj4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYmF0Y2gtZGVzY3JpcHRpb25cIj5SdW5uaW5nIGEgYmF0Y2ggZm9yIGFsbCB7eyBnZXRTdG9yZUNvdW50KCkgfX0gc3RvcmVzLiBUaGlzIG1pZ2h0IHRha2UgYSB3aGlsZS4gWW91IGNhbiBjb250aW51ZSBicm93c2luZyBhbmQgY2hlY2sgYmFjayBsYXRlci48L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBCdXR0b24gQ29udGFpbmVyIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmF0Y2gtYnV0dG9uLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1iYXRjaC1jdXN0b21cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tYmF0Y2gtY3VzdG9tXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkJhY2tUb0Rhc2hib2FyZCgpXCI+QmFjayBUbyBEYXNoYm9hcmQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIEhlYWRlciAtLT5cclxuICAgIDxkaXYgKm5nSWY9XCIhaXNCYXRjaFJ1bm5pbmcoKVwiIGNsYXNzPVwiaGVhZGVyLWNhcmRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LXdyYXBcIj5cclxuICAgICAgICAgICAgPCEtLSBUaXRsZSAtLT5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiaGVhZGVyLXRpdGxlXCIgWyhuZ01vZGVsKV09XCJ0aXRsZVwiIHBsYWNlaG9sZGVyPVwiVW50aXRsZWRcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8IS0tIFN0ZXBwZXIgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGVwcGVyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ZXBwZXItc3RlcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGVwcGVyLWNpcmNsZSBhY3RpdmVcIj4xPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJzdGVwcGVyLXRleHQgYWN0aXZlXCI+UHJlcGFyZSB0ZW1wbGF0ZTwvcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ZXBwZXItbGluZVwiIFtjbGFzcy5hY3RpdmVdPVwiaXNTdGVwMkFjdGl2ZSgpXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RlcHBlci1zdGVwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ZXBwZXItY2lyY2xlXCIgW2NsYXNzLmFjdGl2ZV09XCJpc1N0ZXAyQWN0aXZlKClcIiBbY2xhc3MuaW5hY3RpdmVdPVwiIWlzU3RlcDJBY3RpdmUoKVwiPjI8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInN0ZXBwZXItdGV4dFwiIFtjbGFzcy5hY3RpdmVdPVwiaXNTdGVwMkFjdGl2ZSgpXCIgW2NsYXNzLmluYWN0aXZlXT1cIiFpc1N0ZXAyQWN0aXZlKClcIj5SZXZpZXcgYW5kIEFwcHJvdmU8L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWNhbmNlbFwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25CYWNrVG9EYXNoYm9hcmQoKVwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1zYXZlLWRyYWZ0XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvblNhdmVEcmFmdCgpXCIgW2Rpc2FibGVkXT1cImxvYWRpbmdcIj5TYXZlIEFzIERyYWZ0PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICBcclxuICAgIDwhLS0gTWFpbiBDb250ZW50IC0tPlxyXG4gICAgPHJvdXRlci1vdXRsZXQgKm5nSWY9XCIhaXNCYXRjaFJ1bm5pbmcoKVwiPjwvcm91dGVyLW91dGxldD4iXX0=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Component, inject, Input } from '@angular/core';
|
|
2
|
+
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class BatchConfirmationModalComponent {
|
|
6
|
+
activeModal = inject(NgbActiveModal);
|
|
7
|
+
storeCount = 0;
|
|
8
|
+
onCancel() {
|
|
9
|
+
this.activeModal.dismiss();
|
|
10
|
+
}
|
|
11
|
+
onProceed() {
|
|
12
|
+
this.activeModal.close(true);
|
|
13
|
+
}
|
|
14
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BatchConfirmationModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
15
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: BatchConfirmationModalComponent, isStandalone: true, selector: "lib-batch-confirmation-modal", inputs: { storeCount: "storeCount" }, ngImport: i0, template: "<div class=\"modal-content-custom\">\r\n <!-- Modal Header -->\r\n <div class=\"modal-header-custom\">\r\n <h5 class=\"modal-title\">Start batch process?</h5>\r\n </div>\r\n \r\n <!-- Modal Body -->\r\n <div class=\"modal-body-custom\">\r\n <p class=\"description-text\">\r\n This will initiate the batch process for {{ storeCount }} {{ storeCount === 1 ? 'store' : 'stores' }}. \r\n This process will take time and you need to review several stores before proceeding.\r\n </p>\r\n <p class=\"description-text\">\r\n Are you sure you want to continue?\r\n </p>\r\n </div>\r\n \r\n <!-- Modal Footer -->\r\n <div class=\"modal-footer-custom\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"onCancel()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary-custom\" (click)=\"onProceed()\">Proceed</button>\r\n </div>\r\n</div>\r\n", styles: [".modal-content-custom{background:#fff;border-radius:12px;padding:0;box-shadow:0 20px 24px -4px #10182814,0 8px 8px -4px #10182808;border:none;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,sans-serif}.modal-header-custom{padding:24px 16px 0;border-bottom:none}.modal-title{color:#1d2939;font-size:18px;font-weight:600;line-height:28px;margin:0}.modal-body-custom{padding:24px 16px}.description-text{color:#1d2939;font-size:16px;font-weight:500;line-height:24px;margin-bottom:12px}.description-text:last-child{margin-bottom:0}.modal-footer-custom{border-top:none;padding:0 16px 24px;display:flex;justify-content:flex-end;gap:12px}.btn-outline{background:#fff;color:#344054;border:1px solid #d0d5dd;border-radius:8px;padding:10px 18px;font-size:16px;font-weight:600;line-height:24px;text-transform:capitalize;box-shadow:0 1px 2px #1018280d;cursor:pointer;transition:all .2s}.btn-outline:hover{background-color:#f9fafb;border-color:#d0d5dd;color:#344054}.btn-primary-custom{background:#00a3ff;color:#fff;border:1px solid #00a3ff;border-radius:8px;padding:10px 18px;font-size:16px;font-weight:600;line-height:24px;text-transform:capitalize;box-shadow:0 1px 2px #1018280d;cursor:pointer;transition:all .2s}.btn-primary-custom:hover{background:#0090e0;border-color:#0090e0;color:#fff}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
16
|
+
}
|
|
17
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BatchConfirmationModalComponent, decorators: [{
|
|
18
|
+
type: Component,
|
|
19
|
+
args: [{ selector: 'lib-batch-confirmation-modal', standalone: true, imports: [CommonModule], template: "<div class=\"modal-content-custom\">\r\n <!-- Modal Header -->\r\n <div class=\"modal-header-custom\">\r\n <h5 class=\"modal-title\">Start batch process?</h5>\r\n </div>\r\n \r\n <!-- Modal Body -->\r\n <div class=\"modal-body-custom\">\r\n <p class=\"description-text\">\r\n This will initiate the batch process for {{ storeCount }} {{ storeCount === 1 ? 'store' : 'stores' }}. \r\n This process will take time and you need to review several stores before proceeding.\r\n </p>\r\n <p class=\"description-text\">\r\n Are you sure you want to continue?\r\n </p>\r\n </div>\r\n \r\n <!-- Modal Footer -->\r\n <div class=\"modal-footer-custom\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"onCancel()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary-custom\" (click)=\"onProceed()\">Proceed</button>\r\n </div>\r\n</div>\r\n", styles: [".modal-content-custom{background:#fff;border-radius:12px;padding:0;box-shadow:0 20px 24px -4px #10182814,0 8px 8px -4px #10182808;border:none;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,sans-serif}.modal-header-custom{padding:24px 16px 0;border-bottom:none}.modal-title{color:#1d2939;font-size:18px;font-weight:600;line-height:28px;margin:0}.modal-body-custom{padding:24px 16px}.description-text{color:#1d2939;font-size:16px;font-weight:500;line-height:24px;margin-bottom:12px}.description-text:last-child{margin-bottom:0}.modal-footer-custom{border-top:none;padding:0 16px 24px;display:flex;justify-content:flex-end;gap:12px}.btn-outline{background:#fff;color:#344054;border:1px solid #d0d5dd;border-radius:8px;padding:10px 18px;font-size:16px;font-weight:600;line-height:24px;text-transform:capitalize;box-shadow:0 1px 2px #1018280d;cursor:pointer;transition:all .2s}.btn-outline:hover{background-color:#f9fafb;border-color:#d0d5dd;color:#344054}.btn-primary-custom{background:#00a3ff;color:#fff;border:1px solid #00a3ff;border-radius:8px;padding:10px 18px;font-size:16px;font-weight:600;line-height:24px;text-transform:capitalize;box-shadow:0 1px 2px #1018280d;cursor:pointer;transition:all .2s}.btn-primary-custom:hover{background:#0090e0;border-color:#0090e0;color:#fff}\n"] }]
|
|
20
|
+
}], propDecorators: { storeCount: [{
|
|
21
|
+
type: Input
|
|
22
|
+
}] } });
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2gtY29uZmlybWF0aW9uLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL2NvbGxlY3Rpb24tdXBkYXRlLWFpL2ZpbmQtcmVwbGFjZS1sYXlvdXQvcHJlcGFyZS10ZW1wbGF0ZS9iYXRjaC1jb25maXJtYXRpb24tbW9kYWwvYmF0Y2gtY29uZmlybWF0aW9uLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL2NvbGxlY3Rpb24tdXBkYXRlLWFpL2ZpbmQtcmVwbGFjZS1sYXlvdXQvcHJlcGFyZS10ZW1wbGF0ZS9iYXRjaC1jb25maXJtYXRpb24tbW9kYWwvYmF0Y2gtY29uZmlybWF0aW9uLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQVMvQyxNQUFNLE9BQU8sK0JBQStCO0lBQzFDLFdBQVcsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFNUIsVUFBVSxHQUFXLENBQUMsQ0FBQztJQUVoQyxRQUFRO1FBQ04sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7d0dBWFUsK0JBQStCOzRGQUEvQiwrQkFBK0IsOEhDWDVDLG05QkF1QkEscTJDRGhCWSxZQUFZOzs0RkFJWCwrQkFBK0I7a0JBUDNDLFNBQVM7K0JBQ0UsOEJBQThCLGNBQzVCLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQzs4QkFPZCxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nYkFjdGl2ZU1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItYmF0Y2gtY29uZmlybWF0aW9uLW1vZGFsJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9iYXRjaC1jb25maXJtYXRpb24tbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9iYXRjaC1jb25maXJtYXRpb24tbW9kYWwuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYXRjaENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50IHtcclxuICBhY3RpdmVNb2RhbCA9IGluamVjdChOZ2JBY3RpdmVNb2RhbCk7XHJcbiAgXHJcbiAgQElucHV0KCkgc3RvcmVDb3VudDogbnVtYmVyID0gMDtcclxuXHJcbiAgb25DYW5jZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoKTtcclxuICB9XHJcblxyXG4gIG9uUHJvY2VlZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYWN0aXZlTW9kYWwuY2xvc2UodHJ1ZSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50LWN1c3RvbVwiPlxyXG4gICAgPCEtLSBNb2RhbCBIZWFkZXIgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyLWN1c3RvbVwiPlxyXG4gICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+U3RhcnQgYmF0Y2ggcHJvY2Vzcz88L2g1PlxyXG4gICAgPC9kaXY+XHJcbiAgICBcclxuICAgIDwhLS0gTW9kYWwgQm9keSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5LWN1c3RvbVwiPlxyXG4gICAgICAgIDxwIGNsYXNzPVwiZGVzY3JpcHRpb24tdGV4dFwiPlxyXG4gICAgICAgICAgICBUaGlzIHdpbGwgaW5pdGlhdGUgdGhlIGJhdGNoIHByb2Nlc3MgZm9yIHt7IHN0b3JlQ291bnQgfX0ge3sgc3RvcmVDb3VudCA9PT0gMSA/ICdzdG9yZScgOiAnc3RvcmVzJyB9fS4gXHJcbiAgICAgICAgICAgIFRoaXMgcHJvY2VzcyB3aWxsIHRha2UgdGltZSBhbmQgeW91IG5lZWQgdG8gcmV2aWV3IHNldmVyYWwgc3RvcmVzIGJlZm9yZSBwcm9jZWVkaW5nLlxyXG4gICAgICAgIDwvcD5cclxuICAgICAgICA8cCBjbGFzcz1cImRlc2NyaXB0aW9uLXRleHRcIj5cclxuICAgICAgICAgICAgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNvbnRpbnVlP1xyXG4gICAgICAgIDwvcD5cclxuICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgICA8IS0tIE1vZGFsIEZvb3RlciAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXItY3VzdG9tXCI+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiAoY2xpY2spPVwib25DYW5jZWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5LWN1c3RvbVwiIChjbGljayk9XCJvblByb2NlZWQoKVwiPlByb2NlZWQ8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|