techlify-inventory-common 18.48.0 → 18.50.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/incident/incident-form/incident-form.component.mjs +2 -2
- package/esm2022/lib/inventory-common/incident/incident-list/incident-list.component.mjs +2 -2
- package/esm2022/lib/inventory-common/location/location-form/location-form.component.mjs +3 -3
- package/esm2022/lib/inventory-common/location/location-status-changer/location-status-changer.component.mjs +1 -1
- package/esm2022/lib/inventory-common/location/location.service.mjs +3 -3
- package/esm2022/lib/inventory-common/location/shelf/shelf-form/shelf-form.component.mjs +3 -3
- package/esm2022/lib/inventory-common/location/shelf/shelf-list/shelf-list.component.mjs +2 -2
- package/esm2022/lib/inventory-common/product/product-batch-update-form/product-batch-update-form.component.mjs +1 -1
- package/esm2022/lib/inventory-common/product/product-form/product-form.component.mjs +1 -1
- package/esm2022/lib/inventory-common/product/product-list/product-list.component.mjs +1 -1
- package/esm2022/lib/inventory-common/rating/rating-form/rating-form.component.mjs +2 -2
- package/esm2022/lib/inventory-common/rating/rating-list/rating-list.component.mjs +2 -2
- package/esm2022/lib/inventory-common/reports/inventory-value-report/inventory-value-report.component.mjs +2 -2
- package/esm2022/lib/inventory-common/reports/low-stock-report/low-stock-report.component.mjs +2 -2
- package/esm2022/lib/inventory-common/reports/stock-issue-summary-report/stock-issue-summary-report.component.mjs +2 -2
- package/esm2022/lib/inventory-common/shared.module.mjs +10 -4
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-form/stock-issue-form.component.mjs +10 -6
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-page/stock-issue-page.component.mjs +1 -1
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-product-form/stock-issue-product-form.component.mjs +3 -3
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-product-view/stock-issue-product-view.component.mjs +2 -2
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-single-product-form/stock-issue-single-product-form.component.mjs +4 -4
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-view/stock-issue-view.component.mjs +2 -2
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form.component.mjs +8 -6
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-product-form/stock-receipt-product-form.component.mjs +3 -3
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-product-view/stock-receipt-product-view.component.mjs +2 -2
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-single-product-form/stock-receipt-simple-form/stock-receipt-single-product-form.component.mjs +4 -6
- 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-page/stock-receipts-page.component.mjs +1 -1
- package/esm2022/lib/inventory-common/stock-transfer/stock-transfer-form/stock-transfer-form.component.mjs +3 -3
- package/esm2022/lib/inventory-common/stock-transfer/stock-transfer-list/stock-transfer-list.component.mjs +1 -1
- package/esm2022/lib/inventory-common/supplier/payee-selector/payee-selector/payee-selector.component.mjs +1 -1
- package/esm2022/lib/inventory-common/supplier/purchase-order/purchase-order-form/purchase-order-form.component.mjs +2 -2
- package/esm2022/lib/inventory-common/supplier/purchase-order/purchase-order-listing/purchase-order-listing.component.mjs +2 -2
- package/esm2022/lib/inventory-common/supplier/purchase-order/purchase-order-product-list/purchase-order-product-form/purchase-order-product-form.component.mjs +1 -1
- package/esm2022/lib/inventory-common/supplier/supplier-branches-list/supplier-branches-list.component.mjs +12 -12
- package/esm2022/lib/inventory-common/supplier/supplier-form/supplier-form.component.mjs +47 -56
- package/esm2022/lib/inventory-common/supplier/supplier-information/supplier-information.component.mjs +1 -1
- package/esm2022/lib/inventory-common/supplier/supplier-list/supplier-list.component.mjs +68 -0
- package/esm2022/lib/inventory-common/supplier/supplier-routing.module.mjs +3 -3
- package/esm2022/lib/inventory-common/supplier/supplier-view/supplier-view.component.mjs +11 -11
- package/esm2022/lib/inventory-common/supplier/supplier.module.mjs +10 -45
- package/esm2022/lib/inventory-common/techlify-filter/techlify-filter.component.mjs +1 -1
- package/esm2022/public-api.mjs +2 -3
- package/fesm2022/{techlify-inventory-common-category.module-VjAS4ehQ.mjs → techlify-inventory-common-category.module-CGzFP2S_.mjs} +8 -8
- package/fesm2022/{techlify-inventory-common-category.module-VjAS4ehQ.mjs.map → techlify-inventory-common-category.module-CGzFP2S_.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-purchase-order-view.component-D5GrUK-m.mjs → techlify-inventory-common-purchase-order-view.component-5mLg0IvH.mjs} +7 -7
- package/fesm2022/{techlify-inventory-common-purchase-order-view.component-D5GrUK-m.mjs.map → techlify-inventory-common-purchase-order-view.component-5mLg0IvH.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-recipient.module-BnRAWk8N.mjs → techlify-inventory-common-recipient.module-DLoP6xI3.mjs} +7 -7
- package/fesm2022/{techlify-inventory-common-recipient.module-BnRAWk8N.mjs.map → techlify-inventory-common-recipient.module-DLoP6xI3.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-stock-issue-form.component-B-aNyhLA.mjs → techlify-inventory-common-stock-issue-form.component-MYEKRteU.mjs} +13 -8
- package/fesm2022/techlify-inventory-common-stock-issue-form.component-MYEKRteU.mjs.map +1 -0
- package/fesm2022/{techlify-inventory-common-stock-issue-product-view.component-BP2yFaQn.mjs → techlify-inventory-common-stock-issue-product-view.component-C-c83FEn.mjs} +3 -3
- package/fesm2022/{techlify-inventory-common-stock-issue-product-view.component-BP2yFaQn.mjs.map → techlify-inventory-common-stock-issue-product-view.component-C-c83FEn.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-stock-issue-view.component-DHdnoIR8.mjs → techlify-inventory-common-stock-issue-view.component-Co7hXpDq.mjs} +3 -3
- package/fesm2022/{techlify-inventory-common-stock-issue-view.component-DHdnoIR8.mjs.map → techlify-inventory-common-stock-issue-view.component-Co7hXpDq.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-techlify-inventory-common-DuAN6iqX.mjs → techlify-inventory-common-techlify-inventory-common-CWxzlvVi.mjs} +231 -435
- package/fesm2022/techlify-inventory-common-techlify-inventory-common-CWxzlvVi.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common.mjs +1 -1
- package/lib/inventory-common/location/location.service.d.ts +1 -1
- package/lib/inventory-common/shared.module.d.ts +1 -1
- package/lib/inventory-common/stock-issue/stock-issue-form/stock-issue-form.component.d.ts +1 -0
- package/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form.component.d.ts +1 -0
- package/lib/inventory-common/stock-receipts/stock-receipts.module.d.ts +1 -1
- package/lib/inventory-common/supplier/supplier-form/supplier-form.component.d.ts +13 -12
- package/lib/inventory-common/supplier/supplier-list/supplier-list.component.d.ts +20 -0
- package/lib/inventory-common/supplier/supplier.module.d.ts +13 -20
- package/package.json +1 -1
- package/public-api.d.ts +1 -2
- package/esm2022/lib/inventory-common/location/location-selector/location-selector.component.mjs +0 -161
- package/esm2022/lib/inventory-common/supplier/supplier-form/supplier-form-button/supplier-form-button.component.mjs +0 -43
- package/esm2022/lib/inventory-common/supplier/suppliers-list/suppliers-list.component.mjs +0 -59
- package/fesm2022/techlify-inventory-common-stock-issue-form.component-B-aNyhLA.mjs.map +0 -1
- package/fesm2022/techlify-inventory-common-techlify-inventory-common-DuAN6iqX.mjs.map +0 -1
- package/lib/inventory-common/location/location-selector/location-selector.component.d.ts +0 -46
- package/lib/inventory-common/supplier/supplier-form/supplier-form-button/supplier-form-button.component.d.ts +0 -13
- package/lib/inventory-common/supplier/suppliers-list/suppliers-list.component.d.ts +0 -15
|
@@ -86,7 +86,7 @@ export class StockIssueSummaryReportComponent extends TechlifyListComponent {
|
|
|
86
86
|
});
|
|
87
87
|
}
|
|
88
88
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StockIssueSummaryReportComponent, deps: [{ token: i1.StockIssueProductDataService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
|
|
89
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: StockIssueSummaryReportComponent, isStandalone: true, selector: "app-stock-issue-summary-report", usesInheritance: true, ngImport: i0, template: "<div class=\"d-flex flex-column gap-2\">\n <mat-card>\n <mat-card-content class=\"d-flex flex-row align-items-center justify-content-between\">\n <h5 class=\"mb-0\">Stock Issue Summary Report</h5>\n\n <form class=\"d-flex flex-row gap-1\" [formGroup]=\"filterForm\">\n <mat-form-field class=\"fl-md\">\n <mat-label>Search</mat-label>\n <input matInput placeholder=\"Search products\" formControlName=\"search\" />\n </mat-form-field>\n\n <app-timeline-filter appearance=\"fill\" labelText=\"Period\" formControlName=\"duration\" [form]=\"filterForm\"\n [showClearButton]=\"true\"></app-timeline-filter>\n\n <mat-form-field>\n <mat-label>Category</mat-label>\n <app-searchable-selector formControlName=\"category_ids\" apiUrl=\"api/product-categories\"\n [multiple]=\"true\"></app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Location From</mat-label>\n <app-searchable-selector formControlName=\"location_ids\" apiUrl=\"api/inventory-locations\"\n [multiple]=\"true\"></app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Primary Group By</mat-label>\n <mat-select required formControlName=\"primary_group_by\">\n <mat-option value=\"location\">Location</mat-option>\n <mat-option value=\"recipient\">Recipient</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Secondary Group By</mat-label>\n <mat-select required formControlName=\"secondary_group_by\">\n <mat-option value=\"product\">Product</mat-option>\n </mat-select>\n </mat-form-field>\n </form>\n </mat-card-content>\n </mat-card>\n\n <mat-card *ngFor=\"let group of primaryGroups()\">\n <mat-card-content class=\"p-0\">\n <h6 class=\"px-3 pt-3 mb-2 fw-bold\">{{ group.label }}</h6>\n\n <table mat-table [dataSource]=\"group.models\" class=\"w-100\">\n <ng-container matColumnDef=\"#\">\n <th mat-header-cell *matHeaderCellDef>#</th>\n <td mat-cell *matCellDef=\"let element; let i = index\">{{ i + 1 }}</td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"product\">\n <th mat-header-cell *matHeaderCellDef>Product</th>\n <td mat-cell *matCellDef=\"let element\">\n <a [routerLink]=\"['/inventory/products', element?.product?.id, 'view']\" class=\"text-dark\">\n {{ element?.product?.name }}\n </a>\n </td>\n <td mat-footer-cell *matFooterCellDef> <strong> Total </strong> </td>\n </ng-container>\n\n <ng-container matColumnDef=\"sku\">\n <th mat-header-cell *matHeaderCellDef>SKU</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.product?.sku }}</td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"categories\">\n <th mat-header-cell *matHeaderCellDef>Categories</th>\n <td mat-cell *matCellDef=\"let element\">\n <app-product-category-badges [product]=\"element?.product\"></app-product-category-badges>\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"stock_issues\">\n <th mat-header-cell *matHeaderCellDef>Stock Issues</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.total_quantity }}</td>\n <td mat-footer-cell *matFooterCellDef> <strong> {{ group?.grand_total_quantity }} </strong> </td>\n </ng-container>\n\n <ng-container matColumnDef=\"stock_issues_avco\">\n <th mat-header-cell *matHeaderCellDef> Total Cost (AVCO) </th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.total_avco | currency }}</td>\n <td mat-footer-cell *matFooterCellDef> <strong> {{ group?.grand_total_avco | currency }} </strong> </td>\n </ng-container>\n\n <ng-container matColumnDef=\"total_cost\">\n <th mat-header-cell *matHeaderCellDef> Total Cost (FIFO) </th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.total_fifo_value | currency }}</td>\n <td mat-footer-cell *matFooterCellDef> <strong> {{ group?.grand_total_fifo_value | currency }} </strong> </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n <tr [hidden]=\"!group?.grand_total_avco && !group?.grand_total_quantity\" mat-footer-row\n *matFooterRowDef=\"displayedColumns\"></tr>\n </table>\n\n <p *ngIf=\"!group.models.length\" class=\"px-3 py-2 mb-0 text-secondary\">No stock issues for this group.</p>\n </mat-card-content>\n </mat-card>\n\n <mat-card *ngIf=\"!isWorking && !primaryGroups().length\">\n <mat-card-content class=\"text-secondary text-center py-4\">\n No stock issues found for the selected filters.\n </mat-card-content>\n </mat-card>\n\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: SharedModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i5.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i5.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.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: i8.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i9.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: "component", type: i10.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i10.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i10.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i10.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i10.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i10.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i10.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i10.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i10.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i10.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i10.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i10.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i10.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i10.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { 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.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"] }, { kind: "directive", type: i11.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i12.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", "isEmitInitialEvent", "required", "disabled", "value"], outputs: ["selectedValueChange", "selectionChange", "itemsChange"] }, { kind: "component", type: i12.TimelineFilterComponent, selector: "app-timeline-filter", inputs: ["defaultValue", "required", "disabled", "value", "timelines", "dateFrom", "dateTo", "appearance", "showClearButton", "form", "labelText"], outputs: ["selectionChange"] }, { kind: "pipe", type: i3.CurrencyPipe, name: "currency" }, { kind: "component", type: ProductCategoryBadgesComponent, selector: "app-product-category-badges", inputs: ["product"] }], preserveWhitespaces: true });
|
|
89
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: StockIssueSummaryReportComponent, isStandalone: true, selector: "app-stock-issue-summary-report", usesInheritance: true, ngImport: i0, template: "<div class=\"d-flex flex-column gap-2\">\n <mat-card>\n <mat-card-content class=\"d-flex flex-row align-items-center justify-content-between\">\n <h5 class=\"mb-0\">Stock Issue Summary Report</h5>\n\n <form class=\"d-flex flex-row gap-1\" [formGroup]=\"filterForm\">\n <mat-form-field class=\"fl-md\">\n <mat-label>Search</mat-label>\n <input matInput placeholder=\"Search products\" formControlName=\"search\" />\n </mat-form-field>\n\n <app-timeline-filter appearance=\"fill\" labelText=\"Period\" formControlName=\"duration\" [form]=\"filterForm\"\n [showClearButton]=\"true\"></app-timeline-filter>\n\n <mat-form-field>\n <mat-label>Category</mat-label>\n <app-searchable-selector formControlName=\"category_ids\" apiUrl=\"api/product-categories\"\n [multiple]=\"true\"></app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Location From</mat-label>\n <app-searchable-selector formControlName=\"location_ids\" apiUrl=\"api/inventory-locations\"\n [multiple]=\"true\"></app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Primary Group By</mat-label>\n <mat-select required formControlName=\"primary_group_by\">\n <mat-option value=\"location\">Location</mat-option>\n <mat-option value=\"recipient\">Recipient</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Secondary Group By</mat-label>\n <mat-select required formControlName=\"secondary_group_by\">\n <mat-option value=\"product\">Product</mat-option>\n </mat-select>\n </mat-form-field>\n </form>\n </mat-card-content>\n </mat-card>\n\n <mat-card *ngFor=\"let group of primaryGroups()\">\n <mat-card-content class=\"p-0\">\n <h6 class=\"px-3 pt-3 mb-2 fw-bold\">{{ group.label }}</h6>\n\n <table mat-table [dataSource]=\"group.models\" class=\"w-100\">\n <ng-container matColumnDef=\"#\">\n <th mat-header-cell *matHeaderCellDef>#</th>\n <td mat-cell *matCellDef=\"let element; let i = index\">{{ i + 1 }}</td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"product\">\n <th mat-header-cell *matHeaderCellDef>Product</th>\n <td mat-cell *matCellDef=\"let element\">\n <a [routerLink]=\"['/inventory/products', element?.product?.id, 'view']\" class=\"text-dark\">\n {{ element?.product?.name }}\n </a>\n </td>\n <td mat-footer-cell *matFooterCellDef> <strong> Total </strong> </td>\n </ng-container>\n\n <ng-container matColumnDef=\"sku\">\n <th mat-header-cell *matHeaderCellDef>SKU</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.product?.sku }}</td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"categories\">\n <th mat-header-cell *matHeaderCellDef>Categories</th>\n <td mat-cell *matCellDef=\"let element\">\n <app-product-category-badges [product]=\"element?.product\"></app-product-category-badges>\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"stock_issues\">\n <th mat-header-cell *matHeaderCellDef>Stock Issues</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.total_quantity }}</td>\n <td mat-footer-cell *matFooterCellDef> <strong> {{ group?.grand_total_quantity }} </strong> </td>\n </ng-container>\n\n <ng-container matColumnDef=\"stock_issues_avco\">\n <th mat-header-cell *matHeaderCellDef> Total Cost (AVCO) </th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.total_avco | currency }}</td>\n <td mat-footer-cell *matFooterCellDef> <strong> {{ group?.grand_total_avco | currency }} </strong> </td>\n </ng-container>\n\n <ng-container matColumnDef=\"total_cost\">\n <th mat-header-cell *matHeaderCellDef> Total Cost (FIFO) </th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.total_fifo_value | currency }}</td>\n <td mat-footer-cell *matFooterCellDef> <strong> {{ group?.grand_total_fifo_value | currency }} </strong> </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n <tr [hidden]=\"!group?.grand_total_avco && !group?.grand_total_quantity\" mat-footer-row\n *matFooterRowDef=\"displayedColumns\"></tr>\n </table>\n\n <p *ngIf=\"!group.models.length\" class=\"px-3 py-2 mb-0 text-secondary\">No stock issues for this group.</p>\n </mat-card-content>\n </mat-card>\n\n <mat-card *ngIf=\"!isWorking && !primaryGroups().length\">\n <mat-card-content class=\"text-secondary text-center py-4\">\n No stock issues found for the selected filters.\n </mat-card-content>\n </mat-card>\n\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: SharedModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i5.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i5.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.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: i8.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i9.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: "component", type: i10.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i10.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i10.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i10.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i10.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i10.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i10.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i10.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i10.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i10.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i10.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i10.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i10.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i10.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { 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.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"] }, { kind: "directive", type: i11.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i12.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", "isEmitInitialEvent", "required", "disabled", "value"], outputs: ["selectedValueChange", "selectionChange", "itemsChange", "isItemsEmpty"] }, { kind: "component", type: i12.TimelineFilterComponent, selector: "app-timeline-filter", inputs: ["defaultValue", "required", "disabled", "value", "timelines", "dateFrom", "dateTo", "appearance", "showClearButton", "form", "labelText"], outputs: ["selectionChange"] }, { kind: "pipe", type: i3.CurrencyPipe, name: "currency" }, { kind: "component", type: ProductCategoryBadgesComponent, selector: "app-product-category-badges", inputs: ["product"] }], preserveWhitespaces: true });
|
|
90
90
|
}
|
|
91
91
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StockIssueSummaryReportComponent, decorators: [{
|
|
92
92
|
type: Component,
|
|
@@ -95,4 +95,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
95
95
|
ProductCategoryBadgesComponent,
|
|
96
96
|
], template: "<div class=\"d-flex flex-column gap-2\">\n <mat-card>\n <mat-card-content class=\"d-flex flex-row align-items-center justify-content-between\">\n <h5 class=\"mb-0\">Stock Issue Summary Report</h5>\n\n <form class=\"d-flex flex-row gap-1\" [formGroup]=\"filterForm\">\n <mat-form-field class=\"fl-md\">\n <mat-label>Search</mat-label>\n <input matInput placeholder=\"Search products\" formControlName=\"search\" />\n </mat-form-field>\n\n <app-timeline-filter appearance=\"fill\" labelText=\"Period\" formControlName=\"duration\" [form]=\"filterForm\"\n [showClearButton]=\"true\"></app-timeline-filter>\n\n <mat-form-field>\n <mat-label>Category</mat-label>\n <app-searchable-selector formControlName=\"category_ids\" apiUrl=\"api/product-categories\"\n [multiple]=\"true\"></app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Location From</mat-label>\n <app-searchable-selector formControlName=\"location_ids\" apiUrl=\"api/inventory-locations\"\n [multiple]=\"true\"></app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Primary Group By</mat-label>\n <mat-select required formControlName=\"primary_group_by\">\n <mat-option value=\"location\">Location</mat-option>\n <mat-option value=\"recipient\">Recipient</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Secondary Group By</mat-label>\n <mat-select required formControlName=\"secondary_group_by\">\n <mat-option value=\"product\">Product</mat-option>\n </mat-select>\n </mat-form-field>\n </form>\n </mat-card-content>\n </mat-card>\n\n <mat-card *ngFor=\"let group of primaryGroups()\">\n <mat-card-content class=\"p-0\">\n <h6 class=\"px-3 pt-3 mb-2 fw-bold\">{{ group.label }}</h6>\n\n <table mat-table [dataSource]=\"group.models\" class=\"w-100\">\n <ng-container matColumnDef=\"#\">\n <th mat-header-cell *matHeaderCellDef>#</th>\n <td mat-cell *matCellDef=\"let element; let i = index\">{{ i + 1 }}</td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"product\">\n <th mat-header-cell *matHeaderCellDef>Product</th>\n <td mat-cell *matCellDef=\"let element\">\n <a [routerLink]=\"['/inventory/products', element?.product?.id, 'view']\" class=\"text-dark\">\n {{ element?.product?.name }}\n </a>\n </td>\n <td mat-footer-cell *matFooterCellDef> <strong> Total </strong> </td>\n </ng-container>\n\n <ng-container matColumnDef=\"sku\">\n <th mat-header-cell *matHeaderCellDef>SKU</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.product?.sku }}</td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"categories\">\n <th mat-header-cell *matHeaderCellDef>Categories</th>\n <td mat-cell *matCellDef=\"let element\">\n <app-product-category-badges [product]=\"element?.product\"></app-product-category-badges>\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"stock_issues\">\n <th mat-header-cell *matHeaderCellDef>Stock Issues</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.total_quantity }}</td>\n <td mat-footer-cell *matFooterCellDef> <strong> {{ group?.grand_total_quantity }} </strong> </td>\n </ng-container>\n\n <ng-container matColumnDef=\"stock_issues_avco\">\n <th mat-header-cell *matHeaderCellDef> Total Cost (AVCO) </th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.total_avco | currency }}</td>\n <td mat-footer-cell *matFooterCellDef> <strong> {{ group?.grand_total_avco | currency }} </strong> </td>\n </ng-container>\n\n <ng-container matColumnDef=\"total_cost\">\n <th mat-header-cell *matHeaderCellDef> Total Cost (FIFO) </th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.total_fifo_value | currency }}</td>\n <td mat-footer-cell *matFooterCellDef> <strong> {{ group?.grand_total_fifo_value | currency }} </strong> </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n <tr [hidden]=\"!group?.grand_total_avco && !group?.grand_total_quantity\" mat-footer-row\n *matFooterRowDef=\"displayedColumns\"></tr>\n </table>\n\n <p *ngIf=\"!group.models.length\" class=\"px-3 py-2 mb-0 text-secondary\">No stock issues for this group.</p>\n </mat-card-content>\n </mat-card>\n\n <mat-card *ngIf=\"!isWorking && !primaryGroups().length\">\n <mat-card-content class=\"text-secondary text-center py-4\">\n No stock issues found for the selected filters.\n </mat-card-content>\n </mat-card>\n\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n</div>\n" }]
|
|
97
97
|
}], ctorParameters: () => [{ type: i1.StockIssueProductDataService }, { type: i2.FormBuilder }] });
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvY2staXNzdWUtc3VtbWFyeS1yZXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52ZW50b3J5LWNvbW1vbi9zcmMvbGliL2ludmVudG9yeS1jb21tb24vcmVwb3J0cy9zdG9jay1pc3N1ZS1zdW1tYXJ5LXJlcG9ydC9zdG9jay1pc3N1ZS1zdW1tYXJ5LXJlcG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZlbnRvcnktY29tbW9uL3NyYy9saWIvaW52ZW50b3J5LWNvbW1vbi9yZXBvcnRzL3N0b2NrLWlzc3VlLXN1bW1hcnktcmVwb3J0L3N0b2NrLWlzc3VlLXN1bW1hcnktcmVwb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFcEUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0saUZBQWlGLENBQUM7QUFFakksT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQXFCMUMsTUFBTSxPQUFPLGdDQUFpQyxTQUFRLHFCQUFxQjtJQWNwRDtJQUNYO0lBZFYsZ0JBQWdCLEdBQWE7UUFDM0IsR0FBRztRQUNILFNBQVM7UUFDVCxLQUFLO1FBQ0wsWUFBWTtRQUNaLGNBQWM7UUFDZCxtQkFBbUI7UUFDbkIsWUFBWTtLQUNiLENBQUM7SUFFRixhQUFhLEdBQUcsTUFBTSxDQUFpQixFQUFFLENBQUMsQ0FBQztJQUUzQyxZQUNxQixPQUFxQyxFQUNoRCxFQUFlO1FBRXZCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUhJLFlBQU8sR0FBUCxPQUFPLENBQThCO1FBQ2hELE9BQUUsR0FBRixFQUFFLENBQWE7UUFJdkIsSUFBSSxDQUFDLHVCQUF1QixHQUFHO1lBQzdCLFlBQVksRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7WUFDaEMsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtTQUNqQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUM5QixZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDbEIsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2YsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2IsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUM5QixZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDbEIsZ0JBQWdCLEVBQUUsQ0FBQyxVQUFVLENBQUM7WUFDOUIsa0JBQWtCLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDL0IsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO1NBQ2IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRVEsUUFBUTtRQUNmLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGlCQUFpQixDQUN6RCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUNsRCxDQUFDO1FBRUYsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFFdEIsSUFBSSxDQUFDLE9BQU87YUFDVCxLQUFLLENBQUMsT0FBTyxDQUFDO2FBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUM5QyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUN0QixNQUFNLElBQUksR0FBVSxHQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNwQyxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBd0IsQ0FBQztZQUVuRCxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ3hCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLElBQUksTUFBTSxDQUFDLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3pCLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO3dCQUNsQixFQUFFLEVBQUUsR0FBRyxDQUFDLGdCQUFnQjt3QkFDeEIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxtQkFBbUIsSUFBSSxTQUFTO3dCQUMzQyxNQUFNLEVBQUUsRUFBRTt3QkFDVixvQkFBb0IsRUFBRSxDQUFDO3dCQUN2QixnQkFBZ0IsRUFBRSxDQUFDO3dCQUNuQixzQkFBc0IsRUFBRSxDQUFDO3FCQUMxQixDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFFRCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBaUIsQ0FBQztnQkFDbEQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZCLEtBQUssQ0FBQyxvQkFBb0IsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDOUQsS0FBSyxDQUFDLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN0RCxLQUFLLENBQUMsc0JBQXNCLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwRSxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7d0dBakZVLGdDQUFnQzs0RkFBaEMsZ0NBQWdDLGlIQzNCN0MsNnRLQW1IQSx5REQ5RkksWUFBWSw0OUtBQ1osOEJBQThCOzs0RkFLckIsZ0NBQWdDO2tCQVY1QyxTQUFTOytCQUNFLGdDQUFnQyxjQUM5QixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWiw4QkFBOEI7cUJBQy9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2hhcmVkTW9kdWxlIH0gZnJvbSAnLi4vLi4vc2hhcmVkLm1vZHVsZSc7XG5pbXBvcnQgeyBUZWNobGlmeUxpc3RDb21wb25lbnQsIFRpbWVsaW5lIH0gZnJvbSAnbmd4LXRlY2hsaWZ5LWNvcmUnO1xuaW1wb3J0IHsgU3RvY2tJc3N1ZVByb2R1Y3REYXRhU2VydmljZSB9IGZyb20gJy4vc3RvY2staXNzdWUtcHJvZHVjdC1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvZHVjdENhdGVnb3J5QmFkZ2VzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcHJvZHVjdC93aWRnZXRzL3Byb2R1Y3QtY2F0ZWdvcnktYmFkZ2VzL3Byb2R1Y3QtY2F0ZWdvcnktYmFkZ2VzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGZpbmFsaXplIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbnRlcmZhY2UgUHJpbWFyeUdyb3VwIHtcbiAgaWQ6IG51bWJlciB8IG51bGw7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIG1vZGVsczogYW55W107XG4gIGdyYW5kX3RvdGFsX3F1YW50aXR5OiBudW1iZXI7XG4gIGdyYW5kX3RvdGFsX2F2Y286IG51bWJlcjtcbiAgZ3JhbmRfdG90YWxfZmlmb192YWx1ZTogbnVtYmVyO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtc3RvY2staXNzdWUtc3VtbWFyeS1yZXBvcnQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgU2hhcmVkTW9kdWxlLFxuICAgIFByb2R1Y3RDYXRlZ29yeUJhZGdlc0NvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0b2NrLWlzc3VlLXN1bW1hcnktcmVwb3J0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3N0b2NrLWlzc3VlLXN1bW1hcnktcmVwb3J0LmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBTdG9ja0lzc3VlU3VtbWFyeVJlcG9ydENvbXBvbmVudCBleHRlbmRzIFRlY2hsaWZ5TGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGRpc3BsYXllZENvbHVtbnM6IHN0cmluZ1tdID0gW1xuICAgICcjJyxcbiAgICAncHJvZHVjdCcsXG4gICAgJ3NrdScsXG4gICAgJ2NhdGVnb3JpZXMnLFxuICAgICdzdG9ja19pc3N1ZXMnLFxuICAgICdzdG9ja19pc3N1ZXNfYXZjbycsXG4gICAgJ3RvdGFsX2Nvc3QnXG4gIF07XG5cbiAgcHJpbWFyeUdyb3VwcyA9IHNpZ25hbDxQcmltYXJ5R3JvdXBbXT4oW10pO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBzZXJ2aWNlOiBTdG9ja0lzc3VlUHJvZHVjdERhdGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyXG4gICkge1xuICAgIHN1cGVyKHNlcnZpY2UpO1xuXG4gICAgdGhpcy5maWx0ZXJGb3JtQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIGNhdGVnb3J5X2lkczogeyBtdWx0aXBsZTogdHJ1ZSB9LFxuICAgICAgbG9jYXRpb25faWRzOiB7IG11bHRpcGxlOiB0cnVlIH0sXG4gICAgfTtcblxuICAgIHRoaXMuZmlsdGVyRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgY2F0ZWdvcnlfaWRzOiBbJyddLFxuICAgICAgZGF0ZV9mcm9tOiBbJyddLFxuICAgICAgZGF0ZV90bzogWycnXSxcbiAgICAgIGR1cmF0aW9uOiBbVGltZWxpbmUuVEhJU19ZRUFSXSxcbiAgICAgIGxvY2F0aW9uX2lkczogWycnXSxcbiAgICAgIHByaW1hcnlfZ3JvdXBfYnk6IFsnbG9jYXRpb24nXSxcbiAgICAgIHNlY29uZGFyeV9ncm91cF9ieTogWydwcm9kdWN0J10sXG4gICAgICBzZWFyY2g6IFsnJ10sXG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnBhdGNoRmlsdGVyc0Zyb21Sb3V0ZSgpO1xuICAgIHRoaXMubGlzdGVuRmlsdGVyQ2hhbmdlcygpO1xuICB9XG5cbiAgb3ZlcnJpZGUgbG9hZERhdGEoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNXb3JraW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMucmVxdWVzdEhlbHBlclNlcnZpY2UuY29udmVydFRvRm9ybURhdGEoXG4gICAgICBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZmlsdGVyRm9ybS52YWx1ZSkpXG4gICAgKTtcblxuICAgIHRoaXMuaXNXb3JraW5nID0gdHJ1ZTtcblxuICAgIHRoaXMuc2VydmljZVxuICAgICAgLmluZGV4KGZpbHRlcnMpXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5pc1dvcmtpbmcgPSBmYWxzZSkpKVxuICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgcm93czogYW55W10gPSByZXM/LmRhdGEgPz8gW107XG4gICAgICAgIGNvbnN0IGdyb3Vwc0J5SWQgPSBuZXcgTWFwPHN0cmluZywgUHJpbWFyeUdyb3VwPigpO1xuXG4gICAgICAgIHJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBrZXkgPSBTdHJpbmcocm93LnByaW1hcnlfZ3JvdXBfaWQgPz8gJ25vbmUnKTtcbiAgICAgICAgICBpZiAoIWdyb3Vwc0J5SWQuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIGdyb3Vwc0J5SWQuc2V0KGtleSwge1xuICAgICAgICAgICAgICBpZDogcm93LnByaW1hcnlfZ3JvdXBfaWQsXG4gICAgICAgICAgICAgIGxhYmVsOiByb3cucHJpbWFyeV9ncm91cF9sYWJlbCA/PyAnVW5rbm93bicsXG4gICAgICAgICAgICAgIG1vZGVsczogW10sXG4gICAgICAgICAgICAgIGdyYW5kX3RvdGFsX3F1YW50aXR5OiAwLFxuICAgICAgICAgICAgICBncmFuZF90b3RhbF9hdmNvOiAwLFxuICAgICAgICAgICAgICBncmFuZF90b3RhbF9maWZvX3ZhbHVlOiAwLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZ3JvdXAgPSBncm91cHNCeUlkLmdldChrZXkpIGFzIFByaW1hcnlHcm91cDtcbiAgICAgICAgICBncm91cC5tb2RlbHMucHVzaChyb3cpO1xuICAgICAgICAgIGdyb3VwLmdyYW5kX3RvdGFsX3F1YW50aXR5ICs9IE51bWJlcihyb3cudG90YWxfcXVhbnRpdHkpIHx8IDA7XG4gICAgICAgICAgZ3JvdXAuZ3JhbmRfdG90YWxfYXZjbyArPSBOdW1iZXIocm93LnRvdGFsX2F2Y28pIHx8IDA7XG4gICAgICAgICAgZ3JvdXAuZ3JhbmRfdG90YWxfZmlmb192YWx1ZSArPSBOdW1iZXIocm93LnRvdGFsX2ZpZm9fdmFsdWUpIHx8IDA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucHJpbWFyeUdyb3Vwcy5zZXQoQXJyYXkuZnJvbShncm91cHNCeUlkLnZhbHVlcygpKSk7XG4gICAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtMlwiPlxuICA8bWF0LWNhcmQ+XG4gICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJkLWZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICA8aDUgY2xhc3M9XCJtYi0wXCI+U3RvY2sgSXNzdWUgU3VtbWFyeSBSZXBvcnQ8L2g1PlxuXG4gICAgICA8Zm9ybSBjbGFzcz1cImQtZmxleCBmbGV4LXJvdyBnYXAtMVwiIFtmb3JtR3JvdXBdPVwiZmlsdGVyRm9ybVwiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmbC1tZFwiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+U2VhcmNoPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiU2VhcmNoIHByb2R1Y3RzXCIgZm9ybUNvbnRyb2xOYW1lPVwic2VhcmNoXCIgLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8YXBwLXRpbWVsaW5lLWZpbHRlciBhcHBlYXJhbmNlPVwiZmlsbFwiIGxhYmVsVGV4dD1cIlBlcmlvZFwiIGZvcm1Db250cm9sTmFtZT1cImR1cmF0aW9uXCIgW2Zvcm1dPVwiZmlsdGVyRm9ybVwiXG4gICAgICAgICAgW3Nob3dDbGVhckJ1dHRvbl09XCJ0cnVlXCI+PC9hcHAtdGltZWxpbmUtZmlsdGVyPlxuXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPkNhdGVnb3J5PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGFwcC1zZWFyY2hhYmxlLXNlbGVjdG9yIGZvcm1Db250cm9sTmFtZT1cImNhdGVnb3J5X2lkc1wiIGFwaVVybD1cImFwaS9wcm9kdWN0LWNhdGVnb3JpZXNcIlxuICAgICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIj48L2FwcC1zZWFyY2hhYmxlLXNlbGVjdG9yPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPkxvY2F0aW9uIEZyb208L21hdC1sYWJlbD5cbiAgICAgICAgICA8YXBwLXNlYXJjaGFibGUtc2VsZWN0b3IgZm9ybUNvbnRyb2xOYW1lPVwibG9jYXRpb25faWRzXCIgYXBpVXJsPVwiYXBpL2ludmVudG9yeS1sb2NhdGlvbnNcIlxuICAgICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIj48L2FwcC1zZWFyY2hhYmxlLXNlbGVjdG9yPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPlByaW1hcnkgR3JvdXAgQnk8L21hdC1sYWJlbD5cbiAgICAgICAgICA8bWF0LXNlbGVjdCByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9XCJwcmltYXJ5X2dyb3VwX2J5XCI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cImxvY2F0aW9uXCI+TG9jYXRpb248L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cInJlY2lwaWVudFwiPlJlY2lwaWVudDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+U2Vjb25kYXJ5IEdyb3VwIEJ5PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPVwic2Vjb25kYXJ5X2dyb3VwX2J5XCI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cInByb2R1Y3RcIj5Qcm9kdWN0PC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZm9ybT5cbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gIDwvbWF0LWNhcmQ+XG5cbiAgPG1hdC1jYXJkICpuZ0Zvcj1cImxldCBncm91cCBvZiBwcmltYXJ5R3JvdXBzKClcIj5cbiAgICA8bWF0LWNhcmQtY29udGVudCBjbGFzcz1cInAtMFwiPlxuICAgICAgPGg2IGNsYXNzPVwicHgtMyBwdC0zIG1iLTIgZnctYm9sZFwiPnt7IGdyb3VwLmxhYmVsIH19PC9oNj5cblxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJncm91cC5tb2RlbHNcIiBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiI1wiPlxuICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+IzwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnQ7IGxldCBpID0gaW5kZXhcIj57eyBpICsgMSB9fTwvdGQ+XG4gICAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj48L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInByb2R1Y3RcIj5cbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlByb2R1Y3Q8L3RoPlxuICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbJy9pbnZlbnRvcnkvcHJvZHVjdHMnLCBlbGVtZW50Py5wcm9kdWN0Py5pZCwgJ3ZpZXcnXVwiIGNsYXNzPVwidGV4dC1kYXJrXCI+XG4gICAgICAgICAgICAgIHt7IGVsZW1lbnQ/LnByb2R1Y3Q/Lm5hbWUgfX1cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+IDxzdHJvbmc+IFRvdGFsIDwvc3Ryb25nPiA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInNrdVwiPlxuICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+U0tVPC90aD5cbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPnt7IGVsZW1lbnQ/LnByb2R1Y3Q/LnNrdSB9fTwvdGQ+XG4gICAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj48L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImNhdGVnb3JpZXNcIj5cbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPkNhdGVnb3JpZXM8L3RoPlxuICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgICA8YXBwLXByb2R1Y3QtY2F0ZWdvcnktYmFkZ2VzIFtwcm9kdWN0XT1cImVsZW1lbnQ/LnByb2R1Y3RcIj48L2FwcC1wcm9kdWN0LWNhdGVnb3J5LWJhZGdlcz5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+PC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzdG9ja19pc3N1ZXNcIj5cbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlN0b2NrIElzc3VlczwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj57eyBlbGVtZW50Py50b3RhbF9xdWFudGl0eSB9fTwvdGQ+XG4gICAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj4gPHN0cm9uZz4ge3sgZ3JvdXA/LmdyYW5kX3RvdGFsX3F1YW50aXR5IH19IDwvc3Ryb25nPiA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInN0b2NrX2lzc3Vlc19hdmNvXCI+XG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4gVG90YWwgQ29zdCAoQVZDTykgPC90aD5cbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPnt7IGVsZW1lbnQ/LnRvdGFsX2F2Y28gfCBjdXJyZW5jeSB9fTwvdGQ+XG4gICAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj4gPHN0cm9uZz4ge3sgZ3JvdXA/LmdyYW5kX3RvdGFsX2F2Y28gfCBjdXJyZW5jeSB9fSA8L3N0cm9uZz4gPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJ0b3RhbF9jb3N0XCI+XG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4gVG90YWwgQ29zdCAoRklGTykgPC90aD5cbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPnt7IGVsZW1lbnQ/LnRvdGFsX2ZpZm9fdmFsdWUgfCBjdXJyZW5jeSB9fTwvdGQ+XG4gICAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj4gPHN0cm9uZz4ge3sgZ3JvdXA/LmdyYW5kX3RvdGFsX2ZpZm9fdmFsdWUgfCBjdXJyZW5jeSB9fSA8L3N0cm9uZz4gPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zXCI+PC90cj5cbiAgICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnNcIj48L3RyPlxuICAgICAgICA8dHIgW2hpZGRlbl09XCIhZ3JvdXA/LmdyYW5kX3RvdGFsX2F2Y28gJiYgIWdyb3VwPy5ncmFuZF90b3RhbF9xdWFudGl0eVwiIG1hdC1mb290ZXItcm93XG4gICAgICAgICAgKm1hdEZvb3RlclJvd0RlZj1cImRpc3BsYXllZENvbHVtbnNcIj48L3RyPlxuICAgICAgPC90YWJsZT5cblxuICAgICAgPHAgKm5nSWY9XCIhZ3JvdXAubW9kZWxzLmxlbmd0aFwiIGNsYXNzPVwicHgtMyBweS0yIG1iLTAgdGV4dC1zZWNvbmRhcnlcIj5ObyBzdG9jayBpc3N1ZXMgZm9yIHRoaXMgZ3JvdXAuPC9wPlxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgPC9tYXQtY2FyZD5cblxuICA8bWF0LWNhcmQgKm5nSWY9XCIhaXNXb3JraW5nICYmICFwcmltYXJ5R3JvdXBzKCkubGVuZ3RoXCI+XG4gICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeSB0ZXh0LWNlbnRlciBweS00XCI+XG4gICAgICBObyBzdG9jayBpc3N1ZXMgZm91bmQgZm9yIHRoZSBzZWxlY3RlZCBmaWx0ZXJzLlxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgPC9tYXQtY2FyZD5cblxuICA8bWF0LXByb2dyZXNzLWJhciBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiICpuZ0lmPVwiaXNXb3JraW5nXCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxuPC9kaXY+XG4iXX0=
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvY2staXNzdWUtc3VtbWFyeS1yZXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52ZW50b3J5LWNvbW1vbi9zcmMvbGliL2ludmVudG9yeS1jb21tb24vcmVwb3J0cy9zdG9jay1pc3N1ZS1zdW1tYXJ5LXJlcG9ydC9zdG9jay1pc3N1ZS1zdW1tYXJ5LXJlcG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZlbnRvcnktY29tbW9uL3NyYy9saWIvaW52ZW50b3J5LWNvbW1vbi9yZXBvcnRzL3N0b2NrLWlzc3VlLXN1bW1hcnktcmVwb3J0L3N0b2NrLWlzc3VlLXN1bW1hcnktcmVwb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFcEUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0saUZBQWlGLENBQUM7QUFFakksT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQXFCMUMsTUFBTSxPQUFPLGdDQUFpQyxTQUFRLHFCQUFxQjtJQWNwRDtJQUNYO0lBZFYsZ0JBQWdCLEdBQWE7UUFDM0IsR0FBRztRQUNILFNBQVM7UUFDVCxLQUFLO1FBQ0wsWUFBWTtRQUNaLGNBQWM7UUFDZCxtQkFBbUI7UUFDbkIsWUFBWTtLQUNiLENBQUM7SUFFRixhQUFhLEdBQUcsTUFBTSxDQUFpQixFQUFFLENBQUMsQ0FBQztJQUUzQyxZQUNxQixPQUFxQyxFQUNoRCxFQUFlO1FBRXZCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUhJLFlBQU8sR0FBUCxPQUFPLENBQThCO1FBQ2hELE9BQUUsR0FBRixFQUFFLENBQWE7UUFJdkIsSUFBSSxDQUFDLHVCQUF1QixHQUFHO1lBQzdCLFlBQVksRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7WUFDaEMsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtTQUNqQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUM5QixZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDbEIsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2YsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2IsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUM5QixZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDbEIsZ0JBQWdCLEVBQUUsQ0FBQyxVQUFVLENBQUM7WUFDOUIsa0JBQWtCLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDL0IsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO1NBQ2IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRVEsUUFBUTtRQUNmLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGlCQUFpQixDQUN6RCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUNsRCxDQUFDO1FBRUYsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFFdEIsSUFBSSxDQUFDLE9BQU87YUFDVCxLQUFLLENBQUMsT0FBTyxDQUFDO2FBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUM5QyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUN0QixNQUFNLElBQUksR0FBVSxHQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNwQyxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBd0IsQ0FBQztZQUVuRCxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ3hCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLElBQUksTUFBTSxDQUFDLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3pCLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO3dCQUNsQixFQUFFLEVBQUUsR0FBRyxDQUFDLGdCQUFnQjt3QkFDeEIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxtQkFBbUIsSUFBSSxTQUFTO3dCQUMzQyxNQUFNLEVBQUUsRUFBRTt3QkFDVixvQkFBb0IsRUFBRSxDQUFDO3dCQUN2QixnQkFBZ0IsRUFBRSxDQUFDO3dCQUNuQixzQkFBc0IsRUFBRSxDQUFDO3FCQUMxQixDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFFRCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBaUIsQ0FBQztnQkFDbEQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZCLEtBQUssQ0FBQyxvQkFBb0IsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDOUQsS0FBSyxDQUFDLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN0RCxLQUFLLENBQUMsc0JBQXNCLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwRSxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7d0dBakZVLGdDQUFnQzs0RkFBaEMsZ0NBQWdDLGlIQzNCN0MsNnRLQW1IQSx5REQ5RkksWUFBWSw0K0tBQ1osOEJBQThCOzs0RkFLckIsZ0NBQWdDO2tCQVY1QyxTQUFTOytCQUNFLGdDQUFnQyxjQUM5QixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWiw4QkFBOEI7cUJBQy9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2hhcmVkTW9kdWxlIH0gZnJvbSAnLi4vLi4vc2hhcmVkLm1vZHVsZSc7XG5pbXBvcnQgeyBUZWNobGlmeUxpc3RDb21wb25lbnQsIFRpbWVsaW5lIH0gZnJvbSAnbmd4LXRlY2hsaWZ5LWNvcmUnO1xuaW1wb3J0IHsgU3RvY2tJc3N1ZVByb2R1Y3REYXRhU2VydmljZSB9IGZyb20gJy4vc3RvY2staXNzdWUtcHJvZHVjdC1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvZHVjdENhdGVnb3J5QmFkZ2VzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcHJvZHVjdC93aWRnZXRzL3Byb2R1Y3QtY2F0ZWdvcnktYmFkZ2VzL3Byb2R1Y3QtY2F0ZWdvcnktYmFkZ2VzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGZpbmFsaXplIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbnRlcmZhY2UgUHJpbWFyeUdyb3VwIHtcbiAgaWQ6IG51bWJlciB8IG51bGw7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIG1vZGVsczogYW55W107XG4gIGdyYW5kX3RvdGFsX3F1YW50aXR5OiBudW1iZXI7XG4gIGdyYW5kX3RvdGFsX2F2Y286IG51bWJlcjtcbiAgZ3JhbmRfdG90YWxfZmlmb192YWx1ZTogbnVtYmVyO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtc3RvY2staXNzdWUtc3VtbWFyeS1yZXBvcnQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgU2hhcmVkTW9kdWxlLFxuICAgIFByb2R1Y3RDYXRlZ29yeUJhZGdlc0NvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0b2NrLWlzc3VlLXN1bW1hcnktcmVwb3J0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3N0b2NrLWlzc3VlLXN1bW1hcnktcmVwb3J0LmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBTdG9ja0lzc3VlU3VtbWFyeVJlcG9ydENvbXBvbmVudCBleHRlbmRzIFRlY2hsaWZ5TGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGRpc3BsYXllZENvbHVtbnM6IHN0cmluZ1tdID0gW1xuICAgICcjJyxcbiAgICAncHJvZHVjdCcsXG4gICAgJ3NrdScsXG4gICAgJ2NhdGVnb3JpZXMnLFxuICAgICdzdG9ja19pc3N1ZXMnLFxuICAgICdzdG9ja19pc3N1ZXNfYXZjbycsXG4gICAgJ3RvdGFsX2Nvc3QnXG4gIF07XG5cbiAgcHJpbWFyeUdyb3VwcyA9IHNpZ25hbDxQcmltYXJ5R3JvdXBbXT4oW10pO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBzZXJ2aWNlOiBTdG9ja0lzc3VlUHJvZHVjdERhdGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyXG4gICkge1xuICAgIHN1cGVyKHNlcnZpY2UpO1xuXG4gICAgdGhpcy5maWx0ZXJGb3JtQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIGNhdGVnb3J5X2lkczogeyBtdWx0aXBsZTogdHJ1ZSB9LFxuICAgICAgbG9jYXRpb25faWRzOiB7IG11bHRpcGxlOiB0cnVlIH0sXG4gICAgfTtcblxuICAgIHRoaXMuZmlsdGVyRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgY2F0ZWdvcnlfaWRzOiBbJyddLFxuICAgICAgZGF0ZV9mcm9tOiBbJyddLFxuICAgICAgZGF0ZV90bzogWycnXSxcbiAgICAgIGR1cmF0aW9uOiBbVGltZWxpbmUuVEhJU19ZRUFSXSxcbiAgICAgIGxvY2F0aW9uX2lkczogWycnXSxcbiAgICAgIHByaW1hcnlfZ3JvdXBfYnk6IFsnbG9jYXRpb24nXSxcbiAgICAgIHNlY29uZGFyeV9ncm91cF9ieTogWydwcm9kdWN0J10sXG4gICAgICBzZWFyY2g6IFsnJ10sXG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnBhdGNoRmlsdGVyc0Zyb21Sb3V0ZSgpO1xuICAgIHRoaXMubGlzdGVuRmlsdGVyQ2hhbmdlcygpO1xuICB9XG5cbiAgb3ZlcnJpZGUgbG9hZERhdGEoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNXb3JraW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMucmVxdWVzdEhlbHBlclNlcnZpY2UuY29udmVydFRvRm9ybURhdGEoXG4gICAgICBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZmlsdGVyRm9ybS52YWx1ZSkpXG4gICAgKTtcblxuICAgIHRoaXMuaXNXb3JraW5nID0gdHJ1ZTtcblxuICAgIHRoaXMuc2VydmljZVxuICAgICAgLmluZGV4KGZpbHRlcnMpXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5pc1dvcmtpbmcgPSBmYWxzZSkpKVxuICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgcm93czogYW55W10gPSByZXM/LmRhdGEgPz8gW107XG4gICAgICAgIGNvbnN0IGdyb3Vwc0J5SWQgPSBuZXcgTWFwPHN0cmluZywgUHJpbWFyeUdyb3VwPigpO1xuXG4gICAgICAgIHJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBrZXkgPSBTdHJpbmcocm93LnByaW1hcnlfZ3JvdXBfaWQgPz8gJ25vbmUnKTtcbiAgICAgICAgICBpZiAoIWdyb3Vwc0J5SWQuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIGdyb3Vwc0J5SWQuc2V0KGtleSwge1xuICAgICAgICAgICAgICBpZDogcm93LnByaW1hcnlfZ3JvdXBfaWQsXG4gICAgICAgICAgICAgIGxhYmVsOiByb3cucHJpbWFyeV9ncm91cF9sYWJlbCA/PyAnVW5rbm93bicsXG4gICAgICAgICAgICAgIG1vZGVsczogW10sXG4gICAgICAgICAgICAgIGdyYW5kX3RvdGFsX3F1YW50aXR5OiAwLFxuICAgICAgICAgICAgICBncmFuZF90b3RhbF9hdmNvOiAwLFxuICAgICAgICAgICAgICBncmFuZF90b3RhbF9maWZvX3ZhbHVlOiAwLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZ3JvdXAgPSBncm91cHNCeUlkLmdldChrZXkpIGFzIFByaW1hcnlHcm91cDtcbiAgICAgICAgICBncm91cC5tb2RlbHMucHVzaChyb3cpO1xuICAgICAgICAgIGdyb3VwLmdyYW5kX3RvdGFsX3F1YW50aXR5ICs9IE51bWJlcihyb3cudG90YWxfcXVhbnRpdHkpIHx8IDA7XG4gICAgICAgICAgZ3JvdXAuZ3JhbmRfdG90YWxfYXZjbyArPSBOdW1iZXIocm93LnRvdGFsX2F2Y28pIHx8IDA7XG4gICAgICAgICAgZ3JvdXAuZ3JhbmRfdG90YWxfZmlmb192YWx1ZSArPSBOdW1iZXIocm93LnRvdGFsX2ZpZm9fdmFsdWUpIHx8IDA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucHJpbWFyeUdyb3Vwcy5zZXQoQXJyYXkuZnJvbShncm91cHNCeUlkLnZhbHVlcygpKSk7XG4gICAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtMlwiPlxuICA8bWF0LWNhcmQ+XG4gICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJkLWZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICA8aDUgY2xhc3M9XCJtYi0wXCI+U3RvY2sgSXNzdWUgU3VtbWFyeSBSZXBvcnQ8L2g1PlxuXG4gICAgICA8Zm9ybSBjbGFzcz1cImQtZmxleCBmbGV4LXJvdyBnYXAtMVwiIFtmb3JtR3JvdXBdPVwiZmlsdGVyRm9ybVwiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmbC1tZFwiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+U2VhcmNoPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiU2VhcmNoIHByb2R1Y3RzXCIgZm9ybUNvbnRyb2xOYW1lPVwic2VhcmNoXCIgLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8YXBwLXRpbWVsaW5lLWZpbHRlciBhcHBlYXJhbmNlPVwiZmlsbFwiIGxhYmVsVGV4dD1cIlBlcmlvZFwiIGZvcm1Db250cm9sTmFtZT1cImR1cmF0aW9uXCIgW2Zvcm1dPVwiZmlsdGVyRm9ybVwiXG4gICAgICAgICAgW3Nob3dDbGVhckJ1dHRvbl09XCJ0cnVlXCI+PC9hcHAtdGltZWxpbmUtZmlsdGVyPlxuXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPkNhdGVnb3J5PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGFwcC1zZWFyY2hhYmxlLXNlbGVjdG9yIGZvcm1Db250cm9sTmFtZT1cImNhdGVnb3J5X2lkc1wiIGFwaVVybD1cImFwaS9wcm9kdWN0LWNhdGVnb3JpZXNcIlxuICAgICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIj48L2FwcC1zZWFyY2hhYmxlLXNlbGVjdG9yPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPkxvY2F0aW9uIEZyb208L21hdC1sYWJlbD5cbiAgICAgICAgICA8YXBwLXNlYXJjaGFibGUtc2VsZWN0b3IgZm9ybUNvbnRyb2xOYW1lPVwibG9jYXRpb25faWRzXCIgYXBpVXJsPVwiYXBpL2ludmVudG9yeS1sb2NhdGlvbnNcIlxuICAgICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIj48L2FwcC1zZWFyY2hhYmxlLXNlbGVjdG9yPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPlByaW1hcnkgR3JvdXAgQnk8L21hdC1sYWJlbD5cbiAgICAgICAgICA8bWF0LXNlbGVjdCByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9XCJwcmltYXJ5X2dyb3VwX2J5XCI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cImxvY2F0aW9uXCI+TG9jYXRpb248L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cInJlY2lwaWVudFwiPlJlY2lwaWVudDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+U2Vjb25kYXJ5IEdyb3VwIEJ5PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPVwic2Vjb25kYXJ5X2dyb3VwX2J5XCI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cInByb2R1Y3RcIj5Qcm9kdWN0PC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZm9ybT5cbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gIDwvbWF0LWNhcmQ+XG5cbiAgPG1hdC1jYXJkICpuZ0Zvcj1cImxldCBncm91cCBvZiBwcmltYXJ5R3JvdXBzKClcIj5cbiAgICA8bWF0LWNhcmQtY29udGVudCBjbGFzcz1cInAtMFwiPlxuICAgICAgPGg2IGNsYXNzPVwicHgtMyBwdC0zIG1iLTIgZnctYm9sZFwiPnt7IGdyb3VwLmxhYmVsIH19PC9oNj5cblxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJncm91cC5tb2RlbHNcIiBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiI1wiPlxuICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+IzwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnQ7IGxldCBpID0gaW5kZXhcIj57eyBpICsgMSB9fTwvdGQ+XG4gICAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj48L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInByb2R1Y3RcIj5cbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlByb2R1Y3Q8L3RoPlxuICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbJy9pbnZlbnRvcnkvcHJvZHVjdHMnLCBlbGVtZW50Py5wcm9kdWN0Py5pZCwgJ3ZpZXcnXVwiIGNsYXNzPVwidGV4dC1kYXJrXCI+XG4gICAgICAgICAgICAgIHt7IGVsZW1lbnQ/LnByb2R1Y3Q/Lm5hbWUgfX1cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+IDxzdHJvbmc+IFRvdGFsIDwvc3Ryb25nPiA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInNrdVwiPlxuICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+U0tVPC90aD5cbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPnt7IGVsZW1lbnQ/LnByb2R1Y3Q/LnNrdSB9fTwvdGQ+XG4gICAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj48L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImNhdGVnb3JpZXNcIj5cbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPkNhdGVnb3JpZXM8L3RoPlxuICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgICA8YXBwLXByb2R1Y3QtY2F0ZWdvcnktYmFkZ2VzIFtwcm9kdWN0XT1cImVsZW1lbnQ/LnByb2R1Y3RcIj48L2FwcC1wcm9kdWN0LWNhdGVnb3J5LWJhZGdlcz5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+PC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzdG9ja19pc3N1ZXNcIj5cbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlN0b2NrIElzc3VlczwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj57eyBlbGVtZW50Py50b3RhbF9xdWFudGl0eSB9fTwvdGQ+XG4gICAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj4gPHN0cm9uZz4ge3sgZ3JvdXA/LmdyYW5kX3RvdGFsX3F1YW50aXR5IH19IDwvc3Ryb25nPiA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInN0b2NrX2lzc3Vlc19hdmNvXCI+XG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4gVG90YWwgQ29zdCAoQVZDTykgPC90aD5cbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPnt7IGVsZW1lbnQ/LnRvdGFsX2F2Y28gfCBjdXJyZW5jeSB9fTwvdGQ+XG4gICAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj4gPHN0cm9uZz4ge3sgZ3JvdXA/LmdyYW5kX3RvdGFsX2F2Y28gfCBjdXJyZW5jeSB9fSA8L3N0cm9uZz4gPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJ0b3RhbF9jb3N0XCI+XG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4gVG90YWwgQ29zdCAoRklGTykgPC90aD5cbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPnt7IGVsZW1lbnQ/LnRvdGFsX2ZpZm9fdmFsdWUgfCBjdXJyZW5jeSB9fTwvdGQ+XG4gICAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj4gPHN0cm9uZz4ge3sgZ3JvdXA/LmdyYW5kX3RvdGFsX2ZpZm9fdmFsdWUgfCBjdXJyZW5jeSB9fSA8L3N0cm9uZz4gPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zXCI+PC90cj5cbiAgICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnNcIj48L3RyPlxuICAgICAgICA8dHIgW2hpZGRlbl09XCIhZ3JvdXA/LmdyYW5kX3RvdGFsX2F2Y28gJiYgIWdyb3VwPy5ncmFuZF90b3RhbF9xdWFudGl0eVwiIG1hdC1mb290ZXItcm93XG4gICAgICAgICAgKm1hdEZvb3RlclJvd0RlZj1cImRpc3BsYXllZENvbHVtbnNcIj48L3RyPlxuICAgICAgPC90YWJsZT5cblxuICAgICAgPHAgKm5nSWY9XCIhZ3JvdXAubW9kZWxzLmxlbmd0aFwiIGNsYXNzPVwicHgtMyBweS0yIG1iLTAgdGV4dC1zZWNvbmRhcnlcIj5ObyBzdG9jayBpc3N1ZXMgZm9yIHRoaXMgZ3JvdXAuPC9wPlxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgPC9tYXQtY2FyZD5cblxuICA8bWF0LWNhcmQgKm5nSWY9XCIhaXNXb3JraW5nICYmICFwcmltYXJ5R3JvdXBzKCkubGVuZ3RoXCI+XG4gICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeSB0ZXh0LWNlbnRlciBweS00XCI+XG4gICAgICBObyBzdG9jayBpc3N1ZXMgZm91bmQgZm9yIHRoZSBzZWxlY3RlZCBmaWx0ZXJzLlxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgPC9tYXQtY2FyZD5cblxuICA8bWF0LXByb2dyZXNzLWJhciBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiICpuZ0lmPVwiaXNXb3JraW5nXCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxuPC9kaXY+XG4iXX0=
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { NgModule } from "@angular/core";
|
|
2
2
|
import { MaterialModule } from "./material.module";
|
|
3
3
|
import { CommonModule } from "@angular/common";
|
|
4
|
-
import { FormConfigurationForFormModule, SearchableSelectorModule, TechlifyDeleteButtonComponent, TechlifyFormButtonComponent, TechlifyIconModule, TimelineFilterModule } from "ngx-techlify-core";
|
|
4
|
+
import { AuditLogForModelModule, FormConfigurationForFormModule, NoteModule, SearchableSelectorModule, TechlifyDeleteButtonComponent, TechlifyFormButtonComponent, TechlifyIconModule, TimelineFilterModule } from "ngx-techlify-core";
|
|
5
5
|
import { InfiniteScrollDirective } from "ngx-infinite-scroll";
|
|
6
6
|
import { RouterModule } from "@angular/router";
|
|
7
7
|
import { ReactiveFormsModule } from "@angular/forms";
|
|
@@ -11,11 +11,13 @@ export class SharedModule {
|
|
|
11
11
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SharedModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
12
12
|
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: SharedModule, imports: [TechlifyDeleteButtonComponent,
|
|
13
13
|
TechlifyFormButtonComponent,
|
|
14
|
-
InfiniteScrollDirective], exports: [
|
|
14
|
+
InfiniteScrollDirective], exports: [AuditLogForModelModule,
|
|
15
|
+
CommonModule,
|
|
15
16
|
FormConfigurationForFormModule,
|
|
16
17
|
InfiniteScrollDirective,
|
|
17
18
|
MaterialModule,
|
|
18
19
|
NgxPermissionsModule,
|
|
20
|
+
NoteModule,
|
|
19
21
|
ReactiveFormsModule,
|
|
20
22
|
RouterModule,
|
|
21
23
|
SearchableSelectorModule,
|
|
@@ -24,10 +26,12 @@ export class SharedModule {
|
|
|
24
26
|
TechlifyIconModule,
|
|
25
27
|
TimelineFilterModule] });
|
|
26
28
|
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SharedModule, imports: [TechlifyDeleteButtonComponent,
|
|
27
|
-
TechlifyFormButtonComponent,
|
|
29
|
+
TechlifyFormButtonComponent, AuditLogForModelModule,
|
|
30
|
+
CommonModule,
|
|
28
31
|
FormConfigurationForFormModule,
|
|
29
32
|
MaterialModule,
|
|
30
33
|
NgxPermissionsModule,
|
|
34
|
+
NoteModule,
|
|
31
35
|
ReactiveFormsModule,
|
|
32
36
|
RouterModule,
|
|
33
37
|
SearchableSelectorModule,
|
|
@@ -43,11 +47,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
43
47
|
InfiniteScrollDirective
|
|
44
48
|
],
|
|
45
49
|
exports: [
|
|
50
|
+
AuditLogForModelModule,
|
|
46
51
|
CommonModule,
|
|
47
52
|
FormConfigurationForFormModule,
|
|
48
53
|
InfiniteScrollDirective,
|
|
49
54
|
MaterialModule,
|
|
50
55
|
NgxPermissionsModule,
|
|
56
|
+
NoteModule,
|
|
51
57
|
ReactiveFormsModule,
|
|
52
58
|
RouterModule,
|
|
53
59
|
SearchableSelectorModule,
|
|
@@ -58,4 +64,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
58
64
|
]
|
|
59
65
|
}]
|
|
60
66
|
}] });
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ludmVudG9yeS1jb21tb24vc3JjL2xpYi9pbnZlbnRvcnktY29tbW9uL3NoYXJlZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSw4QkFBOEIsRUFBRSxVQUFVLEVBQUUsd0JBQXdCLEVBQUUsNkJBQTZCLEVBQUUsMkJBQTJCLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2TyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBeUJ2RCxNQUFNLE9BQU8sWUFBWTt3R0FBWixZQUFZO3lHQUFaLFlBQVksWUFyQnJCLDZCQUE2QjtZQUM3QiwyQkFBMkI7WUFDM0IsdUJBQXVCLGFBR3ZCLHNCQUFzQjtZQUN0QixZQUFZO1lBQ1osOEJBQThCO1lBQzlCLHVCQUF1QjtZQUN2QixjQUFjO1lBQ2Qsb0JBQW9CO1lBQ3BCLFVBQVU7WUFDVixtQkFBbUI7WUFDbkIsWUFBWTtZQUNaLHdCQUF3QjtZQUN4Qiw2QkFBNkI7WUFDN0IsMkJBQTJCO1lBQzNCLGtCQUFrQjtZQUNsQixvQkFBb0I7eUdBR1gsWUFBWSxZQXJCckIsNkJBQTZCO1lBQzdCLDJCQUEyQixFQUkzQixzQkFBc0I7WUFDdEIsWUFBWTtZQUNaLDhCQUE4QjtZQUU5QixjQUFjO1lBQ2Qsb0JBQW9CO1lBQ3BCLFVBQVU7WUFDVixtQkFBbUI7WUFDbkIsWUFBWTtZQUNaLHdCQUF3QjtZQUd4QixrQkFBa0I7WUFDbEIsb0JBQW9COzs0RkFHWCxZQUFZO2tCQXZCeEIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsNkJBQTZCO3dCQUM3QiwyQkFBMkI7d0JBQzNCLHVCQUF1QjtxQkFDeEI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLHNCQUFzQjt3QkFDdEIsWUFBWTt3QkFDWiw4QkFBOEI7d0JBQzlCLHVCQUF1Qjt3QkFDdkIsY0FBYzt3QkFDZCxvQkFBb0I7d0JBQ3BCLFVBQVU7d0JBQ1YsbUJBQW1CO3dCQUNuQixZQUFZO3dCQUNaLHdCQUF3Qjt3QkFDeEIsNkJBQTZCO3dCQUM3QiwyQkFBMkI7d0JBQzNCLGtCQUFrQjt3QkFDbEIsb0JBQW9CO3FCQUNyQjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IE1hdGVyaWFsTW9kdWxlIH0gZnJvbSBcIi4vbWF0ZXJpYWwubW9kdWxlXCI7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBBdWRpdExvZ0Zvck1vZGVsTW9kdWxlLCBGb3JtQ29uZmlndXJhdGlvbkZvckZvcm1Nb2R1bGUsIE5vdGVNb2R1bGUsIFNlYXJjaGFibGVTZWxlY3Rvck1vZHVsZSwgVGVjaGxpZnlEZWxldGVCdXR0b25Db21wb25lbnQsIFRlY2hsaWZ5Rm9ybUJ1dHRvbkNvbXBvbmVudCwgVGVjaGxpZnlJY29uTW9kdWxlLCBUaW1lbGluZUZpbHRlck1vZHVsZSB9IGZyb20gXCJuZ3gtdGVjaGxpZnktY29yZVwiO1xuaW1wb3J0IHsgSW5maW5pdGVTY3JvbGxEaXJlY3RpdmUgfSBmcm9tIFwibmd4LWluZmluaXRlLXNjcm9sbFwiO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgTmd4UGVybWlzc2lvbnNNb2R1bGUgfSBmcm9tIFwibmd4LXBlcm1pc3Npb25zXCI7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBUZWNobGlmeURlbGV0ZUJ1dHRvbkNvbXBvbmVudCxcbiAgICBUZWNobGlmeUZvcm1CdXR0b25Db21wb25lbnQsXG4gICAgSW5maW5pdGVTY3JvbGxEaXJlY3RpdmVcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIEF1ZGl0TG9nRm9yTW9kZWxNb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1Db25maWd1cmF0aW9uRm9yRm9ybU1vZHVsZSxcbiAgICBJbmZpbml0ZVNjcm9sbERpcmVjdGl2ZSxcbiAgICBNYXRlcmlhbE1vZHVsZSxcbiAgICBOZ3hQZXJtaXNzaW9uc01vZHVsZSxcbiAgICBOb3RlTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgUm91dGVyTW9kdWxlLFxuICAgIFNlYXJjaGFibGVTZWxlY3Rvck1vZHVsZSxcbiAgICBUZWNobGlmeURlbGV0ZUJ1dHRvbkNvbXBvbmVudCxcbiAgICBUZWNobGlmeUZvcm1CdXR0b25Db21wb25lbnQsXG4gICAgVGVjaGxpZnlJY29uTW9kdWxlLFxuICAgIFRpbWVsaW5lRmlsdGVyTW9kdWxlLFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFNoYXJlZE1vZHVsZSB7IH1cbiJdfQ==
|
package/esm2022/lib/inventory-common/stock-issue/stock-issue-form/stock-issue-form.component.mjs
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Component, signal } from "@angular/core";
|
|
2
2
|
import { Validators } from '@angular/forms';
|
|
3
3
|
import { FormConfigurationUtilityService, TechlifyFormComponent } from "ngx-techlify-core";
|
|
4
|
-
import { LocationSelectorComponent } from '../../location/location-selector/location-selector.component';
|
|
5
4
|
import moment from 'moment';
|
|
6
5
|
import { SharedModule } from "../../shared.module";
|
|
7
6
|
import * as i0 from "@angular/core";
|
|
@@ -83,7 +82,9 @@ export class StockIssueFormComponent extends TechlifyFormComponent {
|
|
|
83
82
|
}
|
|
84
83
|
loadStockIssue(id) {
|
|
85
84
|
this.isWorking = true;
|
|
86
|
-
this.stockIssueService.show(id, {
|
|
85
|
+
this.stockIssueService.show(id, {
|
|
86
|
+
with: 'stockIssueProducts.product,stockIssueProducts.location'
|
|
87
|
+
}).subscribe({
|
|
87
88
|
next: (response) => {
|
|
88
89
|
this.isWorking = false;
|
|
89
90
|
this.stockIssue.set(response.item);
|
|
@@ -116,6 +117,10 @@ export class StockIssueFormComponent extends TechlifyFormComponent {
|
|
|
116
117
|
get stockIssueProducts() {
|
|
117
118
|
return this.form.get('stock_issue_products');
|
|
118
119
|
}
|
|
120
|
+
getSelectedLocation(index) {
|
|
121
|
+
return this.stockIssue()
|
|
122
|
+
?.stock_issue_products?.find((sip) => sip.id === this.stockIssueProducts.at(index)?.get('id')?.value)?.location;
|
|
123
|
+
}
|
|
119
124
|
createStockIssueProduct() {
|
|
120
125
|
return this.fb.group({
|
|
121
126
|
id: [''],
|
|
@@ -182,13 +187,12 @@ export class StockIssueFormComponent extends TechlifyFormComponent {
|
|
|
182
187
|
this.location.back();
|
|
183
188
|
}
|
|
184
189
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StockIssueFormComponent, deps: [{ token: i1.FormValidatorService }, { token: i2.FormBuilder }, { token: i3.StockIssueService }, { token: i4.ActivatedRoute }, { token: i5.LocationService }, { token: i6.Location }, { token: i1.FormConfigurationFormService }], target: i0.ɵɵFactoryTarget.Component });
|
|
185
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: StockIssueFormComponent, isStandalone: true, selector: "app-stock-issue-form", usesInheritance: true, ngImport: i0, template: "<mat-card class=\"d-flex flex-column gap-2 container\">\n <mat-card-content>\n\n <div class=\"d-flex flex-row justify-content-between align-items-center gap-1\">\n <h5>\n <span class=\"material-symbols-outlined align-middle\">upload</span>\n Issue Stock\n </h5>\n <app-form-configuration-for-form formCode=\"stock-issue\"></app-form-configuration-for-form>\n </div>\n\n <form class=\"d-flex flex-column gap-2\" [formGroup]=\"form\" (submit)=\"save()\">\n\n <div class=\"d-flex flex-column\">\n <div class=\"d-flex flex-row gap-2 justify-content-between\">\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Date</mat-label>\n <input matInput [matDatepicker]=\"picker\" placeholder=\"Date\" formControlName=\"date\" required>\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n <mat-error *ngIf=\"isFieldValid('date')\">{{ getErrorMessage('date') }}</mat-error>\n </mat-form-field>\n\n <mat-form-field appearance='outline' class=\"w-100\"\n *ngIf=\"formConfigurationUtilityService.getFieldEnabled('recipient_id')\">\n <mat-label>Recipient\n <sup *ngIf=\"formConfigurationUtilityService.getFieldRequired('recipient_id')\">*</sup>\n </mat-label>\n <app-searchable-selector apiUrl=\"api/recipients\" formControlName=\"recipient_id\"\n titleField=\"name\"></app-searchable-selector>\n <mat-error *ngIf=\"isFieldValid('recipient_id')\">{{ getErrorMessage('recipient_id')\n }}</mat-error>\n </mat-form-field>\n\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Particulars</mat-label>\n <textarea matInput placeholder=\"Particulars\" formControlName=\"particulars\"></textarea>\n </mat-form-field>\n </div>\n </div>\n\n <table class=\"table mt-3\">\n <thead>\n <tr>\n <th scope=\"col\">#</th>\n <th scope=\"col\">Product</th>\n <th *ngIf=\"locationCount() > 0\" scope=\"col\">Location</th>\n <th scope=\"col\" width=\"45\">Quantity</th>\n <th scope=\"col\">Particulars</th>\n <th scope=\"col\" class=\"text-center\" width=\"50\"></th>\n </tr>\n </thead>\n <tbody formArrayName=\"stock_issue_products\">\n <tr *ngFor=\"let row of stockIssueProducts.controls; let i = index\" [formGroupName]=\"i\">\n <th scope=\"row\">{{ i + 1 }}</th>\n <td>\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Product</mat-label>\n <app-searchable-selector apiUrl='api/products' formControlName=\"product_id\"\n titleField='name' [cache]=\"true\" required></app-searchable-selector>\n </mat-form-field>\n </td>\n <td *ngIf=\"locationCount() > 0\">\n <app-location-selector appearance='outline' label=\"Location From\"\n hint=\"Which warehouse are we taking stock from?\"\n formControlName=\"location_from_id\"></app-location-selector>\n </td>\n <td>\n <mat-form-field appearance='outline' class=\"wpx-90\">\n <mat-label>Quantity</mat-label>\n <input matInput formControlName=\"quantity\" type=\"number\" min=\"0\">\n </mat-form-field>\n </td>\n <td>\n <mat-form-field appearance='outline' class='w-100'>\n <mat-label>Particulars</mat-label>\n <textarea matInput formControlName=\"particulars\" rows=\"2\"></textarea>\n </mat-form-field>\n </td>\n <td class=\"text-center align-middle\">\n <div class=\"d-flex gap-2 justify-content-center align-items-center text-secondary\">\n <app-techlify-icon role='button' name='delete' (click)=\"removeStockIssueProduct(i)\"\n matTooltip=\"Remove row\"></app-techlify-icon>\n </div>\n </td>\n </tr>\n </tbody>\n <tfoot>\n <tr>\n <td colspan=\"6\" class=\"text-end\">\n <div class=\"d-flex flex-row gap-2 justify-content-end\">\n <button mat-button color=\"primary\" type=\"button\" (click)=\"clearProducts()\"\n [disabled]=\"stockIssueProducts.length === 0\">\n <mat-icon>block</mat-icon> CLEAR ALL\n </button>\n <button mat-raised-button color=\"primary\" type=\"button\"\n (click)=\"addStockIssueProduct()\">\n <mat-icon>add</mat-icon> ADD\n </button>\n </div>\n </td>\n </tr>\n </tfoot>\n </table>\n\n <div class=\"d-flex justify-content-end align-items-center gap-2 mt-2\">\n <button [disabled]=\"isWorking\" mat-flat-button type=\"button\" (click)=\"cancel()\">Cancel</button>\n <button [disabled]=\"isWorking || stockIssueProducts.length === 0\" mat-raised-button color=\"primary\"\n type=\"submit\">Save</button>\n </div>\n\n </form>\n\n </mat-card-content>\n</mat-card>", dependencies: [{ kind: "ngmodule", type: SharedModule }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.FormConfigurationForFormComponent, selector: "app-form-configuration-for-form", inputs: ["formCode"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i8.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i8.MatCardContent, selector: "mat-card-content" }, { 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: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatLabel, selector: "mat-label" }, { kind: "directive", type: i10.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i10.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i12.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: "directive", type: i13.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { 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.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { 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"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { 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", "isEmitInitialEvent", "required", "disabled", "value"], outputs: ["selectedValueChange", "selectionChange", "itemsChange"] }, { kind: "component", type: i1.TechlifyIconComponent, selector: "app-techlify-icon", inputs: ["name", "size"] }, { kind: "component", type: LocationSelectorComponent, selector: "app-location-selector", inputs: ["appearance", "label", "placeholder", "hint", "includeNone"] }], preserveWhitespaces: true });
|
|
190
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: StockIssueFormComponent, isStandalone: true, selector: "app-stock-issue-form", usesInheritance: true, ngImport: i0, template: "<mat-card class=\"d-flex flex-column gap-2 container\">\n <mat-card-content>\n\n <div class=\"d-flex flex-row justify-content-between align-items-center gap-1\">\n <h5>\n <span class=\"material-symbols-outlined align-middle\">upload</span>\n Issue Stock\n </h5>\n <app-form-configuration-for-form formCode=\"stock-issue\"></app-form-configuration-for-form>\n </div>\n\n <form class=\"d-flex flex-column gap-2\" [formGroup]=\"form\" (submit)=\"save()\">\n\n <div class=\"d-flex flex-column\">\n <div class=\"d-flex flex-row gap-2 justify-content-between\">\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Date</mat-label>\n <input matInput [matDatepicker]=\"picker\" placeholder=\"Date\" formControlName=\"date\" required>\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n <mat-error *ngIf=\"isFieldValid('date')\">{{ getErrorMessage('date') }}</mat-error>\n </mat-form-field>\n\n <mat-form-field appearance='outline' class=\"w-100\"\n *ngIf=\"formConfigurationUtilityService.getFieldEnabled('recipient_id')\">\n <mat-label>Recipient\n <sup *ngIf=\"formConfigurationUtilityService.getFieldRequired('recipient_id')\">*</sup>\n </mat-label>\n <app-searchable-selector apiUrl=\"api/recipients\" formControlName=\"recipient_id\"\n titleField=\"name\"></app-searchable-selector>\n <mat-error *ngIf=\"isFieldValid('recipient_id')\">{{ getErrorMessage('recipient_id')\n }}</mat-error>\n </mat-form-field>\n\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Particulars</mat-label>\n <textarea matInput placeholder=\"Particulars\" formControlName=\"particulars\"></textarea>\n </mat-form-field>\n </div>\n </div>\n\n <table class=\"table mt-3\">\n <thead>\n <tr>\n <th scope=\"col\">#</th>\n <th scope=\"col\">Product</th>\n <th *ngIf=\"locationCount() > 0\" scope=\"col\">Location</th>\n <th scope=\"col\" width=\"45\">Quantity</th>\n <th scope=\"col\">Particulars</th>\n <th scope=\"col\" class=\"text-center\" width=\"50\"></th>\n </tr>\n </thead>\n <tbody formArrayName=\"stock_issue_products\">\n <tr *ngFor=\"let row of stockIssueProducts.controls; let i = index\" [formGroupName]=\"i\">\n <th scope=\"row\">{{ i + 1 }}</th>\n <td>\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Product</mat-label>\n <app-searchable-selector apiUrl='api/products' formControlName=\"product_id\"\n titleField='name' [cache]=\"true\" required></app-searchable-selector>\n </mat-form-field>\n </td>\n <td *ngIf=\"locationCount() > 0\">\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Location From</mat-label>\n <app-searchable-selector apiUrl='api/inventory-locations?status_ids=1'\n formControlName=\"location_from_id\" titleField='title'\n [selectedValue]=\"getSelectedLocation(i)\"></app-searchable-selector>\n <mat-hint>Which warehouse are we taking stock from?</mat-hint>\n </mat-form-field>\n </td>\n <td>\n <mat-form-field appearance='outline' class=\"wpx-90\">\n <mat-label>Quantity</mat-label>\n <input matInput formControlName=\"quantity\" type=\"number\" min=\"0\">\n </mat-form-field>\n </td>\n <td>\n <mat-form-field appearance='outline' class='w-100'>\n <mat-label>Particulars</mat-label>\n <textarea matInput formControlName=\"particulars\" rows=\"2\"></textarea>\n </mat-form-field>\n </td>\n <td class=\"text-center align-middle\">\n <div class=\"d-flex gap-2 justify-content-center align-items-center text-secondary\">\n <app-techlify-icon role='button' name='delete' (click)=\"removeStockIssueProduct(i)\"\n matTooltip=\"Remove row\"></app-techlify-icon>\n </div>\n </td>\n </tr>\n </tbody>\n <tfoot>\n <tr>\n <td colspan=\"6\" class=\"text-end\">\n <div class=\"d-flex flex-row gap-2 justify-content-end\">\n <button mat-button color=\"primary\" type=\"button\" (click)=\"clearProducts()\"\n [disabled]=\"stockIssueProducts.length === 0\">\n <mat-icon>block</mat-icon> CLEAR ALL\n </button>\n <button mat-raised-button color=\"primary\" type=\"button\"\n (click)=\"addStockIssueProduct()\">\n <mat-icon>add</mat-icon> ADD\n </button>\n </div>\n </td>\n </tr>\n </tfoot>\n </table>\n\n <div class=\"d-flex justify-content-end align-items-center gap-2 mt-2\">\n <button [disabled]=\"isWorking\" mat-flat-button type=\"button\" (click)=\"cancel()\">Cancel</button>\n <button [disabled]=\"isWorking || stockIssueProducts.length === 0\" mat-raised-button color=\"primary\"\n type=\"submit\">Save</button>\n </div>\n\n </form>\n\n </mat-card-content>\n</mat-card>", dependencies: [{ kind: "ngmodule", type: SharedModule }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.FormConfigurationForFormComponent, selector: "app-form-configuration-for-form", inputs: ["formCode"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i8.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i8.MatCardContent, selector: "mat-card-content" }, { 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: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatLabel, selector: "mat-label" }, { kind: "directive", type: i10.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i10.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i10.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i12.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: "directive", type: i13.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { 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.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { 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"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { 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", "isEmitInitialEvent", "required", "disabled", "value"], outputs: ["selectedValueChange", "selectionChange", "itemsChange", "isItemsEmpty"] }, { kind: "component", type: i1.TechlifyIconComponent, selector: "app-techlify-icon", inputs: ["name", "size"] }], preserveWhitespaces: true });
|
|
186
191
|
}
|
|
187
192
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StockIssueFormComponent, decorators: [{
|
|
188
193
|
type: Component,
|
|
189
194
|
args: [{ selector: 'app-stock-issue-form', standalone: true, imports: [
|
|
190
195
|
SharedModule,
|
|
191
|
-
|
|
192
|
-
], template: "<mat-card class=\"d-flex flex-column gap-2 container\">\n <mat-card-content>\n\n <div class=\"d-flex flex-row justify-content-between align-items-center gap-1\">\n <h5>\n <span class=\"material-symbols-outlined align-middle\">upload</span>\n Issue Stock\n </h5>\n <app-form-configuration-for-form formCode=\"stock-issue\"></app-form-configuration-for-form>\n </div>\n\n <form class=\"d-flex flex-column gap-2\" [formGroup]=\"form\" (submit)=\"save()\">\n\n <div class=\"d-flex flex-column\">\n <div class=\"d-flex flex-row gap-2 justify-content-between\">\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Date</mat-label>\n <input matInput [matDatepicker]=\"picker\" placeholder=\"Date\" formControlName=\"date\" required>\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n <mat-error *ngIf=\"isFieldValid('date')\">{{ getErrorMessage('date') }}</mat-error>\n </mat-form-field>\n\n <mat-form-field appearance='outline' class=\"w-100\"\n *ngIf=\"formConfigurationUtilityService.getFieldEnabled('recipient_id')\">\n <mat-label>Recipient\n <sup *ngIf=\"formConfigurationUtilityService.getFieldRequired('recipient_id')\">*</sup>\n </mat-label>\n <app-searchable-selector apiUrl=\"api/recipients\" formControlName=\"recipient_id\"\n titleField=\"name\"></app-searchable-selector>\n <mat-error *ngIf=\"isFieldValid('recipient_id')\">{{ getErrorMessage('recipient_id')\n }}</mat-error>\n </mat-form-field>\n\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Particulars</mat-label>\n <textarea matInput placeholder=\"Particulars\" formControlName=\"particulars\"></textarea>\n </mat-form-field>\n </div>\n </div>\n\n <table class=\"table mt-3\">\n <thead>\n <tr>\n <th scope=\"col\">#</th>\n <th scope=\"col\">Product</th>\n <th *ngIf=\"locationCount() > 0\" scope=\"col\">Location</th>\n <th scope=\"col\" width=\"45\">Quantity</th>\n <th scope=\"col\">Particulars</th>\n <th scope=\"col\" class=\"text-center\" width=\"50\"></th>\n </tr>\n </thead>\n <tbody formArrayName=\"stock_issue_products\">\n <tr *ngFor=\"let row of stockIssueProducts.controls; let i = index\" [formGroupName]=\"i\">\n <th scope=\"row\">{{ i + 1 }}</th>\n <td>\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Product</mat-label>\n <app-searchable-selector apiUrl='api/products' formControlName=\"product_id\"\n titleField='name' [cache]=\"true\" required></app-searchable-selector>\n </mat-form-field>\n </td>\n <td *ngIf=\"locationCount() > 0\">\n <app-location-selector appearance='outline' label=\"Location From\"\n hint=\"Which warehouse are we taking stock from?\"\n formControlName=\"location_from_id\"></app-location-selector>\n </td>\n <td>\n <mat-form-field appearance='outline' class=\"wpx-90\">\n <mat-label>Quantity</mat-label>\n <input matInput formControlName=\"quantity\" type=\"number\" min=\"0\">\n </mat-form-field>\n </td>\n <td>\n <mat-form-field appearance='outline' class='w-100'>\n <mat-label>Particulars</mat-label>\n <textarea matInput formControlName=\"particulars\" rows=\"2\"></textarea>\n </mat-form-field>\n </td>\n <td class=\"text-center align-middle\">\n <div class=\"d-flex gap-2 justify-content-center align-items-center text-secondary\">\n <app-techlify-icon role='button' name='delete' (click)=\"removeStockIssueProduct(i)\"\n matTooltip=\"Remove row\"></app-techlify-icon>\n </div>\n </td>\n </tr>\n </tbody>\n <tfoot>\n <tr>\n <td colspan=\"6\" class=\"text-end\">\n <div class=\"d-flex flex-row gap-2 justify-content-end\">\n <button mat-button color=\"primary\" type=\"button\" (click)=\"clearProducts()\"\n [disabled]=\"stockIssueProducts.length === 0\">\n <mat-icon>block</mat-icon> CLEAR ALL\n </button>\n <button mat-raised-button color=\"primary\" type=\"button\"\n (click)=\"addStockIssueProduct()\">\n <mat-icon>add</mat-icon> ADD\n </button>\n </div>\n </td>\n </tr>\n </tfoot>\n </table>\n\n <div class=\"d-flex justify-content-end align-items-center gap-2 mt-2\">\n <button [disabled]=\"isWorking\" mat-flat-button type=\"button\" (click)=\"cancel()\">Cancel</button>\n <button [disabled]=\"isWorking || stockIssueProducts.length === 0\" mat-raised-button color=\"primary\"\n type=\"submit\">Save</button>\n </div>\n\n </form>\n\n </mat-card-content>\n</mat-card>" }]
|
|
196
|
+
], template: "<mat-card class=\"d-flex flex-column gap-2 container\">\n <mat-card-content>\n\n <div class=\"d-flex flex-row justify-content-between align-items-center gap-1\">\n <h5>\n <span class=\"material-symbols-outlined align-middle\">upload</span>\n Issue Stock\n </h5>\n <app-form-configuration-for-form formCode=\"stock-issue\"></app-form-configuration-for-form>\n </div>\n\n <form class=\"d-flex flex-column gap-2\" [formGroup]=\"form\" (submit)=\"save()\">\n\n <div class=\"d-flex flex-column\">\n <div class=\"d-flex flex-row gap-2 justify-content-between\">\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Date</mat-label>\n <input matInput [matDatepicker]=\"picker\" placeholder=\"Date\" formControlName=\"date\" required>\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n <mat-error *ngIf=\"isFieldValid('date')\">{{ getErrorMessage('date') }}</mat-error>\n </mat-form-field>\n\n <mat-form-field appearance='outline' class=\"w-100\"\n *ngIf=\"formConfigurationUtilityService.getFieldEnabled('recipient_id')\">\n <mat-label>Recipient\n <sup *ngIf=\"formConfigurationUtilityService.getFieldRequired('recipient_id')\">*</sup>\n </mat-label>\n <app-searchable-selector apiUrl=\"api/recipients\" formControlName=\"recipient_id\"\n titleField=\"name\"></app-searchable-selector>\n <mat-error *ngIf=\"isFieldValid('recipient_id')\">{{ getErrorMessage('recipient_id')\n }}</mat-error>\n </mat-form-field>\n\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Particulars</mat-label>\n <textarea matInput placeholder=\"Particulars\" formControlName=\"particulars\"></textarea>\n </mat-form-field>\n </div>\n </div>\n\n <table class=\"table mt-3\">\n <thead>\n <tr>\n <th scope=\"col\">#</th>\n <th scope=\"col\">Product</th>\n <th *ngIf=\"locationCount() > 0\" scope=\"col\">Location</th>\n <th scope=\"col\" width=\"45\">Quantity</th>\n <th scope=\"col\">Particulars</th>\n <th scope=\"col\" class=\"text-center\" width=\"50\"></th>\n </tr>\n </thead>\n <tbody formArrayName=\"stock_issue_products\">\n <tr *ngFor=\"let row of stockIssueProducts.controls; let i = index\" [formGroupName]=\"i\">\n <th scope=\"row\">{{ i + 1 }}</th>\n <td>\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Product</mat-label>\n <app-searchable-selector apiUrl='api/products' formControlName=\"product_id\"\n titleField='name' [cache]=\"true\" required></app-searchable-selector>\n </mat-form-field>\n </td>\n <td *ngIf=\"locationCount() > 0\">\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Location From</mat-label>\n <app-searchable-selector apiUrl='api/inventory-locations?status_ids=1'\n formControlName=\"location_from_id\" titleField='title'\n [selectedValue]=\"getSelectedLocation(i)\"></app-searchable-selector>\n <mat-hint>Which warehouse are we taking stock from?</mat-hint>\n </mat-form-field>\n </td>\n <td>\n <mat-form-field appearance='outline' class=\"wpx-90\">\n <mat-label>Quantity</mat-label>\n <input matInput formControlName=\"quantity\" type=\"number\" min=\"0\">\n </mat-form-field>\n </td>\n <td>\n <mat-form-field appearance='outline' class='w-100'>\n <mat-label>Particulars</mat-label>\n <textarea matInput formControlName=\"particulars\" rows=\"2\"></textarea>\n </mat-form-field>\n </td>\n <td class=\"text-center align-middle\">\n <div class=\"d-flex gap-2 justify-content-center align-items-center text-secondary\">\n <app-techlify-icon role='button' name='delete' (click)=\"removeStockIssueProduct(i)\"\n matTooltip=\"Remove row\"></app-techlify-icon>\n </div>\n </td>\n </tr>\n </tbody>\n <tfoot>\n <tr>\n <td colspan=\"6\" class=\"text-end\">\n <div class=\"d-flex flex-row gap-2 justify-content-end\">\n <button mat-button color=\"primary\" type=\"button\" (click)=\"clearProducts()\"\n [disabled]=\"stockIssueProducts.length === 0\">\n <mat-icon>block</mat-icon> CLEAR ALL\n </button>\n <button mat-raised-button color=\"primary\" type=\"button\"\n (click)=\"addStockIssueProduct()\">\n <mat-icon>add</mat-icon> ADD\n </button>\n </div>\n </td>\n </tr>\n </tfoot>\n </table>\n\n <div class=\"d-flex justify-content-end align-items-center gap-2 mt-2\">\n <button [disabled]=\"isWorking\" mat-flat-button type=\"button\" (click)=\"cancel()\">Cancel</button>\n <button [disabled]=\"isWorking || stockIssueProducts.length === 0\" mat-raised-button color=\"primary\"\n type=\"submit\">Save</button>\n </div>\n\n </form>\n\n </mat-card-content>\n</mat-card>" }]
|
|
193
197
|
}], ctorParameters: () => [{ type: i1.FormValidatorService }, { type: i2.FormBuilder }, { type: i3.StockIssueService }, { type: i4.ActivatedRoute }, { type: i5.LocationService }, { type: i6.Location }, { type: i1.FormConfigurationFormService }] });
|
|
194
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvY2staXNzdWUtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZlbnRvcnktY29tbW9uL3NyYy9saWIvaW52ZW50b3J5LWNvbW1vbi9zdG9jay1pc3N1ZS9zdG9jay1pc3N1ZS1mb3JtL3N0b2NrLWlzc3VlLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52ZW50b3J5LWNvbW1vbi9zcmMvbGliL2ludmVudG9yeS1jb21tb24vc3RvY2staXNzdWUvc3RvY2staXNzdWUtZm9ybS9zdG9jay1pc3N1ZS1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBMEIsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUVMLCtCQUErQixFQUUvQixxQkFBcUIsRUFDdEIsTUFBTSxtQkFBbUIsQ0FBQztBQUUzQixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUd6RyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFNUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFZbkQsTUFBTSxPQUFPLHVCQUF3QixTQUFRLHFCQUFxQjtJQVlqQztJQUNyQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFoQlYsYUFBYSxHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUNsQyxVQUFVLEdBQUcsTUFBTSxDQUFNLElBQUksQ0FBQyxDQUFDO0lBRS9CLFlBQVksR0FBRyxNQUFNLENBR1gsSUFBSSxDQUFDLENBQUE7SUFFUiwrQkFBK0IsQ0FBa0M7SUFFeEUsWUFBK0Isb0JBQTBDLEVBQy9ELEVBQWUs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c0JBQXNCLGNBRXBCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLHlCQUF5QjtxQkFDMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgc2lnbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBGb3JtQ29uZmlndXJhdGlvbkZvcm1TZXJ2aWNlLFxuICBGb3JtQ29uZmlndXJhdGlvblV0aWxpdHlTZXJ2aWNlLFxuICBGb3JtVmFsaWRhdG9yU2VydmljZSxcbiAgVGVjaGxpZnlGb3JtQ29tcG9uZW50XG59IGZyb20gXCJuZ3gtdGVjaGxpZnktY29yZVwiO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTG9jYXRpb25TZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2xvY2F0aW9uL2xvY2F0aW9uLXNlbGVjdG9yL2xvY2F0aW9uLXNlbGVjdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdG9ja0lzc3VlU2VydmljZSB9IGZyb20gJy4uL3N0b2NrLWlzc3VlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgTG9jYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbG9jYXRpb24vbG9jYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBTaGFyZWRNb2R1bGUgfSBmcm9tIFwiLi4vLi4vc2hhcmVkLm1vZHVsZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtc3RvY2staXNzdWUtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdG9jay1pc3N1ZS1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIFNoYXJlZE1vZHVsZSxcbiAgICBMb2NhdGlvblNlbGVjdG9yQ29tcG9uZW50LFxuICBdXG59KVxuXG5leHBvcnQgY2xhc3MgU3RvY2tJc3N1ZUZvcm1Db21wb25lbnQgZXh0ZW5kcyBUZWNobGlmeUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIGxvY2F0aW9uQ291bnQgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgc3RvY2tJc3N1ZSA9IHNpZ25hbDxhbnk+KG51bGwpO1xuXG4gIGlzc3VhYmxlRGF0YSA9IHNpZ25hbDx7XG4gICAgaXNzdWFibGVfdHlwZTogU3RyaW5nLFxuICAgIGlzc3VhYmxlX2lkOiBudW1iZXJcbiAgfSB8IG51bGw+KG51bGwpXG5cbiAgcHVibGljIGZvcm1Db25maWd1cmF0aW9uVXRpbGl0eVNlcnZpY2U6IEZvcm1Db25maWd1cmF0aW9uVXRpbGl0eVNlcnZpY2U7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIG92ZXJyaWRlIGZvcm1WYWxpZGF0b3JTZXJ2aWNlOiBGb3JtVmFsaWRhdG9yU2VydmljZSxcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHN0b2NrSXNzdWVTZXJ2aWNlOiBTdG9ja0lzc3VlU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGxvY2F0aW9uU2VydmljZTogTG9jYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uLFxuICAgIHByaXZhdGUgZm9ybUNvbmZpZ1NlcnZpY2U6IEZvcm1Db25maWd1cmF0aW9uRm9ybVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoZm9ybVZhbGlkYXRvclNlcnZpY2UpO1xuXG4gICAgdGhpcy5mb3JtQ29uZmlndXJhdGlvblV0aWxpdHlTZXJ2aWNlID0gbmV3IEZvcm1Db25maWd1cmF0aW9uVXRpbGl0eVNlcnZpY2UoKTtcblxuICAgIHRoaXMuZXJyb3JNZXNzYWdlcyA9IHtcbiAgICAgIGRhdGU6IHtcbiAgICAgICAgcmVxdWlyZWQ6ICdUaGUgZGF0ZSBmaWVsZCBpcyByZXF1aXJlZC4nLFxuICAgICAgfSxcbiAgICAgIHJlY2lwaWVudF9pZDoge1xuICAgICAgICByZXF1aXJlZDogJ1BsZWFzZSBzZWxlY3QgYSByZWNpcGllbnQuJyxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgZGF0ZTogW25ldyBEYXRlKCksIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXSxcbiAgICAgIHBhcnRpY3VsYXJzOiBbJyddLFxuICAgICAgcmVjaXBpZW50X2lkOiBbJyddLFxuICAgICAgc3RvY2tfaXNzdWVfcHJvZHVjdHM6IHRoaXMuZmIuYXJyYXkoW10pXG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvY2F0aW9uU2VydmljZS5jb3VudCgpLnN1YnNjcmliZSgoY291bnQ6IG51bWJlcikgPT4ge1xuICAgICAgdGhpcy5sb2NhdGlvbkNvdW50LnNldChjb3VudCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZvcm1Db25maWd1cmF0aW9uVXRpbGl0eVNlcnZpY2UuaW5pdGlhbGl6ZSh0aGlzLmZvcm1Db25maWdTZXJ2aWNlLCAnc3RvY2staXNzdWUnKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLmZvcm0uZ2V0KCdyZWNpcGllbnRfaWQnKT8uc2V0VmFsaWRhdG9ycyhcbiAgICAgICAgICB0aGlzLmZvcm1Db25maWd1cmF0aW9uVXRpbGl0eVNlcnZpY2UuZ2V0RmllbGRSZXF1aXJlZCgncmVjaXBpZW50X2lkJykgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogbnVsbFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmZvcm0uZ2V0KCdyZWNpcGllbnRfaWQnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgaWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgnaWQnKTtcbiAgICBpZiAoaWQpIHtcbiAgICAgIHRoaXMubG9hZFN0b2NrSXNzdWUoK2lkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZGRTdG9ja0lzc3VlUHJvZHVjdCgpO1xuICAgIH1cblxuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChwYXJhbXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmlzc3VhYmxlRGF0YS5zZXQoe1xuICAgICAgICAgIGlzc3VhYmxlX3R5cGU6IHBhcmFtc1snaXNzdWFibGVfdHlwZSddLFxuICAgICAgICAgIGlzc3VhYmxlX2lkOiBwYXJhbXNbJ2lzc3VhYmxlX2lkJ11cbiAgICAgICAgfSk7XG5cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkU3RvY2tJc3N1ZShpZDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5pc1dvcmtpbmcgPSB0cnVlO1xuICAgIHRoaXMuc3RvY2tJc3N1ZVNlcnZpY2Uuc2hvdyhpZCwgeyB3aXRoOiAnc3RvY2tJc3N1ZVByb2R1Y3RzLnByb2R1Y3QnIH0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmlzV29ya2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0b2NrSXNzdWUuc2V0KHJlc3BvbnNlLml0ZW0pO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNXb3JraW5nID0gZmFsc2U7XG4gICAgICB9LFxuICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgY29uc3QgaXNzdWUgPSB0aGlzLnN0b2NrSXNzdWUoKTtcbiAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgIGRhdGU6IGlzc3VlLmRhdGUgPyBuZXcgRGF0ZShpc3N1ZS5kYXRlKSA6IG5ldyBEYXRlKCksXG4gICAgICAgICAgcGFydGljdWxhcnM6IGlzc3VlLmRldGFpbHMsXG4gICAgICAgICAgcmVjaXBpZW50X2lkOiBpc3N1ZS5yZWNpcGllbnRfaWQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc3RvY2tJc3N1ZVByb2R1Y3RzLmNsZWFyKCk7XG4gICAgICAgIGlzc3VlLnN0b2NrX2lzc3VlX3Byb2R1Y3RzPy5mb3JFYWNoKChzaXA6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5jcmVhdGVTdG9ja0lzc3VlUHJvZHVjdCgpO1xuICAgICAgICAgIGdyb3VwLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgaWQ6IHNpcC5pZCxcbiAgICAgICAgICAgIHByb2R1Y3RfaWQ6IHNpcC5wcm9kdWN0X2lkLFxuICAgICAgICAgICAgbG9jYXRpb25fZnJvbV9pZDogc2lwLmxvY2F0aW9uX2Zyb21faWQsXG4gICAgICAgICAgICBxdWFudGl0eTogc2lwLnF1YW50aXR5LFxuICAgICAgICAgICAgcGFydGljdWxhcnM6IHNpcC5wYXJ0aWN1bGFycyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnN0b2NrSXNzdWVQcm9kdWN0cy5wdXNoKGdyb3VwKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXQgc3RvY2tJc3N1ZVByb2R1Y3RzKCk6IEZvcm1BcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ3N0b2NrX2lzc3VlX3Byb2R1Y3RzJykgYXMgRm9ybUFycmF5O1xuICB9XG5cbiAgY3JlYXRlU3RvY2tJc3N1ZVByb2R1Y3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgaWQ6IFsnJ10sXG4gICAgICBwcm9kdWN0X2lkOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgbG9jYXRpb25fZnJvbV9pZDogWycnLCB0aGlzLmxvY2F0aW9uQ291bnQoKSA+IDAgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogbnVsbF0sXG4gICAgICBxdWFudGl0eTogWzAsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbigwKV1dLFxuICAgICAgcGFydGljdWxhcnM6IFsnJ10sXG4gICAgICBpc3N1YWJsZV9pZDogW3RoaXMuaXNzdWFibGVEYXRhKCk/Lmlzc3VhYmxlX2lkID8/ICcnXSxcbiAgICAgIGlzc3VhYmxlX3R5cGU6IFt0aGlzLmlzc3VhYmxlRGF0YSgpPy5pc3N1YWJsZV90eXBlID8/ICcnXVxuICAgIH0pO1xuICB9XG5cbiAgYWRkU3RvY2tJc3N1ZVByb2R1Y3QoKSB7XG4gICAgdGhpcy5zdG9ja0lzc3VlUHJvZHVjdHMucHVzaCh0aGlzLmNyZWF0ZVN0b2NrSXNzdWVQcm9kdWN0KCkpO1xuICB9XG5cbiAgcmVtb3ZlU3RvY2tJc3N1ZVByb2R1Y3QoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc3RvY2tJc3N1ZVByb2R1Y3RzLnJlbW92ZUF0KGluZGV4KTtcbiAgfVxuXG4gIGNsZWFyUHJvZHVjdHMoKSB7XG4gICAgdGhpcy5zdG9ja0lzc3VlUHJvZHVjdHMuY2xlYXIoKTtcbiAgfVxuXG4gIHNhdmUoKSB7XG4gICAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkKSB7XG4gICAgICB0aGlzLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgdGhpcy5mb3JtLm1hcmtBc0RpcnR5KCk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydCgnUGxlYXNlIGNoZWNrIHRoZSBmb3JtIGZvciBlcnJvcnMuJywgJ2Vycm9yJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RvY2tJc3N1ZVByb2R1Y3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkQWxlcnQoJ1BsZWFzZSBhZGQgYXQgbGVhc3Qgb25lIHByb2R1Y3QuJywgJ2Vycm9yJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgICBjb25zdCBkYXRhOiBhbnkgPSB7XG4gICAgICBpZDogdGhpcy5zdG9ja0lzc3VlKCk/LmlkID8/IG51bGwsXG4gICAgICBkYXRlOiBtb21lbnQoZm9ybURhdGEuZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJyksXG4gICAgICBkZXRhaWxzOiBmb3JtRGF0YS5wYXJ0aWN1bGFycyxcbiAgICAgIHJlY2lwaWVudF9pZDogZm9ybURhdGEucmVjaXBpZW50X2lkIHx8IG51bGwsXG4gICAgICBwcm9kdWN0czogZm9ybURhdGEuc3RvY2tfaXNzdWVfcHJvZHVjdHMubWFwKChyb3c6IGFueSkgPT4gKHtcbiAgICAgICAgaWQ6IHJvdy5wcm9kdWN0X2lkLFxuICAgICAgICBwcm9kdWN0X2lkOiByb3cucHJvZHVjdF9pZCxcbiAgICAgICAgcXVhbnRpdHk6IHJvdy5xdWFudGl0eSxcbiAgICAgICAgbG9jYXRpb25fZnJvbV9pZDogcm93LmxvY2F0aW9uX2Zyb21faWQsXG4gICAgICAgIHBhcnRpY3VsYXJzOiByb3cucGFydGljdWxhcnMsXG4gICAgICAgIGlzc3VhYmxlX2lkOiByb3cuaXNzdWFibGVfaWQsXG4gICAgICAgIGlzc3VhYmxlX3R5cGU6IHJvdy5pc3N1YWJsZV90eXBlXG4gICAgICB9KSlcbiAgICB9O1xuXG4gICAgdGhpcy5pc1dvcmtpbmcgPSB0cnVlO1xuICAgIGNvbnN0IHJlcXVlc3QkID0gdGhpcy5zdG9ja0lzc3VlKCk/LmlkXG4gICAgICA/IHRoaXMuc3RvY2tJc3N1ZVNlcnZpY2UudXBkYXRlKGRhdGEpXG4gICAgICA6IHRoaXMuc3RvY2tJc3N1ZVNlcnZpY2Uuc3RvcmUoZGF0YSk7XG5cbiAgICByZXF1ZXN0JC5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLmlzV29ya2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydCgnU3RvY2sgaXNzdWVzIHNhdmVkIHN1Y2Nlc3NmdWxseSEnLCAnc3VjY2VzcycpO1xuICAgICAgICB0aGlzLmxvY2F0aW9uLmJhY2soKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLmlzV29ya2luZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMubG9jYXRpb24uYmFjaygpO1xuICB9XG59XG4iLCI8bWF0LWNhcmQgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTIgY29udGFpbmVyXCI+XG4gICAgPG1hdC1jYXJkLWNvbnRlbnQ+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIj5cbiAgICAgICAgICAgIDxoNT5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgYWxpZ24tbWlkZGxlXCI+dXBsb2FkPC9zcGFuPlxuICAgICAgICAgICAgICAgIElzc3VlIFN0b2NrXG4gICAgICAgICAgICA8L2g1PlxuICAgICAgICAgICAgPGFwcC1mb3JtLWNvbmZpZ3VyYXRpb24tZm9yLWZvcm0gZm9ybUNvZGU9XCJzdG9jay1pc3N1ZVwiPjwvYXBwLWZvcm0tY29uZmlndXJhdGlvbi1mb3ItZm9ybT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGZvcm0gY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTJcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiAoc3VibWl0KT1cInNhdmUoKVwiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXJvdyBnYXAtMiBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0nb3V0bGluZScgY2xhc3M9XCJ3LTEwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5EYXRlPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW21hdERhdGVwaWNrZXJdPVwicGlja2VyXCIgcGxhY2Vob2xkZXI9XCJEYXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGF0ZVwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjcGlja2VyPjwvbWF0LWRhdGVwaWNrZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNGaWVsZFZhbGlkKCdkYXRlJylcIj57eyBnZXRFcnJvck1lc3NhZ2UoJ2RhdGUnKSB9fTwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSdvdXRsaW5lJyBjbGFzcz1cInctMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybUNvbmZpZ3VyYXRpb25VdGlsaXR5U2VydmljZS5nZXRGaWVsZEVuYWJsZWQoJ3JlY2lwaWVudF9pZCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlJlY2lwaWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdXAgKm5nSWY9XCJmb3JtQ29uZmlndXJhdGlvblV0aWxpdHlTZXJ2aWNlLmdldEZpZWxkUmVxdWlyZWQoJ3JlY2lwaWVudF9pZCcpXCI+Kjwvc3VwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXNlYXJjaGFibGUtc2VsZWN0b3IgYXBpVXJsPVwiYXBpL3JlY2lwaWVudHNcIiBmb3JtQ29udHJvbE5hbWU9XCJyZWNpcGllbnRfaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlRmllbGQ9XCJuYW1lXCI+PC9hcHAtc2VhcmNoYWJsZS1zZWxlY3Rvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJpc0ZpZWxkVmFsaWQoJ3JlY2lwaWVudF9pZCcpXCI+e3sgZ2V0RXJyb3JNZXNzYWdlKCdyZWNpcGllbnRfaWQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9J291dGxpbmUnIGNsYXNzPVwidy0xMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+UGFydGljdWxhcnM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlBhcnRpY3VsYXJzXCIgZm9ybUNvbnRyb2xOYW1lPVwicGFydGljdWxhcnNcIj48L3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIG10LTNcIj5cbiAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPiM8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+UHJvZHVjdDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJsb2NhdGlvbkNvdW50KCkgPiAwXCIgc2NvcGU9XCJjb2xcIj5Mb2NhdGlvbjwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiB3aWR0aD1cIjQ1XCI+UXVhbnRpdHk8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+UGFydGljdWxhcnM8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiIHdpZHRoPVwiNTBcIj48L3RoPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRib2R5IGZvcm1BcnJheU5hbWU9XCJzdG9ja19pc3N1ZV9wcm9kdWN0c1wiPlxuICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHJvdyBvZiBzdG9ja0lzc3VlUHJvZHVjdHMuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIiBbZm9ybUdyb3VwTmFtZV09XCJpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJyb3dcIj57eyBpICsgMSB9fTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9J291dGxpbmUnIGNsYXNzPVwidy0xMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Qcm9kdWN0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtc2VhcmNoYWJsZS1zZWxlY3RvciBhcGlVcmw9J2FwaS9wcm9kdWN0cycgZm9ybUNvbnRyb2xOYW1lPVwicHJvZHVjdF9pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZUZpZWxkPSduYW1lJyBbY2FjaGVdPVwidHJ1ZVwiIHJlcXVpcmVkPjwvYXBwLXNlYXJjaGFibGUtc2VsZWN0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJsb2NhdGlvbkNvdW50KCkgPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1sb2NhdGlvbi1zZWxlY3RvciBhcHBlYXJhbmNlPSdvdXRsaW5lJyBsYWJlbD1cIkxvY2F0aW9uIEZyb21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaW50PVwiV2hpY2ggd2FyZWhvdXNlIGFyZSB3ZSB0YWtpbmcgc3RvY2sgZnJvbT9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsb2NhdGlvbl9mcm9tX2lkXCI+PC9hcHAtbG9jYXRpb24tc2VsZWN0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSdvdXRsaW5lJyBjbGFzcz1cIndweC05MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlF1YW50aXR5PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJxdWFudGl0eVwiIHR5cGU9XCJudW1iZXJcIiBtaW49XCIwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9J291dGxpbmUnIGNsYXNzPSd3LTEwMCc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+UGFydGljdWxhcnM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInBhcnRpY3VsYXJzXCIgcm93cz1cIjJcIj48L3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1jZW50ZXIgYWxpZ24tbWlkZGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciB0ZXh0LXNlY29uZGFyeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXRlY2hsaWZ5LWljb24gcm9sZT0nYnV0dG9uJyBuYW1lPSdkZWxldGUnIChjbGljayk9XCJyZW1vdmVTdG9ja0lzc3VlUHJvZHVjdChpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiUmVtb3ZlIHJvd1wiPjwvYXBwLXRlY2hsaWZ5LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgPHRmb290PlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjZcIiBjbGFzcz1cInRleHQtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXJvdyBnYXAtMiBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNsZWFyUHJvZHVjdHMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3RvY2tJc3N1ZVByb2R1Y3RzLmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmJsb2NrPC9tYXQtaWNvbj4gQ0xFQVIgQUxMXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZFN0b2NrSXNzdWVQcm9kdWN0KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPiBBRERcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGZvb3Q+XG4gICAgICAgICAgICA8L3RhYmxlPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIG10LTJcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc1dvcmtpbmdcIiBtYXQtZmxhdC1idXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjYW5jZWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cImlzV29ya2luZyB8fCBzdG9ja0lzc3VlUHJvZHVjdHMubGVuZ3RoID09PSAwXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiPlNhdmU8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZm9ybT5cblxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cbjwvbWF0LWNhcmQ+Il19
|
|
198
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvY2staXNzdWUtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZlbnRvcnktY29tbW9uL3NyYy9saWIvaW52ZW50b3J5LWNvbW1vbi9zdG9jay1pc3N1ZS9zdG9jay1pc3N1ZS1mb3JtL3N0b2NrLWlzc3VlLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52ZW50b3J5LWNvbW1vbi9zcmMvbGliL2ludmVudG9yeS1jb21tb24vc3RvY2staXNzdWUvc3RvY2staXNzdWUtZm9ybS9zdG9jay1pc3N1ZS1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBMEIsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUVMLCtCQUErQixFQUUvQixxQkFBcUIsRUFDdEIsTUFBTSxtQkFBbUIsQ0FBQztBQUkzQixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFNUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFXbkQsTUFBTSxPQUFPLHVCQUF3QixTQUFRLHFCQUFxQjtJQVlqQztJQUNyQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFoQlYsYUFBYSxHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUNsQyxVQUFVLEdBQUcsTUFBTSxDQUFNLElBQUksQ0FBQyxDQUFDO0lBRS9CLFlBQVksR0FBRyxNQUFNLENBR1gsSUFBSSxDQUFDLENBQUE7SUFFUiwrQkFBK0IsQ0FBa0M7SUFFeEUsWUFBK0Isb0JBQTBDLEVBQy9ELEVBQWUsRUFDZixpQkFBb0MsRUFDcEMsS0FBcUIsRUFDckIsZUFBZ0MsRUFDaEMsUUFB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ekIsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2QixDQUFDO3dHQWxNVSx1QkFBdUI7NEZBQXZCLHVCQUF1Qix1R0N4QnBDLDB2TkFzSFcsMkNEbEdQLFlBQVk7OzRGQUlILHVCQUF1QjtrQkFUbkMsU0FBUzsrQkFDRSxzQkFBc0IsY0FFcEIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7cUJBQ2IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgc2lnbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBGb3JtQ29uZmlndXJhdGlvbkZvcm1TZXJ2aWNlLFxuICBGb3JtQ29uZmlndXJhdGlvblV0aWxpdHlTZXJ2aWNlLFxuICBGb3JtVmFsaWRhdG9yU2VydmljZSxcbiAgVGVjaGxpZnlGb3JtQ29tcG9uZW50XG59IGZyb20gXCJuZ3gtdGVjaGxpZnktY29yZVwiO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU3RvY2tJc3N1ZVNlcnZpY2UgfSBmcm9tICcuLi9zdG9jay1pc3N1ZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IExvY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2xvY2F0aW9uL2xvY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2hhcmVkTW9kdWxlIH0gZnJvbSBcIi4uLy4uL3NoYXJlZC5tb2R1bGVcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXN0b2NrLWlzc3VlLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vc3RvY2staXNzdWUtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBTaGFyZWRNb2R1bGUsXG4gIF1cbn0pXG5cbmV4cG9ydCBjbGFzcyBTdG9ja0lzc3VlRm9ybUNvbXBvbmVudCBleHRlbmRzIFRlY2hsaWZ5Rm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgbG9jYXRpb25Db3VudCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBzdG9ja0lzc3VlID0gc2lnbmFsPGFueT4obnVsbCk7XG5cbiAgaXNzdWFibGVEYXRhID0gc2lnbmFsPHtcbiAgICBpc3N1YWJsZV90eXBlOiBTdHJpbmcsXG4gICAgaXNzdWFibGVfaWQ6IG51bWJlclxuICB9IHwgbnVsbD4obnVsbClcblxuICBwdWJsaWMgZm9ybUNvbmZpZ3VyYXRpb25VdGlsaXR5U2VydmljZTogRm9ybUNvbmZpZ3VyYXRpb25VdGlsaXR5U2VydmljZTtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgb3ZlcnJpZGUgZm9ybVZhbGlkYXRvclNlcnZpY2U6IEZvcm1WYWxpZGF0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgc3RvY2tJc3N1ZVNlcnZpY2U6IFN0b2NrSXNzdWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgbG9jYXRpb25TZXJ2aWNlOiBMb2NhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24sXG4gICAgcHJpdmF0ZSBmb3JtQ29uZmlnU2VydmljZTogRm9ybUNvbmZpZ3VyYXRpb25Gb3JtU2VydmljZVxuICApIHtcbiAgICBzdXBlcihmb3JtVmFsaWRhdG9yU2VydmljZSk7XG5cbiAgICB0aGlzLmZvcm1Db25maWd1cmF0aW9uVXRpbGl0eVNlcnZpY2UgPSBuZXcgRm9ybUNvbmZpZ3VyYXRpb25VdGlsaXR5U2VydmljZSgpO1xuXG4gICAgdGhpcy5lcnJvck1lc3NhZ2VzID0ge1xuICAgICAgZGF0ZToge1xuICAgICAgICByZXF1aXJlZDogJ1RoZSBkYXRlIGZpZWxkIGlzIHJlcXVpcmVkLicsXG4gICAgICB9LFxuICAgICAgcmVjaXBpZW50X2lkOiB7XG4gICAgICAgIHJlcXVpcmVkOiAnUGxlYXNlIHNlbGVjdCBhIHJlY2lwaWVudC4nLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBkYXRlOiBbbmV3IERhdGUoKSwgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSldLFxuICAgICAgcGFydGljdWxhcnM6IFsnJ10sXG4gICAgICByZWNpcGllbnRfaWQ6IFsnJ10sXG4gICAgICBzdG9ja19pc3N1ZV9wcm9kdWN0czogdGhpcy5mYi5hcnJheShbXSlcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubG9jYXRpb25TZXJ2aWNlLmNvdW50KCkuc3Vic2NyaWJlKChjb3VudDogbnVtYmVyKSA9PiB7XG4gICAgICB0aGlzLmxvY2F0aW9uQ291bnQuc2V0KGNvdW50KTtcbiAgICB9KTtcblxuICAgIHRoaXMuZm9ybUNvbmZpZ3VyYXRpb25VdGlsaXR5U2VydmljZS5pbml0aWFsaXplKHRoaXMuZm9ybUNvbmZpZ1NlcnZpY2UsICdzdG9jay1pc3N1ZScpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuZm9ybS5nZXQoJ3JlY2lwaWVudF9pZCcpPy5zZXRWYWxpZGF0b3JzKFxuICAgICAgICAgIHRoaXMuZm9ybUNvbmZpZ3VyYXRpb25VdGlsaXR5U2VydmljZS5nZXRGaWVsZFJlcXVpcmVkKCdyZWNpcGllbnRfaWQnKSA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBudWxsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZm9ybS5nZXQoJ3JlY2lwaWVudF9pZCcpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBpZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdpZCcpO1xuICAgIGlmIChpZCkge1xuICAgICAgdGhpcy5sb2FkU3RvY2tJc3N1ZSgraWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkZFN0b2NrSXNzdWVQcm9kdWN0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHBhcmFtczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuaXNzdWFibGVEYXRhLnNldCh7XG4gICAgICAgICAgaXNzdWFibGVfdHlwZTogcGFyYW1zWydpc3N1YWJsZV90eXBlJ10sXG4gICAgICAgICAgaXNzdWFibGVfaWQ6IHBhcmFtc1snaXNzdWFibGVfaWQnXVxuICAgICAgICB9KTtcblxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIGxvYWRTdG9ja0lzc3VlKGlkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmlzV29ya2luZyA9IHRydWU7XG4gICAgdGhpcy5zdG9ja0lzc3VlU2VydmljZS5zaG93KGlkLCB7XG4gICAgICB3aXRoOlxuICAgICAgICAnc3RvY2tJc3N1ZVByb2R1Y3RzLnByb2R1Y3Qsc3RvY2tJc3N1ZVByb2R1Y3RzLmxvY2F0aW9uJ1xuICAgIH0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmlzV29ya2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0b2NrSXNzdWUuc2V0KHJlc3BvbnNlLml0ZW0pO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNXb3JraW5nID0gZmFsc2U7XG4gICAgICB9LFxuICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgY29uc3QgaXNzdWUgPSB0aGlzLnN0b2NrSXNzdWUoKTtcbiAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgIGRhdGU6IGlzc3VlLmRhdGUgPyBuZXcgRGF0ZShpc3N1ZS5kYXRlKSA6IG5ldyBEYXRlKCksXG4gICAgICAgICAgcGFydGljdWxhcnM6IGlzc3VlLmRldGFpbHMsXG4gICAgICAgICAgcmVjaXBpZW50X2lkOiBpc3N1ZS5yZWNpcGllbnRfaWQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc3RvY2tJc3N1ZVByb2R1Y3RzLmNsZWFyKCk7XG4gICAgICAgIGlzc3VlLnN0b2NrX2lzc3VlX3Byb2R1Y3RzPy5mb3JFYWNoKChzaXA6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5jcmVhdGVTdG9ja0lzc3VlUHJvZHVjdCgpO1xuICAgICAgICAgIGdyb3VwLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgaWQ6IHNpcC5pZCxcbiAgICAgICAgICAgIHByb2R1Y3RfaWQ6IHNpcC5wcm9kdWN0X2lkLFxuICAgICAgICAgICAgbG9jYXRpb25fZnJvbV9pZDogc2lwLmxvY2F0aW9uX2Zyb21faWQsXG4gICAgICAgICAgICBxdWFudGl0eTogc2lwLnF1YW50aXR5LFxuICAgICAgICAgICAgcGFydGljdWxhcnM6IHNpcC5wYXJ0aWN1bGFycyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnN0b2NrSXNzdWVQcm9kdWN0cy5wdXNoKGdyb3VwKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXQgc3RvY2tJc3N1ZVByb2R1Y3RzKCk6IEZvcm1BcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ3N0b2NrX2lzc3VlX3Byb2R1Y3RzJykgYXMgRm9ybUFycmF5O1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRMb2NhdGlvbihpbmRleDogbnVtYmVyKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5zdG9ja0lzc3VlKClcbiAgICAgID8uc3RvY2tfaXNzdWVfcHJvZHVjdHM/LmZpbmQoXG4gICAgICAgIChzaXA6IGFueSkgPT4gc2lwLmlkID09PSB0aGlzLnN0b2NrSXNzdWVQcm9kdWN0cy5hdChpbmRleCk/LmdldCgnaWQnKT8udmFsdWVcbiAgICAgICk/LmxvY2F0aW9uO1xuICB9XG5cbiAgY3JlYXRlU3RvY2tJc3N1ZVByb2R1Y3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgaWQ6IFsnJ10sXG4gICAgICBwcm9kdWN0X2lkOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgbG9jYXRpb25fZnJvbV9pZDogWycnLCB0aGlzLmxvY2F0aW9uQ291bnQoKSA+IDAgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogbnVsbF0sXG4gICAgICBxdWFudGl0eTogWzAsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbigwKV1dLFxuICAgICAgcGFydGljdWxhcnM6IFsnJ10sXG4gICAgICBpc3N1YWJsZV9pZDogW3RoaXMuaXNzdWFibGVEYXRhKCk/Lmlzc3VhYmxlX2lkID8/ICcnXSxcbiAgICAgIGlzc3VhYmxlX3R5cGU6IFt0aGlzLmlzc3VhYmxlRGF0YSgpPy5pc3N1YWJsZV90eXBlID8/ICcnXVxuICAgIH0pO1xuICB9XG5cbiAgYWRkU3RvY2tJc3N1ZVByb2R1Y3QoKSB7XG4gICAgdGhpcy5zdG9ja0lzc3VlUHJvZHVjdHMucHVzaCh0aGlzLmNyZWF0ZVN0b2NrSXNzdWVQcm9kdWN0KCkpO1xuICB9XG5cbiAgcmVtb3ZlU3RvY2tJc3N1ZVByb2R1Y3QoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc3RvY2tJc3N1ZVByb2R1Y3RzLnJlbW92ZUF0KGluZGV4KTtcbiAgfVxuXG4gIGNsZWFyUHJvZHVjdHMoKSB7XG4gICAgdGhpcy5zdG9ja0lzc3VlUHJvZHVjdHMuY2xlYXIoKTtcbiAgfVxuXG4gIHNhdmUoKSB7XG4gICAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkKSB7XG4gICAgICB0aGlzLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgdGhpcy5mb3JtLm1hcmtBc0RpcnR5KCk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydCgnUGxlYXNlIGNoZWNrIHRoZSBmb3JtIGZvciBlcnJvcnMuJywgJ2Vycm9yJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RvY2tJc3N1ZVByb2R1Y3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkQWxlcnQoJ1BsZWFzZSBhZGQgYXQgbGVhc3Qgb25lIHByb2R1Y3QuJywgJ2Vycm9yJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgICBjb25zdCBkYXRhOiBhbnkgPSB7XG4gICAgICBpZDogdGhpcy5zdG9ja0lzc3VlKCk/LmlkID8/IG51bGwsXG4gICAgICBkYXRlOiBtb21lbnQoZm9ybURhdGEuZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJyksXG4gICAgICBkZXRhaWxzOiBmb3JtRGF0YS5wYXJ0aWN1bGFycyxcbiAgICAgIHJlY2lwaWVudF9pZDogZm9ybURhdGEucmVjaXBpZW50X2lkIHx8IG51bGwsXG4gICAgICBwcm9kdWN0czogZm9ybURhdGEuc3RvY2tfaXNzdWVfcHJvZHVjdHMubWFwKChyb3c6IGFueSkgPT4gKHtcbiAgICAgICAgaWQ6IHJvdy5wcm9kdWN0X2lkLFxuICAgICAgICBwcm9kdWN0X2lkOiByb3cucHJvZHVjdF9pZCxcbiAgICAgICAgcXVhbnRpdHk6IHJvdy5xdWFudGl0eSxcbiAgICAgICAgbG9jYXRpb25fZnJvbV9pZDogcm93LmxvY2F0aW9uX2Zyb21faWQsXG4gICAgICAgIHBhcnRpY3VsYXJzOiByb3cucGFydGljdWxhcnMsXG4gICAgICAgIGlzc3VhYmxlX2lkOiByb3cuaXNzdWFibGVfaWQsXG4gICAgICAgIGlzc3VhYmxlX3R5cGU6IHJvdy5pc3N1YWJsZV90eXBlXG4gICAgICB9KSlcbiAgICB9O1xuXG4gICAgdGhpcy5pc1dvcmtpbmcgPSB0cnVlO1xuICAgIGNvbnN0IHJlcXVlc3QkID0gdGhpcy5zdG9ja0lzc3VlKCk/LmlkXG4gICAgICA/IHRoaXMuc3RvY2tJc3N1ZVNlcnZpY2UudXBkYXRlKGRhdGEpXG4gICAgICA6IHRoaXMuc3RvY2tJc3N1ZVNlcnZpY2Uuc3RvcmUoZGF0YSk7XG5cbiAgICByZXF1ZXN0JC5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLmlzV29ya2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydCgnU3RvY2sgaXNzdWVzIHNhdmVkIHN1Y2Nlc3NmdWxseSEnLCAnc3VjY2VzcycpO1xuICAgICAgICB0aGlzLmxvY2F0aW9uLmJhY2soKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLmlzV29ya2luZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMubG9jYXRpb24uYmFjaygpO1xuICB9XG59XG4iLCI8bWF0LWNhcmQgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTIgY29udGFpbmVyXCI+XG4gICAgPG1hdC1jYXJkLWNvbnRlbnQ+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIj5cbiAgICAgICAgICAgIDxoNT5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgYWxpZ24tbWlkZGxlXCI+dXBsb2FkPC9zcGFuPlxuICAgICAgICAgICAgICAgIElzc3VlIFN0b2NrXG4gICAgICAgICAgICA8L2g1PlxuICAgICAgICAgICAgPGFwcC1mb3JtLWNvbmZpZ3VyYXRpb24tZm9yLWZvcm0gZm9ybUNvZGU9XCJzdG9jay1pc3N1ZVwiPjwvYXBwLWZvcm0tY29uZmlndXJhdGlvbi1mb3ItZm9ybT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGZvcm0gY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTJcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiAoc3VibWl0KT1cInNhdmUoKVwiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXJvdyBnYXAtMiBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0nb3V0bGluZScgY2xhc3M9XCJ3LTEwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5EYXRlPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW21hdERhdGVwaWNrZXJdPVwicGlja2VyXCIgcGxhY2Vob2xkZXI9XCJEYXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGF0ZVwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjcGlja2VyPjwvbWF0LWRhdGVwaWNrZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNGaWVsZFZhbGlkKCdkYXRlJylcIj57eyBnZXRFcnJvck1lc3NhZ2UoJ2RhdGUnKSB9fTwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSdvdXRsaW5lJyBjbGFzcz1cInctMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybUNvbmZpZ3VyYXRpb25VdGlsaXR5U2VydmljZS5nZXRGaWVsZEVuYWJsZWQoJ3JlY2lwaWVudF9pZCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlJlY2lwaWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdXAgKm5nSWY9XCJmb3JtQ29uZmlndXJhdGlvblV0aWxpdHlTZXJ2aWNlLmdldEZpZWxkUmVxdWlyZWQoJ3JlY2lwaWVudF9pZCcpXCI+Kjwvc3VwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXNlYXJjaGFibGUtc2VsZWN0b3IgYXBpVXJsPVwiYXBpL3JlY2lwaWVudHNcIiBmb3JtQ29udHJvbE5hbWU9XCJyZWNpcGllbnRfaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlRmllbGQ9XCJuYW1lXCI+PC9hcHAtc2VhcmNoYWJsZS1zZWxlY3Rvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJpc0ZpZWxkVmFsaWQoJ3JlY2lwaWVudF9pZCcpXCI+e3sgZ2V0RXJyb3JNZXNzYWdlKCdyZWNpcGllbnRfaWQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9J291dGxpbmUnIGNsYXNzPVwidy0xMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+UGFydGljdWxhcnM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlBhcnRpY3VsYXJzXCIgZm9ybUNvbnRyb2xOYW1lPVwicGFydGljdWxhcnNcIj48L3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIG10LTNcIj5cbiAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPiM8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+UHJvZHVjdDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJsb2NhdGlvbkNvdW50KCkgPiAwXCIgc2NvcGU9XCJjb2xcIj5Mb2NhdGlvbjwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiB3aWR0aD1cIjQ1XCI+UXVhbnRpdHk8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+UGFydGljdWxhcnM8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiIHdpZHRoPVwiNTBcIj48L3RoPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRib2R5IGZvcm1BcnJheU5hbWU9XCJzdG9ja19pc3N1ZV9wcm9kdWN0c1wiPlxuICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHJvdyBvZiBzdG9ja0lzc3VlUHJvZHVjdHMuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIiBbZm9ybUdyb3VwTmFtZV09XCJpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJyb3dcIj57eyBpICsgMSB9fTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9J291dGxpbmUnIGNsYXNzPVwidy0xMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Qcm9kdWN0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtc2VhcmNoYWJsZS1zZWxlY3RvciBhcGlVcmw9J2FwaS9wcm9kdWN0cycgZm9ybUNvbnRyb2xOYW1lPVwicHJvZHVjdF9pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZUZpZWxkPSduYW1lJyBbY2FjaGVdPVwidHJ1ZVwiIHJlcXVpcmVkPjwvYXBwLXNlYXJjaGFibGUtc2VsZWN0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJsb2NhdGlvbkNvdW50KCkgPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9J291dGxpbmUnIGNsYXNzPVwidy0xMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Mb2NhdGlvbiBGcm9tPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtc2VhcmNoYWJsZS1zZWxlY3RvciBhcGlVcmw9J2FwaS9pbnZlbnRvcnktbG9jYXRpb25zP3N0YXR1c19pZHM9MSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImxvY2F0aW9uX2Zyb21faWRcIiB0aXRsZUZpZWxkPSd0aXRsZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZFZhbHVlXT1cImdldFNlbGVjdGVkTG9jYXRpb24oaSlcIj48L2FwcC1zZWFyY2hhYmxlLXNlbGVjdG9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWhpbnQ+V2hpY2ggd2FyZWhvdXNlIGFyZSB3ZSB0YWtpbmcgc3RvY2sgZnJvbT88L21hdC1oaW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSdvdXRsaW5lJyBjbGFzcz1cIndweC05MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlF1YW50aXR5PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJxdWFudGl0eVwiIHR5cGU9XCJudW1iZXJcIiBtaW49XCIwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9J291dGxpbmUnIGNsYXNzPSd3LTEwMCc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+UGFydGljdWxhcnM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInBhcnRpY3VsYXJzXCIgcm93cz1cIjJcIj48L3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1jZW50ZXIgYWxpZ24tbWlkZGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciB0ZXh0LXNlY29uZGFyeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXRlY2hsaWZ5LWljb24gcm9sZT0nYnV0dG9uJyBuYW1lPSdkZWxldGUnIChjbGljayk9XCJyZW1vdmVTdG9ja0lzc3VlUHJvZHVjdChpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiUmVtb3ZlIHJvd1wiPjwvYXBwLXRlY2hsaWZ5LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgPHRmb290PlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjZcIiBjbGFzcz1cInRleHQtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXJvdyBnYXAtMiBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNsZWFyUHJvZHVjdHMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3RvY2tJc3N1ZVByb2R1Y3RzLmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmJsb2NrPC9tYXQtaWNvbj4gQ0xFQVIgQUxMXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZFN0b2NrSXNzdWVQcm9kdWN0KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPiBBRERcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGZvb3Q+XG4gICAgICAgICAgICA8L3RhYmxlPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIG10LTJcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc1dvcmtpbmdcIiBtYXQtZmxhdC1idXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjYW5jZWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cImlzV29ya2luZyB8fCBzdG9ja0lzc3VlUHJvZHVjdHMubGVuZ3RoID09PSAwXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiPlNhdmU8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZm9ybT5cblxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cbjwvbWF0LWNhcmQ+Il19
|
package/esm2022/lib/inventory-common/stock-issue/stock-issue-page/stock-issue-page.component.mjs
CHANGED
|
@@ -62,7 +62,7 @@ let StockIssuePageComponent = class StockIssuePageComponent {
|
|
|
62
62
|
this.selectedColumns = config.filter(col => col.isSelected);
|
|
63
63
|
}
|
|
64
64
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StockIssuePageComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
|
|
65
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: StockIssuePageComponent, selector: "app-stock-issue-page", inputs: { product: { classPropertyName: "product", publicName: "product", isSignal: false, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: false, isRequired: false, transformFunction: null }, showActions: { classPropertyName: "showActions", publicName: "showActions", isSignal: false, isRequired: false, transformFunction: null }, showFilters: { classPropertyName: "showFilters", publicName: "showFilters", isSignal: false, isRequired: false, transformFunction: null }, issuableData: { classPropertyName: "issuableData", publicName: "issuableData", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { listUpdated: "listUpdated" }, viewQueries: [{ propertyName: "itemizedList", first: true, predicate: StockIssueProductListComponent, descendants: true }, { propertyName: "groupedList", first: true, predicate: StockIssueListComponent, descendants: true }], ngImport: i0, template: "<mat-card *ngIf=\"!product\" class=\"mb-2\">\n <mat-card-content class=\"d-flex justify-content-between align-items-center gap-3\">\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <h3 class=\"mb-0\">{{ label }}</h3>\n\n <div class=\"d-flex gap-2 align-items-center ms-2 d-print-none\">\n <app-techlify-icon role='button' name='add'\n [routerLink]=\"['/inventory/stock-issues/form']\" [queryParams]=\"issuableData()\"></app-techlify-icon>\n\n <span *ngIf=\"showActions\" matTooltip=\"Import\" routerLink=\"import\"\n class=\"cursor-pointer material-symbols-outlined\">\n file_upload\n </span>\n\n <app-export-to-excel-button tableId=\"stockIssueTable\" fileName=\"Stock Issues\"\n (onExportStart)=\"exportInProgress.set(true)\" (onExportEnd)=\"exportInProgress.set(false)\">\n </app-export-to-excel-button>\n\n <app-column-selector *ngIf=\"showActions && columnConfig.length > 0\" mode=\"icon\" [columnConfigs]=\"columnConfig\"\n [(selectedColumns)]=\"selectedColumns\"></app-column-selector>\n\n <mat-button-toggle-group class=\"view-toggle\" [value]=\"selectedView()\" (change)=\"selectedView.set($event.value)\">\n <mat-button-toggle value=\"itemized\">Itemized</mat-button-toggle>\n <mat-button-toggle value=\"grouped\">Grouped</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n </div>\n\n <form [formGroup]=\"filterForm\" *ngIf=\"showFilters\" class=\"d-flex align-items-center gap-2 flex-wrap\">\n <mat-form-field class='fl-md'>\n <mat-label>Search</mat-label>\n <input matInput placeholder=\"Search products\" formControlName=\"search\" />\n </mat-form-field>\n\n <app-timeline-filter appearance=\"fill\" labelText=\"Date\" formControlName=\"duration\" [form]=\"filterForm\"\n [showClearButton]=\"true\"></app-timeline-filter>\n\n <mat-form-field class='fl-sm'>\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-form-field>\n\n <mat-form-field class='fl-sm'>\n <mat-label>Measure</mat-label>\n <app-searchable-selector apiUrl=\"api/product-measures\" formControlName=\"measure_ids\" [multiple]=\"true\">\n </app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field class='fl-sm'>\n <mat-label>Location From</mat-label>\n <app-searchable-selector apiUrl=\"api/inventory-locations\" formControlName=\"location_ids\" [multiple]=\"true\">\n </app-searchable-selector>\n </mat-form-field>\n </form>\n </mat-card-content>\n</mat-card>\n\n<app-stock-issue-products-list *ngIf=\"selectedView() === 'itemized'\" [filters]=\"filtersValue()\"\n [isProductView]=\"!!product\" [selectedColumns]=\"selectedColumns\" [exportInProgress]=\"exportInProgress()\"\n (columnConfigReady)=\"onColumnConfigReady($event)\" (listUpdated)=\"listUpdated.emit($event)\" [issuableData]=\"issuableData()\">\n</app-stock-issue-products-list>\n\n<app-stock-issue-list *ngIf=\"selectedView() === 'grouped'\" [filters]=\"filtersValue()\"\n [selectedColumns]=\"selectedColumns\" [exportInProgress]=\"exportInProgress()\"\n (columnConfigReady)=\"onColumnConfigReady($event)\" (listUpdated)=\"listUpdated.emit($event)\" [issuableData]=\"issuableData()\">\n</app-stock-issue-list>", styles: [":host ::ng-deep .view-toggle{--mat-standard-button-toggle-height: 28px;font-size:12px}:host ::ng-deep .mat-mdc-footer-row{position:sticky;bottom:0;background-color:#fff;z-index:10;box-shadow:0 -2px 4px #0000001a}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.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: i5.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i5.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i7.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i7.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "directive", type: i8.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i9.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", "isEmitInitialEvent", "required", "disabled", "value"], outputs: ["selectedValueChange", "selectionChange", "itemsChange"] }, { kind: "component", type: i9.TimelineFilterComponent, selector: "app-timeline-filter", inputs: ["defaultValue", "required", "disabled", "value", "timelines", "dateFrom", "dateTo", "appearance", "showClearButton", "form", "labelText"], outputs: ["selectionChange"] }, { 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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[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"] }, { kind: "component", type: i9.ColumnSelectorComponent, selector: "app-column-selector", inputs: ["label", "mode", "columnConfigs", "selectedColumns", "isExportWorking"], outputs: ["selectedColumnsChange", "displayedColumnsChange"] }, { kind: "component", type: i9.TechlifyIconComponent, selector: "app-techlify-icon", inputs: ["name", "size"] }, { kind: "component", type: i10.ExportToExcelButtonComponent, selector: "app-export-to-excel-button", inputs: ["tableId", "fileName"], outputs: ["onExportStart", "onExportEnd"] }, { kind: "component", type: i11.StockIssueListComponent, selector: "app-stock-issue-list", inputs: ["filters", "selectedColumns", "exportInProgress", "issuableData"], outputs: ["listUpdated", "columnConfigReady"] }, { kind: "component", type: i12.StockIssueProductListComponent, selector: "app-stock-issue-products-list", inputs: ["filters", "isProductView", "product", "selectedColumns", "exportInProgress", "issuableData"], outputs: ["selectedColumnsChange", "listUpdated", "columnConfigReady"] }], preserveWhitespaces: true });
|
|
65
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: StockIssuePageComponent, selector: "app-stock-issue-page", inputs: { product: { classPropertyName: "product", publicName: "product", isSignal: false, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: false, isRequired: false, transformFunction: null }, showActions: { classPropertyName: "showActions", publicName: "showActions", isSignal: false, isRequired: false, transformFunction: null }, showFilters: { classPropertyName: "showFilters", publicName: "showFilters", isSignal: false, isRequired: false, transformFunction: null }, issuableData: { classPropertyName: "issuableData", publicName: "issuableData", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { listUpdated: "listUpdated" }, viewQueries: [{ propertyName: "itemizedList", first: true, predicate: StockIssueProductListComponent, descendants: true }, { propertyName: "groupedList", first: true, predicate: StockIssueListComponent, descendants: true }], ngImport: i0, template: "<mat-card *ngIf=\"!product\" class=\"mb-2\">\n <mat-card-content class=\"d-flex justify-content-between align-items-center gap-3\">\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <h3 class=\"mb-0\">{{ label }}</h3>\n\n <div class=\"d-flex gap-2 align-items-center ms-2 d-print-none\">\n <app-techlify-icon role='button' name='add'\n [routerLink]=\"['/inventory/stock-issues/form']\" [queryParams]=\"issuableData()\"></app-techlify-icon>\n\n <span *ngIf=\"showActions\" matTooltip=\"Import\" routerLink=\"import\"\n class=\"cursor-pointer material-symbols-outlined\">\n file_upload\n </span>\n\n <app-export-to-excel-button tableId=\"stockIssueTable\" fileName=\"Stock Issues\"\n (onExportStart)=\"exportInProgress.set(true)\" (onExportEnd)=\"exportInProgress.set(false)\">\n </app-export-to-excel-button>\n\n <app-column-selector *ngIf=\"showActions && columnConfig.length > 0\" mode=\"icon\" [columnConfigs]=\"columnConfig\"\n [(selectedColumns)]=\"selectedColumns\"></app-column-selector>\n\n <mat-button-toggle-group class=\"view-toggle\" [value]=\"selectedView()\" (change)=\"selectedView.set($event.value)\">\n <mat-button-toggle value=\"itemized\">Itemized</mat-button-toggle>\n <mat-button-toggle value=\"grouped\">Grouped</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n </div>\n\n <form [formGroup]=\"filterForm\" *ngIf=\"showFilters\" class=\"d-flex align-items-center gap-2 flex-wrap\">\n <mat-form-field class='fl-md'>\n <mat-label>Search</mat-label>\n <input matInput placeholder=\"Search products\" formControlName=\"search\" />\n </mat-form-field>\n\n <app-timeline-filter appearance=\"fill\" labelText=\"Date\" formControlName=\"duration\" [form]=\"filterForm\"\n [showClearButton]=\"true\"></app-timeline-filter>\n\n <mat-form-field class='fl-sm'>\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-form-field>\n\n <mat-form-field class='fl-sm'>\n <mat-label>Measure</mat-label>\n <app-searchable-selector apiUrl=\"api/product-measures\" formControlName=\"measure_ids\" [multiple]=\"true\">\n </app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field class='fl-sm'>\n <mat-label>Location From</mat-label>\n <app-searchable-selector apiUrl=\"api/inventory-locations\" formControlName=\"location_ids\" [multiple]=\"true\">\n </app-searchable-selector>\n </mat-form-field>\n </form>\n </mat-card-content>\n</mat-card>\n\n<app-stock-issue-products-list *ngIf=\"selectedView() === 'itemized'\" [filters]=\"filtersValue()\"\n [isProductView]=\"!!product\" [selectedColumns]=\"selectedColumns\" [exportInProgress]=\"exportInProgress()\"\n (columnConfigReady)=\"onColumnConfigReady($event)\" (listUpdated)=\"listUpdated.emit($event)\" [issuableData]=\"issuableData()\">\n</app-stock-issue-products-list>\n\n<app-stock-issue-list *ngIf=\"selectedView() === 'grouped'\" [filters]=\"filtersValue()\"\n [selectedColumns]=\"selectedColumns\" [exportInProgress]=\"exportInProgress()\"\n (columnConfigReady)=\"onColumnConfigReady($event)\" (listUpdated)=\"listUpdated.emit($event)\" [issuableData]=\"issuableData()\">\n</app-stock-issue-list>", styles: [":host ::ng-deep .view-toggle{--mat-standard-button-toggle-height: 28px;font-size:12px}:host ::ng-deep .mat-mdc-footer-row{position:sticky;bottom:0;background-color:#fff;z-index:10;box-shadow:0 -2px 4px #0000001a}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.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: i5.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i5.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i7.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i7.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "directive", type: i8.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i9.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", "isEmitInitialEvent", "required", "disabled", "value"], outputs: ["selectedValueChange", "selectionChange", "itemsChange", "isItemsEmpty"] }, { kind: "component", type: i9.TimelineFilterComponent, selector: "app-timeline-filter", inputs: ["defaultValue", "required", "disabled", "value", "timelines", "dateFrom", "dateTo", "appearance", "showClearButton", "form", "labelText"], outputs: ["selectionChange"] }, { 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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[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"] }, { kind: "component", type: i9.ColumnSelectorComponent, selector: "app-column-selector", inputs: ["label", "mode", "columnConfigs", "selectedColumns", "isExportWorking"], outputs: ["selectedColumnsChange", "displayedColumnsChange"] }, { kind: "component", type: i9.TechlifyIconComponent, selector: "app-techlify-icon", inputs: ["name", "size"] }, { kind: "component", type: i10.ExportToExcelButtonComponent, selector: "app-export-to-excel-button", inputs: ["tableId", "fileName"], outputs: ["onExportStart", "onExportEnd"] }, { kind: "component", type: i11.StockIssueListComponent, selector: "app-stock-issue-list", inputs: ["filters", "selectedColumns", "exportInProgress", "issuableData"], outputs: ["listUpdated", "columnConfigReady"] }, { kind: "component", type: i12.StockIssueProductListComponent, selector: "app-stock-issue-products-list", inputs: ["filters", "isProductView", "product", "selectedColumns", "exportInProgress", "issuableData"], outputs: ["selectedColumnsChange", "listUpdated", "columnConfigReady"] }], preserveWhitespaces: true });
|
|
66
66
|
};
|
|
67
67
|
StockIssuePageComponent = __decorate([
|
|
68
68
|
UntilDestroy()
|