tango-app-ui-store-builder 1.2.4 → 1.2.5
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/custom-select/custom-select.component.mjs +14 -5
- package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +15 -8
- package/esm2022/lib/components/manage-store-plano/zone-verification-feedback/zone-verification-feedback.component.mjs +7 -2
- package/esm2022/lib/components/onboard-store-plano/onboard-store-plano.component.mjs +173 -22
- package/esm2022/lib/components/plano-tools/cad-files/cad-files.component.mjs +88 -0
- package/esm2022/lib/components/plano-tools/move-bucket/move-bucket.component.mjs +239 -0
- package/esm2022/lib/components/plano-tools/plano-migrate/plano-migrate.component.mjs +3 -3
- package/esm2022/lib/components/plano-tools/swap-template/swap-template.component.mjs +325 -0
- package/esm2022/lib/components/plano-tools/tools-parent/tools-parent.component.mjs +3 -3
- package/esm2022/lib/components/popups/delete-confirmation/delete-confirmation.component.mjs +10 -3
- package/esm2022/lib/services/store-builder.service.mjs +15 -1
- package/esm2022/lib/tango-store-builder-routing.module.mjs +16 -1
- package/esm2022/lib/tango-store-builder.module.mjs +10 -1
- package/fesm2022/tango-app-ui-store-builder.mjs +873 -40
- package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
- package/lib/components/custom-select/custom-select.component.d.ts +5 -2
- package/lib/components/manage-plano/rollout-table/rollout-table.component.d.ts +4 -4
- package/lib/components/manage-plano/verification-table/verification-table.component.d.ts +5 -5
- package/lib/components/manage-store-plano/manage-store-plano.component.d.ts +1 -0
- package/lib/components/onboard-store-plano/onboard-store-plano.component.d.ts +11 -1
- package/lib/components/plano-tools/cad-files/cad-files.component.d.ts +30 -0
- package/lib/components/plano-tools/move-bucket/move-bucket.component.d.ts +64 -0
- package/lib/components/plano-tools/swap-template/swap-template.component.d.ts +83 -0
- package/lib/components/popups/delete-confirmation/delete-confirmation.component.d.ts +3 -1
- package/lib/services/store-builder.service.d.ts +16 -0
- package/lib/tango-store-builder.module.d.ts +56 -53
- package/package.json +1 -1
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, } from '@angular/core';
|
|
2
|
+
import { catchError, debounceTime, distinctUntilChanged, filter, finalize, map, of, shareReplay, Subject, switchMap, takeUntil, tap, } from 'rxjs';
|
|
3
|
+
import { DeleteConfirmationComponent } from '../../popups/delete-confirmation/delete-confirmation.component';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../../../services/store-builder.service";
|
|
6
|
+
import * as i2 from "tango-app-ui-global";
|
|
7
|
+
import * as i3 from "@ng-bootstrap/ng-bootstrap";
|
|
8
|
+
import * as i4 from "tango-app-ui-shared";
|
|
9
|
+
import * as i5 from "../../reactive-select/reactive-select.component";
|
|
10
|
+
import * as i6 from "@angular/common";
|
|
11
|
+
import * as i7 from "@angular/forms";
|
|
12
|
+
export class SwapTemplateComponent {
|
|
13
|
+
sbs;
|
|
14
|
+
gs;
|
|
15
|
+
modalService;
|
|
16
|
+
toast;
|
|
17
|
+
cdr;
|
|
18
|
+
clientId;
|
|
19
|
+
storeOptions = [];
|
|
20
|
+
selectedStoreId = null;
|
|
21
|
+
selectedStore = null;
|
|
22
|
+
fixtures = [];
|
|
23
|
+
templates = [];
|
|
24
|
+
rows = [];
|
|
25
|
+
isLoadingFixtures = false;
|
|
26
|
+
isSubmitting = false;
|
|
27
|
+
canAddRow = false;
|
|
28
|
+
canSubmit = false;
|
|
29
|
+
destroy$ = new Subject();
|
|
30
|
+
storeSelected$ = new Subject();
|
|
31
|
+
templatesCache$ = null;
|
|
32
|
+
cachedTemplatesClientId = null;
|
|
33
|
+
rowIdSeq = 0;
|
|
34
|
+
constructor(sbs, gs, modalService, toast, cdr) {
|
|
35
|
+
this.sbs = sbs;
|
|
36
|
+
this.gs = gs;
|
|
37
|
+
this.modalService = modalService;
|
|
38
|
+
this.toast = toast;
|
|
39
|
+
this.cdr = cdr;
|
|
40
|
+
}
|
|
41
|
+
ngOnInit() {
|
|
42
|
+
this.gs.dataRangeValue
|
|
43
|
+
.pipe(takeUntil(this.destroy$), debounceTime(200), filter((data) => !!data), map((data) => {
|
|
44
|
+
if (data?.client)
|
|
45
|
+
return data.client;
|
|
46
|
+
const headerData = JSON.parse(localStorage.getItem('header-filters'));
|
|
47
|
+
return headerData?.client;
|
|
48
|
+
}), filter((id) => !!id), distinctUntilChanged())
|
|
49
|
+
.subscribe((clientId) => {
|
|
50
|
+
this.clientId = clientId;
|
|
51
|
+
this.templatesCache$ = null;
|
|
52
|
+
this.cachedTemplatesClientId = null;
|
|
53
|
+
this.resetSelection();
|
|
54
|
+
this.loadStores();
|
|
55
|
+
this.prefetchTemplates();
|
|
56
|
+
});
|
|
57
|
+
this.storeSelected$
|
|
58
|
+
.pipe(takeUntil(this.destroy$), tap((store) => {
|
|
59
|
+
this.selectedStore = store;
|
|
60
|
+
this.selectedStoreId = store.id;
|
|
61
|
+
this.fixtures = [];
|
|
62
|
+
this.rows = [];
|
|
63
|
+
this.recomputeFlags();
|
|
64
|
+
this.isLoadingFixtures = true;
|
|
65
|
+
this.cdr.markForCheck();
|
|
66
|
+
}), switchMap((store) => this.sbs
|
|
67
|
+
.getFixtureDetailsByStore(store.label, this.clientId)
|
|
68
|
+
.pipe(catchError(() => of({ data: [] })), finalize(() => {
|
|
69
|
+
this.isLoadingFixtures = false;
|
|
70
|
+
this.cdr.markForCheck();
|
|
71
|
+
}))))
|
|
72
|
+
.subscribe((res) => {
|
|
73
|
+
const fixtureData = res?.data || [];
|
|
74
|
+
this.fixtures = fixtureData.map((f) => ({
|
|
75
|
+
_id: f._id,
|
|
76
|
+
fixtureNumber: f.fixtureNumber,
|
|
77
|
+
fixtureName: f.fixtureName || '',
|
|
78
|
+
fixtureCategory: f.fixtureCategory || '',
|
|
79
|
+
fixtureWidthValue: f.fixtureWidthValue ?? 0,
|
|
80
|
+
associatedElementType: f.associatedElementType || '',
|
|
81
|
+
associatedElementFixtureNumber: f.associatedElementFixtureNumber ?? null,
|
|
82
|
+
displayName: `Fixture ${f.fixtureNumber}`,
|
|
83
|
+
}));
|
|
84
|
+
this.rows = this.fixtures.length ? [this.makeEmptyRow()] : [];
|
|
85
|
+
this.recomputeFlags();
|
|
86
|
+
this.cdr.markForCheck();
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
loadStores() {
|
|
90
|
+
this.sbs
|
|
91
|
+
.getStoreOrClusterList({ searchMode: 'store' })
|
|
92
|
+
.pipe(takeUntil(this.destroy$))
|
|
93
|
+
.subscribe({
|
|
94
|
+
next: (res) => {
|
|
95
|
+
this.storeOptions = res?.data || [];
|
|
96
|
+
this.cdr.markForCheck();
|
|
97
|
+
},
|
|
98
|
+
error: () => {
|
|
99
|
+
this.storeOptions = [];
|
|
100
|
+
this.cdr.markForCheck();
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
prefetchTemplates() {
|
|
105
|
+
this.getCachedTemplates()
|
|
106
|
+
.pipe(takeUntil(this.destroy$))
|
|
107
|
+
.subscribe({
|
|
108
|
+
next: (templates) => {
|
|
109
|
+
this.templates = templates;
|
|
110
|
+
this.cdr.markForCheck();
|
|
111
|
+
},
|
|
112
|
+
error: () => {
|
|
113
|
+
this.templates = [];
|
|
114
|
+
this.cdr.markForCheck();
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
getCachedTemplates() {
|
|
119
|
+
if (this.templatesCache$ &&
|
|
120
|
+
this.cachedTemplatesClientId === this.clientId) {
|
|
121
|
+
return this.templatesCache$;
|
|
122
|
+
}
|
|
123
|
+
this.cachedTemplatesClientId = this.clientId;
|
|
124
|
+
this.templatesCache$ = this.sbs
|
|
125
|
+
.getAllTemplates({ clientId: this.clientId })
|
|
126
|
+
.pipe(map((res) => {
|
|
127
|
+
const tplData = res?.data || [];
|
|
128
|
+
return tplData.map((t) => ({
|
|
129
|
+
_id: t._id,
|
|
130
|
+
fixtureName: t.fixtureName,
|
|
131
|
+
displayName: t.fixtureName?.includes('-ft')
|
|
132
|
+
? t.fixtureName
|
|
133
|
+
: `${t.fixtureName} - ${t.fixtureWidth?.value ?? ''} ${t.fixtureWidth?.unit ?? ''}`,
|
|
134
|
+
subtext: (t.productBrandName || []).join(', '),
|
|
135
|
+
}));
|
|
136
|
+
}), shareReplay({ bufferSize: 1, refCount: false }));
|
|
137
|
+
return this.templatesCache$;
|
|
138
|
+
}
|
|
139
|
+
onStoreSelected(storeId) {
|
|
140
|
+
if (!storeId || storeId === this.selectedStore?.id)
|
|
141
|
+
return;
|
|
142
|
+
const store = this.storeOptions.find((s) => s.id === storeId);
|
|
143
|
+
if (!store)
|
|
144
|
+
return;
|
|
145
|
+
this.storeSelected$.next(store);
|
|
146
|
+
}
|
|
147
|
+
makeEmptyRow() {
|
|
148
|
+
const row = {
|
|
149
|
+
rowId: ++this.rowIdSeq,
|
|
150
|
+
fixtureId: null,
|
|
151
|
+
templateId: null,
|
|
152
|
+
fixture: null,
|
|
153
|
+
template: null,
|
|
154
|
+
fixtureOptions: [],
|
|
155
|
+
wallPosition: '',
|
|
156
|
+
};
|
|
157
|
+
row.fixtureOptions = this.computeFixtureOptions(row);
|
|
158
|
+
return row;
|
|
159
|
+
}
|
|
160
|
+
computeFixtureOptions(excludeRow) {
|
|
161
|
+
const usedIds = new Set(this.rows
|
|
162
|
+
.filter((r) => r !== excludeRow && r?.fixture)
|
|
163
|
+
.map((r) => r.fixture._id));
|
|
164
|
+
return this.fixtures.filter((f) => !usedIds.has(f._id));
|
|
165
|
+
}
|
|
166
|
+
refreshAllFixtureOptions() {
|
|
167
|
+
this.rows.forEach((r) => {
|
|
168
|
+
r.fixtureOptions = this.computeFixtureOptions(r);
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
computeWallPosition(fixture) {
|
|
172
|
+
if (!fixture)
|
|
173
|
+
return '';
|
|
174
|
+
if (fixture.associatedElementType === 'wall' &&
|
|
175
|
+
fixture.associatedElementFixtureNumber != null) {
|
|
176
|
+
return `Wall ${fixture.associatedElementFixtureNumber}`;
|
|
177
|
+
}
|
|
178
|
+
if (fixture.associatedElementType === 'floor')
|
|
179
|
+
return 'Floor';
|
|
180
|
+
return fixture.associatedElementType
|
|
181
|
+
? fixture.associatedElementType.charAt(0).toUpperCase() +
|
|
182
|
+
fixture.associatedElementType.slice(1)
|
|
183
|
+
: '—';
|
|
184
|
+
}
|
|
185
|
+
recomputeFlags() {
|
|
186
|
+
const last = this.rows[this.rows.length - 1];
|
|
187
|
+
this.canAddRow =
|
|
188
|
+
this.rows.length > 0 &&
|
|
189
|
+
this.rows.length < this.fixtures.length &&
|
|
190
|
+
!!last?.fixture &&
|
|
191
|
+
!!last?.template;
|
|
192
|
+
this.canSubmit =
|
|
193
|
+
!!this.selectedStore &&
|
|
194
|
+
this.rows.length > 0 &&
|
|
195
|
+
this.rows.every((r) => !!r.fixture && !!r.template);
|
|
196
|
+
}
|
|
197
|
+
onRowFixtureChange(row, fixtureId) {
|
|
198
|
+
row.fixtureId = fixtureId;
|
|
199
|
+
row.fixture = fixtureId
|
|
200
|
+
? this.fixtures.find((f) => f._id === fixtureId) || null
|
|
201
|
+
: null;
|
|
202
|
+
row.wallPosition = this.computeWallPosition(row.fixture);
|
|
203
|
+
this.refreshAllFixtureOptions();
|
|
204
|
+
this.recomputeFlags();
|
|
205
|
+
this.cdr.markForCheck();
|
|
206
|
+
}
|
|
207
|
+
onRowTemplateChange(row, templateId) {
|
|
208
|
+
row.templateId = templateId;
|
|
209
|
+
row.template = templateId
|
|
210
|
+
? this.templates.find((t) => t._id === templateId) || null
|
|
211
|
+
: null;
|
|
212
|
+
this.recomputeFlags();
|
|
213
|
+
this.cdr.markForCheck();
|
|
214
|
+
}
|
|
215
|
+
addRow() {
|
|
216
|
+
if (!this.canAddRow)
|
|
217
|
+
return;
|
|
218
|
+
this.rows.push(this.makeEmptyRow());
|
|
219
|
+
this.recomputeFlags();
|
|
220
|
+
this.cdr.markForCheck();
|
|
221
|
+
}
|
|
222
|
+
removeRow(index) {
|
|
223
|
+
if (this.rows.length === 1) {
|
|
224
|
+
this.rows[0] = this.makeEmptyRow();
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
this.rows.splice(index, 1);
|
|
228
|
+
}
|
|
229
|
+
this.refreshAllFixtureOptions();
|
|
230
|
+
this.recomputeFlags();
|
|
231
|
+
this.cdr.markForCheck();
|
|
232
|
+
}
|
|
233
|
+
onCancel() {
|
|
234
|
+
this.resetSelection();
|
|
235
|
+
this.cdr.markForCheck();
|
|
236
|
+
}
|
|
237
|
+
resetSelection() {
|
|
238
|
+
this.selectedStore = null;
|
|
239
|
+
this.selectedStoreId = null;
|
|
240
|
+
this.fixtures = [];
|
|
241
|
+
this.rows = [];
|
|
242
|
+
this.isLoadingFixtures = false;
|
|
243
|
+
this.recomputeFlags();
|
|
244
|
+
}
|
|
245
|
+
async onSubmit() {
|
|
246
|
+
if (!this.canSubmit || !this.selectedStore || this.isSubmitting)
|
|
247
|
+
return;
|
|
248
|
+
const storeName = this.selectedStore.label;
|
|
249
|
+
const payload = {
|
|
250
|
+
data: this.rows.map((r) => ({
|
|
251
|
+
storeName,
|
|
252
|
+
fixtureNumber: r.fixture.fixtureNumber,
|
|
253
|
+
templateName: r.template.fixtureName,
|
|
254
|
+
})),
|
|
255
|
+
};
|
|
256
|
+
const confirmed = await this.confirmSwap(payload.data.length);
|
|
257
|
+
if (!confirmed)
|
|
258
|
+
return;
|
|
259
|
+
this.isSubmitting = true;
|
|
260
|
+
this.cdr.markForCheck();
|
|
261
|
+
this.sbs
|
|
262
|
+
.swapFixtureTemplate(payload)
|
|
263
|
+
.pipe(takeUntil(this.destroy$))
|
|
264
|
+
.subscribe({
|
|
265
|
+
next: (res) => {
|
|
266
|
+
const successCount = res?.data?.successCount ?? 0;
|
|
267
|
+
const errorCount = res?.data?.errorCount ?? 0;
|
|
268
|
+
const errors = res?.data?.errors || [];
|
|
269
|
+
if (errorCount === 0) {
|
|
270
|
+
this.toast.getSuccessToast(`Swapped ${successCount} fixture template(s) successfully.`);
|
|
271
|
+
this.onCancel();
|
|
272
|
+
}
|
|
273
|
+
else if (successCount > 0) {
|
|
274
|
+
this.toast.getWarningToast(`Partial: ${successCount} succeeded, ${errorCount} failed. ${this.summarizeErrors(errors)}`);
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
this.toast.getErrorToast(`All ${errorCount} swap(s) failed. ${this.summarizeErrors(errors)}`);
|
|
278
|
+
}
|
|
279
|
+
this.isSubmitting = false;
|
|
280
|
+
this.cdr.markForCheck();
|
|
281
|
+
},
|
|
282
|
+
error: (err) => {
|
|
283
|
+
this.toast.getErrorToast(err?.error?.message || 'Failed to swap fixture template.');
|
|
284
|
+
this.isSubmitting = false;
|
|
285
|
+
this.cdr.markForCheck();
|
|
286
|
+
},
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
summarizeErrors(errors) {
|
|
290
|
+
if (!errors?.length)
|
|
291
|
+
return '';
|
|
292
|
+
const first = errors
|
|
293
|
+
.slice(0, 2)
|
|
294
|
+
.map((e) => `#${e.fixtureNumber}: ${e.error}`)
|
|
295
|
+
.join('; ');
|
|
296
|
+
return errors.length > 2 ? `${first}; …` : first;
|
|
297
|
+
}
|
|
298
|
+
async confirmSwap(count) {
|
|
299
|
+
try {
|
|
300
|
+
const modelRef = this.modalService.open(DeleteConfirmationComponent, {
|
|
301
|
+
centered: true,
|
|
302
|
+
});
|
|
303
|
+
modelRef.componentInstance.title = 'Confirm template swap';
|
|
304
|
+
modelRef.componentInstance.description = `This will overwrite ${count} fixture(s) with the chosen templates and delete their existing shelves. This action cannot be undone. Continue?`;
|
|
305
|
+
const result = await modelRef.result;
|
|
306
|
+
return result === 'ok';
|
|
307
|
+
}
|
|
308
|
+
catch {
|
|
309
|
+
return false;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
trackByRow = (_, row) => row.rowId;
|
|
313
|
+
ngOnDestroy() {
|
|
314
|
+
this.destroy$.next();
|
|
315
|
+
this.destroy$.complete();
|
|
316
|
+
this.storeSelected$.complete();
|
|
317
|
+
}
|
|
318
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SwapTemplateComponent, deps: [{ token: i1.StoreBuilderService }, { token: i2.GlobalStateService }, { token: i3.NgbModal }, { token: i4.ToastService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
319
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SwapTemplateComponent, selector: "lib-swap-template", ngImport: i0, template: "<section class=\"swap-template p-3\">\r\n <div class=\"card p-4\" style=\"max-width: 900px;\">\r\n <h5 class=\"mb-3\">Swap Fixture Template</h5>\r\n\r\n <!-- Store Select -->\r\n <div class=\"mb-3\">\r\n <lib-reactive-select\r\n label=\"Store\"\r\n [idField]=\"'id'\"\r\n [nameField]=\"'label'\"\r\n [data]=\"storeOptions\"\r\n [search]=\"true\"\r\n [ngModel]=\"selectedStoreId\"\r\n (ngModelChange)=\"onStoreSelected($event)\">\r\n </lib-reactive-select>\r\n </div>\r\n\r\n <ng-container *ngIf=\"selectedStore\">\r\n <ng-container *ngIf=\"isLoadingFixtures; else loaded\">\r\n <div class=\"text-muted mb-3\">Loading fixtures\u2026</div>\r\n </ng-container>\r\n\r\n <ng-template #loaded>\r\n <ng-container *ngIf=\"fixtures.length; else noFixtures\">\r\n <!-- Swap Rows -->\r\n <div class=\"swap-rows\">\r\n <div *ngFor=\"let row of rows; let i = index; trackBy: trackByRow\"\r\n class=\"swap-row mb-3\">\r\n <div class=\"row g-2 align-items-start\">\r\n <!-- Plano Fixture -->\r\n <div class=\"col-5\">\r\n <lib-reactive-select\r\n label=\"Plano Fixture\"\r\n [idField]=\"'_id'\"\r\n [nameField]=\"'displayName'\"\r\n [data]=\"row.fixtureOptions\"\r\n [search]=\"true\"\r\n [ngModel]=\"row.fixtureId\"\r\n (ngModelChange)=\"onRowFixtureChange(row, $event)\">\r\n </lib-reactive-select>\r\n\r\n <div *ngIf=\"row.fixture\" class=\"fixture-info mt-2\">\r\n <div>\r\n <span class=\"label\">Name:</span>\r\n {{ row.fixture.fixtureName || '\u2014' }}\r\n </div>\r\n <div>\r\n <span class=\"label\">Position:</span>\r\n {{ row.wallPosition }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Arrow -->\r\n <div class=\"col-1 d-flex justify-content-center\"\r\n style=\"padding-top: 30px;\">\r\n <span class=\"arrow\">\u2192</span>\r\n </div>\r\n\r\n <!-- Swapping Template -->\r\n <div class=\"col-5\">\r\n <lib-reactive-select\r\n label=\"Swapping Template\"\r\n [idField]=\"'_id'\"\r\n [nameField]=\"'displayName'\"\r\n [subTextField]=\"'subtext'\"\r\n [data]=\"templates\"\r\n [search]=\"true\"\r\n [ngModel]=\"row.templateId\"\r\n (ngModelChange)=\"onRowTemplateChange(row, $event)\">\r\n </lib-reactive-select>\r\n </div>\r\n\r\n <!-- Remove Row -->\r\n <div class=\"col-1 d-flex justify-content-end\"\r\n style=\"padding-top: 30px;\">\r\n <button type=\"button\" class=\"btn btn-link p-0 remove-btn\"\r\n (click)=\"removeRow(i)\" title=\"Remove row\"\r\n [disabled]=\"rows.length === 1 && !row.fixture && !row.template\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 10 10\" fill=\"none\">\r\n <path d=\"M9 1L1 9M1 1L9 9\" stroke=\"#344054\"\r\n stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Add Row -->\r\n <div class=\"mb-3\">\r\n <button type=\"button\" class=\"btn btn-link p-0 add-btn\"\r\n (click)=\"addRow()\" [disabled]=\"!canAddRow\">\r\n + Add another swap\r\n </button>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"d-flex gap-2 mt-4\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"onCancel()\"\r\n [disabled]=\"isSubmitting\">\r\n Cancel\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"onSubmit()\"\r\n [disabled]=\"!canSubmit || isSubmitting\">\r\n {{ isSubmitting ? 'Submitting\u2026' : 'Submit' }}\r\n </button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #noFixtures>\r\n <div class=\"text-muted\">No fixtures found for this store.</div>\r\n </ng-template>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n</section>\r\n", styles: [".swap-template .swap-row{border:1px solid #eaecf0;border-radius:6px;padding:12px;background:#fcfcfd}.swap-template .fixture-info{font-size:12px;color:#475467;background:#fff;border:1px dashed #eaecf0;border-radius:4px;padding:6px 8px;line-height:1.5}.swap-template .fixture-info .label{font-weight:600;color:#344054;margin-right:4px}.swap-template .arrow{font-size:20px;color:#98a2b3;-webkit-user-select:none;user-select:none}.swap-template .add-btn{color:#1570ef;text-decoration:none;font-weight:500}.swap-template .add-btn:disabled{color:#98a2b3;cursor:not-allowed}.swap-template .remove-btn{line-height:1}.swap-template .remove-btn:disabled{opacity:.4;cursor:not-allowed}\n"], dependencies: [{ kind: "component", type: i5.ReactiveSelectComponent, selector: "lib-reactive-select", inputs: ["idField", "nameField", "subTextField", "searchField", "label", "data", "action", "search", "prefix", "actionLabel"], outputs: ["actionClick"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
320
|
+
}
|
|
321
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SwapTemplateComponent, decorators: [{
|
|
322
|
+
type: Component,
|
|
323
|
+
args: [{ selector: 'lib-swap-template', changeDetection: ChangeDetectionStrategy.OnPush, template: "<section class=\"swap-template p-3\">\r\n <div class=\"card p-4\" style=\"max-width: 900px;\">\r\n <h5 class=\"mb-3\">Swap Fixture Template</h5>\r\n\r\n <!-- Store Select -->\r\n <div class=\"mb-3\">\r\n <lib-reactive-select\r\n label=\"Store\"\r\n [idField]=\"'id'\"\r\n [nameField]=\"'label'\"\r\n [data]=\"storeOptions\"\r\n [search]=\"true\"\r\n [ngModel]=\"selectedStoreId\"\r\n (ngModelChange)=\"onStoreSelected($event)\">\r\n </lib-reactive-select>\r\n </div>\r\n\r\n <ng-container *ngIf=\"selectedStore\">\r\n <ng-container *ngIf=\"isLoadingFixtures; else loaded\">\r\n <div class=\"text-muted mb-3\">Loading fixtures\u2026</div>\r\n </ng-container>\r\n\r\n <ng-template #loaded>\r\n <ng-container *ngIf=\"fixtures.length; else noFixtures\">\r\n <!-- Swap Rows -->\r\n <div class=\"swap-rows\">\r\n <div *ngFor=\"let row of rows; let i = index; trackBy: trackByRow\"\r\n class=\"swap-row mb-3\">\r\n <div class=\"row g-2 align-items-start\">\r\n <!-- Plano Fixture -->\r\n <div class=\"col-5\">\r\n <lib-reactive-select\r\n label=\"Plano Fixture\"\r\n [idField]=\"'_id'\"\r\n [nameField]=\"'displayName'\"\r\n [data]=\"row.fixtureOptions\"\r\n [search]=\"true\"\r\n [ngModel]=\"row.fixtureId\"\r\n (ngModelChange)=\"onRowFixtureChange(row, $event)\">\r\n </lib-reactive-select>\r\n\r\n <div *ngIf=\"row.fixture\" class=\"fixture-info mt-2\">\r\n <div>\r\n <span class=\"label\">Name:</span>\r\n {{ row.fixture.fixtureName || '\u2014' }}\r\n </div>\r\n <div>\r\n <span class=\"label\">Position:</span>\r\n {{ row.wallPosition }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Arrow -->\r\n <div class=\"col-1 d-flex justify-content-center\"\r\n style=\"padding-top: 30px;\">\r\n <span class=\"arrow\">\u2192</span>\r\n </div>\r\n\r\n <!-- Swapping Template -->\r\n <div class=\"col-5\">\r\n <lib-reactive-select\r\n label=\"Swapping Template\"\r\n [idField]=\"'_id'\"\r\n [nameField]=\"'displayName'\"\r\n [subTextField]=\"'subtext'\"\r\n [data]=\"templates\"\r\n [search]=\"true\"\r\n [ngModel]=\"row.templateId\"\r\n (ngModelChange)=\"onRowTemplateChange(row, $event)\">\r\n </lib-reactive-select>\r\n </div>\r\n\r\n <!-- Remove Row -->\r\n <div class=\"col-1 d-flex justify-content-end\"\r\n style=\"padding-top: 30px;\">\r\n <button type=\"button\" class=\"btn btn-link p-0 remove-btn\"\r\n (click)=\"removeRow(i)\" title=\"Remove row\"\r\n [disabled]=\"rows.length === 1 && !row.fixture && !row.template\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 10 10\" fill=\"none\">\r\n <path d=\"M9 1L1 9M1 1L9 9\" stroke=\"#344054\"\r\n stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Add Row -->\r\n <div class=\"mb-3\">\r\n <button type=\"button\" class=\"btn btn-link p-0 add-btn\"\r\n (click)=\"addRow()\" [disabled]=\"!canAddRow\">\r\n + Add another swap\r\n </button>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"d-flex gap-2 mt-4\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"onCancel()\"\r\n [disabled]=\"isSubmitting\">\r\n Cancel\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"onSubmit()\"\r\n [disabled]=\"!canSubmit || isSubmitting\">\r\n {{ isSubmitting ? 'Submitting\u2026' : 'Submit' }}\r\n </button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #noFixtures>\r\n <div class=\"text-muted\">No fixtures found for this store.</div>\r\n </ng-template>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n</section>\r\n", styles: [".swap-template .swap-row{border:1px solid #eaecf0;border-radius:6px;padding:12px;background:#fcfcfd}.swap-template .fixture-info{font-size:12px;color:#475467;background:#fff;border:1px dashed #eaecf0;border-radius:4px;padding:6px 8px;line-height:1.5}.swap-template .fixture-info .label{font-weight:600;color:#344054;margin-right:4px}.swap-template .arrow{font-size:20px;color:#98a2b3;-webkit-user-select:none;user-select:none}.swap-template .add-btn{color:#1570ef;text-decoration:none;font-weight:500}.swap-template .add-btn:disabled{color:#98a2b3;cursor:not-allowed}.swap-template .remove-btn{line-height:1}.swap-template .remove-btn:disabled{opacity:.4;cursor:not-allowed}\n"] }]
|
|
324
|
+
}], ctorParameters: () => [{ type: i1.StoreBuilderService }, { type: i2.GlobalStateService }, { type: i3.NgbModal }, { type: i4.ToastService }, { type: i0.ChangeDetectorRef }] });
|
|
325
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dhcC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9wbGFuby10b29scy9zd2FwLXRlbXBsYXRlL3N3YXAtdGVtcGxhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tdG9vbHMvc3dhcC10ZW1wbGF0ZS9zd2FwLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxHQUdWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFDTCxVQUFVLEVBQ1YsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sUUFBUSxFQUNSLEdBQUcsRUFFSCxFQUFFLEVBQ0YsV0FBVyxFQUNYLE9BQU8sRUFDUCxTQUFTLEVBQ1QsU0FBUyxFQUNULEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQztBQUlkLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGdFQUFnRSxDQUFDOzs7Ozs7Ozs7QUF5QzdHLE1BQU0sT0FBTyxxQkFBcUI7SUF3QnRCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUEzQlYsUUFBUSxDQUFTO0lBRWpCLFlBQVksR0FBZ0IsRUFBRSxDQUFDO0lBQy9CLGVBQWUsR0FBa0IsSUFBSSxDQUFDO0lBQ3RDLGFBQWEsR0FBcUIsSUFBSSxDQUFDO0lBRXZDLFFBQVEsR0FBa0IsRUFBRSxDQUFDO0lBQzdCLFNBQVMsR0FBbUIsRUFBRSxDQUFDO0lBQy9CLElBQUksR0FBYyxFQUFFLENBQUM7SUFFckIsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQzFCLFlBQVksR0FBRyxLQUFLLENBQUM7SUFFckIsU0FB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LENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNuRCxDQUFDO0lBRU8sS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFhO1FBQ3JDLElBQUk7WUFDRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRTtnQkFDbkUsUUFBUSxFQUFFLElBQUk7YUFDZixDQUFDLENBQUM7WUFDSCxRQUFRLENBQUMsaUJBQWlCLENBQUMsS0FBSyxHQUFHLHVCQUF1QixDQUFDO1lBQzNELFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEdBQUcsdUJBQXVCLEtBQUssa0hBQWtILENBQUM7WUFDeEwsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ3JDLE9BQU8sTUFBTSxLQUFLLElBQUksQ0FBQztTQUN4QjtRQUFDLE1BQU07WUFDTixPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVELFVBQVUsR0FBRyxDQUFDLENBQVMsRUFBRSxHQUFZLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7SUFFcEQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pDLENBQUM7d0dBdldVLHFCQUFxQjs0RkFBckIscUJBQXFCLHlEQ25FbEMsczJKQXVIQTs7NEZEcERhLHFCQUFxQjtrQkFOakMsU0FBUzsrQkFDRSxtQkFBbUIsbUJBR1osdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge1xyXG4gIGNhdGNoRXJyb3IsXHJcbiAgZGVib3VuY2VUaW1lLFxyXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxyXG4gIGZpbHRlcixcclxuICBmaW5hbGl6ZSxcclxuICBtYXAsXHJcbiAgT2JzZXJ2YWJsZSxcclxuICBvZixcclxuICBzaGFyZVJlcGxheSxcclxuICBTdWJqZWN0LFxyXG4gIHN3aXRjaE1hcCxcclxuICB0YWtlVW50aWwsXHJcbiAgdGFwLFxyXG59IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktZ2xvYmFsJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLXNoYXJlZCc7XHJcbmltcG9ydCB7IFN0b3JlQnVpbGRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEZWxldGVDb25maXJtYXRpb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9wb3B1cHMvZGVsZXRlLWNvbmZpcm1hdGlvbi9kZWxldGUtY29uZmlybWF0aW9uLmNvbXBvbmVudCc7XHJcblxyXG5pbnRlcmZhY2UgU3RvcmVJdGVtIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBGaXh0dXJlSXRlbSB7XHJcbiAgX2lkOiBzdHJpbmc7XHJcbiAgZml4dHVyZU51bWJlcjogbnVtYmVyO1xyXG4gIGZpeHR1cmVOYW1lOiBzdHJpbmc7XHJcbiAgZml4dHVyZUNhdGVnb3J5OiBzdHJpbmc7XHJcbiAgZml4dHVyZVdpZHRoVmFsdWU6IG51bWJlcjtcclxuICBhc3NvY2lhdGVkRWxlbWVudFR5cGU6IHN0cmluZztcclxuICBhc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXI6IG51bWJlciB8IG51bGw7XHJcbiAgZGlzcGxheU5hbWU6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIFRlbXBsYXRlSXRlbSB7XHJcbiAgX2lkOiBzdHJpbmc7XHJcbiAgZml4dHVyZU5hbWU6IHN0cmluZztcclxuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xyXG4gIHN1YnRleHQ6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIFN3YXBSb3cge1xyXG4gIHJvd0lkOiBudW1iZXI7XHJcbiAgZml4dHVyZUlkOiBzdHJpbmcgfCBudWxsO1xyXG4gIHRlbXBsYXRlSWQ6IHN0cmluZyB8IG51bGw7XHJcbiAgZml4dHVyZTogRml4dHVyZUl0ZW0gfCBudWxsO1xyXG4gIHRlbXBsYXRlOiBUZW1wbGF0ZUl0ZW0gfCBudWxsO1xyXG4gIGZpeHR1cmVPcHRpb25zOiBGaXh0dXJlSXRlbVtdO1xyXG4gIHdhbGxQb3NpdGlvbjogc3RyaW5nO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1zd2FwLXRlbXBsYXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc3dhcC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3N3YXAtdGVtcGxhdGUuY29tcG9uZW50LnNjc3MnLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU3dhcFRlbXBsYXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIGNsaWVudElkOiBzdHJpbmc7XHJcblxyXG4gIHN0b3JlT3B0aW9uczogU3RvcmVJdGVtW10gPSBbXTtcclxuICBzZWxlY3RlZFN0b3JlSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIHNlbGVjdGVkU3RvcmU6IFN0b3JlSXRlbSB8IG51bGwgPSBudWxsO1xyXG5cclxuICBmaXh0dXJlczogRml4dHVyZUl0ZW1bXSA9IFtdO1xyXG4gIHRlbXBsYXRlczogVGVtcGxhdGVJdGVtW10gPSBbXTtcclxuICByb3dzOiBTd2FwUm93W10gPSBbXTtcclxuXHJcbiAgaXNMb2FkaW5nRml4dHVyZXMgPSBmYWxzZTtcclxuICBpc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuXHJcbiAgY2FuQWRkUm93ID0gZmFsc2U7XHJcbiAgY2FuU3VibWl0ID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RvcmVTZWxlY3RlZCQgPSBuZXcgU3ViamVjdDxTdG9yZUl0ZW0+KCk7XHJcbiAgcHJpdmF0ZSB0ZW1wbGF0ZXNDYWNoZSQ6IE9ic2VydmFibGU8VGVtcGxhdGVJdGVtW10+IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBjYWNoZWRUZW1wbGF0ZXNDbGllbnRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSByb3dJZFNlcSA9IDA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzYnM6IFN0b3JlQnVpbGRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXHJcbiAgICBwcml2YXRlIHRvYXN0OiBUb2FzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWVcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxyXG4gICAgICAgIGRlYm91bmNlVGltZSgyMDApLFxyXG4gICAgICAgIGZpbHRlcigoZGF0YSkgPT4gISFkYXRhKSxcclxuICAgICAgICBtYXAoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGRhdGE/LmNsaWVudCkgcmV0dXJuIGRhdGEuY2xpZW50IGFzIHN0cmluZztcclxuICAgICAgICAgIGNvbnN0IGhlYWRlckRhdGEgPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaGVhZGVyLWZpbHRlcnMnKSBhcyBzdHJpbmcsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuIGhlYWRlckRhdGE/LmNsaWVudCBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgZmlsdGVyKChpZCk6IGlkIGlzIHN0cmluZyA9PiAhIWlkKSxcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKGNsaWVudElkKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jbGllbnRJZCA9IGNsaWVudElkO1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVzQ2FjaGUkID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNhY2hlZFRlbXBsYXRlc0NsaWVudElkID0gbnVsbDtcclxuICAgICAgICB0aGlzLnJlc2V0U2VsZWN0aW9uKCk7XHJcbiAgICAgICAgdGhpcy5sb2FkU3RvcmVzKCk7XHJcbiAgICAgICAgdGhpcy5wcmVmZXRjaFRlbXBsYXRlcygpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnN0b3JlU2VsZWN0ZWQkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcclxuICAgICAgICB0YXAoKHN0b3JlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RvcmUgPSBzdG9yZTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZUlkID0gc3RvcmUuaWQ7XHJcbiAgICAgICAgICB0aGlzLmZpeHR1cmVzID0gW107XHJcbiAgICAgICAgICB0aGlzLnJvd3MgPSBbXTtcclxuICAgICAgICAgIHRoaXMucmVjb21wdXRlRmxhZ3MoKTtcclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nRml4dHVyZXMgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgc3dpdGNoTWFwKChzdG9yZSkgPT5cclxuICAgICAgICAgIHRoaXMuc2JzXHJcbiAgICAgICAgICAgIC5nZXRGaXh0dXJlRGV0YWlsc0J5U3RvcmUoc3RvcmUubGFiZWwsIHRoaXMuY2xpZW50SWQpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoeyBkYXRhOiBbXSB9KSksXHJcbiAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdGaXh0dXJlcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZpeHR1cmVEYXRhOiBhbnlbXSA9IHJlcz8uZGF0YSB8fCBbXTtcclxuICAgICAgICB0aGlzLmZpeHR1cmVzID0gZml4dHVyZURhdGEubWFwKChmKSA9PiAoe1xyXG4gICAgICAgICAgX2lkOiBmLl9pZCxcclxuICAgICAgICAgIGZpeHR1cmVOdW1iZXI6IGYuZml4dHVyZU51bWJlcixcclxuICAgICAgICAgIGZpeHR1cmVOYW1lOiBmLmZpeHR1cmVOYW1lIHx8ICcnLFxyXG4gICAgICAgICAgZml4dHVyZUNhdGVnb3J5OiBmLmZpeHR1cmVDYXRlZ29yeSB8fCAnJyxcclxuICAgICAgICAgIGZpeHR1cmVXaWR0aFZhbHVlOiBmLmZpeHR1cmVXaWR0aFZhbHVlID8/IDAsXHJcbiAgICAgICAgICBhc3NvY2lhdGVkRWxlbWVudFR5cGU6IGYuYXNzb2NpYXRlZEVsZW1lbnRUeXBlIHx8ICcnLFxyXG4gICAgICAgICAgYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyOlxyXG4gICAgICAgICAgICBmLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA/PyBudWxsLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6IGBGaXh0dXJlICR7Zi5maXh0dXJlTnVtYmVyfWAsXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHRoaXMucm93cyA9IHRoaXMuZml4dHVyZXMubGVuZ3RoID8gW3RoaXMubWFrZUVtcHR5Um93KCldIDogW107XHJcbiAgICAgICAgdGhpcy5yZWNvbXB1dGVGbGFncygpO1xyXG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGxvYWRTdG9yZXMoKSB7XHJcbiAgICB0aGlzLnNic1xyXG4gICAgICAuZ2V0U3RvcmVPckNsdXN0ZXJMaXN0KHsgc2VhcmNoTW9kZTogJ3N0b3JlJyB9KVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zdG9yZU9wdGlvbnMgPSByZXM/LmRhdGEgfHwgW107XHJcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlT3B0aW9ucyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByZWZldGNoVGVtcGxhdGVzKCkge1xyXG4gICAgdGhpcy5nZXRDYWNoZWRUZW1wbGF0ZXMoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICh0ZW1wbGF0ZXMpID0+IHtcclxuICAgICAgICAgIHRoaXMudGVtcGxhdGVzID0gdGVtcGxhdGVzO1xyXG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50ZW1wbGF0ZXMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDYWNoZWRUZW1wbGF0ZXMoKTogT2JzZXJ2YWJsZTxUZW1wbGF0ZUl0ZW1bXT4ge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnRlbXBsYXRlc0NhY2hlJCAmJlxyXG4gICAgICB0aGlzLmNhY2hlZFRlbXBsYXRlc0NsaWVudElkID09PSB0aGlzLmNsaWVudElkXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGVzQ2FjaGUkO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jYWNoZWRUZW1wbGF0ZXNDbGllbnRJZCA9IHRoaXMuY2xpZW50SWQ7XHJcbiAgICB0aGlzLnRlbXBsYXRlc0NhY2hlJCA9IHRoaXMuc2JzXHJcbiAgICAgIC5nZXRBbGxUZW1wbGF0ZXMoeyBjbGllbnRJZDogdGhpcy5jbGllbnRJZCB9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCB0cGxEYXRhOiBhbnlbXSA9IHJlcz8uZGF0YSB8fCBbXTtcclxuICAgICAgICAgIHJldHVybiB0cGxEYXRhLm1hcCgodCkgPT4gKHtcclxuICAgICAgICAgICAgX2lkOiB0Ll9pZCxcclxuICAgICAgICAgICAgZml4dHVyZU5hbWU6IHQuZml4dHVyZU5hbWUsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiB0LmZpeHR1cmVOYW1lPy5pbmNsdWRlcygnLWZ0JylcclxuICAgICAgICAgICAgICA/IHQuZml4dHVyZU5hbWVcclxuICAgICAgICAgICAgICA6IGAke3QuZml4dHVyZU5hbWV9IC0gJHt0LmZpeHR1cmVXaWR0aD8udmFsdWUgPz8gJyd9ICR7XHJcbiAgICAgICAgICAgICAgICAgIHQuZml4dHVyZVdpZHRoPy51bml0ID8/ICcnXHJcbiAgICAgICAgICAgICAgICB9YCxcclxuICAgICAgICAgICAgc3VidGV4dDogKHQucHJvZHVjdEJyYW5kTmFtZSB8fCBbXSkuam9pbignLCAnKSxcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiBmYWxzZSB9KSxcclxuICAgICAgKTtcclxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlc0NhY2hlJDtcclxuICB9XHJcblxyXG4gIG9uU3RvcmVTZWxlY3RlZChzdG9yZUlkOiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICBpZiAoIXN0b3JlSWQgfHwgc3RvcmVJZCA9PT0gdGhpcy5zZWxlY3RlZFN0b3JlPy5pZCkgcmV0dXJuO1xyXG4gICAgY29uc3Qgc3RvcmUgPSB0aGlzLnN0b3JlT3B0aW9ucy5maW5kKChzKSA9PiBzLmlkID09PSBzdG9yZUlkKTtcclxuICAgIGlmICghc3RvcmUpIHJldHVybjtcclxuICAgIHRoaXMuc3RvcmVTZWxlY3RlZCQubmV4dChzdG9yZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1ha2VFbXB0eVJvdygpOiBTd2FwUm93IHtcclxuICAgIGNvbnN0IHJvdzogU3dhcFJvdyA9IHtcclxuICAgICAgcm93SWQ6ICsrdGhpcy5yb3dJZFNlcSxcclxuICAgICAgZml4dHVyZUlkOiBudWxsLFxyXG4gICAgICB0ZW1wbGF0ZUlkOiBudWxsLFxyXG4gICAgICBmaXh0dXJlOiBudWxsLFxyXG4gICAgICB0ZW1wbGF0ZTogbnVsbCxcclxuICAgICAgZml4dHVyZU9wdGlvbnM6IFtdLFxyXG4gICAgICB3YWxsUG9zaXRpb246ICcnLFxyXG4gICAgfTtcclxuICAgIHJvdy5maXh0dXJlT3B0aW9ucyA9IHRoaXMuY29tcHV0ZUZpeHR1cmVPcHRpb25zKHJvdyk7XHJcbiAgICByZXR1cm4gcm93O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21wdXRlRml4dHVyZU9wdGlvbnMoZXhjbHVkZVJvdzogU3dhcFJvdyB8IG51bGwpOiBGaXh0dXJlSXRlbVtdIHtcclxuICAgIGNvbnN0IHVzZWRJZHMgPSBuZXcgU2V0KFxyXG4gICAgICB0aGlzLnJvd3NcclxuICAgICAgICAuZmlsdGVyKChyKSA9PiByICE9PSBleGNsdWRlUm93ICYmIHI/LmZpeHR1cmUpXHJcbiAgICAgICAgLm1hcCgocikgPT4gci5maXh0dXJlIS5faWQpLFxyXG4gICAgKTtcclxuICAgIHJldHVybiB0aGlzLmZpeHR1cmVzLmZpbHRlcigoZikgPT4gIXVzZWRJZHMuaGFzKGYuX2lkKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlZnJlc2hBbGxGaXh0dXJlT3B0aW9ucygpIHtcclxuICAgIHRoaXMucm93cy5mb3JFYWNoKChyKSA9PiB7XHJcbiAgICAgIHIuZml4dHVyZU9wdGlvbnMgPSB0aGlzLmNvbXB1dGVGaXh0dXJlT3B0aW9ucyhyKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21wdXRlV2FsbFBvc2l0aW9uKGZpeHR1cmU6IEZpeHR1cmVJdGVtIHwgbnVsbCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWZpeHR1cmUpIHJldHVybiAnJztcclxuICAgIGlmIChcclxuICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudFR5cGUgPT09ICd3YWxsJyAmJlxyXG4gICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciAhPSBudWxsXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGBXYWxsICR7Zml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXJ9YDtcclxuICAgIH1cclxuICAgIGlmIChmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9PT0gJ2Zsb29yJykgcmV0dXJuICdGbG9vcic7XHJcbiAgICByZXR1cm4gZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudFR5cGVcclxuICAgICAgPyBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArXHJcbiAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZS5zbGljZSgxKVxyXG4gICAgICA6ICfigJQnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWNvbXB1dGVGbGFncygpIHtcclxuICAgIGNvbnN0IGxhc3QgPSB0aGlzLnJvd3NbdGhpcy5yb3dzLmxlbmd0aCAtIDFdO1xyXG4gICAgdGhpcy5jYW5BZGRSb3cgPVxyXG4gICAgICB0aGlzLnJvd3MubGVuZ3RoID4gMCAmJlxyXG4gICAgICB0aGlzLnJvd3MubGVuZ3RoIDwgdGhpcy5maXh0dXJlcy5sZW5ndGggJiZcclxuICAgICAgISFsYXN0Py5maXh0dXJlICYmXHJcbiAgICAgICEhbGFzdD8udGVtcGxhdGU7XHJcblxyXG4gICAgdGhpcy5jYW5TdWJtaXQgPVxyXG4gICAgICAhIXRoaXMuc2VsZWN0ZWRTdG9yZSAmJlxyXG4gICAgICB0aGlzLnJvd3MubGVuZ3RoID4gMCAmJlxyXG4gICAgICB0aGlzLnJvd3MuZXZlcnkoKHIpID0+ICEhci5maXh0dXJlICYmICEhci50ZW1wbGF0ZSk7XHJcbiAgfVxyXG5cclxuICBvblJvd0ZpeHR1cmVDaGFuZ2Uocm93OiBTd2FwUm93LCBmaXh0dXJlSWQ6IHN0cmluZyB8IG51bGwpIHtcclxuICAgIHJvdy5maXh0dXJlSWQgPSBmaXh0dXJlSWQ7XHJcbiAgICByb3cuZml4dHVyZSA9IGZpeHR1cmVJZFxyXG4gICAgICA/IHRoaXMuZml4dHVyZXMuZmluZCgoZikgPT4gZi5faWQgPT09IGZpeHR1cmVJZCkgfHwgbnVsbFxyXG4gICAgICA6IG51bGw7XHJcbiAgICByb3cud2FsbFBvc2l0aW9uID0gdGhpcy5jb21wdXRlV2FsbFBvc2l0aW9uKHJvdy5maXh0dXJlKTtcclxuICAgIHRoaXMucmVmcmVzaEFsbEZpeHR1cmVPcHRpb25zKCk7XHJcbiAgICB0aGlzLnJlY29tcHV0ZUZsYWdzKCk7XHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIG9uUm93VGVtcGxhdGVDaGFuZ2Uocm93OiBTd2FwUm93LCB0ZW1wbGF0ZUlkOiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICByb3cudGVtcGxhdGVJZCA9IHRlbXBsYXRlSWQ7XHJcbiAgICByb3cudGVtcGxhdGUgPSB0ZW1wbGF0ZUlkXHJcbiAgICAgID8gdGhpcy50ZW1wbGF0ZXMuZmluZCgodCkgPT4gdC5faWQgPT09IHRlbXBsYXRlSWQpIHx8IG51bGxcclxuICAgICAgOiBudWxsO1xyXG4gICAgdGhpcy5yZWNvbXB1dGVGbGFncygpO1xyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBhZGRSb3coKSB7XHJcbiAgICBpZiAoIXRoaXMuY2FuQWRkUm93KSByZXR1cm47XHJcbiAgICB0aGlzLnJvd3MucHVzaCh0aGlzLm1ha2VFbXB0eVJvdygpKTtcclxuICAgIHRoaXMucmVjb21wdXRlRmxhZ3MoKTtcclxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlUm93KGluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLnJvd3MubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIHRoaXMucm93c1swXSA9IHRoaXMubWFrZUVtcHR5Um93KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJvd3Muc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVmcmVzaEFsbEZpeHR1cmVPcHRpb25zKCk7XHJcbiAgICB0aGlzLnJlY29tcHV0ZUZsYWdzKCk7XHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIG9uQ2FuY2VsKCkge1xyXG4gICAgdGhpcy5yZXNldFNlbGVjdGlvbigpO1xyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2V0U2VsZWN0aW9uKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFN0b3JlID0gbnVsbDtcclxuICAgIHRoaXMuc2VsZWN0ZWRTdG9yZUlkID0gbnVsbDtcclxuICAgIHRoaXMuZml4dHVyZXMgPSBbXTtcclxuICAgIHRoaXMucm93cyA9IFtdO1xyXG4gICAgdGhpcy5pc0xvYWRpbmdGaXh0dXJlcyA9IGZhbHNlO1xyXG4gICAgdGhpcy5yZWNvbXB1dGVGbGFncygpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25TdWJtaXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuY2FuU3VibWl0IHx8ICF0aGlzLnNlbGVjdGVkU3RvcmUgfHwgdGhpcy5pc1N1Ym1pdHRpbmcpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBzdG9yZU5hbWUgPSB0aGlzLnNlbGVjdGVkU3RvcmUubGFiZWw7XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBkYXRhOiB0aGlzLnJvd3MubWFwKChyKSA9PiAoe1xyXG4gICAgICAgIHN0b3JlTmFtZSxcclxuICAgICAgICBmaXh0dXJlTnVtYmVyOiByLmZpeHR1cmUhLmZpeHR1cmVOdW1iZXIsXHJcbiAgICAgICAgdGVtcGxhdGVOYW1lOiByLnRlbXBsYXRlIS5maXh0dXJlTmFtZSxcclxuICAgICAgfSkpLFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBjb25maXJtZWQgPSBhd2FpdCB0aGlzLmNvbmZpcm1Td2FwKHBheWxvYWQuZGF0YS5sZW5ndGgpO1xyXG4gICAgaWYgKCFjb25maXJtZWQpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmlzU3VibWl0dGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIHRoaXMuc2JzXHJcbiAgICAgIC5zd2FwRml4dHVyZVRlbXBsYXRlKHBheWxvYWQpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBzdWNjZXNzQ291bnQgPSByZXM/LmRhdGE/LnN1Y2Nlc3NDb3VudCA/PyAwO1xyXG4gICAgICAgICAgY29uc3QgZXJyb3JDb3VudCA9IHJlcz8uZGF0YT8uZXJyb3JDb3VudCA/PyAwO1xyXG4gICAgICAgICAgY29uc3QgZXJyb3JzID0gcmVzPy5kYXRhPy5lcnJvcnMgfHwgW107XHJcbiAgICAgICAgICBpZiAoZXJyb3JDb3VudCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldFN1Y2Nlc3NUb2FzdChcclxuICAgICAgICAgICAgICBgU3dhcHBlZCAke3N1Y2Nlc3NDb3VudH0gZml4dHVyZSB0ZW1wbGF0ZShzKSBzdWNjZXNzZnVsbHkuYCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5vbkNhbmNlbCgpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChzdWNjZXNzQ291bnQgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0V2FybmluZ1RvYXN0KFxyXG4gICAgICAgICAgICAgIGBQYXJ0aWFsOiAke3N1Y2Nlc3NDb3VudH0gc3VjY2VlZGVkLCAke2Vycm9yQ291bnR9IGZhaWxlZC4gJHt0aGlzLnN1bW1hcml6ZUVycm9ycyhlcnJvcnMpfWAsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoXHJcbiAgICAgICAgICAgICAgYEFsbCAke2Vycm9yQ291bnR9IHN3YXAocykgZmFpbGVkLiAke3RoaXMuc3VtbWFyaXplRXJyb3JzKGVycm9ycyl9YCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChcclxuICAgICAgICAgICAgZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHN3YXAgZml4dHVyZSB0ZW1wbGF0ZS4nLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3VtbWFyaXplRXJyb3JzKFxyXG4gICAgZXJyb3JzOiB7IGZpeHR1cmVOdW1iZXI6IG51bWJlcjsgZXJyb3I6IHN0cmluZyB9W10sXHJcbiAgKTogc3RyaW5nIHtcclxuICAgIGlmICghZXJyb3JzPy5sZW5ndGgpIHJldHVybiAnJztcclxuICAgIGNvbnN0IGZpcnN0ID0gZXJyb3JzXHJcbiAgICAgIC5zbGljZSgwLCAyKVxyXG4gICAgICAubWFwKChlKSA9PiBgIyR7ZS5maXh0dXJlTnVtYmVyfTogJHtlLmVycm9yfWApXHJcbiAgICAgIC5qb2luKCc7ICcpO1xyXG4gICAgcmV0dXJuIGVycm9ycy5sZW5ndGggPiAyID8gYCR7Zmlyc3R9OyDigKZgIDogZmlyc3Q7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGNvbmZpcm1Td2FwKGNvdW50OiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IG1vZGVsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihEZWxldGVDb25maXJtYXRpb25Db21wb25lbnQsIHtcclxuICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgfSk7XHJcbiAgICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRpdGxlID0gJ0NvbmZpcm0gdGVtcGxhdGUgc3dhcCc7XHJcbiAgICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLmRlc2NyaXB0aW9uID0gYFRoaXMgd2lsbCBvdmVyd3JpdGUgJHtjb3VudH0gZml4dHVyZShzKSB3aXRoIHRoZSBjaG9zZW4gdGVtcGxhdGVzIGFuZCBkZWxldGUgdGhlaXIgZXhpc3Rpbmcgc2hlbHZlcy4gVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZS4gQ29udGludWU/YDtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9kZWxSZWYucmVzdWx0O1xyXG4gICAgICByZXR1cm4gcmVzdWx0ID09PSAnb2snO1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRyYWNrQnlSb3cgPSAoXzogbnVtYmVyLCByb3c6IFN3YXBSb3cpID0+IHJvdy5yb3dJZDtcclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICAgIHRoaXMuc3RvcmVTZWxlY3RlZCQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPHNlY3Rpb24gY2xhc3M9XCJzd2FwLXRlbXBsYXRlIHAtM1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJjYXJkIHAtNFwiIHN0eWxlPVwibWF4LXdpZHRoOiA5MDBweDtcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1iLTNcIj5Td2FwIEZpeHR1cmUgVGVtcGxhdGU8L2g1PlxyXG5cclxuICAgIDwhLS0gU3RvcmUgU2VsZWN0IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3RcclxuICAgICAgICBsYWJlbD1cIlN0b3JlXCJcclxuICAgICAgICBbaWRGaWVsZF09XCInaWQnXCJcclxuICAgICAgICBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIlxyXG4gICAgICAgIFtkYXRhXT1cInN0b3JlT3B0aW9uc1wiXHJcbiAgICAgICAgW3NlYXJjaF09XCJ0cnVlXCJcclxuICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZFN0b3JlSWRcIlxyXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU3RvcmVTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFN0b3JlXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0xvYWRpbmdGaXh0dXJlczsgZWxzZSBsb2FkZWRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBtYi0zXCI+TG9hZGluZyBmaXh0dXJlc+KApjwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGVkPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaXh0dXJlcy5sZW5ndGg7IGVsc2Ugbm9GaXh0dXJlc1wiPlxyXG4gICAgICAgICAgPCEtLSBTd2FwIFJvd3MgLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3dhcC1yb3dzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJvdyBvZiByb3dzOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5Um93XCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInN3YXAtcm93IG1iLTNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGctMiBhbGlnbi1pdGVtcy1zdGFydFwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBQbGFubyBGaXh0dXJlIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJQbGFubyBGaXh0dXJlXCJcclxuICAgICAgICAgICAgICAgICAgICBbaWRGaWVsZF09XCInX2lkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW25hbWVGaWVsZF09XCInZGlzcGxheU5hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJyb3cuZml4dHVyZU9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzZWFyY2hdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicm93LmZpeHR1cmVJZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25Sb3dGaXh0dXJlQ2hhbmdlKHJvdywgJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicm93LmZpeHR1cmVcIiBjbGFzcz1cImZpeHR1cmUtaW5mbyBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5OYW1lOjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IHJvdy5maXh0dXJlLmZpeHR1cmVOYW1lIHx8ICfigJQnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5Qb3NpdGlvbjo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyByb3cud2FsbFBvc2l0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBBcnJvdyAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy10b3A6IDMwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj7ihpI8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFN3YXBwaW5nIFRlbXBsYXRlIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJTd2FwcGluZyBUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2lkRmllbGRdPVwiJ19pZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lRmllbGRdPVwiJ2Rpc3BsYXlOYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N1YlRleHRGaWVsZF09XCInc3VidGV4dCdcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cInRlbXBsYXRlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3NlYXJjaF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJyb3cudGVtcGxhdGVJZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25Sb3dUZW1wbGF0ZUNoYW5nZShyb3csICRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBSZW1vdmUgUm93IC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCJcclxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLXRvcDogMzBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgcC0wIHJlbW92ZS1idG5cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVSb3coaSlcIiB0aXRsZT1cIlJlbW92ZSByb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyb3dzLmxlbmd0aCA9PT0gMSAmJiAhcm93LmZpeHR1cmUgJiYgIXJvdy50ZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDEwIDEwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOSAxTDEgOU0xIDFMOSA5XCIgc3Ryb2tlPVwiIzM0NDA1NFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gQWRkIFJvdyAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHAtMCBhZGQtYnRuXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkUm93KClcIiBbZGlzYWJsZWRdPVwiIWNhbkFkZFJvd1wiPlxyXG4gICAgICAgICAgICAgICsgQWRkIGFub3RoZXIgc3dhcFxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gQWN0aW9ucyAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTIgbXQtNFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIChjbGljayk9XCJvbkNhbmNlbCgpXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNTdWJtaXR0aW5nXCI+XHJcbiAgICAgICAgICAgICAgQ2FuY2VsXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJvblN1Ym1pdCgpXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhblN1Ym1pdCB8fCBpc1N1Ym1pdHRpbmdcIj5cclxuICAgICAgICAgICAgICB7eyBpc1N1Ym1pdHRpbmcgPyAnU3VibWl0dGluZ+KApicgOiAnU3VibWl0JyB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI25vRml4dHVyZXM+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZFwiPk5vIGZpeHR1cmVzIGZvdW5kIGZvciB0aGlzIHN0b3JlLjwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG4iXX0=
|
|
@@ -50,10 +50,10 @@ export class ToolsParentComponent {
|
|
|
50
50
|
this.destroy$.complete();
|
|
51
51
|
}
|
|
52
52
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ToolsParentComponent, deps: [{ token: i1.NgbModal }, { token: i2.Router }, { token: i3.GlobalStateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
53
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ToolsParentComponent, selector: "lib-tools-parent", ngImport: i0, template: "<div class=\"d-flex mb-3\">\r\n <div class=\"d-flex gap-3\">\r\n\r\n <!-- <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/builder\">\r\n Plano Builder\r\n </button> -->\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/migrate\">\r\n
|
|
53
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ToolsParentComponent, selector: "lib-tools-parent", ngImport: i0, template: "<div class=\"d-flex mb-3\">\r\n <div class=\"d-flex gap-3\">\r\n\r\n <!-- <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/builder\">\r\n Plano Builder\r\n </button> -->\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/migrate\">\r\n Download Layout Images\r\n </button>\r\n \r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/cad-render\">\r\n Check CAD Output\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/allow-edit\">\r\n Allow Edit\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/delete-task\">\r\n Delete Task\r\n </button>\r\n\r\n <!-- <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/update-fixture-type\">\r\n Update Fixture Type\r\n </button> -->\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/modify-fixture-numbers\">\r\n Modify Fixture Numbers\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/data-export\">\r\n Data Export\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/store-exports\">\r\n MBQ & Order\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/swap-template\">\r\n Template Swap\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/move-bucket\">\r\n Move Store Bucket\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/cad-files\">\r\n CAD Files\r\n </button>\r\n\r\n <button class=\"btn btn-success\" (click)=\"onClickCreateFixtureTemplate()\">\r\n Create Template\r\n </button>\r\n\r\n </div>\r\n</div>\r\n<hr>\r\n<router-outlet></router-outlet>", styles: [""], dependencies: [{ kind: "directive", type: i2.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
|
|
54
54
|
}
|
|
55
55
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ToolsParentComponent, decorators: [{
|
|
56
56
|
type: Component,
|
|
57
|
-
args: [{ selector: "lib-tools-parent", template: "<div class=\"d-flex mb-3\">\r\n <div class=\"d-flex gap-3\">\r\n\r\n <!-- <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/builder\">\r\n Plano Builder\r\n </button> -->\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/migrate\">\r\n
|
|
57
|
+
args: [{ selector: "lib-tools-parent", template: "<div class=\"d-flex mb-3\">\r\n <div class=\"d-flex gap-3\">\r\n\r\n <!-- <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/builder\">\r\n Plano Builder\r\n </button> -->\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/migrate\">\r\n Download Layout Images\r\n </button>\r\n \r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/cad-render\">\r\n Check CAD Output\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/allow-edit\">\r\n Allow Edit\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/delete-task\">\r\n Delete Task\r\n </button>\r\n\r\n <!-- <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/update-fixture-type\">\r\n Update Fixture Type\r\n </button> -->\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/modify-fixture-numbers\">\r\n Modify Fixture Numbers\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/data-export\">\r\n Data Export\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/store-exports\">\r\n MBQ & Order\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/swap-template\">\r\n Template Swap\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/move-bucket\">\r\n Move Store Bucket\r\n </button>\r\n\r\n <button class=\"btn btn-outline\" routerLink=\"/manage/planogram/plano-tools/cad-files\">\r\n CAD Files\r\n </button>\r\n\r\n <button class=\"btn btn-success\" (click)=\"onClickCreateFixtureTemplate()\">\r\n Create Template\r\n </button>\r\n\r\n </div>\r\n</div>\r\n<hr>\r\n<router-outlet></router-outlet>" }]
|
|
58
58
|
}], ctorParameters: () => [{ type: i1.NgbModal }, { type: i2.Router }, { type: i3.GlobalStateService }] });
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHMtcGFyZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL3BsYW5vLXRvb2xzL3Rvb2xzLXBhcmVudC90b29scy1wYXJlbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tdG9vbHMvdG9vbHMtcGFyZW50L3Rvb2xzLXBhcmVudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRWxELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLCtGQUErRixDQUFDO0FBRy9JLE9BQU8sRUFDTCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixPQUFPLEVBQ1AsU0FBUyxHQUNWLE1BQU0sTUFBTSxDQUFDOzs7OztBQU9kLE1BQU0sT0FBTyxvQkFBb0I7SUFLckI7SUFDQTtJQUNBO0lBTlYsUUFBUSxDQUFTO0lBRUEsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFDaEQsWUFDVSxRQUFrQixFQUNsQixNQUFjLEVBQ2QsRUFBc0I7UUFGdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsT0FBRSxHQUFGLEVBQUUsQ0FBb0I7SUFDN0IsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWM7YUFDbkIsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsdURBQXVEO1FBQ2pGLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxxQ0FBcUM7UUFDeEQsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsNEJBQTRCO1FBQ3RELG9CQUFvQixFQUFFLENBQUMsMkRBQTJEO1NBQ25GO2FBQ0EsU0FBUyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7WUFDdkIsSUFBSSxJQUFJLEVBQUUsTUFBTSxFQUFFO2dCQUNoQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksRUFBRSxNQUFNLENBQUM7YUFDOUI7aUJBQU07Z0JBQ0wsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDekIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBVyxDQUNqRCxDQUFDO2dCQUNGLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxFQUFFLE1BQU0sQ0FBQzthQUNwQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELDRCQUE0QjtRQUMxQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsRUFBRTtZQUNsRSxRQUFRLEVBQUUsSUFBSTtZQUNkLElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3BELFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDOUIsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQ2xCLENBQUMsa0RBQWtELENBQUMsRUFDcEQsRUFBRSxXQUFXLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FDMUQsQ0FBQzthQUNIO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO3dHQWpEVSxvQkFBb0I7NEZBQXBCLG9CQUFvQix3RENsQmpDLDZxRUEwRCtCOzs0RkR4Q2xCLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCB7IENyZWF0ZUZpeHR1cmVUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9maXh0dXJlLXRlbXBsYXRlLXRhYmxlL3BvcHVwcy9jcmVhdGUtZml4dHVyZS10ZW1wbGF0ZS9jcmVhdGUtZml4dHVyZS10ZW1wbGF0ZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSBcInRhbmdvLWFwcC11aS1nbG9iYWxcIjtcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQge1xyXG4gIGRlYm91bmNlVGltZSxcclxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcclxuICBmaWx0ZXIsXHJcbiAgU3ViamVjdCxcclxuICB0YWtlVW50aWwsXHJcbn0gZnJvbSBcInJ4anNcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImxpYi10b29scy1wYXJlbnRcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3Rvb2xzLXBhcmVudC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vdG9vbHMtcGFyZW50LmNvbXBvbmVudC5zY3NzXCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUb29sc1BhcmVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgY2xpZW50SWQ6IHN0cmluZztcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIG5nYk1vZGFsOiBOZ2JNb2RhbCxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksIC8vIFN1YnNjcmlwdGlvbiB3aWxsIGJlIGNhbmNlbGxlZCBvbiBjb21wb25lbnQgZGVzdHJveS5cclxuICAgICAgICBkZWJvdW5jZVRpbWUoMjAwKSwgLy8gVG8gYXZvaWQgaW1tZWRpYXRlIGZyZXF1ZW50IGNhbGxzLlxyXG4gICAgICAgIGZpbHRlcigoZGF0YSkgPT4gISFkYXRhKSwgLy8gRmlsdGVyaW5nIG51bGwvdW5kZWZpbmVkLlxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkgLy8gRW1pdHRpbmcgb25seSBkaWZmZXJlbnQgdmFsdWVzLiAoSWdub3JlcyBzYW1lIGNsaWVudElkKS5cclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZGF0YT8uY2xpZW50KSB7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudElkID0gZGF0YT8uY2xpZW50O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgaGVhZGVyRGF0YSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgYXMgc3RyaW5nXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGhlYWRlckRhdGE/LmNsaWVudDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25DbGlja0NyZWF0ZUZpeHR1cmVUZW1wbGF0ZSgpIHtcclxuICAgIGNvbnN0IG1vZGVsUmVmID0gdGhpcy5uZ2JNb2RhbC5vcGVuKENyZWF0ZUZpeHR1cmVUZW1wbGF0ZUNvbXBvbmVudCwge1xyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgc2l6ZTogXCJtZFwiLFxyXG4gICAgfSk7XHJcbiAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS5jbGllbnRJZCA9IHRoaXMuY2xpZW50SWQ7XHJcbiAgICBtb2RlbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgIFtcIi9tYW5hZ2UvcGxhbm9ncmFtL2ZpeHR1cmUtdGVtcGxhdGUvYmFzaWMtZGV0YWlsc1wiXSxcclxuICAgICAgICAgIHsgcXVlcnlQYXJhbXM6IHsgdGVtcGxhdGVJZDogcmVzdWx0Ll9pZCwgaXNFZGl0OiB0cnVlIH0gfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImQtZmxleCBtYi0zXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4ICBnYXAtM1wiPlxyXG5cclxuICAgICAgICA8IS0tIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiByb3V0ZXJMaW5rPVwiL21hbmFnZS9wbGFub2dyYW0vcGxhbm8tdG9vbHMvYnVpbGRlclwiPlxyXG4gICAgICAgICAgICBQbGFubyBCdWlsZGVyXHJcbiAgICAgICAgPC9idXR0b24+IC0tPlxyXG5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lXCIgcm91dGVyTGluaz1cIi9tYW5hZ2UvcGxhbm9ncmFtL3BsYW5vLXRvb2xzL21pZ3JhdGVcIj5cclxuICAgICAgICAgICAgRG93bmxvYWQgTGF5b3V0IEltYWdlc1xyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIFxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiByb3V0ZXJMaW5rPVwiL21hbmFnZS9wbGFub2dyYW0vcGxhbm8tdG9vbHMvY2FkLXJlbmRlclwiPlxyXG4gICAgICAgICAgICBDaGVjayBDQUQgT3V0cHV0XHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiByb3V0ZXJMaW5rPVwiL21hbmFnZS9wbGFub2dyYW0vcGxhbm8tdG9vbHMvYWxsb3ctZWRpdFwiPlxyXG4gICAgICAgICAgICBBbGxvdyBFZGl0XHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiByb3V0ZXJMaW5rPVwiL21hbmFnZS9wbGFub2dyYW0vcGxhbm8tdG9vbHMvZGVsZXRlLXRhc2tcIj5cclxuICAgICAgICAgICAgRGVsZXRlIFRhc2tcclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPCEtLSA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lXCIgcm91dGVyTGluaz1cIi9tYW5hZ2UvcGxhbm9ncmFtL3BsYW5vLXRvb2xzL3VwZGF0ZS1maXh0dXJlLXR5cGVcIj5cclxuICAgICAgICAgICAgVXBkYXRlIEZpeHR1cmUgVHlwZVxyXG4gICAgICAgIDwvYnV0dG9uPiAtLT5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIHJvdXRlckxpbms9XCIvbWFuYWdlL3BsYW5vZ3JhbS9wbGFuby10b29scy9tb2RpZnktZml4dHVyZS1udW1iZXJzXCI+XHJcbiAgICAgICAgICAgIE1vZGlmeSBGaXh0dXJlIE51bWJlcnNcclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIHJvdXRlckxpbms9XCIvbWFuYWdlL3BsYW5vZ3JhbS9wbGFuby10b29scy9kYXRhLWV4cG9ydFwiPlxyXG4gICAgICAgICAgICBEYXRhIEV4cG9ydFxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lXCIgcm91dGVyTGluaz1cIi9tYW5hZ2UvcGxhbm9ncmFtL3BsYW5vLXRvb2xzL3N0b3JlLWV4cG9ydHNcIj5cclxuICAgICAgICAgICAgTUJRICYgT3JkZXJcclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIHJvdXRlckxpbms9XCIvbWFuYWdlL3BsYW5vZ3JhbS9wbGFuby10b29scy9zd2FwLXRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgIFRlbXBsYXRlIFN3YXBcclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIHJvdXRlckxpbms9XCIvbWFuYWdlL3BsYW5vZ3JhbS9wbGFuby10b29scy9tb3ZlLWJ1Y2tldFwiPlxyXG4gICAgICAgICAgICBNb3ZlIFN0b3JlIEJ1Y2tldFxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lXCIgcm91dGVyTGluaz1cIi9tYW5hZ2UvcGxhbm9ncmFtL3BsYW5vLXRvb2xzL2NhZC1maWxlc1wiPlxyXG4gICAgICAgICAgICBDQUQgRmlsZXNcclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiIChjbGljayk9XCJvbkNsaWNrQ3JlYXRlRml4dHVyZVRlbXBsYXRlKClcIj5cclxuICAgICAgICAgICAgQ3JlYXRlIFRlbXBsYXRlXHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG48aHI+XHJcbjxyb3V0ZXItb3V0bGV0Pjwvcm91dGVyLW91dGxldD4iXX0=
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { Component, Input } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
import * as i1 from "@ng-bootstrap/ng-bootstrap";
|
|
4
|
+
import * as i2 from "@angular/common";
|
|
4
5
|
export class DeleteConfirmationComponent {
|
|
5
6
|
activeModal;
|
|
6
7
|
title = 'Delete action';
|
|
7
8
|
description = 'Are you sure you want to delete this item?';
|
|
9
|
+
confirmLabel = 'Delete';
|
|
10
|
+
confirmClass = 'btn-danger';
|
|
8
11
|
constructor(activeModal) {
|
|
9
12
|
this.activeModal = activeModal;
|
|
10
13
|
}
|
|
@@ -15,14 +18,18 @@ export class DeleteConfirmationComponent {
|
|
|
15
18
|
this.activeModal.close('ok');
|
|
16
19
|
}
|
|
17
20
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DeleteConfirmationComponent, deps: [{ token: i1.NgbActiveModal }], target: i0.ɵɵFactoryTarget.Component });
|
|
18
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DeleteConfirmationComponent, selector: "app-delete-confirmation", inputs: { title: "title", description: "description" }, ngImport: i0, template: "<div class=\"modal-wrapper\">\r\n <div class=\"d-flex flex-start mb-5\">\r\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#FEF0C7\" />\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#FFFAEB\" stroke-width=\"8\" />\r\n <path\r\n d=\"M27.9998 24.0002V28.0002M27.9998 32.0002H28.0098M26.2898 18.8602L17.8198 33.0002C17.6451 33.3026 17.5527 33.6455 17.5518 33.9947C17.5508 34.3439 17.6413 34.6873 17.8142 34.9907C17.9871 35.2941 18.2365 35.547 18.5375 35.7241C18.8385 35.9012 19.1806 35.9964 19.5298 36.0002H36.4698C36.819 35.9964 37.1611 35.9012 37.4621 35.7241C37.7631 35.547 38.0124 35.2941 38.1854 34.9907C38.3583 34.6873 38.4488 34.3439 38.4478 33.9947C38.4468 33.6455 38.3544 33.3026 38.1798 33.0002L29.7098 18.8602C29.5315 18.5663 29.2805 18.3233 28.981 18.1547C28.6814 17.9861 28.3435 17.8975 27.9998 17.8975C27.656 17.8975 27.3181 17.9861 27.0186 18.1547C26.7191 18.3233 26.468 18.5663 26.2898 18.8602Z\"\r\n stroke=\"#DC6803\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n\r\n <h3 class=\"mb-4\">{{ title }}</h3>\r\n\r\n <p>{{ description }}</p>\r\n\r\n <div class=\"modal-actions mt-5\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"onCancel()\">Cancel</button>\r\n <button type=\"button\" class=\"btn
|
|
21
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DeleteConfirmationComponent, selector: "app-delete-confirmation", inputs: { title: "title", description: "description", confirmLabel: "confirmLabel", confirmClass: "confirmClass" }, ngImport: i0, template: "<div class=\"modal-wrapper\">\r\n <div class=\"d-flex flex-start mb-5\">\r\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#FEF0C7\" />\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#FFFAEB\" stroke-width=\"8\" />\r\n <path\r\n d=\"M27.9998 24.0002V28.0002M27.9998 32.0002H28.0098M26.2898 18.8602L17.8198 33.0002C17.6451 33.3026 17.5527 33.6455 17.5518 33.9947C17.5508 34.3439 17.6413 34.6873 17.8142 34.9907C17.9871 35.2941 18.2365 35.547 18.5375 35.7241C18.8385 35.9012 19.1806 35.9964 19.5298 36.0002H36.4698C36.819 35.9964 37.1611 35.9012 37.4621 35.7241C37.7631 35.547 38.0124 35.2941 38.1854 34.9907C38.3583 34.6873 38.4488 34.3439 38.4478 33.9947C38.4468 33.6455 38.3544 33.3026 38.1798 33.0002L29.7098 18.8602C29.5315 18.5663 29.2805 18.3233 28.981 18.1547C28.6814 17.9861 28.3435 17.8975 27.9998 17.8975C27.656 17.8975 27.3181 17.9861 27.0186 18.1547C26.7191 18.3233 26.468 18.5663 26.2898 18.8602Z\"\r\n stroke=\"#DC6803\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n\r\n <h3 class=\"mb-4\">{{ title }}</h3>\r\n\r\n <p>{{ description }}</p>\r\n\r\n <div class=\"modal-actions mt-5\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"onCancel()\">Cancel</button>\r\n <button type=\"button\" class=\"btn px-4\" [ngClass]=\"confirmClass\" (click)=\"onDelete()\">{{ confirmLabel }}</button>\r\n </div>\r\n</div>\r\n", styles: [".modal-wrapper{padding:24px}.modal-actions{display:flex;justify-content:end;gap:12px}::ng-deep .modal-content{border-radius:12px!important}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
19
22
|
}
|
|
20
23
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DeleteConfirmationComponent, decorators: [{
|
|
21
24
|
type: Component,
|
|
22
|
-
args: [{ selector: 'app-delete-confirmation', template: "<div class=\"modal-wrapper\">\r\n <div class=\"d-flex flex-start mb-5\">\r\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#FEF0C7\" />\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#FFFAEB\" stroke-width=\"8\" />\r\n <path\r\n d=\"M27.9998 24.0002V28.0002M27.9998 32.0002H28.0098M26.2898 18.8602L17.8198 33.0002C17.6451 33.3026 17.5527 33.6455 17.5518 33.9947C17.5508 34.3439 17.6413 34.6873 17.8142 34.9907C17.9871 35.2941 18.2365 35.547 18.5375 35.7241C18.8385 35.9012 19.1806 35.9964 19.5298 36.0002H36.4698C36.819 35.9964 37.1611 35.9012 37.4621 35.7241C37.7631 35.547 38.0124 35.2941 38.1854 34.9907C38.3583 34.6873 38.4488 34.3439 38.4478 33.9947C38.4468 33.6455 38.3544 33.3026 38.1798 33.0002L29.7098 18.8602C29.5315 18.5663 29.2805 18.3233 28.981 18.1547C28.6814 17.9861 28.3435 17.8975 27.9998 17.8975C27.656 17.8975 27.3181 17.9861 27.0186 18.1547C26.7191 18.3233 26.468 18.5663 26.2898 18.8602Z\"\r\n stroke=\"#DC6803\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n\r\n <h3 class=\"mb-4\">{{ title }}</h3>\r\n\r\n <p>{{ description }}</p>\r\n\r\n <div class=\"modal-actions mt-5\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"onCancel()\">Cancel</button>\r\n <button type=\"button\" class=\"btn
|
|
25
|
+
args: [{ selector: 'app-delete-confirmation', template: "<div class=\"modal-wrapper\">\r\n <div class=\"d-flex flex-start mb-5\">\r\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#FEF0C7\" />\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#FFFAEB\" stroke-width=\"8\" />\r\n <path\r\n d=\"M27.9998 24.0002V28.0002M27.9998 32.0002H28.0098M26.2898 18.8602L17.8198 33.0002C17.6451 33.3026 17.5527 33.6455 17.5518 33.9947C17.5508 34.3439 17.6413 34.6873 17.8142 34.9907C17.9871 35.2941 18.2365 35.547 18.5375 35.7241C18.8385 35.9012 19.1806 35.9964 19.5298 36.0002H36.4698C36.819 35.9964 37.1611 35.9012 37.4621 35.7241C37.7631 35.547 38.0124 35.2941 38.1854 34.9907C38.3583 34.6873 38.4488 34.3439 38.4478 33.9947C38.4468 33.6455 38.3544 33.3026 38.1798 33.0002L29.7098 18.8602C29.5315 18.5663 29.2805 18.3233 28.981 18.1547C28.6814 17.9861 28.3435 17.8975 27.9998 17.8975C27.656 17.8975 27.3181 17.9861 27.0186 18.1547C26.7191 18.3233 26.468 18.5663 26.2898 18.8602Z\"\r\n stroke=\"#DC6803\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n\r\n <h3 class=\"mb-4\">{{ title }}</h3>\r\n\r\n <p>{{ description }}</p>\r\n\r\n <div class=\"modal-actions mt-5\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"onCancel()\">Cancel</button>\r\n <button type=\"button\" class=\"btn px-4\" [ngClass]=\"confirmClass\" (click)=\"onDelete()\">{{ confirmLabel }}</button>\r\n </div>\r\n</div>\r\n", styles: [".modal-wrapper{padding:24px}.modal-actions{display:flex;justify-content:end;gap:12px}::ng-deep .modal-content{border-radius:12px!important}\n"] }]
|
|
23
26
|
}], ctorParameters: () => [{ type: i1.NgbActiveModal }], propDecorators: { title: [{
|
|
24
27
|
type: Input
|
|
25
28
|
}], description: [{
|
|
26
29
|
type: Input
|
|
30
|
+
}], confirmLabel: [{
|
|
31
|
+
type: Input
|
|
32
|
+
}], confirmClass: [{
|
|
33
|
+
type: Input
|
|
27
34
|
}] } });
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLWNvbmZpcm1hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9wb3B1cHMvZGVsZXRlLWNvbmZpcm1hdGlvbi9kZWxldGUtY29uZmlybWF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL3BvcHVwcy9kZWxldGUtY29uZmlybWF0aW9uL2RlbGV0ZS1jb25maXJtYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFRakQsTUFBTSxPQUFPLDJCQUEyQjtJQU81QjtJQU5ELEtBQUssR0FBVyxlQUFlLENBQUM7SUFDaEMsV0FBVyxHQUFXLDRDQUE0QyxDQUFDO0lBQ25FLFlBQVksR0FBVyxRQUFRLENBQUM7SUFDaEMsWUFBWSxHQUFXLFlBQVksQ0FBQztJQUU3QyxZQUNVLFdBQTJCO1FBQTNCLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtJQUNqQyxDQUFDO0lBRUwsUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO3dHQWhCVSwyQkFBMkI7NEZBQTNCLDJCQUEyQixtTENSeEMscW1EQXdCQTs7NEZEaEJhLDJCQUEyQjtrQkFMdkMsU0FBUzsrQkFDRSx5QkFBeUI7bUZBSzFCLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiQWN0aXZlTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1kZWxldGUtY29uZmlybWF0aW9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGVsZXRlLWNvbmZpcm1hdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2RlbGV0ZS1jb25maXJtYXRpb24uY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEZWxldGVDb25maXJtYXRpb25Db21wb25lbnQge1xyXG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmcgPSAnRGVsZXRlIGFjdGlvbic7XHJcbiAgQElucHV0KCkgZGVzY3JpcHRpb246IHN0cmluZyA9ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgaXRlbT8nO1xyXG4gIEBJbnB1dCgpIGNvbmZpcm1MYWJlbDogc3RyaW5nID0gJ0RlbGV0ZSc7XHJcbiAgQElucHV0KCkgY29uZmlybUNsYXNzOiBzdHJpbmcgPSAnYnRuLWRhbmdlcic7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhY3RpdmVNb2RhbDogTmdiQWN0aXZlTW9kYWwsXHJcbiAgKSB7IH1cclxuXHJcbiAgb25DYW5jZWwoKSB7XHJcbiAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoKTtcclxuICB9XHJcblxyXG4gIG9uRGVsZXRlKCkge1xyXG4gICAgdGhpcy5hY3RpdmVNb2RhbC5jbG9zZSgnb2snKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJtb2RhbC13cmFwcGVyXCI+XHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXN0YXJ0IG1iLTVcIj5cclxuICAgIDxzdmcgd2lkdGg9XCI1NlwiIGhlaWdodD1cIjU2XCIgdmlld0JveD1cIjAgMCA1NiA1NlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICA8cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIGZpbGw9XCIjRkVGMEM3XCIgLz5cclxuICAgICAgPHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBzdHJva2U9XCIjRkZGQUVCXCIgc3Ryb2tlLXdpZHRoPVwiOFwiIC8+XHJcbiAgICAgIDxwYXRoXHJcbiAgICAgICAgZD1cIk0yNy45OTk4IDI0LjAwMDJWMjguMDAwMk0yNy45OTk4IDMyLjAwMDJIMjguMDA5OE0yNi4yODk4IDE4Ljg2MDJMMTcuODE5OCAzMy4wMDAyQzE3LjY0NTEgMzMuMzAyNiAxNy41NTI3IDMzLjY0NTUgMTcuNTUxOCAzMy45OTQ3QzE3LjU1MDggMzQuMzQzOSAxNy42NDEzIDM0LjY4NzMgMTcuODE0MiAzNC45OTA3QzE3Ljk4NzEgMzUuMjk0MSAxOC4yMzY1IDM1LjU0NyAxOC41Mzc1IDM1LjcyNDFDMTguODM4NSAzNS45MDEyIDE5LjE4MDYgMzUuOTk2NCAxOS41Mjk4IDM2LjAwMDJIMzYuNDY5OEMzNi44MTkgMzUuOTk2NCAzNy4xNjExIDM1LjkwMTIgMzcuNDYyMSAzNS43MjQxQzM3Ljc2MzEgMzUuNTQ3IDM4LjAxMjQgMzUuMjk0MSAzOC4xODU0IDM0Ljk5MDdDMzguMzU4MyAzNC42ODczIDM4LjQ0ODggMzQuMzQzOSAzOC40NDc4IDMzLjk5NDdDMzguNDQ2OCAzMy42NDU1IDM4LjM1NDQgMzMuMzAyNiAzOC4xNzk4IDMzLjAwMDJMMjkuNzA5OCAxOC44NjAyQzI5LjUzMTUgMTguNTY2MyAyOS4yODA1IDE4LjMyMzMgMjguOTgxIDE4LjE1NDdDMjguNjgxNCAxNy45ODYxIDI4LjM0MzUgMTcuODk3NSAyNy45OTk4IDE3Ljg5NzVDMjcuNjU2IDE3Ljg5NzUgMjcuMzE4MSAxNy45ODYxIDI3LjAxODYgMTguMTU0N0MyNi43MTkxIDE4LjMyMzMgMjYuNDY4IDE4LjU2NjMgMjYuMjg5OCAxOC44NjAyWlwiXHJcbiAgICAgICAgc3Ryb2tlPVwiI0RDNjgwM1wiXHJcbiAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAvPlxyXG4gICAgPC9zdmc+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxoMyBjbGFzcz1cIm1iLTRcIj57eyB0aXRsZSB9fTwvaDM+XHJcblxyXG4gIDxwPnt7IGRlc2NyaXB0aW9uIH19PC9wPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYWN0aW9ucyBtdC01XCI+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIChjbGljayk9XCJvbkNhbmNlbCgpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBweC00XCIgW25nQ2xhc3NdPVwiY29uZmlybUNsYXNzXCIgKGNsaWNrKT1cIm9uRGVsZXRlKClcIj57eyBjb25maXJtTGFiZWwgfX08L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|