techlify-inventory-common 18.0.1
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/README.md +24 -0
- package/esm2022/lib/inventory-common/category/category-form/category-form.component.mjs +77 -0
- package/esm2022/lib/inventory-common/category/category-form-button/category-form-button.component.mjs +32 -0
- package/esm2022/lib/inventory-common/category/category-list-page/category-list-page.component.mjs +68 -0
- package/esm2022/lib/inventory-common/category/category-routing.module.mjs +24 -0
- package/esm2022/lib/inventory-common/category/category.module.mjs +63 -0
- package/esm2022/lib/inventory-common/category/category.service.mjs +18 -0
- package/esm2022/lib/inventory-common/inventory-common-routing.module.mjs +53 -0
- package/esm2022/lib/inventory-common/inventory-common.module.mjs +39 -0
- package/esm2022/lib/inventory-common/inventory-dashboard-page/inventory-dashboard-page.component.mjs +42 -0
- package/esm2022/lib/inventory-common/material.module.mjs +172 -0
- package/esm2022/lib/inventory-common/measure/measure-delete/measure-delete-button/measure-delete-button.component.mjs +44 -0
- package/esm2022/lib/inventory-common/measure/measure-delete/measure-delete.module.mjs +19 -0
- package/esm2022/lib/inventory-common/measure/measure-form/measure-form/measure-form.component.mjs +80 -0
- package/esm2022/lib/inventory-common/measure/measure-form/measure-form-button/measure-form-button.component.mjs +30 -0
- package/esm2022/lib/inventory-common/measure/measure-form/measure-form.module.mjs +21 -0
- package/esm2022/lib/inventory-common/measure/measure-routing.module.mjs +24 -0
- package/esm2022/lib/inventory-common/measure/measure.module.mjs +47 -0
- package/esm2022/lib/inventory-common/measure/measure.service.mjs +18 -0
- package/esm2022/lib/inventory-common/measure/measures-list/measures-list.component.mjs +71 -0
- package/esm2022/lib/inventory-common/product/low-stock-products-widget/low-stock-products-widget.component.mjs +45 -0
- package/esm2022/lib/inventory-common/product/low-stock-products-widget/low-stock-products-widget.module.mjs +36 -0
- package/esm2022/lib/inventory-common/product/product-basic-info/product-basic-info.component.mjs +54 -0
- package/esm2022/lib/inventory-common/product/product-delete-button/product-delete-button.component.mjs +54 -0
- package/esm2022/lib/inventory-common/product/product-form/product-form.component.mjs +180 -0
- package/esm2022/lib/inventory-common/product/product-form-button/product-form-button.component.mjs +40 -0
- package/esm2022/lib/inventory-common/product/product-form.service.mjs +17 -0
- package/esm2022/lib/inventory-common/product/product-import-page/product-import-page.component.mjs +66 -0
- package/esm2022/lib/inventory-common/product/product-list/product-list.component.mjs +189 -0
- package/esm2022/lib/inventory-common/product/product-measure-form/product-measure-form.component.mjs +101 -0
- package/esm2022/lib/inventory-common/product/product-measures-list/product-measures-list.component.mjs +151 -0
- package/esm2022/lib/inventory-common/product/product-nav-bar/product-nav-bar.component.mjs +12 -0
- package/esm2022/lib/inventory-common/product/product-routing.module.mjs +57 -0
- package/esm2022/lib/inventory-common/product/product-summary-chart/product-summary-chart.component.mjs +63 -0
- package/esm2022/lib/inventory-common/product/product-summary-chart/product-summary-chart.module.mjs +29 -0
- package/esm2022/lib/inventory-common/product/product-tax/product-tax-delete-button/product-tax-delete-button.component.mjs +54 -0
- package/esm2022/lib/inventory-common/product/product-tax/product-tax-form-button/product-tax-form-button.component.mjs +77 -0
- package/esm2022/lib/inventory-common/product/product-tax/product-tax-list/product-tax-list.component.mjs +35 -0
- package/esm2022/lib/inventory-common/product/product-tax/product-tax.module.mjs +39 -0
- package/esm2022/lib/inventory-common/product/product-tax/product-tax.service.mjs +18 -0
- package/esm2022/lib/inventory-common/product/product-view-page/product-view-page.component.mjs +68 -0
- package/esm2022/lib/inventory-common/product/product.module.mjs +111 -0
- package/esm2022/lib/inventory-common/product/product.service.mjs +49 -0
- package/esm2022/lib/inventory-common/services/techlify-form-service.mjs +11 -0
- package/esm2022/lib/inventory-common/stock-issuances/stock-issuance-delete-button/stock-issuance-delete-button.component.mjs +47 -0
- package/esm2022/lib/inventory-common/stock-issuances/stock-issuance-delete-button/stock-issuance-delete-button.module.mjs +19 -0
- package/esm2022/lib/inventory-common/stock-issuances/stock-issuance.service.mjs +18 -0
- package/esm2022/lib/inventory-common/stock-issuances/stock-issuances-list/stock-issuances-list.component.mjs +126 -0
- package/esm2022/lib/inventory-common/stock-issuances/stock-issuances-list/stock-issuances-list.module.mjs +48 -0
- package/esm2022/lib/inventory-common/stock-issuances/stock-issuances-routing.module.mjs +24 -0
- package/esm2022/lib/inventory-common/stock-issuances/stock-issuances.module.mjs +67 -0
- package/esm2022/lib/inventory-common/stock-issuances/stock-issue-form/stock-issue-form/stock-issue-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 +44 -0
- package/esm2022/lib/inventory-common/stock-issuances/stock-issue-form/stock-issue-form.module.mjs +53 -0
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-delete-button/stock-receipt-delete-button.component.mjs +47 -0
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form/stock-receipt-form.component.mjs +125 -0
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form-button/stock-receipt-form-button.component.mjs +38 -0
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form.module.mjs +53 -0
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt.service.mjs +18 -0
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipts-list-page/stock-receipts-list-page.component.mjs +119 -0
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipts-routing.module.mjs +24 -0
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipts.module.mjs +75 -0
- package/esm2022/lib/inventory-common/stock-summary.service.mjs +26 -0
- package/esm2022/lib/inventory-common/supplier/payee-selector/payee-selector/payee-selector.component.mjs +59 -0
- package/esm2022/lib/inventory-common/supplier/payee-selector/payee-selector.module.mjs +35 -0
- package/esm2022/lib/inventory-common/supplier/supplier-form/supplier-form.component.mjs +118 -0
- package/esm2022/lib/inventory-common/supplier/supplier-form/supplier-form.service.mjs +17 -0
- package/esm2022/lib/inventory-common/supplier/supplier-information/supplier-information.component.mjs +72 -0
- package/esm2022/lib/inventory-common/supplier/supplier-routing.module.mjs +40 -0
- package/esm2022/lib/inventory-common/supplier/supplier-type.service.mjs +25 -0
- package/esm2022/lib/inventory-common/supplier/supplier-view/supplier-view.component.mjs +66 -0
- package/esm2022/lib/inventory-common/supplier/supplier.component.mjs +20 -0
- package/esm2022/lib/inventory-common/supplier/supplier.module.mjs +63 -0
- package/esm2022/lib/inventory-common/supplier/supplier.service.mjs +61 -0
- package/esm2022/lib/inventory-common/supplier/suppliers-list/suppliers-list.component.mjs +241 -0
- package/esm2022/lib/inventory-common/techlify-filter/techlify-filter.component.mjs +118 -0
- package/esm2022/lib/inventory-common/techlify-filter/techlify-filter.module.mjs +38 -0
- package/esm2022/public-api.mjs +9 -0
- package/esm2022/techlify-inventory-common.mjs +5 -0
- package/fesm2022/techlify-inventory-common-category.module-Stn6e73V.mjs +257 -0
- package/fesm2022/techlify-inventory-common-category.module-Stn6e73V.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-measure.module-CirswKXn.mjs +313 -0
- package/fesm2022/techlify-inventory-common-measure.module-CirswKXn.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-product.module-qdeafFV5.mjs +1172 -0
- package/fesm2022/techlify-inventory-common-product.module-qdeafFV5.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-stock-issuances-list.module-CyFDxARk.mjs +436 -0
- package/fesm2022/techlify-inventory-common-stock-issuances-list.module-CyFDxARk.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-stock-issuances.module-Dm9i2kcf.mjs +89 -0
- package/fesm2022/techlify-inventory-common-stock-issuances.module-Dm9i2kcf.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-stock-receipt-form.module-BZDrN7la.mjs +302 -0
- package/fesm2022/techlify-inventory-common-stock-receipt-form.module-BZDrN7la.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-stock-receipts.module-CUPdWteR.mjs +253 -0
- package/fesm2022/techlify-inventory-common-stock-receipts.module-CUPdWteR.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-supplier-form.component-CHmMG7O8.mjs +178 -0
- package/fesm2022/techlify-inventory-common-supplier-form.component-CHmMG7O8.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-supplier.module-gzHesNtQ.mjs +665 -0
- package/fesm2022/techlify-inventory-common-supplier.module-gzHesNtQ.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-techlify-form-service-CiVfwYTS.mjs +14 -0
- package/fesm2022/techlify-inventory-common-techlify-form-service-CiVfwYTS.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-techlify-inventory-common-Czyc0jLI.mjs +495 -0
- package/fesm2022/techlify-inventory-common-techlify-inventory-common-Czyc0jLI.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common.mjs +2 -0
- package/fesm2022/techlify-inventory-common.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/inventory-common/category/category-form/category-form.component.d.ts +19 -0
- package/lib/inventory-common/category/category-form-button/category-form-button.component.d.ts +13 -0
- package/lib/inventory-common/category/category-list-page/category-list-page.component.d.ts +20 -0
- package/lib/inventory-common/category/category-routing.module.d.ts +7 -0
- package/lib/inventory-common/category/category.module.d.ts +19 -0
- package/lib/inventory-common/category/category.service.d.ts +7 -0
- package/lib/inventory-common/inventory-common-routing.module.d.ts +7 -0
- package/lib/inventory-common/inventory-common.module.d.ts +13 -0
- package/lib/inventory-common/inventory-dashboard-page/inventory-dashboard-page.component.d.ts +14 -0
- package/lib/inventory-common/material.module.d.ts +40 -0
- package/lib/inventory-common/measure/measure-delete/measure-delete-button/measure-delete-button.component.d.ts +19 -0
- package/lib/inventory-common/measure/measure-delete/measure-delete.module.d.ts +9 -0
- package/lib/inventory-common/measure/measure-form/measure-form/measure-form.component.d.ts +19 -0
- package/lib/inventory-common/measure/measure-form/measure-form-button/measure-form-button.component.d.ts +13 -0
- package/lib/inventory-common/measure/measure-form/measure-form.module.d.ts +11 -0
- package/lib/inventory-common/measure/measure-routing.module.d.ts +7 -0
- package/lib/inventory-common/measure/measure.module.d.ts +15 -0
- package/lib/inventory-common/measure/measure.service.d.ts +7 -0
- package/lib/inventory-common/measure/measures-list/measures-list.component.d.ts +17 -0
- package/lib/inventory-common/product/low-stock-products-widget/low-stock-products-widget.component.d.ts +13 -0
- package/lib/inventory-common/product/low-stock-products-widget/low-stock-products-widget.module.d.ts +12 -0
- package/lib/inventory-common/product/product-basic-info/product-basic-info.component.d.ts +19 -0
- package/lib/inventory-common/product/product-delete-button/product-delete-button.component.d.ts +26 -0
- package/lib/inventory-common/product/product-form/product-form.component.d.ts +44 -0
- package/lib/inventory-common/product/product-form-button/product-form-button.component.d.ts +20 -0
- package/lib/inventory-common/product/product-form.service.d.ts +7 -0
- package/lib/inventory-common/product/product-import-page/product-import-page.component.d.ts +10 -0
- package/lib/inventory-common/product/product-list/product-list.component.d.ts +44 -0
- package/lib/inventory-common/product/product-measure-form/product-measure-form.component.d.ts +33 -0
- package/lib/inventory-common/product/product-measures-list/product-measures-list.component.d.ts +43 -0
- package/lib/inventory-common/product/product-nav-bar/product-nav-bar.component.d.ts +5 -0
- package/lib/inventory-common/product/product-routing.module.d.ts +7 -0
- package/lib/inventory-common/product/product-summary-chart/product-summary-chart.component.d.ts +15 -0
- package/lib/inventory-common/product/product-summary-chart/product-summary-chart.module.d.ts +10 -0
- package/lib/inventory-common/product/product-tax/product-tax-delete-button/product-tax-delete-button.component.d.ts +26 -0
- package/lib/inventory-common/product/product-tax/product-tax-form-button/product-tax-form-button.component.d.ts +21 -0
- package/lib/inventory-common/product/product-tax/product-tax-list/product-tax-list.component.d.ts +13 -0
- package/lib/inventory-common/product/product-tax/product-tax.module.d.ts +12 -0
- package/lib/inventory-common/product/product-tax/product-tax.service.d.ts +7 -0
- package/lib/inventory-common/product/product-view-page/product-view-page.component.d.ts +33 -0
- package/lib/inventory-common/product/product.module.d.ts +28 -0
- package/lib/inventory-common/product/product.service.d.ts +19 -0
- package/lib/inventory-common/services/techlify-form-service.d.ts +5 -0
- package/lib/inventory-common/stock-issuances/stock-issuance-delete-button/stock-issuance-delete-button.component.d.ts +18 -0
- package/lib/inventory-common/stock-issuances/stock-issuance-delete-button/stock-issuance-delete-button.module.d.ts +9 -0
- package/lib/inventory-common/stock-issuances/stock-issuance.service.d.ts +7 -0
- package/lib/inventory-common/stock-issuances/stock-issuances-list/stock-issuances-list.component.d.ts +24 -0
- package/lib/inventory-common/stock-issuances/stock-issuances-list/stock-issuances-list.module.d.ts +15 -0
- package/lib/inventory-common/stock-issuances/stock-issuances-routing.module.d.ts +7 -0
- package/lib/inventory-common/stock-issuances/stock-issuances.module.d.ts +19 -0
- package/lib/inventory-common/stock-issuances/stock-issue-form/stock-issue-form/stock-issue-form.component.d.ts +24 -0
- package/lib/inventory-common/stock-issuances/stock-issue-form/stock-issue-form-button/stock-issue-form-button.component.d.ts +18 -0
- package/lib/inventory-common/stock-issuances/stock-issue-form/stock-issue-form.module.d.ts +17 -0
- package/lib/inventory-common/stock-receipts/stock-receipt-delete-button/stock-receipt-delete-button.component.d.ts +18 -0
- package/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form/stock-receipt-form.component.d.ts +22 -0
- package/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form-button/stock-receipt-form-button.component.d.ts +16 -0
- package/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form.module.d.ts +17 -0
- package/lib/inventory-common/stock-receipts/stock-receipt.service.d.ts +7 -0
- package/lib/inventory-common/stock-receipts/stock-receipts-list-page/stock-receipts-list-page.component.d.ts +21 -0
- package/lib/inventory-common/stock-receipts/stock-receipts-routing.module.d.ts +7 -0
- package/lib/inventory-common/stock-receipts/stock-receipts.module.d.ts +20 -0
- package/lib/inventory-common/stock-summary.service.d.ts +14 -0
- package/lib/inventory-common/supplier/payee-selector/payee-selector/payee-selector.component.d.ts +20 -0
- package/lib/inventory-common/supplier/payee-selector/payee-selector.module.d.ts +11 -0
- package/lib/inventory-common/supplier/supplier-form/supplier-form.component.d.ts +29 -0
- package/lib/inventory-common/supplier/supplier-form/supplier-form.service.d.ts +7 -0
- package/lib/inventory-common/supplier/supplier-information/supplier-information.component.d.ts +18 -0
- package/lib/inventory-common/supplier/supplier-routing.module.d.ts +7 -0
- package/lib/inventory-common/supplier/supplier-type.service.d.ts +13 -0
- package/lib/inventory-common/supplier/supplier-view/supplier-view.component.d.ts +20 -0
- package/lib/inventory-common/supplier/supplier.component.d.ts +10 -0
- package/lib/inventory-common/supplier/supplier.module.d.ts +18 -0
- package/lib/inventory-common/supplier/supplier.service.d.ts +39 -0
- package/lib/inventory-common/supplier/suppliers-list/suppliers-list.component.d.ts +51 -0
- package/lib/inventory-common/techlify-filter/techlify-filter.component.d.ts +31 -0
- package/lib/inventory-common/techlify-filter/techlify-filter.module.d.ts +11 -0
- package/package.json +25 -0
- package/public-api.d.ts +5 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from "@angular/core";
|
|
2
|
+
import { debounceTime, distinctUntilChanged } from "rxjs";
|
|
3
|
+
import moment from "moment";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "ngx-techlify-core";
|
|
6
|
+
import * as i2 from "@angular/router";
|
|
7
|
+
import * as i3 from "@angular/common";
|
|
8
|
+
import * as i4 from "@angular/forms";
|
|
9
|
+
import * as i5 from "@angular/flex-layout";
|
|
10
|
+
import * as i6 from "@angular/material/button";
|
|
11
|
+
import * as i7 from "@angular/material/form-field";
|
|
12
|
+
import * as i8 from "@angular/material/icon";
|
|
13
|
+
import * as i9 from "@angular/material/input";
|
|
14
|
+
import * as i10 from "@angular/material/core";
|
|
15
|
+
import * as i11 from "@angular/material/select";
|
|
16
|
+
import * as i12 from "@angular/material/button-toggle";
|
|
17
|
+
export class TechlifyFilterComponent {
|
|
18
|
+
requestHelperService;
|
|
19
|
+
activatedRoute;
|
|
20
|
+
filterForm;
|
|
21
|
+
filterConfig;
|
|
22
|
+
filterUpdated = new EventEmitter();
|
|
23
|
+
constructor(requestHelperService, activatedRoute) {
|
|
24
|
+
this.requestHelperService = requestHelperService;
|
|
25
|
+
this.activatedRoute = activatedRoute;
|
|
26
|
+
}
|
|
27
|
+
ngOnInit() {
|
|
28
|
+
// listen for filter changes
|
|
29
|
+
this.filterForm.valueChanges.subscribe({
|
|
30
|
+
next: (value) => {
|
|
31
|
+
const params = this.requestHelperService.convertToFormData(value);
|
|
32
|
+
this.requestHelperService.updateQueryParams(params);
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
// update form with query params
|
|
36
|
+
this.requestHelperService.updateFormWithQueryParams(this.filterForm, {
|
|
37
|
+
duration: { number: true },
|
|
38
|
+
expiry_duration: { number: true },
|
|
39
|
+
payment_method_ids: { multiple: true },
|
|
40
|
+
payment_account_ids: { multiple: true },
|
|
41
|
+
project_ids: { multiple: true },
|
|
42
|
+
invoice_status_ids: { multiple: true },
|
|
43
|
+
customer_ids: { multiple: true },
|
|
44
|
+
cost_category_ids: { multiple: true },
|
|
45
|
+
team_member_ids: { multiple: true },
|
|
46
|
+
task_status_ids: { multiple: true },
|
|
47
|
+
asset_account_ids: { multiple: true },
|
|
48
|
+
depreciation_method_ids: { multiple: true },
|
|
49
|
+
depreciation_expense_account_ids: { multiple: true },
|
|
50
|
+
fixed_asset_type_ids: { multiple: true },
|
|
51
|
+
fixed_asset_document_type_ids: { multiple: true },
|
|
52
|
+
service_center_ids: { multiple: true },
|
|
53
|
+
fixed_asset_maintenance_status_ids: { multiple: true },
|
|
54
|
+
milestone_ids: { multiple: true },
|
|
55
|
+
product_ids: { multiple: true },
|
|
56
|
+
supplier_ids: { multiple: true },
|
|
57
|
+
measure_ids: { multiple: true },
|
|
58
|
+
type_ids: { multiple: true },
|
|
59
|
+
fixed_asset_ids: { multiple: true },
|
|
60
|
+
});
|
|
61
|
+
// listen for route change
|
|
62
|
+
this.activatedRoute.queryParams
|
|
63
|
+
.pipe(debounceTime(800), distinctUntilChanged())
|
|
64
|
+
.subscribe((val) => {
|
|
65
|
+
this.filterUpdated.emit(this.filterForm.value);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
resetField(field) {
|
|
69
|
+
this.filterForm.get(field)?.setValue("");
|
|
70
|
+
}
|
|
71
|
+
onDurationChange(timelineValue) {
|
|
72
|
+
let { date_to, date_from } = timelineValue;
|
|
73
|
+
this.filterForm.patchValue({
|
|
74
|
+
date_from: date_from ? moment(date_from).format("YYYY-MM-DD") : "",
|
|
75
|
+
date_to: date_to ? moment(date_to).format("YYYY-MM-DD") : "",
|
|
76
|
+
}, { emitEvent: false });
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Update expiry date from and date to on value change.
|
|
80
|
+
*
|
|
81
|
+
* @param timelineValue
|
|
82
|
+
*/
|
|
83
|
+
onExpiryDurationChange(timelineValue) {
|
|
84
|
+
let { date_to, date_from } = timelineValue;
|
|
85
|
+
this.filterForm.patchValue({
|
|
86
|
+
expiry_date_from: date_from ? moment(date_from).format("YYYY-MM-DD") : "",
|
|
87
|
+
expiry_date_to: date_to ? moment(date_to).format("YYYY-MM-DD") : "",
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Get the attribute value for the field.
|
|
92
|
+
*
|
|
93
|
+
* @param attribute
|
|
94
|
+
* @param field
|
|
95
|
+
*/
|
|
96
|
+
getFilterConfig(attribute, field) {
|
|
97
|
+
if (!this.filterConfig)
|
|
98
|
+
return "";
|
|
99
|
+
// Check if the field and attribute exist in the filter config, return the value or an empty string
|
|
100
|
+
return this.filterConfig[field] &&
|
|
101
|
+
this.filterConfig[field][attribute] !== undefined
|
|
102
|
+
? this.filterConfig[field][attribute]
|
|
103
|
+
: "";
|
|
104
|
+
}
|
|
105
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TechlifyFilterComponent, deps: [{ token: i1.RequestHelperService }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
|
|
106
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TechlifyFilterComponent, selector: "app-techlify-filter", inputs: { filterForm: "filterForm", filterConfig: "filterConfig" }, outputs: { filterUpdated: "filterUpdated" }, ngImport: i0, template: "<form\n [formGroup]=\"filterForm\"\n fxLayout\n fxLayoutAlign=\"start center\"\n fxLayoutGap=\"10px\"\n>\n <mat-form-field\n *ngIf=\"filterForm.get('search')\"\n [appearance]=\"getFilterConfig('appearance', 'search')\"\n >\n <mat-label>Search</mat-label>\n <input\n formControlName=\"search\"\n matInput\n [placeholder]=\"getFilterConfig('placeholder', 'search')\"\n />\n <button\n *ngIf=\"filterForm.value?.search\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('search')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <app-timeline-filter\n *ngIf=\"filterForm?.get('duration')\"\n appearance=\"fill\"\n [labelText]=\"getFilterConfig('label', 'duration')\"\n [appearance]=\"getFilterConfig('appearance', 'duration')\"\n formControlName=\"duration\"\n (selectionChange)=\"onDurationChange($event)\"\n [showClearButton]=\"true\"\n [dateFrom]=\"filterForm.value?.date_from\"\n [dateTo]=\"filterForm.value?.date_to\"\n ></app-timeline-filter>\n\n <mat-form-field *ngIf=\"filterForm.get('payment_method_ids')\">\n <mat-label>Payment Method</mat-label>\n <app-searchable-selector\n formControlName=\"payment_method_ids\"\n apiUrl=\"api/payment-methods\"\n [multiple]=\"true\"\n [enableSearch]=\"false\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.payment_method_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('payment_method_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container *ngIf=\"filterForm.get('payment_account_ids')\">\n <mat-form-field *ngxPermissionsOnly=\"['accountingcommon_account.read']\">\n <mat-label>{{\n getFilterConfig(\"label\", \"payment_account_ids\") || \"Payment Account\"\n }}</mat-label>\n <app-searchable-selector\n formControlName=\"payment_account_ids\"\n [apiUrl]=\"\n getFilterConfig('apiUrl', 'payment_account_ids') || 'api/accounts'\n \"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.payment_account_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('payment_account_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ng-container>\n\n <mat-form-field *ngIf=\"filterForm.get('invoice_status_ids')\">\n <mat-label>Invoice Status</mat-label>\n <app-searchable-selector\n formControlName=\"invoice_status_ids\"\n apiUrl=\"api/invoice-statuses\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.invoice_status_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('invoice_status_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container *ngIf=\"filterForm.get('customer_ids')\">\n <mat-form-field *ngxPermissionsOnly=\"['customer_read']\">\n <mat-label>Customer</mat-label>\n <app-searchable-selector\n formControlName=\"customer_ids\"\n titleField=\"name\"\n apiUrl=\"api/customers\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.customer_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('customer_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n filterForm.get('project_ids') &&\n getFilterConfig('disabled', 'project_ids') === false\n \"\n >\n <mat-form-field *ngxPermissionsOnly=\"['project.read']\">\n <mat-label>Project</mat-label>\n <app-searchable-selector\n formControlName=\"project_ids\"\n apiUrl=\"api/projects\"\n titleField=\"project_name\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.project_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('project_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ng-container>\n\n <mat-form-field *ngIf=\"filterForm.get('product_ids')\">\n <mat-label>Product</mat-label>\n <app-searchable-selector\n formControlName=\"product_ids\"\n apiUrl=\"api/products\"\n titleField=\"name\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.product_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('product_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('measure_ids')\">\n <mat-label>Measure</mat-label>\n <app-searchable-selector\n formControlName=\"measure_ids\"\n apiUrl=\"api/product-measures\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.measure_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('measure_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container *ngxPermissionsOnly=\"['supplier.read']\">\n <mat-form-field\n *ngIf=\"filterForm.get('supplier_ids')\"\n [appearance]=\"getFilterConfig('appearance', 'supplier_ids')\"\n >\n <mat-label>Supplier</mat-label>\n <app-searchable-selector\n formControlName=\"supplier_ids\"\n titleField=\"company_name\"\n apiUrl=\"api/suppliers\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.supplier_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('supplier_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ng-container>\n\n <app-timeline-filter\n appearance=\"fill\"\n [labelText]=\"getFilterConfig('label', 'expiry_duration')\"\n *ngIf=\"filterForm?.get('expiry_duration')\"\n formControlName=\"expiry_duration\"\n (selectionChange)=\"onExpiryDurationChange($event)\"\n [showClearButton]=\"true\"\n [dateFrom]=\"filterForm.value?.expiry_date_from\"\n [dateTo]=\"filterForm.value?.expiry_date_to\"\n ></app-timeline-filter>\n\n <mat-form-field\n *ngIf=\"filterForm.get('cost_category_ids')\"\n style=\"width: 150px\"\n >\n <mat-label>Cost Category</mat-label>\n <app-searchable-selector\n formControlName=\"cost_category_ids\"\n apiUrl=\"api/cost-code-categories\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.cost_category_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('cost_category_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('milestone_ids')\" style=\"width: 150px\">\n <mat-label>Milestone</mat-label>\n <app-searchable-selector\n formControlName=\"milestone_ids\"\n apiUrl=\"api/milestones\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.milestone_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('milestone_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('team_member_ids')\">\n <mat-label>Assignee</mat-label>\n <app-searchable-selector\n apiUrl=\"api/persons\"\n formControlName=\"team_member_ids\"\n titleField=\"name\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.team_member_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('team_member_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('fixed_asset_type_ids')\">\n <mat-label>Type</mat-label>\n <app-searchable-selector\n formControlName=\"fixed_asset_type_ids\"\n apiUrl=\"api/accounting-plus/fixed-asset-types\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.fixed_asset_type_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('fixed_asset_type_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('fixed_asset_document_type_ids')\">\n <mat-label>Type</mat-label>\n <app-searchable-selector\n formControlName=\"fixed_asset_document_type_ids\"\n apiUrl=\"api/accounting-plus/fixed-asset-document-types\"\n [multiple]=\"true\"\n [enableSearch]=\"\n getFilterConfig('enableSearch', 'fixed_asset_document_type_ids')\n \"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.fixed_asset_document_type_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('fixed_asset_document_type_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <div *ngIf=\"filterForm.get('fixed_asset_document_status')\">\n <small\n class=\"mr-2 text-secondary\"\n *ngIf=\"getFilterConfig('showLabel', 'fixed_asset_document_status')\"\n >\n Status\n </small>\n <mat-button-toggle-group\n formControlName=\"fixed_asset_document_status\"\n [multiple]=\"false\"\n >\n <mat-button-toggle value=\"all\">All</mat-button-toggle>\n <mat-button-toggle value=\"active\">Active</mat-button-toggle>\n <mat-button-toggle value=\"expired\">Expired</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <mat-form-field *ngIf=\"filterForm.get('asset_account_ids')\">\n <mat-label>Asset Account</mat-label>\n <app-searchable-selector\n formControlName=\"asset_account_ids\"\n apiUrl=\"api/accounts\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.asset_account_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('asset_account_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('depreciation_expense_account_ids')\">\n <mat-label>Depreciation Expense Account</mat-label>\n <app-searchable-selector\n [multiple]=\"true\"\n apiUrl=\"api/accounts\"\n formControlName=\"depreciation_expense_account_ids\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.depreciation_expense_account_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('depreciation_expense_account_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('depreciation_method_ids')\">\n <mat-label>Depreciation Method</mat-label>\n <app-searchable-selector\n formControlName=\"depreciation_method_ids\"\n apiUrl=\"api/accounting-plus/depreciation-methods\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n (click)=\"resetField('depreciation_method_ids')\"\n *ngIf=\"filterForm.value?.depreciation_method_ids\"\n mat-icon-button\n matSuffix\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field\n *ngIf=\"filterForm.get('task_status_ids')\"\n style=\"width: 150px\"\n >\n <mat-label>Status</mat-label>\n <app-searchable-selector\n apiUrl=\"api/task-statuses\"\n formControlName=\"task_status_ids\"\n titleField=\"title\"\n [multiple]=\"true\"\n [enableSearch]=\"false\"\n >\n </app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.task_status_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('task_status_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('service_center_ids')\">\n <mat-label>Service Center</mat-label>\n <app-searchable-selector\n apiUrl=\"api/accounting-plus/service-centers\"\n formControlName=\"service_center_ids\"\n titleField=\"name\"\n [enableSearch]=\"false\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.service_center_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('service_center_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('fixed_asset_maintenance_status_ids')\">\n <mat-label>Status</mat-label>\n <app-searchable-selector\n apiUrl=\"api/accounting-plus/fixed-asset-maintenance-statuses\"\n formControlName=\"fixed_asset_maintenance_status_ids\"\n [multiple]=\"true\"\n [enableSearch]=\"false\"\n >\n </app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.fixed_asset_maintenance_status_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('fixed_asset_maintenance_status_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('group_by')\">\n <mat-label>Group By</mat-label>\n <mat-select formControlName=\"group_by\">\n <mat-option value=\"week\">Week</mat-option>\n <mat-option value=\"month\">Month</mat-option>\n <mat-option value=\"year\">Year</mat-option>\n </mat-select>\n </mat-form-field>\n</form>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i5.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: i5.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: i5.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: "component", type: i1.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: i1.TimelineFilterComponent, selector: "app-timeline-filter", inputs: ["defaultValue", "required", "disabled", "value", "timelines", "dateFrom", "dateTo", "appearance", "showClearButton", "form", "labelText"], outputs: ["selectionChange"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-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.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { 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.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i11.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i12.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i12.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }], preserveWhitespaces: true });
|
|
107
|
+
}
|
|
108
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TechlifyFilterComponent, decorators: [{
|
|
109
|
+
type: Component,
|
|
110
|
+
args: [{ selector: "app-techlify-filter", template: "<form\n [formGroup]=\"filterForm\"\n fxLayout\n fxLayoutAlign=\"start center\"\n fxLayoutGap=\"10px\"\n>\n <mat-form-field\n *ngIf=\"filterForm.get('search')\"\n [appearance]=\"getFilterConfig('appearance', 'search')\"\n >\n <mat-label>Search</mat-label>\n <input\n formControlName=\"search\"\n matInput\n [placeholder]=\"getFilterConfig('placeholder', 'search')\"\n />\n <button\n *ngIf=\"filterForm.value?.search\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('search')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <app-timeline-filter\n *ngIf=\"filterForm?.get('duration')\"\n appearance=\"fill\"\n [labelText]=\"getFilterConfig('label', 'duration')\"\n [appearance]=\"getFilterConfig('appearance', 'duration')\"\n formControlName=\"duration\"\n (selectionChange)=\"onDurationChange($event)\"\n [showClearButton]=\"true\"\n [dateFrom]=\"filterForm.value?.date_from\"\n [dateTo]=\"filterForm.value?.date_to\"\n ></app-timeline-filter>\n\n <mat-form-field *ngIf=\"filterForm.get('payment_method_ids')\">\n <mat-label>Payment Method</mat-label>\n <app-searchable-selector\n formControlName=\"payment_method_ids\"\n apiUrl=\"api/payment-methods\"\n [multiple]=\"true\"\n [enableSearch]=\"false\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.payment_method_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('payment_method_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container *ngIf=\"filterForm.get('payment_account_ids')\">\n <mat-form-field *ngxPermissionsOnly=\"['accountingcommon_account.read']\">\n <mat-label>{{\n getFilterConfig(\"label\", \"payment_account_ids\") || \"Payment Account\"\n }}</mat-label>\n <app-searchable-selector\n formControlName=\"payment_account_ids\"\n [apiUrl]=\"\n getFilterConfig('apiUrl', 'payment_account_ids') || 'api/accounts'\n \"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.payment_account_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('payment_account_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ng-container>\n\n <mat-form-field *ngIf=\"filterForm.get('invoice_status_ids')\">\n <mat-label>Invoice Status</mat-label>\n <app-searchable-selector\n formControlName=\"invoice_status_ids\"\n apiUrl=\"api/invoice-statuses\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.invoice_status_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('invoice_status_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container *ngIf=\"filterForm.get('customer_ids')\">\n <mat-form-field *ngxPermissionsOnly=\"['customer_read']\">\n <mat-label>Customer</mat-label>\n <app-searchable-selector\n formControlName=\"customer_ids\"\n titleField=\"name\"\n apiUrl=\"api/customers\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.customer_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('customer_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n filterForm.get('project_ids') &&\n getFilterConfig('disabled', 'project_ids') === false\n \"\n >\n <mat-form-field *ngxPermissionsOnly=\"['project.read']\">\n <mat-label>Project</mat-label>\n <app-searchable-selector\n formControlName=\"project_ids\"\n apiUrl=\"api/projects\"\n titleField=\"project_name\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.project_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('project_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ng-container>\n\n <mat-form-field *ngIf=\"filterForm.get('product_ids')\">\n <mat-label>Product</mat-label>\n <app-searchable-selector\n formControlName=\"product_ids\"\n apiUrl=\"api/products\"\n titleField=\"name\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.product_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('product_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('measure_ids')\">\n <mat-label>Measure</mat-label>\n <app-searchable-selector\n formControlName=\"measure_ids\"\n apiUrl=\"api/product-measures\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.measure_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('measure_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container *ngxPermissionsOnly=\"['supplier.read']\">\n <mat-form-field\n *ngIf=\"filterForm.get('supplier_ids')\"\n [appearance]=\"getFilterConfig('appearance', 'supplier_ids')\"\n >\n <mat-label>Supplier</mat-label>\n <app-searchable-selector\n formControlName=\"supplier_ids\"\n titleField=\"company_name\"\n apiUrl=\"api/suppliers\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.supplier_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('supplier_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ng-container>\n\n <app-timeline-filter\n appearance=\"fill\"\n [labelText]=\"getFilterConfig('label', 'expiry_duration')\"\n *ngIf=\"filterForm?.get('expiry_duration')\"\n formControlName=\"expiry_duration\"\n (selectionChange)=\"onExpiryDurationChange($event)\"\n [showClearButton]=\"true\"\n [dateFrom]=\"filterForm.value?.expiry_date_from\"\n [dateTo]=\"filterForm.value?.expiry_date_to\"\n ></app-timeline-filter>\n\n <mat-form-field\n *ngIf=\"filterForm.get('cost_category_ids')\"\n style=\"width: 150px\"\n >\n <mat-label>Cost Category</mat-label>\n <app-searchable-selector\n formControlName=\"cost_category_ids\"\n apiUrl=\"api/cost-code-categories\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.cost_category_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('cost_category_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('milestone_ids')\" style=\"width: 150px\">\n <mat-label>Milestone</mat-label>\n <app-searchable-selector\n formControlName=\"milestone_ids\"\n apiUrl=\"api/milestones\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.milestone_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('milestone_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('team_member_ids')\">\n <mat-label>Assignee</mat-label>\n <app-searchable-selector\n apiUrl=\"api/persons\"\n formControlName=\"team_member_ids\"\n titleField=\"name\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.team_member_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('team_member_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('fixed_asset_type_ids')\">\n <mat-label>Type</mat-label>\n <app-searchable-selector\n formControlName=\"fixed_asset_type_ids\"\n apiUrl=\"api/accounting-plus/fixed-asset-types\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.fixed_asset_type_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('fixed_asset_type_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('fixed_asset_document_type_ids')\">\n <mat-label>Type</mat-label>\n <app-searchable-selector\n formControlName=\"fixed_asset_document_type_ids\"\n apiUrl=\"api/accounting-plus/fixed-asset-document-types\"\n [multiple]=\"true\"\n [enableSearch]=\"\n getFilterConfig('enableSearch', 'fixed_asset_document_type_ids')\n \"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.fixed_asset_document_type_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('fixed_asset_document_type_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <div *ngIf=\"filterForm.get('fixed_asset_document_status')\">\n <small\n class=\"mr-2 text-secondary\"\n *ngIf=\"getFilterConfig('showLabel', 'fixed_asset_document_status')\"\n >\n Status\n </small>\n <mat-button-toggle-group\n formControlName=\"fixed_asset_document_status\"\n [multiple]=\"false\"\n >\n <mat-button-toggle value=\"all\">All</mat-button-toggle>\n <mat-button-toggle value=\"active\">Active</mat-button-toggle>\n <mat-button-toggle value=\"expired\">Expired</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <mat-form-field *ngIf=\"filterForm.get('asset_account_ids')\">\n <mat-label>Asset Account</mat-label>\n <app-searchable-selector\n formControlName=\"asset_account_ids\"\n apiUrl=\"api/accounts\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.asset_account_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('asset_account_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('depreciation_expense_account_ids')\">\n <mat-label>Depreciation Expense Account</mat-label>\n <app-searchable-selector\n [multiple]=\"true\"\n apiUrl=\"api/accounts\"\n formControlName=\"depreciation_expense_account_ids\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.depreciation_expense_account_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('depreciation_expense_account_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('depreciation_method_ids')\">\n <mat-label>Depreciation Method</mat-label>\n <app-searchable-selector\n formControlName=\"depreciation_method_ids\"\n apiUrl=\"api/accounting-plus/depreciation-methods\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n (click)=\"resetField('depreciation_method_ids')\"\n *ngIf=\"filterForm.value?.depreciation_method_ids\"\n mat-icon-button\n matSuffix\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field\n *ngIf=\"filterForm.get('task_status_ids')\"\n style=\"width: 150px\"\n >\n <mat-label>Status</mat-label>\n <app-searchable-selector\n apiUrl=\"api/task-statuses\"\n formControlName=\"task_status_ids\"\n titleField=\"title\"\n [multiple]=\"true\"\n [enableSearch]=\"false\"\n >\n </app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.task_status_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('task_status_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('service_center_ids')\">\n <mat-label>Service Center</mat-label>\n <app-searchable-selector\n apiUrl=\"api/accounting-plus/service-centers\"\n formControlName=\"service_center_ids\"\n titleField=\"name\"\n [enableSearch]=\"false\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.service_center_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('service_center_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('fixed_asset_maintenance_status_ids')\">\n <mat-label>Status</mat-label>\n <app-searchable-selector\n apiUrl=\"api/accounting-plus/fixed-asset-maintenance-statuses\"\n formControlName=\"fixed_asset_maintenance_status_ids\"\n [multiple]=\"true\"\n [enableSearch]=\"false\"\n >\n </app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.fixed_asset_maintenance_status_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('fixed_asset_maintenance_status_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('group_by')\">\n <mat-label>Group By</mat-label>\n <mat-select formControlName=\"group_by\">\n <mat-option value=\"week\">Week</mat-option>\n <mat-option value=\"month\">Month</mat-option>\n <mat-option value=\"year\">Year</mat-option>\n </mat-select>\n </mat-form-field>\n</form>\n" }]
|
|
111
|
+
}], ctorParameters: () => [{ type: i1.RequestHelperService }, { type: i2.ActivatedRoute }], propDecorators: { filterForm: [{
|
|
112
|
+
type: Input
|
|
113
|
+
}], filterConfig: [{
|
|
114
|
+
type: Input
|
|
115
|
+
}], filterUpdated: [{
|
|
116
|
+
type: Output
|
|
117
|
+
}] } });
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVjaGxpZnktZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ludmVudG9yeS1jb21tb24vc3JjL2xpYi9pbnZlbnRvcnktY29tbW9uL3RlY2hsaWZ5LWZpbHRlci90ZWNobGlmeS1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52ZW50b3J5LWNvbW1vbi9zcmMvbGliL2ludmVudG9yeS1jb21tb24vdGVjaGxpZnktZmlsdGVyL3RlY2hsaWZ5LWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSS9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDOzs7Ozs7Ozs7Ozs7OztBQU81QixNQUFNLE9BQU8sdUJBQXVCO0lBTXhCO0lBQ0E7SUFORCxVQUFVLENBQWE7SUFDdkIsWUFBWSxDQUFNO0lBQ2pCLGFBQWEsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUVoRSxZQUNVLG9CQUEwQyxFQUMxQyxjQUE4QjtRQUQ5Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtJQUNyQyxDQUFDO0lBRUosUUFBUTtRQUNOLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7WUFDckMsSUFBSSxFQUFFLENBQUMsS0FBVSxFQUFFLEVBQUU7Z0JBQ25CLE1BQU0sTUFBTSxHQUFRLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkUsSUFBSSxDQUFDLG9C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bnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBSZXF1ZXN0SGVscGVyU2VydmljZSwgVGltZWxpbmVWYWx1ZSB9IGZyb20gXCJuZ3gtdGVjaGxpZnktY29yZVwiO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiYXBwLXRlY2hsaWZ5LWZpbHRlclwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3RlY2hsaWZ5LWZpbHRlci5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vdGVjaGxpZnktZmlsdGVyLmNvbXBvbmVudC5zY3NzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBUZWNobGlmeUZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGZpbHRlckZvcm0hOiBGb3JtR3JvdXA7XG4gIEBJbnB1dCgpIGZpbHRlckNvbmZpZzogYW55O1xuICBAT3V0cHV0KCkgZmlsdGVyVXBkYXRlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZXF1ZXN0SGVscGVyU2VydmljZTogUmVxdWVzdEhlbHBlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGVcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIGxpc3RlbiBmb3IgZmlsdGVyIGNoYW5nZXNcbiAgICB0aGlzLmZpbHRlckZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBwYXJhbXM6IGFueSA9IHRoaXMucmVxdWVzdEhlbHBlclNlcnZpY2UuY29udmVydFRvRm9ybURhdGEodmFsdWUpO1xuICAgICAgICB0aGlzLnJlcXVlc3RIZWxwZXJTZXJ2aWNlLnVwZGF0ZVF1ZXJ5UGFyYW1zKHBhcmFtcyk7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gdXBkYXRlIGZvcm0gd2l0aCBxdWVyeSBwYXJhbXNcbiAgICB0aGlzLnJlcXVlc3RIZWxwZXJTZXJ2aWNlLnVwZGF0ZUZvcm1XaXRoUXVlcnlQYXJhbXModGhpcy5maWx0ZXJGb3JtLCB7XG4gICAgICBkdXJhdGlvbjogeyBudW1iZXI6IHRydWUgfSxcbiAgICAgIGV4cGlyeV9kdXJhdGlvbjogeyBudW1iZXI6IHRydWUgfSxcbiAgICAgIHBheW1lbnRfbWV0aG9kX2lkczogeyBtdWx0aXBsZTogdHJ1ZSB9LFxuICAgICAgcGF5bWVudF9hY2NvdW50X2lkczogeyBtdWx0aXBsZTogdHJ1ZSB9LFxuICAgICAgcHJvamVjdF9pZHM6IHsgbXVsdGlwbGU6IHRydWUgfSxcbiAgICAgIGludm9pY2Vfc3RhdHVzX2lkczogeyBtdWx0aXBsZTogdHJ1ZSB9LFxuICAgICAgY3VzdG9tZXJfaWRzOiB7IG11bHRpcGxlOiB0cnVlIH0sXG4gICAgICBjb3N0X2NhdGVnb3J5X2lkczogeyBtdWx0aXBsZTogdHJ1ZSB9LFxuICAgICAgdGVhbV9tZW1iZXJfaWRzOiB7IG11bHRpcGxlOiB0cnVlIH0sXG4gICAgICB0YXNrX3N0YXR1c19pZHM6IHsgbXVsdGlwbGU6IHRydWUgfSxcbiAgICAgIGFzc2V0X2FjY291bnRfaWRzOiB7IG11bHRpcGxlOiB0cnVlIH0sXG4gICAgICBkZXByZWNpYXRpb25fbWV0aG9kX2lkczogeyBtdWx0aXBsZTogdHJ1ZSB9LFxuICAgICAgZGVwcmVjaWF0aW9uX2V4cGVuc2VfYWNjb3VudF9pZHM6IHsgbXVsdGlwbGU6IHRydWUgfSxcbiAgICAgIGZpeGVkX2Fzc2V0X3R5cGVfaWRzOiB7IG11bHRpcGxlOiB0cnVlIH0sXG4gICAgICBmaXhlZF9hc3NldF9kb2N1bWVudF90eXBlX2lkczogeyBtdWx0aXBsZTogdHJ1ZSB9LFxuICAgICAgc2VydmljZV9jZW50ZXJfaWRzOiB7IG11bHRpcGxlOiB0cnVlIH0sXG4gICAgICBmaXhlZF9hc3NldF9tYWludGVuYW5jZV9zdGF0dXNfaWRzOiB7IG11bHRpcGxlOiB0cnVlIH0sXG4gICAgICBtaWxlc3RvbmVfaWRzOiB7IG11bHRpcGxlOiB0cnVlIH0sXG4gICAgICBwcm9kdWN0X2lkczogeyBtdWx0aXBsZTogdHJ1ZSB9LFxuICAgICAgc3VwcGxpZXJfaWRzOiB7IG11bHRpcGxlOiB0cnVlIH0sXG4gICAgICBtZWFzdXJlX2lkczogeyBtdWx0aXBsZTogdHJ1ZSB9LFxuICAgICAgdHlwZV9pZHM6IHsgbXVsdGlwbGU6IHRydWUgfSxcbiAgICAgIGZpeGVkX2Fzc2V0X2lkczogeyBtdWx0aXBsZTogdHJ1ZSB9LFxuICAgIH0pO1xuXG4gICAgLy8gbGlzdGVuIGZvciByb3V0ZSBjaGFuZ2VcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoODAwKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgIC5zdWJzY3JpYmUoKHZhbDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZmlsdGVyVXBkYXRlZC5lbWl0KHRoaXMuZmlsdGVyRm9ybS52YWx1ZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHJlc2V0RmllbGQoZmllbGQ6IHN0cmluZykge1xuICAgIHRoaXMuZmlsdGVyRm9ybS5nZXQoZmllbGQpPy5zZXRWYWx1ZShcIlwiKTtcbiAgfVxuXG4gIG9uRHVyYXRpb25DaGFuZ2UodGltZWxpbmVWYWx1ZTogVGltZWxpbmVWYWx1ZSkge1xuICAgIGxldCB7IGRhdGVfdG8sIGRhdGVfZnJvbSB9ID0gdGltZWxpbmVWYWx1ZTtcbiAgICB0aGlzLmZpbHRlckZvcm0ucGF0Y2hWYWx1ZShcbiAgICAgIHtcbiAgICAgICAgZGF0ZV9mcm9tOiBkYXRlX2Zyb20gPyBtb21lbnQoZGF0ZV9mcm9tKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpIDogXCJcIixcbiAgICAgICAgZGF0ZV90bzogZGF0ZV90byA/IG1vbWVudChkYXRlX3RvKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpIDogXCJcIixcbiAgICAgIH0sXG4gICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGV4cGlyeSBkYXRlIGZyb20gYW5kIGRhdGUgdG8gb24gdmFsdWUgY2hhbmdlLlxuICAgKlxuICAgKiBAcGFyYW0gdGltZWxpbmVWYWx1ZVxuICAgKi9cbiAgb25FeHBpcnlEdXJhdGlvbkNoYW5nZSh0aW1lbGluZVZhbHVlOiBUaW1lbGluZVZhbHVlKSB7XG4gICAgbGV0IHsgZGF0ZV90bywgZGF0ZV9mcm9tIH0gPSB0aW1lbGluZVZhbHVlO1xuICAgIHRoaXMuZmlsdGVyRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIGV4cGlyeV9kYXRlX2Zyb206IGRhdGVfZnJvbSA/IG1vbWVudChkYXRlX2Zyb20pLmZvcm1hdChcIllZWVktTU0tRERcIikgOiBcIlwiLFxuICAgICAgZXhwaXJ5X2RhdGVfdG86IGRhdGVfdG8gPyBtb21lbnQoZGF0ZV90bykuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKSA6IFwiXCIsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBhdHRyaWJ1dGUgdmFsdWUgZm9yIHRoZSBmaWVsZC5cbiAgICpcbiAgICogQHBhcmFtIGF0dHJpYnV0ZVxuICAgKiBAcGFyYW0gZmllbGRcbiAgICovXG4gIGdldEZpbHRlckNvbmZpZyhhdHRyaWJ1dGU6IHN0cmluZywgZmllbGQ6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5maWx0ZXJDb25maWcpIHJldHVybiBcIlwiO1xuICAgIC8vIENoZWNrIGlmIHRoZSBmaWVsZCBhbmQgYXR0cmlidXRlIGV4aXN0IGluIHRoZSBmaWx0ZXIgY29uZmlnLCByZXR1cm4gdGhlIHZhbHVlIG9yIGFuIGVtcHR5IHN0cmluZ1xuICAgIHJldHVybiB0aGlzLmZpbHRlckNvbmZpZ1tmaWVsZF0gJiZcbiAgICAgIHRoaXMuZmlsdGVyQ29uZmlnW2ZpZWxkXVthdHRyaWJ1dGVdICE9PSB1bmRlZmluZWRcbiAgICAgID8gdGhpcy5maWx0ZXJDb25maWdbZmllbGRdW2F0dHJpYnV0ZV1cbiAgICAgIDogXCJcIjtcbiAgfVxufVxuIiwiPGZvcm1cbiAgW2Zvcm1Hcm91cF09XCJmaWx0ZXJGb3JtXCJcbiAgZnhMYXlvdXRcbiAgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiXG4gIGZ4TGF5b3V0R2FwPVwiMTBweFwiXG4+XG4gIDxtYXQtZm9ybS1maWVsZFxuICAgICpuZ0lmPVwiZmlsdGVyRm9ybS5nZXQoJ3NlYXJjaCcpXCJcbiAgICBbYXBwZWFyYW5jZV09XCJnZXRGaWx0ZXJDb25maWcoJ2FwcGVhcmFuY2UnLCAnc2VhcmNoJylcIlxuICA+XG4gICAgPG1hdC1sYWJlbD5TZWFyY2g8L21hdC1sYWJlbD5cbiAgICA8aW5wdXRcbiAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlYXJjaFwiXG4gICAgICBtYXRJbnB1dFxuICAgICAgW3BsYWNlaG9sZGVyXT1cImdldEZpbHRlckNvbmZpZygncGxhY2Vob2xkZXInLCAnc2VhcmNoJylcIlxuICAgIC8+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJmaWx0ZXJGb3JtLnZhbHVlPy5zZWFyY2hcIlxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBtYXRTdWZmaXhcbiAgICAgIChjbGljayk9XCJyZXNldEZpZWxkKCdzZWFyY2gnKVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8YXBwLXRpbWVsaW5lLWZpbHRlclxuICAgICpuZ0lmPVwiZmlsdGVyRm9ybT8uZ2V0KCdkdXJhdGlvbicpXCJcbiAgICBhcHBlYXJhbmNlPVwiZmlsbFwiXG4gICAgW2xhYmVsVGV4dF09XCJnZXRGaWx0ZXJDb25maWcoJ2xhYmVsJywgJ2R1cmF0aW9uJylcIlxuICAgIFthcHBlYXJhbmNlXT1cImdldEZpbHRlckNvbmZpZygnYXBwZWFyYW5jZScsICdkdXJhdGlvbicpXCJcbiAgICBmb3JtQ29udHJvbE5hbWU9XCJkdXJhdGlvblwiXG4gICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkR1cmF0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgIFtzaG93Q2xlYXJCdXR0b25dPVwidHJ1ZVwiXG4gICAgW2RhdGVGcm9tXT1cImZpbHRlckZvcm0udmFsdWU/LmRhdGVfZnJvbVwiXG4gICAgW2RhdGVUb109XCJmaWx0ZXJGb3JtLnZhbHVlPy5kYXRlX3RvXCJcbiAgPjwvYXBwLXRpbWVsaW5lLWZpbHRlcj5cblxuICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJmaWx0ZXJGb3JtLmdldCgncGF5bWVudF9tZXRob2RfaWRzJylcIj5cbiAgICA8bWF0LWxhYmVsPlBheW1lbnQgTWV0aG9kPC9tYXQtbGFiZWw+XG4gICAgPGFwcC1zZWFyY2hhYmxlLXNlbGVjdG9yXG4gICAgICBmb3JtQ29udHJvbE5hbWU9XCJwYXltZW50X21ldGhvZF9pZHNcIlxuICAgICAgYXBpVXJsPVwiYXBpL3BheW1lbnQtbWV0aG9kc1wiXG4gICAgICBbbXVsdGlwbGVdPVwidHJ1ZVwiXG4gICAgICBbZW5hYmxlU2VhcmNoXT1cImZhbHNlXCJcbiAgICA+PC9hcHAtc2VhcmNoYWJsZS1zZWxlY3Rvcj5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cImZpbHRlckZvcm0udmFsdWU/LnBheW1lbnRfbWV0aG9kX2lkc1wiXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIG1hdFN1ZmZpeFxuICAgICAgKGNsaWNrKT1cInJlc2V0RmllbGQoJ3BheW1lbnRfbWV0aG9kX2lkcycpXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXJGb3JtLmdldCgncGF5bWVudF9hY2NvdW50X2lkcycpXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkICpuZ3hQZXJtaXNzaW9uc09ubHk9XCJbJ2FjY291bnRpbmdjb21tb25fYWNjb3VudC5yZWFkJ11cIj5cbiAgICAgIDxtYXQtbGFiZWw+e3tcbiAgICAgICAgZ2V0RmlsdGVyQ29uZmlnKFwibGFiZWxcIiwgXCJwYXltZW50X2FjY291bnRfaWRzXCIpIHx8IFwiUGF5bWVudCBBY2NvdW50XCJcbiAgICAgIH19PC9tYXQtbGFiZWw+XG4gICAgICA8YXBwLXNlYXJjaGFibGUtc2VsZWN0b3JcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicGF5bWVudF9hY2NvdW50X2lkc1wiXG4gICAgICAgIFthcGlVcmxdPVwiXG4gICAgICAgICAgZ2V0RmlsdGVyQ29uZmlnKCdhcGlVcmwnLCAncGF5bWVudF9hY2NvdW50X2lkcycpIHx8ICdhcGkvYWNjb3VudHMnXG4gICAgICAgIFwiXG4gICAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCJcbiAgICAgID48L2FwcC1zZWFyY2hhYmxlLXNlbGVjdG9yPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cImZpbHRlckZvcm0udmFsdWU/LnBheW1lbnRfYWNjb3VudF9pZHNcIlxuICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgbWF0U3VmZml4XG4gICAgICAgIChjbGljayk9XCJyZXNldEZpZWxkKCdwYXltZW50X2FjY291bnRfaWRzJylcIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiZmlsdGVyRm9ybS5nZXQoJ2ludm9pY2Vfc3RhdHVzX2lkcycpXCI+XG4gICAgPG1hdC1sYWJlbD5JbnZvaWNlIFN0YXR1czwvbWF0LWxhYmVsPlxuICAgIDxhcHAtc2VhcmNoYWJsZS1zZWxlY3RvclxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiaW52b2ljZV9zdGF0dXNfaWRzXCJcbiAgICAgIGFwaVVybD1cImFwaS9pbnZvaWNlLXN0YXR1c2VzXCJcbiAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCJcbiAgICA+PC9hcHAtc2VhcmNoYWJsZS1zZWxlY3Rvcj5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cImZpbHRlckZvcm0udmFsdWU/Lmludm9pY2Vfc3RhdHVzX2lkc1wiXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIG1hdFN1ZmZpeFxuICAgICAgKGNsaWNrKT1cInJlc2V0RmllbGQoJ2ludm9pY2Vfc3RhdHVzX2lkcycpXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXJGb3JtLmdldCgnY3VzdG9tZXJfaWRzJylcIj5cbiAgICA8bWF0LWZvcm0tZmllbGQgKm5neFBlcm1pc3Npb25zT25seT1cIlsnY3VzdG9tZXJfcmVhZCddXCI+XG4gICAgICA8bWF0LWxhYmVsPkN1c3RvbWVyPC9tYXQtbGFiZWw+XG4gICAgICA8YXBwLXNlYXJjaGFibGUtc2VsZWN0b3JcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY3VzdG9tZXJfaWRzXCJcbiAgICAgICAgdGl0bGVGaWVsZD1cIm5hbWVcIlxuICAgICAgICBhcGlVcmw9XCJhcGkvY3VzdG9tZXJzXCJcbiAgICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgPjwvYXBwLXNlYXJjaGFibGUtc2VsZWN0b3I+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwiZmlsdGVyRm9ybS52YWx1ZT8uY3VzdG9tZXJfaWRzXCJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAoY2xpY2spPVwicmVzZXRGaWVsZCgnY3VzdG9tZXJfaWRzJylcIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiXG4gICAgICBmaWx0ZXJGb3JtLmdldCgncHJvamVjdF9pZHMnKSAmJlxuICAgICAgZ2V0RmlsdGVyQ29uZmlnKCdkaXNhYmxlZCcsICdwcm9qZWN0X2lkcycpID09PSBmYWxzZVxuICAgIFwiXG4gID5cbiAgICA8bWF0LWZvcm0tZmllbGQgKm5neFBlcm1pc3Npb25zT25seT1cIlsncHJvamVjdC5yZWFkJ11cIj5cbiAgICAgIDxtYXQtbGFiZWw+UHJvamVjdDwvbWF0LWxhYmVsPlxuICAgICAgPGFwcC1zZWFyY2hhYmxlLXNlbGVjdG9yXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cInByb2plY3RfaWRzXCJcbiAgICAgICAgYXBpVXJsPVwiYXBpL3Byb2plY3RzXCJcbiAgICAgICAgdGl0bGVGaWVsZD1cInByb2plY3RfbmFtZVwiXG4gICAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCJcbiAgICAgID48L2FwcC1zZWFyY2hhYmxlLXNlbGVjdG9yPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cImZpbHRlckZvcm0udmFsdWU/LnByb2plY3RfaWRzXCJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAoY2xpY2spPVwicmVzZXRGaWVsZCgncHJvamVjdF9pZHMnKVwiXG4gICAgICA+XG4gICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJmaWx0ZXJGb3JtLmdldCgncHJvZHVjdF9pZHMnKVwiPlxuICAgIDxtYXQtbGFiZWw+UHJvZHVjdDwvbWF0LWxhYmVsPlxuICAgIDxhcHAtc2VhcmNoYWJsZS1zZWxlY3RvclxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicHJvZHVjdF9pZHNcIlxuICAgICAgYXBpVXJsPVwiYXBpL3Byb2R1Y3RzXCJcbiAgICAgIHRpdGxlRmllbGQ9XCJuYW1lXCJcbiAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCJcbiAgICA+PC9hcHAtc2VhcmNoYWJsZS1zZWxlY3Rvcj5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cImZpbHRlckZvcm0udmFsdWU/LnByb2R1Y3RfaWRzXCJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgbWF0U3VmZml4XG4gICAgICAoY2xpY2spPVwicmVzZXRGaWVsZCgncHJvZHVjdF9pZHMnKVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJmaWx0ZXJGb3JtLmdldCgnbWVhc3VyZV9pZHMnKVwiPlxuICAgIDxtYXQtbGFiZWw+TWVhc3VyZTwvbWF0LWxhYmVsPlxuICAgIDxhcHAtc2VhcmNoYWJsZS1zZWxlY3RvclxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWVhc3VyZV9pZHNcIlxuICAgICAgYXBpVXJsPVwiYXBpL3Byb2R1Y3QtbWVhc3VyZXNcIlxuICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgID48L2FwcC1zZWFyY2hhYmxlLXNlbGVjdG9yPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiZmlsdGVyRm9ybS52YWx1ZT8ubWVhc3VyZV9pZHNcIlxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBtYXRTdWZmaXhcbiAgICAgIChjbGljayk9XCJyZXNldEZpZWxkKCdtZWFzdXJlX2lkcycpXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gIDxuZy1jb250YWluZXIgKm5neFBlcm1pc3Npb25zT25seT1cIlsnc3VwcGxpZXIucmVhZCddXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICAqbmdJZj1cImZpbHRlckZvcm0uZ2V0KCdzdXBwbGllcl9pZHMnKVwiXG4gICAgICBbYXBwZWFyYW5jZV09XCJnZXRGaWx0ZXJDb25maWcoJ2FwcGVhcmFuY2UnLCAnc3VwcGxpZXJfaWRzJylcIlxuICAgID5cbiAgICAgIDxtYXQtbGFiZWw+U3VwcGxpZXI8L21hdC1sYWJlbD5cbiAgICAgIDxhcHAtc2VhcmNoYWJsZS1zZWxlY3RvclxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzdXBwbGllcl9pZHNcIlxuICAgICAgICB0aXRsZUZpZWxkPVwiY29tcGFueV9uYW1lXCJcbiAgICAgICAgYXBpVXJsPVwiYXBpL3N1cHBsaWVyc1wiXG4gICAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCJcbiAgICAgID48L2FwcC1zZWFyY2hhYmxlLXNlbGVjdG9yPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cImZpbHRlckZvcm0udmFsdWU/LnN1cHBsaWVyX2lkc1wiXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgKGNsaWNrKT1cInJlc2V0RmllbGQoJ3N1cHBsaWVyX2lkcycpXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxhcHAtdGltZWxpbmUtZmlsdGVyXG4gICAgYXBwZWFyYW5jZT1cImZpbGxcIlxuICAgIFtsYWJlbFRleHRdPVwiZ2V0RmlsdGVyQ29uZmlnKCdsYWJlbCcsICdleHBpcnlfZHVyYXRpb24nKVwiXG4gICAgKm5nSWY9XCJmaWx0ZXJGb3JtPy5nZXQoJ2V4cGlyeV9kdXJhdGlvbicpXCJcbiAgICBmb3JtQ29udHJvbE5hbWU9XCJleHBpcnlfZHVyYXRpb25cIlxuICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25FeHBpcnlEdXJhdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICBbc2hvd0NsZWFyQnV0dG9uXT1cInRydWVcIlxuICAgIFtkYXRlRnJvbV09XCJmaWx0ZXJGb3JtLnZhbHVlPy5leHBpcnlfZGF0ZV9mcm9tXCJcbiAgICBbZGF0ZVRvXT1cImZpbHRlckZvcm0udmFsdWU/LmV4cGlyeV9kYXRlX3RvXCJcbiAgPjwvYXBwLXRpbWVsaW5lLWZpbHRlcj5cblxuICA8bWF0LWZvcm0tZmllbGRcbiAgICAqbmdJZj1cImZpbHRlckZvcm0uZ2V0KCdjb3N0X2NhdGVnb3J5X2lkcycpXCJcbiAgICBzdHlsZT1cIndpZHRoOiAxNTBweFwiXG4gID5cbiAgICA8bWF0LWxhYmVsPkNvc3QgQ2F0ZWdvcnk8L21hdC1sYWJlbD5cbiAgICA8YXBwLXNlYXJjaGFibGUtc2VsZWN0b3JcbiAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvc3RfY2F0ZWdvcnlfaWRzXCJcbiAgICAgIGFwaVVybD1cImFwaS9jb3N0LWNvZGUtY2F0ZWdvcmllc1wiXG4gICAgICBbbXVsdGlwbGVdPVwidHJ1ZVwiXG4gICAgPjwvYXBwLXNlYXJjaGFibGUtc2VsZWN0b3I+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJmaWx0ZXJGb3JtLnZhbHVlPy5jb3N0X2NhdGVnb3J5X2lkc1wiXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIG1hdFN1ZmZpeFxuICAgICAgKGNsaWNrKT1cInJlc2V0RmllbGQoJ2Nvc3RfY2F0ZWdvcnlfaWRzJylcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiZmlsdGVyRm9ybS5nZXQoJ21pbGVzdG9uZV9pZHMnKVwiIHN0eWxlPVwid2lkdGg6IDE1MHB4XCI+XG4gICAgPG1hdC1sYWJlbD5NaWxlc3RvbmU8L21hdC1sYWJlbD5cbiAgICA8YXBwLXNlYXJjaGFibGUtc2VsZWN0b3JcbiAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1pbGVzdG9uZV9pZHNcIlxuICAgICAgYXBpVXJsPVwiYXBpL21pbGVzdG9uZXNcIlxuICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgID48L2FwcC1zZWFyY2hhYmxlLXNlbGVjdG9yPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiZmlsdGVyRm9ybS52YWx1ZT8ubWlsZXN0b25lX2lkc1wiXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIG1hdFN1ZmZpeFxuICAgICAgKGNsaWNrKT1cInJlc2V0RmllbGQoJ21pbGVzdG9uZV9pZHMnKVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJmaWx0ZXJGb3JtLmdldCgndGVhbV9tZW1iZXJfaWRzJylcIj5cbiAgICA8bWF0LWxhYmVsPkFzc2lnbmVlPC9tYXQtbGFiZWw+XG4gICAgPGFwcC1zZWFyY2hhYmxlLXNlbGVjdG9yXG4gICAgICBhcGlVcmw9XCJhcGkvcGVyc29uc1wiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0ZWFtX21lbWJlcl9pZHNcIlxuICAgICAgdGl0bGVGaWVsZD1cIm5hbWVcIlxuICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgID5cbiAgICA8L2FwcC1zZWFyY2hhYmxlLXNlbGVjdG9yPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiZmlsdGVyRm9ybS52YWx1ZT8udGVhbV9tZW1iZXJfaWRzXCJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgbWF0U3VmZml4XG4gICAgICAoY2xpY2spPVwicmVzZXRGaWVsZCgndGVhbV9tZW1iZXJfaWRzJylcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiZmlsdGVyRm9ybS5nZXQoJ2ZpeGVkX2Fzc2V0X3R5cGVfaWRzJylcIj5cbiAgICA8bWF0LWxhYmVsPlR5cGU8L21hdC1sYWJlbD5cbiAgICA8YXBwLXNlYXJjaGFibGUtc2VsZWN0b3JcbiAgICAgIGZvcm1Db250cm9sTmFtZT1cImZpeGVkX2Fzc2V0X3R5cGVfaWRzXCJcbiAgICAgIGFwaVVybD1cImFwaS9hY2NvdW50aW5nLXBsdXMvZml4ZWQtYXNzZXQtdHlwZXNcIlxuICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgID48L2FwcC1zZWFyY2hhYmxlLXNlbGVjdG9yPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiZmlsdGVyRm9ybS52YWx1ZT8uZml4ZWRfYXNzZXRfdHlwZV9pZHNcIlxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBtYXRTdWZmaXhcbiAgICAgIChjbGljayk9XCJyZXNldEZpZWxkKCdmaXhlZF9hc3NldF90eXBlX2lkcycpXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cImZpbHRlckZvcm0uZ2V0KCdmaXhlZF9hc3NldF9kb2N1bWVudF90eXBlX2lkcycpXCI+XG4gICAgPG1hdC1sYWJlbD5UeXBlPC9tYXQtbGFiZWw+XG4gICAgPGFwcC1zZWFyY2hhYmxlLXNlbGVjdG9yXG4gICAgICBmb3JtQ29udHJvbE5hbWU9XCJmaXhlZF9hc3NldF9kb2N1bWVudF90eXBlX2lkc1wiXG4gICAgICBhcGlVcmw9XCJhcGkvYWNjb3VudGluZy1wbHVzL2ZpeGVkLWFzc2V0LWRvY3VtZW50LXR5cGVzXCJcbiAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCJcbiAgICAgIFtlbmFibGVTZWFyY2hdPVwiXG4gICAgICAgIGdldEZpbHRlckNvbmZpZygnZW5hYmxlU2VhcmNoJywgJ2ZpeGVkX2Fzc2V0X2RvY3VtZW50X3R5cGVfaWRzJylcbiAgICAgIFwiXG4gICAgPjwvYXBwLXNlYXJjaGFibGUtc2VsZWN0b3I+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJmaWx0ZXJGb3JtLnZhbHVlPy5maXhlZF9hc3NldF9kb2N1bWVudF90eXBlX2lkc1wiXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIG1hdFN1ZmZpeFxuICAgICAgKGNsaWNrKT1cInJlc2V0RmllbGQoJ2ZpeGVkX2Fzc2V0X2RvY3VtZW50X3R5cGVfaWRzJylcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgPGRpdiAqbmdJZj1cImZpbHRlckZvcm0uZ2V0KCdmaXhlZF9hc3NldF9kb2N1bWVudF9zdGF0dXMnKVwiPlxuICAgIDxzbWFsbFxuICAgICAgY2xhc3M9XCJtci0yIHRleHQtc2Vjb25kYXJ5XCJcbiAgICAgICpuZ0lmPVwiZ2V0RmlsdGVyQ29uZmlnKCdzaG93TGFiZWwnLCAnZml4ZWRfYXNzZXRfZG9jdW1lbnRfc3RhdHVzJylcIlxuICAgID5cbiAgICAgIFN0YXR1c1xuICAgIDwvc21hbGw+XG4gICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwXG4gICAgICBmb3JtQ29udHJvbE5hbWU9XCJmaXhlZF9hc3NldF9kb2N1bWVudF9zdGF0dXNcIlxuICAgICAgW211bHRpcGxlXT1cImZhbHNlXCJcbiAgICA+XG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJhbGxcIj5BbGw8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwiYWN0aXZlXCI+QWN0aXZlPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSB2YWx1ZT1cImV4cGlyZWRcIj5FeHBpcmVkPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxuICA8L2Rpdj5cblxuICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJmaWx0ZXJGb3JtLmdldCgnYXNzZXRfYWNjb3VudF9pZHMnKVwiPlxuICAgIDxtYXQtbGFiZWw+QXNzZXQgQWNjb3VudDwvbWF0LWxhYmVsPlxuICAgIDxhcHAtc2VhcmNoYWJsZS1zZWxlY3RvclxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYXNzZXRfYWNjb3VudF9pZHNcIlxuICAgICAgYXBpVXJsPVwiYXBpL2FjY291bnRzXCJcbiAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCJcbiAgICA+PC9hcHAtc2VhcmNoYWJsZS1zZWxlY3Rvcj5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cImZpbHRlckZvcm0udmFsdWU/LmFzc2V0X2FjY291bnRfaWRzXCJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgbWF0U3VmZml4XG4gICAgICAoY2xpY2spPVwicmVzZXRGaWVsZCgnYXNzZXRfYWNjb3VudF9pZHMnKVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJmaWx0ZXJGb3JtLmdldCgnZGVwcmVjaWF0aW9uX2V4cGVuc2VfYWNjb3VudF9pZHMnKVwiPlxuICAgIDxtYXQtbGFiZWw+RGVwcmVjaWF0aW9uIEV4cGVuc2UgQWNjb3VudDwvbWF0LWxhYmVsPlxuICAgIDxhcHAtc2VhcmNoYWJsZS1zZWxlY3RvclxuICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgYXBpVXJsPVwiYXBpL2FjY291bnRzXCJcbiAgICAgIGZvcm1Db250cm9sTmFtZT1cImRlcHJlY2lhdGlvbl9leHBlbnNlX2FjY291bnRfaWRzXCJcbiAgICA+PC9hcHAtc2VhcmNoYWJsZS1zZWxlY3Rvcj5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cImZpbHRlckZvcm0udmFsdWU/LmRlcHJlY2lhdGlvbl9leHBlbnNlX2FjY291bnRfaWRzXCJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgbWF0U3VmZml4XG4gICAgICAoY2xpY2spPVwicmVzZXRGaWVsZCgnZGVwcmVjaWF0aW9uX2V4cGVuc2VfYWNjb3VudF9pZHMnKVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJmaWx0ZXJGb3JtLmdldCgnZGVwcmVjaWF0aW9uX21ldGhvZF9pZHMnKVwiPlxuICAgIDxtYXQtbGFiZWw+RGVwcmVjaWF0aW9uIE1ldGhvZDwvbWF0LWxhYmVsPlxuICAgIDxhcHAtc2VhcmNoYWJsZS1zZWxlY3RvclxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGVwcmVjaWF0aW9uX21ldGhvZF9pZHNcIlxuICAgICAgYXBpVXJsPVwiYXBpL2FjY291bnRpbmctcGx1cy9kZXByZWNpYXRpb24tbWV0aG9kc1wiXG4gICAgICBbbXVsdGlwbGVdPVwidHJ1ZVwiXG4gICAgPjwvYXBwLXNlYXJjaGFibGUtc2VsZWN0b3I+XG4gICAgPGJ1dHRvblxuICAgICAgKGNsaWNrKT1cInJlc2V0RmllbGQoJ2RlcHJlY2lhdGlvbl9tZXRob2RfaWRzJylcIlxuICAgICAgKm5nSWY9XCJmaWx0ZXJGb3JtLnZhbHVlPy5kZXByZWNpYXRpb25fbWV0aG9kX2lkc1wiXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIG1hdFN1ZmZpeFxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgPG1hdC1mb3JtLWZpZWxkXG4gICAgKm5nSWY9XCJmaWx0ZXJGb3JtLmdldCgndGFza19zdGF0dXNfaWRzJylcIlxuICAgIHN0eWxlPVwid2lkdGg6IDE1MHB4XCJcbiAgPlxuICAgIDxtYXQtbGFiZWw+U3RhdHVzPC9tYXQtbGFiZWw+XG4gICAgPGFwcC1zZWFyY2hhYmxlLXNlbGVjdG9yXG4gICAgICBhcGlVcmw9XCJhcGkvdGFzay1zdGF0dXNlc1wiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0YXNrX3N0YXR1c19pZHNcIlxuICAgICAgdGl0bGVGaWVsZD1cInRpdGxlXCJcbiAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCJcbiAgICAgIFtlbmFibGVTZWFyY2hdPVwiZmFsc2VcIlxuICAgID5cbiAgICA8L2FwcC1zZWFyY2hhYmxlLXNlbGVjdG9yPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiZmlsdGVyRm9ybS52YWx1ZT8udGFza19zdGF0dXNfaWRzXCJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgbWF0U3VmZml4XG4gICAgICAoY2xpY2spPVwicmVzZXRGaWVsZCgndGFza19zdGF0dXNfaWRzJylcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiZmlsdGVyRm9ybS5nZXQoJ3NlcnZpY2VfY2VudGVyX2lkcycpXCI+XG4gICAgPG1hdC1sYWJlbD5TZXJ2aWNlIENlbnRlcjwvbWF0LWxhYmVsPlxuICAgIDxhcHAtc2VhcmNoYWJsZS1zZWxlY3RvclxuICAgICAgYXBpVXJsPVwiYXBpL2FjY291bnRpbmctcGx1cy9zZXJ2aWNlLWNlbnRlcnNcIlxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VydmljZV9jZW50ZXJfaWRzXCJcbiAgICAgIHRpdGxlRmllbGQ9XCJuYW1lXCJcbiAgICAgIFtlbmFibGVTZWFyY2hdPVwiZmFsc2VcIlxuICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgID5cbiAgICA8L2FwcC1zZWFyY2hhYmxlLXNlbGVjdG9yPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiZmlsdGVyRm9ybS52YWx1ZT8uc2VydmljZV9jZW50ZXJfaWRzXCJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgbWF0U3VmZml4XG4gICAgICAoY2xpY2spPVwicmVzZXRGaWVsZCgnc2VydmljZV9jZW50ZXJfaWRzJylcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiZmlsdGVyRm9ybS5nZXQoJ2ZpeGVkX2Fzc2V0X21haW50ZW5hbmNlX3N0YXR1c19pZHMnKVwiPlxuICAgIDxtYXQtbGFiZWw+U3RhdHVzPC9tYXQtbGFiZWw+XG4gICAgPGFwcC1zZWFyY2hhYmxlLXNlbGVjdG9yXG4gICAgICBhcGlVcmw9XCJhcGkvYWNjb3VudGluZy1wbHVzL2ZpeGVkLWFzc2V0LW1haW50ZW5hbmNlLXN0YXR1c2VzXCJcbiAgICAgIGZvcm1Db250cm9sTmFtZT1cImZpeGVkX2Fzc2V0X21haW50ZW5hbmNlX3N0YXR1c19pZHNcIlxuICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgW2VuYWJsZVNlYXJjaF09XCJmYWxzZVwiXG4gICAgPlxuICAgIDwvYXBwLXNlYXJjaGFibGUtc2VsZWN0b3I+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJmaWx0ZXJGb3JtLnZhbHVlPy5maXhlZF9hc3NldF9tYWludGVuYW5jZV9zdGF0dXNfaWRzXCJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgbWF0U3VmZml4XG4gICAgICAoY2xpY2spPVwicmVzZXRGaWVsZCgnZml4ZWRfYXNzZXRfbWFpbnRlbmFuY2Vfc3RhdHVzX2lkcycpXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cImZpbHRlckZvcm0uZ2V0KCdncm91cF9ieScpXCI+XG4gICAgPG1hdC1sYWJlbD5Hcm91cCBCeTwvbWF0LWxhYmVsPlxuICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImdyb3VwX2J5XCI+XG4gICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIndlZWtcIj5XZWVrPC9tYXQtb3B0aW9uPlxuICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJtb250aFwiPk1vbnRoPC9tYXQtb3B0aW9uPlxuICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJ5ZWFyXCI+WWVhcjwvbWF0LW9wdGlvbj5cbiAgICA8L21hdC1zZWxlY3Q+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG48L2Zvcm0+XG4iXX0=
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { NgModule } from "@angular/core";
|
|
2
|
+
import { CommonModule } from "@angular/common";
|
|
3
|
+
import { TechlifyFilterComponent } from "./techlify-filter.component";
|
|
4
|
+
import { ReactiveFormsModule } from "@angular/forms";
|
|
5
|
+
import { FlexLayoutModule } from "@angular/flex-layout";
|
|
6
|
+
import { MaterialModule, SearchableSelectorModule, TimelineFilterModule, } from "ngx-techlify-core";
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export class TechlifyFilterModule {
|
|
9
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TechlifyFilterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
10
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: TechlifyFilterModule, declarations: [TechlifyFilterComponent], imports: [CommonModule,
|
|
11
|
+
ReactiveFormsModule,
|
|
12
|
+
FlexLayoutModule,
|
|
13
|
+
SearchableSelectorModule,
|
|
14
|
+
TimelineFilterModule,
|
|
15
|
+
MaterialModule], exports: [TechlifyFilterComponent] });
|
|
16
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TechlifyFilterModule, imports: [CommonModule,
|
|
17
|
+
ReactiveFormsModule,
|
|
18
|
+
FlexLayoutModule,
|
|
19
|
+
SearchableSelectorModule,
|
|
20
|
+
TimelineFilterModule,
|
|
21
|
+
MaterialModule] });
|
|
22
|
+
}
|
|
23
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TechlifyFilterModule, decorators: [{
|
|
24
|
+
type: NgModule,
|
|
25
|
+
args: [{
|
|
26
|
+
declarations: [TechlifyFilterComponent],
|
|
27
|
+
imports: [
|
|
28
|
+
CommonModule,
|
|
29
|
+
ReactiveFormsModule,
|
|
30
|
+
FlexLayoutModule,
|
|
31
|
+
SearchableSelectorModule,
|
|
32
|
+
TimelineFilterModule,
|
|
33
|
+
MaterialModule,
|
|
34
|
+
],
|
|
35
|
+
exports: [TechlifyFilterComponent],
|
|
36
|
+
}]
|
|
37
|
+
}] });
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVjaGxpZnktZmlsdGVyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ludmVudG9yeS1jb21tb24vc3JjL2xpYi9pbnZlbnRvcnktY29tbW9uL3RlY2hsaWZ5LWZpbHRlci90ZWNobGlmeS1maWx0ZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFDTCxjQUFjLEVBQ2Qsd0JBQXdCLEVBQ3hCLG9CQUFvQixHQUNyQixNQUFNLG1CQUFtQixDQUFDOztBQWMzQixNQUFNLE9BQU8sb0JBQW9CO3dHQUFwQixvQkFBb0I7eUdBQXBCLG9CQUFvQixpQkFYaEIsdUJBQXVCLGFBRXBDLFlBQVk7WUFDWixtQkFBbUI7WUFDbkIsZ0JBQWdCO1lBQ2hCLHdCQUF3QjtZQUN4QixvQkFBb0I7WUFDcEIsY0FBYyxhQUVOLHVCQUF1Qjt5R0FFdEIsb0JBQW9CLFlBVDdCLFlBQVk7WUFDWixtQkFBbUI7WUFDbkIsZ0JBQWdCO1lBQ2hCLHdCQUF3QjtZQUN4QixvQkFBb0I7WUFDcEIsY0FBYzs7NEZBSUwsb0JBQW9CO2tCQVpoQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLHVCQUF1QixDQUFDO29CQUN2QyxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGdCQUFnQjt3QkFDaEIsd0JBQXdCO3dCQUN4QixvQkFBb0I7d0JBQ3BCLGNBQWM7cUJBQ2Y7b0JBQ0QsT0FBTyxFQUFFLENBQUMsdUJBQXVCLENBQUM7aUJBQ25DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgVGVjaGxpZnlGaWx0ZXJDb21wb25lbnQgfSBmcm9tIFwiLi90ZWNobGlmeS1maWx0ZXIuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBGbGV4TGF5b3V0TW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2ZsZXgtbGF5b3V0XCI7XG5pbXBvcnQge1xuICBNYXRlcmlhbE1vZHVsZSxcbiAgU2VhcmNoYWJsZVNlbGVjdG9yTW9kdWxlLFxuICBUaW1lbGluZUZpbHRlck1vZHVsZSxcbn0gZnJvbSBcIm5neC10ZWNobGlmeS1jb3JlXCI7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1RlY2hsaWZ5RmlsdGVyQ29tcG9uZW50XSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZsZXhMYXlvdXRNb2R1bGUsXG4gICAgU2VhcmNoYWJsZVNlbGVjdG9yTW9kdWxlLFxuICAgIFRpbWVsaW5lRmlsdGVyTW9kdWxlLFxuICAgIE1hdGVyaWFsTW9kdWxlLFxuICBdLFxuICBleHBvcnRzOiBbVGVjaGxpZnlGaWx0ZXJDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBUZWNobGlmeUZpbHRlck1vZHVsZSB7fVxuIl19
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Public API Surface of inventory-common
|
|
3
|
+
*/
|
|
4
|
+
export * from './lib/inventory-common/inventory-common-routing.module';
|
|
5
|
+
export * from './lib/inventory-common/inventory-common.module';
|
|
6
|
+
export * from './lib/inventory-common/stock-summary.service';
|
|
7
|
+
export * from './lib/inventory-common/techlify-filter/techlify-filter.module';
|
|
8
|
+
export * from './lib/inventory-common/techlify-filter/techlify-filter.component';
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2ludmVudG9yeS1jb21tb24vc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLHdEQUF3RCxDQUFDO0FBQ3ZFLGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYyw4Q0FBOEMsQ0FBQztBQUU3RCxjQUFjLCtEQUErRCxDQUFDO0FBQzlFLGNBQWMsa0VBQWtFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIGludmVudG9yeS1jb21tb25cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnZlbnRvcnktY29tbW9uL2ludmVudG9yeS1jb21tb24tcm91dGluZy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaW52ZW50b3J5LWNvbW1vbi9pbnZlbnRvcnktY29tbW9uLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnZlbnRvcnktY29tbW9uL3N0b2NrLXN1bW1hcnkuc2VydmljZSc7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL2ludmVudG9yeS1jb21tb24vdGVjaGxpZnktZmlsdGVyL3RlY2hsaWZ5LWZpbHRlci5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaW52ZW50b3J5LWNvbW1vbi90ZWNobGlmeS1maWx0ZXIvdGVjaGxpZnktZmlsdGVyLmNvbXBvbmVudCc7XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVjaGxpZnktaW52ZW50b3J5LWNvbW1vbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2ludmVudG9yeS1jb21tb24vc3JjL3RlY2hsaWZ5LWludmVudG9yeS1jb21tb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|