techlify-inventory-common 18.29.0 → 18.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/inventory-common/location/location-form-button/location-form-button.component.mjs +7 -4
- package/esm2022/lib/inventory-common/location/location-information/location-information.component.mjs +17 -15
- package/esm2022/lib/inventory-common/location/location-list/location-list.component.mjs +7 -7
- package/esm2022/lib/inventory-common/location/location-selector/location-selector.component.mjs +6 -5
- package/esm2022/lib/inventory-common/location/location-view/location-view.component.mjs +8 -9
- package/esm2022/lib/inventory-common/location/shelf/shelf-form-button/shelf-form-button.component.mjs +10 -6
- package/esm2022/lib/inventory-common/location/shelf/shelf-list/shelf-list.component.mjs +17 -16
- package/esm2022/lib/inventory-common/product/product-basic-info/product-basic-info.component.mjs +15 -11
- package/esm2022/lib/inventory-common/product/product-form/product-form.component.mjs +136 -108
- package/esm2022/lib/inventory-common/product/product-form-button/product-form-button.component.mjs +10 -35
- package/esm2022/lib/inventory-common/product/product-list/product-list.component.mjs +1 -1
- package/esm2022/lib/inventory-common/product/product-routing.module.mjs +12 -1
- package/esm2022/lib/inventory-common/product/product-view-page/product-view-page.component.mjs +2 -2
- package/esm2022/lib/inventory-common/product/product.module.mjs +16 -5
- package/esm2022/lib/inventory-common/stock-issuances/stock-issue-batch-form/stock-issue-batch-form.component.mjs +120 -0
- package/esm2022/lib/inventory-common/stock-issuances/stock-issue-form/stock-issue-form-button/stock-issue-form-button.component.mjs +5 -4
- package/esm2022/lib/inventory-common/stock-issuances/stock-issue-form/stock-issue-form.module.mjs +7 -4
- package/esm2022/lib/inventory-common/stock-issuances/stock-issue-list/stock-issue-list.component.mjs +21 -12
- package/esm2022/lib/inventory-common/stock-issuances/stock-issue-routing.module.mjs +6 -1
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-batch-form/stock-receipt-batch-form.component.mjs +152 -0
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form/stock-receipt-form.component.mjs +3 -3
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-view/stock-receipt-view.component.mjs +1 -1
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipts-list-page/stock-receipts-list-page.component.mjs +59 -100
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipts-routing.module.mjs +7 -1
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipts.module.mjs +35 -30
- package/esm2022/lib/inventory-common/supplier/purchase-order/purchase-order-form/purchase-order-form.component.mjs +156 -0
- package/esm2022/lib/inventory-common/supplier/purchase-order/purchase-order-listing/purchase-order-listing.component.mjs +9 -5
- package/esm2022/lib/inventory-common/supplier/purchase-order/purchase-order-product-list/purchase-order-product-list.component.mjs +27 -0
- package/esm2022/lib/inventory-common/supplier/purchase-order/purchase-order-view/purchase-order-view.component.mjs +63 -0
- package/esm2022/lib/inventory-common/supplier/supplier-routing.module.mjs +14 -1
- package/esm2022/public-api.mjs +1 -3
- package/fesm2022/{techlify-inventory-common-category.module-BT3uLLqI.mjs → techlify-inventory-common-category.module-CMCZ_60M.mjs} +13 -13
- package/fesm2022/{techlify-inventory-common-category.module-BT3uLLqI.mjs.map → techlify-inventory-common-category.module-CMCZ_60M.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-measure.module-s9xhNWZM.mjs → techlify-inventory-common-measure.module-6JtrzPaD.mjs} +7 -7
- package/fesm2022/{techlify-inventory-common-measure.module-s9xhNWZM.mjs.map → techlify-inventory-common-measure.module-6JtrzPaD.mjs.map} +1 -1
- package/fesm2022/techlify-inventory-common-purchase-order-view.component-PylRUv5V.mjs +86 -0
- package/fesm2022/techlify-inventory-common-purchase-order-view.component-PylRUv5V.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-stock-issue-batch-form.component-B_KbA68z.mjs +119 -0
- package/fesm2022/techlify-inventory-common-stock-issue-batch-form.component-B_KbA68z.mjs.map +1 -0
- package/fesm2022/{techlify-inventory-common-stock-issue-view.component-CNrY99hf.mjs → techlify-inventory-common-stock-issue-view.component-Ca_lo9Mo.mjs} +7 -7
- package/fesm2022/{techlify-inventory-common-stock-issue-view.component-CNrY99hf.mjs.map → techlify-inventory-common-stock-issue-view.component-Ca_lo9Mo.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-techlify-inventory-common-DRw7na0D.mjs → techlify-inventory-common-techlify-inventory-common-BRqmW8Lo.mjs} +865 -679
- package/fesm2022/techlify-inventory-common-techlify-inventory-common-BRqmW8Lo.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common.mjs +1 -1
- package/lib/inventory-common/location/location-information/location-information.component.d.ts +3 -1
- package/lib/inventory-common/location/location-selector/location-selector.component.d.ts +3 -1
- package/lib/inventory-common/product/product-basic-info/product-basic-info.component.d.ts +3 -1
- package/lib/inventory-common/product/product-form/product-form.component.d.ts +23 -27
- package/lib/inventory-common/product/product-form-button/product-form-button.component.d.ts +3 -16
- package/lib/inventory-common/product/product.module.d.ts +3 -1
- package/lib/inventory-common/stock-issuances/stock-issue-batch-form/stock-issue-batch-form.component.d.ts +31 -0
- package/lib/inventory-common/stock-issuances/stock-issue-form/stock-issue-form.module.d.ts +1 -1
- package/lib/inventory-common/stock-issuances/stock-issue-list/stock-issue-list.component.d.ts +0 -1
- package/lib/inventory-common/stock-receipts/stock-receipt-batch-form/stock-receipt-batch-form.component.d.ts +39 -0
- package/lib/inventory-common/stock-receipts/stock-receipts-list-page/stock-receipts-list-page.component.d.ts +5 -11
- package/lib/inventory-common/stock-receipts/stock-receipts.module.d.ts +11 -12
- package/lib/inventory-common/supplier/purchase-order/purchase-order-form/purchase-order-form.component.d.ts +30 -0
- package/lib/inventory-common/supplier/purchase-order/purchase-order-product-list/purchase-order-product-list.component.d.ts +7 -0
- package/lib/inventory-common/supplier/purchase-order/purchase-order-view/purchase-order-view.component.d.ts +19 -0
- package/package.json +1 -1
- package/public-api.d.ts +0 -2
- package/esm2022/lib/inventory-common/location/location-delete-button/location-delete-button.component.mjs +0 -68
- package/esm2022/lib/inventory-common/location/shelf/shelf-delete-button/shelf-delete-button.component.mjs +0 -60
- package/fesm2022/techlify-inventory-common-techlify-inventory-common-DRw7na0D.mjs.map +0 -1
- package/lib/inventory-common/location/location-delete-button/location-delete-button.component.d.ts +0 -28
- package/lib/inventory-common/location/shelf/shelf-delete-button/shelf-delete-button.component.d.ts +0 -20
|
@@ -1,53 +1,34 @@
|
|
|
1
|
-
import { Component,
|
|
2
|
-
import { Validators } from '@angular/forms';
|
|
1
|
+
import { Component, Input, signal } from '@angular/core';
|
|
2
|
+
import { FormControl, Validators } from '@angular/forms';
|
|
3
3
|
import moment from 'moment';
|
|
4
|
+
import { TechlifyFormComponentInterface, FormConfigurationUtilityService } from 'ngx-techlify-core';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "
|
|
6
|
-
import * as i2 from "
|
|
7
|
-
import * as i3 from "
|
|
8
|
-
import * as i4 from "@angular/
|
|
9
|
-
import * as i5 from "
|
|
6
|
+
import * as i1 from "@angular/forms";
|
|
7
|
+
import * as i2 from "ngx-techlify-core";
|
|
8
|
+
import * as i3 from "../product.service";
|
|
9
|
+
import * as i4 from "@angular/router";
|
|
10
|
+
import * as i5 from "@angular/common";
|
|
10
11
|
import * as i6 from "@angular/material/button";
|
|
11
|
-
import * as i7 from "@angular/material/
|
|
12
|
-
import * as i8 from "@angular/material/
|
|
13
|
-
import * as i9 from "@angular/material/
|
|
14
|
-
import * as i10 from "@angular/
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
type_id: {
|
|
19
|
-
required: 'Please Enter Type',
|
|
20
|
-
},
|
|
21
|
-
name: {
|
|
22
|
-
required: 'Please Enter Name',
|
|
23
|
-
},
|
|
24
|
-
sale_price: {
|
|
25
|
-
required: 'Please Enter Sales Price',
|
|
26
|
-
},
|
|
27
|
-
minimum_price: {
|
|
28
|
-
required: 'Please Enter Minimum Price',
|
|
29
|
-
},
|
|
30
|
-
reorder_point: {
|
|
31
|
-
required: 'Please Enter Reorder Point',
|
|
32
|
-
},
|
|
33
|
-
};
|
|
34
|
-
export class ProductFormComponent {
|
|
35
|
-
productService;
|
|
12
|
+
import * as i7 from "@angular/material/checkbox";
|
|
13
|
+
import * as i8 from "@angular/material/form-field";
|
|
14
|
+
import * as i9 from "@angular/material/input";
|
|
15
|
+
import * as i10 from "@angular/material/progress-spinner";
|
|
16
|
+
import * as i11 from "@angular/material/card";
|
|
17
|
+
import * as i12 from "@angular/material/datepicker";
|
|
18
|
+
export class ProductFormComponent extends TechlifyFormComponentInterface {
|
|
36
19
|
fb;
|
|
37
20
|
formValidatorService;
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
saved = new EventEmitter();
|
|
45
|
-
cancelled = new EventEmitter();
|
|
46
|
-
product;
|
|
21
|
+
service;
|
|
22
|
+
activatedRoute;
|
|
23
|
+
errorHandler;
|
|
24
|
+
location;
|
|
25
|
+
router;
|
|
26
|
+
formConfigService;
|
|
47
27
|
displayedFormFields = [
|
|
48
28
|
'name',
|
|
49
29
|
'product type',
|
|
50
30
|
'sku',
|
|
31
|
+
'color',
|
|
51
32
|
'description',
|
|
52
33
|
'product measure',
|
|
53
34
|
'reorder point',
|
|
@@ -65,53 +46,114 @@ export class ProductFormComponent {
|
|
|
65
46
|
'sales information',
|
|
66
47
|
'accounts information',
|
|
67
48
|
];
|
|
68
|
-
|
|
69
|
-
|
|
49
|
+
product = signal(null);
|
|
50
|
+
isFormSetup = signal(false);
|
|
51
|
+
errorMessages = {
|
|
52
|
+
type_id: {
|
|
53
|
+
required: 'Please Enter Type',
|
|
54
|
+
},
|
|
55
|
+
name: {
|
|
56
|
+
required: 'Please Enter Name',
|
|
57
|
+
},
|
|
58
|
+
sale_price: {
|
|
59
|
+
required: 'Please Enter Sales Price',
|
|
60
|
+
},
|
|
61
|
+
minimum_price: {
|
|
62
|
+
required: 'Please Enter Minimum Price',
|
|
63
|
+
},
|
|
64
|
+
reorder_point: {
|
|
65
|
+
required: 'Please Enter Reorder Point',
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
isCreateAnother = new FormControl(false);
|
|
69
|
+
savedCount = 0;
|
|
70
|
+
formConfigurationUtilityService;
|
|
71
|
+
constructor(fb, formValidatorService, service, activatedRoute, errorHandler, location, router, formConfigService) {
|
|
72
|
+
super(formValidatorService);
|
|
70
73
|
this.fb = fb;
|
|
71
74
|
this.formValidatorService = formValidatorService;
|
|
72
|
-
this.
|
|
73
|
-
this.
|
|
74
|
-
this.
|
|
75
|
-
this.
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
name: ['', Validators.compose([Validators.required])],
|
|
80
|
-
initial_quantity: [initial_quantity],
|
|
81
|
-
initial_quantity_date: [moment().format()],
|
|
82
|
-
reorder_point: [reorder_point, Validators.compose([Validators.required])],
|
|
83
|
-
description: [''],
|
|
84
|
-
sale_price: [0, Validators.compose([Validators.required])],
|
|
85
|
-
income_account_id: [''],
|
|
86
|
-
expense_account_id: [''],
|
|
87
|
-
measure_id: [1],
|
|
88
|
-
minimum_price: ['', Validators.compose([Validators.required])],
|
|
89
|
-
maximum_price: [''],
|
|
90
|
-
condition_type_id: [1],
|
|
91
|
-
current_quantity: [],
|
|
92
|
-
category_ids: [''],
|
|
93
|
-
});
|
|
75
|
+
this.service = service;
|
|
76
|
+
this.activatedRoute = activatedRoute;
|
|
77
|
+
this.errorHandler = errorHandler;
|
|
78
|
+
this.location = location;
|
|
79
|
+
this.router = router;
|
|
80
|
+
this.formConfigService = formConfigService;
|
|
81
|
+
this.formConfigurationUtilityService = new FormConfigurationUtilityService();
|
|
94
82
|
}
|
|
95
83
|
ngOnInit() {
|
|
96
|
-
|
|
97
|
-
this.
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
84
|
+
this.formConfigurationUtilityService
|
|
85
|
+
.initialize(this.formConfigService, 'product')
|
|
86
|
+
.subscribe({
|
|
87
|
+
next: (response) => {
|
|
88
|
+
this.form = this.fb.group({
|
|
89
|
+
id: [''],
|
|
90
|
+
type_id: [1, Validators.compose([Validators.required])],
|
|
91
|
+
color_id: [''],
|
|
92
|
+
sku: [''],
|
|
93
|
+
name: ['', Validators.compose([Validators.required])],
|
|
94
|
+
initial_quantity: [0],
|
|
95
|
+
initial_quantity_date: [moment().format()],
|
|
96
|
+
reorder_point: [10, Validators.compose([Validators.required])],
|
|
97
|
+
description: [''],
|
|
98
|
+
sale_price: [0, Validators.compose([Validators.required])],
|
|
99
|
+
income_account_id: [''],
|
|
100
|
+
expense_account_id: [''],
|
|
101
|
+
measure_id: [1],
|
|
102
|
+
minimum_price: ['', Validators.compose([Validators.required])],
|
|
103
|
+
maximum_price: [''],
|
|
104
|
+
condition_type_id: [1],
|
|
105
|
+
current_quantity: [],
|
|
106
|
+
category_ids: [''],
|
|
107
|
+
});
|
|
108
|
+
}, error: (error) => {
|
|
109
|
+
this.errorHandler.handleError(error);
|
|
110
|
+
}, complete: () => {
|
|
111
|
+
this.isFormSetup.set(true);
|
|
112
|
+
this.loadProduct();
|
|
101
113
|
}
|
|
102
|
-
|
|
103
|
-
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
loadProduct() {
|
|
117
|
+
let id = this.activatedRoute.snapshot.params['id'];
|
|
118
|
+
if (!id) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
this.isWorking = true;
|
|
122
|
+
this.service?.show(id, {
|
|
123
|
+
with: 'measure,categories',
|
|
124
|
+
}).subscribe({
|
|
125
|
+
next: (response) => {
|
|
126
|
+
this.product.set(response?.item);
|
|
127
|
+
this.isWorking = false;
|
|
128
|
+
},
|
|
129
|
+
error: (error) => {
|
|
130
|
+
this.isWorking = false;
|
|
131
|
+
this.errorHandler.handleError(error);
|
|
132
|
+
},
|
|
133
|
+
complete: () => {
|
|
134
|
+
this.patchProduct();
|
|
135
|
+
this.isWorking = false;
|
|
104
136
|
}
|
|
105
|
-
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
patchProduct() {
|
|
140
|
+
this.isUpdate = true;
|
|
141
|
+
let data = { ...this.product() };
|
|
142
|
+
if (this.product()?.categories?.length > 0) {
|
|
143
|
+
(data).category_ids = this.product().categories.map((category) => category?.id);
|
|
106
144
|
}
|
|
145
|
+
if (data?.initial_quantity_date) {
|
|
146
|
+
data.initial_quantity_date = moment(data.initial_quantity_date).toISOString();
|
|
147
|
+
}
|
|
148
|
+
this.form.patchValue(data);
|
|
107
149
|
}
|
|
108
150
|
async save() {
|
|
109
|
-
this.
|
|
110
|
-
if (this.
|
|
151
|
+
this.form.markAllAsTouched();
|
|
152
|
+
if (this.form.invalid) {
|
|
111
153
|
this.alertService.addAlert('Please Fill All Required Fields', 'warn');
|
|
112
154
|
return;
|
|
113
155
|
}
|
|
114
|
-
let product = this.
|
|
156
|
+
let product = this.form.value;
|
|
115
157
|
if (product.maximum_price <= 0 || !product.maximum_price) {
|
|
116
158
|
product.maximum_price = product.minimum_price;
|
|
117
159
|
}
|
|
@@ -119,33 +161,25 @@ export class ProductFormComponent {
|
|
|
119
161
|
product.initial_quantity_date = moment(product.initial_quantity_date).format('YYYY-MM-DD');
|
|
120
162
|
}
|
|
121
163
|
this.isWorking = true;
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
request.subscribe({
|
|
128
|
-
next: (response) => {
|
|
129
|
-
this.saved.emit(response?.item);
|
|
164
|
+
let promise = product.id
|
|
165
|
+
? this.service.update(product)
|
|
166
|
+
: this.service.store(product);
|
|
167
|
+
promise.subscribe({
|
|
168
|
+
next: () => {
|
|
130
169
|
this.isWorking = false;
|
|
131
|
-
this.productFormService.listUpdated(true);
|
|
132
170
|
this.alertService.addAlert('Product saved successfully!', 'success');
|
|
133
171
|
},
|
|
134
172
|
error: () => (this.isWorking = false),
|
|
173
|
+
complete: () => {
|
|
174
|
+
if (this.isCreateAnother.value && !this.isUpdate) {
|
|
175
|
+
this.savedCount++;
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
this.router.navigate(['/inventory/products']);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
135
181
|
});
|
|
136
182
|
}
|
|
137
|
-
/**
|
|
138
|
-
* Method to evaluate form fields
|
|
139
|
-
*/
|
|
140
|
-
isFieldValid(field) {
|
|
141
|
-
return this.formValidatorService.isFieldValid(field, this.productForm);
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Method to find error in form fields
|
|
145
|
-
*/
|
|
146
|
-
getErrorMessage(field) {
|
|
147
|
-
return this.formValidatorService.getErrorMessage(field, this.productForm, errorMessages);
|
|
148
|
-
}
|
|
149
183
|
/**
|
|
150
184
|
* Checks displayed Form Fields array for form field and returns boolean result
|
|
151
185
|
*/
|
|
@@ -158,21 +192,15 @@ export class ProductFormComponent {
|
|
|
158
192
|
isFormSectionShown(sectionName) {
|
|
159
193
|
return this.displayedFormSections.length > 0 && this.displayedFormSections.includes(sectionName);
|
|
160
194
|
}
|
|
161
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProductFormComponent, deps: [{ token: i1.
|
|
162
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ProductFormComponent, selector: "app-product-form", inputs: { product: "product", displayedFormFields: "displayedFormFields", displayedFormSections: "displayedFormSections" }, outputs: { saved: "saved", cancelled: "cancelled" }, ngImport: i0, template: "<form [formGroup]=\"productForm\" (submit)=\"save()\">\n <h3 class=\"text-center\">{{ product?.id ? 'Update' : 'Create' }} Product</h3>\n <div fxLayout=\"column\">\n <div fxLayout=\"column\" *ngIf=\"isFormSectionShown('basic information')\">\n <h3><strong>Basic Information</strong></h3>\n <div fxLayout fxLayoutGap=\"0.5rem\">\n\n <mat-form-field fxFlex=\"50%\" *ngIf=\"isFormFieldShown('name')\">\n <mat-label>Name</mat-label>\n <input matInput placeholder=\"Name\" formControlName=\"name\" required />\n <mat-error *ngIf=\"isFieldValid('name')\">{{ getErrorMessage('name') }} </mat-error>\n </mat-form-field>\n\n <mat-form-field fxFlex=\"50%\" *ngIf=\"isFormFieldShown('product type')\">\n <mat-label>Product Type</mat-label>\n <app-searchable-selector apiUrl=\"api/product-types\" formControlName=\"type_id\"> </app-searchable-selector>\n <mat-error *ngIf=\"isFieldValid('type_id')\">{{ getErrorMessage('type_id') }} </mat-error>\n </mat-form-field>\n </div>\n\n <div fxLayout fxLayoutGap=\"0.5rem\">\n <mat-form-field fxFlex=\"50%\" *ngIf=\"isFormFieldShown('sku')\">\n <mat-label>SKU</mat-label>\n <input matInput placeholder=\"SKU\" formControlName=\"sku\" />\n <mat-error *ngIf=\"isFieldValid('sku')\">{{ getErrorMessage('sku') }} </mat-error>\n </mat-form-field>\n\n <mat-form-field fxFlex=\"50%\">\n <mat-label>Category</mat-label>\n <app-searchable-selector apiUrl=\"api/product-categories\" formControlName=\"category_ids\" [multiple]=\"true\">\n </app-searchable-selector>\n <mat-error *ngIf=\"isFieldValid('category_ids')\">\n {{ getErrorMessage('category_ids') }}\n </mat-error>\n </mat-form-field>\n </div>\n\n <div fxLayout fxLayoutGap=\"0.5rem\">\n <mat-form-field fxFlex=\"100%\" *ngIf=\"isFormFieldShown('description')\">\n <mat-label>Description</mat-label>\n <textarea matInput placeholder=\"Description\" formControlName=\"description\"></textarea>\n </mat-form-field>\n </div>\n </div>\n\n <div fxLayout=\"column\" *ngIf=\"isFormSectionShown('inventory information')\">\n <h3><strong>Inventory Information</strong></h3>\n <div fxLayout fxLayoutGap=\"0.5rem\">\n\n <mat-form-field fxFlex=\"50%\" *ngIf=\"isFormFieldShown('product measure')\">\n <mat-label>Measure</mat-label>\n <app-searchable-selector apiUrl=\"api/product-measures\" formControlName=\"measure_id\">\n </app-searchable-selector>\n <mat-error *ngIf=\"isFieldValid('measure_id')\">{{ getErrorMessage('measure_id') }} </mat-error>\n </mat-form-field>\n\n <mat-form-field fxFlex=\"50%\" *ngIf=\"isFormFieldShown('reorder point')\">\n <mat-label>Reorder Point</mat-label>\n <input matInput placeholder=\"Reorder Point\" formControlName=\"reorder_point\" type=\"number\" />\n <mat-error *ngIf=\"isFieldValid('reorder_point')\">{{ getErrorMessage('reorder_point') }} </mat-error>\n </mat-form-field>\n </div>\n <div fxLayout fxLayoutGap=\"0.5rem\">\n <mat-form-field fxFlex=\"50%\" *ngIf=\"isFormFieldShown('initial quantity')\">\n <mat-label>Initial Quantity</mat-label>\n <input matInput placeholder=\"Initial Quantity\" formControlName=\"initial_quantity\" />\n <mat-error *ngIf=\"isFieldValid('initial_quantity')\">{{ getErrorMessage('initial_quantity') }} </mat-error>\n </mat-form-field>\n\n <mat-form-field fxFlex=\"50%\" *ngIf=\"isFormFieldShown('initial quantity date')\">\n <mat-label>Initial Quantity Date</mat-label>\n <input matInput [matDatepicker]=\"pickerInitialQuantityDate\" placeholder=\"Initial Quantity Date\"\n formControlName=\"initial_quantity_date\" />\n <mat-datepicker-toggle matSuffix [for]=\"pickerInitialQuantityDate\"></mat-datepicker-toggle>\n <mat-datepicker #pickerInitialQuantityDate></mat-datepicker>\n <mat-error *ngIf=\"isFieldValid('initial_quantity_date')\">{{ getErrorMessage('initial_quantity_date') }}\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <div fxLayout=\"column\" *ngIf=\"isFormSectionShown('sales information')\">\n <h3><strong>Sale Information</strong></h3>\n <div fxLayout fxLayoutGap=\"0.5rem\">\n <mat-form-field fxFlex=\"50%\" *ngIf=\"isFormFieldShown('sales price')\">\n <mat-label>Selling Price</mat-label>\n <input matInput placeholder=\"Selling Price\" formControlName=\"sale_price\" required type=\"number\" step=\"any\" />\n <mat-error *ngIf=\"isFieldValid('sale_price')\">{{ getErrorMessage('sale_price') }} </mat-error>\n </mat-form-field>\n\n <mat-form-field fxFlex=\"50%\" *ngIf=\"isFormFieldShown('condition types')\">\n <mat-label>Condition</mat-label>\n <app-searchable-selector apiUrl=\"api/condition-types\"\n formControlName=\"condition_type_id\"></app-searchable-selector>\n </mat-form-field>\n </div>\n <div fxLayout fxLayoutGap=\"0.5rem\">\n <mat-form-field fxFlex=\"50%\" *ngIf=\"isFormFieldShown('minimum price')\">\n <mat-label>Minimum Price</mat-label>\n <input matInput placeholder=\"Minimum Price\" formControlName=\"minimum_price\" required type=\"number\"\n step=\"any\" />\n <mat-error *ngIf=\"isFieldValid('minimum_price')\">{{ getErrorMessage('minimum_price') }} </mat-error>\n </mat-form-field>\n\n <mat-form-field fxFlex=\"50%\" *ngIf=\"isFormFieldShown('maximum price')\">\n <mat-label>Maximum Price</mat-label>\n <input matInput placeholder=\"Maximum Price\" formControlName=\"maximum_price\" type=\"number\" step=\"any\" />\n </mat-form-field>\n </div>\n </div>\n\n <div fxFlex=\"100%\" fxLayout fxLayoutAlign=\"end\" fxLayoutGap=\"1rem\">\n <button [disabled]=\"isWorking\" mat-button class=\"mt-2\" type=\"button\" (click)=\"cancelled.emit(true)\">\n Cancel\n </button>\n <button [disabled]=\"isWorking\" mat-raised-button color=\"primary\" class=\"mt-2\" type=\"submit\">Save</button>\n </div>\n </div>\n</form>", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.SearchableSelectorComponent, selector: "app-searchable-selector", inputs: ["valueField", "titleField", "subtitleField", "apiUrl", "multiple", "selectedValue", "enableSearch", "add", "addConfig", "edit", "editConfig", "sort", "sortBy", "searchField", "itemComponent", "items", "apiDataProperty", "cache", "perPage", "inDataSearch", "panelWidth", "focusSearchOnOpen", "required", "disabled", "value"], outputs: ["selectedValueChange", "selectionChange", "itemsChange"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i7.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i9.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i9.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i9.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: i10.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i10.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i10.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i10.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], preserveWhitespaces: true });
|
|
195
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProductFormComponent, deps: [{ token: i1.FormBuilder }, { token: i2.FormValidatorService }, { token: i3.ProductService }, { token: i4.ActivatedRoute }, { token: i2.ErrorHandlerService }, { token: i5.Location }, { token: i4.Router }, { token: i2.FormConfigurationFormService }], target: i0.ɵɵFactoryTarget.Component });
|
|
196
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ProductFormComponent, selector: "app-product-form", inputs: { displayedFormFields: "displayedFormFields", displayedFormSections: "displayedFormSections" }, usesInheritance: true, ngImport: i0, template: "<mat-card class='container'>\n @if (isFormSetup()) {\n <mat-card-content>\n <form [formGroup]=\"form\" (submit)=\"save()\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <span></span>\n <h3 class=\"text-center m-0\">Product Form</h3>\n <i role='button' class=\"fa-solid fa-gear\" routerLink=\"/form-configuration-field-form/product\"></i>\n </div>\n <div class=\"d-flex flex-column\">\n <div class=\"d-flex flex-column\" *ngIf=\"isFormSectionShown('basic information')\">\n <h3><strong>Basic Information</strong></h3>\n <div class=\"d-flex gap-2\">\n\n <mat-form-field class=\"w-50\" *ngIf=\"isFormFieldShown('name')\">\n <mat-label>Name</mat-label>\n <input matInput placeholder=\"Name\" formControlName=\"name\" required />\n <mat-error *ngIf=\"isFieldValid('name')\">{{ getErrorMessage('name') }} </mat-error>\n </mat-form-field>\n\n <mat-form-field class=\"w-50\" *ngIf=\"isFormFieldShown('product type')\">\n <mat-label>Product Type</mat-label>\n <app-searchable-selector apiUrl=\"api/product-types\" formControlName=\"type_id\"> </app-searchable-selector>\n <mat-error *ngIf=\"isFieldValid('type_id')\">{{ getErrorMessage('type_id') }} </mat-error>\n </mat-form-field>\n </div>\n\n <div class=\"d-flex gap-2\">\n <mat-form-field class=\"w-50\" *ngIf=\"isFormFieldShown('sku')\">\n <mat-label>SKU</mat-label>\n <input matInput placeholder=\"SKU\" formControlName=\"sku\" />\n <mat-error *ngIf=\"isFieldValid('sku')\">{{ getErrorMessage('sku') }} </mat-error>\n </mat-form-field>\n\n <mat-form-field class=\"w-50\">\n <mat-label>Category</mat-label>\n <app-searchable-selector apiUrl=\"api/product-categories\" formControlName=\"category_ids\" [multiple]=\"true\">\n </app-searchable-selector>\n <mat-error *ngIf=\"isFieldValid('category_ids')\">\n {{ getErrorMessage('category_ids') }}\n </mat-error>\n </mat-form-field>\n </div>\n\n <div class=\"d-flex gap-2\">\n <mat-form-field class=\"w-50 align-self-start\"\n *ngIf=\"isFormFieldShown('color') && formConfigurationUtilityService.getFieldEnabled('color_id')\">\n <mat-label>Color</mat-label>\n <app-searchable-selector apiUrl=\"api/attributes?type_code=color\"\n formControlName=\"color_id\"></app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field class=\"w-50\" *ngIf=\"isFormFieldShown('description')\">\n <mat-label>Description</mat-label>\n <textarea matInput placeholder=\"Description\" formControlName=\"description\"></textarea>\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"d-flex flex-column\" *ngIf=\"isFormSectionShown('inventory information')\">\n <h3><strong>Inventory Information</strong></h3>\n <div class=\"d-flex gap-2\">\n\n <mat-form-field class=\"w-50\" *ngIf=\"isFormFieldShown('product measure')\">\n <mat-label>Measure</mat-label>\n <app-searchable-selector apiUrl=\"api/product-measures\" formControlName=\"measure_id\">\n </app-searchable-selector>\n <mat-error *ngIf=\"isFieldValid('measure_id')\">{{ getErrorMessage('measure_id') }} </mat-error>\n </mat-form-field>\n\n <mat-form-field class=\"w-50\" *ngIf=\"isFormFieldShown('reorder point')\">\n <mat-label>Reorder Point</mat-label>\n <input matInput placeholder=\"Reorder Point\" formControlName=\"reorder_point\" type=\"number\" />\n <mat-error *ngIf=\"isFieldValid('reorder_point')\">{{ getErrorMessage('reorder_point') }} </mat-error>\n </mat-form-field>\n </div>\n <div class=\"d-flex gap-2\">\n <mat-form-field class=\"w-50\" *ngIf=\"isFormFieldShown('initial quantity')\">\n <mat-label>Initial Quantity</mat-label>\n <input matInput placeholder=\"Initial Quantity\" formControlName=\"initial_quantity\" />\n <mat-error *ngIf=\"isFieldValid('initial_quantity')\">{{ getErrorMessage('initial_quantity') }} </mat-error>\n </mat-form-field>\n\n <mat-form-field class=\"w-50\" *ngIf=\"isFormFieldShown('initial quantity date')\">\n <mat-label>Initial Quantity Date</mat-label>\n <input matInput [matDatepicker]=\"pickerInitialQuantityDate\" placeholder=\"Initial Quantity Date\"\n formControlName=\"initial_quantity_date\" />\n <mat-datepicker-toggle matSuffix [for]=\"pickerInitialQuantityDate\"></mat-datepicker-toggle>\n <mat-datepicker #pickerInitialQuantityDate></mat-datepicker>\n <mat-error *ngIf=\"isFieldValid('initial_quantity_date')\">{{ getErrorMessage('initial_quantity_date') }}\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <div class=\"d-flex flex-column\" *ngIf=\"isFormSectionShown('sales information')\">\n <h3><strong>Sale Information</strong></h3>\n <div class=\"d-flex gap-2\">\n <mat-form-field class=\"w-50\" *ngIf=\"isFormFieldShown('sales price')\">\n <mat-label>Selling Price</mat-label>\n <input matInput placeholder=\"Selling Price\" formControlName=\"sale_price\" required type=\"number\"\n step=\"any\" />\n <mat-error *ngIf=\"isFieldValid('sale_price')\">{{ getErrorMessage('sale_price') }} </mat-error>\n </mat-form-field>\n\n <mat-form-field class=\"w-50\" *ngIf=\"isFormFieldShown('condition types')\">\n <mat-label>Condition</mat-label>\n <app-searchable-selector apiUrl=\"api/condition-types\"\n formControlName=\"condition_type_id\"></app-searchable-selector>\n </mat-form-field>\n </div>\n <div class=\"d-flex gap-2\">\n <mat-form-field class=\"w-50\" *ngIf=\"isFormFieldShown('minimum price')\">\n <mat-label>Minimum Price</mat-label>\n <input matInput placeholder=\"Minimum Price\" formControlName=\"minimum_price\" required type=\"number\"\n step=\"any\" />\n <mat-error *ngIf=\"isFieldValid('minimum_price')\">{{ getErrorMessage('minimum_price') }} </mat-error>\n </mat-form-field>\n\n <mat-form-field class=\"w-50\" *ngIf=\"isFormFieldShown('maximum price')\">\n <mat-label>Maximum Price</mat-label>\n <input matInput placeholder=\"Maximum Price\" formControlName=\"maximum_price\" type=\"number\" step=\"any\" />\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"w-100 d-flex justify-content-between\">\n @if (!isUpdate) {\n <mat-checkbox [formControl]=\"isCreateAnother\">Create Another\n <span *ngIf=\"savedCount > 0\">({{ savedCount }} items saved)</span>\n </mat-checkbox>\n } @else {\n <span class='d-flex flex-grow'></span>\n }\n\n <div class=\"d-flex flex-row gap-3 align-items-center justify-content-end\">\n <button [disabled]=\"isWorking\" mat-button class=\"mt-2\" type=\"button\" (click)=\"location.back()\">\n Cancel\n </button>\n <button [disabled]=\"isWorking\" mat-raised-button color=\"primary\" class=\"mt-2\" type=\"submit\">Save</button>\n </div>\n </div>\n </div>\n </form>\n </mat-card-content>\n } @else {\n <mat-card-content class=\"d-flex vh-100 justify-content-center align-items-center\">\n <mat-spinner></mat-spinner>\n </mat-card-content>\n }\n</mat-card>", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i2.SearchableSelectorComponent, selector: "app-searchable-selector", inputs: ["valueField", "titleField", "subtitleField", "apiUrl", "multiple", "selectedValue", "enableSearch", "add", "addConfig", "edit", "editConfig", "sort", "sortBy", "searchField", "itemComponent", "items", "apiDataProperty", "cache", "perPage", "inDataSearch", "panelWidth", "focusSearchOnOpen", "required", "disabled", "value"], outputs: ["selectedValueChange", "selectionChange", "itemsChange"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "directive", type: i8.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i8.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i10.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i11.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i11.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i12.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i12.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i12.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.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: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], preserveWhitespaces: true });
|
|
163
197
|
}
|
|
164
198
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProductFormComponent, decorators: [{
|
|
165
199
|
type: Component,
|
|
166
|
-
args: [{ selector: 'app-product-form', template: "<form [formGroup]=\"
|
|
167
|
-
}], ctorParameters: () => [{ type: i1.
|
|
168
|
-
type: Output
|
|
169
|
-
}], cancelled: [{
|
|
170
|
-
type: Output
|
|
171
|
-
}], product: [{
|
|
172
|
-
type: Input
|
|
173
|
-
}], displayedFormFields: [{
|
|
200
|
+
args: [{ selector: 'app-product-form', template: "<mat-card class='container'>\n @if (isFormSetup()) {\n <mat-card-content>\n <form [formGroup]=\"form\" (submit)=\"save()\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <span></span>\n <h3 class=\"text-center m-0\">Product Form</h3>\n <i role='button' class=\"fa-solid fa-gear\" routerLink=\"/form-configuration-field-form/product\"></i>\n </div>\n <div class=\"d-flex flex-column\">\n <div class=\"d-flex flex-column\" *ngIf=\"isFormSectionShown('basic information')\">\n <h3><strong>Basic Information</strong></h3>\n <div class=\"d-flex gap-2\">\n\n <mat-form-field class=\"w-50\" *ngIf=\"isFormFieldShown('name')\">\n <mat-label>Name</mat-label>\n <input matInput placeholder=\"Name\" formControlName=\"name\" required />\n <mat-error *ngIf=\"isFieldValid('name')\">{{ getErrorMessage('name') }} </mat-error>\n </mat-form-field>\n\n <mat-form-field class=\"w-50\" *ngIf=\"isFormFieldShown('product type')\">\n <mat-label>Product Type</mat-label>\n <app-searchable-selector apiUrl=\"api/product-types\" formControlName=\"type_id\"> </app-searchable-selector>\n <mat-error *ngIf=\"isFieldValid('type_id')\">{{ getErrorMessage('type_id') }} </mat-error>\n </mat-form-field>\n </div>\n\n <div class=\"d-flex gap-2\">\n <mat-form-field class=\"w-50\" *ngIf=\"isFormFieldShown('sku')\">\n <mat-label>SKU</mat-label>\n <input matInput placeholder=\"SKU\" formControlName=\"sku\" />\n <mat-error *ngIf=\"isFieldValid('sku')\">{{ getErrorMessage('sku') }} </mat-error>\n </mat-form-field>\n\n <mat-form-field class=\"w-50\">\n <mat-label>Category</mat-label>\n <app-searchable-selector apiUrl=\"api/product-categories\" formControlName=\"category_ids\" [multiple]=\"true\">\n </app-searchable-selector>\n <mat-error *ngIf=\"isFieldValid('category_ids')\">\n {{ getErrorMessage('category_ids') }}\n </mat-error>\n </mat-form-field>\n </div>\n\n <div class=\"d-flex gap-2\">\n <mat-form-field class=\"w-50 align-self-start\"\n *ngIf=\"isFormFieldShown('color') && formConfigurationUtilityService.getFieldEnabled('color_id')\">\n <mat-label>Color</mat-label>\n <app-searchable-selector apiUrl=\"api/attributes?type_code=color\"\n formControlName=\"color_id\"></app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field class=\"w-50\" *ngIf=\"isFormFieldShown('description')\">\n <mat-label>Description</mat-label>\n <textarea matInput placeholder=\"Description\" formControlName=\"description\"></textarea>\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"d-flex flex-column\" *ngIf=\"isFormSectionShown('inventory information')\">\n <h3><strong>Inventory Information</strong></h3>\n <div class=\"d-flex gap-2\">\n\n <mat-form-field class=\"w-50\" *ngIf=\"isFormFieldShown('product measure')\">\n <mat-label>Measure</mat-label>\n <app-searchable-selector apiUrl=\"api/product-measures\" formControlName=\"measure_id\">\n </app-searchable-selector>\n <mat-error *ngIf=\"isFieldValid('measure_id')\">{{ getErrorMessage('measure_id') }} </mat-error>\n </mat-form-field>\n\n <mat-form-field class=\"w-50\" *ngIf=\"isFormFieldShown('reorder point')\">\n <mat-label>Reorder Point</mat-label>\n <input matInput placeholder=\"Reorder Point\" formControlName=\"reorder_point\" type=\"number\" />\n <mat-error *ngIf=\"isFieldValid('reorder_point')\">{{ getErrorMessage('reorder_point') }} </mat-error>\n </mat-form-field>\n </div>\n <div class=\"d-flex gap-2\">\n <mat-form-field class=\"w-50\" *ngIf=\"isFormFieldShown('initial quantity')\">\n <mat-label>Initial Quantity</mat-label>\n <input matInput placeholder=\"Initial Quantity\" formControlName=\"initial_quantity\" />\n <mat-error *ngIf=\"isFieldValid('initial_quantity')\">{{ getErrorMessage('initial_quantity') }} </mat-error>\n </mat-form-field>\n\n <mat-form-field class=\"w-50\" *ngIf=\"isFormFieldShown('initial quantity date')\">\n <mat-label>Initial Quantity Date</mat-label>\n <input matInput [matDatepicker]=\"pickerInitialQuantityDate\" placeholder=\"Initial Quantity Date\"\n formControlName=\"initial_quantity_date\" />\n <mat-datepicker-toggle matSuffix [for]=\"pickerInitialQuantityDate\"></mat-datepicker-toggle>\n <mat-datepicker #pickerInitialQuantityDate></mat-datepicker>\n <mat-error *ngIf=\"isFieldValid('initial_quantity_date')\">{{ getErrorMessage('initial_quantity_date') }}\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <div class=\"d-flex flex-column\" *ngIf=\"isFormSectionShown('sales information')\">\n <h3><strong>Sale Information</strong></h3>\n <div class=\"d-flex gap-2\">\n <mat-form-field class=\"w-50\" *ngIf=\"isFormFieldShown('sales price')\">\n <mat-label>Selling Price</mat-label>\n <input matInput placeholder=\"Selling Price\" formControlName=\"sale_price\" required type=\"number\"\n step=\"any\" />\n <mat-error *ngIf=\"isFieldValid('sale_price')\">{{ getErrorMessage('sale_price') }} </mat-error>\n </mat-form-field>\n\n <mat-form-field class=\"w-50\" *ngIf=\"isFormFieldShown('condition types')\">\n <mat-label>Condition</mat-label>\n <app-searchable-selector apiUrl=\"api/condition-types\"\n formControlName=\"condition_type_id\"></app-searchable-selector>\n </mat-form-field>\n </div>\n <div class=\"d-flex gap-2\">\n <mat-form-field class=\"w-50\" *ngIf=\"isFormFieldShown('minimum price')\">\n <mat-label>Minimum Price</mat-label>\n <input matInput placeholder=\"Minimum Price\" formControlName=\"minimum_price\" required type=\"number\"\n step=\"any\" />\n <mat-error *ngIf=\"isFieldValid('minimum_price')\">{{ getErrorMessage('minimum_price') }} </mat-error>\n </mat-form-field>\n\n <mat-form-field class=\"w-50\" *ngIf=\"isFormFieldShown('maximum price')\">\n <mat-label>Maximum Price</mat-label>\n <input matInput placeholder=\"Maximum Price\" formControlName=\"maximum_price\" type=\"number\" step=\"any\" />\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"w-100 d-flex justify-content-between\">\n @if (!isUpdate) {\n <mat-checkbox [formControl]=\"isCreateAnother\">Create Another\n <span *ngIf=\"savedCount > 0\">({{ savedCount }} items saved)</span>\n </mat-checkbox>\n } @else {\n <span class='d-flex flex-grow'></span>\n }\n\n <div class=\"d-flex flex-row gap-3 align-items-center justify-content-end\">\n <button [disabled]=\"isWorking\" mat-button class=\"mt-2\" type=\"button\" (click)=\"location.back()\">\n Cancel\n </button>\n <button [disabled]=\"isWorking\" mat-raised-button color=\"primary\" class=\"mt-2\" type=\"submit\">Save</button>\n </div>\n </div>\n </div>\n </form>\n </mat-card-content>\n } @else {\n <mat-card-content class=\"d-flex vh-100 justify-content-center align-items-center\">\n <mat-spinner></mat-spinner>\n </mat-card-content>\n }\n</mat-card>" }]
|
|
201
|
+
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.FormValidatorService }, { type: i3.ProductService }, { type: i4.ActivatedRoute }, { type: i2.ErrorHandlerService }, { type: i5.Location }, { type: i4.Router }, { type: i2.FormConfigurationFormService }], propDecorators: { displayedFormFields: [{
|
|
174
202
|
type: Input
|
|
175
203
|
}], displayedFormSections: [{
|
|
176
204
|
type: Input
|
|
177
205
|
}] } });
|
|
178
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ludmVudG9yeS1jb21tb24vc3JjL2xpYi9pbnZlbnRvcnktY29tbW9uL3Byb2R1Y3QvcHJvZHVjdC1mb3JtL3Byb2R1Y3QtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZlbnRvcnktY29tbW9uL3NyYy9saWIvaW52ZW50b3J5LWNvbW1vbi9wcm9kdWN0L3Byb2R1Y3QtZm9ybS9wcm9kdWN0LWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQTBCLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7Ozs7O0FBTzVCLE1BQU0sZ0JBQWdCLEdBQVcsQ0FBQyxDQUFDO0FBQ25DLE1BQU0sYUFBYSxHQUFXLEVBQUUsQ0FBQztBQUVqQyxNQUFNLGFBQWEsR0FBUTtJQUN6QixPQUFPLEVBQUU7UUFDUCxRQUFRLEVBQUUsbUJBQW1CO0tBQzlCO0lBQ0QsSUFBSSxFQUFFO1FBQ0osUUFBUSxFQUFFLG1CQUFtQjtLQUM5QjtJQUNELFVBQVUsRUFBRTtRQUNWLFFBQVEsRUFBRSwwQkFBMEI7S0FDckM7SUFDRCxhQUFhLEVBQUU7UUFDYixRQUFRLEVBQUUsNEJBQTRCO0tBQ3ZDO0lBQ0QsYUFBYSxFQUFFO1FBQ2IsUUFBUSxFQUFFLDRCQUE0QjtLQUN2QztDQUNGLENBQUM7QUFNRixNQUFNLE9BQU8sb0JBQW9CO0lBK0JyQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFuQ0gsV0FBVyxDQUFZO0lBQ3ZCLFNBQVMsR0FBWSxLQUFL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QUVEOztPQUVHO0lBQ0gsa0JBQWtCLENBQUMsV0FBbUI7UUFDcEMsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ25HLENBQUM7d0dBbElVLG9CQUFvQjs0RkFBcEIsb0JBQW9CLHlPQ2xDakMsbXNNQXFITzs7NEZEbkZNLG9CQUFvQjtrQkFKaEMsU0FBUzsrQkFDRSxrQkFBa0I7bU9BT2xCLEtBQUs7c0JBQWQsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNFLE9BQU87c0JBQWYsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBZ0JHLHFCQUFxQjtzQkFBN0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UsIEZvcm1WYWxpZGF0b3JTZXJ2aWNlIH0gZnJvbSAnbmd4LXRlY2hsaWZ5LWNvcmUnO1xuaW1wb3J0IHsgUHJvZHVjdFNlcnZpY2UgfSBmcm9tICcuLi9wcm9kdWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUHJvZHVjdEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vcHJvZHVjdC1mb3JtLnNlcnZpY2UnO1xuXG5jb25zdCBpbml0aWFsX3F1YW50aXR5OiBudW1iZXIgPSAwO1xuY29uc3QgcmVvcmRlcl9wb2ludDogbnVtYmVyID0gMTA7XG5cbmNvbnN0IGVycm9yTWVzc2FnZXM6IGFueSA9IHtcbiAgdHlwZV9pZDoge1xuICAgIHJlcXVpcmVkOiAnUGxlYXNlIEVudGVyIFR5cGUnLFxuICB9LFxuICBuYW1lOiB7XG4gICAgcmVxdWlyZWQ6ICdQbGVhc2UgRW50ZXIgTmFtZScsXG4gIH0sXG4gIHNhbGVfcHJpY2U6IHtcbiAgICByZXF1aXJlZDogJ1BsZWFzZSBFbnRlciBTYWxlcyBQcmljZScsXG4gIH0sXG4gIG1pbmltdW1fcHJpY2U6IHtcbiAgICByZXF1aXJlZDogJ1BsZWFzZSBFbnRlciBNaW5pbXVtIFByaWNlJyxcbiAgfSxcbiAgcmVvcmRlcl9wb2ludDoge1xuICAgIHJlcXVpcmVkOiAnUGxlYXNlIEVudGVyIFJlb3JkZXIgUG9pbnQnLFxuICB9LFxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXByb2R1Y3QtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9kdWN0LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9kdWN0Rm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHB1YmxpYyBwcm9kdWN0Rm9ybTogRm9ybUdyb3VwO1xuICBwdWJsaWMgaXNXb3JraW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBpc1VwZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgc2F2ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgY2FuY2VsbGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQElucHV0KCkgcHJvZHVjdDogYW55O1xuICBASW5wdXQoKSBkaXNwbGF5ZWRGb3JtRmllbGRzOiBhbnlbXSA9IFtcbiAgICAnbmFtZScsXG4gICAgJ3Byb2R1Y3QgdHlwZScsXG4gICAgJ3NrdScsXG4gICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAncHJvZHVjdCBtZWFzdXJlJyxcbiAgICAncmVvcmRlciBwb2ludCcsXG4gICAgJ2luaXRpYWwgcXVhbnRpdHknLFxuICAgICdpbml0aWFsIHF1YW50aXR5IGRhdGUnLFxuICAgICdzYWxlcyBwcmljZScsXG4gICAgJ21pbmltdW0gcHJpY2UnLFxuICAgICdtYXhpbXVtIHByaWNlJyxcbiAgICAnaW5jb21lIGFjY291bnQnLFxuICAgICdleHBlbnNlIGFjY291bnQnLFxuICBdO1xuXG4gIEBJbnB1dCgpIGRpc3BsYXllZEZvcm1TZWN0aW9uczogYW55W10gPSBbXG4gICAgJ2Jhc2ljIGluZm9ybWF0aW9uJyxcbiAgICAnaW52ZW50b3J5IGluZm9ybWF0aW9uJyxcbiAgICAnc2FsZXMgaW5mb3JtYXRpb24nLFxuICAgICdhY2NvdW50cyBpbmZvcm1hdGlvbicsXG4gIF07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBwcm9kdWN0U2VydmljZTogUHJvZHVjdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBmb3JtVmFsaWRhdG9yU2VydmljZTogRm9ybVZhbGlkYXRvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICBwcml2YXRlIHByb2R1Y3RGb3JtU2VydmljZTogUHJvZHVjdEZvcm1TZXJ2aWNlXG4gICkge1xuICAgIHRoaXMucHJvZHVjdEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGlkOiBbJyddLFxuICAgICAgdHlwZV9pZDogWzEsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXSxcbiAgICAgIHNrdTogWycnXSxcbiAgICAgIG5hbWU6IFsnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSldLFxuICAgICAgaW5pdGlhbF9xdWFudGl0eTogW2luaXRpYWxfcXVhbnRpdHldLFxuICAgICAgaW5pdGlhbF9xdWFudGl0eV9kYXRlOiBbbW9tZW50KCkuZm9ybWF0KCldLFxuICAgICAgcmVvcmRlcl9wb2ludDogW3Jlb3JkZXJfcG9pbnQsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXSxcbiAgICAgIGRlc2NyaXB0aW9uOiBbJyddLFxuICAgICAgc2FsZV9wcmljZTogWzAsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXSxcbiAgICAgIGluY29tZV9hY2NvdW50X2lkOiBbJyddLFxuICAgICAgZXhwZW5zZV9hY2NvdW50X2lkOiBbJyddLFxuICAgICAgbWVhc3VyZV9pZDogWzFdLFxuICAgICAgbWluaW11bV9wcmljZTogWycnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKV0sXG4gICAgICBtYXhpbXVtX3ByaWNlOiBbJyddLFxuICAgICAgY29uZGl0aW9uX3R5cGVfaWQ6IFsxXSxcbiAgICAgIGN1cnJlbnRfcXVhbnRpdHk6IFtdLFxuICAgICAgY2F0ZWdvcnlfaWRzOiBbJyddLFxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMucHJvZHVjdD8uaWQpIHtcbiAgICAgIHRoaXMuaXNVcGRhdGUgPSB0cnVlO1xuICAgICAgbGV0IGRhdGEgPSB7IC4uLnRoaXMucHJvZHVjdCB9O1xuICAgICAgaWYgKHRoaXMucHJvZHVjdD8uY2F0ZWdvcmllcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICBkYXRhLmNhdGVnb3J5X2lkcyA9ICh0aGlzLnByb2R1Y3QuY2F0ZWdvcmllcyBhcyBbXSkubWFwKChjYXRlZ29yeTogYW55KSA9PiBjYXRlZ29yeT8uaWQpO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGE/LmluaXRpYWxfcXVhbnRpdHlfZGF0ZSkge1xuICAgICAgICBkYXRhLmluaXRpYWxfcXVhbnRpdHlfZGF0ZSA9IG1vbWVudChkYXRhLmluaXRpYWxfcXVhbnRpdHlfZGF0ZSkudG9JU09TdHJpbmcoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJvZHVjdEZvcm0ucGF0Y2hWYWx1ZShkYXRhKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzYXZlKCkge1xuICAgIHRoaXMucHJvZHVjdEZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgIGlmICh0aGlzLnByb2R1Y3RGb3JtLmludmFsaWQpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZEFsZXJ0KCdQbGVhc2UgRmlsbCBBbGwgUmVxdWlyZWQgRmllbGRzJywgJ3dhcm4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHByb2R1Y3QgPSB0aGlzLnByb2R1Y3RGb3JtLnZhbHVlO1xuICAgIGlmIChwcm9kdWN0Lm1heGltdW1fcHJpY2UgPD0gMCB8fCAhcHJvZHVjdC5tYXhpbXVtX3ByaWNlKSB7XG4gICAgICBwcm9kdWN0Lm1heGltdW1fcHJpY2UgPSBwcm9kdWN0Lm1pbmltdW1fcHJpY2U7XG4gICAgfVxuXG4gICAgaWYgKHByb2R1Y3Q/LmluaXRpYWxfcXVhbnRpdHlfZGF0ZSkge1xuICAgICAgcHJvZHVjdC5pbml0aWFsX3F1YW50aXR5X2RhdGUgPSBtb21lbnQocHJvZHVjdC5pbml0aWFsX3F1YW50aXR5X2RhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgIH1cbiAgICB0aGlzLmlzV29ya2luZyA9IHRydWU7XG4gICAgcHJvZHVjdC53aXRoID0gJ3R5cGUsbWVhc3VyZSxpbmNvbWVBY2NvdW50LGV4cGVuc2VBY2NvdW50JztcblxuICAgIGxldCByZXF1ZXN0OiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLnByb2R1Y3RTZXJ2aWNlLnN0b3JlKHByb2R1Y3QpO1xuICAgIGlmICh0aGlzLmlzVXBkYXRlKSB7XG4gICAgICByZXF1ZXN0ID0gdGhpcy5wcm9kdWN0U2VydmljZS51cGRhdGUocHJvZHVjdCk7XG4gICAgfVxuICAgIHJlcXVlc3Quc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc2F2ZWQuZW1pdChyZXNwb25zZT8uaXRlbSk7XG4gICAgICAgIHRoaXMuaXNXb3JraW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMucHJvZHVjdEZvcm1TZXJ2aWNlLmxpc3RVcGRhdGVkKHRydWUpO1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydCgnUHJvZHVjdCBzYXZlZCBzdWNjZXNzZnVsbHkhJywgJ3N1Y2Nlc3MnKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4gKHRoaXMuaXNXb3JraW5nID0gZmFsc2UpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBldmFsdWF0ZSBmb3JtIGZpZWxkc1xuICAgKi9cbiAgaXNGaWVsZFZhbGlkKGZpZWxkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtVmFsaWRhdG9yU2VydmljZS5pc0ZpZWxkVmFsaWQoZmllbGQsIHRoaXMucHJvZHVjdEZvcm0pO1xuICB9XG4gIC8qKlxuICAgKiBNZXRob2QgdG8gZmluZCBlcnJvciBpbiBmb3JtIGZpZWxkc1xuICAgKi9cbiAgZ2V0RXJyb3JNZXNzYWdlKGZpZWxkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtVmFsaWRhdG9yU2VydmljZS5nZXRFcnJvck1lc3NhZ2UoZmllbGQsIHRoaXMucHJvZHVjdEZvcm0sIGVycm9yTWVzc2FnZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBkaXNwbGF5ZWQgRm9ybSBGaWVsZHMgYXJyYXkgZm9yIGZvcm0gZmllbGQgYW5kIHJldHVybnMgYm9vbGVhbiByZXN1bHRcbiAgICovXG4gIGlzRm9ybUZpZWxkU2hvd24oZmllbGROYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWRGb3JtRmllbGRzLmxlbmd0aCA+IDAgJiYgdGhpcy5kaXNwbGF5ZWRGb3JtRmllbGRzLmluY2x1ZGVzKGZpZWxkTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGRpc3BsYXllZCBGb3JtIFNlY3Rpb24gYXJyYXkgZm9yIGZvcm0gc2VjdGlvbiBhbmQgcmV0dXJucyBib29sZWFuIHJlc3VsdFxuICAgKi9cbiAgaXNGb3JtU2VjdGlvblNob3duKHNlY3Rpb25OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWRGb3JtU2VjdGlvbnMubGVuZ3RoID4gMCAmJiB0aGlzLmRpc3BsYXllZEZvcm1TZWN0aW9ucy5pbmNsdWRlcyhzZWN0aW9uTmFtZSk7XG4gIH1cbn1cbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwicHJvZHVjdEZvcm1cIiAoc3VibWl0KT1cInNhdmUoKVwiPlxuICA8aDMgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPnt7IHByb2R1Y3Q/LmlkID8gJ1VwZGF0ZScgOiAnQ3JlYXRlJyB9fSBQcm9kdWN0PC9oMz5cbiAgPGRpdiBmeExheW91dD1cImNvbHVtblwiPlxuICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiAqbmdJZj1cImlzRm9ybVNlY3Rpb25TaG93bignYmFzaWMgaW5mb3JtYXRpb24nKVwiPlxuICAgICAgPGgzPjxzdHJvbmc+QmFzaWMgSW5mb3JtYXRpb248L3N0cm9uZz48L2gzPlxuICAgICAgPGRpdiBmeExheW91dCBmeExheW91dEdhcD1cIjAuNXJlbVwiPlxuXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCI1MCVcIiAqbmdJZj1cImlzRm9ybUZpZWxkU2hvd24oJ25hbWUnKVwiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+TmFtZTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIk5hbWVcIiBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCIgcmVxdWlyZWQgLz5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNGaWVsZFZhbGlkKCduYW1lJylcIj57eyBnZXRFcnJvck1lc3NhZ2UoJ25hbWUnKSB9fSA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiNTAlXCIgKm5nSWY9XCJpc0Zvcm1GaWVsZFNob3duKCdwcm9kdWN0IHR5cGUnKVwiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+UHJvZHVjdCBUeXBlPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGFwcC1zZWFyY2hhYmxlLXNlbGVjdG9yIGFwaVVybD1cImFwaS9wcm9kdWN0LXR5cGVzXCIgZm9ybUNvbnRyb2xOYW1lPVwidHlwZV9pZFwiPiA8L2FwcC1zZWFyY2hhYmxlLXNlbGVjdG9yPlxuICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJpc0ZpZWxkVmFsaWQoJ3R5cGVfaWQnKVwiPnt7IGdldEVycm9yTWVzc2FnZSgndHlwZV9pZCcpIH19IDwvbWF0LWVycm9yPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgZnhMYXlvdXQgZnhMYXlvdXRHYXA9XCIwLjVyZW1cIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD1cIjUwJVwiICpuZ0lmPVwiaXNGb3JtRmllbGRTaG93bignc2t1JylcIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPlNLVTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlNLVVwiIGZvcm1Db250cm9sTmFtZT1cInNrdVwiIC8+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImlzRmllbGRWYWxpZCgnc2t1JylcIj57eyBnZXRFcnJvck1lc3NhZ2UoJ3NrdScpIH19IDwvbWF0LWVycm9yPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCI1MCVcIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPkNhdGVnb3J5PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGFwcC1zZWFyY2hhYmxlLXNlbGVjdG9yIGFwaVVybD1cImFwaS9wcm9kdWN0LWNhdGVnb3JpZXNcIiBmb3JtQ29udHJvbE5hbWU9XCJjYXRlZ29yeV9pZHNcIiBbbXVsdGlwbGVdPVwidHJ1ZVwiPlxuICAgICAgICAgIDwvYXBwLXNlYXJjaGFibGUtc2VsZWN0b3I+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImlzRmllbGRWYWxpZCgnY2F0ZWdvcnlfaWRzJylcIj5cbiAgICAgICAgICAgIHt7IGdldEVycm9yTWVzc2FnZSgnY2F0ZWdvcnlfaWRzJykgfX1cbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGZ4TGF5b3V0IGZ4TGF5b3V0R2FwPVwiMC41cmVtXCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCIxMDAlXCIgKm5nSWY9XCJpc0Zvcm1GaWVsZFNob3duKCdkZXNjcmlwdGlvbicpXCI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5EZXNjcmlwdGlvbjwvbWF0LWxhYmVsPlxuICAgICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIkRlc2NyaXB0aW9uXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpb25cIj48L3RleHRhcmVhPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgKm5nSWY9XCJpc0Zvcm1TZWN0aW9uU2hvd24oJ2ludmVudG9yeSBpbmZvcm1hdGlvbicpXCI+XG4gICAgICA8aDM+PHN0cm9uZz5JbnZlbnRvcnkgSW5mb3JtYXRpb248L3N0cm9uZz48L2gzPlxuICAgICAgPGRpdiBmeExheW91dCBmeExheW91dEdhcD1cIjAuNXJlbVwiPlxuXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCI1MCVcIiAqbmdJZj1cImlzRm9ybUZpZWxkU2hvd24oJ3Byb2R1Y3QgbWVhc3VyZScpXCI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5NZWFzdXJlPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGFwcC1zZWFyY2hhYmxlLXNlbGVjdG9yIGFwaVVybD1cImFwaS9wcm9kdWN0LW1lYXN1cmVzXCIgZm9ybUNvbnRyb2xOYW1lPVwibWVhc3VyZV9pZFwiPlxuICAgICAgICAgIDwvYXBwLXNlYXJjaGFibGUtc2VsZWN0b3I+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImlzRmllbGRWYWxpZCgnbWVhc3VyZV9pZCcpXCI+e3sgZ2V0RXJyb3JNZXNzYWdlKCdtZWFzdXJlX2lkJykgfX0gPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD1cIjUwJVwiICpuZ0lmPVwiaXNGb3JtRmllbGRTaG93bigncmVvcmRlciBwb2ludCcpXCI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5SZW9yZGVyIFBvaW50PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiUmVvcmRlciBQb2ludFwiIGZvcm1Db250cm9sTmFtZT1cInJlb3JkZXJfcG9pbnRcIiB0eXBlPVwibnVtYmVyXCIgLz5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNGaWVsZFZhbGlkKCdyZW9yZGVyX3BvaW50JylcIj57eyBnZXRFcnJvck1lc3NhZ2UoJ3Jlb3JkZXJfcG9pbnQnKSB9fSA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBmeExheW91dCBmeExheW91dEdhcD1cIjAuNXJlbVwiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiNTAlXCIgKm5nSWY9XCJpc0Zvcm1GaWVsZFNob3duKCdpbml0aWFsIHF1YW50aXR5JylcIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPkluaXRpYWwgUXVhbnRpdHk8L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJJbml0aWFsIFF1YW50aXR5XCIgZm9ybUNvbnRyb2xOYW1lPVwiaW5pdGlhbF9xdWFudGl0eVwiIC8+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImlzRmllbGRWYWxpZCgnaW5pdGlhbF9xdWFudGl0eScpXCI+e3sgZ2V0RXJyb3JNZXNzYWdlKCdpbml0aWFsX3F1YW50aXR5JykgfX0gPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD1cIjUwJVwiICpuZ0lmPVwiaXNGb3JtRmllbGRTaG93bignaW5pdGlhbCBxdWFudGl0eSBkYXRlJylcIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPkluaXRpYWwgUXVhbnRpdHkgRGF0ZTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJJbml0aWFsUXVhbnRpdHlEYXRlXCIgcGxhY2Vob2xkZXI9XCJJbml0aWFsIFF1YW50aXR5IERhdGVcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiaW5pdGlhbF9xdWFudGl0eV9kYXRlXCIgLz5cbiAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlckluaXRpYWxRdWFudGl0eURhdGVcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlckluaXRpYWxRdWFudGl0eURhdGU+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNGaWVsZFZhbGlkKCdpbml0aWFsX3F1YW50aXR5X2RhdGUnKVwiPnt7IGdldEVycm9yTWVzc2FnZSgnaW5pdGlhbF9xdWFudGl0eV9kYXRlJykgfX1cbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiAqbmdJZj1cImlzRm9ybVNlY3Rpb25TaG93bignc2FsZXMgaW5mb3JtYXRpb24nKVwiPlxuICAgICAgPGgzPjxzdHJvbmc+U2FsZSBJbmZvcm1hdGlvbjwvc3Ryb25nPjwvaDM+XG4gICAgICA8ZGl2IGZ4TGF5b3V0IGZ4TGF5b3V0R2FwPVwiMC41cmVtXCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCI1MCVcIiAqbmdJZj1cImlzRm9ybUZpZWxkU2hvd24oJ3NhbGVzIHByaWNlJylcIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPlNlbGxpbmcgUHJpY2U8L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJTZWxsaW5nIFByaWNlXCIgZm9ybUNvbnRyb2xOYW1lPVwic2FsZV9wcmljZVwiIHJlcXVpcmVkIHR5cGU9XCJudW1iZXJcIiBzdGVwPVwiYW55XCIgLz5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNGaWVsZFZhbGlkKCdzYWxlX3ByaWNlJylcIj57eyBnZXRFcnJvck1lc3NhZ2UoJ3NhbGVfcHJpY2UnKSB9fSA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiNTAlXCIgKm5nSWY9XCJpc0Zvcm1GaWVsZFNob3duKCdjb25kaXRpb24gdHlwZXMnKVwiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+Q29uZGl0aW9uPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGFwcC1zZWFyY2hhYmxlLXNlbGVjdG9yIGFwaVVybD1cImFwaS9jb25kaXRpb24tdHlwZXNcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29uZGl0aW9uX3R5cGVfaWRcIj48L2FwcC1zZWFyY2hhYmxlLXNlbGVjdG9yPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGZ4TGF5b3V0IGZ4TGF5b3V0R2FwPVwiMC41cmVtXCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCI1MCVcIiAqbmdJZj1cImlzRm9ybUZpZWxkU2hvd24oJ21pbmltdW0gcHJpY2UnKVwiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+TWluaW11bSBQcmljZTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIk1pbmltdW0gUHJpY2VcIiBmb3JtQ29udHJvbE5hbWU9XCJtaW5pbXVtX3ByaWNlXCIgcmVxdWlyZWQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICBzdGVwPVwiYW55XCIgLz5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNGaWVsZFZhbGlkKCdtaW5pbXVtX3ByaWNlJylcIj57eyBnZXRFcnJvck1lc3NhZ2UoJ21pbmltdW1fcHJpY2UnKSB9fSA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiNTAlXCIgKm5nSWY9XCJpc0Zvcm1GaWVsZFNob3duKCdtYXhpbXVtIHByaWNlJylcIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPk1heGltdW0gUHJpY2U8L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJNYXhpbXVtIFByaWNlXCIgZm9ybUNvbnRyb2xOYW1lPVwibWF4aW11bV9wcmljZVwiIHR5cGU9XCJudW1iZXJcIiBzdGVwPVwiYW55XCIgLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBmeEZsZXg9XCIxMDAlXCIgZnhMYXlvdXQgZnhMYXlvdXRBbGlnbj1cImVuZFwiIGZ4TGF5b3V0R2FwPVwiMXJlbVwiPlxuICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNXb3JraW5nXCIgbWF0LWJ1dHRvbiBjbGFzcz1cIm10LTJcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNhbmNlbGxlZC5lbWl0KHRydWUpXCI+XG4gICAgICAgIENhbmNlbFxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc1dvcmtpbmdcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cIm10LTJcIiB0eXBlPVwic3VibWl0XCI+U2F2ZTwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZm9ybT4iXX0=
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ludmVudG9yeS1jb21tb24vc3JjL2xpYi9pbnZlbnRvcnktY29tbW9uL3Byb2R1Y3QvcHJvZHVjdC1mb3JtL3Byb2R1Y3QtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZlbnRvcnktY29tbW9uL3NyYy9saWIvaW52ZW50b3J5LWNvbW1vbi9wcm9kdWN0L3Byb2R1Y3QtZm9ybS9wcm9kdWN0LWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBZSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEUsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFHTCw4QkFBOEIsRUFFOUIsK0JBQStCLEVBQ2hDLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBUzNCLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSw4QkFBOEI7SUFtRDVEO0lBQ1c7SUFDQTtJQUNYO0lBQ0E7SUFDRDtJQUNDO0lBQ0E7SUF6REQsbUJBQW1CLEdBQVU7UUFDcEMsTUFBTTtRQUNOLGNBQWM7UUFDZCxLQUFLO1FBQ0wsT0FBTztRQUNQLGFBQWE7UUFDYixpQkFBaUI7UUFDakIsZUFBZTtRQUNmLGtCQUFrQjtRQUNsQix1QkFBdUI7UUFDdkIsYUFBYTtRQUNiLGVBQWU7UUFDZixlQUFlO1FBQ2YsZ0JBQWdCO1FBQ2hCLGlCQUFpQjtLQUNsQixDQUFDO0lBRU8scUJBQXFCLEdBQVU7UUFDdEMsbUJBQW1CO1FBQ25CLHVCQUF1QjtRQUN2QixtQkFBbUI7UUFDbkIsc0JBQXNCO0tBQ3ZCLENBQUM7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U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0IsQ0FBQyxTQUFpQjtRQUNoQyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsa0JBQWtCLENBQUMsV0FBbUI7UUFDcEMsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ25HLENBQUM7d0dBM0xVLG9CQUFvQjs0RkFBcEIsb0JBQW9CLHVMQ2xCakMsdTBQQXFKVzs7NEZEbklFLG9CQUFvQjtrQkFKaEMsU0FBUzsrQkFDRSxrQkFBa0I7c1NBSW5CLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFpQkcscUJBQXFCO3NCQUE3QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7XG4gIEVycm9ySGFuZGxlclNlcnZpY2UsXG4gIEZvcm1WYWxpZGF0b3JTZXJ2aWNlLFxuICBUZWNobGlmeUZvcm1Db21wb25lbnRJbnRlcmZhY2UsXG4gIEZvcm1Db25maWd1cmF0aW9uRm9ybVNlcnZpY2UsXG4gIEZvcm1Db25maWd1cmF0aW9uVXRpbGl0eVNlcnZpY2Vcbn0gZnJvbSAnbmd4LXRlY2hsaWZ5LWNvcmUnO1xuaW1wb3J0IHsgUHJvZHVjdFNlcnZpY2UgfSBmcm9tICcuLi9wcm9kdWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1wcm9kdWN0LWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJvZHVjdC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgUHJvZHVjdEZvcm1Db21wb25lbnQgZXh0ZW5kcyBUZWNobGlmeUZvcm1Db21wb25lbnRJbnRlcmZhY2UgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBkaXNwbGF5ZWRGb3JtRmllbGRzOiBhbnlbXSA9IFtcbiAgICAnbmFtZScsXG4gICAgJ3Byb2R1Y3QgdHlwZScsXG4gICAgJ3NrdScsXG4gICAgJ2NvbG9yJyxcbiAgICAnZGVzY3JpcHRpb24nLFxuICAgICdwcm9kdWN0IG1lYXN1cmUnLFxuICAgICdyZW9yZGVyIHBvaW50JyxcbiAgICAnaW5pdGlhbCBxdWFudGl0eScsXG4gICAgJ2luaXRpYWwgcXVhbnRpdHkgZGF0ZScsXG4gICAgJ3NhbGVzIHByaWNlJyxcbiAgICAnbWluaW11bSBwcmljZScsXG4gICAgJ21heGltdW0gcHJpY2UnLFxuICAgICdpbmNvbWUgYWNjb3VudCcsXG4gICAgJ2V4cGVuc2UgYWNjb3VudCcsXG4gIF07XG5cbiAgQElucHV0KCkgZGlzcGxheWVkRm9ybVNlY3Rpb25zOiBhbnlbXSA9IFtcbiAgICAnYmFzaWMgaW5mb3JtYXRpb24nLFxuICAgICdpbnZlbnRvcnkgaW5mb3JtYXRpb24nLFxuICAgICdzYWxlcyBpbmZvcm1hdGlvbicsXG4gICAgJ2FjY291bnRzIGluZm9ybWF0aW9uJyxcbiAgXTtcblxuICBwcm9kdWN0ID0gc2lnbmFsPGFueT4obnVsbCk7XG4gIGlzRm9ybVNldHVwID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICBvdmVycmlkZSBlcnJvck1lc3NhZ2VzOiBhbnkgPSB7XG4gICAgdHlwZV9pZDoge1xuICAgICAgcmVxdWlyZWQ6ICdQbGVhc2UgRW50ZXIgVHlwZScsXG4gICAgfSxcbiAgICBuYW1lOiB7XG4gICAgICByZXF1aXJlZDogJ1BsZWFzZSBFbnRlciBOYW1lJyxcbiAgICB9LFxuICAgIHNhbGVfcHJpY2U6IHtcbiAgICAgIHJlcXVpcmVkOiAnUGxlYXNlIEVudGVyIFNhbGVzIFByaWNlJyxcbiAgICB9LFxuICAgIG1pbmltdW1fcHJpY2U6IHtcbiAgICAgIHJlcXVpcmVkOiAnUGxlYXNlIEVudGVyIE1pbmltdW0gUHJpY2UnLFxuICAgIH0sXG4gICAgcmVvcmRlcl9wb2ludDoge1xuICAgICAgcmVxdWlyZWQ6ICdQbGVhc2UgRW50ZXIgUmVvcmRlciBQb2ludCcsXG4gICAgfSxcbiAgfTtcblxuICBpc0NyZWF0ZUFub3RoZXIgPSBuZXcgRm9ybUNvbnRyb2woZmFsc2UpO1xuICBzYXZlZENvdW50ID0gMDtcbiAgcHVibGljIGZvcm1Db25maWd1cmF0aW9uVXRpbGl0eVNlcnZpY2U6IEZvcm1Db25maWd1cmF0aW9uVXRpbGl0eVNlcnZpY2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGZvcm1WYWxpZGF0b3JTZXJ2aWNlOiBGb3JtVmFsaWRhdG9yU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc2VydmljZTogUHJvZHVjdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlclNlcnZpY2UsXG4gICAgcHVibGljIGxvY2F0aW9uOiBMb2NhdGlvbixcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgZm9ybUNvbmZpZ1NlcnZpY2U6IEZvcm1Db25maWd1cmF0aW9uRm9ybVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoZm9ybVZhbGlkYXRvclNlcnZpY2UpO1xuXG4gICAgdGhpcy5mb3JtQ29uZmlndXJhdGlvblV0aWxpdHlTZXJ2aWNlID0gbmV3IEZvcm1Db25maWd1cmF0aW9uVXRpbGl0eVNlcnZpY2UoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZm9ybUNvbmZpZ3VyYXRpb25VdGlsaXR5U2VydmljZVxuICAgICAgLmluaXRpYWxpemUodGhpcy5mb3JtQ29uZmlnU2VydmljZSwgJ3Byb2R1Y3QnLClcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgICAgaWQ6IFsnJ10sXG4gICAgICAgICAgICB0eXBlX2lkOiBbMSwgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSldLFxuICAgICAgICAgICAgY29sb3JfaWQ6IFsnJ10sXG4gICAgICAgICAgICBza3U6IFsnJ10sXG4gICAgICAgICAgICBuYW1lOiBbJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXSxcbiAgICAgICAgICAgIGluaXRpYWxfcXVhbnRpdHk6IFswXSxcbiAgICAgICAgICAgIGluaXRpYWxfcXVhbnRpdHlfZGF0ZTogW21vbWVudCgpLmZvcm1hdCgpXSxcbiAgICAgICAgICAgIHJlb3JkZXJfcG9pbnQ6IFsxMCwgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSldLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFsnJ10sXG4gICAgICAgICAgICBzYWxlX3ByaWNlOiBbMCwgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSldLFxuICAgICAgICAgICAgaW5jb21lX2FjY291bnRfaWQ6IFsnJ10sXG4gICAgICAgICAgICBleHBlbnNlX2FjY291bnRfaWQ6IFsnJ10sXG4gICAgICAgICAgICBtZWFzdXJlX2lkOiBbMV0sXG4gICAgICAgICAgICBtaW5pbXVtX3ByaWNlOiBbJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXSxcbiAgICAgICAgICAgIG1heGltdW1fcHJpY2U6IFsnJ10sXG4gICAgICAgICAgICBjb25kaXRpb25fdHlwZV9pZDogWzFdLFxuICAgICAgICAgICAgY3VycmVudF9xdWFudGl0eTogW10sXG4gICAgICAgICAgICBjYXRlZ29yeV9pZHM6IFsnJ10sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgfSwgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzRm9ybVNldHVwLnNldCh0cnVlKTtcbiAgICAgICAgICB0aGlzLmxvYWRQcm9kdWN0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG5cblxuICB9XG5cbiAgbG9hZFByb2R1Y3QoKSB7XG4gICAgbGV0IGlkID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2lkJ107XG4gICAgaWYgKCFpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmlzV29ya2luZyA9IHRydWU7XG5cbiAgICB0aGlzLnNlcnZpY2U/LnNob3coaWQsIHtcbiAgICAgIHdpdGg6ICdtZWFzdXJlLGNhdGVnb3JpZXMnLFxuICAgIH0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnByb2R1Y3Quc2V0KHJlc3BvbnNlPy5pdGVtKTtcbiAgICAgICAgdGhpcy5pc1dvcmtpbmcgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5pc1dvcmtpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgfSxcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgIHRoaXMucGF0Y2hQcm9kdWN0KCk7XG4gICAgICAgIHRoaXMuaXNXb3JraW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHBhdGNoUHJvZHVjdCgpIHtcbiAgICB0aGlzLmlzVXBkYXRlID0gdHJ1ZTtcbiAgICBsZXQgZGF0YSA9IHsgLi4udGhpcy5wcm9kdWN0KCkgfTtcblxuICAgIGlmICh0aGlzLnByb2R1Y3QoKT8uY2F0ZWdvcmllcz8ubGVuZ3RoID4gMCkge1xuICAgICAgKGRhdGEpLmNhdGVnb3J5X2lkcyA9ICh0aGlzLnByb2R1Y3QoKS5jYXRlZ29yaWVzIGFzIFtdKS5tYXAoKGNhdGVnb3J5OiBhbnkpID0+IGNhdGVnb3J5Py5pZCk7XG4gICAgfVxuICAgIGlmIChkYXRhPy5pbml0aWFsX3F1YW50aXR5X2RhdGUpIHtcbiAgICAgIGRhdGEuaW5pdGlhbF9xdWFudGl0eV9kYXRlID0gbW9tZW50KGRhdGEuaW5pdGlhbF9xdWFudGl0eV9kYXRlKS50b0lTT1N0cmluZygpO1xuICAgIH1cbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShkYXRhKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoKSB7XG4gICAgdGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICBpZiAodGhpcy5mb3JtLmludmFsaWQpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZEFsZXJ0KCdQbGVhc2UgRmlsbCBBbGwgUmVxdWlyZWQgRmllbGRzJywgJ3dhcm4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHByb2R1Y3QgPSB0aGlzLmZvcm0udmFsdWU7XG4gICAgaWYgKHByb2R1Y3QubWF4aW11bV9wcmljZSA8PSAwIHx8ICFwcm9kdWN0Lm1heGltdW1fcHJpY2UpIHtcbiAgICAgIHByb2R1Y3QubWF4aW11bV9wcmljZSA9IHByb2R1Y3QubWluaW11bV9wcmljZTtcbiAgICB9XG5cbiAgICBpZiAocHJvZHVjdD8uaW5pdGlhbF9xdWFudGl0eV9kYXRlKSB7XG4gICAgICBwcm9kdWN0LmluaXRpYWxfcXVhbnRpdHlfZGF0ZSA9IG1vbWVudChwcm9kdWN0LmluaXRpYWxfcXVhbnRpdHlfZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gICAgfVxuICAgIHRoaXMuaXNXb3JraW5nID0gdHJ1ZTtcblxuICAgIGxldCBwcm9taXNlID0gcHJvZHVjdC5pZFxuICAgICAgPyB0aGlzLnNlcnZpY2UudXBkYXRlKHByb2R1Y3QpXG4gICAgICA6IHRoaXMuc2VydmljZS5zdG9yZShwcm9kdWN0KTtcblxuICAgIHByb21pc2Uuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5pc1dvcmtpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkQWxlcnQoJ1Byb2R1Y3Qgc2F2ZWQgc3VjY2Vzc2Z1bGx5IScsICdzdWNjZXNzJyk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+ICh0aGlzLmlzV29ya2luZyA9IGZhbHNlKSxcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzQ3JlYXRlQW5vdGhlci52YWx1ZSAmJiAhdGhpcy5pc1VwZGF0ZSkge1xuICAgICAgICAgIHRoaXMuc2F2ZWRDb3VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2ludmVudG9yeS9wcm9kdWN0cyddKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBkaXNwbGF5ZWQgRm9ybSBGaWVsZHMgYXJyYXkgZm9yIGZvcm0gZmllbGQgYW5kIHJldHVybnMgYm9vbGVhbiByZXN1bHRcbiAgICovXG4gIGlzRm9ybUZpZWxkU2hvd24oZmllbGROYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWRGb3JtRmllbGRzLmxlbmd0aCA+IDAgJiYgdGhpcy5kaXNwbGF5ZWRGb3JtRmllbGRzLmluY2x1ZGVzKGZpZWxkTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGRpc3BsYXllZCBGb3JtIFNlY3Rpb24gYXJyYXkgZm9yIGZvcm0gc2VjdGlvbiBhbmQgcmV0dXJucyBib29sZWFuIHJlc3VsdFxuICAgKi9cbiAgaXNGb3JtU2VjdGlvblNob3duKHNlY3Rpb25OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWRGb3JtU2VjdGlvbnMubGVuZ3RoID4gMCAmJiB0aGlzLmRpc3BsYXllZEZvcm1TZWN0aW9ucy5pbmNsdWRlcyhzZWN0aW9uTmFtZSk7XG4gIH1cbn1cbiIsIjxtYXQtY2FyZCBjbGFzcz0nY29udGFpbmVyJz5cbiAgQGlmIChpc0Zvcm1TZXR1cCgpKSB7XG4gIDxtYXQtY2FyZC1jb250ZW50PlxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChzdWJtaXQpPVwic2F2ZSgpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgIDxoMyBjbGFzcz1cInRleHQtY2VudGVyIG0tMFwiPlByb2R1Y3QgRm9ybTwvaDM+XG4gICAgICAgIDxpIHJvbGU9J2J1dHRvbicgY2xhc3M9XCJmYS1zb2xpZCBmYS1nZWFyXCIgcm91dGVyTGluaz1cIi9mb3JtLWNvbmZpZ3VyYXRpb24tZmllbGQtZm9ybS9wcm9kdWN0XCI+PC9pPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIiAqbmdJZj1cImlzRm9ybVNlY3Rpb25TaG93bignYmFzaWMgaW5mb3JtYXRpb24nKVwiPlxuICAgICAgICAgIDxoMz48c3Ryb25nPkJhc2ljIEluZm9ybWF0aW9uPC9zdHJvbmc+PC9oMz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XG5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInctNTBcIiAqbmdJZj1cImlzRm9ybUZpZWxkU2hvd24oJ25hbWUnKVwiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPk5hbWU8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiTmFtZVwiIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIiByZXF1aXJlZCAvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNGaWVsZFZhbGlkKCduYW1lJylcIj57eyBnZXRFcnJvck1lc3NhZ2UoJ25hbWUnKSB9fSA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInctNTBcIiAqbmdJZj1cImlzRm9ybUZpZWxkU2hvd24oJ3Byb2R1Y3QgdHlwZScpXCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+UHJvZHVjdCBUeXBlPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxhcHAtc2VhcmNoYWJsZS1zZWxlY3RvciBhcGlVcmw9XCJhcGkvcHJvZHVjdC10eXBlc1wiIGZvcm1Db250cm9sTmFtZT1cInR5cGVfaWRcIj4gPC9hcHAtc2VhcmNoYWJsZS1zZWxlY3Rvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImlzRmllbGRWYWxpZCgndHlwZV9pZCcpXCI+e3sgZ2V0RXJyb3JNZXNzYWdlKCd0eXBlX2lkJykgfX0gPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidy01MFwiICpuZ0lmPVwiaXNGb3JtRmllbGRTaG93bignc2t1JylcIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5TS1U8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiU0tVXCIgZm9ybUNvbnRyb2xOYW1lPVwic2t1XCIgLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImlzRmllbGRWYWxpZCgnc2t1JylcIj57eyBnZXRFcnJvck1lc3NhZ2UoJ3NrdScpIH19IDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidy01MFwiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPkNhdGVnb3J5PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxhcHAtc2VhcmNoYWJsZS1zZWxlY3RvciBhcGlVcmw9XCJhcGkvcHJvZHVjdC1jYXRlZ29yaWVzXCIgZm9ybUNvbnRyb2xOYW1lPVwiY2F0ZWdvcnlfaWRzXCIgW211bHRpcGxlXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgPC9hcHAtc2VhcmNoYWJsZS1zZWxlY3Rvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImlzRmllbGRWYWxpZCgnY2F0ZWdvcnlfaWRzJylcIj5cbiAgICAgICAgICAgICAgICB7eyBnZXRFcnJvck1lc3NhZ2UoJ2NhdGVnb3J5X2lkcycpIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInctNTAgYWxpZ24tc2VsZi1zdGFydFwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiaXNGb3JtRmllbGRTaG93bignY29sb3InKSAmJiBmb3JtQ29uZmlndXJhdGlvblV0aWxpdHlTZXJ2aWNlLmdldEZpZWxkRW5hYmxlZCgnY29sb3JfaWQnKVwiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPkNvbG9yPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxhcHAtc2VhcmNoYWJsZS1zZWxlY3RvciBhcGlVcmw9XCJhcGkvYXR0cmlidXRlcz90eXBlX2NvZGU9Y29sb3JcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvbG9yX2lkXCI+PC9hcHAtc2VhcmNoYWJsZS1zZWxlY3Rvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInctNTBcIiAqbmdJZj1cImlzRm9ybUZpZWxkU2hvd24oJ2Rlc2NyaXB0aW9uJylcIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5EZXNjcmlwdGlvbjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJEZXNjcmlwdGlvblwiIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIiAqbmdJZj1cImlzRm9ybVNlY3Rpb25TaG93bignaW52ZW50b3J5IGluZm9ybWF0aW9uJylcIj5cbiAgICAgICAgICA8aDM+PHN0cm9uZz5JbnZlbnRvcnkgSW5mb3JtYXRpb248L3N0cm9uZz48L2gzPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTJcIj5cblxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidy01MFwiICpuZ0lmPVwiaXNGb3JtRmllbGRTaG93bigncHJvZHVjdCBtZWFzdXJlJylcIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5NZWFzdXJlPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxhcHAtc2VhcmNoYWJsZS1zZWxlY3RvciBhcGlVcmw9XCJhcGkvcHJvZHVjdC1tZWFzdXJlc1wiIGZvcm1Db250cm9sTmFtZT1cIm1lYXN1cmVfaWRcIj5cbiAgICAgICAgICAgICAgPC9hcHAtc2VhcmNoYWJsZS1zZWxlY3Rvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImlzRmllbGRWYWxpZCgnbWVhc3VyZV9pZCcpXCI+e3sgZ2V0RXJyb3JNZXNzYWdlKCdtZWFzdXJlX2lkJykgfX0gPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ3LTUwXCIgKm5nSWY9XCJpc0Zvcm1GaWVsZFNob3duKCdyZW9yZGVyIHBvaW50JylcIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5SZW9yZGVyIFBvaW50PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlJlb3JkZXIgUG9pbnRcIiBmb3JtQ29udHJvbE5hbWU9XCJyZW9yZGVyX3BvaW50XCIgdHlwZT1cIm51bWJlclwiIC8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJpc0ZpZWxkVmFsaWQoJ3Jlb3JkZXJfcG9pbnQnKVwiPnt7IGdldEVycm9yTWVzc2FnZSgncmVvcmRlcl9wb2ludCcpIH19IDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ3LTUwXCIgKm5nSWY9XCJpc0Zvcm1GaWVsZFNob3duKCdpbml0aWFsIHF1YW50aXR5JylcIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Jbml0aWFsIFF1YW50aXR5PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIkluaXRpYWwgUXVhbnRpdHlcIiBmb3JtQ29udHJvbE5hbWU9XCJpbml0aWFsX3F1YW50aXR5XCIgLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImlzRmllbGRWYWxpZCgnaW5pdGlhbF9xdWFudGl0eScpXCI+e3sgZ2V0RXJyb3JNZXNzYWdlKCdpbml0aWFsX3F1YW50aXR5JykgfX0gPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ3LTUwXCIgKm5nSWY9XCJpc0Zvcm1GaWVsZFNob3duKCdpbml0aWFsIHF1YW50aXR5IGRhdGUnKVwiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPkluaXRpYWwgUXVhbnRpdHkgRGF0ZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW21hdERhdGVwaWNrZXJdPVwicGlja2VySW5pdGlhbFF1YW50aXR5RGF0ZVwiIHBsYWNlaG9sZGVyPVwiSW5pdGlhbCBRdWFudGl0eSBEYXRlXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpbml0aWFsX3F1YW50aXR5X2RhdGVcIiAvPlxuICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlckluaXRpYWxRdWFudGl0eURhdGVcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXJJbml0aWFsUXVhbnRpdHlEYXRlPjwvbWF0LWRhdGVwaWNrZXI+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJpc0ZpZWxkVmFsaWQoJ2luaXRpYWxfcXVhbnRpdHlfZGF0ZScpXCI+e3sgZ2V0RXJyb3JNZXNzYWdlKCdpbml0aWFsX3F1YW50aXR5X2RhdGUnKSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uXCIgKm5nSWY9XCJpc0Zvcm1TZWN0aW9uU2hvd24oJ3NhbGVzIGluZm9ybWF0aW9uJylcIj5cbiAgICAgICAgICA8aDM+PHN0cm9uZz5TYWxlIEluZm9ybWF0aW9uPC9zdHJvbmc+PC9oMz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ3LTUwXCIgKm5nSWY9XCJpc0Zvcm1GaWVsZFNob3duKCdzYWxlcyBwcmljZScpXCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+U2VsbGluZyBQcmljZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJTZWxsaW5nIFByaWNlXCIgZm9ybUNvbnRyb2xOYW1lPVwic2FsZV9wcmljZVwiIHJlcXVpcmVkIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgIHN0ZXA9XCJhbnlcIiAvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNGaWVsZFZhbGlkKCdzYWxlX3ByaWNlJylcIj57eyBnZXRFcnJvck1lc3NhZ2UoJ3NhbGVfcHJpY2UnKSB9fSA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInctNTBcIiAqbmdJZj1cImlzRm9ybUZpZWxkU2hvd24oJ2NvbmRpdGlvbiB0eXBlcycpXCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+Q29uZGl0aW9uPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxhcHAtc2VhcmNoYWJsZS1zZWxlY3RvciBhcGlVcmw9XCJhcGkvY29uZGl0aW9uLXR5cGVzXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjb25kaXRpb25fdHlwZV9pZFwiPjwvYXBwLXNlYXJjaGFibGUtc2VsZWN0b3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInctNTBcIiAqbmdJZj1cImlzRm9ybUZpZWxkU2hvd24oJ21pbmltdW0gcHJpY2UnKVwiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPk1pbmltdW0gUHJpY2U8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiTWluaW11bSBQcmljZVwiIGZvcm1Db250cm9sTmFtZT1cIm1pbmltdW1fcHJpY2VcIiByZXF1aXJlZCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICBzdGVwPVwiYW55XCIgLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImlzRmllbGRWYWxpZCgnbWluaW11bV9wcmljZScpXCI+e3sgZ2V0RXJyb3JNZXNzYWdlKCdtaW5pbXVtX3ByaWNlJykgfX0gPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ3LTUwXCIgKm5nSWY9XCJpc0Zvcm1GaWVsZFNob3duKCdtYXhpbXVtIHByaWNlJylcIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5NYXhpbXVtIFByaWNlPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIk1heGltdW0gUHJpY2VcIiBmb3JtQ29udHJvbE5hbWU9XCJtYXhpbXVtX3ByaWNlXCIgdHlwZT1cIm51bWJlclwiIHN0ZXA9XCJhbnlcIiAvPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgIEBpZiAoIWlzVXBkYXRlKSB7XG4gICAgICAgICAgPG1hdC1jaGVja2JveCBbZm9ybUNvbnRyb2xdPVwiaXNDcmVhdGVBbm90aGVyXCI+Q3JlYXRlIEFub3RoZXJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2F2ZWRDb3VudCA+IDBcIj4oe3sgc2F2ZWRDb3VudCB9fSBpdGVtcyBzYXZlZCk8L3NwYW4+XG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9J2QtZmxleCBmbGV4LWdyb3cnPjwvc3Bhbj5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93IGdhcC0zIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc1dvcmtpbmdcIiBtYXQtYnV0dG9uIGNsYXNzPVwibXQtMlwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwibG9jYXRpb24uYmFjaygpXCI+XG4gICAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc1dvcmtpbmdcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cIm10LTJcIiB0eXBlPVwic3VibWl0XCI+U2F2ZTwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9ybT5cbiAgPC9tYXQtY2FyZC1jb250ZW50PlxuICB9IEBlbHNlIHtcbiAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJkLWZsZXggdmgtMTAwIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgPG1hdC1zcGlubmVyPjwvbWF0LXNwaW5uZXI+XG4gIDwvbWF0LWNhcmQtY29udGVudD5cbiAgfVxuPC9tYXQtY2FyZD4iXX0=
|
package/esm2022/lib/inventory-common/product/product-form-button/product-form-button.component.mjs
CHANGED
|
@@ -1,40 +1,15 @@
|
|
|
1
|
-
import { Component,
|
|
1
|
+
import { Component, input } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "@angular/
|
|
4
|
-
import * as i2 from "
|
|
5
|
-
import * as i3 from "ngx-techlify-core";
|
|
6
|
-
import * as i4 from "../product-form/product-form.component";
|
|
3
|
+
import * as i1 from "@angular/router";
|
|
4
|
+
import * as i2 from "ngx-techlify-core";
|
|
7
5
|
export class ProductFormButtonComponent {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
constructor(matDialog, productFormService) {
|
|
13
|
-
this.matDialog = matDialog;
|
|
14
|
-
this.productFormService = productFormService;
|
|
15
|
-
}
|
|
16
|
-
showForm(templateRef) {
|
|
17
|
-
this.matDialog.open(templateRef, { width: '600px' });
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Handle on product saved event.
|
|
21
|
-
*
|
|
22
|
-
* @param product
|
|
23
|
-
*/
|
|
24
|
-
onProductSaved(product) {
|
|
25
|
-
this.saved.emit(product);
|
|
26
|
-
this.matDialog?.closeAll();
|
|
27
|
-
this.productFormService.listUpdated(true);
|
|
28
|
-
}
|
|
29
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProductFormButtonComponent, deps: [{ token: i1.MatDialog }, { token: i2.ProductFormService }], target: i0.ɵɵFactoryTarget.Component });
|
|
30
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ProductFormButtonComponent, selector: "app-product-form-button", inputs: { product: "product" }, outputs: { saved: "saved" }, ngImport: i0, template: "<app-techlify-icon name='edit' [class.text-secondary]=\"product\" (click)=\"showForm(addProductForm)\"></app-techlify-icon>\n\n<ng-template #addProductForm>\n <app-product-form\n [product]=\"product\"\n mat-dialog-content\n (saved)=\"onProductSaved($event)\"\n (cancelled)=\"matDialog.closeAll()\"\n ></app-product-form>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i3.TechlifyIconComponent, selector: "app-techlify-icon", inputs: ["name", "size"] }, { kind: "component", type: i4.ProductFormComponent, selector: "app-product-form", inputs: ["product", "displayedFormFields", "displayedFormSections"], outputs: ["saved", "cancelled"] }], preserveWhitespaces: true });
|
|
6
|
+
product = input(undefined);
|
|
7
|
+
constructor() { }
|
|
8
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProductFormButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ProductFormButtonComponent, selector: "app-product-form-button", inputs: { product: { classPropertyName: "product", publicName: "product", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (product()) {\n<app-techlify-icon role='button' name='edit' [routerLink]=\"['/inventory/products/form', product().id]\"></app-techlify-icon>\n} @else {\n<app-techlify-icon role='button' name='add' routerLink=\"form\"></app-techlify-icon>\n}", styles: [""], dependencies: [{ kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i2.TechlifyIconComponent, selector: "app-techlify-icon", inputs: ["name", "size"] }], preserveWhitespaces: true });
|
|
31
10
|
}
|
|
32
11
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProductFormButtonComponent, decorators: [{
|
|
33
12
|
type: Component,
|
|
34
|
-
args: [{ selector: 'app-product-form-button', template: "<app-techlify-icon name='edit' [
|
|
35
|
-
}], ctorParameters: () => [
|
|
36
|
-
|
|
37
|
-
}], saved: [{
|
|
38
|
-
type: Output
|
|
39
|
-
}] } });
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1mb3JtLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZlbnRvcnktY29tbW9uL3NyYy9saWIvaW52ZW50b3J5LWNvbW1vbi9wcm9kdWN0L3Byb2R1Y3QtZm9ybS1idXR0b24vcHJvZHVjdC1mb3JtLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZlbnRvcnktY29tbW9uL3NyYy9saWIvaW52ZW50b3J5LWNvbW1vbi9wcm9kdWN0L3Byb2R1Y3QtZm9ybS1idXR0b24vcHJvZHVjdC1mb3JtLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFlLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFTcEYsTUFBTSxPQUFPLDBCQUEwQjtJQUlsQjtJQUE4QjtJQUh4QyxPQUFPLENBQU07SUFDWixLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUVyQyxZQUFtQixTQUFvQixFQUFVLGtCQUFzQztRQUFwRSxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQVUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtJQUFHLENBQUM7SUFFM0YsUUFBUSxDQUFDLFdBQTZCO1FBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsY0FBYyxDQUFDLE9BQVk7UUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVDLENBQUM7d0dBbkJVLDBCQUEwQjs0RkFBMUIsMEJBQTBCLDRIQ1R2QyxrV0FVQTs7NEZERGEsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLHlCQUF5QjsrR0FLMUIsT0FBTztzQkFBZixLQUFLO2dCQUNJLEtBQUs7c0JBQWQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IFByb2R1Y3RGb3JtU2VydmljZSB9IGZyb20gJy4uL3Byb2R1Y3QtZm9ybS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXByb2R1Y3QtZm9ybS1idXR0b24nLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJvZHVjdC1mb3JtLWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Byb2R1Y3QtZm9ybS1idXR0b24uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUHJvZHVjdEZvcm1CdXR0b25Db21wb25lbnQge1xuICBASW5wdXQoKSBwcm9kdWN0OiBhbnk7XG4gIEBPdXRwdXQoKSBzYXZlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgbWF0RGlhbG9nOiBNYXREaWFsb2csIHByaXZhdGUgcHJvZHVjdEZvcm1TZXJ2aWNlOiBQcm9kdWN0Rm9ybVNlcnZpY2UpIHt9XG5cbiAgc2hvd0Zvcm0odGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICB0aGlzLm1hdERpYWxvZy5vcGVuKHRlbXBsYXRlUmVmLCB7IHdpZHRoOiAnNjAwcHgnIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBvbiBwcm9kdWN0IHNhdmVkIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcHJvZHVjdFxuICAgKi9cbiAgb25Qcm9kdWN0U2F2ZWQocHJvZHVjdDogYW55KSB7XG4gICAgdGhpcy5zYXZlZC5lbWl0KHByb2R1Y3QpO1xuICAgIHRoaXMubWF0RGlhbG9nPy5jbG9zZUFsbCgpO1xuICAgIHRoaXMucHJvZHVjdEZvcm1TZXJ2aWNlLmxpc3RVcGRhdGVkKHRydWUpO1xuICB9XG59XG4iLCI8YXBwLXRlY2hsaWZ5LWljb24gbmFtZT0nZWRpdCcgW2NsYXNzLnRleHQtc2Vjb25kYXJ5XT1cInByb2R1Y3RcIiAoY2xpY2spPVwic2hvd0Zvcm0oYWRkUHJvZHVjdEZvcm0pXCI+PC9hcHAtdGVjaGxpZnktaWNvbj5cblxuPG5nLXRlbXBsYXRlICNhZGRQcm9kdWN0Rm9ybT5cbiAgPGFwcC1wcm9kdWN0LWZvcm1cbiAgICBbcHJvZHVjdF09XCJwcm9kdWN0XCJcbiAgICBtYXQtZGlhbG9nLWNvbnRlbnRcbiAgICAoc2F2ZWQpPVwib25Qcm9kdWN0U2F2ZWQoJGV2ZW50KVwiXG4gICAgKGNhbmNlbGxlZCk9XCJtYXREaWFsb2cuY2xvc2VBbGwoKVwiXG4gID48L2FwcC1wcm9kdWN0LWZvcm0+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
13
|
+
args: [{ selector: 'app-product-form-button', template: "@if (product()) {\n<app-techlify-icon role='button' name='edit' [routerLink]=\"['/inventory/products/form', product().id]\"></app-techlify-icon>\n} @else {\n<app-techlify-icon role='button' name='add' routerLink=\"form\"></app-techlify-icon>\n}" }]
|
|
14
|
+
}], ctorParameters: () => [] });
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1mb3JtLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZlbnRvcnktY29tbW9uL3NyYy9saWIvaW52ZW50b3J5LWNvbW1vbi9wcm9kdWN0L3Byb2R1Y3QtZm9ybS1idXR0b24vcHJvZHVjdC1mb3JtLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZlbnRvcnktY29tbW9uL3NyYy9saWIvaW52ZW50b3J5LWNvbW1vbi9wcm9kdWN0L3Byb2R1Y3QtZm9ybS1idXR0b24vcHJvZHVjdC1mb3JtLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQU9qRCxNQUFNLE9BQU8sMEJBQTBCO0lBQ3JDLE9BQU8sR0FBRyxLQUFLLENBQWtCLFNBQVMsQ0FBQyxDQUFDO0lBRTVDLGdCQUFnQixDQUFDO3dHQUhOLDBCQUEwQjs0RkFBMUIsMEJBQTBCLHlNQ1B2QyxzUEFJQzs7NEZER1ksMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXByb2R1Y3QtZm9ybS1idXR0b24nLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJvZHVjdC1mb3JtLWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Byb2R1Y3QtZm9ybS1idXR0b24uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUHJvZHVjdEZvcm1CdXR0b25Db21wb25lbnQge1xuICBwcm9kdWN0ID0gaW5wdXQ8YW55IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG59XG4iLCJAaWYgKHByb2R1Y3QoKSkge1xuPGFwcC10ZWNobGlmeS1pY29uIHJvbGU9J2J1dHRvbicgbmFtZT0nZWRpdCcgW3JvdXRlckxpbmtdPVwiWycvaW52ZW50b3J5L3Byb2R1Y3RzL2Zvcm0nLCBwcm9kdWN0KCkuaWRdXCI+PC9hcHAtdGVjaGxpZnktaWNvbj5cbn0gQGVsc2Uge1xuPGFwcC10ZWNobGlmeS1pY29uIHJvbGU9J2J1dHRvbicgbmFtZT0nYWRkJyByb3V0ZXJMaW5rPVwiZm9ybVwiPjwvYXBwLXRlY2hsaWZ5LWljb24+XG59Il19
|