techlify-inventory-common 18.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/README.md +24 -0
  2. package/esm2022/lib/inventory-common/category/category-form/category-form.component.mjs +77 -0
  3. package/esm2022/lib/inventory-common/category/category-form-button/category-form-button.component.mjs +32 -0
  4. package/esm2022/lib/inventory-common/category/category-list-page/category-list-page.component.mjs +68 -0
  5. package/esm2022/lib/inventory-common/category/category-routing.module.mjs +24 -0
  6. package/esm2022/lib/inventory-common/category/category.module.mjs +63 -0
  7. package/esm2022/lib/inventory-common/category/category.service.mjs +18 -0
  8. package/esm2022/lib/inventory-common/inventory-common-routing.module.mjs +53 -0
  9. package/esm2022/lib/inventory-common/inventory-common.module.mjs +39 -0
  10. package/esm2022/lib/inventory-common/inventory-dashboard-page/inventory-dashboard-page.component.mjs +42 -0
  11. package/esm2022/lib/inventory-common/material.module.mjs +172 -0
  12. package/esm2022/lib/inventory-common/measure/measure-delete/measure-delete-button/measure-delete-button.component.mjs +44 -0
  13. package/esm2022/lib/inventory-common/measure/measure-delete/measure-delete.module.mjs +19 -0
  14. package/esm2022/lib/inventory-common/measure/measure-form/measure-form/measure-form.component.mjs +80 -0
  15. package/esm2022/lib/inventory-common/measure/measure-form/measure-form-button/measure-form-button.component.mjs +30 -0
  16. package/esm2022/lib/inventory-common/measure/measure-form/measure-form.module.mjs +21 -0
  17. package/esm2022/lib/inventory-common/measure/measure-routing.module.mjs +24 -0
  18. package/esm2022/lib/inventory-common/measure/measure.module.mjs +47 -0
  19. package/esm2022/lib/inventory-common/measure/measure.service.mjs +18 -0
  20. package/esm2022/lib/inventory-common/measure/measures-list/measures-list.component.mjs +71 -0
  21. package/esm2022/lib/inventory-common/product/low-stock-products-widget/low-stock-products-widget.component.mjs +45 -0
  22. package/esm2022/lib/inventory-common/product/low-stock-products-widget/low-stock-products-widget.module.mjs +36 -0
  23. package/esm2022/lib/inventory-common/product/product-basic-info/product-basic-info.component.mjs +54 -0
  24. package/esm2022/lib/inventory-common/product/product-delete-button/product-delete-button.component.mjs +54 -0
  25. package/esm2022/lib/inventory-common/product/product-form/product-form.component.mjs +180 -0
  26. package/esm2022/lib/inventory-common/product/product-form-button/product-form-button.component.mjs +40 -0
  27. package/esm2022/lib/inventory-common/product/product-form.service.mjs +17 -0
  28. package/esm2022/lib/inventory-common/product/product-import-page/product-import-page.component.mjs +66 -0
  29. package/esm2022/lib/inventory-common/product/product-list/product-list.component.mjs +189 -0
  30. package/esm2022/lib/inventory-common/product/product-measure-form/product-measure-form.component.mjs +101 -0
  31. package/esm2022/lib/inventory-common/product/product-measures-list/product-measures-list.component.mjs +151 -0
  32. package/esm2022/lib/inventory-common/product/product-nav-bar/product-nav-bar.component.mjs +12 -0
  33. package/esm2022/lib/inventory-common/product/product-routing.module.mjs +57 -0
  34. package/esm2022/lib/inventory-common/product/product-summary-chart/product-summary-chart.component.mjs +63 -0
  35. package/esm2022/lib/inventory-common/product/product-summary-chart/product-summary-chart.module.mjs +29 -0
  36. package/esm2022/lib/inventory-common/product/product-tax/product-tax-delete-button/product-tax-delete-button.component.mjs +54 -0
  37. package/esm2022/lib/inventory-common/product/product-tax/product-tax-form-button/product-tax-form-button.component.mjs +77 -0
  38. package/esm2022/lib/inventory-common/product/product-tax/product-tax-list/product-tax-list.component.mjs +35 -0
  39. package/esm2022/lib/inventory-common/product/product-tax/product-tax.module.mjs +39 -0
  40. package/esm2022/lib/inventory-common/product/product-tax/product-tax.service.mjs +18 -0
  41. package/esm2022/lib/inventory-common/product/product-view-page/product-view-page.component.mjs +68 -0
  42. package/esm2022/lib/inventory-common/product/product.module.mjs +111 -0
  43. package/esm2022/lib/inventory-common/product/product.service.mjs +49 -0
  44. package/esm2022/lib/inventory-common/services/techlify-form-service.mjs +11 -0
  45. package/esm2022/lib/inventory-common/stock-issuances/stock-issuance-delete-button/stock-issuance-delete-button.component.mjs +47 -0
  46. package/esm2022/lib/inventory-common/stock-issuances/stock-issuance-delete-button/stock-issuance-delete-button.module.mjs +19 -0
  47. package/esm2022/lib/inventory-common/stock-issuances/stock-issuance.service.mjs +18 -0
  48. package/esm2022/lib/inventory-common/stock-issuances/stock-issuances-list/stock-issuances-list.component.mjs +126 -0
  49. package/esm2022/lib/inventory-common/stock-issuances/stock-issuances-list/stock-issuances-list.module.mjs +48 -0
  50. package/esm2022/lib/inventory-common/stock-issuances/stock-issuances-routing.module.mjs +24 -0
  51. package/esm2022/lib/inventory-common/stock-issuances/stock-issuances.module.mjs +67 -0
  52. package/esm2022/lib/inventory-common/stock-issuances/stock-issue-form/stock-issue-form/stock-issue-form.component.mjs +120 -0
  53. package/esm2022/lib/inventory-common/stock-issuances/stock-issue-form/stock-issue-form-button/stock-issue-form-button.component.mjs +44 -0
  54. package/esm2022/lib/inventory-common/stock-issuances/stock-issue-form/stock-issue-form.module.mjs +53 -0
  55. package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-delete-button/stock-receipt-delete-button.component.mjs +47 -0
  56. package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form/stock-receipt-form.component.mjs +125 -0
  57. package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form-button/stock-receipt-form-button.component.mjs +38 -0
  58. package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form.module.mjs +53 -0
  59. package/esm2022/lib/inventory-common/stock-receipts/stock-receipt.service.mjs +18 -0
  60. package/esm2022/lib/inventory-common/stock-receipts/stock-receipts-list-page/stock-receipts-list-page.component.mjs +119 -0
  61. package/esm2022/lib/inventory-common/stock-receipts/stock-receipts-routing.module.mjs +24 -0
  62. package/esm2022/lib/inventory-common/stock-receipts/stock-receipts.module.mjs +75 -0
  63. package/esm2022/lib/inventory-common/stock-summary.service.mjs +26 -0
  64. package/esm2022/lib/inventory-common/supplier/payee-selector/payee-selector/payee-selector.component.mjs +59 -0
  65. package/esm2022/lib/inventory-common/supplier/payee-selector/payee-selector.module.mjs +35 -0
  66. package/esm2022/lib/inventory-common/supplier/supplier-form/supplier-form.component.mjs +118 -0
  67. package/esm2022/lib/inventory-common/supplier/supplier-form/supplier-form.service.mjs +17 -0
  68. package/esm2022/lib/inventory-common/supplier/supplier-information/supplier-information.component.mjs +72 -0
  69. package/esm2022/lib/inventory-common/supplier/supplier-routing.module.mjs +40 -0
  70. package/esm2022/lib/inventory-common/supplier/supplier-type.service.mjs +25 -0
  71. package/esm2022/lib/inventory-common/supplier/supplier-view/supplier-view.component.mjs +66 -0
  72. package/esm2022/lib/inventory-common/supplier/supplier.component.mjs +20 -0
  73. package/esm2022/lib/inventory-common/supplier/supplier.module.mjs +63 -0
  74. package/esm2022/lib/inventory-common/supplier/supplier.service.mjs +61 -0
  75. package/esm2022/lib/inventory-common/supplier/suppliers-list/suppliers-list.component.mjs +241 -0
  76. package/esm2022/lib/inventory-common/techlify-filter/techlify-filter.component.mjs +118 -0
  77. package/esm2022/lib/inventory-common/techlify-filter/techlify-filter.module.mjs +38 -0
  78. package/esm2022/public-api.mjs +9 -0
  79. package/esm2022/techlify-inventory-common.mjs +5 -0
  80. package/fesm2022/techlify-inventory-common-category.module-Stn6e73V.mjs +257 -0
  81. package/fesm2022/techlify-inventory-common-category.module-Stn6e73V.mjs.map +1 -0
  82. package/fesm2022/techlify-inventory-common-measure.module-CirswKXn.mjs +313 -0
  83. package/fesm2022/techlify-inventory-common-measure.module-CirswKXn.mjs.map +1 -0
  84. package/fesm2022/techlify-inventory-common-product.module-qdeafFV5.mjs +1172 -0
  85. package/fesm2022/techlify-inventory-common-product.module-qdeafFV5.mjs.map +1 -0
  86. package/fesm2022/techlify-inventory-common-stock-issuances-list.module-CyFDxARk.mjs +436 -0
  87. package/fesm2022/techlify-inventory-common-stock-issuances-list.module-CyFDxARk.mjs.map +1 -0
  88. package/fesm2022/techlify-inventory-common-stock-issuances.module-Dm9i2kcf.mjs +89 -0
  89. package/fesm2022/techlify-inventory-common-stock-issuances.module-Dm9i2kcf.mjs.map +1 -0
  90. package/fesm2022/techlify-inventory-common-stock-receipt-form.module-BZDrN7la.mjs +302 -0
  91. package/fesm2022/techlify-inventory-common-stock-receipt-form.module-BZDrN7la.mjs.map +1 -0
  92. package/fesm2022/techlify-inventory-common-stock-receipts.module-CUPdWteR.mjs +253 -0
  93. package/fesm2022/techlify-inventory-common-stock-receipts.module-CUPdWteR.mjs.map +1 -0
  94. package/fesm2022/techlify-inventory-common-supplier-form.component-CHmMG7O8.mjs +178 -0
  95. package/fesm2022/techlify-inventory-common-supplier-form.component-CHmMG7O8.mjs.map +1 -0
  96. package/fesm2022/techlify-inventory-common-supplier.module-gzHesNtQ.mjs +665 -0
  97. package/fesm2022/techlify-inventory-common-supplier.module-gzHesNtQ.mjs.map +1 -0
  98. package/fesm2022/techlify-inventory-common-techlify-form-service-CiVfwYTS.mjs +14 -0
  99. package/fesm2022/techlify-inventory-common-techlify-form-service-CiVfwYTS.mjs.map +1 -0
  100. package/fesm2022/techlify-inventory-common-techlify-inventory-common-Czyc0jLI.mjs +495 -0
  101. package/fesm2022/techlify-inventory-common-techlify-inventory-common-Czyc0jLI.mjs.map +1 -0
  102. package/fesm2022/techlify-inventory-common.mjs +2 -0
  103. package/fesm2022/techlify-inventory-common.mjs.map +1 -0
  104. package/index.d.ts +5 -0
  105. package/lib/inventory-common/category/category-form/category-form.component.d.ts +19 -0
  106. package/lib/inventory-common/category/category-form-button/category-form-button.component.d.ts +13 -0
  107. package/lib/inventory-common/category/category-list-page/category-list-page.component.d.ts +20 -0
  108. package/lib/inventory-common/category/category-routing.module.d.ts +7 -0
  109. package/lib/inventory-common/category/category.module.d.ts +19 -0
  110. package/lib/inventory-common/category/category.service.d.ts +7 -0
  111. package/lib/inventory-common/inventory-common-routing.module.d.ts +7 -0
  112. package/lib/inventory-common/inventory-common.module.d.ts +13 -0
  113. package/lib/inventory-common/inventory-dashboard-page/inventory-dashboard-page.component.d.ts +14 -0
  114. package/lib/inventory-common/material.module.d.ts +40 -0
  115. package/lib/inventory-common/measure/measure-delete/measure-delete-button/measure-delete-button.component.d.ts +19 -0
  116. package/lib/inventory-common/measure/measure-delete/measure-delete.module.d.ts +9 -0
  117. package/lib/inventory-common/measure/measure-form/measure-form/measure-form.component.d.ts +19 -0
  118. package/lib/inventory-common/measure/measure-form/measure-form-button/measure-form-button.component.d.ts +13 -0
  119. package/lib/inventory-common/measure/measure-form/measure-form.module.d.ts +11 -0
  120. package/lib/inventory-common/measure/measure-routing.module.d.ts +7 -0
  121. package/lib/inventory-common/measure/measure.module.d.ts +15 -0
  122. package/lib/inventory-common/measure/measure.service.d.ts +7 -0
  123. package/lib/inventory-common/measure/measures-list/measures-list.component.d.ts +17 -0
  124. package/lib/inventory-common/product/low-stock-products-widget/low-stock-products-widget.component.d.ts +13 -0
  125. package/lib/inventory-common/product/low-stock-products-widget/low-stock-products-widget.module.d.ts +12 -0
  126. package/lib/inventory-common/product/product-basic-info/product-basic-info.component.d.ts +19 -0
  127. package/lib/inventory-common/product/product-delete-button/product-delete-button.component.d.ts +26 -0
  128. package/lib/inventory-common/product/product-form/product-form.component.d.ts +44 -0
  129. package/lib/inventory-common/product/product-form-button/product-form-button.component.d.ts +20 -0
  130. package/lib/inventory-common/product/product-form.service.d.ts +7 -0
  131. package/lib/inventory-common/product/product-import-page/product-import-page.component.d.ts +10 -0
  132. package/lib/inventory-common/product/product-list/product-list.component.d.ts +44 -0
  133. package/lib/inventory-common/product/product-measure-form/product-measure-form.component.d.ts +33 -0
  134. package/lib/inventory-common/product/product-measures-list/product-measures-list.component.d.ts +43 -0
  135. package/lib/inventory-common/product/product-nav-bar/product-nav-bar.component.d.ts +5 -0
  136. package/lib/inventory-common/product/product-routing.module.d.ts +7 -0
  137. package/lib/inventory-common/product/product-summary-chart/product-summary-chart.component.d.ts +15 -0
  138. package/lib/inventory-common/product/product-summary-chart/product-summary-chart.module.d.ts +10 -0
  139. package/lib/inventory-common/product/product-tax/product-tax-delete-button/product-tax-delete-button.component.d.ts +26 -0
  140. package/lib/inventory-common/product/product-tax/product-tax-form-button/product-tax-form-button.component.d.ts +21 -0
  141. package/lib/inventory-common/product/product-tax/product-tax-list/product-tax-list.component.d.ts +13 -0
  142. package/lib/inventory-common/product/product-tax/product-tax.module.d.ts +12 -0
  143. package/lib/inventory-common/product/product-tax/product-tax.service.d.ts +7 -0
  144. package/lib/inventory-common/product/product-view-page/product-view-page.component.d.ts +33 -0
  145. package/lib/inventory-common/product/product.module.d.ts +28 -0
  146. package/lib/inventory-common/product/product.service.d.ts +19 -0
  147. package/lib/inventory-common/services/techlify-form-service.d.ts +5 -0
  148. package/lib/inventory-common/stock-issuances/stock-issuance-delete-button/stock-issuance-delete-button.component.d.ts +18 -0
  149. package/lib/inventory-common/stock-issuances/stock-issuance-delete-button/stock-issuance-delete-button.module.d.ts +9 -0
  150. package/lib/inventory-common/stock-issuances/stock-issuance.service.d.ts +7 -0
  151. package/lib/inventory-common/stock-issuances/stock-issuances-list/stock-issuances-list.component.d.ts +24 -0
  152. package/lib/inventory-common/stock-issuances/stock-issuances-list/stock-issuances-list.module.d.ts +15 -0
  153. package/lib/inventory-common/stock-issuances/stock-issuances-routing.module.d.ts +7 -0
  154. package/lib/inventory-common/stock-issuances/stock-issuances.module.d.ts +19 -0
  155. package/lib/inventory-common/stock-issuances/stock-issue-form/stock-issue-form/stock-issue-form.component.d.ts +24 -0
  156. package/lib/inventory-common/stock-issuances/stock-issue-form/stock-issue-form-button/stock-issue-form-button.component.d.ts +18 -0
  157. package/lib/inventory-common/stock-issuances/stock-issue-form/stock-issue-form.module.d.ts +17 -0
  158. package/lib/inventory-common/stock-receipts/stock-receipt-delete-button/stock-receipt-delete-button.component.d.ts +18 -0
  159. package/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form/stock-receipt-form.component.d.ts +22 -0
  160. package/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form-button/stock-receipt-form-button.component.d.ts +16 -0
  161. package/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form.module.d.ts +17 -0
  162. package/lib/inventory-common/stock-receipts/stock-receipt.service.d.ts +7 -0
  163. package/lib/inventory-common/stock-receipts/stock-receipts-list-page/stock-receipts-list-page.component.d.ts +21 -0
  164. package/lib/inventory-common/stock-receipts/stock-receipts-routing.module.d.ts +7 -0
  165. package/lib/inventory-common/stock-receipts/stock-receipts.module.d.ts +20 -0
  166. package/lib/inventory-common/stock-summary.service.d.ts +14 -0
  167. package/lib/inventory-common/supplier/payee-selector/payee-selector/payee-selector.component.d.ts +20 -0
  168. package/lib/inventory-common/supplier/payee-selector/payee-selector.module.d.ts +11 -0
  169. package/lib/inventory-common/supplier/supplier-form/supplier-form.component.d.ts +29 -0
  170. package/lib/inventory-common/supplier/supplier-form/supplier-form.service.d.ts +7 -0
  171. package/lib/inventory-common/supplier/supplier-information/supplier-information.component.d.ts +18 -0
  172. package/lib/inventory-common/supplier/supplier-routing.module.d.ts +7 -0
  173. package/lib/inventory-common/supplier/supplier-type.service.d.ts +13 -0
  174. package/lib/inventory-common/supplier/supplier-view/supplier-view.component.d.ts +20 -0
  175. package/lib/inventory-common/supplier/supplier.component.d.ts +10 -0
  176. package/lib/inventory-common/supplier/supplier.module.d.ts +18 -0
  177. package/lib/inventory-common/supplier/supplier.service.d.ts +39 -0
  178. package/lib/inventory-common/supplier/suppliers-list/suppliers-list.component.d.ts +51 -0
  179. package/lib/inventory-common/techlify-filter/techlify-filter.component.d.ts +31 -0
  180. package/lib/inventory-common/techlify-filter/techlify-filter.module.d.ts +11 -0
  181. package/package.json +25 -0
  182. package/public-api.d.ts +5 -0
@@ -0,0 +1,25 @@
1
+ import { Injectable } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "ngx-techlify-core";
4
+ export class SupplierTypeService {
5
+ httpService;
6
+ constructor(httpService) {
7
+ this.httpService = httpService;
8
+ }
9
+ /**
10
+ * get all suppliers from API
11
+ *
12
+ */
13
+ index() {
14
+ return this.httpService.get(`api/supplier-types`);
15
+ }
16
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SupplierTypeService, deps: [{ token: i1.HttpService }], target: i0.ɵɵFactoryTarget.Injectable });
17
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SupplierTypeService, providedIn: "root" });
18
+ }
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SupplierTypeService, decorators: [{
20
+ type: Injectable,
21
+ args: [{
22
+ providedIn: "root",
23
+ }]
24
+ }], ctorParameters: () => [{ type: i1.HttpService }] });
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcGxpZXItdHlwZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52ZW50b3J5LWNvbW1vbi9zcmMvbGliL2ludmVudG9yeS1jb21tb24vc3VwcGxpZXIvc3VwcGxpZXItdHlwZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQU0zQyxNQUFNLE9BQU8sbUJBQW1CO0lBQ1Y7SUFBcEIsWUFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFBRyxDQUFDO0lBRWhEOzs7T0FHRztJQUNILEtBQUs7UUFDSCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDcEQsQ0FBQzt3R0FUVSxtQkFBbUI7NEdBQW5CLG1CQUFtQixjQUZsQixNQUFNOzs0RkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gXCJuZ3gtdGVjaGxpZnktY29yZVwiO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46IFwicm9vdFwiLFxufSlcbmV4cG9ydCBjbGFzcyBTdXBwbGllclR5cGVTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwU2VydmljZTogSHR0cFNlcnZpY2UpIHt9XG5cbiAgLyoqXG4gICAqIGdldCBhbGwgc3VwcGxpZXJzIGZyb20gQVBJXG4gICAqXG4gICAqL1xuICBpbmRleCgpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5nZXQoYGFwaS9zdXBwbGllci10eXBlc2ApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,66 @@
1
+ import { lastValueFrom } from "rxjs";
2
+ import { Component } from "@angular/core";
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../supplier.service";
5
+ import * as i2 from "@angular/router";
6
+ import * as i3 from "@angular/common";
7
+ import * as i4 from "@angular/material/card";
8
+ import * as i5 from "@angular/material/progress-bar";
9
+ import * as i6 from "@angular/material/tabs";
10
+ import * as i7 from "ngx-techlify-core";
11
+ import * as i8 from "../supplier-information/supplier-information.component";
12
+ export class SupplierViewComponent {
13
+ supplierService;
14
+ route;
15
+ router;
16
+ supplier;
17
+ supplierId = 0;
18
+ selectedTabIndex = 0;
19
+ isLoading = false;
20
+ constructor(supplierService, route, router) {
21
+ this.supplierService = supplierService;
22
+ this.route = route;
23
+ this.router = router;
24
+ }
25
+ ngOnInit() {
26
+ this.route.firstChild?.url.subscribe((url) => {
27
+ if (url[0].path === "ratings") {
28
+ this.selectedTabIndex = 1;
29
+ }
30
+ else if (url[0].path === "estimates") {
31
+ this.selectedTabIndex = 2;
32
+ }
33
+ else {
34
+ this.selectedTabIndex = 0;
35
+ }
36
+ });
37
+ this.supplierId = this.route.snapshot.params["id"];
38
+ this.getSupplier(this.supplierId);
39
+ }
40
+ onTabChange(event) {
41
+ switch (event.index) {
42
+ case 0:
43
+ this.router.navigate(["incidents"], { relativeTo: this.route });
44
+ return;
45
+ case 1:
46
+ this.router.navigate(["ratings"], { relativeTo: this.route });
47
+ return;
48
+ case 2:
49
+ this.router.navigate(["estimates"], { relativeTo: this.route });
50
+ return;
51
+ }
52
+ }
53
+ async getSupplier(id) {
54
+ this.isLoading = true;
55
+ let result = await lastValueFrom(this.supplierService.show(id));
56
+ this.isLoading = false;
57
+ this.supplier = result.item;
58
+ }
59
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SupplierViewComponent, deps: [{ token: i1.SupplierService }, { token: i2.ActivatedRoute }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component });
60
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SupplierViewComponent, selector: "app-supplier-view", ngImport: i0, template: "<mat-progress-bar *ngIf=\"isLoading\" mode=\"indeterminate\"></mat-progress-bar>\n\n<div *ngIf=\"supplier\" class=\"d-flex justify-content-start gap-3\">\n <div style=\"width: 300px\">\n <app-supplier-information [supplier]=\"supplier\"></app-supplier-information>\n <mat-card class=\"mt-3\">\n <mat-card-content class=\"p-0\">\n <app-note-list\n modelType=\"Supplier\"\n [relatedModelId]=\"supplier?.id\"\n ></app-note-list>\n </mat-card-content>\n </mat-card>\n </div>\n\n <div style=\"width: calc(100% - 300px - 1rem)\">\n <mat-card style=\"width: fit-content\">\n <mat-card-content class=\"p-0\">\n <mat-tab-group\n mat-stretch-tabs=\"false\"\n mat-align-tabs=\"start\"\n [selectedIndex]=\"selectedTabIndex\"\n (selectedTabChange)=\"onTabChange($event)\"\n >\n <mat-tab>\n <ng-template mat-tab-label>\n <div\n class=\"d-flex justify-content-start align-items-center gap-1\"\n >\n <span class=\"material-symbols-outlined\">unknown_document</span>\n <span class=\"pl-2\">Incidents</span>\n </div>\n </ng-template>\n </mat-tab>\n <mat-tab>\n <ng-template mat-tab-label>\n <div\n class=\"d-flex justify-content-start align-items-center gap-1\"\n >\n <span class=\"material-symbols-outlined\">star</span>\n <span class=\"pl-2\">Ratings</span>\n </div>\n </ng-template>\n </mat-tab>\n <mat-tab>\n <ng-template mat-tab-label>\n <div\n class=\"d-flex justify-content-start align-items-center gap-1\"\n >\n <span class=\"material-symbols-outlined\">price_change</span>\n <span class=\"pl-2\">Estimates</span>\n </div>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </mat-card-content>\n </mat-card>\n <router-outlet></router-outlet>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: i6.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i6.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i6.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: i7.NoteListComponent, selector: "app-note-list", inputs: ["relatedModelId", "modelType", "readonly", "labelText", "commentsView", "viewMode"] }, { kind: "component", type: i8.SupplierInformationComponent, selector: "app-supplier-information", inputs: ["supplier"] }], preserveWhitespaces: true });
61
+ }
62
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SupplierViewComponent, decorators: [{
63
+ type: Component,
64
+ args: [{ selector: "app-supplier-view", template: "<mat-progress-bar *ngIf=\"isLoading\" mode=\"indeterminate\"></mat-progress-bar>\n\n<div *ngIf=\"supplier\" class=\"d-flex justify-content-start gap-3\">\n <div style=\"width: 300px\">\n <app-supplier-information [supplier]=\"supplier\"></app-supplier-information>\n <mat-card class=\"mt-3\">\n <mat-card-content class=\"p-0\">\n <app-note-list\n modelType=\"Supplier\"\n [relatedModelId]=\"supplier?.id\"\n ></app-note-list>\n </mat-card-content>\n </mat-card>\n </div>\n\n <div style=\"width: calc(100% - 300px - 1rem)\">\n <mat-card style=\"width: fit-content\">\n <mat-card-content class=\"p-0\">\n <mat-tab-group\n mat-stretch-tabs=\"false\"\n mat-align-tabs=\"start\"\n [selectedIndex]=\"selectedTabIndex\"\n (selectedTabChange)=\"onTabChange($event)\"\n >\n <mat-tab>\n <ng-template mat-tab-label>\n <div\n class=\"d-flex justify-content-start align-items-center gap-1\"\n >\n <span class=\"material-symbols-outlined\">unknown_document</span>\n <span class=\"pl-2\">Incidents</span>\n </div>\n </ng-template>\n </mat-tab>\n <mat-tab>\n <ng-template mat-tab-label>\n <div\n class=\"d-flex justify-content-start align-items-center gap-1\"\n >\n <span class=\"material-symbols-outlined\">star</span>\n <span class=\"pl-2\">Ratings</span>\n </div>\n </ng-template>\n </mat-tab>\n <mat-tab>\n <ng-template mat-tab-label>\n <div\n class=\"d-flex justify-content-start align-items-center gap-1\"\n >\n <span class=\"material-symbols-outlined\">price_change</span>\n <span class=\"pl-2\">Estimates</span>\n </div>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </mat-card-content>\n </mat-card>\n <router-outlet></router-outlet>\n </div>\n</div>\n" }]
65
+ }], ctorParameters: () => [{ type: i1.SupplierService }, { type: i2.ActivatedRoute }, { type: i2.Router }] });
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcGxpZXItdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZlbnRvcnktY29tbW9uL3NyYy9saWIvaW52ZW50b3J5LWNvbW1vbi9zdXBwbGllci9zdXBwbGllci12aWV3L3N1cHBsaWVyLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52ZW50b3J5LWNvbW1vbi9zcmMvbGliL2ludmVudG9yeS1jb21tb24vc3VwcGxpZXIvc3VwcGxpZXItdmlldy9zdXBwbGllci12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7OztBQVNsRCxNQUFNLE9BQU8scUJBQXFCO0lBT3RCO0lBQ0E7SUFDQTtJQVJWLFFBQVEsQ0FBTTtJQUNkLFVBQVUsR0FBVyxDQUFDLENBQUM7SUFDdkIsZ0JBQWdCLEdBQVcsQ0FBQyxDQUFDO0lBQzdCLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFFM0IsWUFDVSxlQUFnQyxFQUNoQyxLQUFxQixFQUNyQixNQUFjO1FBRmQsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVE7SUFDckIsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDM0MsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLENBQUM7aUJBQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBd0I7UUFDbEMsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDcEIsS0FBSyxDQUFDO2dCQUNKLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQ2hFLE9BQU87WUFDVCxLQUFLLENBQUM7Z0JBQ0osSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDOUQsT0FBTztZQUNULEtBQUssQ0FBQztnQkFDSixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRSxPQUFPO1FBQ1gsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQVU7UUFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxNQUFNLEdBQVEsTUFBTSxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDOUIsQ0FBQzt3R0E5Q1UscUJBQXFCOzRGQUFyQixxQkFBcUIseURDVmxDLDJtRUE0REE7OzRGRGxEYSxxQkFBcUI7a0JBSmpDLFNBQVM7K0JBQ0UsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbGFzdFZhbHVlRnJvbSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHsgU3VwcGxpZXJTZXJ2aWNlIH0gZnJvbSBcIi4uL3N1cHBsaWVyLnNlcnZpY2VcIjtcbmltcG9ydCB7IE1hdFRhYkNoYW5nZUV2ZW50IH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3RhYnNcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImFwcC1zdXBwbGllci12aWV3XCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vc3VwcGxpZXItdmlldy5jb21wb25lbnQuaHRtbFwiLFxufSlcbmV4cG9ydCBjbGFzcyBTdXBwbGllclZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBzdXBwbGllcjogYW55O1xuICBzdXBwbGllcklkOiBudW1iZXIgPSAwO1xuICBzZWxlY3RlZFRhYkluZGV4OiBudW1iZXIgPSAwO1xuICBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN1cHBsaWVyU2VydmljZTogU3VwcGxpZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucm91dGUuZmlyc3RDaGlsZD8udXJsLnN1YnNjcmliZSgodXJsKSA9PiB7XG4gICAgICBpZiAodXJsWzBdLnBhdGggPT09IFwicmF0aW5nc1wiKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDE7XG4gICAgICB9IGVsc2UgaWYgKHVybFswXS5wYXRoID09PSBcImVzdGltYXRlc1wiKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAwO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5zdXBwbGllcklkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbXCJpZFwiXTtcbiAgICB0aGlzLmdldFN1cHBsaWVyKHRoaXMuc3VwcGxpZXJJZCk7XG4gIH1cblxuICBvblRhYkNoYW5nZShldmVudDogTWF0VGFiQ2hhbmdlRXZlbnQpIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmluZGV4KSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcImluY2lkZW50c1wiXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcInJhdGluZ3NcIl0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAyOlxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJlc3RpbWF0ZXNcIl0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFN1cHBsaWVyKGlkOiBudW1iZXIpIHtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgbGV0IHJlc3VsdDogYW55ID0gYXdhaXQgbGFzdFZhbHVlRnJvbSh0aGlzLnN1cHBsaWVyU2VydmljZS5zaG93KGlkKSk7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnN1cHBsaWVyID0gcmVzdWx0Lml0ZW07XG4gIH1cbn1cbiIsIjxtYXQtcHJvZ3Jlc3MtYmFyICpuZ0lmPVwiaXNMb2FkaW5nXCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIj48L21hdC1wcm9ncmVzcy1iYXI+XG5cbjxkaXYgKm5nSWY9XCJzdXBwbGllclwiIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1zdGFydCBnYXAtM1wiPlxuICA8ZGl2IHN0eWxlPVwid2lkdGg6IDMwMHB4XCI+XG4gICAgPGFwcC1zdXBwbGllci1pbmZvcm1hdGlvbiBbc3VwcGxpZXJdPVwic3VwcGxpZXJcIj48L2FwcC1zdXBwbGllci1pbmZvcm1hdGlvbj5cbiAgICA8bWF0LWNhcmQgY2xhc3M9XCJtdC0zXCI+XG4gICAgICA8bWF0LWNhcmQtY29udGVudCBjbGFzcz1cInAtMFwiPlxuICAgICAgICA8YXBwLW5vdGUtbGlzdFxuICAgICAgICAgIG1vZGVsVHlwZT1cIlN1cHBsaWVyXCJcbiAgICAgICAgICBbcmVsYXRlZE1vZGVsSWRdPVwic3VwcGxpZXI/LmlkXCJcbiAgICAgICAgPjwvYXBwLW5vdGUtbGlzdD5cbiAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICA8L21hdC1jYXJkPlxuICA8L2Rpdj5cblxuICA8ZGl2IHN0eWxlPVwid2lkdGg6IGNhbGMoMTAwJSAtIDMwMHB4IC0gMXJlbSlcIj5cbiAgICA8bWF0LWNhcmQgc3R5bGU9XCJ3aWR0aDogZml0LWNvbnRlbnRcIj5cbiAgICAgIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwicC0wXCI+XG4gICAgICAgIDxtYXQtdGFiLWdyb3VwXG4gICAgICAgICAgbWF0LXN0cmV0Y2gtdGFicz1cImZhbHNlXCJcbiAgICAgICAgICBtYXQtYWxpZ24tdGFicz1cInN0YXJ0XCJcbiAgICAgICAgICBbc2VsZWN0ZWRJbmRleF09XCJzZWxlY3RlZFRhYkluZGV4XCJcbiAgICAgICAgICAoc2VsZWN0ZWRUYWJDaGFuZ2UpPVwib25UYWJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bWF0LXRhYj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXQtdGFiLWxhYmVsPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LXN0YXJ0IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj51bmtub3duX2RvY3VtZW50PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGwtMlwiPkluY2lkZW50czwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICA8bWF0LXRhYj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXQtdGFiLWxhYmVsPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LXN0YXJ0IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5zdGFyPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGwtMlwiPlJhdGluZ3M8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgICAgPG1hdC10YWI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0LXRhYi1sYWJlbD5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1zdGFydCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+cHJpY2VfY2hhbmdlPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGwtMlwiPkVzdGltYXRlczwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgPC9tYXQtdGFiLWdyb3VwPlxuICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgIDwvbWF0LWNhcmQ+XG4gICAgPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,20 @@
1
+ import { Component } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/material/dialog";
4
+ import * as i2 from "./supplier-form/supplier-form.service";
5
+ import * as i3 from "@angular/router";
6
+ export class SupplierComponent {
7
+ dialog;
8
+ supplierFormService;
9
+ constructor(dialog, supplierFormService) {
10
+ this.dialog = dialog;
11
+ this.supplierFormService = supplierFormService;
12
+ }
13
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SupplierComponent, deps: [{ token: i1.MatDialog }, { token: i2.SupplierFormService }], target: i0.ɵɵFactoryTarget.Component });
14
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SupplierComponent, selector: "app-supplier", ngImport: i0, template: "<div>\n <router-outlet></router-outlet>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }], preserveWhitespaces: true });
15
+ }
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SupplierComponent, decorators: [{
17
+ type: Component,
18
+ args: [{ selector: "app-supplier", template: "<div>\n <router-outlet></router-outlet>\n</div>\n" }]
19
+ }], ctorParameters: () => [{ type: i1.MatDialog }, { type: i2.SupplierFormService }] });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcGxpZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52ZW50b3J5LWNvbW1vbi9zcmMvbGliL2ludmVudG9yeS1jb21tb24vc3VwcGxpZXIvc3VwcGxpZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52ZW50b3J5LWNvbW1vbi9zcmMvbGliL2ludmVudG9yeS1jb21tb24vc3VwcGxpZXIvc3VwcGxpZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFVMUMsTUFBTSxPQUFPLGlCQUFpQjtJQUVuQjtJQUNDO0lBRlYsWUFDUyxNQUFpQixFQUNoQixtQkFBd0M7UUFEekMsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNoQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO0lBQy9DLENBQUM7d0dBSk8saUJBQWlCOzRGQUFqQixpQkFBaUIsb0RDVjlCLG9EQUdBOzs0RkRPYSxpQkFBaUI7a0JBTDdCLFNBQVM7K0JBQ0UsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBTdXBwbGllckZvcm1Db21wb25lbnQgfSBmcm9tIFwiLi9zdXBwbGllci1mb3JtL3N1cHBsaWVyLWZvcm0uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XG5pbXBvcnQgeyBTdXBwbGllckZvcm1TZXJ2aWNlIH0gZnJvbSBcIi4vc3VwcGxpZXItZm9ybS9zdXBwbGllci1mb3JtLnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImFwcC1zdXBwbGllclwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3N1cHBsaWVyLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9zdXBwbGllci5jb21wb25lbnQuc2Nzc1wiXSxcbn0pXG5leHBvcnQgY2xhc3MgU3VwcGxpZXJDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBzdXBwbGllckZvcm1TZXJ2aWNlOiBTdXBwbGllckZvcm1TZXJ2aWNlXG4gICkge31cbn1cbiIsIjxkaXY+XG4gIDxyb3V0ZXItb3V0bGV0Pjwvcm91dGVyLW91dGxldD5cbjwvZGl2PlxuIl19
@@ -0,0 +1,63 @@
1
+ import { AuditLogForModelModule, NoteModule, SearchableSelectorModule, } from "ngx-techlify-core";
2
+ import { NgModule } from "@angular/core";
3
+ import { CommonModule } from "@angular/common";
4
+ import { SupplierRoutingModule } from "./supplier-routing.module";
5
+ import { SupplierComponent } from "./supplier.component";
6
+ import { SupplierViewComponent } from "./supplier-view/supplier-view.component";
7
+ import { SuppliersListComponent } from "./suppliers-list/suppliers-list.component";
8
+ import { SupplierFormComponent } from "./supplier-form/supplier-form.component";
9
+ import { SupplierInformationComponent } from "./supplier-information/supplier-information.component";
10
+ import { FlexModule } from "@angular/flex-layout";
11
+ import { ReactiveFormsModule } from "@angular/forms";
12
+ import { InfiniteScrollModule } from "ngx-infinite-scroll";
13
+ import { MaterialModule } from '../material.module';
14
+ import * as i0 from "@angular/core";
15
+ export class SupplierModule {
16
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SupplierModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
17
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: SupplierModule, declarations: [SupplierComponent,
18
+ SupplierViewComponent,
19
+ SuppliersListComponent,
20
+ SupplierFormComponent,
21
+ SupplierInformationComponent], imports: [CommonModule,
22
+ SupplierRoutingModule,
23
+ MaterialModule,
24
+ SearchableSelectorModule,
25
+ AuditLogForModelModule,
26
+ NoteModule,
27
+ FlexModule,
28
+ ReactiveFormsModule,
29
+ InfiniteScrollModule] });
30
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SupplierModule, imports: [CommonModule,
31
+ SupplierRoutingModule,
32
+ MaterialModule,
33
+ SearchableSelectorModule,
34
+ AuditLogForModelModule,
35
+ NoteModule,
36
+ FlexModule,
37
+ ReactiveFormsModule,
38
+ InfiniteScrollModule] });
39
+ }
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SupplierModule, decorators: [{
41
+ type: NgModule,
42
+ args: [{
43
+ declarations: [
44
+ SupplierComponent,
45
+ SupplierViewComponent,
46
+ SuppliersListComponent,
47
+ SupplierFormComponent,
48
+ SupplierInformationComponent,
49
+ ],
50
+ imports: [
51
+ CommonModule,
52
+ SupplierRoutingModule,
53
+ MaterialModule,
54
+ SearchableSelectorModule,
55
+ AuditLogForModelModule,
56
+ NoteModule,
57
+ FlexModule,
58
+ ReactiveFormsModule,
59
+ InfiniteScrollModule,
60
+ ],
61
+ }]
62
+ }] });
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcGxpZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52ZW50b3J5LWNvbW1vbi9zcmMvbGliL2ludmVudG9yeS1jb21tb24vc3VwcGxpZXIvc3VwcGxpZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsVUFBVSxFQUNWLHdCQUF3QixHQUN6QixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7O0FBc0JwRCxNQUFNLE9BQU8sY0FBYzt3R0FBZCxjQUFjO3lHQUFkLGNBQWMsaUJBbEJ2QixpQkFBaUI7WUFDakIscUJBQXFCO1lBQ3JCLHNCQUFzQjtZQUN0QixxQkFBcUI7WUFDckIsNEJBQTRCLGFBRzVCLFlBQVk7WUFDWixxQkFBcUI7WUFDckIsY0FBYztZQUNkLHdCQUF3QjtZQUN4QixzQkFBc0I7WUFDdEIsVUFBVTtZQUNWLFVBQVU7WUFDVixtQkFBbUI7WUFDbkIsb0JBQW9CO3lHQUdYLGNBQWMsWUFYdkIsWUFBWTtZQUNaLHFCQUFxQjtZQUNyQixjQUFjO1lBQ2Qsd0JBQXdCO1lBQ3hCLHNCQUFzQjtZQUN0QixVQUFVO1lBQ1YsVUFBVTtZQUNWLG1CQUFtQjtZQUNuQixvQkFBb0I7OzRGQUdYLGNBQWM7a0JBcEIxQixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixpQkFBaUI7d0JBQ2pCLHFCQUFxQjt3QkFDckIsc0JBQXNCO3dCQUN0QixxQkFBcUI7d0JBQ3JCLDRCQUE0QjtxQkFDN0I7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1oscUJBQXFCO3dCQUNyQixjQUFjO3dCQUNkLHdCQUF3Qjt3QkFDeEIsc0JBQXNCO3dCQUN0QixVQUFVO3dCQUNWLFVBQVU7d0JBQ1YsbUJBQW1CO3dCQUNuQixvQkFBb0I7cUJBQ3JCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXVkaXRMb2dGb3JNb2RlbE1vZHVsZSxcbiAgTm90ZU1vZHVsZSxcbiAgU2VhcmNoYWJsZVNlbGVjdG9yTW9kdWxlLFxufSBmcm9tIFwibmd4LXRlY2hsaWZ5LWNvcmVcIjtcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcblxuaW1wb3J0IHsgU3VwcGxpZXJSb3V0aW5nTW9kdWxlIH0gZnJvbSBcIi4vc3VwcGxpZXItcm91dGluZy5tb2R1bGVcIjtcbmltcG9ydCB7IFN1cHBsaWVyQ29tcG9uZW50IH0gZnJvbSBcIi4vc3VwcGxpZXIuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBTdXBwbGllclZpZXdDb21wb25lbnQgfSBmcm9tIFwiLi9zdXBwbGllci12aWV3L3N1cHBsaWVyLXZpZXcuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBTdXBwbGllcnNMaXN0Q29tcG9uZW50IH0gZnJvbSBcIi4vc3VwcGxpZXJzLWxpc3Qvc3VwcGxpZXJzLWxpc3QuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBTdXBwbGllckZvcm1Db21wb25lbnQgfSBmcm9tIFwiLi9zdXBwbGllci1mb3JtL3N1cHBsaWVyLWZvcm0uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBTdXBwbGllckluZm9ybWF0aW9uQ29tcG9uZW50IH0gZnJvbSBcIi4vc3VwcGxpZXItaW5mb3JtYXRpb24vc3VwcGxpZXItaW5mb3JtYXRpb24uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBGbGV4TW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2ZsZXgtbGF5b3V0XCI7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBJbmZpbml0ZVNjcm9sbE1vZHVsZSB9IGZyb20gXCJuZ3gtaW5maW5pdGUtc2Nyb2xsXCI7XG5pbXBvcnQgeyBNYXRlcmlhbE1vZHVsZSB9IGZyb20gJy4uL21hdGVyaWFsLm1vZHVsZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFN1cHBsaWVyQ29tcG9uZW50LFxuICAgIFN1cHBsaWVyVmlld0NvbXBvbmVudCxcbiAgICBTdXBwbGllcnNMaXN0Q29tcG9uZW50LFxuICAgIFN1cHBsaWVyRm9ybUNvbXBvbmVudCxcbiAgICBTdXBwbGllckluZm9ybWF0aW9uQ29tcG9uZW50LFxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFN1cHBsaWVyUm91dGluZ01vZHVsZSxcbiAgICBNYXRlcmlhbE1vZHVsZSxcbiAgICBTZWFyY2hhYmxlU2VsZWN0b3JNb2R1bGUsXG4gICAgQXVkaXRMb2dGb3JNb2RlbE1vZHVsZSxcbiAgICBOb3RlTW9kdWxlLFxuICAgIEZsZXhNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBJbmZpbml0ZVNjcm9sbE1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU3VwcGxpZXJNb2R1bGUge31cbiJdfQ==
@@ -0,0 +1,61 @@
1
+ import { Injectable } from "@angular/core";
2
+ import { HttpParams } from "@angular/common/http";
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "ngx-techlify-core";
5
+ export class SupplierService {
6
+ httpService;
7
+ constructor(httpService) {
8
+ this.httpService = httpService;
9
+ }
10
+ /**
11
+ * get all suppliers from API
12
+ *
13
+ * @param filters Any attributes to filter suppliers by
14
+ */
15
+ index(filters) {
16
+ let queries = new HttpParams({ fromObject: filters });
17
+ return this.httpService.get(`api/suppliers`, { params: queries });
18
+ }
19
+ /**
20
+ * get individual supplier from API (for view page)
21
+ *
22
+ * @param id ID of the supplier being requested
23
+ */
24
+ show(id) {
25
+ return this.httpService.get(`api/suppliers/${id}`);
26
+ }
27
+ /**
28
+ * store a new supplier in the DB
29
+ *
30
+ * @param model data from the supplier form that will be stored in the DB
31
+ */
32
+ store(model) {
33
+ return this.httpService.post(`api/suppliers`, model);
34
+ }
35
+ /**
36
+ * update a supplier in the DB
37
+ *
38
+ * @param model.id ID of the supplier being updated
39
+ * @param model data from the supplier form that will be updated in the DB
40
+ */
41
+ update(model) {
42
+ return this.httpService.put(`api/suppliers/${model?.id}`, model);
43
+ }
44
+ /**
45
+ * delete a supplier from the DB
46
+ *
47
+ * @param id ID of the supplier being deleted
48
+ */
49
+ destroy(id) {
50
+ return this.httpService.delete(`api/suppliers/${id}`);
51
+ }
52
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SupplierService, deps: [{ token: i1.HttpService }], target: i0.ɵɵFactoryTarget.Injectable });
53
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SupplierService, providedIn: "root" });
54
+ }
55
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SupplierService, decorators: [{
56
+ type: Injectable,
57
+ args: [{
58
+ providedIn: "root",
59
+ }]
60
+ }], ctorParameters: () => [{ type: i1.HttpService }] });
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcGxpZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ludmVudG9yeS1jb21tb24vc3JjL2xpYi9pbnZlbnRvcnktY29tbW9uL3N1cHBsaWVyL3N1cHBsaWVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7OztBQUtsRCxNQUFNLE9BQU8sZUFBZTtJQUNOO0lBQXBCLFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQUcsQ0FBQztJQUVoRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLE9BQWE7UUFDakIsSUFBSSxPQUFPLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN0RCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxDQUFDLEVBQU87UUFDVixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLEtBQVU7UUFDZCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsS0FBVTtRQUNmLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE9BQU8sQ0FBQyxFQUFVO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDeEQsQ0FBQzt3R0FoRFUsZUFBZTs0R0FBZixlQUFlLGNBRmQsTUFBTTs7NEZBRVAsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSBcIm5neC10ZWNobGlmeS1jb3JlXCI7XG5pbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogXCJyb290XCIsXG59KVxuZXhwb3J0IGNsYXNzIFN1cHBsaWVyU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cFNlcnZpY2U6IEh0dHBTZXJ2aWNlKSB7fVxuXG4gIC8qKlxuICAgKiBnZXQgYWxsIHN1cHBsaWVycyBmcm9tIEFQSVxuICAgKlxuICAgKiBAcGFyYW0gZmlsdGVycyBBbnkgYXR0cmlidXRlcyB0byBmaWx0ZXIgc3VwcGxpZXJzIGJ5XG4gICAqL1xuICBpbmRleChmaWx0ZXJzPzogYW55KSB7XG4gICAgbGV0IHF1ZXJpZXMgPSBuZXcgSHR0cFBhcmFtcyh7IGZyb21PYmplY3Q6IGZpbHRlcnMgfSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuZ2V0KGBhcGkvc3VwcGxpZXJzYCwgeyBwYXJhbXM6IHF1ZXJpZXMgfSk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IGluZGl2aWR1YWwgc3VwcGxpZXIgZnJvbSBBUEkgKGZvciB2aWV3IHBhZ2UpXG4gICAqXG4gICAqIEBwYXJhbSBpZCBJRCBvZiB0aGUgc3VwcGxpZXIgYmVpbmcgcmVxdWVzdGVkXG4gICAqL1xuICBzaG93KGlkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5nZXQoYGFwaS9zdXBwbGllcnMvJHtpZH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzdG9yZSBhIG5ldyBzdXBwbGllciBpbiB0aGUgREJcbiAgICpcbiAgICogQHBhcmFtIG1vZGVsIGRhdGEgZnJvbSB0aGUgc3VwcGxpZXIgZm9ybSB0aGF0IHdpbGwgYmUgc3RvcmVkIGluIHRoZSBEQlxuICAgKi9cbiAgc3RvcmUobW9kZWw6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLnBvc3QoYGFwaS9zdXBwbGllcnNgLCBtb2RlbCk7XG4gIH1cblxuICAvKipcbiAgICogdXBkYXRlIGEgc3VwcGxpZXIgaW4gdGhlIERCXG4gICAqXG4gICAqIEBwYXJhbSBtb2RlbC5pZCBJRCBvZiB0aGUgc3VwcGxpZXIgYmVpbmcgdXBkYXRlZFxuICAgKiBAcGFyYW0gbW9kZWwgZGF0YSBmcm9tIHRoZSBzdXBwbGllciBmb3JtIHRoYXQgd2lsbCBiZSB1cGRhdGVkIGluIHRoZSBEQlxuICAgKi9cbiAgdXBkYXRlKG1vZGVsOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5wdXQoYGFwaS9zdXBwbGllcnMvJHttb2RlbD8uaWR9YCwgbW9kZWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIGRlbGV0ZSBhIHN1cHBsaWVyIGZyb20gdGhlIERCXG4gICAqXG4gICAqIEBwYXJhbSBpZCBJRCBvZiB0aGUgc3VwcGxpZXIgYmVpbmcgZGVsZXRlZFxuICAgKi9cbiAgZGVzdHJveShpZDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuZGVsZXRlKGBhcGkvc3VwcGxpZXJzLyR7aWR9YCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,241 @@
1
+ import { __decorate } from "tslib";
2
+ import { Component } from "@angular/core";
3
+ import { MatTableDataSource } from "@angular/material/table";
4
+ import { UntilDestroy, untilDestroyed } from "@ngneat/until-destroy";
5
+ import { ActionPopupComponent, TechlifyListingControllerInterface, } from "ngx-techlify-core";
6
+ import { debounceTime, lastValueFrom } from "rxjs";
7
+ import { SupplierFormComponent } from "../supplier-form/supplier-form.component";
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "ngx-spinner";
10
+ import * as i2 from "@angular/forms";
11
+ import * as i3 from "../supplier.service";
12
+ import * as i4 from "../supplier-type.service";
13
+ import * as i5 from "ngx-techlify-core";
14
+ import * as i6 from "@angular/router";
15
+ import * as i7 from "@angular/material/dialog";
16
+ import * as i8 from "../supplier-form/supplier-form.service";
17
+ import * as i9 from "@angular/common";
18
+ import * as i10 from "@angular/material/button";
19
+ import * as i11 from "@angular/material/button-toggle";
20
+ import * as i12 from "@angular/material/card";
21
+ import * as i13 from "@angular/material/form-field";
22
+ import * as i14 from "@angular/material/icon";
23
+ import * as i15 from "@angular/material/input";
24
+ import * as i16 from "@angular/material/progress-bar";
25
+ import * as i17 from "@angular/material/sort";
26
+ import * as i18 from "@angular/material/table";
27
+ import * as i19 from "@angular/material/tooltip";
28
+ import * as i20 from "@angular/flex-layout";
29
+ import * as i21 from "ngx-infinite-scroll";
30
+ let SuppliersListComponent = class SuppliersListComponent extends TechlifyListingControllerInterface {
31
+ spinner;
32
+ fb;
33
+ supplierService;
34
+ supplierTypeService;
35
+ errorHandler;
36
+ filterService;
37
+ activatedRoute;
38
+ alertService;
39
+ dialog;
40
+ supplierFormService;
41
+ displayedColumns = [
42
+ "#",
43
+ "company_name",
44
+ "contact_name",
45
+ "phone",
46
+ "address",
47
+ "email",
48
+ "details",
49
+ "actions",
50
+ ];
51
+ filterFormGroup;
52
+ dataSource = new MatTableDataSource();
53
+ totalItems = 0;
54
+ currentPage = 1;
55
+ routeFilters;
56
+ supplierTypes;
57
+ isLoading = false;
58
+ constructor(spinner, fb, supplierService, supplierTypeService, errorHandler, filterService, activatedRoute, alertService, dialog, supplierFormService) {
59
+ super();
60
+ this.spinner = spinner;
61
+ this.fb = fb;
62
+ this.supplierService = supplierService;
63
+ this.supplierTypeService = supplierTypeService;
64
+ this.errorHandler = errorHandler;
65
+ this.filterService = filterService;
66
+ this.activatedRoute = activatedRoute;
67
+ this.alertService = alertService;
68
+ this.dialog = dialog;
69
+ this.supplierFormService = supplierFormService;
70
+ this.page = 1;
71
+ this.perPage = 25;
72
+ this.models = [];
73
+ this.filterFormGroup = this.fb.group({
74
+ search: [""],
75
+ supplier_type_ids: ["1,2"],
76
+ num_items: [this.perPage + "|" + this.currentPage],
77
+ sort_by: [""],
78
+ });
79
+ this.supplierTypes = [];
80
+ }
81
+ ngOnInit() {
82
+ this.patchFiltersFromRoute();
83
+ this.listenForChanges();
84
+ this.getSupplierTypes();
85
+ this.loadData();
86
+ }
87
+ listenForChanges() {
88
+ // listen for supplier added event to update the list.
89
+ this.supplierFormService.isListUpdated().subscribe((val) => {
90
+ if (val && !this.isLoading)
91
+ this.reload();
92
+ });
93
+ // listen for form group changes.
94
+ this.filterFormGroup.valueChanges
95
+ .pipe(debounceTime(500), untilDestroyed(this))
96
+ .subscribe((changes) => {
97
+ this.filterService.applyFilterToRoute(this.activatedRoute, this.filterFormGroup.value);
98
+ this.reload();
99
+ });
100
+ }
101
+ patchFiltersFromRoute() {
102
+ this.routeFilters = this.filterService.getFiltersFromRoute(this.activatedRoute, this.filterFormGroup.value);
103
+ this.filterFormGroup.setValue(this.routeFilters);
104
+ if (this.routeFilters.supplier_type_ids) {
105
+ this.filterFormGroup
106
+ .get("supplier_type_ids")
107
+ .setValue(this.routeFilters.supplier_type_ids.split(",").map(Number));
108
+ }
109
+ }
110
+ sortColumn(event) {
111
+ var direction = event.direction.toString().toUpperCase();
112
+ this.assignFilter(event.active, direction);
113
+ }
114
+ assignFilter(column, direction) {
115
+ return this.filterFormGroup
116
+ .get("sort_by")
117
+ ?.setValue(column + "|" + direction);
118
+ }
119
+ async getSupplierTypes() {
120
+ try {
121
+ let res = await lastValueFrom(this.supplierTypeService.index());
122
+ this.supplierTypes = res.data;
123
+ console.log(this.supplierTypes);
124
+ }
125
+ catch (error) {
126
+ this.errorHandler.handleError(error);
127
+ }
128
+ }
129
+ async loadData() {
130
+ let filters = this.filterFormGroup.value;
131
+ filters.page = this.page = 1;
132
+ filters.per_page = this.perPage;
133
+ filters.supplier_type_ids = filters?.supplier_type_ids?.toString();
134
+ filters.num_items = this.perPage + "|" + this.currentPage;
135
+ try {
136
+ this.isLoading = true;
137
+ let res = await lastValueFrom(this.supplierService.index(filters));
138
+ if (this.models.length < 1) {
139
+ this.models = res.data;
140
+ }
141
+ else {
142
+ res.data.forEach((item) => this.models.push(item));
143
+ }
144
+ this.dataSource = new MatTableDataSource(this.models);
145
+ this.totalItems = res.total;
146
+ this.lastPage = res.last_page || this.page;
147
+ // list is updated do not listen form isListUpdated
148
+ this.supplierFormService.listUpdated(false);
149
+ }
150
+ catch (error) {
151
+ this.errorHandler.handleError(error);
152
+ }
153
+ finally {
154
+ this.isLoading = false;
155
+ }
156
+ }
157
+ reload() {
158
+ if (this.isLoading)
159
+ return;
160
+ this.models = [];
161
+ this.currentPage = 1;
162
+ this.loadData();
163
+ }
164
+ onScroll() {
165
+ if (this.totalItems > this.models.length && !this.isLoading) {
166
+ this.currentPage += 1;
167
+ this.loadData();
168
+ }
169
+ }
170
+ editForm(model) {
171
+ const dialogRef = this.dialog.open(SupplierFormComponent, {
172
+ width: "400px",
173
+ autoFocus: false,
174
+ data: {
175
+ details: model,
176
+ },
177
+ });
178
+ dialogRef.afterClosed().subscribe((result) => {
179
+ if (result) {
180
+ this.reload();
181
+ }
182
+ });
183
+ }
184
+ deleteForm(supplier) {
185
+ const dialogRef = this.dialog.open(ActionPopupComponent, {
186
+ width: "400px",
187
+ data: {
188
+ title: "Delete Supplier",
189
+ message: "Are you sure you want to delete the Supplier?",
190
+ },
191
+ autoFocus: false,
192
+ });
193
+ dialogRef.afterClosed().subscribe(async (result) => {
194
+ if (result) {
195
+ this.spinner.show();
196
+ try {
197
+ const result = await lastValueFrom(this.supplierService.destroy(supplier.id));
198
+ this.alertService.addAlert("Successfully deleted the Supplier", "success");
199
+ this.reload();
200
+ }
201
+ catch (error) {
202
+ this.errorHandler.handleError(error);
203
+ }
204
+ finally {
205
+ this.spinner.hide();
206
+ }
207
+ }
208
+ });
209
+ }
210
+ /**
211
+ * Show the supplier create form.
212
+ *
213
+ * @param model
214
+ */
215
+ showAddSupplierDialog(model) {
216
+ const dialogRef = this.dialog.open(SupplierFormComponent, {
217
+ width: "400px",
218
+ autoFocus: false,
219
+ data: {
220
+ model,
221
+ },
222
+ });
223
+ dialogRef.afterClosed().subscribe((result) => {
224
+ if (result) {
225
+ // record added successfully, inform the list component.
226
+ this.supplierFormService.listUpdated(true);
227
+ }
228
+ });
229
+ }
230
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SuppliersListComponent, deps: [{ token: i1.NgxSpinnerService }, { token: i2.FormBuilder }, { token: i3.SupplierService }, { token: i4.SupplierTypeService }, { token: i5.ErrorHandlerService }, { token: i5.FilterService }, { token: i6.ActivatedRoute }, { token: i5.AlertService }, { token: i7.MatDialog }, { token: i8.SupplierFormService }], target: i0.ɵɵFactoryTarget.Component });
231
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SuppliersListComponent, selector: "app-suppliers-list", usesInheritance: true, ngImport: i0, template: "<div class=\"d-flex justify-content-center align-items-center gap-3 mb-3\">\n <h2 class=\"mb-0\">Suppliers</h2>\n <mat-icon\n color=\"primary\"\n class=\"cursor-pointer\"\n (click)=\"showAddSupplierDialog()\"\n >\n add\n </mat-icon>\n</div>\n<mat-card class=\"mb-3\">\n <mat-card-content>\n <form\n [formGroup]=\"filterFormGroup\"\n fxLayout\n fxLayoutGap=\"1rem\"\n fxLayoutAlign=\"start center\"\n >\n <mat-form-field fxFlex=\"24\">\n <input\n matInput\n placeholder=\"Search Supplier by Name, Phone, Address, Email, Description\"\n formControlName=\"search\"\n />\n <mat-icon matSuffix>search</mat-icon>\n </mat-form-field>\n <mat-label class=\"ml-4\">Type</mat-label>\n <mat-button-toggle-group formControlName=\"supplier_type_ids\" multiple>\n <mat-button-toggle\n *ngFor=\"let item of supplierTypes\"\n [value]=\"item.id\"\n >{{ item.title }}</mat-button-toggle\n >\n </mat-button-toggle-group>\n </form>\n </mat-card-content>\n</mat-card>\n<mat-card>\n <mat-card-content class=\"p-0\">\n <table\n mat-table\n #table\n [dataSource]=\"dataSource\"\n class=\"w-100 table-hover\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\"\n [fromRoot]=\"true\"\n matSort\n (matSortChange)=\"sortColumn($event)\"\n aria-describedby=\"Suppliers List\"\n >\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>Company</th>\n <td mat-cell *matCellDef=\"let element\">\n <div class=\"d-flex flex-column gap-1\">\n <strong>{{ element?.company_name }}</strong>\n <span class=\"status-pill status-pill-sm status-ongoing\">\n {{ element?.type?.title }}\n </span>\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"contact_name\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Contact Name</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>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 mat-sort-header>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>Description</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\" fxLayoutGap=\"1rem\">\n <app-audit-log-for-model\n [modelId]=\"element?.id\"\n modelType=\"Supplier\"\n logView=\"all\"\n ></app-audit-log-for-model>\n <button\n mat-icon-button\n [routerLink]=\"['/suppliers', element.id, 'view']\"\n routerLinkActive=\"route-link-active\"\n *ngxPermissionsOnly=\"['supplier.read']\"\n >\n <mat-icon matTooltip=\"View\">remove_red_eye</mat-icon>\n </button>\n <button\n *ngxPermissionsOnly=\"['supplier.update']\"\n mat-icon-button\n (click)=\"editForm(element)\"\n >\n <mat-icon>edit</mat-icon>\n </button>\n <button\n *ngxPermissionsOnly=\"['supplier.delete']\"\n type=\"button\"\n mat-icon-button\n (click)=\"deleteForm(element)\"\n >\n <mat-icon>delete</mat-icon>\n </button>\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=\"isLoading\"></mat-progress-bar>\n </mat-card-content>\n</mat-card>\n", dependencies: [{ kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i6.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: i10.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i11.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i11.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i12.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i12.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i13.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i13.MatLabel, selector: "mat-label" }, { kind: "directive", type: i13.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i14.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i15.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: i16.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: i17.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i17.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i18.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i18.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i18.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i18.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i18.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i18.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i18.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i18.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i18.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i18.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i19.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i5.AuditLogForModelComponent, selector: "app-audit-log-for-model", inputs: ["modelType", "modelId", "logView"] }, { kind: "directive", type: i20.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i20.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i20.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i20.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { 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: i21.InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }], preserveWhitespaces: true });
232
+ };
233
+ SuppliersListComponent = __decorate([
234
+ UntilDestroy()
235
+ ], SuppliersListComponent);
236
+ export { SuppliersListComponent };
237
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SuppliersListComponent, decorators: [{
238
+ type: Component,
239
+ args: [{ selector: "app-suppliers-list", template: "<div class=\"d-flex justify-content-center align-items-center gap-3 mb-3\">\n <h2 class=\"mb-0\">Suppliers</h2>\n <mat-icon\n color=\"primary\"\n class=\"cursor-pointer\"\n (click)=\"showAddSupplierDialog()\"\n >\n add\n </mat-icon>\n</div>\n<mat-card class=\"mb-3\">\n <mat-card-content>\n <form\n [formGroup]=\"filterFormGroup\"\n fxLayout\n fxLayoutGap=\"1rem\"\n fxLayoutAlign=\"start center\"\n >\n <mat-form-field fxFlex=\"24\">\n <input\n matInput\n placeholder=\"Search Supplier by Name, Phone, Address, Email, Description\"\n formControlName=\"search\"\n />\n <mat-icon matSuffix>search</mat-icon>\n </mat-form-field>\n <mat-label class=\"ml-4\">Type</mat-label>\n <mat-button-toggle-group formControlName=\"supplier_type_ids\" multiple>\n <mat-button-toggle\n *ngFor=\"let item of supplierTypes\"\n [value]=\"item.id\"\n >{{ item.title }}</mat-button-toggle\n >\n </mat-button-toggle-group>\n </form>\n </mat-card-content>\n</mat-card>\n<mat-card>\n <mat-card-content class=\"p-0\">\n <table\n mat-table\n #table\n [dataSource]=\"dataSource\"\n class=\"w-100 table-hover\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\"\n [fromRoot]=\"true\"\n matSort\n (matSortChange)=\"sortColumn($event)\"\n aria-describedby=\"Suppliers List\"\n >\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>Company</th>\n <td mat-cell *matCellDef=\"let element\">\n <div class=\"d-flex flex-column gap-1\">\n <strong>{{ element?.company_name }}</strong>\n <span class=\"status-pill status-pill-sm status-ongoing\">\n {{ element?.type?.title }}\n </span>\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"contact_name\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Contact Name</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>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 mat-sort-header>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>Description</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\" fxLayoutGap=\"1rem\">\n <app-audit-log-for-model\n [modelId]=\"element?.id\"\n modelType=\"Supplier\"\n logView=\"all\"\n ></app-audit-log-for-model>\n <button\n mat-icon-button\n [routerLink]=\"['/suppliers', element.id, 'view']\"\n routerLinkActive=\"route-link-active\"\n *ngxPermissionsOnly=\"['supplier.read']\"\n >\n <mat-icon matTooltip=\"View\">remove_red_eye</mat-icon>\n </button>\n <button\n *ngxPermissionsOnly=\"['supplier.update']\"\n mat-icon-button\n (click)=\"editForm(element)\"\n >\n <mat-icon>edit</mat-icon>\n </button>\n <button\n *ngxPermissionsOnly=\"['supplier.delete']\"\n type=\"button\"\n mat-icon-button\n (click)=\"deleteForm(element)\"\n >\n <mat-icon>delete</mat-icon>\n </button>\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=\"isLoading\"></mat-progress-bar>\n </mat-card-content>\n</mat-card>\n" }]
240
+ }], ctorParameters: () => [{ type: i1.NgxSpinnerService }, { type: i2.FormBuilder }, { type: i3.SupplierService }, { type: i4.SupplierTypeService }, { type: i5.ErrorHandlerService }, { type: i5.FilterService }, { type: i6.ActivatedRoute }, { type: i5.AlertService }, { type: i7.MatDialog }, { type: i8.SupplierFormService }] });
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcGxpZXJzLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52ZW50b3J5LWNvbW1vbi9zcmMvbGliL2ludmVudG9yeS1jb21tb24vc3VwcGxpZXIvc3VwcGxpZXJzLWxpc3Qvc3VwcGxpZXJzLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52ZW50b3J5LWNvbW1vbi9zcmMvbGliL2ludmVudG9yeS1jb21tb24vc3VwcGxpZXIvc3VwcGxpZXJzLWxpc3Qvc3VwcGxpZXJzLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFHbEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVyRSxPQUFPLEVBRUwsb0JBQW9CLEVBSXBCLGtDQUFrQyxHQUNuQyxNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVMxRSxJQUFNLHNCQUFzQixHQUE1QixNQUFNLHNCQUNYLFNBQVEsa0NBQWtDO0lBdUJoQztJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQTdCVixnQkFBZ0IsR0FBYTtRQUMzQixHQUFHO1FBQ0gsY0FBYztRQUNkLGNBQWM7UUFDZCxPQUFPO1FBQ1AsU0FBUztRQUNULE9BQU87UUFDUCxTQUFTO1FBQ1QsU0FBUztLQUNWLENBQUM7SUFFSyxlQUFlLENBQVk7SUFDM0Is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QUFDLFNBQVMsQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO1lBQ2hELElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsd0RBQXdEO2dCQUN4RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBck5VLHNCQUFzQjs0RkFBdEIsc0JBQXNCLGlGQ3pCbkMsaTJKQTRJQTs7QURuSGEsc0JBQXNCO0lBTGxDLFlBQVksRUFBRTtHQUtGLHNCQUFzQixDQXNObEM7OzRGQXROWSxzQkFBc0I7a0JBSmxDLFNBQVM7K0JBQ0Usb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQnVpbGRlciB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3RhYmxlXCI7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IFVudGlsRGVzdHJveSwgdW50aWxEZXN0cm95ZWQgfSBmcm9tIFwiQG5nbmVhdC91bnRpbC1kZXN0cm95XCI7XG5pbXBvcnQgeyBOZ3hTcGlubmVyU2VydmljZSB9IGZyb20gXCJuZ3gtc3Bpbm5lclwiO1xuaW1wb3J0IHtcbiAgQWN0aW9uUG9wdXAsXG4gIEFjdGlvblBvcHVwQ29tcG9uZW50LFxuICBBbGVydFNlcnZpY2UsXG4gIEVycm9ySGFuZGxlclNlcnZpY2UsXG4gIEZpbHRlclNlcnZpY2UsXG4gIFRlY2hsaWZ5TGlzdGluZ0NvbnRyb2xsZXJJbnRlcmZhY2UsXG59IGZyb20gXCJuZ3gtdGVjaGxpZnktY29yZVwiO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBsYXN0VmFsdWVGcm9tIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IFN1cHBsaWVyRm9ybUNvbXBvbmVudCB9IGZyb20gXCIuLi9zdXBwbGllci1mb3JtL3N1cHBsaWVyLWZvcm0uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBTdXBwbGllclR5cGVTZXJ2aWNlIH0gZnJvbSBcIi4uL3N1cHBsaWVyLXR5cGUuc2VydmljZVwiO1xuaW1wb3J0IHsgU3VwcGxpZXJTZXJ2aWNlIH0gZnJvbSBcIi4uL3N1cHBsaWVyLnNlcnZpY2VcIjtcbmltcG9ydCB7IFN1cHBsaWVyRm9ybVNlcnZpY2UgfSBmcm9tIFwiLi4vc3VwcGxpZXItZm9ybS9zdXBwbGllci1mb3JtLnNlcnZpY2VcIjtcbkBVbnRpbERlc3Ryb3koKVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImFwcC1zdXBwbGllcnMtbGlzdFwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3N1cHBsaWVycy1saXN0LmNvbXBvbmVudC5odG1sXCIsXG59KVxuZXhwb3J0IGNsYXNzIFN1cHBsaWVyc0xpc3RDb21wb25lbnRcbiAgZXh0ZW5kcyBUZWNobGlmeUxpc3RpbmdDb250cm9sbGVySW50ZXJmYWNlXG4gIGltcGxlbWVudHMgT25Jbml0XG57XG4gIGRpc3BsYXllZENvbHVtbnM6IHN0cmluZ1tdID0gW1xuICAgIFwiI1wiLFxuICAgIFwiY29tcGFueV9uYW1lXCIsXG4gICAgXCJjb250YWN0X25hbWVcIixcbiAgICBcInBob25lXCIsXG4gICAgXCJhZGRyZXNzXCIsXG4gICAgXCJlbWFpbFwiLFxuICAgIFwiZGV0YWlsc1wiLFxuICAgIFwiYWN0aW9uc1wiLFxuICBdO1xuXG4gIHB1YmxpYyBmaWx0ZXJGb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgcHVibGljIGRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKCk7XG4gIHB1YmxpYyB0b3RhbEl0ZW1zID0gMDtcbiAgcHVibGljIGN1cnJlbnRQYWdlID0gMTtcbiAgcHVibGljIHJvdXRlRmlsdGVyczogYW55O1xuICBwdWJsaWMgc3VwcGxpZXJUeXBlczogYW55O1xuICBwdWJsaWMgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzcGlubmVyOiBOZ3hTcGlubmVyU2VydmljZSxcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHN1cHBsaWVyU2VydmljZTogU3VwcGxpZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3VwcGxpZXJUeXBlU2VydmljZTogU3VwcGxpZXJUeXBlU2VydmljZSxcbiAgICBwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVyU2VydmljZSxcbiAgICBwcml2YXRlIGZpbHRlclNlcnZpY2U6IEZpbHRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgc3VwcGxpZXJGb3JtU2VydmljZTogU3VwcGxpZXJGb3JtU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucGFnZSA9IDE7XG4gICAgdGhpcy5wZXJQYWdlID0gMjU7XG4gICAgdGhpcy5tb2RlbHMgPSBbXTtcbiAgICB0aGlzLmZpbHRlckZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgc2VhcmNoOiBbXCJcIl0sXG4gICAgICBzdXBwbGllcl90eXBlX2lkczogW1wiMSwyXCJdLFxuICAgICAgbnVtX2l0ZW1zOiBbdGhpcy5wZXJQYWdlICsgXCJ8XCIgKyB0aGlzLmN1cnJlbnRQYWdlXSxcbiAgICAgIHNvcnRfYnk6IFtcIlwiXSxcbiAgICB9KTtcbiAgICB0aGlzLnN1cHBsaWVyVHlwZXMgPSBbXTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucGF0Y2hGaWx0ZXJzRnJvbVJvdXRlKCk7XG4gICAgdGhpcy5saXN0ZW5Gb3JDaGFuZ2VzKCk7XG4gICAgdGhpcy5nZXRTdXBwbGllclR5cGVzKCk7XG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgbGlzdGVuRm9yQ2hhbmdlcygpIHtcbiAgICAvLyBsaXN0ZW4gZm9yIHN1cHBsaWVyIGFkZGVkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbGlzdC5cbiAgICB0aGlzLnN1cHBsaWVyRm9ybVNlcnZpY2UuaXNMaXN0VXBkYXRlZCgpLnN1YnNjcmliZSgodmFsOiBib29sZWFuKSA9PiB7XG4gICAgICBpZiAodmFsICYmICF0aGlzLmlzTG9hZGluZykgdGhpcy5yZWxvYWQoKTtcbiAgICB9KTtcbiAgICAvLyBsaXN0ZW4gZm9yIGZvcm0gZ3JvdXAgY2hhbmdlcy5cbiAgICB0aGlzLmZpbHRlckZvcm1Hcm91cC52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApLCB1bnRpbERlc3Ryb3llZCh0aGlzKSlcbiAgICAgIC5zdWJzY3JpYmUoKGNoYW5nZXMpID0+IHtcbiAgICAgICAgdGhpcy5maWx0ZXJTZXJ2aWNlLmFwcGx5RmlsdGVyVG9Sb3V0ZShcbiAgICAgICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybUdyb3VwLnZhbHVlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHBhdGNoRmlsdGVyc0Zyb21Sb3V0ZSgpIHtcbiAgICB0aGlzLnJvdXRlRmlsdGVycyA9IHRoaXMuZmlsdGVyU2VydmljZS5nZXRGaWx0ZXJzRnJvbVJvdXRlKFxuICAgICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZSxcbiAgICAgIHRoaXMuZmlsdGVyRm9ybUdyb3VwLnZhbHVlXG4gICAgKTtcbiAgICB0aGlzLmZpbHRlckZvcm1Hcm91cC5zZXRWYWx1ZSh0aGlzLnJvdXRlRmlsdGVycyk7XG5cbiAgICBpZiAodGhpcy5yb3V0ZUZpbHRlcnMuc3VwcGxpZXJfdHlwZV9pZHMpIHtcbiAgICAgIHRoaXMuZmlsdGVyRm9ybUdyb3VwXG4gICAgICAgIC5nZXQoXCJzdXBwbGllcl90eXBlX2lkc1wiKSFcbiAgICAgICAgLnNldFZhbHVlKHRoaXMucm91dGVGaWx0ZXJzLnN1cHBsaWVyX3R5cGVfaWRzLnNwbGl0KFwiLFwiKS5tYXAoTnVtYmVyKSk7XG4gICAgfVxuICB9XG5cbiAgc29ydENvbHVtbihldmVudDogYW55KSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGV2ZW50LmRpcmVjdGlvbi50b1N0cmluZygpLnRvVXBwZXJDYXNlKCk7XG4gICAgdGhpcy5hc3NpZ25GaWx0ZXIoZXZlbnQuYWN0aXZlLCBkaXJlY3Rpb24pO1xuICB9XG5cbiAgYXNzaWduRmlsdGVyKGNvbHVtbjogYW55LCBkaXJlY3Rpb246IGFueSkge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckZvcm1Hcm91cFxuICAgICAgLmdldChcInNvcnRfYnlcIilcbiAgICAgID8uc2V0VmFsdWUoY29sdW1uICsgXCJ8XCIgKyBkaXJlY3Rpb24pO1xuICB9XG5cbiAgYXN5bmMgZ2V0U3VwcGxpZXJUeXBlcygpIHtcbiAgICB0cnkge1xuICAgICAgbGV0IHJlczogYW55ID0gYXdhaXQgbGFzdFZhbHVlRnJvbSh0aGlzLnN1cHBsaWVyVHlwZVNlcnZpY2UuaW5kZXgoKSk7XG4gICAgICB0aGlzLnN1cHBsaWVyVHlwZXMgPSByZXMuZGF0YTtcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuc3VwcGxpZXJUeXBlcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkRGF0YSgpIHtcbiAgICBsZXQgZmlsdGVycyA9IHRoaXMuZmlsdGVyRm9ybUdyb3VwLnZhbHVlO1xuICAgIGZpbHRlcnMucGFnZSA9IHRoaXMucGFnZSA9IDE7XG4gICAgZmlsdGVycy5wZXJfcGFnZSA9IHRoaXMucGVyUGFnZTtcbiAgICBmaWx0ZXJzLnN1cHBsaWVyX3R5cGVfaWRzID0gZmlsdGVycz8uc3VwcGxpZXJfdHlwZV9pZHM/LnRvU3RyaW5nKCk7XG4gICAgZmlsdGVycy5udW1faXRlbXMgPSB0aGlzLnBlclBhZ2UgKyBcInxcIiArIHRoaXMuY3VycmVudFBhZ2U7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgIGxldCByZXM6IGFueSA9IGF3YWl0IGxhc3RWYWx1ZUZyb20odGhpcy5zdXBwbGllclNlcnZpY2UuaW5kZXgoZmlsdGVycykpO1xuICAgICAgaWYgKHRoaXMubW9kZWxzLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgdGhpcy5tb2RlbHMgPSByZXMuZGF0YTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcy5kYXRhLmZvckVhY2goKGl0ZW06IGFueSkgPT4gdGhpcy5tb2RlbHMucHVzaChpdGVtKSk7XG4gICAgICB9XG4gICAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKHRoaXMubW9kZWxzKTtcbiAgICAgIHRoaXMudG90YWxJdGVtcyA9IHJlcy50b3RhbDtcbiAgICAgIHRoaXMubGFzdFBhZ2UgPSByZXMubGFzdF9wYWdlIHx8IHRoaXMucGFnZTtcbiAgICAgIC8vIGxpc3QgaXMgdXBkYXRlZCBkbyBub3QgbGlzdGVuIGZvcm0gaXNMaXN0VXBkYXRlZFxuICAgICAgdGhpcy5zdXBwbGllckZvcm1TZXJ2aWNlLmxpc3RVcGRhdGVkKGZhbHNlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIHJlbG9hZCgpIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmcpIHJldHVybjtcbiAgICB0aGlzLm1vZGVscyA9IFtdO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xuICAgIHRoaXMubG9hZERhdGEoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG9uU2Nyb2xsKCkge1xuICAgIGlmICh0aGlzLnRvdGFsSXRlbXMgPiB0aGlzLm1vZGVscy5sZW5ndGggJiYgIXRoaXMuaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlICs9IDE7XG4gICAgICB0aGlzLmxvYWREYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgZWRpdEZvcm0obW9kZWw/OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFN1cHBsaWVyRm9ybUNvbXBvbmVudCwge1xuICAgICAgd2lkdGg6IFwiNDAwcHhcIixcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGRldGFpbHM6IG1vZGVsLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBkZWxldGVGb3JtKHN1cHBsaWVyOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEFjdGlvblBvcHVwQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogXCI0MDBweFwiLFxuICAgICAgZGF0YTogPEFjdGlvblBvcHVwPntcbiAgICAgICAgdGl0bGU6IFwiRGVsZXRlIFN1cHBsaWVyXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgU3VwcGxpZXI/XCIsXG4gICAgICB9LFxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShhc3luYyAocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRoaXMuc3Bpbm5lci5zaG93KCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbGFzdFZhbHVlRnJvbShcbiAgICAgICAgICAgIHRoaXMuc3VwcGxpZXJTZXJ2aWNlLmRlc3Ryb3koc3VwcGxpZXIuaWQpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydChcbiAgICAgICAgICAgIFwiU3VjY2Vzc2Z1bGx5IGRlbGV0ZWQgdGhlIFN1cHBsaWVyXCIsXG4gICAgICAgICAgICBcInN1Y2Nlc3NcIlxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICB0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhpcy5zcGlubmVyLmhpZGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgdGhlIHN1cHBsaWVyIGNyZWF0ZSBmb3JtLlxuICAgKlxuICAgKiBAcGFyYW0gbW9kZWxcbiAgICovXG4gIHNob3dBZGRTdXBwbGllckRpYWxvZyhtb2RlbD86IGFueSkge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oU3VwcGxpZXJGb3JtQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogXCI0MDBweFwiLFxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbW9kZWwsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAvLyByZWNvcmQgYWRkZWQgc3VjY2Vzc2Z1bGx5LCBpbmZvcm0gdGhlIGxpc3QgY29tcG9uZW50LlxuICAgICAgICB0aGlzLnN1cHBsaWVyRm9ybVNlcnZpY2UubGlzdFVwZGF0ZWQodHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTMgbWItM1wiPlxuICA8aDIgY2xhc3M9XCJtYi0wXCI+U3VwcGxpZXJzPC9oMj5cbiAgPG1hdC1pY29uXG4gICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcbiAgICAoY2xpY2spPVwic2hvd0FkZFN1cHBsaWVyRGlhbG9nKClcIlxuICA+XG4gICAgYWRkXG4gIDwvbWF0LWljb24+XG48L2Rpdj5cbjxtYXQtY2FyZCBjbGFzcz1cIm1iLTNcIj5cbiAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgPGZvcm1cbiAgICAgIFtmb3JtR3JvdXBdPVwiZmlsdGVyRm9ybUdyb3VwXCJcbiAgICAgIGZ4TGF5b3V0XG4gICAgICBmeExheW91dEdhcD1cIjFyZW1cIlxuICAgICAgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiXG4gICAgPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD1cIjI0XCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggU3VwcGxpZXIgYnkgTmFtZSwgUGhvbmUsIEFkZHJlc3MsIEVtYWlsLCBEZXNjcmlwdGlvblwiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VhcmNoXCJcbiAgICAgICAgLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeD5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJtbC00XCI+VHlwZTwvbWF0LWxhYmVsPlxuICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIGZvcm1Db250cm9sTmFtZT1cInN1cHBsaWVyX3R5cGVfaWRzXCIgbXVsdGlwbGU+XG4gICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZVxuICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHN1cHBsaWVyVHlwZXNcIlxuICAgICAgICAgIFt2YWx1ZV09XCJpdGVtLmlkXCJcbiAgICAgICAgICA+e3sgaXRlbS50aXRsZSB9fTwvbWF0LWJ1dHRvbi10b2dnbGVcbiAgICAgICAgPlxuICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cbiAgICA8L2Zvcm0+XG4gIDwvbWF0LWNhcmQtY29udGVudD5cbjwvbWF0LWNhcmQ+XG48bWF0LWNhcmQ+XG4gIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwicC0wXCI+XG4gICAgPHRhYmxlXG4gICAgICBtYXQtdGFibGVcbiAgICAgICN0YWJsZVxuICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXG4gICAgICBjbGFzcz1cInctMTAwIHRhYmxlLWhvdmVyXCJcbiAgICAgIGluZmluaXRlU2Nyb2xsXG4gICAgICBbaW5maW5pdGVTY3JvbGxEaXN0YW5jZV09XCIyXCJcbiAgICAgIFtpbmZpbml0ZVNjcm9sbFRocm90dGxlXT1cIjUwXCJcbiAgICAgIChzY3JvbGxlZCk9XCJvblNjcm9sbCgpXCJcbiAgICAgIFtmcm9tUm9vdF09XCJ0cnVlXCJcbiAgICAgIG1hdFNvcnRcbiAgICAgIChtYXRTb3J0Q2hhbmdlKT1cInNvcnRDb2x1bW4oJGV2ZW50KVwiXG4gICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwiU3VwcGxpZXJzIExpc3RcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiI1wiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPiM8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudDsgbGV0IGkgPSBpbmRleFwiPnt7IGkgKyAxIH19PC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImNvbXBhbnlfbmFtZVwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj5Db21wYW55PC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0xXCI+XG4gICAgICAgICAgICA8c3Ryb25nPnt7IGVsZW1lbnQ/LmNvbXBhbnlfbmFtZSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGF0dXMtcGlsbCBzdGF0dXMtcGlsbC1zbSBzdGF0dXMtb25nb2luZ1wiPlxuICAgICAgICAgICAgICB7eyBlbGVtZW50Py50eXBlPy50aXRsZSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiY29udGFjdF9uYW1lXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPkNvbnRhY3QgTmFtZTwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAge3sgZWxlbWVudD8uY29udGFjdF9uYW1lIH19XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJwaG9uZVwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlBob25lPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj57eyBlbGVtZW50Py5waG9uZSB9fTwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJhZGRyZXNzXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPkFkZHJlc3M8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPnt7IGVsZW1lbnQ/LmFkZHJlc3MgfX08L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZW1haWxcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+RW1haWw8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPnt7IGVsZW1lbnQ/LmVtYWlsIH19PC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImRldGFpbHNcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5EZXNjcmlwdGlvbjwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+e3sgZWxlbWVudD8uZGV0YWlscyB9fTwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJhY3Rpb25zXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+QWN0aW9uczwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc2Vjb25kYXJ5XCIgZnhMYXlvdXRHYXA9XCIxcmVtXCI+XG4gICAgICAgICAgICA8YXBwLWF1ZGl0LWxvZy1mb3ItbW9kZWxcbiAgICAgICAgICAgICAgW21vZGVsSWRdPVwiZWxlbWVudD8uaWRcIlxuICAgICAgICAgICAgICBtb2RlbFR5cGU9XCJTdXBwbGllclwiXG4gICAgICAgICAgICAgIGxvZ1ZpZXc9XCJhbGxcIlxuICAgICAgICAgICAgPjwvYXBwLWF1ZGl0LWxvZy1mb3ItbW9kZWw+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy9zdXBwbGllcnMnLCBlbGVtZW50LmlkLCAndmlldyddXCJcbiAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cInJvdXRlLWxpbmstYWN0aXZlXCJcbiAgICAgICAgICAgICAgKm5neFBlcm1pc3Npb25zT25seT1cIlsnc3VwcGxpZXIucmVhZCddXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFRvb2x0aXA9XCJWaWV3XCI+cmVtb3ZlX3JlZF9leWU8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ3hQZXJtaXNzaW9uc09ubHk9XCJbJ3N1cHBsaWVyLnVwZGF0ZSddXCJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJlZGl0Rm9ybShlbGVtZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5lZGl0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAqbmd4UGVybWlzc2lvbnNPbmx5PVwiWydzdXBwbGllci5kZWxldGUnXVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUZvcm0oZWxlbWVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uczsgc3RpY2t5OiB0cnVlXCI+PC90cj5cbiAgICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zXCI+PC90cj5cbiAgICA8L3RhYmxlPlxuXG4gICAgPG1hdC1wcm9ncmVzcy1iYXIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiAqbmdJZj1cImlzTG9hZGluZ1wiPjwvbWF0LXByb2dyZXNzLWJhcj5cbiAgPC9tYXQtY2FyZC1jb250ZW50PlxuPC9tYXQtY2FyZD5cbiJdfQ==