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
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { a8 as ExportToExcelButtonComponent, a2 as IncidentFormButtonComponent, a1 as IncidentFormComponent, a0 as IncidentListComponent, _ as IncidentModule, $ as IncidentService, e as InventoryCommonModule, I as InventoryCommonRoutingModule, ac as LocationFormButtonComponent, ab as LocationFormComponent, aa as LocationListComponent, a9 as LocationModule, L as LocationService, Q as MeasureModule, R as MeasureService, Z as PayeeSelectorComponent, Y as PayeeSelectorModule, i as ProductBasicInfoComponent, q as ProductBatchUpdateFormComponent, j as ProductFormButtonComponent, h as ProductFormComponent, p as ProductFormService, r as ProductImportPageComponent, n as ProductListComponent, g as ProductModule, k as ProductQuickSearchComponent, m as ProductSearchComponent, l as ProductSearchModule, o as ProductService, s as ProductViewPageComponent, a7 as RatingFormButtonComponent, a6 as RatingFormComponent, a5 as RatingListComponent, a3 as RatingModule, a4 as RatingService, ah as ShelfFormButtonComponent, ag as ShelfFormComponent, af as ShelfListComponent, ad as ShelfModule, ae as ShelfService, x as StockIssueListComponent, t as StockIssueModule, u as StockIssuePageComponent, v as StockIssuePageModule, A as StockIssueProductFormButtonComponent, z as StockIssueProductFormComponent, y as StockIssueProductListComponent, c as StockIssueProductService, w as StockIssueSingleProductFormComponent, D as StockReceiptListComponent, C as StockReceiptPageComponent, J as StockReceiptProductFormButtonComponent, H as StockReceiptProductFormComponent, E as StockReceiptProductsListComponent, F as StockReceiptSingleProductFormComponent, G as StockReceiptViewComponent, B as StockReceiptsModule, f as StockSummaryService, N as StockTransferFormComponent, K as StockTransferListComponent, O as StockTransferService, V as SupplierFormComponent, W as SupplierListComponent, U as SupplierModule, X as SupplierTypeService, T as TechlifyFilterComponent, a as TechlifyFilterModule } from './techlify-inventory-common-techlify-inventory-common-CWxzlvVi.mjs';
|
|
2
2
|
//# sourceMappingURL=techlify-inventory-common.mjs.map
|
|
@@ -4,7 +4,7 @@ import * as i0 from "@angular/core";
|
|
|
4
4
|
export declare class LocationService extends TechlifyService {
|
|
5
5
|
httpService: HttpService;
|
|
6
6
|
constructor(httpService: HttpService);
|
|
7
|
-
count(): Observable<number>;
|
|
7
|
+
count(params?: any): Observable<number>;
|
|
8
8
|
/**
|
|
9
9
|
* @todo remove this function from here
|
|
10
10
|
*/
|
|
@@ -8,6 +8,6 @@ import * as i6 from "@angular/forms";
|
|
|
8
8
|
import * as i7 from "@angular/router";
|
|
9
9
|
export declare class SharedModule {
|
|
10
10
|
static ɵfac: i0.ɵɵFactoryDeclaration<SharedModule, never>;
|
|
11
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<SharedModule, never, [typeof i1.TechlifyDeleteButtonComponent, typeof i1.TechlifyFormButtonComponent, typeof i2.InfiniteScrollDirective], [typeof i3.CommonModule, typeof i1.FormConfigurationForFormModule, typeof i2.InfiniteScrollDirective, typeof i4.MaterialModule, typeof i5.NgxPermissionsModule, typeof i6.ReactiveFormsModule, typeof i7.RouterModule, typeof i1.SearchableSelectorModule, typeof i1.TechlifyDeleteButtonComponent, typeof i1.TechlifyFormButtonComponent, typeof i1.TechlifyIconModule, typeof i1.TimelineFilterModule]>;
|
|
11
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<SharedModule, never, [typeof i1.TechlifyDeleteButtonComponent, typeof i1.TechlifyFormButtonComponent, typeof i2.InfiniteScrollDirective], [typeof i1.AuditLogForModelModule, typeof i3.CommonModule, typeof i1.FormConfigurationForFormModule, typeof i2.InfiniteScrollDirective, typeof i4.MaterialModule, typeof i5.NgxPermissionsModule, typeof i1.NoteModule, typeof i6.ReactiveFormsModule, typeof i7.RouterModule, typeof i1.SearchableSelectorModule, typeof i1.TechlifyDeleteButtonComponent, typeof i1.TechlifyFormButtonComponent, typeof i1.TechlifyIconModule, typeof i1.TimelineFilterModule]>;
|
|
12
12
|
static ɵinj: i0.ɵɵInjectorDeclaration<SharedModule>;
|
|
13
13
|
}
|
|
@@ -25,6 +25,7 @@ export declare class StockIssueFormComponent extends TechlifyFormComponent imple
|
|
|
25
25
|
ngOnInit(): void;
|
|
26
26
|
private loadStockIssue;
|
|
27
27
|
get stockIssueProducts(): FormArray;
|
|
28
|
+
getSelectedLocation(index: number): any;
|
|
28
29
|
createStockIssueProduct(): import("@angular/forms").FormGroup<{
|
|
29
30
|
id: import("@angular/forms").FormControl<string | null>;
|
|
30
31
|
product_id: import("@angular/forms").FormControl<string | null>;
|
package/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form.component.d.ts
CHANGED
|
@@ -31,6 +31,7 @@ export declare class StockReceiptFormComponent extends TechlifyFormComponent imp
|
|
|
31
31
|
particulars: import("@angular/forms").FormControl<string | null>;
|
|
32
32
|
}>;
|
|
33
33
|
getSelectedProduct(index: number): any;
|
|
34
|
+
getSelectedLocation(index: number): any;
|
|
34
35
|
addStockReceiptProduct(): void;
|
|
35
36
|
removeStockReceiptProduct(index: number): void;
|
|
36
37
|
clearProducts(): void;
|
|
@@ -17,6 +17,6 @@ import * as i15 from "../shared/export-to-excel-button/export-to-excel-button.co
|
|
|
17
17
|
import * as i16 from "./stock-receipt-product-form/stock-receipt-product-form-button/stock-receipt-product-form-button.component";
|
|
18
18
|
export declare class StockReceiptsModule {
|
|
19
19
|
static ɵfac: i0.ɵɵFactoryDeclaration<StockReceiptsModule, never>;
|
|
20
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<StockReceiptsModule, [typeof i1.StockReceiptPageComponent, typeof i2.StockReceiptViewComponent, typeof i3.StockReceiptListComponent, typeof i4.StockReceiptProductsListComponent], [typeof i5.CommonModule, typeof i6.MaterialModule, typeof i7.StockReceiptsRoutingModule, typeof i8.TechlifyFilterModule, typeof i9.SearchableSelectorModule, typeof i9.TimelineFilterModule, typeof i10.ReactiveFormsModule, typeof i11.PayeeSelectorModule, typeof i12.InfiniteScrollDirective, typeof i13.ProductCategoryBadgesComponent, typeof i9.ColumnSelectorModule, typeof i9.
|
|
20
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<StockReceiptsModule, [typeof i1.StockReceiptPageComponent, typeof i2.StockReceiptViewComponent, typeof i3.StockReceiptListComponent, typeof i4.StockReceiptProductsListComponent], [typeof i5.CommonModule, typeof i6.MaterialModule, typeof i7.StockReceiptsRoutingModule, typeof i8.TechlifyFilterModule, typeof i9.SearchableSelectorModule, typeof i9.TimelineFilterModule, typeof i10.ReactiveFormsModule, typeof i11.PayeeSelectorModule, typeof i12.InfiniteScrollDirective, typeof i13.ProductCategoryBadgesComponent, typeof i9.ColumnSelectorModule, typeof i9.EntityFileListModule, typeof i9.TechlifyFeatureModule, typeof i9.NoteModule, typeof i9.TechlifyIconModule, typeof i14.RouterModule, typeof i15.ExportToExcelButtonComponent, typeof i9.TechlifyDeleteButtonComponent, typeof i16.StockReceiptProductFormButtonComponent, typeof i9.TechlifyFormButtonComponent], [typeof i1.StockReceiptPageComponent, typeof i3.StockReceiptListComponent, typeof i4.StockReceiptProductsListComponent]>;
|
|
21
21
|
static ɵinj: i0.ɵɵInjectorDeclaration<StockReceiptsModule>;
|
|
22
22
|
}
|
|
@@ -1,24 +1,25 @@
|
|
|
1
|
-
import { SupplierService } from '../supplier.service';
|
|
2
1
|
import { OnInit } from '@angular/core';
|
|
3
2
|
import { FormBuilder, FormControl } from '@angular/forms';
|
|
4
3
|
import { MatDialogRef } from '@angular/material/dialog';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { FormValidatorService, TechlifyFormComponent } from 'ngx-techlify-core';
|
|
5
|
+
import { SupplierService } from '../supplier.service';
|
|
7
6
|
import * as i0 from "@angular/core";
|
|
8
7
|
export declare class SupplierFormComponent extends TechlifyFormComponent implements OnInit {
|
|
8
|
+
protected formValidatorService: FormValidatorService;
|
|
9
9
|
private fb;
|
|
10
|
-
|
|
10
|
+
protected service: SupplierService;
|
|
11
11
|
dialogRef: MatDialogRef<SupplierFormComponent>;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
data: {
|
|
13
|
+
model?: any;
|
|
14
|
+
};
|
|
15
15
|
errorMessages: any;
|
|
16
|
-
isUpdateMode: boolean;
|
|
17
16
|
isCreateAnother: FormControl;
|
|
18
17
|
totalRecordSaved: import("@angular/core").WritableSignal<number>;
|
|
19
|
-
constructor(
|
|
18
|
+
constructor(formValidatorService: FormValidatorService, fb: FormBuilder, service: SupplierService, dialogRef: MatDialogRef<SupplierFormComponent>, data: {
|
|
19
|
+
model?: any;
|
|
20
|
+
});
|
|
20
21
|
ngOnInit(): void;
|
|
21
|
-
submit():
|
|
22
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<SupplierFormComponent,
|
|
23
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SupplierFormComponent, "app-supplier-form", never, {}, {}, never, never,
|
|
22
|
+
submit(): void;
|
|
23
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SupplierFormComponent, [null, null, null, null, { optional: true; }]>;
|
|
24
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SupplierFormComponent, "app-supplier-form", never, {}, {}, never, never, true, never>;
|
|
24
25
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { OnInit } from '@angular/core';
|
|
2
|
+
import { FormBuilder } from '@angular/forms';
|
|
3
|
+
import { Router } from '@angular/router';
|
|
4
|
+
import { TechlifyListComponent } from 'ngx-techlify-core';
|
|
5
|
+
import { SupplierService } from '../supplier.service';
|
|
6
|
+
import { SupplierFormComponent } from '../supplier-form/supplier-form.component';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export declare class SupplierListComponent extends TechlifyListComponent implements OnInit {
|
|
9
|
+
private fb;
|
|
10
|
+
private router;
|
|
11
|
+
protected service: SupplierService;
|
|
12
|
+
supplierForm: import("@angular/core").WritableSignal<typeof SupplierFormComponent>;
|
|
13
|
+
displayedColumns: string[];
|
|
14
|
+
filterFormConfiguration: any;
|
|
15
|
+
constructor(fb: FormBuilder, router: Router, service: SupplierService);
|
|
16
|
+
ngOnInit(): void;
|
|
17
|
+
onSaved(model: any): void;
|
|
18
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SupplierListComponent, never>;
|
|
19
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SupplierListComponent, "app-supplier-list", never, {}, {}, never, never, false, never>;
|
|
20
|
+
}
|
|
@@ -1,27 +1,20 @@
|
|
|
1
1
|
import * as i0 from "@angular/core";
|
|
2
2
|
import * as i1 from "./supplier.component";
|
|
3
3
|
import * as i2 from "./supplier-view/supplier-view.component";
|
|
4
|
-
import * as i3 from "./
|
|
5
|
-
import * as i4 from "./supplier-
|
|
6
|
-
import * as i5 from "./supplier-
|
|
7
|
-
import * as i6 from "./supplier-
|
|
8
|
-
import * as i7 from "./supplier-
|
|
9
|
-
import * as i8 from "@angular/
|
|
10
|
-
import * as i9 from "
|
|
11
|
-
import * as i10 from "../
|
|
12
|
-
import * as i11 from "
|
|
13
|
-
import * as i12 from "
|
|
14
|
-
import * as i13 from "
|
|
15
|
-
import * as i14 from "
|
|
16
|
-
import * as i15 from "ngx-permissions";
|
|
17
|
-
import * as i16 from "./supplier-form/supplier-form-button/supplier-form-button.component";
|
|
18
|
-
import * as i17 from "../stock-receipts/stock-receipts.module";
|
|
19
|
-
import * as i18 from "../incident/incident-list/incident-list.component";
|
|
20
|
-
import * as i19 from "../rating/rating-list/rating-list.component";
|
|
21
|
-
import * as i20 from "./supplier-branch-form/supplier-branch-form-button/supplier-branch-form-button.component";
|
|
22
|
-
import * as i21 from "./supplier-branch-delete-button/supplier-branch-delete-button.component";
|
|
4
|
+
import * as i3 from "./supplier-list/supplier-list.component";
|
|
5
|
+
import * as i4 from "./supplier-information/supplier-information.component";
|
|
6
|
+
import * as i5 from "./supplier-branches-list/supplier-branches-list.component";
|
|
7
|
+
import * as i6 from "./supplier-branch-form/supplier-branch-form.component";
|
|
8
|
+
import * as i7 from "./supplier-routing.module";
|
|
9
|
+
import * as i8 from "@angular/flex-layout";
|
|
10
|
+
import * as i9 from "../stock-receipts/stock-receipts.module";
|
|
11
|
+
import * as i10 from "../incident/incident-list/incident-list.component";
|
|
12
|
+
import * as i11 from "../rating/rating-list/rating-list.component";
|
|
13
|
+
import * as i12 from "./supplier-branch-form/supplier-branch-form-button/supplier-branch-form-button.component";
|
|
14
|
+
import * as i13 from "./supplier-branch-delete-button/supplier-branch-delete-button.component";
|
|
15
|
+
import * as i14 from "../shared.module";
|
|
23
16
|
export declare class SupplierModule {
|
|
24
17
|
static ɵfac: i0.ɵɵFactoryDeclaration<SupplierModule, never>;
|
|
25
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<SupplierModule, [typeof i1.SupplierComponent, typeof i2.SupplierViewComponent, typeof i3.
|
|
18
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<SupplierModule, [typeof i1.SupplierComponent, typeof i2.SupplierViewComponent, typeof i3.SupplierListComponent, typeof i4.SupplierInformationComponent, typeof i5.SupplierBranchesListComponent, typeof i6.SupplierBranchFormComponent], [typeof i7.SupplierRoutingModule, typeof i8.FlexModule, typeof i9.StockReceiptsModule, typeof i10.IncidentListComponent, typeof i11.RatingListComponent, typeof i12.SupplierBranchFormButtonComponent, typeof i13.SupplierBranchDeleteButtonComponent, typeof i14.SharedModule], never>;
|
|
26
19
|
static ɵinj: i0.ɵɵInjectorDeclaration<SupplierModule>;
|
|
27
20
|
}
|
package/package.json
CHANGED
package/public-api.d.ts
CHANGED
|
@@ -39,9 +39,8 @@ export * from './lib/inventory-common/stock-transfer/stock-transfer.service';
|
|
|
39
39
|
export * from './lib/inventory-common/measure/measure.module';
|
|
40
40
|
export * from './lib/inventory-common/measure/measure.service';
|
|
41
41
|
export * from './lib/inventory-common/supplier/supplier.module';
|
|
42
|
-
export * from './lib/inventory-common/supplier/supplier-form/supplier-form-button/supplier-form-button.component';
|
|
43
42
|
export * from './lib/inventory-common/supplier/supplier-form/supplier-form.component';
|
|
44
|
-
export * from './lib/inventory-common/supplier/
|
|
43
|
+
export * from './lib/inventory-common/supplier/supplier-list/supplier-list.component';
|
|
45
44
|
export * from './lib/inventory-common/supplier/supplier-type.service';
|
|
46
45
|
export * from './lib/inventory-common/supplier/payee-selector/payee-selector.module';
|
|
47
46
|
export * from './lib/inventory-common/supplier/payee-selector/payee-selector/payee-selector.component';
|
package/esm2022/lib/inventory-common/location/location-selector/location-selector.component.mjs
DELETED
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
import { Component, forwardRef, input, signal } from '@angular/core';
|
|
2
|
-
import { FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
|
|
3
|
-
import { CommonModule } from '@angular/common';
|
|
4
|
-
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
|
|
5
|
-
import { MaterialModule } from '../../material.module';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "../location.service";
|
|
8
|
-
import * as i2 from "ngx-techlify-core";
|
|
9
|
-
import * as i3 from "@angular/common";
|
|
10
|
-
import * as i4 from "@angular/material/core";
|
|
11
|
-
import * as i5 from "@angular/material/form-field";
|
|
12
|
-
import * as i6 from "@angular/material/select";
|
|
13
|
-
import * as i7 from "@angular/forms";
|
|
14
|
-
export class LocationSelectorComponent {
|
|
15
|
-
locationService;
|
|
16
|
-
featureService;
|
|
17
|
-
appearance = input('outline');
|
|
18
|
-
label = input('Location');
|
|
19
|
-
placeholder = input('Select a location');
|
|
20
|
-
hint = input();
|
|
21
|
-
includeNone = input(true);
|
|
22
|
-
isSubLocationEnabled = signal(false);
|
|
23
|
-
locations = [];
|
|
24
|
-
selectedValue = null;
|
|
25
|
-
isDisabled = false;
|
|
26
|
-
searchControl = new FormControl('');
|
|
27
|
-
onChange = () => { };
|
|
28
|
-
onTouched = () => { };
|
|
29
|
-
constructor(locationService, featureService) {
|
|
30
|
-
this.locationService = locationService;
|
|
31
|
-
this.featureService = featureService;
|
|
32
|
-
}
|
|
33
|
-
ngOnInit() {
|
|
34
|
-
this.isSubLocationEnabled.set(this.featureService.isFeatureExists('sub-locations'));
|
|
35
|
-
this.loadData();
|
|
36
|
-
this.setupSearch();
|
|
37
|
-
}
|
|
38
|
-
setupSearch() {
|
|
39
|
-
this.searchControl.valueChanges.pipe(debounceTime(400), distinctUntilChanged()).subscribe((value) => {
|
|
40
|
-
this.loadData(value);
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
loadData(search = null) {
|
|
44
|
-
const params = {};
|
|
45
|
-
if (search) {
|
|
46
|
-
params.search = search;
|
|
47
|
-
}
|
|
48
|
-
this.locationService.index(params, true).subscribe({
|
|
49
|
-
next: (response) => {
|
|
50
|
-
const flatLocations = response.data;
|
|
51
|
-
this.locations = this.isSubLocationEnabled()
|
|
52
|
-
? this.buildHierarchy(flatLocations)
|
|
53
|
-
: flatLocations;
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* To prevent recursive calls in the api while trying to get
|
|
59
|
-
* parent and children of a location, i've opted to have the ui
|
|
60
|
-
* build the hierarchy of locations
|
|
61
|
-
*/
|
|
62
|
-
buildHierarchy(locations) {
|
|
63
|
-
const locationMap = new Map();
|
|
64
|
-
locations.forEach(location => locationMap.set(location.id, location));
|
|
65
|
-
// Calculate depth for each location with cycle detection
|
|
66
|
-
const getDepth = (location, visited = new Set()) => {
|
|
67
|
-
if (!location.parent_id)
|
|
68
|
-
return 0;
|
|
69
|
-
if (visited.has(location.id))
|
|
70
|
-
return 0; // Prevent infinite loop if parent is same as child
|
|
71
|
-
visited.add(location.id); // Take note of visited locations
|
|
72
|
-
const parent = locationMap.get(location.parent_id);
|
|
73
|
-
if (!parent)
|
|
74
|
-
return 0;
|
|
75
|
-
return 1 + getDepth(parent, visited);
|
|
76
|
-
};
|
|
77
|
-
// Build hierarchical list with depths
|
|
78
|
-
const withDepths = locations.map(location => ({
|
|
79
|
-
id: location.id,
|
|
80
|
-
title: location.title,
|
|
81
|
-
parent_id: location.parent_id,
|
|
82
|
-
depth: getDepth(location)
|
|
83
|
-
}));
|
|
84
|
-
// Sort: root items first, then recursively add children
|
|
85
|
-
const result = [];
|
|
86
|
-
const added = new Set(); // Prevent infinite loop on cycles
|
|
87
|
-
// Find all "roots" - items with no parent, OR items whose parent is missing from the list
|
|
88
|
-
const rootIds = withDepths
|
|
89
|
-
.filter(location => !location.parent_id || !locationMap.has(location.parent_id))
|
|
90
|
-
.map(location => location.id);
|
|
91
|
-
const addWithChildren = (parentId, depth) => {
|
|
92
|
-
// If parentId is null, we look for our identified roots.
|
|
93
|
-
// Otherwise we look for children of the parentId.
|
|
94
|
-
const itemsToAdd = parentId === null
|
|
95
|
-
? withDepths.filter(location => rootIds.includes(location.id))
|
|
96
|
-
: withDepths.filter(location => location.parent_id === parentId);
|
|
97
|
-
itemsToAdd
|
|
98
|
-
.filter(location => !added.has(location.id))
|
|
99
|
-
.sort((a, b) => a.title.localeCompare(b.title))
|
|
100
|
-
.forEach(location => {
|
|
101
|
-
added.add(location.id);
|
|
102
|
-
result.push(location);
|
|
103
|
-
addWithChildren(location.id, depth + 1);
|
|
104
|
-
});
|
|
105
|
-
};
|
|
106
|
-
addWithChildren(null, 0);
|
|
107
|
-
// If there are still items not added (due to circular references A->B->A), add them as roots
|
|
108
|
-
if (added.size < withDepths.length) {
|
|
109
|
-
withDepths
|
|
110
|
-
.filter(location => !added.has(location.id))
|
|
111
|
-
.sort((a, b) => a.title.localeCompare(b.title))
|
|
112
|
-
.forEach(location => {
|
|
113
|
-
added.add(location.id);
|
|
114
|
-
result.push(location);
|
|
115
|
-
// Try to add children for this "forced root" in case it has valid children
|
|
116
|
-
addWithChildren(location.id, location.depth + 1);
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
return result;
|
|
120
|
-
}
|
|
121
|
-
onSelectionChange(value) {
|
|
122
|
-
this.selectedValue = value;
|
|
123
|
-
this.onChange(value);
|
|
124
|
-
this.onTouched();
|
|
125
|
-
}
|
|
126
|
-
writeValue(value) {
|
|
127
|
-
this.selectedValue = value;
|
|
128
|
-
}
|
|
129
|
-
registerOnChange(fn) {
|
|
130
|
-
this.onChange = fn;
|
|
131
|
-
}
|
|
132
|
-
registerOnTouched(fn) {
|
|
133
|
-
this.onTouched = fn;
|
|
134
|
-
}
|
|
135
|
-
setDisabledState(isDisabled) {
|
|
136
|
-
this.isDisabled = isDisabled;
|
|
137
|
-
}
|
|
138
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LocationSelectorComponent, deps: [{ token: i1.LocationService }, { token: i2.TechlifyFeatureService }], target: i0.ɵɵFactoryTarget.Component });
|
|
139
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: LocationSelectorComponent, isStandalone: true, selector: "app-location-selector", inputs: { appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, includeNone: { classPropertyName: "includeNone", publicName: "includeNone", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
140
|
-
{
|
|
141
|
-
provide: NG_VALUE_ACCESSOR,
|
|
142
|
-
useExisting: forwardRef(() => LocationSelectorComponent),
|
|
143
|
-
multi: true
|
|
144
|
-
}
|
|
145
|
-
], ngImport: i0, template: "<mat-form-field class=\"w-100\" [appearance]=\"appearance()\">\n <mat-label>{{ label() }}</mat-label>\n <mat-select [value]=\"selectedValue\" [disabled]=\"isDisabled\" [placeholder]=\"placeholder()\"\n panelClass=\"location-selector-panel\" (selectionChange)=\"onSelectionChange($event.value)\">\n\n <div class=\"sticky-search-container\">\n <input [formControl]=\"searchControl\" placeholder=\"Search...\" class=\"search-input\"\n (keydown)=\"$event.stopPropagation()\">\n </div>\n\n <mat-option *ngIf=\"includeNone()\" [value]=\"null\">None</mat-option>\n\n <mat-option *ngFor=\"let location of locations\" [value]=\"location.id\">\n <span [ngStyle]=\"{'padding-left.px': location.depth * 16}\">\n <span *ngIf=\"location.depth > 0\">\u21B3 </span>{{ location.title }}\n </span>\n </mat-option>\n\n </mat-select>\n \n <mat-hint *ngIf=\"hint()\">\n {{ hint() }}\n </mat-hint>\n</mat-form-field>", styles: [".sticky-search-container{position:sticky;top:0;z-index:1000;background:#fff;border-bottom:1px solid rgba(0,0,0,.12);margin:0}.search-input{width:100%;padding:8px 16px;border:none;border-radius:4px;outline:none;font-size:14px;box-sizing:border-box}.search-input:focus{border-color:#00000061}::ng-deep .location-selector-panel{padding-top:0!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MaterialModule }, { kind: "component", type: i4.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "component", type: i6.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: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], preserveWhitespaces: true });
|
|
146
|
-
}
|
|
147
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LocationSelectorComponent, decorators: [{
|
|
148
|
-
type: Component,
|
|
149
|
-
args: [{ selector: 'app-location-selector', standalone: true, imports: [
|
|
150
|
-
CommonModule,
|
|
151
|
-
MaterialModule,
|
|
152
|
-
ReactiveFormsModule
|
|
153
|
-
], providers: [
|
|
154
|
-
{
|
|
155
|
-
provide: NG_VALUE_ACCESSOR,
|
|
156
|
-
useExisting: forwardRef(() => LocationSelectorComponent),
|
|
157
|
-
multi: true
|
|
158
|
-
}
|
|
159
|
-
], template: "<mat-form-field class=\"w-100\" [appearance]=\"appearance()\">\n <mat-label>{{ label() }}</mat-label>\n <mat-select [value]=\"selectedValue\" [disabled]=\"isDisabled\" [placeholder]=\"placeholder()\"\n panelClass=\"location-selector-panel\" (selectionChange)=\"onSelectionChange($event.value)\">\n\n <div class=\"sticky-search-container\">\n <input [formControl]=\"searchControl\" placeholder=\"Search...\" class=\"search-input\"\n (keydown)=\"$event.stopPropagation()\">\n </div>\n\n <mat-option *ngIf=\"includeNone()\" [value]=\"null\">None</mat-option>\n\n <mat-option *ngFor=\"let location of locations\" [value]=\"location.id\">\n <span [ngStyle]=\"{'padding-left.px': location.depth * 16}\">\n <span *ngIf=\"location.depth > 0\">\u21B3 </span>{{ location.title }}\n </span>\n </mat-option>\n\n </mat-select>\n \n <mat-hint *ngIf=\"hint()\">\n {{ hint() }}\n </mat-hint>\n</mat-form-field>", styles: [".sticky-search-container{position:sticky;top:0;z-index:1000;background:#fff;border-bottom:1px solid rgba(0,0,0,.12);margin:0}.search-input{width:100%;padding:8px 16px;border:none;border-radius:4px;outline:none;font-size:14px;box-sizing:border-box}.search-input:focus{border-color:#00000061}::ng-deep .location-selector-panel{padding-top:0!important}\n"] }]
|
|
160
|
-
}], ctorParameters: () => [{ type: i1.LocationService }, { type: i2.TechlifyFeatureService }] });
|
|
161
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYXRpb24tc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52ZW50b3J5LWNvbW1vbi9zcmMvbGliL2ludmVudG9yeS1jb21tb24vbG9jYXRpb24vbG9jYXRpb24tc2VsZWN0b3IvbG9jYXRpb24tc2VsZWN0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52ZW50b3J5LWNvbW1vbi9zcmMvbGliL2ludmVudG9yeS1jb21tb24vbG9jYXRpb24vbG9jYXRpb24tc2VsZWN0b3IvbG9jYXRpb24tc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7QUE4QnZELE1BQU0sT0FBTyx5QkFBeUI7SUFrQmhCO0lBQ1Y7SUFqQlYsVUFBVSxHQUFHLEtBQUssQ0FBeUIsU0FBUyxDQUFDLENBQUM7SUFDdEQsS0FBSyxHQUFHLEtBQUssQ0FBUyxVQUFVLENBQUMsQ0FBQztJQUNsQyxXQUFXLEdBQUcsS0FBSyxDQUFTLG1CQUFtQixDQUFDLENBQUM7SUFDakQsSUFBSSxHQUFHLEtBQUssRUFBVSxDQUFDO0lBQ3ZCLFdBQVcsR0FBRyxLQUFLLENBQVUsSUFBSSxDQUFDLENBQUM7SUFFbkMsb0JB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bnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBpbnB1dCwgT25Jbml0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgTkdfVkFMVUVfQUNDRVNTT1IsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1hdGVyaWFsTW9kdWxlIH0gZnJvbSAnLi4vLi4vbWF0ZXJpYWwubW9kdWxlJztcbmltcG9ydCB7IExvY2F0aW9uU2VydmljZSB9IGZyb20gJy4uL2xvY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGVjaGxpZnlGZWF0dXJlU2VydmljZSB9IGZyb20gJ25neC10ZWNobGlmeS1jb3JlJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcblxuaW50ZXJmYWNlIEhpZXJhcmNoaWNhbExvY2F0aW9uIHtcbiAgaWQ6IG51bWJlcjtcbiAgdGl0bGU6IHN0cmluZztcbiAgcGFyZW50X2lkOiBudW1iZXIgfCBudWxsO1xuICBkZXB0aDogbnVtYmVyO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtbG9jYXRpb24tc2VsZWN0b3InLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE1hdGVyaWFsTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGVcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2xvY2F0aW9uLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbG9jYXRpb24tc2VsZWN0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBMb2NhdGlvblNlbGVjdG9yQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIExvY2F0aW9uU2VsZWN0b3JDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0IHtcblxuICBhcHBlYXJhbmNlID0gaW5wdXQ8TWF0Rm9ybUZpZWxkQXBwZWFyYW5jZT4oJ291dGxpbmUnKTtcbiAgbGFiZWwgPSBpbnB1dDxzdHJpbmc+KCdMb2NhdGlvbicpO1xuICBwbGFjZWhvbGRlciA9IGlucHV0PHN0cmluZz4oJ1NlbGVjdCBhIGxvY2F0aW9uJyk7XG4gIGhpbnQgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIGluY2x1ZGVOb25lID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgaXNTdWJMb2NhdGlvbkVuYWJsZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGxvY2F0aW9uczogSGllcmFyY2hpY2FsTG9jYXRpb25bXSA9IFtdO1xuICBzZWxlY3RlZFZhbHVlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgaXNEaXNhYmxlZCA9IGZhbHNlO1xuICBzZWFyY2hDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcblxuICBwcml2YXRlIG9uQ2hhbmdlOiAodmFsdWU6IG51bWJlciB8IG51bGwpID0+IHZvaWQgPSAoKSA9PiB7IH07XG4gIHByaXZhdGUgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4geyB9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9jYXRpb25TZXJ2aWNlOiBMb2NhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmZWF0dXJlU2VydmljZTogVGVjaGxpZnlGZWF0dXJlU2VydmljZVxuICApIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNTdWJMb2NhdGlvbkVuYWJsZWQuc2V0KHRoaXMuZmVhdHVyZVNlcnZpY2UuaXNGZWF0dXJlRXhpc3RzKCdzdWItbG9jYXRpb25zJykpO1xuXG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICAgIHRoaXMuc2V0dXBTZWFyY2goKTtcbiAgfVxuXG4gIHNldHVwU2VhcmNoKCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIGRlYm91bmNlVGltZSg0MDApLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICkuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nIHwgbnVsbCkgPT4ge1xuICAgICAgdGhpcy5sb2FkRGF0YSh2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBsb2FkRGF0YShzZWFyY2g6IHN0cmluZyB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7fTtcbiAgICBpZiAoc2VhcmNoKSB7XG4gICAgICBwYXJhbXMuc2VhcmNoID0gc2VhcmNoO1xuICAgIH1cblxuICAgIHRoaXMubG9jYXRpb25TZXJ2aWNlLmluZGV4KHBhcmFtcywgdHJ1ZSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGZsYXRMb2NhdGlvbnMgPSByZXNwb25zZS5kYXRhO1xuICAgICAgICB0aGlzLmxvY2F0aW9ucyA9IHRoaXMuaXNTdWJMb2NhdGlvbkVuYWJsZWQoKVxuICAgICAgICAgID8gdGhpcy5idWlsZEhpZXJhcmNoeShmbGF0TG9jYXRpb25zKVxuICAgICAgICAgIDogZmxhdExvY2F0aW9ucztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUbyBwcmV2ZW50IHJlY3Vyc2l2ZSBjYWxscyBpbiB0aGUgYXBpIHdoaWxlIHRyeWluZyB0byBnZXRcbiAgICogcGFyZW50IGFuZCBjaGlsZHJlbiBvZiBhIGxvY2F0aW9uLCBpJ3ZlIG9wdGVkIHRvIGhhdmUgdGhlIHVpIFxuICAgKiBidWlsZCB0aGUgaGllcmFyY2h5IG9mIGxvY2F0aW9ucyBcbiAgICovXG4gIHByaXZhdGUgYnVpbGRIaWVyYXJjaHkobG9jYXRpb25zOiBhbnlbXSk6IEhpZXJhcmNoaWNhbExvY2F0aW9uW10ge1xuICAgIGNvbnN0IGxvY2F0aW9uTWFwID0gbmV3IE1hcDxudW1iZXIsIGFueT4oKTtcbiAgICBsb2NhdGlvbnMuZm9yRWFjaChsb2NhdGlvbiA9PiBsb2NhdGlvbk1hcC5zZXQobG9jYXRpb24uaWQsIGxvY2F0aW9uKSk7XG5cbiAgICAvLyBDYWxjdWxhdGUgZGVwdGggZm9yIGVhY2ggbG9jYXRpb24gd2l0aCBjeWNsZSBkZXRlY3Rpb25cbiAgICBjb25zdCBnZXREZXB0aCA9IChsb2NhdGlvbjogYW55LCB2aXNpdGVkOiBTZXQ8bnVtYmVyPiA9IG5ldyBTZXQoKSk6IG51bWJlciA9PiB7XG4gICAgICBpZiAoIWxvY2F0aW9uLnBhcmVudF9pZCkgcmV0dXJuIDA7XG4gICAgICBpZiAodmlzaXRlZC5oYXMobG9jYXRpb24uaWQpKSByZXR1cm4gMDsgLy8gUHJldmVudCBpbmZpbml0ZSBsb29wIGlmIHBhcmVudCBpcyBzYW1lIGFzIGNoaWxkXG4gICAgICB2aXNpdGVkLmFkZChsb2NhdGlvbi5pZCk7IC8vIFRha2Ugbm90ZSBvZiB2aXNpdGVkIGxvY2F0aW9uc1xuXG4gICAgICBjb25zdCBwYXJlbnQgPSBsb2NhdGlvbk1hcC5nZXQobG9jYXRpb24ucGFyZW50X2lkKTtcbiAgICAgIGlmICghcGFyZW50KSByZXR1cm4gMDtcblxuICAgICAgcmV0dXJuIDEgKyBnZXREZXB0aChwYXJlbnQsIHZpc2l0ZWQpO1xuICAgIH07XG5cbiAgICAvLyBCdWlsZCBoaWVyYXJjaGljYWwgbGlzdCB3aXRoIGRlcHRoc1xuICAgIGNvbnN0IHdpdGhEZXB0aHM6IEhpZXJhcmNoaWNhbExvY2F0aW9uW10gPSBsb2NhdGlvbnMubWFwKGxvY2F0aW9uID0+ICh7XG4gICAgICBpZDogbG9jYXRpb24uaWQsXG4gICAgICB0aXRsZTogbG9jYXRpb24udGl0bGUsXG4gICAgICBwYXJlbnRfaWQ6IGxvY2F0aW9uLnBhcmVudF9pZCxcbiAgICAgIGRlcHRoOiBnZXREZXB0aChsb2NhdGlvbilcbiAgICB9KSk7XG5cbiAgICAvLyBTb3J0OiByb290IGl0ZW1zIGZpcnN0LCB0aGVuIHJlY3Vyc2l2ZWx5IGFkZCBjaGlsZHJlblxuICAgIGNvbnN0IHJlc3VsdDogSGllcmFyY2hpY2FsTG9jYXRpb25bXSA9IFtdO1xuICAgIGNvbnN0IGFkZGVkID0gbmV3IFNldDxudW1iZXI+KCk7IC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcCBvbiBjeWNsZXNcblxuICAgIC8vIEZpbmQgYWxsIFwicm9vdHNcIiAtIGl0ZW1zIHdpdGggbm8gcGFyZW50LCBPUiBpdGVtcyB3aG9zZSBwYXJlbnQgaXMgbWlzc2luZyBmcm9tIHRoZSBsaXN0XG4gICAgY29uc3Qgcm9vdElkcyA9IHdpdGhEZXB0aHNcbiAgICAgIC5maWx0ZXIobG9jYXRpb24gPT4gIWxvY2F0aW9uLnBhcmVudF9pZCB8fCAhbG9jYXRpb25NYXAuaGFzKGxvY2F0aW9uLnBhcmVudF9pZCkpXG4gICAgICAubWFwKGxvY2F0aW9uID0+IGxvY2F0aW9uLmlkKTtcblxuICAgIGNvbnN0IGFkZFdpdGhDaGlsZHJlbiA9IChwYXJlbnRJZDogbnVtYmVyIHwgbnVsbCwgZGVwdGg6IG51bWJlcikgPT4ge1xuICAgICAgLy8gSWYgcGFyZW50SWQgaXMgbnVsbCwgd2UgbG9vayBmb3Igb3VyIGlkZW50aWZpZWQgcm9vdHMuIFxuICAgICAgLy8gT3RoZXJ3aXNlIHdlIGxvb2sgZm9yIGNoaWxkcmVuIG9mIHRoZSBwYXJlbnRJZC5cbiAgICAgIGNvbnN0IGl0ZW1zVG9BZGQgPSBwYXJlbnRJZCA9PT0gbnVsbFxuICAgICAgICA/IHdpdGhEZXB0aHMuZmlsdGVyKGxvY2F0aW9uID0+IHJvb3RJZHMuaW5jbHVkZXMobG9jYXRpb24uaWQpKVxuICAgICAgICA6IHdpdGhEZXB0aHMuZmlsdGVyKGxvY2F0aW9uID0+IGxvY2F0aW9uLnBhcmVudF9pZCA9PT0gcGFyZW50SWQpO1xuXG4gICAgICBpdGVtc1RvQWRkXG4gICAgICAgIC5maWx0ZXIobG9jYXRpb24gPT4gIWFkZGVkLmhhcyhsb2NhdGlvbi5pZCkpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnRpdGxlLmxvY2FsZUNvbXBhcmUoYi50aXRsZSkpXG4gICAgICAgIC5mb3JFYWNoKGxvY2F0aW9uID0+IHtcbiAgICAgICAgICBhZGRlZC5hZGQobG9jYXRpb24uaWQpO1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGxvY2F0aW9uKTtcbiAgICAgICAgICBhZGRXaXRoQ2hpbGRyZW4obG9jYXRpb24uaWQsIGRlcHRoICsgMSk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhZGRXaXRoQ2hpbGRyZW4obnVsbCwgMCk7XG5cbiAgICAvLyBJZiB0aGVyZSBhcmUgc3RpbGwgaXRlbXMgbm90IGFkZGVkIChkdWUgdG8gY2lyY3VsYXIgcmVmZXJlbmNlcyBBLT5CLT5BKSwgYWRkIHRoZW0gYXMgcm9vdHNcbiAgICBpZiAoYWRkZWQuc2l6ZSA8IHdpdGhEZXB0aHMubGVuZ3RoKSB7XG4gICAgICB3aXRoRGVwdGhzXG4gICAgICAgIC5maWx0ZXIobG9jYXRpb24gPT4gIWFkZGVkLmhhcyhsb2NhdGlvbi5pZCkpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnRpdGxlLmxvY2FsZUNvbXBhcmUoYi50aXRsZSkpXG4gICAgICAgIC5mb3JFYWNoKGxvY2F0aW9uID0+IHtcbiAgICAgICAgICAgYWRkZWQuYWRkKGxvY2F0aW9uLmlkKTtcbiAgICAgICAgICAgcmVzdWx0LnB1c2gobG9jYXRpb24pO1xuICAgICAgICAgICAvLyBUcnkgdG8gYWRkIGNoaWxkcmVuIGZvciB0aGlzIFwiZm9yY2VkIHJvb3RcIiBpbiBjYXNlIGl0IGhhcyB2YWxpZCBjaGlsZHJlblxuICAgICAgICAgICBhZGRXaXRoQ2hpbGRyZW4obG9jYXRpb24uaWQsIGxvY2F0aW9uLmRlcHRoICsgMSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBvblNlbGVjdGlvbkNoYW5nZSh2YWx1ZTogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWU7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IG51bWJlciB8IG51bGwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlzRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG59XG4iLCI8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ3LTEwMFwiIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2UoKVwiPlxuICA8bWF0LWxhYmVsPnt7IGxhYmVsKCkgfX08L21hdC1sYWJlbD5cbiAgPG1hdC1zZWxlY3QgW3ZhbHVlXT1cInNlbGVjdGVkVmFsdWVcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlcigpXCJcbiAgICBwYW5lbENsYXNzPVwibG9jYXRpb24tc2VsZWN0b3ItcGFuZWxcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudC52YWx1ZSlcIj5cblxuICAgIDxkaXYgY2xhc3M9XCJzdGlja3ktc2VhcmNoLWNvbnRhaW5lclwiPlxuICAgICAgPGlucHV0IFtmb3JtQ29udHJvbF09XCJzZWFyY2hDb250cm9sXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIiBjbGFzcz1cInNlYXJjaC1pbnB1dFwiXG4gICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgIDwvZGl2PlxuXG4gICAgPG1hdC1vcHRpb24gKm5nSWY9XCJpbmNsdWRlTm9uZSgpXCIgW3ZhbHVlXT1cIm51bGxcIj5Ob25lPC9tYXQtb3B0aW9uPlxuXG4gICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGxvY2F0aW9uIG9mIGxvY2F0aW9uc1wiIFt2YWx1ZV09XCJsb2NhdGlvbi5pZFwiPlxuICAgICAgPHNwYW4gW25nU3R5bGVdPVwieydwYWRkaW5nLWxlZnQucHgnOiBsb2NhdGlvbi5kZXB0aCAqIDE2fVwiPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImxvY2F0aW9uLmRlcHRoID4gMFwiPuKGsyA8L3NwYW4+e3sgbG9jYXRpb24udGl0bGUgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L21hdC1vcHRpb24+XG5cbiAgPC9tYXQtc2VsZWN0PlxuICBcbiAgPG1hdC1oaW50ICpuZ0lmPVwiaGludCgpXCI+XG4gICAge3sgaGludCgpIH19XG4gIDwvbWF0LWhpbnQ+XG48L21hdC1mb3JtLWZpZWxkPiJdfQ==
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
3
|
-
import { MaterialModule } from '../../../material.module';
|
|
4
|
-
import { SupplierFormComponent } from '../supplier-form.component';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/material/dialog";
|
|
7
|
-
import * as i2 from "@angular/material/icon";
|
|
8
|
-
export class SupplierFormButtonComponent {
|
|
9
|
-
matDialog;
|
|
10
|
-
supplier;
|
|
11
|
-
onSaved = new EventEmitter();
|
|
12
|
-
constructor(matDialog) {
|
|
13
|
-
this.matDialog = matDialog;
|
|
14
|
-
}
|
|
15
|
-
ngOnInit() {
|
|
16
|
-
}
|
|
17
|
-
openDialog() {
|
|
18
|
-
this.matDialog.open(SupplierFormComponent, {
|
|
19
|
-
width: '600px',
|
|
20
|
-
data: {
|
|
21
|
-
details: this.supplier
|
|
22
|
-
},
|
|
23
|
-
}).afterClosed().subscribe((result) => {
|
|
24
|
-
if (result) {
|
|
25
|
-
this.onSaved.emit(result);
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SupplierFormButtonComponent, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
|
|
30
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: SupplierFormButtonComponent, isStandalone: true, selector: "app-supplier-form-button", inputs: { supplier: "supplier" }, outputs: { onSaved: "onSaved" }, ngImport: i0, template: "<mat-icon color=\"primary\" class=\"cursor-pointer\" [class.text-secondary]=\"supplier\" (click)=\"openDialog()\">\n {{ supplier ? \"edit\" : \"add\" }}\n</mat-icon>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MaterialModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], preserveWhitespaces: true });
|
|
31
|
-
}
|
|
32
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SupplierFormButtonComponent, decorators: [{
|
|
33
|
-
type: Component,
|
|
34
|
-
args: [{ selector: 'app-supplier-form-button', standalone: true, imports: [
|
|
35
|
-
CommonModule,
|
|
36
|
-
MaterialModule
|
|
37
|
-
], template: "<mat-icon color=\"primary\" class=\"cursor-pointer\" [class.text-secondary]=\"supplier\" (click)=\"openDialog()\">\n {{ supplier ? \"edit\" : \"add\" }}\n</mat-icon>" }]
|
|
38
|
-
}], ctorParameters: () => [{ type: i1.MatDialog }], propDecorators: { supplier: [{
|
|
39
|
-
type: Input
|
|
40
|
-
}], onSaved: [{
|
|
41
|
-
type: Output
|
|
42
|
-
}] } });
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcGxpZXItZm9ybS1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52ZW50b3J5LWNvbW1vbi9zcmMvbGliL2ludmVudG9yeS1jb21tb24vc3VwcGxpZXIvc3VwcGxpZXItZm9ybS9zdXBwbGllci1mb3JtLWJ1dHRvbi9zdXBwbGllci1mb3JtLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZlbnRvcnktY29tbW9uL3NyYy9saWIvaW52ZW50b3J5LWNvbW1vbi9zdXBwbGllci9zdXBwbGllci1mb3JtL3N1cHBsaWVyLWZvcm0tYnV0dG9uL3N1cHBsaWVyLWZvcm0tYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUxRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7OztBQVluRSxNQUFNLE9BQU8sMkJBQTJCO0lBS2xCO0lBSFgsUUFBUSxDQUFLO0lBQ1osT0FBTyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFBO0lBRTlELFlBQW9CLFNBQW9CO1FBQXBCLGNBQVMsR0FBVCxTQUFTLENBQVc7SUFBSSxDQUFDO0lBRTdDLFFBQVE7SUFDUixDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQ3pDLEtBQUssRUFBRSxPQUFPO1lBQ2QsSUFBSSxFQUFFO2dCQUNKLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUTthQUN2QjtTQUNGLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUN6QyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBckJVLDJCQUEyQjs0RkFBM0IsMkJBQTJCLHVKQ2hCeEMsd0tBRVcseUREVVAsWUFBWSw4QkFDWixjQUFjOzs0RkFHTCwyQkFBMkI7a0JBVnZDLFNBQVM7K0JBQ0UsMEJBQTBCLGNBR3hCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLGNBQWM7cUJBQ2Y7OEVBSVEsUUFBUTtzQkFBaEIsS0FBSztnQkFDSSxPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdGVyaWFsTW9kdWxlIH0gZnJvbSAnLi4vLi4vLi4vbWF0ZXJpYWwubW9kdWxlJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBTdXBwbGllckZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9zdXBwbGllci1mb3JtLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1zdXBwbGllci1mb3JtLWJ1dHRvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdXBwbGllci1mb3JtLWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3N1cHBsaWVyLWZvcm0tYnV0dG9uLmNvbXBvbmVudC5jc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBNYXRlcmlhbE1vZHVsZVxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTdXBwbGllckZvcm1CdXR0b25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIHN1cHBsaWVyOiBhbnlcbiAgQE91dHB1dCgpIG9uU2F2ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1hdERpYWxvZzogTWF0RGlhbG9nKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgfVxuXG4gIG9wZW5EaWFsb2coKSB7XG4gICAgdGhpcy5tYXREaWFsb2cub3BlbihTdXBwbGllckZvcm1Db21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnNjAwcHgnLFxuICAgICAgZGF0YToge1xuICAgICAgICBkZXRhaWxzOiB0aGlzLnN1cHBsaWVyXG4gICAgICB9LFxuICAgIH0pLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICB0aGlzLm9uU2F2ZWQuZW1pdChyZXN1bHQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbn1cbiIsIjxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgW2NsYXNzLnRleHQtc2Vjb25kYXJ5XT1cInN1cHBsaWVyXCIgKGNsaWNrKT1cIm9wZW5EaWFsb2coKVwiPlxuICB7eyBzdXBwbGllciA/IFwiZWRpdFwiIDogXCJhZGRcIiB9fVxuPC9tYXQtaWNvbj4iXX0=
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
2
|
-
import { TechlifyListComponent } from 'ngx-techlify-core';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@angular/forms";
|
|
5
|
-
import * as i2 from "../supplier.service";
|
|
6
|
-
import * as i3 from "@angular/common";
|
|
7
|
-
import * as i4 from "@angular/router";
|
|
8
|
-
import * as i5 from "@angular/material/card";
|
|
9
|
-
import * as i6 from "@angular/material/form-field";
|
|
10
|
-
import * as i7 from "@angular/material/icon";
|
|
11
|
-
import * as i8 from "@angular/material/input";
|
|
12
|
-
import * as i9 from "@angular/material/progress-bar";
|
|
13
|
-
import * as i10 from "@angular/material/sort";
|
|
14
|
-
import * as i11 from "@angular/material/table";
|
|
15
|
-
import * as i12 from "@angular/material/tooltip";
|
|
16
|
-
import * as i13 from "ngx-techlify-core";
|
|
17
|
-
import * as i14 from "ngx-infinite-scroll";
|
|
18
|
-
import * as i15 from "ngx-permissions";
|
|
19
|
-
import * as i16 from "../supplier-form/supplier-form-button/supplier-form-button.component";
|
|
20
|
-
export class SuppliersListComponent extends TechlifyListComponent {
|
|
21
|
-
fb;
|
|
22
|
-
service;
|
|
23
|
-
displayedColumns = [
|
|
24
|
-
'#',
|
|
25
|
-
'company_name',
|
|
26
|
-
'type',
|
|
27
|
-
'contact_name',
|
|
28
|
-
'phone',
|
|
29
|
-
'address',
|
|
30
|
-
'email',
|
|
31
|
-
'details',
|
|
32
|
-
'actions',
|
|
33
|
-
];
|
|
34
|
-
filterFormConfiguration = {
|
|
35
|
-
supplier_type_ids: { multuple: true }
|
|
36
|
-
};
|
|
37
|
-
constructor(fb, service) {
|
|
38
|
-
super();
|
|
39
|
-
this.fb = fb;
|
|
40
|
-
this.service = service;
|
|
41
|
-
this.filterForm = this.fb.group({
|
|
42
|
-
search: [''],
|
|
43
|
-
supplier_type_ids: [''],
|
|
44
|
-
sort_by: ['created_at|desc'],
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
ngOnInit() {
|
|
48
|
-
this.patchFiltersFromRoute();
|
|
49
|
-
this.loadData();
|
|
50
|
-
this.listenFilterChanges();
|
|
51
|
-
}
|
|
52
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SuppliersListComponent, deps: [{ token: i1.FormBuilder }, { token: i2.SupplierService }], target: i0.ɵɵFactoryTarget.Component });
|
|
53
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: SuppliersListComponent, selector: "app-suppliers-list", usesInheritance: true, ngImport: i0, template: "<mat-card class=\"mb-3\">\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-1\">\n <h3 class=\"mb-0 fw-bold\">Suppliers</h3>\n <app-supplier-form-button class='mt-2' (onSaved)=\"reload()\"></app-supplier-form-button>\n </div>\n <form [formGroup]=\"filterForm\" class=\"d-flex justify-content-end align-items-center gap-2\">\n <mat-form-field>\n <mat-label>Search</mat-label>\n <input matInput placeholder=\"Search Supplier by Name, Phone, Address, Email, Description\"\n formControlName=\"search\" />\n <mat-icon matSuffix>search</mat-icon>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Type</mat-label>\n <app-searchable-selector apiUrl=\"api/supplier-types\" formControlName=\"supplier_type_ids\" [multiple]=\"true\">\n </app-searchable-selector>\n </mat-form-field>\n </form>\n </mat-card-content>\n</mat-card>\n<mat-card>\n <mat-card-content class=\"p-0\">\n <table mat-table #table [dataSource]=\"models\" class=\"w-100 table-hover\" infiniteScroll [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\" (scrolled)=\"onScroll()\" [fromRoot]=\"true\" matSort\n (matSortChange)=\"sortColumn($event)\" aria-describedby=\"Suppliers List\">\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 </ng-container>\n\n <ng-container matColumnDef=\"company_name\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Name</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.company_name }}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"type\">\n <th mat-header-cell *matHeaderCellDef>Type</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.type?.title }}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"contact_name\">\n <th mat-header-cell *matHeaderCellDef>Contact</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.contact_name }}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"phone\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Phone</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.phone }}</td>\n </ng-container>\n\n <ng-container matColumnDef=\"address\">\n <th mat-header-cell *matHeaderCellDef>Address</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.address }}</td>\n </ng-container>\n\n <ng-container matColumnDef=\"email\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Email</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.email }}</td>\n </ng-container>\n\n <ng-container matColumnDef=\"details\">\n <th mat-header-cell *matHeaderCellDef>Details</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.details }}</td>\n </ng-container>\n\n <ng-container matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef>Actions</th>\n <td mat-cell *matCellDef=\"let element\">\n <div class=\"text-secondary d-flex align-items-center gap-1\">\n\n <a class=\"text-decoration-none text-secondary\" [routerLink]=\"['/inventory/suppliers', element.id, 'view']\"\n routerLinkActive=\"route-link-active\" *ngxPermissionsOnly=\"['supplier.read']\">\n <mat-icon matTooltip=\"View\">remove_red_eye</mat-icon>\n </a>\n <app-supplier-form-button *ngxPermissionsOnly=\"['supplier.update']\" [supplier]=\"element\"\n (onSaved)=\"reload()\"></app-supplier-form-button>\n <app-techlify-delete-button [service]=\"service\" [model]=\"element\"\n [data]='{title: element?.company_name, type: \"Supplier\"}'\n (deleted)=\"reload()\"></app-techlify-delete-button>\n <app-audit-log-for-model [modelId]=\"element?.id\" modelType=\"Supplier\"\n logView=\"all\"></app-audit-log-for-model>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n </table>\n\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n </mat-card-content>\n</mat-card>", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i4.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { 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: i6.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i9.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: i10.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i10.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i11.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i11.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i11.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i11.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i11.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i11.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i11.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i11.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i11.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i11.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i12.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i13.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: i13.AuditLogForModelComponent, selector: "app-audit-log-for-model", inputs: ["isIconView", "modelType", "modelId", "logView"] }, { 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: "directive", type: i14.InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "directive", type: i15.NgxPermissionsDirective, selector: "[ngxPermissionsOnly],[ngxPermissionsExcept]", inputs: ["ngxPermissionsOnly", "ngxPermissionsOnlyThen", "ngxPermissionsOnlyElse", "ngxPermissionsExcept", "ngxPermissionsExceptElse", "ngxPermissionsExceptThen", "ngxPermissionsThen", "ngxPermissionsElse", "ngxPermissionsOnlyAuthorisedStrategy", "ngxPermissionsOnlyUnauthorisedStrategy", "ngxPermissionsExceptUnauthorisedStrategy", "ngxPermissionsExceptAuthorisedStrategy", "ngxPermissionsUnauthorisedStrategy", "ngxPermissionsAuthorisedStrategy"], outputs: ["permissionsAuthorized", "permissionsUnauthorized"] }, { kind: "component", type: i16.SupplierFormButtonComponent, selector: "app-supplier-form-button", inputs: ["supplier"], outputs: ["onSaved"] }, { kind: "component", type: i13.TechlifyDeleteButtonComponent, selector: "app-techlify-delete-button", inputs: ["data", "model", "message", "service"], outputs: ["deleted"] }], preserveWhitespaces: true });
|
|
54
|
-
}
|
|
55
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SuppliersListComponent, decorators: [{
|
|
56
|
-
type: Component,
|
|
57
|
-
args: [{ selector: 'app-suppliers-list', template: "<mat-card class=\"mb-3\">\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-1\">\n <h3 class=\"mb-0 fw-bold\">Suppliers</h3>\n <app-supplier-form-button class='mt-2' (onSaved)=\"reload()\"></app-supplier-form-button>\n </div>\n <form [formGroup]=\"filterForm\" class=\"d-flex justify-content-end align-items-center gap-2\">\n <mat-form-field>\n <mat-label>Search</mat-label>\n <input matInput placeholder=\"Search Supplier by Name, Phone, Address, Email, Description\"\n formControlName=\"search\" />\n <mat-icon matSuffix>search</mat-icon>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Type</mat-label>\n <app-searchable-selector apiUrl=\"api/supplier-types\" formControlName=\"supplier_type_ids\" [multiple]=\"true\">\n </app-searchable-selector>\n </mat-form-field>\n </form>\n </mat-card-content>\n</mat-card>\n<mat-card>\n <mat-card-content class=\"p-0\">\n <table mat-table #table [dataSource]=\"models\" class=\"w-100 table-hover\" infiniteScroll [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\" (scrolled)=\"onScroll()\" [fromRoot]=\"true\" matSort\n (matSortChange)=\"sortColumn($event)\" aria-describedby=\"Suppliers List\">\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 </ng-container>\n\n <ng-container matColumnDef=\"company_name\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Name</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.company_name }}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"type\">\n <th mat-header-cell *matHeaderCellDef>Type</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.type?.title }}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"contact_name\">\n <th mat-header-cell *matHeaderCellDef>Contact</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.contact_name }}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"phone\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Phone</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.phone }}</td>\n </ng-container>\n\n <ng-container matColumnDef=\"address\">\n <th mat-header-cell *matHeaderCellDef>Address</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.address }}</td>\n </ng-container>\n\n <ng-container matColumnDef=\"email\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Email</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.email }}</td>\n </ng-container>\n\n <ng-container matColumnDef=\"details\">\n <th mat-header-cell *matHeaderCellDef>Details</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.details }}</td>\n </ng-container>\n\n <ng-container matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef>Actions</th>\n <td mat-cell *matCellDef=\"let element\">\n <div class=\"text-secondary d-flex align-items-center gap-1\">\n\n <a class=\"text-decoration-none text-secondary\" [routerLink]=\"['/inventory/suppliers', element.id, 'view']\"\n routerLinkActive=\"route-link-active\" *ngxPermissionsOnly=\"['supplier.read']\">\n <mat-icon matTooltip=\"View\">remove_red_eye</mat-icon>\n </a>\n <app-supplier-form-button *ngxPermissionsOnly=\"['supplier.update']\" [supplier]=\"element\"\n (onSaved)=\"reload()\"></app-supplier-form-button>\n <app-techlify-delete-button [service]=\"service\" [model]=\"element\"\n [data]='{title: element?.company_name, type: \"Supplier\"}'\n (deleted)=\"reload()\"></app-techlify-delete-button>\n <app-audit-log-for-model [modelId]=\"element?.id\" modelType=\"Supplier\"\n logView=\"all\"></app-audit-log-for-model>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n </table>\n\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n </mat-card-content>\n</mat-card>" }]
|
|
58
|
-
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.SupplierService }] });
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcGxpZXJzLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52ZW50b3J5LWNvbW1vbi9zcmMvbGliL2ludmVudG9yeS1jb21tb24vc3VwcGxpZXIvc3VwcGxpZXJzLWxpc3Qvc3VwcGxpZXJzLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52ZW50b3J5LWNvbW1vbi9zcmMvbGliL2ludmVudG9yeS1jb21tb24vc3VwcGxpZXIvc3VwcGxpZXJzLWxpc3Qvc3VwcGxpZXJzLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUVsRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTzFELE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxxQkFBcUI7SUFtQnJEO0lBQ1c7SUFsQnJCLGdCQUFnQixHQUFhO1FBQzNCLEdBQUc7UUFDSCxjQUFjO1FBQ2QsTUFBTTtRQUNOLGNBQWM7UUFDZCxPQUFPO1FBQ1AsU0FBUztRQUNULE9BQU87UUFDUCxTQUFTO1FBQ1QsU0FBUztLQUNWLENBQUM7SUFFTyx1QkFBdUIsR0FBUTtRQUN0QyxpQkFBaUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7S0FDdEMsQ0FBQztJQUVGLFlBQ1UsRUFBZSxFQUNKLE9BQXdCO1FBRTNDLEtBQUssRUFBRSxDQUFDO1FBSEEsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNKLFlBQU8sR0FBUCxPQUFPLENBQWlCO1FBSTNDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDOUIsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ1osaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTyxFQUFFLENBQUMsaUJBQWlCLENBQUM7U0FDN0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQzt3R0FuQ1Usc0JBQXNCOzRGQUF0QixzQkFBc0IsaUZDVG5DLDAvSUFrR1c7OzRGRHpGRSxzQkFBc0I7a0JBSmxDLFNBQVM7K0JBQ0Usb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVGVjaGxpZnlMaXN0Q29tcG9uZW50IH0gZnJvbSAnbmd4LXRlY2hsaWZ5LWNvcmUnO1xuaW1wb3J0IHsgU3VwcGxpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc3VwcGxpZXIuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1zdXBwbGllcnMtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdXBwbGllcnMtbGlzdC5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIFN1cHBsaWVyc0xpc3RDb21wb25lbnQgZXh0ZW5kcyBUZWNobGlmeUxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIGRpc3BsYXllZENvbHVtbnM6IHN0cmluZ1tdID0gW1xuICAgICcjJyxcbiAgICAnY29tcGFueV9uYW1lJyxcbiAgICAndHlwZScsXG4gICAgJ2NvbnRhY3RfbmFtZScsXG4gICAgJ3Bob25lJyxcbiAgICAnYWRkcmVzcycsXG4gICAgJ2VtYWlsJyxcbiAgICAnZGV0YWlscycsXG4gICAgJ2FjdGlvbnMnLFxuICBdO1xuXG4gIG92ZXJyaWRlIGZpbHRlckZvcm1Db25maWd1cmF0aW9uOiBhbnkgPSB7XG4gICAgc3VwcGxpZXJfdHlwZV9pZHM6IHsgbXVsdHVwbGU6IHRydWUgfVxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBzZXJ2aWNlOiBTdXBwbGllclNlcnZpY2UsXG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmZpbHRlckZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIHNlYXJjaDogWycnXSxcbiAgICAgIHN1cHBsaWVyX3R5cGVfaWRzOiBbJyddLFxuICAgICAgc29ydF9ieTogWydjcmVhdGVkX2F0fGRlc2MnXSxcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucGF0Y2hGaWx0ZXJzRnJvbVJvdXRlKCk7XG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICAgIHRoaXMubGlzdGVuRmlsdGVyQ2hhbmdlcygpO1xuICB9XG59XG4iLCI8bWF0LWNhcmQgY2xhc3M9XCJtYi0zXCI+XG4gIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtM1wiPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LXN0YXJ0IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMVwiPlxuICAgICAgPGgzIGNsYXNzPVwibWItMCBmdy1ib2xkXCI+U3VwcGxpZXJzPC9oMz5cbiAgICAgIDxhcHAtc3VwcGxpZXItZm9ybS1idXR0b24gY2xhc3M9J210LTInIChvblNhdmVkKT1cInJlbG9hZCgpXCI+PC9hcHAtc3VwcGxpZXItZm9ybS1idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmaWx0ZXJGb3JtXCIgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1sYWJlbD5TZWFyY2g8L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiU2VhcmNoIFN1cHBsaWVyIGJ5IE5hbWUsIFBob25lLCBBZGRyZXNzLCBFbWFpbCwgRGVzY3JpcHRpb25cIlxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlYXJjaFwiIC8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXg+c2VhcmNoPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtbGFiZWw+VHlwZTwvbWF0LWxhYmVsPlxuICAgICAgICA8YXBwLXNlYXJjaGFibGUtc2VsZWN0b3IgYXBpVXJsPVwiYXBpL3N1cHBsaWVyLXR5cGVzXCIgZm9ybUNvbnRyb2xOYW1lPVwic3VwcGxpZXJfdHlwZV9pZHNcIiBbbXVsdGlwbGVdPVwidHJ1ZVwiPlxuICAgICAgICA8L2FwcC1zZWFyY2hhYmxlLXNlbGVjdG9yPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Zvcm0+XG4gIDwvbWF0LWNhcmQtY29udGVudD5cbjwvbWF0LWNhcmQ+XG48bWF0LWNhcmQ+XG4gIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwicC0wXCI+XG4gICAgPHRhYmxlIG1hdC10YWJsZSAjdGFibGUgW2RhdGFTb3VyY2VdPVwibW9kZWxzXCIgY2xhc3M9XCJ3LTEwMCB0YWJsZS1ob3ZlclwiIGluZmluaXRlU2Nyb2xsIFtpbmZpbml0ZVNjcm9sbERpc3RhbmNlXT1cIjJcIlxuICAgICAgW2luZmluaXRlU2Nyb2xsVGhyb3R0bGVdPVwiNTBcIiAoc2Nyb2xsZWQpPVwib25TY3JvbGwoKVwiIFtmcm9tUm9vdF09XCJ0cnVlXCIgbWF0U29ydFxuICAgICAgKG1hdFNvcnRDaGFuZ2UpPVwic29ydENvbHVtbigkZXZlbnQpXCIgYXJpYS1kZXNjcmliZWRieT1cIlN1cHBsaWVycyBMaXN0XCI+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIiNcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4jPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnQ7IGxldCBpID0gaW5kZXhcIj57eyBpICsgMSB9fTwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJjb21wYW55X25hbWVcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+TmFtZTwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAge3sgZWxlbWVudD8uY29tcGFueV9uYW1lIH19XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJ0eXBlXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+VHlwZTwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAge3sgZWxlbWVudD8udHlwZT8udGl0bGUgfX1cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImNvbnRhY3RfbmFtZVwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPkNvbnRhY3Q8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICAgIHt7IGVsZW1lbnQ/LmNvbnRhY3RfbmFtZSB9fVxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwicGhvbmVcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+UGhvbmU8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPnt7IGVsZW1lbnQ/LnBob25lIH19PC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImFkZHJlc3NcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5BZGRyZXNzPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj57eyBlbGVtZW50Py5hZGRyZXNzIH19PC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImVtYWlsXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPkVtYWlsPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj57eyBlbGVtZW50Py5lbWFpbCB9fTwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJkZXRhaWxzXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+RGV0YWlsczwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+e3sgZWxlbWVudD8uZGV0YWlscyB9fTwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJhY3Rpb25zXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+QWN0aW9uczwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc2Vjb25kYXJ5IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIj5cblxuICAgICAgICAgICAgPGEgY2xhc3M9XCJ0ZXh0LWRlY29yYXRpb24tbm9uZSB0ZXh0LXNlY29uZGFyeVwiIFtyb3V0ZXJMaW5rXT1cIlsnL2ludmVudG9yeS9zdXBwbGllcnMnLCBlbGVtZW50LmlkLCAndmlldyddXCJcbiAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cInJvdXRlLWxpbmstYWN0aXZlXCIgKm5neFBlcm1pc3Npb25zT25seT1cIlsnc3VwcGxpZXIucmVhZCddXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRUb29sdGlwPVwiVmlld1wiPnJlbW92ZV9yZWRfZXllPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDxhcHAtc3VwcGxpZXItZm9ybS1idXR0b24gKm5neFBlcm1pc3Npb25zT25seT1cIlsnc3VwcGxpZXIudXBkYXRlJ11cIiBbc3VwcGxpZXJdPVwiZWxlbWVudFwiXG4gICAgICAgICAgICAgIChvblNhdmVkKT1cInJlbG9hZCgpXCI+PC9hcHAtc3VwcGxpZXItZm9ybS1idXR0b24+XG4gICAgICAgICAgICA8YXBwLXRlY2hsaWZ5LWRlbGV0ZS1idXR0b24gW3NlcnZpY2VdPVwic2VydmljZVwiIFttb2RlbF09XCJlbGVtZW50XCJcbiAgICAgICAgICAgICAgW2RhdGFdPSd7dGl0bGU6IGVsZW1lbnQ/LmNvbXBhbnlfbmFtZSwgdHlwZTogXCJTdXBwbGllclwifSdcbiAgICAgICAgICAgICAgKGRlbGV0ZWQpPVwicmVsb2FkKClcIj48L2FwcC10ZWNobGlmeS1kZWxldGUtYnV0dG9uPlxuICAgICAgICAgICAgPGFwcC1hdWRpdC1sb2ctZm9yLW1vZGVsIFttb2RlbElkXT1cImVsZW1lbnQ/LmlkXCIgbW9kZWxUeXBlPVwiU3VwcGxpZXJcIlxuICAgICAgICAgICAgICBsb2dWaWV3PVwiYWxsXCI+PC9hcHAtYXVkaXQtbG9nLWZvci1tb2RlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZVwiPjwvdHI+XG4gICAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uc1wiPjwvdHI+XG4gICAgPC90YWJsZT5cblxuICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIG1vZGU9XCJpbmRldGVybWluYXRlXCIgKm5nSWY9XCJpc1dvcmtpbmdcIj48L21hdC1wcm9ncmVzcy1iYXI+XG4gIDwvbWF0LWNhcmQtY29udGVudD5cbjwvbWF0LWNhcmQ+Il19
|