@rolatech/angular-product 17.0.0 → 17.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/esm2022/index.mjs +5 -12
  2. package/esm2022/lib/components/index.mjs +12 -0
  3. package/esm2022/lib/components/product-action/product-action.component.mjs +25 -0
  4. package/esm2022/lib/components/product-info/product-info.component.mjs +17 -0
  5. package/esm2022/lib/components/product-item/product-item.component.mjs +17 -0
  6. package/esm2022/lib/components/product-manage-option-add/product-manage-option-add.component.mjs +68 -0
  7. package/esm2022/lib/components/product-manage-option-item/product-manage-option-item.component.mjs +49 -0
  8. package/esm2022/lib/components/product-manage-variant/product-manage-variant.component.mjs +115 -0
  9. package/esm2022/lib/components/product-mange-option-action/product-manage-option-action.component.mjs +22 -0
  10. package/esm2022/lib/components/product-mange-section-item/product-mange-section-item.component.mjs +89 -0
  11. package/esm2022/lib/components/product-media/product-media.component.mjs +34 -0
  12. package/esm2022/lib/components/product-option/product-option.component.mjs +23 -0
  13. package/esm2022/lib/components/product-owner-renderer/product-owner-renderer.component.mjs +20 -0
  14. package/esm2022/lib/components/product-pricing/product-pricing.component.mjs +31 -0
  15. package/esm2022/lib/components/product-section/product-section.component.mjs +26 -0
  16. package/esm2022/lib/interfaces/category.mjs +2 -0
  17. package/esm2022/lib/interfaces/index.mjs +2 -0
  18. package/esm2022/lib/interfaces/product.mjs +32 -0
  19. package/esm2022/lib/pages/product/product-category/product-category.component.mjs +70 -8
  20. package/esm2022/lib/pages/product/product-details/product-details.component.mjs +193 -0
  21. package/esm2022/lib/pages/product/product-details/selected.pipe.mjs +18 -0
  22. package/esm2022/lib/pages/product/product-index/product-index.component.mjs +39 -8
  23. package/esm2022/lib/pages/product/product-layout/product-layout.component.mjs +46 -8
  24. package/esm2022/lib/pages/product/product.routes.mjs +3 -3
  25. package/esm2022/lib/pages/product-manage/product-manage-content/product-manage-content.component.mjs +5 -5
  26. package/esm2022/lib/pages/product-manage/product-manage-create/product-manage-create.component.mjs +61 -0
  27. package/esm2022/lib/pages/product-manage/product-manage-index/product-manage-index.component.mjs +155 -0
  28. package/esm2022/lib/pages/product-manage/product-manage-info/product-manage-info.component.mjs +98 -8
  29. package/esm2022/lib/pages/product-manage/product-manage-inventory/product-manage-inventory.component.mjs +14 -0
  30. package/esm2022/lib/pages/product-manage/product-manage-item/product-manage-item.component.mjs +27 -0
  31. package/esm2022/lib/pages/product-manage/product-manage-item-header/product-manage-item-header.component.mjs +12 -0
  32. package/esm2022/lib/pages/product-manage/product-manage-layout/product-manage-layout.component.mjs +51 -8
  33. package/esm2022/lib/pages/product-manage/product-manage-media/product-manage-media.component.mjs +133 -8
  34. package/esm2022/lib/pages/product-manage/product-manage-options/product-manage-options.component.mjs +102 -0
  35. package/esm2022/lib/pages/product-manage/product-manage-pricing/product-manage-pricing.component.mjs +5 -5
  36. package/esm2022/lib/pages/product-manage/product-manage-schedule/product-manage-schedule.component.mjs +14 -0
  37. package/esm2022/lib/pages/product-manage/product-manage-sections/product-manage-sections.component.mjs +170 -0
  38. package/esm2022/lib/pages/product-manage/product-manage-variants/product-manage-variants.component.mjs +133 -0
  39. package/esm2022/lib/pages/product-manage/product-manage.routes.mjs +34 -4
  40. package/esm2022/lib/services/index.mjs +4 -0
  41. package/esm2022/lib/services/product-category.service.mjs +38 -0
  42. package/esm2022/provider.mjs +13 -0
  43. package/fesm2022/rolatech-angular-product-product-index.component-C_cbg95R.mjs +70 -0
  44. package/fesm2022/rolatech-angular-product-product-index.component-C_cbg95R.mjs.map +1 -0
  45. package/fesm2022/rolatech-angular-product.mjs +1697 -76
  46. package/fesm2022/rolatech-angular-product.mjs.map +1 -1
  47. package/index.d.ts +4 -11
  48. package/lib/components/index.d.ts +11 -0
  49. package/lib/components/product-action/product-action.component.d.ts +11 -0
  50. package/lib/components/product-info/product-info.component.d.ts +7 -0
  51. package/lib/components/product-item/product-item.component.d.ts +7 -0
  52. package/lib/components/product-manage-option-add/product-manage-option-add.component.d.ts +20 -0
  53. package/lib/components/product-manage-option-item/product-manage-option-item.component.d.ts +14 -0
  54. package/lib/components/product-manage-variant/product-manage-variant.component.d.ts +18 -0
  55. package/lib/components/product-mange-option-action/product-manage-option-action.component.d.ts +10 -0
  56. package/lib/components/product-mange-section-item/product-mange-section-item.component.d.ts +33 -0
  57. package/lib/components/product-media/product-media.component.d.ts +12 -0
  58. package/lib/components/product-option/product-option.component.d.ts +14 -0
  59. package/lib/components/product-owner-renderer/product-owner-renderer.component.d.ts +8 -0
  60. package/lib/components/product-pricing/product-pricing.component.d.ts +12 -0
  61. package/lib/components/product-section/product-section.component.d.ts +16 -0
  62. package/lib/interfaces/category.d.ts +16 -0
  63. package/lib/interfaces/index.d.ts +2 -0
  64. package/lib/interfaces/product.d.ts +91 -0
  65. package/lib/pages/product/product-category/product-category.component.d.ts +19 -2
  66. package/lib/pages/product/product-details/product-details.component.d.ts +39 -0
  67. package/lib/pages/product/product-details/selected.pipe.d.ts +8 -0
  68. package/lib/pages/product/product-index/product-index.component.d.ts +12 -2
  69. package/lib/pages/product/product-layout/product-layout.component.d.ts +15 -2
  70. package/lib/pages/product-manage/product-manage-content/product-manage-content.component.d.ts +1 -1
  71. package/lib/pages/product-manage/product-manage-create/product-manage-create.component.d.ts +11 -0
  72. package/lib/pages/product-manage/product-manage-index/product-manage-index.component.d.ts +38 -0
  73. package/lib/pages/product-manage/product-manage-info/product-manage-info.component.d.ts +26 -2
  74. package/lib/pages/product-manage/product-manage-inventory/product-manage-inventory.component.d.ts +5 -0
  75. package/lib/pages/product-manage/product-manage-item/product-manage-item.component.d.ts +12 -0
  76. package/lib/pages/product-manage/product-manage-item-header/product-manage-item-header.component.d.ts +5 -0
  77. package/lib/pages/product-manage/product-manage-layout/product-manage-layout.component.d.ts +22 -2
  78. package/lib/pages/product-manage/product-manage-media/product-manage-media.component.d.ts +26 -2
  79. package/lib/pages/product-manage/product-manage-options/product-manage-options.component.d.ts +17 -0
  80. package/lib/pages/product-manage/product-manage-pricing/product-manage-pricing.component.d.ts +1 -1
  81. package/lib/pages/product-manage/product-manage-schedule/product-manage-schedule.component.d.ts +5 -0
  82. package/lib/pages/product-manage/product-manage-sections/product-manage-sections.component.d.ts +29 -0
  83. package/lib/pages/product-manage/product-manage-variants/product-manage-variants.component.d.ts +27 -0
  84. package/lib/services/index.d.ts +3 -0
  85. package/lib/services/product-category.service.d.ts +12 -0
  86. package/package.json +1 -1
  87. package/provider.d.ts +2 -0
  88. package/themes/_default.scss +1 -1
  89. package/esm2022/lib/angular-product/angular-product.component.mjs +0 -12
  90. package/esm2022/lib/pages/product/product-detail/product-detail.component.mjs +0 -12
  91. package/esm2022/lib/pages/product-manage/product-manage-details/product-manage-details.component.mjs +0 -12
  92. package/lib/angular-product/angular-product.component.d.ts +0 -5
  93. package/lib/pages/product/product-detail/product-detail.component.d.ts +0 -5
  94. package/lib/pages/product-manage/product-manage-details/product-manage-details.component.d.ts +0 -5
@@ -1,12 +1,137 @@
1
- import { Component } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
1
+ import { Component, inject } from '@angular/core';
2
+ import { MatDialog } from '@angular/material/dialog';
3
+ import { MatSnackBar } from '@angular/material/snack-bar';
4
+ import { ActivatedRoute } from '@angular/router';
5
+ import { ConfirmationDialogComponent, ImagePreviewDialogComponent, MediaListComponent, MediaListItemComponent, ToolbarComponent, } from '@rolatech/angular-components';
6
+ import { findLastIndex } from 'lodash';
7
+ import { ProductService } from '@rolatech/angular-services';
8
+ import { ProductManageContentComponent } from '../product-manage-content/product-manage-content.component';
9
+ import { ProductStatus } from '../../../interfaces';
3
10
  import * as i0 from "@angular/core";
11
+ const SIZE = 10 * 1024 * 1024; // file slice size 10MB
4
12
  export class ProductManageMediaComponent {
5
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ProductManageMediaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: ProductManageMediaComponent, isStandalone: true, selector: "lib-product-manage-media", ngImport: i0, template: "<p>product-manage-media works!</p>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
13
+ // productType: any = ProductType;
14
+ constructor() {
15
+ this.route = inject(ActivatedRoute);
16
+ this.productService = inject(ProductService);
17
+ this.dialog = inject(MatDialog);
18
+ this.snackBar = inject(MatSnackBar);
19
+ this.isUploading = false;
20
+ this.isLoading = false;
21
+ this.media = [];
22
+ this.status = ProductStatus;
23
+ this.id = this.route.parent?.snapshot.paramMap.get('id');
24
+ }
25
+ ngOnInit() {
26
+ this.find();
27
+ }
28
+ find() {
29
+ this.productService.get(this.id).subscribe({
30
+ next: (res) => {
31
+ this.media = res.data.media || [];
32
+ },
33
+ });
34
+ }
35
+ onImageClick(i) {
36
+ const dialogRef = this.dialog.open(ImagePreviewDialogComponent, {
37
+ maxWidth: '80vw',
38
+ maxHeight: '80vh',
39
+ height: '80%',
40
+ width: '80%',
41
+ panelClass: 'full-screen-modal',
42
+ data: {
43
+ media: this.media,
44
+ selected: i,
45
+ },
46
+ });
47
+ dialogRef.afterClosed().subscribe((result) => { });
48
+ }
49
+ createFileChunk(file, size = SIZE) {
50
+ const fileChunkList = [];
51
+ let cur = 0;
52
+ while (cur < file.size) {
53
+ fileChunkList.push({ file: file.slice(cur, cur + size) });
54
+ cur += size;
55
+ }
56
+ return fileChunkList;
57
+ }
58
+ onUploadMedia2(event) {
59
+ const file = event.target.files[0];
60
+ const reader = new FileReader();
61
+ reader.onload = (e) => { };
62
+ const fileChunkList = this.createFileChunk(file);
63
+ fileChunkList.forEach((item) => { });
64
+ }
65
+ onUploadMedia(event) {
66
+ const file = event.target.files[0];
67
+ // 5MB * 1024 * 1024 = 5242880
68
+ // if (file?.size > 5242880) {
69
+ // this.snackBar.open('尺寸过大, 请修改后上传');
70
+ // this.isUploading = false;
71
+ // return;
72
+ // }
73
+ if (file) {
74
+ const reader = new FileReader();
75
+ const formData = new FormData();
76
+ formData.append('file', file);
77
+ reader.readAsDataURL(file);
78
+ reader.onload = () => {
79
+ const img = new Image();
80
+ img.onload = () => {
81
+ this.media.push({
82
+ url: img.src,
83
+ alt: 'upload image',
84
+ width: img.width,
85
+ height: img.height,
86
+ });
87
+ this.isUploading = true;
88
+ };
89
+ img.src = reader.result; // This is the data URL
90
+ };
91
+ this.productService.uploadMedia(this.id, formData).subscribe({
92
+ next: (res) => {
93
+ this.isUploading = false;
94
+ const index = findLastIndex(this.media);
95
+ // Replace item at index using native splice
96
+ this.media.splice(index, 1, res.data);
97
+ },
98
+ error: (e) => {
99
+ this.isUploading = false;
100
+ this.snackBar.open('上传失败: ' + e.message);
101
+ },
102
+ });
103
+ reader.onerror = (error) => {
104
+ this.isUploading = false;
105
+ };
106
+ }
107
+ }
108
+ onMediaDelete(item) {
109
+ const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
110
+ width: '400px',
111
+ data: {
112
+ title: '删除图片',
113
+ message: '确定删除这张商品图片吗?',
114
+ },
115
+ });
116
+ dialogRef.afterClosed().subscribe((result) => {
117
+ if (result) {
118
+ this.productService.deleteMedia(this.id, item.id).subscribe({
119
+ next: (res) => {
120
+ this.media = this.media.filter((m) => m.id !== item.id);
121
+ this.snackBar.open('删除成功');
122
+ },
123
+ error: (e) => {
124
+ this.snackBar.open(e.message);
125
+ },
126
+ });
127
+ }
128
+ });
129
+ }
130
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductManageMediaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
131
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.4", type: ProductManageMediaComponent, isStandalone: true, selector: "rolatech-product-manage-media", ngImport: i0, template: "<rolatech-product-manage-content>\n <rolatech-toolbar title=\"\u56FE\u7247\u4FE1\u606F\" class=\"hidden md:block\" divider></rolatech-toolbar>\n <div>\n <p>*\u56FE\u7247\u6587\u4EF6\u5927\u5C0F\u9650\u5236\u57285MB\u4EE5\u4E0B*</p>\n <rolatech-media-list (upload)=\"onUploadMedia($event)\" [isUploading]=\"isUploading\">\n @for (item of media; track item; let i = $index) {\n <rolatech-media-list-item\n [media]=\"item\"\n (mediaItemClick)=\"onImageClick(i)\"\n (deleteMedia)=\"onMediaDelete(item)\"\n ></rolatech-media-list-item>\n }\n </rolatech-media-list>\n </div>\n</rolatech-product-manage-content>\n", styles: [""], dependencies: [{ kind: "component", type: MediaListComponent, selector: "rolatech-media-list", inputs: ["isUploading", "media", "showAdd"], outputs: ["mediaItemClick", "upload"] }, { kind: "component", type: MediaListItemComponent, selector: "rolatech-media-list-item", inputs: ["media", "uploadProgress"], outputs: ["mediaItemClick", "deleteMedia"] }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }, { kind: "component", type: ProductManageContentComponent, selector: "rolatech-product-manage-content" }] }); }
7
132
  }
8
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ProductManageMediaComponent, decorators: [{
133
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductManageMediaComponent, decorators: [{
9
134
  type: Component,
10
- args: [{ selector: 'lib-product-manage-media', standalone: true, imports: [CommonModule], template: "<p>product-manage-media works!</p>\n" }]
11
- }] });
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1tYW5hZ2UtbWVkaWEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXByb2R1Y3Qvc3JjL2xpYi9wYWdlcy9wcm9kdWN0LW1hbmFnZS9wcm9kdWN0LW1hbmFnZS1tZWRpYS9wcm9kdWN0LW1hbmFnZS1tZWRpYS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItcHJvZHVjdC9zcmMvbGliL3BhZ2VzL3Byb2R1Y3QtbWFuYWdlL3Byb2R1Y3QtbWFuYWdlLW1lZGlhL3Byb2R1Y3QtbWFuYWdlLW1lZGlhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQVMvQyxNQUFNLE9BQU8sMkJBQTJCOzhHQUEzQiwyQkFBMkI7a0dBQTNCLDJCQUEyQixvRkNWeEMsc0NBQ0EseURES1ksWUFBWTs7MkZBSVgsMkJBQTJCO2tCQVB2QyxTQUFTOytCQUNFLDBCQUEwQixjQUN4QixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1wcm9kdWN0LW1hbmFnZS1tZWRpYScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJvZHVjdC1tYW5hZ2UtbWVkaWEuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vcHJvZHVjdC1tYW5hZ2UtbWVkaWEuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9kdWN0TWFuYWdlTWVkaWFDb21wb25lbnQge31cbiIsIjxwPnByb2R1Y3QtbWFuYWdlLW1lZGlhIHdvcmtzITwvcD5cbiJdfQ==
135
+ args: [{ selector: 'rolatech-product-manage-media', standalone: true, imports: [MediaListComponent, MediaListItemComponent, ToolbarComponent, ProductManageContentComponent], template: "<rolatech-product-manage-content>\n <rolatech-toolbar title=\"\u56FE\u7247\u4FE1\u606F\" class=\"hidden md:block\" divider></rolatech-toolbar>\n <div>\n <p>*\u56FE\u7247\u6587\u4EF6\u5927\u5C0F\u9650\u5236\u57285MB\u4EE5\u4E0B*</p>\n <rolatech-media-list (upload)=\"onUploadMedia($event)\" [isUploading]=\"isUploading\">\n @for (item of media; track item; let i = $index) {\n <rolatech-media-list-item\n [media]=\"item\"\n (mediaItemClick)=\"onImageClick(i)\"\n (deleteMedia)=\"onMediaDelete(item)\"\n ></rolatech-media-list-item>\n }\n </rolatech-media-list>\n </div>\n</rolatech-product-manage-content>\n" }]
136
+ }], ctorParameters: () => [] });
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1tYW5hZ2UtbWVkaWEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXByb2R1Y3Qvc3JjL2xpYi9wYWdlcy9wcm9kdWN0LW1hbmFnZS9wcm9kdWN0LW1hbmFnZS1tZWRpYS9wcm9kdWN0LW1hbmFnZS1tZWRpYS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItcHJvZHVjdC9zcmMvbGliL3BhZ2VzL3Byb2R1Y3QtbWFuYWdlL3Byb2R1Y3QtbWFuYWdlLW1lZGlhL3Byb2R1Y3QtbWFuYWdlLW1lZGlhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sRUFDTCwyQkFBMkIsRUFDM0IsMkJBQTJCLEVBQzNCLGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIsZ0JBQWdCLEdBQ2pCLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDM0csT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQUVwRCxNQUFNLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLHVCQUF1QjtBQVN0RCxNQUFNLE9BQU8s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QyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUM3QixDQUFDO29CQUNELEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO3dCQUNYLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDaEMsQ0FBQztpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzhHQTNIVSwyQkFBMkI7a0dBQTNCLDJCQUEyQix5RkMxQnhDLCtwQkFlQSwwRERPWSxrQkFBa0Isb0pBQUUsc0JBQXNCLHNKQUFFLGdCQUFnQixnSUFBRSw2QkFBNkI7OzJGQUkxRiwyQkFBMkI7a0JBUHZDLFNBQVM7K0JBQ0UsK0JBQStCLGNBQzdCLElBQUksV0FDUCxDQUFDLGtCQUFrQixFQUFFLHNCQUFzQixFQUFFLGdCQUFnQixFQUFFLDZCQUE2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE1lZGlhIH0gZnJvbSAnQHJvbGF0ZWNoL2FuZ3VsYXItY29tbW9uJztcbmltcG9ydCB7XG4gIENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCxcbiAgSW1hZ2VQcmV2aWV3RGlhbG9nQ29tcG9uZW50LFxuICBNZWRpYUxpc3RDb21wb25lbnQsXG4gIE1lZGlhTGlzdEl0ZW1Db21wb25lbnQsXG4gIFRvb2xiYXJDb21wb25lbnQsXG59IGZyb20gJ0Byb2xhdGVjaC9hbmd1bGFyLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgZmluZExhc3RJbmRleCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBQcm9kdWN0U2VydmljZSB9IGZyb20gJ0Byb2xhdGVjaC9hbmd1bGFyLXNlcnZpY2VzJztcbmltcG9ydCB7IFByb2R1Y3RNYW5hZ2VDb250ZW50Q29tcG9uZW50IH0gZnJvbSAnLi4vcHJvZHVjdC1tYW5hZ2UtY29udGVudC9wcm9kdWN0LW1hbmFnZS1jb250ZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcm9kdWN0U3RhdHVzIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcyc7XG5cbmNvbnN0IFNJWkUgPSAxMCAqIDEwMjQgKiAxMDI0OyAvLyBmaWxlIHNsaWNlIHNpemUgMTBNQlxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyb2xhdGVjaC1wcm9kdWN0LW1hbmFnZS1tZWRpYScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtNZWRpYUxpc3RDb21wb25lbnQsIE1lZGlhTGlzdEl0ZW1Db21wb25lbnQsIFRvb2xiYXJDb21wb25lbnQsIFByb2R1Y3RNYW5hZ2VDb250ZW50Q29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb2R1Y3QtbWFuYWdlLW1lZGlhLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3Byb2R1Y3QtbWFuYWdlLW1lZGlhLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgUHJvZHVjdE1hbmFnZU1lZGlhQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcm9kdWN0U2VydmljZSA9IGluamVjdChQcm9kdWN0U2VydmljZSk7XG4gIGRpYWxvZyA9IGluamVjdChNYXREaWFsb2cpO1xuICBzbmFja0JhciA9IGluamVjdChNYXRTbmFja0Jhcik7XG4gIGlkOiBzdHJpbmc7XG4gIGlzVXBsb2FkaW5nID0gZmFsc2U7XG4gIGlzTG9hZGluZyA9IGZhbHNlO1xuICBtZWRpYTogTWVkaWFbXSA9IFtdO1xuICBzdGF0dXMgPSBQcm9kdWN0U3RhdHVzO1xuICAvLyBwcm9kdWN0VHlwZTogYW55ID0gUHJvZHVjdFR5cGU7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaWQgPSB0aGlzLnJvdXRlLnBhcmVudD8uc25hcHNob3QucGFyYW1NYXAuZ2V0KCdpZCcpIGFzIHN0cmluZztcbiAgfVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmZpbmQoKTtcbiAgfVxuICBmaW5kKCkge1xuICAgIHRoaXMucHJvZHVjdFNlcnZpY2UuZ2V0KHRoaXMuaWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5tZWRpYSA9IHJlcy5kYXRhLm1lZGlhIHx8IFtdO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICBvbkltYWdlQ2xpY2soaTogYW55KSB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihJbWFnZVByZXZpZXdEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIG1heFdpZHRoOiAnODB2dycsXG4gICAgICBtYXhIZWlnaHQ6ICc4MHZoJyxcbiAgICAgIGhlaWdodDogJzgwJScsXG4gICAgICB3aWR0aDogJzgwJScsXG4gICAgICBwYW5lbENsYXNzOiAnZnVsbC1zY3JlZW4tbW9kYWwnLFxuICAgICAgZGF0YToge1xuICAgICAgICBtZWRpYTogdGhpcy5tZWRpYSxcbiAgICAgICAgc2VsZWN0ZWQ6IGksXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7fSk7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVGaWxlQ2h1bmsoZmlsZTogYW55LCBzaXplID0gU0laRSkge1xuICAgIGNvbnN0IGZpbGVDaHVua0xpc3Q6IGFueSA9IFtdO1xuICAgIGxldCBjdXIgPSAwO1xuICAgIHdoaWxlIChjdXIgPCBmaWxlLnNpemUpIHtcbiAgICAgIGZpbGVDaHVua0xpc3QucHVzaCh7IGZpbGU6IGZpbGUuc2xpY2UoY3VyLCBjdXIgKyBzaXplKSB9KTtcbiAgICAgIGN1ciArPSBzaXplO1xuICAgIH1cbiAgICByZXR1cm4gZmlsZUNodW5rTGlzdDtcbiAgfVxuXG4gIG9uVXBsb2FkTWVkaWEyKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBmaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgcmVhZGVyLm9ubG9hZCA9IChlKSA9PiB7fTtcblxuICAgIGNvbnN0IGZpbGVDaHVua0xpc3QgPSB0aGlzLmNyZWF0ZUZpbGVDaHVuayhmaWxlKTtcbiAgICBmaWxlQ2h1bmtMaXN0LmZvckVhY2goKGl0ZW0pID0+IHt9KTtcbiAgfVxuICBvblVwbG9hZE1lZGlhKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBmaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xuICAgIC8vIDVNQiAqIDEwMjQgKiAxMDI0ID0gNTI0Mjg4MFxuICAgIC8vIGlmIChmaWxlPy5zaXplID4gNTI0Mjg4MCkge1xuICAgIC8vICAgdGhpcy5zbmFja0Jhci5vcGVuKCflsLrlr7jov4flpKcsIOivt+S/ruaUueWQjuS4iuS8oCcpO1xuICAgIC8vICAgdGhpcy5pc1VwbG9hZGluZyA9IGZhbHNlO1xuICAgIC8vICAgcmV0dXJuO1xuICAgIC8vIH1cblxuICAgIGlmIChmaWxlKSB7XG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUpO1xuXG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGltZzogYW55ID0gbmV3IEltYWdlKCk7XG4gICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tZWRpYS5wdXNoKHtcbiAgICAgICAgICAgIHVybDogaW1nLnNyYyxcbiAgICAgICAgICAgIGFsdDogJ3VwbG9hZCBpbWFnZScsXG4gICAgICAgICAgICB3aWR0aDogaW1nLndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiBpbWcuaGVpZ2h0LFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5pc1VwbG9hZGluZyA9IHRydWU7XG4gICAgICAgIH07XG4gICAgICAgIGltZy5zcmMgPSByZWFkZXIucmVzdWx0OyAvLyBUaGlzIGlzIHRoZSBkYXRhIFVSTFxuICAgICAgfTtcbiAgICAgIHRoaXMucHJvZHVjdFNlcnZpY2UudXBsb2FkTWVkaWEodGhpcy5pZCwgZm9ybURhdGEpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNVcGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGZpbmRMYXN0SW5kZXgodGhpcy5tZWRpYSk7XG4gICAgICAgICAgLy8gUmVwbGFjZSBpdGVtIGF0IGluZGV4IHVzaW5nIG5hdGl2ZSBzcGxpY2VcbiAgICAgICAgICB0aGlzLm1lZGlhLnNwbGljZShpbmRleCwgMSwgcmVzLmRhdGEpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGU6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNVcGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ+S4iuS8oOWksei0pTogJyArIGUubWVzc2FnZSk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIHJlYWRlci5vbmVycm9yID0gKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuaXNVcGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIG9uTWVkaWFEZWxldGUoaXRlbTogYW55KSB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtYXRpb25EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnNDAwcHgnLFxuICAgICAgZGF0YToge1xuICAgICAgICB0aXRsZTogJ+WIoOmZpOWbvueJhycsXG4gICAgICAgIG1lc3NhZ2U6ICfnoa7lrprliKDpmaTov5nlvKDllYblk4Hlm77niYflkJc/JyxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZS5kZWxldGVNZWRpYSh0aGlzLmlkLCBpdGVtLmlkKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWVkaWEgPSB0aGlzLm1lZGlhLmZpbHRlcigobSkgPT4gbS5pZCAhPT0gaXRlbS5pZCk7XG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ+WIoOmZpOaIkOWKnycpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oZS5tZXNzYWdlKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiPHJvbGF0ZWNoLXByb2R1Y3QtbWFuYWdlLWNvbnRlbnQ+XG4gIDxyb2xhdGVjaC10b29sYmFyIHRpdGxlPVwi5Zu+54mH5L+h5oGvXCIgY2xhc3M9XCJoaWRkZW4gbWQ6YmxvY2tcIiBkaXZpZGVyPjwvcm9sYXRlY2gtdG9vbGJhcj5cbiAgPGRpdj5cbiAgICA8cD4q5Zu+54mH5paH5Lu25aSn5bCP6ZmQ5Yi25ZyoNU1C5Lul5LiLKjwvcD5cbiAgICA8cm9sYXRlY2gtbWVkaWEtbGlzdCAodXBsb2FkKT1cIm9uVXBsb2FkTWVkaWEoJGV2ZW50KVwiIFtpc1VwbG9hZGluZ109XCJpc1VwbG9hZGluZ1wiPlxuICAgICAgQGZvciAoaXRlbSBvZiBtZWRpYTsgdHJhY2sgaXRlbTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgPHJvbGF0ZWNoLW1lZGlhLWxpc3QtaXRlbVxuICAgICAgICAgIFttZWRpYV09XCJpdGVtXCJcbiAgICAgICAgICAobWVkaWFJdGVtQ2xpY2spPVwib25JbWFnZUNsaWNrKGkpXCJcbiAgICAgICAgICAoZGVsZXRlTWVkaWEpPVwib25NZWRpYURlbGV0ZShpdGVtKVwiXG4gICAgICAgID48L3JvbGF0ZWNoLW1lZGlhLWxpc3QtaXRlbT5cbiAgICAgIH1cbiAgICA8L3JvbGF0ZWNoLW1lZGlhLWxpc3Q+XG4gIDwvZGl2PlxuPC9yb2xhdGVjaC1wcm9kdWN0LW1hbmFnZS1jb250ZW50PlxuIl19
@@ -0,0 +1,102 @@
1
+ import { Component, inject } from '@angular/core';
2
+ import { ProductManageContentComponent } from '../product-manage-content/product-manage-content.component';
3
+ import { AccordionComponent, AngularComponentsModule, BaseComponent, ConfirmationDialogComponent, PanelComponent, ToolbarComponent, } from '@rolatech/angular-components';
4
+ import { ProductService } from '@rolatech/angular-services';
5
+ import { MatFormFieldModule } from '@angular/material/form-field';
6
+ import { MatIconModule } from '@angular/material/icon';
7
+ import { MatButtonModule } from '@angular/material/button';
8
+ import { AngularCommonModule } from '@rolatech/angular-common';
9
+ import { ProductManageOptionAddComponent, ProductManageOptionItemComponent } from '../../../components';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@angular/material/button";
12
+ import * as i2 from "@angular/material/icon";
13
+ export class ProductManageOptionsComponent extends BaseComponent {
14
+ constructor() {
15
+ super(...arguments);
16
+ this.productService = inject(ProductService);
17
+ this.options = [];
18
+ this.add = false;
19
+ }
20
+ ngOnInit() {
21
+ this.id = this.route.parent?.snapshot.paramMap.get('id');
22
+ this.find();
23
+ }
24
+ find() {
25
+ this.productService.findOptions(this.id).subscribe({
26
+ next: (res) => {
27
+ this.options = res.data || [];
28
+ },
29
+ });
30
+ }
31
+ saveOption(option) {
32
+ this.productService.addOption(this.id, option).subscribe({
33
+ next: (res) => {
34
+ this.options.push(res.data);
35
+ this.add = false;
36
+ },
37
+ });
38
+ }
39
+ onUpdateOption(option) {
40
+ const options = {
41
+ title: '编辑选项',
42
+ cancelText: '取消',
43
+ confirmText: '确认',
44
+ data: {
45
+ option: option,
46
+ action: false,
47
+ },
48
+ component: ProductManageOptionAddComponent,
49
+ };
50
+ this.dialogService.open(options);
51
+ this.dialogService.confirmed().subscribe({
52
+ next: (res) => {
53
+ if (res) {
54
+ this.productService.updateOption(option.id, res).subscribe({
55
+ next: (res) => {
56
+ option.values = res.data.values;
57
+ },
58
+ });
59
+ }
60
+ },
61
+ });
62
+ }
63
+ onDeleteOption(option) {
64
+ const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
65
+ width: '400px',
66
+ data: {
67
+ title: '删除选项',
68
+ message: `确定删除 ${option.name} 吗?`,
69
+ },
70
+ });
71
+ dialogRef.afterClosed().subscribe((result) => {
72
+ if (result) {
73
+ this.productService.deleteOption(option.id).subscribe({
74
+ next: (res) => {
75
+ const index = this.options.findIndex((item) => item.id === option.id);
76
+ this.options.splice(index, 1);
77
+ this.snackBarService.open('删除成功');
78
+ },
79
+ });
80
+ }
81
+ });
82
+ }
83
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductManageOptionsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
84
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.4", type: ProductManageOptionsComponent, isStandalone: true, selector: "rolatech-product-manage-options", usesInheritance: true, ngImport: i0, template: "<rolatech-product-manage-content>\n <rolatech-toolbar title=\"\u9009\u9879\" class=\"hidden md:block\" divider> </rolatech-toolbar>\n <div>\n @for (item of options; track $index) {\n <rolatech-product-manage-option-item\n [option]=\"item\"\n (delete)=\"onDeleteOption($event)\"\n (edit)=\"onUpdateOption($event)\"\n ></rolatech-product-manage-option-item>\n }\n <div class=\"mt-3\">\n @if (add) {\n <rolatech-product-manage-option-add\n (save)=\"saveOption($event)\"\n (cancel)=\"add = false\"\n ></rolatech-product-manage-option-add>\n } @else {\n <button mat-stroked-button (click)=\"add = true\">\n <mat-icon>add</mat-icon>\n <span>\u589E\u52A0</span>\n </button>\n }\n </div>\n </div>\n</rolatech-product-manage-content>\n", styles: [""], dependencies: [{ kind: "component", type: ProductManageContentComponent, selector: "rolatech-product-manage-content" }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: AngularCommonModule }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: ProductManageOptionItemComponent, selector: "rolatech-product-manage-option-item", inputs: ["option"], outputs: ["delete", "save", "edit"] }, { kind: "component", type: ProductManageOptionAddComponent, selector: "rolatech-product-manage-option-add", outputs: ["cancel", "save", "output"] }] }); }
85
+ }
86
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductManageOptionsComponent, decorators: [{
87
+ type: Component,
88
+ args: [{ selector: 'rolatech-product-manage-options', standalone: true, imports: [
89
+ ProductManageContentComponent,
90
+ ToolbarComponent,
91
+ MatButtonModule,
92
+ MatFormFieldModule,
93
+ AngularCommonModule,
94
+ AngularComponentsModule,
95
+ MatIconModule,
96
+ AccordionComponent,
97
+ PanelComponent,
98
+ ProductManageOptionItemComponent,
99
+ ProductManageOptionAddComponent,
100
+ ], template: "<rolatech-product-manage-content>\n <rolatech-toolbar title=\"\u9009\u9879\" class=\"hidden md:block\" divider> </rolatech-toolbar>\n <div>\n @for (item of options; track $index) {\n <rolatech-product-manage-option-item\n [option]=\"item\"\n (delete)=\"onDeleteOption($event)\"\n (edit)=\"onUpdateOption($event)\"\n ></rolatech-product-manage-option-item>\n }\n <div class=\"mt-3\">\n @if (add) {\n <rolatech-product-manage-option-add\n (save)=\"saveOption($event)\"\n (cancel)=\"add = false\"\n ></rolatech-product-manage-option-add>\n } @else {\n <button mat-stroked-button (click)=\"add = true\">\n <mat-icon>add</mat-icon>\n <span>\u589E\u52A0</span>\n </button>\n }\n </div>\n </div>\n</rolatech-product-manage-content>\n" }]
101
+ }] });
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1tYW5hZ2Utb3B0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItcHJvZHVjdC9zcmMvbGliL3BhZ2VzL3Byb2R1Y3QtbWFuYWdlL3Byb2R1Y3QtbWFuYWdlLW9wdGlvbnMvcHJvZHVjdC1tYW5hZ2Utb3B0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItcHJvZHVjdC9zcmMvbGliL3BhZ2VzL3Byb2R1Y3QtbWFuYWdlL3Byb2R1Y3QtbWFuYWdlLW9wdGlvbnMvcHJvZHVjdC1tYW5hZ2Utb3B0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDbEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDM0csT0FBTyxFQUNMLGtCQUFrQixFQUNsQix1QkFBdUIsRUFDdkIsYUFBYSxFQUNiLDJCQUEyQixFQUMzQixjQUFjLEVBQ2QsZ0JBQWdCLEdBQ2pCLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLCtCQUErQixFQUFFLGdDQUFnQyxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7QUFxQnhHLE1BQU0sT0FBTyw2QkFBOEIsU0FBUSxhQUFhO0lBbkJo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QUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUN0RSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQzlCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNwQyxDQUFDO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBcEVVLDZCQUE2QjtrR0FBN0IsNkJBQTZCLGtIQ3JDMUMscTFCQXlCQSwwRERISSw2QkFBNkIsNEVBQzdCLGdCQUFnQiwrSEFDaEIsZUFBZSwyTkFDZixrQkFBa0IsOEJBQ2xCLG1CQUFtQiw4QkFDbkIsdUJBQXVCLG1MQUN2QixhQUFhLCtCQUdiLGdDQUFnQyx5SUFDaEMsK0JBQStCOzsyRkFLdEIsNkJBQTZCO2tCQW5CekMsU0FBUzsrQkFDRSxpQ0FBaUMsY0FDL0IsSUFBSSxXQUNQO3dCQUNQLDZCQUE2Qjt3QkFDN0IsZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLGtCQUFrQjt3QkFDbEIsbUJBQW1CO3dCQUNuQix1QkFBdUI7d0JBQ3ZCLGFBQWE7d0JBQ2Isa0JBQWtCO3dCQUNsQixjQUFjO3dCQUNkLGdDQUFnQzt3QkFDaEMsK0JBQStCO3FCQUNoQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBPbkluaXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUHJvZHVjdE1hbmFnZUNvbnRlbnRDb21wb25lbnQgfSBmcm9tICcuLi9wcm9kdWN0LW1hbmFnZS1jb250ZW50L3Byb2R1Y3QtbWFuYWdlLWNvbnRlbnQuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIEFjY29yZGlvbkNvbXBvbmVudCxcbiAgQW5ndWxhckNvbXBvbmVudHNNb2R1bGUsXG4gIEJhc2VDb21wb25lbnQsXG4gIENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCxcbiAgUGFuZWxDb21wb25lbnQsXG4gIFRvb2xiYXJDb21wb25lbnQsXG59IGZyb20gJ0Byb2xhdGVjaC9hbmd1bGFyLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgUHJvZHVjdFNlcnZpY2UgfSBmcm9tICdAcm9sYXRlY2gvYW5ndWxhci1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBQcm9kdWN0T3B0aW9uIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBbmd1bGFyQ29tbW9uTW9kdWxlIH0gZnJvbSAnQHJvbGF0ZWNoL2FuZ3VsYXItY29tbW9uJztcbmltcG9ydCB7IFByb2R1Y3RNYW5hZ2VPcHRpb25BZGRDb21wb25lbnQsIFByb2R1Y3RNYW5hZ2VPcHRpb25JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JvbGF0ZWNoLXByb2R1Y3QtbWFuYWdlLW9wdGlvbnMnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgUHJvZHVjdE1hbmFnZUNvbnRlbnRDb21wb25lbnQsXG4gICAgVG9vbGJhckNvbXBvbmVudCxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgIEFuZ3VsYXJDb21tb25Nb2R1bGUsXG4gICAgQW5ndWxhckNvbXBvbmVudHNNb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBBY2NvcmRpb25Db21wb25lbnQsXG4gICAgUGFuZWxDb21wb25lbnQsXG4gICAgUHJvZHVjdE1hbmFnZU9wdGlvbkl0ZW1Db21wb25lbnQsXG4gICAgUHJvZHVjdE1hbmFnZU9wdGlvbkFkZENvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb2R1Y3QtbWFuYWdlLW9wdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vcHJvZHVjdC1tYW5hZ2Utb3B0aW9ucy5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIFByb2R1Y3RNYW5hZ2VPcHRpb25zQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByb2R1Y3RTZXJ2aWNlID0gaW5qZWN0KFByb2R1Y3RTZXJ2aWNlKTtcbiAgb3B0aW9uczogUHJvZHVjdE9wdGlvbltdID0gW107XG5cbiAgYWRkID0gZmFsc2U7XG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaWQgPSB0aGlzLnJvdXRlLnBhcmVudD8uc25hcHNob3QucGFyYW1NYXAuZ2V0KCdpZCcpIGFzIHN0cmluZztcbiAgICB0aGlzLmZpbmQoKTtcbiAgfVxuICBmaW5kKCkge1xuICAgIHRoaXMucHJvZHVjdFNlcnZpY2UuZmluZE9wdGlvbnModGhpcy5pZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gcmVzLmRhdGEgfHwgW107XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIHNhdmVPcHRpb24ob3B0aW9uOiBQcm9kdWN0T3B0aW9uKSB7XG4gICAgdGhpcy5wcm9kdWN0U2VydmljZS5hZGRPcHRpb24odGhpcy5pZCwgb3B0aW9uKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICB0aGlzLm9wdGlvbnMucHVzaChyZXMuZGF0YSk7XG4gICAgICAgIHRoaXMuYWRkID0gZmFsc2U7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIG9uVXBkYXRlT3B0aW9uKG9wdGlvbjogUHJvZHVjdE9wdGlvbikge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICB0aXRsZTogJ+e8lui+kemAiemhuScsXG4gICAgICBjYW5jZWxUZXh0OiAn5Y+W5raIJyxcbiAgICAgIGNvbmZpcm1UZXh0OiAn56Gu6K6kJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgb3B0aW9uOiBvcHRpb24sXG4gICAgICAgIGFjdGlvbjogZmFsc2UsXG4gICAgICB9LFxuICAgICAgY29tcG9uZW50OiBQcm9kdWN0TWFuYWdlT3B0aW9uQWRkQ29tcG9uZW50LFxuICAgIH07XG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4ob3B0aW9ucyk7XG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm1lZCgpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICB0aGlzLnByb2R1Y3RTZXJ2aWNlLnVwZGF0ZU9wdGlvbihvcHRpb24uaWQsIHJlcykuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICAgICAgb3B0aW9uLnZhbHVlcyA9IHJlcy5kYXRhLnZhbHVlcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgb25EZWxldGVPcHRpb24ob3B0aW9uOiBQcm9kdWN0T3B0aW9uKSB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtYXRpb25EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnNDAwcHgnLFxuICAgICAgZGF0YToge1xuICAgICAgICB0aXRsZTogJ+WIoOmZpOmAiemhuScsXG4gICAgICAgIG1lc3NhZ2U6IGDnoa7lrprliKDpmaQgJHtvcHRpb24ubmFtZX0g5ZCXP2AsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZS5kZWxldGVPcHRpb24ob3B0aW9uLmlkKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5vcHRpb25zLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gb3B0aW9uLmlkKTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy5zbmFja0JhclNlcnZpY2Uub3Blbign5Yig6Zmk5oiQ5YqfJyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxyb2xhdGVjaC1wcm9kdWN0LW1hbmFnZS1jb250ZW50PlxuICA8cm9sYXRlY2gtdG9vbGJhciB0aXRsZT1cIumAiemhuVwiIGNsYXNzPVwiaGlkZGVuIG1kOmJsb2NrXCIgZGl2aWRlcj4gPC9yb2xhdGVjaC10b29sYmFyPlxuICA8ZGl2PlxuICAgIEBmb3IgKGl0ZW0gb2Ygb3B0aW9uczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICA8cm9sYXRlY2gtcHJvZHVjdC1tYW5hZ2Utb3B0aW9uLWl0ZW1cbiAgICAgICAgW29wdGlvbl09XCJpdGVtXCJcbiAgICAgICAgKGRlbGV0ZSk9XCJvbkRlbGV0ZU9wdGlvbigkZXZlbnQpXCJcbiAgICAgICAgKGVkaXQpPVwib25VcGRhdGVPcHRpb24oJGV2ZW50KVwiXG4gICAgICA+PC9yb2xhdGVjaC1wcm9kdWN0LW1hbmFnZS1vcHRpb24taXRlbT5cbiAgICB9XG4gICAgPGRpdiBjbGFzcz1cIm10LTNcIj5cbiAgICAgIEBpZiAoYWRkKSB7XG4gICAgICAgIDxyb2xhdGVjaC1wcm9kdWN0LW1hbmFnZS1vcHRpb24tYWRkXG4gICAgICAgICAgKHNhdmUpPVwic2F2ZU9wdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAoY2FuY2VsKT1cImFkZCA9IGZhbHNlXCJcbiAgICAgICAgPjwvcm9sYXRlY2gtcHJvZHVjdC1tYW5hZ2Utb3B0aW9uLWFkZD5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiAoY2xpY2spPVwiYWRkID0gdHJ1ZVwiPlxuICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICAgICAgICAgIDxzcGFuPuWinuWKoDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9yb2xhdGVjaC1wcm9kdWN0LW1hbmFnZS1jb250ZW50PlxuIl19
@@ -2,11 +2,11 @@ import { Component } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import * as i0 from "@angular/core";
4
4
  export class ProductManagePricingComponent {
5
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ProductManagePricingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: ProductManagePricingComponent, isStandalone: true, selector: "lib-product-manage-pricing", ngImport: i0, template: "<p>product-manage-pricing works!</p>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
5
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductManagePricingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: ProductManagePricingComponent, isStandalone: true, selector: "rolatech-product-manage-pricing", ngImport: i0, template: "<p>product-manage-pricing works!</p>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
7
7
  }
8
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ProductManagePricingComponent, decorators: [{
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductManagePricingComponent, decorators: [{
9
9
  type: Component,
10
- args: [{ selector: 'lib-product-manage-pricing', standalone: true, imports: [CommonModule], template: "<p>product-manage-pricing works!</p>\n" }]
10
+ args: [{ selector: 'rolatech-product-manage-pricing', standalone: true, imports: [CommonModule], template: "<p>product-manage-pricing works!</p>\n" }]
11
11
  }] });
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1tYW5hZ2UtcHJpY2luZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItcHJvZHVjdC9zcmMvbGliL3BhZ2VzL3Byb2R1Y3QtbWFuYWdlL3Byb2R1Y3QtbWFuYWdlLXByaWNpbmcvcHJvZHVjdC1tYW5hZ2UtcHJpY2luZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItcHJvZHVjdC9zcmMvbGliL3BhZ2VzL3Byb2R1Y3QtbWFuYWdlL3Byb2R1Y3QtbWFuYWdlLXByaWNpbmcvcHJvZHVjdC1tYW5hZ2UtcHJpY2luZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFTL0MsTUFBTSxPQUFPLDZCQUE2Qjs4R0FBN0IsNkJBQTZCO2tHQUE3Qiw2QkFBNkIsc0ZDVjFDLHdDQUNBLHlEREtZLFlBQVk7OzJGQUlYLDZCQUE2QjtrQkFQekMsU0FBUzsrQkFDRSw0QkFBNEIsY0FDMUIsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItcHJvZHVjdC1tYW5hZ2UtcHJpY2luZycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJvZHVjdC1tYW5hZ2UtcHJpY2luZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9wcm9kdWN0LW1hbmFnZS1wcmljaW5nLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgUHJvZHVjdE1hbmFnZVByaWNpbmdDb21wb25lbnQge31cbiIsIjxwPnByb2R1Y3QtbWFuYWdlLXByaWNpbmcgd29ya3MhPC9wPlxuIl19
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1tYW5hZ2UtcHJpY2luZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItcHJvZHVjdC9zcmMvbGliL3BhZ2VzL3Byb2R1Y3QtbWFuYWdlL3Byb2R1Y3QtbWFuYWdlLXByaWNpbmcvcHJvZHVjdC1tYW5hZ2UtcHJpY2luZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItcHJvZHVjdC9zcmMvbGliL3BhZ2VzL3Byb2R1Y3QtbWFuYWdlL3Byb2R1Y3QtbWFuYWdlLXByaWNpbmcvcHJvZHVjdC1tYW5hZ2UtcHJpY2luZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFTL0MsTUFBTSxPQUFPLDZCQUE2Qjs4R0FBN0IsNkJBQTZCO2tHQUE3Qiw2QkFBNkIsMkZDVjFDLHdDQUNBLHlEREtZLFlBQVk7OzJGQUlYLDZCQUE2QjtrQkFQekMsU0FBUzsrQkFDRSxpQ0FBaUMsY0FDL0IsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyb2xhdGVjaC1wcm9kdWN0LW1hbmFnZS1wcmljaW5nJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9kdWN0LW1hbmFnZS1wcmljaW5nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3Byb2R1Y3QtbWFuYWdlLXByaWNpbmcuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9kdWN0TWFuYWdlUHJpY2luZ0NvbXBvbmVudCB7fVxuIiwiPHA+cHJvZHVjdC1tYW5hZ2UtcHJpY2luZyB3b3JrcyE8L3A+XG4iXX0=
@@ -0,0 +1,14 @@
1
+ import { Component } from '@angular/core';
2
+ import { AngularCommonModule } from '@rolatech/angular-common';
3
+ import { AngularComponentsModule, ToolbarComponent } from '@rolatech/angular-components';
4
+ import { ProductManageContentComponent } from '../product-manage-content/product-manage-content.component';
5
+ import * as i0 from "@angular/core";
6
+ export class ProductManageScheduleComponent {
7
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductManageScheduleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: ProductManageScheduleComponent, isStandalone: true, selector: "rolatech-product-manage-schedule", ngImport: i0, template: "<rolatech-product-manage-content>\n <rolatech-toolbar title=\"\u53D1\u5E03\u8BBE\u7F6E\" class=\"hidden md:block\" divider> </rolatech-toolbar>\n <div></div>\n</rolatech-product-manage-content>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: AngularCommonModule }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }, { kind: "component", type: ProductManageContentComponent, selector: "rolatech-product-manage-content" }] }); }
9
+ }
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductManageScheduleComponent, decorators: [{
11
+ type: Component,
12
+ args: [{ selector: 'rolatech-product-manage-schedule', standalone: true, imports: [AngularCommonModule, AngularComponentsModule, ToolbarComponent, ProductManageContentComponent], template: "<rolatech-product-manage-content>\n <rolatech-toolbar title=\"\u53D1\u5E03\u8BBE\u7F6E\" class=\"hidden md:block\" divider> </rolatech-toolbar>\n <div></div>\n</rolatech-product-manage-content>\n" }]
13
+ }] });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1tYW5hZ2Utc2NoZWR1bGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXByb2R1Y3Qvc3JjL2xpYi9wYWdlcy9wcm9kdWN0LW1hbmFnZS9wcm9kdWN0LW1hbmFnZS1zY2hlZHVsZS9wcm9kdWN0LW1hbmFnZS1zY2hlZHVsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItcHJvZHVjdC9zcmMvbGliL3BhZ2VzL3Byb2R1Y3QtbWFuYWdlL3Byb2R1Y3QtbWFuYWdlLXNjaGVkdWxlL3Byb2R1Y3QtbWFuYWdlLXNjaGVkdWxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDekYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sNERBQTRELENBQUM7O0FBUzNHLE1BQU0sT0FBTyw4QkFBOEI7OEdBQTlCLDhCQUE4QjtrR0FBOUIsOEJBQThCLDRGQ1ozQyx1TUFJQSx5RERJWSxtQkFBbUIsOEJBQUUsdUJBQXVCLCtCQUFFLGdCQUFnQixnSUFBRSw2QkFBNkI7OzJGQUk1Riw4QkFBOEI7a0JBUDFDLFNBQVM7K0JBQ0Usa0NBQWtDLGNBQ2hDLElBQUksV0FDUCxDQUFDLG1CQUFtQixFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLDZCQUE2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbmd1bGFyQ29tbW9uTW9kdWxlIH0gZnJvbSAnQHJvbGF0ZWNoL2FuZ3VsYXItY29tbW9uJztcbmltcG9ydCB7IEFuZ3VsYXJDb21wb25lbnRzTW9kdWxlLCBUb29sYmFyQ29tcG9uZW50IH0gZnJvbSAnQHJvbGF0ZWNoL2FuZ3VsYXItY29tcG9uZW50cyc7XG5pbXBvcnQgeyBQcm9kdWN0TWFuYWdlQ29udGVudENvbXBvbmVudCB9IGZyb20gJy4uL3Byb2R1Y3QtbWFuYWdlLWNvbnRlbnQvcHJvZHVjdC1tYW5hZ2UtY29udGVudC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyb2xhdGVjaC1wcm9kdWN0LW1hbmFnZS1zY2hlZHVsZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtBbmd1bGFyQ29tbW9uTW9kdWxlLCBBbmd1bGFyQ29tcG9uZW50c01vZHVsZSwgVG9vbGJhckNvbXBvbmVudCwgUHJvZHVjdE1hbmFnZUNvbnRlbnRDb21wb25lbnRdLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJvZHVjdC1tYW5hZ2Utc2NoZWR1bGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vcHJvZHVjdC1tYW5hZ2Utc2NoZWR1bGUuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9kdWN0TWFuYWdlU2NoZWR1bGVDb21wb25lbnQge31cbiIsIjxyb2xhdGVjaC1wcm9kdWN0LW1hbmFnZS1jb250ZW50PlxuICA8cm9sYXRlY2gtdG9vbGJhciB0aXRsZT1cIuWPkeW4g+iuvue9rlwiIGNsYXNzPVwiaGlkZGVuIG1kOmJsb2NrXCIgZGl2aWRlcj4gPC9yb2xhdGVjaC10b29sYmFyPlxuICA8ZGl2PjwvZGl2PlxuPC9yb2xhdGVjaC1wcm9kdWN0LW1hbmFnZS1jb250ZW50PlxuIl19
@@ -0,0 +1,170 @@
1
+ import { Component, inject } from '@angular/core';
2
+ import { MatButtonModule } from '@angular/material/button';
3
+ import { MatDialog } from '@angular/material/dialog';
4
+ import { MatIconModule } from '@angular/material/icon';
5
+ import { MatSnackBar } from '@angular/material/snack-bar';
6
+ import { ActivatedRoute } from '@angular/router';
7
+ import { ToolbarComponent, ConfirmationDialogComponent } from '@rolatech/angular-components';
8
+ import { remove } from 'lodash';
9
+ import { ProductStatus, ProductType } from '../../../interfaces';
10
+ import { ProductService } from '@rolatech/angular-services';
11
+ import { ProductManageContentComponent } from '../product-manage-content/product-manage-content.component';
12
+ import { ProductManageSectionItemComponent } from '../../../components';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "@angular/material/button";
15
+ import * as i2 from "@angular/material/icon";
16
+ export class ProductManageSectionsComponent {
17
+ constructor() {
18
+ this.route = inject(ActivatedRoute);
19
+ this.productService = inject(ProductService);
20
+ this.dialog = inject(MatDialog);
21
+ this.snackBar = inject(MatSnackBar);
22
+ this.isLoading = false;
23
+ this.isUploading = false;
24
+ this.sections = [];
25
+ this.status = ProductStatus;
26
+ this.productType = ProductType;
27
+ this.id = this.route.parent?.snapshot.paramMap.get('id');
28
+ }
29
+ ngOnInit() {
30
+ this.find();
31
+ }
32
+ find() {
33
+ this.productService.findSections(this.id).subscribe({
34
+ next: (res) => {
35
+ if (res.data) {
36
+ this.sections = res.data;
37
+ }
38
+ },
39
+ });
40
+ }
41
+ addSection() {
42
+ if (!this.sections) {
43
+ this.sections = [];
44
+ }
45
+ this.productService
46
+ .addSection(this.id, {
47
+ title: '',
48
+ description: '',
49
+ content: '',
50
+ media: [],
51
+ })
52
+ .subscribe({
53
+ next: (res) => {
54
+ const section = res.data;
55
+ this.sections.push({
56
+ id: section.id,
57
+ title: '',
58
+ description: '',
59
+ media: [],
60
+ });
61
+ },
62
+ error: (e) => {
63
+ this.snackBar.open(e.message);
64
+ },
65
+ });
66
+ }
67
+ onUploadSectionMedia(event) {
68
+ const section = event.section;
69
+ const sectionId = section.id;
70
+ const file = event.data.target.files[0];
71
+ if (file) {
72
+ const reader = new FileReader();
73
+ reader.readAsDataURL(file);
74
+ reader.onload = () => {
75
+ if (!section.media) {
76
+ section.media = [];
77
+ }
78
+ section.media.push({
79
+ url: reader.result,
80
+ alt: 'upload image',
81
+ });
82
+ section.isUploading = true;
83
+ const formData = new FormData();
84
+ formData.append('file', file);
85
+ this.productService.uploadSectionMedia(sectionId, formData).subscribe({
86
+ next: (res) => {
87
+ this.isUploading = false;
88
+ section.isUploading = false;
89
+ delete res.data.productSection;
90
+ section.media[section.media.length - 1].id = res.data.id;
91
+ },
92
+ error: (e) => {
93
+ this.isUploading = false;
94
+ this.snackBar.open('上传失败: ' + e.message);
95
+ },
96
+ });
97
+ };
98
+ reader.onerror = (error) => {
99
+ this.isUploading = false;
100
+ };
101
+ }
102
+ }
103
+ onDeleteSectionMedia(event) {
104
+ const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
105
+ width: '400px',
106
+ data: {
107
+ title: '删除图片',
108
+ message: `确定删除吗?`,
109
+ },
110
+ });
111
+ dialogRef.afterClosed().subscribe((result) => {
112
+ if (result) {
113
+ const section = event.section;
114
+ const mediaId = event.media.id;
115
+ remove(section.media, {
116
+ id: mediaId,
117
+ });
118
+ this.productService.deleteSectionMedia(section.id, mediaId).subscribe({
119
+ next: (res) => {
120
+ // remove(section.media, {
121
+ // id: mediaId,
122
+ // });
123
+ },
124
+ });
125
+ }
126
+ });
127
+ }
128
+ onSectionSave(section) {
129
+ delete section.isUploading;
130
+ this.productService.updateSection(section.id, section).subscribe({
131
+ next: (res) => {
132
+ this.snackBar.open('保存成功');
133
+ },
134
+ error: (e) => {
135
+ this.snackBar.open(e.message);
136
+ },
137
+ });
138
+ }
139
+ onSectionDelete(section) {
140
+ const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
141
+ width: '400px',
142
+ data: {
143
+ title: '删除详情',
144
+ message: '确定删除此详情吗?',
145
+ },
146
+ });
147
+ dialogRef.afterClosed().subscribe((result) => {
148
+ if (result) {
149
+ this.productService.deleteSection(section.id).subscribe({
150
+ next: (res) => {
151
+ this.snackBar.open(res.data);
152
+ remove(this.sections, {
153
+ id: section.id,
154
+ });
155
+ },
156
+ error: (e) => {
157
+ this.snackBar.open(e.message);
158
+ },
159
+ });
160
+ }
161
+ });
162
+ }
163
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductManageSectionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
164
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.4", type: ProductManageSectionsComponent, isStandalone: true, selector: "rolatech-product-manage-sections", ngImport: i0, template: "<rolatech-product-manage-content>\n <rolatech-toolbar title=\"\u8BE6\u60C5\" class=\"hidden md:block\" divider> </rolatech-toolbar>\n <div>\n <div>\n @for (section of sections; track section) {\n <rolatech-product-manage-section-item\n [section]=\"section\"\n (upload)=\"onUploadSectionMedia($event)\"\n (deleteMedia)=\"onDeleteSectionMedia($event)\"\n (save)=\"onSectionSave($event)\"\n (delete)=\"onSectionDelete($event)\"\n [actions]=\"true\"\n ></rolatech-product-manage-section-item>\n }\n </div>\n <button mat-stroked-button (click)=\"addSection()\" class=\"mt-3\">\n <mat-icon>add</mat-icon>\n <span>\u6DFB\u52A0\u8BE6\u60C5</span>\n </button>\n </div>\n</rolatech-product-manage-content>\n", styles: [""], dependencies: [{ kind: "component", type: ProductManageSectionItemComponent, selector: "rolatech-product-manage-section-item", inputs: ["isUploading", "section", "actions", "selectMedia"], outputs: ["upload", "delete", "save", "deleteMedia"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }, { kind: "component", type: ProductManageContentComponent, selector: "rolatech-product-manage-content" }] }); }
165
+ }
166
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductManageSectionsComponent, decorators: [{
167
+ type: Component,
168
+ args: [{ selector: 'rolatech-product-manage-sections', standalone: true, imports: [ProductManageSectionItemComponent, MatButtonModule, MatIconModule, ToolbarComponent, ProductManageContentComponent], template: "<rolatech-product-manage-content>\n <rolatech-toolbar title=\"\u8BE6\u60C5\" class=\"hidden md:block\" divider> </rolatech-toolbar>\n <div>\n <div>\n @for (section of sections; track section) {\n <rolatech-product-manage-section-item\n [section]=\"section\"\n (upload)=\"onUploadSectionMedia($event)\"\n (deleteMedia)=\"onDeleteSectionMedia($event)\"\n (save)=\"onSectionSave($event)\"\n (delete)=\"onSectionDelete($event)\"\n [actions]=\"true\"\n ></rolatech-product-manage-section-item>\n }\n </div>\n <button mat-stroked-button (click)=\"addSection()\" class=\"mt-3\">\n <mat-icon>add</mat-icon>\n <span>\u6DFB\u52A0\u8BE6\u60C5</span>\n </button>\n </div>\n</rolatech-product-manage-content>\n" }]
169
+ }], ctorParameters: () => [] });
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1tYW5hZ2Utc2VjdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXByb2R1Y3Qvc3JjL2xpYi9wYWdlcy9wcm9kdWN0LW1hbmFnZS9wcm9kdWN0LW1hbmFnZS1zZWN0aW9ucy9wcm9kdWN0LW1hbmFnZS1zZWN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItcHJvZHVjdC9zcmMvbGliL3BhZ2VzL3Byb2R1Y3QtbWFuYWdlL3Byb2R1Y3QtbWFuYWdlLXNlY3Rpb25zL3Byb2R1Y3QtbWFuYWdlLXNlY3Rpb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLDJCQUEyQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0YsT0FBTyxFQUFhLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMzQyxPQUFPLEVBQWtCLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDM0csT0FB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ZSwyTkFBRSxhQUFhLG9MQUFFLGdCQUFnQixnSUFBRSw2QkFBNkI7OzJGQUlqSCw4QkFBOEI7a0JBUDFDLFNBQVM7K0JBQ0Usa0NBQWtDLGNBQ2hDLElBQUksV0FDUCxDQUFDLGlDQUFpQyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsNkJBQTZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRvb2xiYXJDb21wb25lbnQsIENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJ0Byb2xhdGVjaC9hbmd1bGFyLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgZmluZEluZGV4LCByZW1vdmUgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgUHJvZHVjdFNlY3Rpb24sIFByb2R1Y3RTdGF0dXMsIFByb2R1Y3RUeXBlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBQcm9kdWN0U2VydmljZSB9IGZyb20gJ0Byb2xhdGVjaC9hbmd1bGFyLXNlcnZpY2VzJztcbmltcG9ydCB7IFByb2R1Y3RNYW5hZ2VDb250ZW50Q29tcG9uZW50IH0gZnJvbSAnLi4vcHJvZHVjdC1tYW5hZ2UtY29udGVudC9wcm9kdWN0LW1hbmFnZS1jb250ZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcm9kdWN0TWFuYWdlU2VjdGlvbkl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncm9sYXRlY2gtcHJvZHVjdC1tYW5hZ2Utc2VjdGlvbnMnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbUHJvZHVjdE1hbmFnZVNlY3Rpb25JdGVtQ29tcG9uZW50LCBNYXRCdXR0b25Nb2R1bGUsIE1hdEljb25Nb2R1bGUsIFRvb2xiYXJDb21wb25lbnQsIFByb2R1Y3RNYW5hZ2VDb250ZW50Q29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb2R1Y3QtbWFuYWdlLXNlY3Rpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3Byb2R1Y3QtbWFuYWdlLXNlY3Rpb25zLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgUHJvZHVjdE1hbmFnZVNlY3Rpb25zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcm9kdWN0U2VydmljZSA9IGluamVjdChQcm9kdWN0U2VydmljZSk7XG4gIGRpYWxvZyA9IGluamVjdChNYXREaWFsb2cpO1xuICBzbmFja0JhciA9IGluamVjdChNYXRTbmFja0Jhcik7XG5cbiAgaWQ6IHN0cmluZztcbiAgaXNMb2FkaW5nID0gZmFsc2U7XG4gIGlzVXBsb2FkaW5nID0gZmFsc2U7XG4gIHNlY3Rpb25zOiBQcm9kdWN0U2VjdGlvbltdID0gW107XG4gIHN0YXR1cyA9IFByb2R1Y3RTdGF0dXM7XG4gIHByb2R1Y3RUeXBlOiBhbnkgPSBQcm9kdWN0VHlwZTtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pZCA9IHRoaXMucm91dGUucGFyZW50Py5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ2lkJykgYXMgc3RyaW5nO1xuICB9XG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZmluZCgpO1xuICB9XG4gIGZpbmQoKSB7XG4gICAgdGhpcy5wcm9kdWN0U2VydmljZS5maW5kU2VjdGlvbnModGhpcy5pZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgaWYgKHJlcy5kYXRhKSB7XG4gICAgICAgICAgdGhpcy5zZWN0aW9ucyA9IHJlcy5kYXRhO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIGFkZFNlY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLnNlY3Rpb25zKSB7XG4gICAgICB0aGlzLnNlY3Rpb25zID0gW107XG4gICAgfVxuICAgIHRoaXMucHJvZHVjdFNlcnZpY2VcbiAgICAgIC5hZGRTZWN0aW9uKHRoaXMuaWQsIHtcbiAgICAgICAgdGl0bGU6ICcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICAgIGNvbnRlbnQ6ICcnLFxuICAgICAgICBtZWRpYTogW10sXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNlY3Rpb24gPSByZXMuZGF0YTtcbiAgICAgICAgICB0aGlzLnNlY3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgaWQ6IHNlY3Rpb24uaWQsXG4gICAgICAgICAgICB0aXRsZTogJycsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICAgICAgICBtZWRpYTogW10sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZSkgPT4ge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlLm1lc3NhZ2UpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cbiAgb25VcGxvYWRTZWN0aW9uTWVkaWEoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHNlY3Rpb24gPSBldmVudC5zZWN0aW9uO1xuICAgIGNvbnN0IHNlY3Rpb25JZCA9IHNlY3Rpb24uaWQ7XG4gICAgY29uc3QgZmlsZSA9IGV2ZW50LmRhdGEudGFyZ2V0LmZpbGVzWzBdO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXNlY3Rpb24ubWVkaWEpIHtcbiAgICAgICAgICBzZWN0aW9uLm1lZGlhID0gW107XG4gICAgICAgIH1cbiAgICAgICAgKHNlY3Rpb24ubWVkaWEgYXMgYW55KS5wdXNoKHtcbiAgICAgICAgICB1cmw6IHJlYWRlci5yZXN1bHQsXG4gICAgICAgICAgYWx0OiAndXBsb2FkIGltYWdlJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHNlY3Rpb24uaXNVcGxvYWRpbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcbiAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZS51cGxvYWRTZWN0aW9uTWVkaWEoc2VjdGlvbklkLCBmb3JtRGF0YSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNVcGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNlY3Rpb24uaXNVcGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGRlbGV0ZSByZXMuZGF0YS5wcm9kdWN0U2VjdGlvbjtcbiAgICAgICAgICAgIHNlY3Rpb24ubWVkaWFbc2VjdGlvbi5tZWRpYS5sZW5ndGggLSAxXS5pZCA9IHJlcy5kYXRhLmlkO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzVXBsb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ+S4iuS8oOWksei0pTogJyArIGUubWVzc2FnZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5pc1VwbG9hZGluZyA9IGZhbHNlO1xuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgb25EZWxldGVTZWN0aW9uTWVkaWEoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzQwMHB4JyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdGl0bGU6ICfliKDpmaTlm77niYcnLFxuICAgICAgICBtZXNzYWdlOiBg56Gu5a6a5Yig6Zmk5ZCXP2AsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgY29uc3Qgc2VjdGlvbiA9IGV2ZW50LnNlY3Rpb247XG4gICAgICAgIGNvbnN0IG1lZGlhSWQgPSBldmVudC5tZWRpYS5pZDtcbiAgICAgICAgcmVtb3ZlKHNlY3Rpb24ubWVkaWEsIHtcbiAgICAgICAgICBpZDogbWVkaWFJZCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucHJvZHVjdFNlcnZpY2UuZGVsZXRlU2VjdGlvbk1lZGlhKHNlY3Rpb24uaWQsIG1lZGlhSWQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyByZW1vdmUoc2VjdGlvbi5tZWRpYSwge1xuICAgICAgICAgICAgLy8gICBpZDogbWVkaWFJZCxcbiAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIG9uU2VjdGlvblNhdmUoc2VjdGlvbjogUHJvZHVjdFNlY3Rpb24pIHtcbiAgICBkZWxldGUgc2VjdGlvbi5pc1VwbG9hZGluZztcbiAgICB0aGlzLnByb2R1Y3RTZXJ2aWNlLnVwZGF0ZVNlY3Rpb24oc2VjdGlvbi5pZCwgc2VjdGlvbikuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ+S/neWtmOaIkOWKnycpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZSkgPT4ge1xuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oZS5tZXNzYWdlKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgb25TZWN0aW9uRGVsZXRlKHNlY3Rpb246IFByb2R1Y3RTZWN0aW9uKSB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtYXRpb25EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnNDAwcHgnLFxuICAgICAgZGF0YToge1xuICAgICAgICB0aXRsZTogJ+WIoOmZpOivpuaDhScsXG4gICAgICAgIG1lc3NhZ2U6ICfnoa7lrprliKDpmaTmraTor6bmg4XlkJc/JyxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZS5kZWxldGVTZWN0aW9uKHNlY3Rpb24uaWQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4ocmVzLmRhdGEpO1xuICAgICAgICAgICAgcmVtb3ZlKHRoaXMuc2VjdGlvbnMsIHtcbiAgICAgICAgICAgICAgaWQ6IHNlY3Rpb24uaWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKGUubWVzc2FnZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxyb2xhdGVjaC1wcm9kdWN0LW1hbmFnZS1jb250ZW50PlxuICA8cm9sYXRlY2gtdG9vbGJhciB0aXRsZT1cIuivpuaDhVwiIGNsYXNzPVwiaGlkZGVuIG1kOmJsb2NrXCIgZGl2aWRlcj4gPC9yb2xhdGVjaC10b29sYmFyPlxuICA8ZGl2PlxuICAgIDxkaXY+XG4gICAgICBAZm9yIChzZWN0aW9uIG9mIHNlY3Rpb25zOyB0cmFjayBzZWN0aW9uKSB7XG4gICAgICAgIDxyb2xhdGVjaC1wcm9kdWN0LW1hbmFnZS1zZWN0aW9uLWl0ZW1cbiAgICAgICAgICBbc2VjdGlvbl09XCJzZWN0aW9uXCJcbiAgICAgICAgICAodXBsb2FkKT1cIm9uVXBsb2FkU2VjdGlvbk1lZGlhKCRldmVudClcIlxuICAgICAgICAgIChkZWxldGVNZWRpYSk9XCJvbkRlbGV0ZVNlY3Rpb25NZWRpYSgkZXZlbnQpXCJcbiAgICAgICAgICAoc2F2ZSk9XCJvblNlY3Rpb25TYXZlKCRldmVudClcIlxuICAgICAgICAgIChkZWxldGUpPVwib25TZWN0aW9uRGVsZXRlKCRldmVudClcIlxuICAgICAgICAgIFthY3Rpb25zXT1cInRydWVcIlxuICAgICAgICA+PC9yb2xhdGVjaC1wcm9kdWN0LW1hbmFnZS1zZWN0aW9uLWl0ZW0+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cImFkZFNlY3Rpb24oKVwiIGNsYXNzPVwibXQtM1wiPlxuICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICA8c3Bhbj7mt7vliqDor6bmg4U8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9yb2xhdGVjaC1wcm9kdWN0LW1hbmFnZS1jb250ZW50PlxuIl19