@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.
- package/esm2022/index.mjs +5 -12
- package/esm2022/lib/components/index.mjs +12 -0
- package/esm2022/lib/components/product-action/product-action.component.mjs +25 -0
- package/esm2022/lib/components/product-info/product-info.component.mjs +17 -0
- package/esm2022/lib/components/product-item/product-item.component.mjs +17 -0
- package/esm2022/lib/components/product-manage-option-add/product-manage-option-add.component.mjs +68 -0
- package/esm2022/lib/components/product-manage-option-item/product-manage-option-item.component.mjs +49 -0
- package/esm2022/lib/components/product-manage-variant/product-manage-variant.component.mjs +115 -0
- package/esm2022/lib/components/product-mange-option-action/product-manage-option-action.component.mjs +22 -0
- package/esm2022/lib/components/product-mange-section-item/product-mange-section-item.component.mjs +89 -0
- package/esm2022/lib/components/product-media/product-media.component.mjs +34 -0
- package/esm2022/lib/components/product-option/product-option.component.mjs +23 -0
- package/esm2022/lib/components/product-owner-renderer/product-owner-renderer.component.mjs +20 -0
- package/esm2022/lib/components/product-pricing/product-pricing.component.mjs +31 -0
- package/esm2022/lib/components/product-section/product-section.component.mjs +26 -0
- package/esm2022/lib/interfaces/category.mjs +2 -0
- package/esm2022/lib/interfaces/index.mjs +2 -0
- package/esm2022/lib/interfaces/product.mjs +32 -0
- package/esm2022/lib/pages/product/product-category/product-category.component.mjs +70 -8
- package/esm2022/lib/pages/product/product-details/product-details.component.mjs +193 -0
- package/esm2022/lib/pages/product/product-details/selected.pipe.mjs +18 -0
- package/esm2022/lib/pages/product/product-index/product-index.component.mjs +39 -8
- package/esm2022/lib/pages/product/product-layout/product-layout.component.mjs +46 -8
- package/esm2022/lib/pages/product/product.routes.mjs +3 -3
- package/esm2022/lib/pages/product-manage/product-manage-content/product-manage-content.component.mjs +5 -5
- package/esm2022/lib/pages/product-manage/product-manage-create/product-manage-create.component.mjs +61 -0
- package/esm2022/lib/pages/product-manage/product-manage-index/product-manage-index.component.mjs +155 -0
- package/esm2022/lib/pages/product-manage/product-manage-info/product-manage-info.component.mjs +98 -8
- package/esm2022/lib/pages/product-manage/product-manage-inventory/product-manage-inventory.component.mjs +14 -0
- package/esm2022/lib/pages/product-manage/product-manage-item/product-manage-item.component.mjs +27 -0
- package/esm2022/lib/pages/product-manage/product-manage-item-header/product-manage-item-header.component.mjs +12 -0
- package/esm2022/lib/pages/product-manage/product-manage-layout/product-manage-layout.component.mjs +51 -8
- package/esm2022/lib/pages/product-manage/product-manage-media/product-manage-media.component.mjs +133 -8
- package/esm2022/lib/pages/product-manage/product-manage-options/product-manage-options.component.mjs +102 -0
- package/esm2022/lib/pages/product-manage/product-manage-pricing/product-manage-pricing.component.mjs +5 -5
- package/esm2022/lib/pages/product-manage/product-manage-schedule/product-manage-schedule.component.mjs +14 -0
- package/esm2022/lib/pages/product-manage/product-manage-sections/product-manage-sections.component.mjs +170 -0
- package/esm2022/lib/pages/product-manage/product-manage-variants/product-manage-variants.component.mjs +133 -0
- package/esm2022/lib/pages/product-manage/product-manage.routes.mjs +34 -4
- package/esm2022/lib/services/index.mjs +4 -0
- package/esm2022/lib/services/product-category.service.mjs +38 -0
- package/esm2022/provider.mjs +13 -0
- package/fesm2022/rolatech-angular-product-product-index.component-C_cbg95R.mjs +70 -0
- package/fesm2022/rolatech-angular-product-product-index.component-C_cbg95R.mjs.map +1 -0
- package/fesm2022/rolatech-angular-product.mjs +1697 -76
- package/fesm2022/rolatech-angular-product.mjs.map +1 -1
- package/index.d.ts +4 -11
- package/lib/components/index.d.ts +11 -0
- package/lib/components/product-action/product-action.component.d.ts +11 -0
- package/lib/components/product-info/product-info.component.d.ts +7 -0
- package/lib/components/product-item/product-item.component.d.ts +7 -0
- package/lib/components/product-manage-option-add/product-manage-option-add.component.d.ts +20 -0
- package/lib/components/product-manage-option-item/product-manage-option-item.component.d.ts +14 -0
- package/lib/components/product-manage-variant/product-manage-variant.component.d.ts +18 -0
- package/lib/components/product-mange-option-action/product-manage-option-action.component.d.ts +10 -0
- package/lib/components/product-mange-section-item/product-mange-section-item.component.d.ts +33 -0
- package/lib/components/product-media/product-media.component.d.ts +12 -0
- package/lib/components/product-option/product-option.component.d.ts +14 -0
- package/lib/components/product-owner-renderer/product-owner-renderer.component.d.ts +8 -0
- package/lib/components/product-pricing/product-pricing.component.d.ts +12 -0
- package/lib/components/product-section/product-section.component.d.ts +16 -0
- package/lib/interfaces/category.d.ts +16 -0
- package/lib/interfaces/index.d.ts +2 -0
- package/lib/interfaces/product.d.ts +91 -0
- package/lib/pages/product/product-category/product-category.component.d.ts +19 -2
- package/lib/pages/product/product-details/product-details.component.d.ts +39 -0
- package/lib/pages/product/product-details/selected.pipe.d.ts +8 -0
- package/lib/pages/product/product-index/product-index.component.d.ts +12 -2
- package/lib/pages/product/product-layout/product-layout.component.d.ts +15 -2
- package/lib/pages/product-manage/product-manage-content/product-manage-content.component.d.ts +1 -1
- package/lib/pages/product-manage/product-manage-create/product-manage-create.component.d.ts +11 -0
- package/lib/pages/product-manage/product-manage-index/product-manage-index.component.d.ts +38 -0
- package/lib/pages/product-manage/product-manage-info/product-manage-info.component.d.ts +26 -2
- package/lib/pages/product-manage/product-manage-inventory/product-manage-inventory.component.d.ts +5 -0
- package/lib/pages/product-manage/product-manage-item/product-manage-item.component.d.ts +12 -0
- package/lib/pages/product-manage/product-manage-item-header/product-manage-item-header.component.d.ts +5 -0
- package/lib/pages/product-manage/product-manage-layout/product-manage-layout.component.d.ts +22 -2
- package/lib/pages/product-manage/product-manage-media/product-manage-media.component.d.ts +26 -2
- package/lib/pages/product-manage/product-manage-options/product-manage-options.component.d.ts +17 -0
- package/lib/pages/product-manage/product-manage-pricing/product-manage-pricing.component.d.ts +1 -1
- package/lib/pages/product-manage/product-manage-schedule/product-manage-schedule.component.d.ts +5 -0
- package/lib/pages/product-manage/product-manage-sections/product-manage-sections.component.d.ts +29 -0
- package/lib/pages/product-manage/product-manage-variants/product-manage-variants.component.d.ts +27 -0
- package/lib/services/index.d.ts +3 -0
- package/lib/services/product-category.service.d.ts +12 -0
- package/package.json +1 -1
- package/provider.d.ts +2 -0
- package/themes/_default.scss +1 -1
- package/esm2022/lib/angular-product/angular-product.component.mjs +0 -12
- package/esm2022/lib/pages/product/product-detail/product-detail.component.mjs +0 -12
- package/esm2022/lib/pages/product-manage/product-manage-details/product-manage-details.component.mjs +0 -12
- package/lib/angular-product/angular-product.component.d.ts +0 -5
- package/lib/pages/product/product-detail/product-detail.component.d.ts +0 -5
- package/lib/pages/product-manage/product-manage-details/product-manage-details.component.d.ts +0 -5
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { ChangeDetectorRef, Component, inject, model, signal } from '@angular/core';
|
|
2
|
+
import { ProductManageContentComponent } from '../product-manage-content/product-manage-content.component';
|
|
3
|
+
import { AngularComponentsModule, BaseComponent, ImageComponent, SpinnerComponent, ThumbnailComponent, ToolbarComponent, } from '@rolatech/angular-components';
|
|
4
|
+
import { ProductService } from '@rolatech/angular-services';
|
|
5
|
+
import { MatIcon } from '@angular/material/icon';
|
|
6
|
+
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
7
|
+
import { AngularCommonModule } from '@rolatech/angular-common';
|
|
8
|
+
import { MatSnackBar } from '@angular/material/snack-bar';
|
|
9
|
+
import { ProductManageVariantComponent } from '../../../components/product-manage-variant/product-manage-variant.component';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "@angular/material/button";
|
|
12
|
+
import * as i2 from "@angular/material/slide-toggle";
|
|
13
|
+
export class ProductManageVariantsComponent extends BaseComponent {
|
|
14
|
+
constructor() {
|
|
15
|
+
super(...arguments);
|
|
16
|
+
this.productService = inject(ProductService);
|
|
17
|
+
this.changeDetectorRefs = inject(ChangeDetectorRef);
|
|
18
|
+
this.options = signal([]);
|
|
19
|
+
this.snackBar = inject(MatSnackBar);
|
|
20
|
+
this.productPrice = model();
|
|
21
|
+
this.variantPriceChecked = false;
|
|
22
|
+
this.loading = false;
|
|
23
|
+
}
|
|
24
|
+
ngOnInit() {
|
|
25
|
+
this.id = this.route.parent?.snapshot.paramMap.get('id');
|
|
26
|
+
this.getProduct();
|
|
27
|
+
}
|
|
28
|
+
onVariantSlideToggle(event) {
|
|
29
|
+
const newState = event.checked;
|
|
30
|
+
if (newState) {
|
|
31
|
+
this.productService.updateVariantPrice(this.id, true).subscribe({
|
|
32
|
+
next: (res) => {
|
|
33
|
+
this.variants = res.data;
|
|
34
|
+
this.variantPriceChecked = newState;
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
const options = {
|
|
40
|
+
title: '确认删除吗',
|
|
41
|
+
message: '删除这个章节吗?',
|
|
42
|
+
cancelText: '取消',
|
|
43
|
+
confirmText: '确认',
|
|
44
|
+
};
|
|
45
|
+
this.dialogService.open(options);
|
|
46
|
+
this.dialogService.confirmed().subscribe({
|
|
47
|
+
next: (res) => {
|
|
48
|
+
if (res) {
|
|
49
|
+
this.productService.updateVariantPrice(this.id, false).subscribe({
|
|
50
|
+
next: (res) => {
|
|
51
|
+
this.variantPriceChecked = false;
|
|
52
|
+
this.variants = res.data;
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
event.source.checked = !newState;
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
onInventorySlideToggle(e) {
|
|
64
|
+
if (e.checked) {
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
saveVariants() {
|
|
68
|
+
this.productService.updateVariants(this.id, this.variants).subscribe({
|
|
69
|
+
next: (res) => {
|
|
70
|
+
this.snackBarService.open('保存成功');
|
|
71
|
+
},
|
|
72
|
+
error: (error) => {
|
|
73
|
+
this.snackBarService.open(error.message);
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
onUpload(variant, data) {
|
|
78
|
+
this.productService.uploadVariantMedia(variant.id, data).subscribe({
|
|
79
|
+
next: (res) => {
|
|
80
|
+
variant.media[variant.media.length - 1] = {
|
|
81
|
+
id: res.data.id,
|
|
82
|
+
url: res.data.url + '!w200',
|
|
83
|
+
uploading: false,
|
|
84
|
+
};
|
|
85
|
+
},
|
|
86
|
+
error: (e) => {
|
|
87
|
+
this.snackBar.open('上传失败: ' + e.message);
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
findVariants() {
|
|
92
|
+
this.productService.findVariants(this.id).subscribe({
|
|
93
|
+
next: (res) => {
|
|
94
|
+
if (res.data) {
|
|
95
|
+
this.variantPriceChecked = true;
|
|
96
|
+
}
|
|
97
|
+
this.variants = res.data;
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
getProduct() {
|
|
102
|
+
this.loading = true;
|
|
103
|
+
this.productService.get(this.id).subscribe({
|
|
104
|
+
next: (res) => {
|
|
105
|
+
this.product = res.data;
|
|
106
|
+
this.variants = this.product.variants;
|
|
107
|
+
this.variantPriceChecked = this.variants ? this.variants.length > 0 : false;
|
|
108
|
+
this.options.set(res.data.options || []);
|
|
109
|
+
let price = (res.data.price / 100).toFixed(2);
|
|
110
|
+
this.productPrice.set(price);
|
|
111
|
+
this.loading = false;
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductManageVariantsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
116
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.4", type: ProductManageVariantsComponent, isStandalone: true, selector: "rolatech-product-manage-variants", inputs: { productPrice: { classPropertyName: "productPrice", publicName: "productPrice", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { productPrice: "productPriceChange" }, usesInheritance: true, ngImport: i0, template: "<rolatech-product-manage-content>\n <rolatech-toolbar title=\"\u4EF7\u683C\u7B56\u7565\" class=\"hidden md:block\" divider> </rolatech-toolbar>\n @if (loading) {\n <rolatech-spinner></rolatech-spinner>\n } @else {\n <div class=\"flex items-center\">\n <mat-slide-toggle\n #slide\n [checked]=\"variantPriceChecked\"\n (change)=\"onVariantSlideToggle($event)\"\n [disabled]=\"options().length <= 0\"\n ></mat-slide-toggle>\n <div>\u6839\u636E\u5546\u54C1\u9009\u9879\u8BBE\u7F6E\u4E0D\u540C\u7684\u4EF7\u683C\u548C\u5E93\u5B58</div>\n </div>\n <div class=\"flex items-center\">\n <mat-slide-toggle #inventorySlide (change)=\"onInventorySlideToggle($event)\"></mat-slide-toggle>\n <div>\u8DDF\u8E2A\u5E93\u5B58</div>\n </div>\n\n @if (slide.checked) {\n <div>\n <div class=\"header flex gap-3 h-14 items-center\">\n <div class=\"px-3\">\u540D\u79F0</div>\n <div class=\"flex-1\"></div>\n <div class=\"w-[160px]\">\u4EF7\u683C</div>\n <div class=\"w-[160px]\">\u72B6\u6001</div>\n @if (inventorySlide.checked) {\n <div class=\"w-[160px]\">\u5E93\u5B58</div>\n }\n\n <div class=\"block w-20 text-right\">\u5C55\u5F00/\u6298\u53E0</div>\n </div>\n @for (item of variants; track $index) {\n <rolatech-product-manage-variant [variant]=\"item\" (upload)=\"onUpload(item, $event)\"></rolatech-product-manage-variant>\n }\n </div>\n <div class=\"mt-3\">\n <button mat-button (click)=\"saveVariants()\">\u4FDD\u5B58</button>\n </div>\n }\n }\n</rolatech-product-manage-content>\n", styles: ["mat-slide-toggle{scale:.8}mat-form-field{width:72px}\n"], dependencies: [{ kind: "ngmodule", type: AngularCommonModule }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: i1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { 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: MatFormFieldModule }, { kind: "component", type: ProductManageVariantComponent, selector: "rolatech-product-manage-variant", inputs: ["variant"], outputs: ["variantChange", "upload"] }, { kind: "component", type: SpinnerComponent, selector: "rolatech-spinner", inputs: ["title"] }] }); }
|
|
117
|
+
}
|
|
118
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductManageVariantsComponent, decorators: [{
|
|
119
|
+
type: Component,
|
|
120
|
+
args: [{ selector: 'rolatech-product-manage-variants', standalone: true, imports: [
|
|
121
|
+
AngularCommonModule,
|
|
122
|
+
AngularComponentsModule,
|
|
123
|
+
ProductManageContentComponent,
|
|
124
|
+
ToolbarComponent,
|
|
125
|
+
MatIcon,
|
|
126
|
+
MatFormFieldModule,
|
|
127
|
+
ThumbnailComponent,
|
|
128
|
+
ImageComponent,
|
|
129
|
+
ProductManageVariantComponent,
|
|
130
|
+
SpinnerComponent,
|
|
131
|
+
], template: "<rolatech-product-manage-content>\n <rolatech-toolbar title=\"\u4EF7\u683C\u7B56\u7565\" class=\"hidden md:block\" divider> </rolatech-toolbar>\n @if (loading) {\n <rolatech-spinner></rolatech-spinner>\n } @else {\n <div class=\"flex items-center\">\n <mat-slide-toggle\n #slide\n [checked]=\"variantPriceChecked\"\n (change)=\"onVariantSlideToggle($event)\"\n [disabled]=\"options().length <= 0\"\n ></mat-slide-toggle>\n <div>\u6839\u636E\u5546\u54C1\u9009\u9879\u8BBE\u7F6E\u4E0D\u540C\u7684\u4EF7\u683C\u548C\u5E93\u5B58</div>\n </div>\n <div class=\"flex items-center\">\n <mat-slide-toggle #inventorySlide (change)=\"onInventorySlideToggle($event)\"></mat-slide-toggle>\n <div>\u8DDF\u8E2A\u5E93\u5B58</div>\n </div>\n\n @if (slide.checked) {\n <div>\n <div class=\"header flex gap-3 h-14 items-center\">\n <div class=\"px-3\">\u540D\u79F0</div>\n <div class=\"flex-1\"></div>\n <div class=\"w-[160px]\">\u4EF7\u683C</div>\n <div class=\"w-[160px]\">\u72B6\u6001</div>\n @if (inventorySlide.checked) {\n <div class=\"w-[160px]\">\u5E93\u5B58</div>\n }\n\n <div class=\"block w-20 text-right\">\u5C55\u5F00/\u6298\u53E0</div>\n </div>\n @for (item of variants; track $index) {\n <rolatech-product-manage-variant [variant]=\"item\" (upload)=\"onUpload(item, $event)\"></rolatech-product-manage-variant>\n }\n </div>\n <div class=\"mt-3\">\n <button mat-button (click)=\"saveVariants()\">\u4FDD\u5B58</button>\n </div>\n }\n }\n</rolatech-product-manage-content>\n", styles: ["mat-slide-toggle{scale:.8}mat-form-field{width:72px}\n"] }]
|
|
132
|
+
}] });
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1tYW5hZ2UtdmFyaWFudHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXByb2R1Y3Qvc3JjL2xpYi9wYWdlcy9wcm9kdWN0LW1hbmFnZS9wcm9kdWN0LW1hbmFnZS12YXJpYW50cy9wcm9kdWN0LW1hbmFnZS12YXJpYW50cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItcHJvZHVjdC9zcmMvbGliL3BhZ2VzL3Byb2R1Y3QtbWFuYWdlL3Byb2R1Y3QtbWFuYWdlLXZhcmlhbnRzL3Byb2R1Y3QtbWFuYWdlLXZhcmlhbnRzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDM0csT0FBTyxFQUNMLHVCQUF1QixFQUN2QixhQUFhLEVBQ2IsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsZ0JBQWdCLEdBQ2pCLE1BQU0sOEJBQThCLENBQUM7QUFFdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFMUQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sNkVBQTZFLENBQUM7Ozs7QUFvQjVILE1BQU0sT0FB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bEIsY0FBYzt3QkFDZCw2QkFBNkI7d0JBQzdCLGdCQUFnQjtxQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBpbmplY3QsIG1vZGVsLCBPbkluaXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUHJvZHVjdE1hbmFnZUNvbnRlbnRDb21wb25lbnQgfSBmcm9tICcuLi9wcm9kdWN0LW1hbmFnZS1jb250ZW50L3Byb2R1Y3QtbWFuYWdlLWNvbnRlbnQuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIEFuZ3VsYXJDb21wb25lbnRzTW9kdWxlLFxuICBCYXNlQ29tcG9uZW50LFxuICBJbWFnZUNvbXBvbmVudCxcbiAgU3Bpbm5lckNvbXBvbmVudCxcbiAgVGh1bWJuYWlsQ29tcG9uZW50LFxuICBUb29sYmFyQ29tcG9uZW50LFxufSBmcm9tICdAcm9sYXRlY2gvYW5ndWxhci1jb21wb25lbnRzJztcbmltcG9ydCB7IFByb2R1Y3QsIFByb2R1Y3RPcHRpb24sIFByb2R1Y3RWYXJpYW50IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBQcm9kdWN0U2VydmljZSB9IGZyb20gJ0Byb2xhdGVjaC9hbmd1bGFyLXNlcnZpY2VzJztcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgQW5ndWxhckNvbW1vbk1vZHVsZSB9IGZyb20gJ0Byb2xhdGVjaC9hbmd1bGFyLWNvbW1vbic7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBNYXRTbGlkZVRvZ2dsZUNoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZSc7XG5pbXBvcnQgeyBQcm9kdWN0TWFuYWdlVmFyaWFudENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvcHJvZHVjdC1tYW5hZ2UtdmFyaWFudC9wcm9kdWN0LW1hbmFnZS12YXJpYW50LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JvbGF0ZWNoLXByb2R1Y3QtbWFuYWdlLXZhcmlhbnRzJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEFuZ3VsYXJDb21tb25Nb2R1bGUsXG4gICAgQW5ndWxhckNvbXBvbmVudHNNb2R1bGUsXG4gICAgUHJvZHVjdE1hbmFnZUNvbnRlbnRDb21wb25lbnQsXG4gICAgVG9vbGJhckNvbXBvbmVudCxcbiAgICBNYXRJY29uLFxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICBUaHVtYm5haWxDb21wb25lbnQsXG4gICAgSW1hZ2VDb21wb25lbnQsXG4gICAgUHJvZHVjdE1hbmFnZVZhcmlhbnRDb21wb25lbnQsXG4gICAgU3Bpbm5lckNvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb2R1Y3QtbWFuYWdlLXZhcmlhbnRzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3Byb2R1Y3QtbWFuYWdlLXZhcmlhbnRzLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgUHJvZHVjdE1hbmFnZVZhcmlhbnRzQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByb2R1Y3RTZXJ2aWNlID0gaW5qZWN0KFByb2R1Y3RTZXJ2aWNlKTtcbiAgY2hhbmdlRGV0ZWN0b3JSZWZzID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgb3B0aW9ucyA9IHNpZ25hbDxQcm9kdWN0T3B0aW9uW10+KFtdKTtcbiAgc25hY2tCYXIgPSBpbmplY3QoTWF0U25hY2tCYXIpO1xuICBwcm9kdWN0UHJpY2UgPSBtb2RlbDxzdHJpbmc+KCk7XG4gIHZhcmlhbnRzOiBhbnk7XG4gIHZhcmlhbnRQcmljZUNoZWNrZWQgPSBmYWxzZTtcbiAgcHJvZHVjdCE6IFByb2R1Y3Q7XG4gIGxvYWRpbmcgPSBmYWxzZTtcbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pZCA9IHRoaXMucm91dGUucGFyZW50Py5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ2lkJykgYXMgc3RyaW5nO1xuICAgIHRoaXMuZ2V0UHJvZHVjdCgpO1xuICB9XG4gIG9uVmFyaWFudFNsaWRlVG9nZ2xlKGV2ZW50OiBNYXRTbGlkZVRvZ2dsZUNoYW5nZSkge1xuICAgIGNvbnN0IG5ld1N0YXRlID0gZXZlbnQuY2hlY2tlZDtcbiAgICBpZiAobmV3U3RhdGUpIHtcbiAgICAgIHRoaXMucHJvZHVjdFNlcnZpY2UudXBkYXRlVmFyaWFudFByaWNlKHRoaXMuaWQsIHRydWUpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICB0aGlzLnZhcmlhbnRzID0gcmVzLmRhdGE7XG4gICAgICAgICAgdGhpcy52YXJpYW50UHJpY2VDaGVja2VkID0gbmV3U3RhdGU7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgdGl0bGU6ICfnoa7orqTliKDpmaTlkJcnLFxuICAgICAgICBtZXNzYWdlOiAn5Yig6Zmk6L+Z5Liq56ug6IqC5ZCXPycsXG4gICAgICAgIGNhbmNlbFRleHQ6ICflj5bmtognLFxuICAgICAgICBjb25maXJtVGV4dDogJ+ehruiupCcsXG4gICAgICB9O1xuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4ob3B0aW9ucyk7XG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybWVkKCkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvZHVjdFNlcnZpY2UudXBkYXRlVmFyaWFudFByaWNlKHRoaXMuaWQsIGZhbHNlKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy52YXJpYW50UHJpY2VDaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy52YXJpYW50cyA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV2ZW50LnNvdXJjZS5jaGVja2VkID0gIW5ld1N0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBvbkludmVudG9yeVNsaWRlVG9nZ2xlKGU6IE1hdFNsaWRlVG9nZ2xlQ2hhbmdlKSB7XG4gICAgaWYgKGUuY2hlY2tlZCkge1xuICAgIH1cbiAgfVxuXG4gIHNhdmVWYXJpYW50cygpIHtcbiAgICB0aGlzLnByb2R1Y3RTZXJ2aWNlLnVwZGF0ZVZhcmlhbnRzKHRoaXMuaWQsIHRoaXMudmFyaWFudHMpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgIHRoaXMuc25hY2tCYXJTZXJ2aWNlLm9wZW4oJ+S/neWtmOaIkOWKnycpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbihlcnJvci5tZXNzYWdlKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgb25VcGxvYWQodmFyaWFudDogYW55LCBkYXRhOiBhbnkpIHtcbiAgICB0aGlzLnByb2R1Y3RTZXJ2aWNlLnVwbG9hZFZhcmlhbnRNZWRpYSh2YXJpYW50LmlkLCBkYXRhKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgIHZhcmlhbnQubWVkaWFbdmFyaWFudC5tZWRpYS5sZW5ndGggLSAxXSA9IHtcbiAgICAgICAgICBpZDogcmVzLmRhdGEuaWQsXG4gICAgICAgICAgdXJsOiByZXMuZGF0YS51cmwgKyAnIXcyMDAnLFxuICAgICAgICAgIHVwbG9hZGluZzogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCfkuIrkvKDlpLHotKU6ICcgKyBlLm1lc3NhZ2UpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICBmaW5kVmFyaWFudHMoKSB7XG4gICAgdGhpcy5wcm9kdWN0U2VydmljZS5maW5kVmFyaWFudHModGhpcy5pZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgaWYgKHJlcy5kYXRhKSB7XG4gICAgICAgICAgdGhpcy52YXJpYW50UHJpY2VDaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhcmlhbnRzID0gcmVzLmRhdGE7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIGdldFByb2R1Y3QoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnByb2R1Y3RTZXJ2aWNlLmdldCh0aGlzLmlkKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMucHJvZHVjdCA9IHJlcy5kYXRhO1xuICAgICAgICB0aGlzLnZhcmlhbnRzID0gdGhpcy5wcm9kdWN0LnZhcmlhbnRzO1xuICAgICAgICB0aGlzLnZhcmlhbnRQcmljZUNoZWNrZWQgPSB0aGlzLnZhcmlhbnRzID8gdGhpcy52YXJpYW50cy5sZW5ndGggPiAwIDogZmFsc2U7XG4gICAgICAgIHRoaXMub3B0aW9ucy5zZXQocmVzLmRhdGEub3B0aW9ucyB8fCBbXSk7XG4gICAgICAgIGxldCBwcmljZSA9IChyZXMuZGF0YS5wcmljZSAvIDEwMCkudG9GaXhlZCgyKTtcbiAgICAgICAgdGhpcy5wcm9kdWN0UHJpY2Uuc2V0KHByaWNlKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iLCI8cm9sYXRlY2gtcHJvZHVjdC1tYW5hZ2UtY29udGVudD5cbiAgPHJvbGF0ZWNoLXRvb2xiYXIgdGl0bGU9XCLku7fmoLznrZbnlaVcIiBjbGFzcz1cImhpZGRlbiBtZDpibG9ja1wiIGRpdmlkZXI+IDwvcm9sYXRlY2gtdG9vbGJhcj5cbiAgQGlmIChsb2FkaW5nKSB7XG4gICAgPHJvbGF0ZWNoLXNwaW5uZXI+PC9yb2xhdGVjaC1zcGlubmVyPlxuICB9IEBlbHNlIHtcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlXG4gICAgICAgICNzbGlkZVxuICAgICAgICBbY2hlY2tlZF09XCJ2YXJpYW50UHJpY2VDaGVja2VkXCJcbiAgICAgICAgKGNoYW5nZSk9XCJvblZhcmlhbnRTbGlkZVRvZ2dsZSgkZXZlbnQpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIm9wdGlvbnMoKS5sZW5ndGggPD0gMFwiXG4gICAgICA+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPGRpdj7moLnmja7llYblk4HpgInpobnorr7nva7kuI3lkIznmoTku7fmoLzlkozlupPlrZg8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlICNpbnZlbnRvcnlTbGlkZSAoY2hhbmdlKT1cIm9uSW52ZW50b3J5U2xpZGVUb2dnbGUoJGV2ZW50KVwiPjwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDxkaXY+6Lef6Liq5bqT5a2YPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKHNsaWRlLmNoZWNrZWQpIHtcbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXIgZmxleCBnYXAtMyBoLTE0IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0zXCI+5ZCN56ewPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtMVwiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LVsxNjBweF1cIj7ku7fmoLw8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1bMTYwcHhdXCI+54q25oCBPC9kaXY+XG4gICAgICAgICAgQGlmIChpbnZlbnRvcnlTbGlkZS5jaGVja2VkKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1bMTYwcHhdXCI+5bqT5a2YPC9kaXY+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJsb2NrIHctMjAgdGV4dC1yaWdodFwiPuWxleW8gC/mipjlj6A8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgdmFyaWFudHM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgIDxyb2xhdGVjaC1wcm9kdWN0LW1hbmFnZS12YXJpYW50IFt2YXJpYW50XT1cIml0ZW1cIiAodXBsb2FkKT1cIm9uVXBsb2FkKGl0ZW0sICRldmVudClcIj48L3JvbGF0ZWNoLXByb2R1Y3QtbWFuYWdlLXZhcmlhbnQ+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJzYXZlVmFyaWFudHMoKVwiPuS/neWtmDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICB9XG48L3JvbGF0ZWNoLXByb2R1Y3QtbWFuYWdlLWNvbnRlbnQ+XG4iXX0=
|
|
@@ -1,11 +1,25 @@
|
|
|
1
1
|
import { ProductManageLayoutComponent } from './product-manage-layout/product-manage-layout.component';
|
|
2
2
|
import { ProductManageInfoComponent } from './product-manage-info/product-manage-info.component';
|
|
3
|
-
import {
|
|
3
|
+
import { ProductManageSectionsComponent } from './product-manage-sections/product-manage-sections.component';
|
|
4
4
|
import { ProductManageMediaComponent } from './product-manage-media/product-manage-media.component';
|
|
5
5
|
import { ProductManagePricingComponent } from './product-manage-pricing/product-manage-pricing.component';
|
|
6
|
+
import { ProductManageIndexComponent } from './product-manage-index/product-manage-index.component';
|
|
7
|
+
import { ProductManageCreateComponent } from './product-manage-create/product-manage-create.component';
|
|
8
|
+
import { ProductManageOptionsComponent } from './product-manage-options/product-manage-options.component';
|
|
9
|
+
import { ProductManageVariantsComponent } from './product-manage-variants/product-manage-variants.component';
|
|
10
|
+
import { ProductManageScheduleComponent } from './product-manage-schedule/product-manage-schedule.component';
|
|
11
|
+
import { ProductManageInventoryComponent } from './product-manage-inventory/product-manage-inventory.component';
|
|
6
12
|
export const productManageRoutes = [
|
|
7
13
|
{
|
|
8
14
|
path: '',
|
|
15
|
+
component: ProductManageIndexComponent,
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
path: 'create',
|
|
19
|
+
component: ProductManageCreateComponent,
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
path: ':id/manage',
|
|
9
23
|
component: ProductManageLayoutComponent,
|
|
10
24
|
children: [
|
|
11
25
|
{
|
|
@@ -17,14 +31,30 @@ export const productManageRoutes = [
|
|
|
17
31
|
component: ProductManageMediaComponent,
|
|
18
32
|
},
|
|
19
33
|
{
|
|
20
|
-
path: '
|
|
21
|
-
component:
|
|
34
|
+
path: 'sections',
|
|
35
|
+
component: ProductManageSectionsComponent,
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
path: 'options',
|
|
39
|
+
component: ProductManageOptionsComponent,
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
path: 'variants',
|
|
43
|
+
component: ProductManageVariantsComponent,
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
path: 'inventory',
|
|
47
|
+
component: ProductManageInventoryComponent,
|
|
22
48
|
},
|
|
23
49
|
{
|
|
24
50
|
path: 'pricing',
|
|
25
51
|
component: ProductManagePricingComponent,
|
|
26
52
|
},
|
|
53
|
+
{
|
|
54
|
+
path: 'schedule',
|
|
55
|
+
component: ProductManageScheduleComponent,
|
|
56
|
+
},
|
|
27
57
|
],
|
|
28
58
|
},
|
|
29
59
|
];
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1tYW5hZ2Uucm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXByb2R1Y3Qvc3JjL2xpYi9wYWdlcy9wcm9kdWN0LW1hbmFnZS9wcm9kdWN0LW1hbmFnZS5yb3V0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDdkcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDakcsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDN0csT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDcEcsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDMUcsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDcEcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDdkcsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDMUcsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDN0csT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDN0csT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFFaEgsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQVc7SUFDekM7UUFDRSxJQUFJLEVBQUUsRUFBRTtRQUNSLFNBQVMsRUFBRSwyQkFBMkI7S0FDdkM7SUFDRDtRQUNFLElBQUksRUFBRSxRQUFRO1FBQ2QsU0FBUyxFQUFFLDRCQUE0QjtLQUN4QztJQUNEO1FBQ0UsSUFBSSxFQUFFLFlBQVk7UUFDbEIsU0FBUyxFQUFFLDRCQUE0QjtRQUN2QyxRQUFRLEVBQUU7WUFDUjtnQkFDRSxJQUFJLEVBQUUsTUFBTTtnQkFDWixTQUFTLEVBQUUsMEJBQTBCO2FBQ3RDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsU0FBUyxFQUFFLDJCQUEyQjthQUN2QztZQUNEO2dCQUNFLElBQUksRUFBRSxVQUFVO2dCQUNoQixTQUFTLEVBQUUsOEJBQThCO2FBQzFDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsU0FBUyxFQUFFLDZCQUE2QjthQUN6QztZQUNEO2dCQUNFLElBQUksRUFBRSxVQUFVO2dCQUNoQixTQUFTLEVBQUUsOEJBQThCO2FBQzFDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLFNBQVMsRUFBRSwrQkFBK0I7YUFDM0M7WUFFRDtnQkFDRSxJQUFJLEVBQUUsU0FBUztnQkFDZixTQUFTLEVBQUUsNkJBQTZCO2FBQ3pDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLFNBQVMsRUFBRSw4QkFBOEI7YUFDMUM7U0FDRjtLQUNGO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJvdXRlcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBQcm9kdWN0TWFuYWdlTGF5b3V0Q29tcG9uZW50IH0gZnJvbSAnLi9wcm9kdWN0LW1hbmFnZS1sYXlvdXQvcHJvZHVjdC1tYW5hZ2UtbGF5b3V0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcm9kdWN0TWFuYWdlSW5mb0NvbXBvbmVudCB9IGZyb20gJy4vcHJvZHVjdC1tYW5hZ2UtaW5mby9wcm9kdWN0LW1hbmFnZS1pbmZvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcm9kdWN0TWFuYWdlU2VjdGlvbnNDb21wb25lbnQgfSBmcm9tICcuL3Byb2R1Y3QtbWFuYWdlLXNlY3Rpb25zL3Byb2R1Y3QtbWFuYWdlLXNlY3Rpb25zLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcm9kdWN0TWFuYWdlTWVkaWFDb21wb25lbnQgfSBmcm9tICcuL3Byb2R1Y3QtbWFuYWdlLW1lZGlhL3Byb2R1Y3QtbWFuYWdlLW1lZGlhLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcm9kdWN0TWFuYWdlUHJpY2luZ0NvbXBvbmVudCB9IGZyb20gJy4vcHJvZHVjdC1tYW5hZ2UtcHJpY2luZy9wcm9kdWN0LW1hbmFnZS1wcmljaW5nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcm9kdWN0TWFuYWdlSW5kZXhDb21wb25lbnQgfSBmcm9tICcuL3Byb2R1Y3QtbWFuYWdlLWluZGV4L3Byb2R1Y3QtbWFuYWdlLWluZGV4LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcm9kdWN0TWFuYWdlQ3JlYXRlQ29tcG9uZW50IH0gZnJvbSAnLi9wcm9kdWN0LW1hbmFnZS1jcmVhdGUvcHJvZHVjdC1tYW5hZ2UtY3JlYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcm9kdWN0TWFuYWdlT3B0aW9uc0NvbXBvbmVudCB9IGZyb20gJy4vcHJvZHVjdC1tYW5hZ2Utb3B0aW9ucy9wcm9kdWN0LW1hbmFnZS1vcHRpb25zLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcm9kdWN0TWFuYWdlVmFyaWFudHNDb21wb25lbnQgfSBmcm9tICcuL3Byb2R1Y3QtbWFuYWdlLXZhcmlhbnRzL3Byb2R1Y3QtbWFuYWdlLXZhcmlhbnRzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcm9kdWN0TWFuYWdlU2NoZWR1bGVDb21wb25lbnQgfSBmcm9tICcuL3Byb2R1Y3QtbWFuYWdlLXNjaGVkdWxlL3Byb2R1Y3QtbWFuYWdlLXNjaGVkdWxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcm9kdWN0TWFuYWdlSW52ZW50b3J5Q29tcG9uZW50IH0gZnJvbSAnLi9wcm9kdWN0LW1hbmFnZS1pbnZlbnRvcnkvcHJvZHVjdC1tYW5hZ2UtaW52ZW50b3J5LmNvbXBvbmVudCc7XG5cbmV4cG9ydCBjb25zdCBwcm9kdWN0TWFuYWdlUm91dGVzOiBSb3V0ZXMgPSBbXG4gIHtcbiAgICBwYXRoOiAnJyxcbiAgICBjb21wb25lbnQ6IFByb2R1Y3RNYW5hZ2VJbmRleENvbXBvbmVudCxcbiAgfSxcbiAge1xuICAgIHBhdGg6ICdjcmVhdGUnLFxuICAgIGNvbXBvbmVudDogUHJvZHVjdE1hbmFnZUNyZWF0ZUNvbXBvbmVudCxcbiAgfSxcbiAge1xuICAgIHBhdGg6ICc6aWQvbWFuYWdlJyxcbiAgICBjb21wb25lbnQ6IFByb2R1Y3RNYW5hZ2VMYXlvdXRDb21wb25lbnQsXG4gICAgY2hpbGRyZW46IFtcbiAgICAgIHtcbiAgICAgICAgcGF0aDogJ2luZm8nLFxuICAgICAgICBjb21wb25lbnQ6IFByb2R1Y3RNYW5hZ2VJbmZvQ29tcG9uZW50LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcGF0aDogJ21lZGlhJyxcbiAgICAgICAgY29tcG9uZW50OiBQcm9kdWN0TWFuYWdlTWVkaWFDb21wb25lbnQsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwYXRoOiAnc2VjdGlvbnMnLFxuICAgICAgICBjb21wb25lbnQ6IFByb2R1Y3RNYW5hZ2VTZWN0aW9uc0NvbXBvbmVudCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHBhdGg6ICdvcHRpb25zJyxcbiAgICAgICAgY29tcG9uZW50OiBQcm9kdWN0TWFuYWdlT3B0aW9uc0NvbXBvbmVudCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHBhdGg6ICd2YXJpYW50cycsXG4gICAgICAgIGNvbXBvbmVudDogUHJvZHVjdE1hbmFnZVZhcmlhbnRzQ29tcG9uZW50LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcGF0aDogJ2ludmVudG9yeScsXG4gICAgICAgIGNvbXBvbmVudDogUHJvZHVjdE1hbmFnZUludmVudG9yeUNvbXBvbmVudCxcbiAgICAgIH0sXG5cbiAgICAgIHtcbiAgICAgICAgcGF0aDogJ3ByaWNpbmcnLFxuICAgICAgICBjb21wb25lbnQ6IFByb2R1Y3RNYW5hZ2VQcmljaW5nQ29tcG9uZW50LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcGF0aDogJ3NjaGVkdWxlJyxcbiAgICAgICAgY29tcG9uZW50OiBQcm9kdWN0TWFuYWdlU2NoZWR1bGVDb21wb25lbnQsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5dO1xuIl19
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ProductCategoryService } from './product-category.service';
|
|
2
|
+
export { ProductCategoryService };
|
|
3
|
+
export const services = [ProductCategoryService];
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItcHJvZHVjdC9zcmMvbGliL3NlcnZpY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXBFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxDQUFDO0FBRWxDLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBVSxDQUFDLHNCQUFzQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm9kdWN0Q2F0ZWdvcnlTZXJ2aWNlIH0gZnJvbSAnLi9wcm9kdWN0LWNhdGVnb3J5LnNlcnZpY2UnO1xuXG5leHBvcnQgeyBQcm9kdWN0Q2F0ZWdvcnlTZXJ2aWNlIH07XG5cbmV4cG9ydCBjb25zdCBzZXJ2aWNlczogYW55W10gPSBbUHJvZHVjdENhdGVnb3J5U2VydmljZV07XG4iXX0=
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { BaseService } from '@rolatech/angular-services';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class ProductCategoryService extends BaseService {
|
|
5
|
+
init() {
|
|
6
|
+
this.endpoint = 'products/categories';
|
|
7
|
+
super.init();
|
|
8
|
+
}
|
|
9
|
+
uploadMedia(id, data) {
|
|
10
|
+
return this.http.post(`${this.actionUrl}/${id}/media`, data, {
|
|
11
|
+
withCredentials: true,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
deleteMedia(id, mediaId) {
|
|
15
|
+
return this.http.delete(`${this.actionUrl}/${id}/media/${mediaId}`, {
|
|
16
|
+
withCredentials: true,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
importFromExcel(data) {
|
|
20
|
+
return this.http.post(`${this.actionUrl}/excel`, data, {
|
|
21
|
+
withCredentials: true,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
createFromExcel(data) {
|
|
25
|
+
return this.http.post(`${this.actionUrl}/list`, data, {
|
|
26
|
+
withCredentials: true,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductCategoryService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
30
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductCategoryService, providedIn: 'root' }); }
|
|
31
|
+
}
|
|
32
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductCategoryService, decorators: [{
|
|
33
|
+
type: Injectable,
|
|
34
|
+
args: [{
|
|
35
|
+
providedIn: 'root',
|
|
36
|
+
}]
|
|
37
|
+
}] });
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1jYXRlZ29yeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXByb2R1Y3Qvc3JjL2xpYi9zZXJ2aWNlcy9wcm9kdWN0LWNhdGVnb3J5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBS3pELE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxXQUFXO0lBQzVDLElBQUk7UUFDWCxJQUFJLENBQUMsUUFBUSxHQUFHLHFCQUFxQixDQUFDO1FBQ3RDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFDRCxXQUFXLENBQUMsRUFBVSxFQUFFLElBQWM7UUFDcEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTSxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1lBQ2hFLGVBQWUsRUFBRSxJQUFJO1NBQ3RCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxXQUFXLENBQUMsRUFBVSxFQUFFLE9BQWU7UUFDckMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBTSxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxVQUFVLE9BQU8sRUFBRSxFQUFFO1lBQ3ZFLGVBQWUsRUFBRSxJQUFJO1NBQ3RCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxlQUFlLENBQUMsSUFBYztRQUM1QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsUUFBUSxFQUFFLElBQUksRUFBRTtZQUMxRCxlQUFlLEVBQUUsSUFBSTtTQUN0QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsZUFBZSxDQUFDLElBQVM7UUFDdkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTSxHQUFHLElBQUksQ0FBQyxTQUFTLE9BQU8sRUFBRSxJQUFJLEVBQUU7WUFDekQsZUFBZSxFQUFFLElBQUk7U0FDdEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0F4QlUsc0JBQXNCO2tIQUF0QixzQkFBc0IsY0FGckIsTUFBTTs7MkZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSAnQHJvbGF0ZWNoL2FuZ3VsYXItc2VydmljZXMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUHJvZHVjdENhdGVnb3J5U2VydmljZSBleHRlbmRzIEJhc2VTZXJ2aWNlIHtcbiAgb3ZlcnJpZGUgaW5pdCgpIHtcbiAgICB0aGlzLmVuZHBvaW50ID0gJ3Byb2R1Y3RzL2NhdGVnb3JpZXMnO1xuICAgIHN1cGVyLmluaXQoKTtcbiAgfVxuICB1cGxvYWRNZWRpYShpZDogc3RyaW5nLCBkYXRhOiBGb3JtRGF0YSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5hY3Rpb25Vcmx9LyR7aWR9L21lZGlhYCwgZGF0YSwge1xuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pO1xuICB9XG4gIGRlbGV0ZU1lZGlhKGlkOiBzdHJpbmcsIG1lZGlhSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8YW55PihgJHt0aGlzLmFjdGlvblVybH0vJHtpZH0vbWVkaWEvJHttZWRpYUlkfWAsIHtcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuICBpbXBvcnRGcm9tRXhjZWwoZGF0YTogRm9ybURhdGEpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYWN0aW9uVXJsfS9leGNlbGAsIGRhdGEsIHtcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuICBjcmVhdGVGcm9tRXhjZWwoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmFjdGlvblVybH0vbGlzdGAsIGRhdGEsIHtcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { importProvidersFrom, makeEnvironmentProviders } from '@angular/core';
|
|
2
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { RouterModule } from '@angular/router';
|
|
5
|
+
import * as fromServices from './lib/services';
|
|
6
|
+
export function provideAngularProduct() {
|
|
7
|
+
const providers = [
|
|
8
|
+
...fromServices.services,
|
|
9
|
+
importProvidersFrom(CommonModule, ReactiveFormsModule, FormsModule, RouterModule),
|
|
10
|
+
];
|
|
11
|
+
return makeEnvironmentProviders(providers);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItcHJvZHVjdC9zcmMvcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFrQyxtQkFBbUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEtBQUssWUFBWSxNQUFNLGdCQUFnQixDQUFDO0FBRS9DLE1BQU0sVUFBVSxxQkFBcUI7SUFDbkMsTUFBTSxTQUFTLEdBQXdDO1FBQ3JELEdBQUcsWUFBWSxDQUFDLFFBQVE7UUFDeEIsbUJBQW1CLENBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUM7S0FDbEYsQ0FBQztJQUNGLE9BQU8sd0JBQXdCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudmlyb25tZW50UHJvdmlkZXJzLCBQcm92aWRlciwgaW1wb3J0UHJvdmlkZXJzRnJvbSwgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0ICogYXMgZnJvbVNlcnZpY2VzIGZyb20gJy4vbGliL3NlcnZpY2VzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVBbmd1bGFyUHJvZHVjdCgpOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XG4gIGNvbnN0IHByb3ZpZGVyczogKFByb3ZpZGVyIHwgRW52aXJvbm1lbnRQcm92aWRlcnMpW10gPSBbXG4gICAgLi4uZnJvbVNlcnZpY2VzLnNlcnZpY2VzLFxuICAgIGltcG9ydFByb3ZpZGVyc0Zyb20oQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3Jtc01vZHVsZSwgUm91dGVyTW9kdWxlKSxcbiAgXTtcbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhwcm92aWRlcnMpO1xufVxuIl19
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { inject, signal, Component, ViewEncapsulation } from '@angular/core';
|
|
3
|
+
import { ProductService } from '@rolatech/angular-services';
|
|
4
|
+
import { AngularComponentsModule, RichViewComponent, RichItemComponent } from '@rolatech/angular-components';
|
|
5
|
+
import { AngularCommonModule } from '@rolatech/angular-common';
|
|
6
|
+
import { ProductItemComponent } from './rolatech-angular-product.mjs';
|
|
7
|
+
import * as i1 from '@angular/router';
|
|
8
|
+
import '@angular/material/icon';
|
|
9
|
+
import '@angular/common';
|
|
10
|
+
import '@angular/material/dialog';
|
|
11
|
+
import '@angular/material/button';
|
|
12
|
+
import '@angular/material/divider';
|
|
13
|
+
import '@angular/cdk/text-field';
|
|
14
|
+
import '@angular/forms';
|
|
15
|
+
import '@angular/material/form-field';
|
|
16
|
+
import '@angular/material/input';
|
|
17
|
+
import '@angular/material/progress-bar';
|
|
18
|
+
import 'lodash';
|
|
19
|
+
import '@angular/animations';
|
|
20
|
+
import '@angular/material/menu';
|
|
21
|
+
import '@angular/cdk/keycodes';
|
|
22
|
+
import '@angular/material/chips';
|
|
23
|
+
import '@rolatech/angular-comment';
|
|
24
|
+
import '@rolatech/angular-auth';
|
|
25
|
+
import '@angular/material/snack-bar';
|
|
26
|
+
import '@angular/material/core';
|
|
27
|
+
import '@angular/material/select';
|
|
28
|
+
import '@angular/material/paginator';
|
|
29
|
+
import '@angular/material/table';
|
|
30
|
+
import '@angular/material/progress-spinner';
|
|
31
|
+
import '@angular/material/slide-toggle';
|
|
32
|
+
|
|
33
|
+
class ProductIndexComponent {
|
|
34
|
+
constructor() {
|
|
35
|
+
this.productService = inject(ProductService);
|
|
36
|
+
// products: Product[] = [];
|
|
37
|
+
this.products = signal([]);
|
|
38
|
+
this.loading = false;
|
|
39
|
+
}
|
|
40
|
+
ngOnInit() {
|
|
41
|
+
this.findProducts();
|
|
42
|
+
}
|
|
43
|
+
findProducts() {
|
|
44
|
+
this.loading = true;
|
|
45
|
+
const options = {
|
|
46
|
+
sort: 'updatedAt desc',
|
|
47
|
+
// filter: 'published:true',
|
|
48
|
+
};
|
|
49
|
+
this.productService.find(options).subscribe({
|
|
50
|
+
next: (res) => {
|
|
51
|
+
// this.products = res.data;
|
|
52
|
+
this.products.set(res.data);
|
|
53
|
+
this.meta = res.meta;
|
|
54
|
+
this.loading = false;
|
|
55
|
+
},
|
|
56
|
+
error: (error) => {
|
|
57
|
+
this.loading = false;
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductIndexComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
62
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.4", type: ProductIndexComponent, isStandalone: true, selector: "rolatech-product-index", ngImport: i0, template: "<div class=\"min-w-[320px] max-w-[1120px] m-auto\">\n <div class=\"p-3 hidden md:block text-2xl font-medium\">\u5168\u90E8\u5546\u54C1</div>\n @if (loading) {\n @for (number of [0, 1, 2, 3, 4, 5]; track number) {\n <div class=\"flex flex-row animate-pulse mt-3 mr-4 cursor-pointer w-full\">\n <div class=\"h-fit w-2/5 md:w-1/4 aspect-video hover:bg-[--rt-base-background] rounded-lg\"></div>\n <div class=\"w-3/5 md:w-3/4 ml-3 py-1 flex flex-col justify-between\">\n <div class=\"space-y-3\">\n <div class=\"h-4 bg-[--rt-base-background] rounded col-span-2\"></div>\n <div class=\"h-2 bg-[--rt-base-background] rounded col-span-1\"></div>\n <div class=\"h-2 bg-[--rt-base-background] rounded col-span-1 py-1\"></div>\n </div>\n <div>\n <div class=\"h-2 bg-[--rt-base-background] rounded col-span-2 py-1\"></div>\n </div>\n </div>\n </div>\n }\n } @else {\n <rolatech-rich-view wrap>\n @for (item of products(); track item) {\n @defer {\n <rolatech-rich-item\n [routerLink]=\"['./', item.id]\"\n [thumbnail]=\"item.media[0].url + '!w400'\"\n [title]=\"item.name\"\n [subtitle]=\"item.description\"\n [price]=\"item.price / 100\"\n ></rolatech-rich-item>\n }\n }\n </rolatech-rich-view>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: AngularCommonModule }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: RichViewComponent, selector: "rolatech-rich-view", inputs: ["list", "wrap"] }], encapsulation: i0.ViewEncapsulation.None, deferBlockDependencies: [() => [i1.RouterLink, RichItemComponent]] }); }
|
|
63
|
+
}
|
|
64
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProductIndexComponent, decorators: [{
|
|
65
|
+
type: Component,
|
|
66
|
+
args: [{ selector: 'rolatech-product-index', standalone: true, imports: [AngularCommonModule, AngularComponentsModule, RichViewComponent, RichItemComponent, ProductItemComponent], encapsulation: ViewEncapsulation.None, template: "<div class=\"min-w-[320px] max-w-[1120px] m-auto\">\n <div class=\"p-3 hidden md:block text-2xl font-medium\">\u5168\u90E8\u5546\u54C1</div>\n @if (loading) {\n @for (number of [0, 1, 2, 3, 4, 5]; track number) {\n <div class=\"flex flex-row animate-pulse mt-3 mr-4 cursor-pointer w-full\">\n <div class=\"h-fit w-2/5 md:w-1/4 aspect-video hover:bg-[--rt-base-background] rounded-lg\"></div>\n <div class=\"w-3/5 md:w-3/4 ml-3 py-1 flex flex-col justify-between\">\n <div class=\"space-y-3\">\n <div class=\"h-4 bg-[--rt-base-background] rounded col-span-2\"></div>\n <div class=\"h-2 bg-[--rt-base-background] rounded col-span-1\"></div>\n <div class=\"h-2 bg-[--rt-base-background] rounded col-span-1 py-1\"></div>\n </div>\n <div>\n <div class=\"h-2 bg-[--rt-base-background] rounded col-span-2 py-1\"></div>\n </div>\n </div>\n </div>\n }\n } @else {\n <rolatech-rich-view wrap>\n @for (item of products(); track item) {\n @defer {\n <rolatech-rich-item\n [routerLink]=\"['./', item.id]\"\n [thumbnail]=\"item.media[0].url + '!w400'\"\n [title]=\"item.name\"\n [subtitle]=\"item.description\"\n [price]=\"item.price / 100\"\n ></rolatech-rich-item>\n }\n }\n </rolatech-rich-view>\n }\n</div>\n" }]
|
|
67
|
+
}], ctorParameters: () => [] });
|
|
68
|
+
|
|
69
|
+
export { ProductIndexComponent };
|
|
70
|
+
//# sourceMappingURL=rolatech-angular-product-product-index.component-C_cbg95R.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rolatech-angular-product-product-index.component-C_cbg95R.mjs","sources":["../../../../libs/angular-product/src/lib/pages/product/product-index/product-index.component.ts","../../../../libs/angular-product/src/lib/pages/product/product-index/product-index.component.html"],"sourcesContent":["import { ChangeDetectionStrategy, Component, inject, OnInit, signal, ViewEncapsulation } from '@angular/core';\nimport { ProductService } from '@rolatech/angular-services';\nimport { Product } from '../../../interfaces/product';\nimport { RichViewComponent, RichItemComponent, AngularComponentsModule } from '@rolatech/angular-components';\nimport { AngularCommonModule } from '@rolatech/angular-common';\nimport { ProductItemComponent } from '../../../components';\n@Component({\n selector: 'rolatech-product-index',\n standalone: true,\n imports: [AngularCommonModule, AngularComponentsModule, RichViewComponent, RichItemComponent, ProductItemComponent],\n templateUrl: './product-index.component.html',\n styleUrl: './product-index.component.scss',\n encapsulation: ViewEncapsulation.None,\n // changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ProductIndexComponent implements OnInit {\n productService = inject(ProductService);\n // products: Product[] = [];\n products = signal<Product[]>([]);\n\n meta: any;\n loading = false;\n constructor() {}\n\n ngOnInit(): void {\n this.findProducts();\n }\n findProducts() {\n this.loading = true;\n const options = {\n sort: 'updatedAt desc',\n // filter: 'published:true',\n };\n this.productService.find(options).subscribe({\n next: (res: any) => {\n // this.products = res.data;\n this.products.set(res.data);\n this.meta = res.meta;\n this.loading = false;\n },\n error: (error) => {\n this.loading = false;\n },\n });\n }\n}\n","<div class=\"min-w-[320px] max-w-[1120px] m-auto\">\n <div class=\"p-3 hidden md:block text-2xl font-medium\">全部商品</div>\n @if (loading) {\n @for (number of [0, 1, 2, 3, 4, 5]; track number) {\n <div class=\"flex flex-row animate-pulse mt-3 mr-4 cursor-pointer w-full\">\n <div class=\"h-fit w-2/5 md:w-1/4 aspect-video hover:bg-[--rt-base-background] rounded-lg\"></div>\n <div class=\"w-3/5 md:w-3/4 ml-3 py-1 flex flex-col justify-between\">\n <div class=\"space-y-3\">\n <div class=\"h-4 bg-[--rt-base-background] rounded col-span-2\"></div>\n <div class=\"h-2 bg-[--rt-base-background] rounded col-span-1\"></div>\n <div class=\"h-2 bg-[--rt-base-background] rounded col-span-1 py-1\"></div>\n </div>\n <div>\n <div class=\"h-2 bg-[--rt-base-background] rounded col-span-2 py-1\"></div>\n </div>\n </div>\n </div>\n }\n } @else {\n <rolatech-rich-view wrap>\n @for (item of products(); track item) {\n @defer {\n <rolatech-rich-item\n [routerLink]=\"['./', item.id]\"\n [thumbnail]=\"item.media[0].url + '!w400'\"\n [title]=\"item.name\"\n [subtitle]=\"item.description\"\n [price]=\"item.price / 100\"\n ></rolatech-rich-item>\n }\n }\n </rolatech-rich-view>\n }\n</div>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAea,qBAAqB,CAAA;AAOhC,IAAA,WAAA,GAAA;AANA,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;;AAExC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAY,EAAE,CAAC,CAAC;QAGjC,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;KACA;IAEhB,QAAQ,GAAA;QACN,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;IACD,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACpB,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,IAAI,EAAE,gBAAgB;;SAEvB,CAAC;QACF,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;AAC1C,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;;gBAEjB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC5B,gBAAA,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;AACrB,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;aACtB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;aACtB;AACF,SAAA,CAAC,CAAC;KACJ;8GA7BU,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECflC,g5CAkCA,EDzBY,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,8BAAE,uBAAuB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,sBAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,UAAA,EAAE,iBAAiB,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAMjF,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBATjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,cACtB,IAAI,EAAA,OAAA,EACP,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,oBAAoB,CAAC,EAGpG,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,g5CAAA,EAAA,CAAA;;;;;"}
|