@rolatech/angular-course 17.2.1 → 17.2.2

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 (35) hide show
  1. package/esm2022/index.mjs +2 -1
  2. package/esm2022/lib/components/course-details-dialog/course-details-dialog.component.mjs +92 -0
  3. package/esm2022/lib/components/course-edit-dialog/course-edit-dialog.component.mjs +233 -0
  4. package/esm2022/lib/components/course-preview/course-preview.component.mjs +11 -0
  5. package/esm2022/lib/components/course-pricing-add-dialog/course-pricing-add-dialog.component.mjs +33 -0
  6. package/esm2022/lib/components/course-pricing-dialog/course-pricing-dialog.component.mjs +59 -0
  7. package/esm2022/lib/components/course-schedule-add-dialog/course-schedule-add-dialog.component.mjs +34 -0
  8. package/esm2022/lib/components/course-schedule-dialog/course-schedule-dialog.component.mjs +63 -0
  9. package/esm2022/lib/components/course-section-item/course-section-item.component.mjs +52 -0
  10. package/esm2022/lib/components/course-section-lecture-item/course-section-lecture-item.component.mjs +113 -0
  11. package/esm2022/lib/components/course-section-lecture-video-dialog/course-section-lecture-video-dialog.component.mjs +112 -0
  12. package/esm2022/lib/components/course-section-lecture-video-item/course-section-lecture-video-item.component.mjs +11 -0
  13. package/esm2022/lib/components/detail-item/detail-item.component.mjs +73 -0
  14. package/esm2022/lib/components/index.mjs +24 -0
  15. package/esm2022/lib/components/pricing-item/pricing-item.component.mjs +45 -0
  16. package/esm2022/lib/components/schedule-item/schedule-item.component.mjs +124 -0
  17. package/fesm2022/rolatech-angular-course.mjs +1027 -153
  18. package/fesm2022/rolatech-angular-course.mjs.map +1 -1
  19. package/index.d.ts +1 -0
  20. package/lib/components/course-details-dialog/course-details-dialog.component.d.ts +23 -0
  21. package/lib/components/course-edit-dialog/course-edit-dialog.component.d.ts +51 -0
  22. package/lib/components/course-preview/course-preview.component.d.ts +5 -0
  23. package/lib/components/course-pricing-add-dialog/course-pricing-add-dialog.component.d.ts +12 -0
  24. package/lib/components/course-pricing-dialog/course-pricing-dialog.component.d.ts +19 -0
  25. package/lib/components/course-schedule-add-dialog/course-schedule-add-dialog.component.d.ts +12 -0
  26. package/lib/components/course-schedule-dialog/course-schedule-dialog.component.d.ts +19 -0
  27. package/lib/components/course-section-item/course-section-item.component.d.ts +24 -0
  28. package/lib/components/course-section-lecture-item/course-section-lecture-item.component.d.ts +40 -0
  29. package/lib/components/course-section-lecture-video-dialog/course-section-lecture-video-dialog.component.d.ts +29 -0
  30. package/lib/components/course-section-lecture-video-item/course-section-lecture-video-item.component.d.ts +5 -0
  31. package/lib/components/detail-item/detail-item.component.d.ts +32 -0
  32. package/lib/components/index.d.ts +23 -0
  33. package/lib/components/pricing-item/pricing-item.component.d.ts +17 -0
  34. package/lib/components/schedule-item/schedule-item.component.d.ts +34 -0
  35. package/package.json +1 -1
package/esm2022/index.mjs CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './lib/interfaces';
2
2
  export * from './provider';
3
+ export * from './lib/components';
3
4
  export { courseRoutes } from './lib/pages/course/course.routes';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItY291cnNlL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsWUFBWSxDQUFDO0FBQzNCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2ludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9wcm92aWRlcic7XG5leHBvcnQgeyBjb3Vyc2VSb3V0ZXMgfSBmcm9tICcuL2xpYi9wYWdlcy9jb3Vyc2UvY291cnNlLnJvdXRlcyc7XG4iXX0=
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItY291cnNlL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvaW50ZXJmYWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL3Byb3ZpZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMnO1xuZXhwb3J0IHsgY291cnNlUm91dGVzIH0gZnJvbSAnLi9saWIvcGFnZXMvY291cnNlL2NvdXJzZS5yb3V0ZXMnO1xuIl19
@@ -0,0 +1,92 @@
1
+ import { Component, Inject } from '@angular/core';
2
+ import { MatDialogRef, MAT_DIALOG_DATA, MatDialog, MatDialogClose } from '@angular/material/dialog';
3
+ import { MatSnackBar } from '@angular/material/snack-bar';
4
+ import { CourseService } from '../../services';
5
+ import { remove } from 'lodash';
6
+ import { MatButtonModule } from '@angular/material/button';
7
+ import { DetailItemComponent } from '../detail-item/detail-item.component';
8
+ import { MatStepperModule } from '@angular/material/stepper';
9
+ import { FormsModule } from '@angular/forms';
10
+ import { MatDividerModule } from '@angular/material/divider';
11
+ import { MatIconModule } from '@angular/material/icon';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "@angular/material/dialog";
14
+ import * as i2 from "../../services";
15
+ import * as i3 from "@angular/material/snack-bar";
16
+ import * as i4 from "@angular/material/icon";
17
+ import * as i5 from "@angular/material/divider";
18
+ import * as i6 from "@angular/forms";
19
+ import * as i7 from "@angular/material/stepper";
20
+ import * as i8 from "@angular/material/button";
21
+ export class CourseDetailsDialogComponent {
22
+ constructor(dialogRef, data, courseService, snackBar, dialog) {
23
+ this.dialogRef = dialogRef;
24
+ this.data = data;
25
+ this.courseService = courseService;
26
+ this.snackBar = snackBar;
27
+ this.dialog = dialog;
28
+ this.details = [];
29
+ this.courseId = data.courseId;
30
+ }
31
+ close() {
32
+ this.dialogRef.close();
33
+ }
34
+ addDetail() {
35
+ this.courseService
36
+ .addDetail(this.courseId, {
37
+ title: '',
38
+ description: '',
39
+ content: '',
40
+ media: [],
41
+ })
42
+ .subscribe({
43
+ next: (res) => {
44
+ const detail = res.data;
45
+ this.details.push({
46
+ id: detail.id,
47
+ title: '',
48
+ description: '',
49
+ content: '',
50
+ media: [],
51
+ });
52
+ },
53
+ error: (e) => {
54
+ this.snackBar.open(e.message);
55
+ },
56
+ });
57
+ }
58
+ onDetailMediaUpload(event) { }
59
+ onDetailMediaDelete(event) { }
60
+ onDetailSave(event) { }
61
+ onDetailDelete(detail) {
62
+ this.courseService.deleteDetail(this.courseId, detail.id).subscribe({
63
+ next: (res) => {
64
+ this.snackBar.open(res.data);
65
+ remove(this.details, {
66
+ id: detail.id,
67
+ });
68
+ },
69
+ error: (e) => {
70
+ this.snackBar.open(e.message);
71
+ },
72
+ });
73
+ }
74
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CourseDetailsDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.CourseService }, { token: i3.MatSnackBar }, { token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
75
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: CourseDetailsDialogComponent, isStandalone: true, selector: "rolatech-course-details-dialog", ngImport: i0, template: "<div class=\"flex flex-col h-full overflow-hidden\">\n <div class=\"h-16 flex justify-between items-center px-5\">\n @if (data.title) {\n <div class=\"text-md font-medium\">{{ data.title }}</div>\n }\n <div class=\"cursor-pointer\" (click)=\"close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"flex-1 overflow-hidden mt-3 overflow-y-auto\">\n <form #detailForm=\"ngForm\" class=\"p-3\">\n <ng-template matStepLabel>\u8BE6\u60C5</ng-template>\n @for (item of details; track item) {\n <rolatech-detail-item\n [detail]=\"item\"\n (upload)=\"onDetailMediaUpload($event)\"\n (deleteMedia)=\"onDetailMediaDelete($event)\"\n (save)=\"onDetailSave($event)\"\n (delete)=\"onDetailDelete($event)\"\n ></rolatech-detail-item>\n }\n <div class=\"mb-6\">\n <button mat-button (click)=\"addDetail()\">\n <mat-icon>add</mat-icon>\n <span>\u589E\u52A0\u8BE6\u60C5</span>\n </button>\n </div>\n </form>\n </div>\n <mat-divider></mat-divider>\n <div class=\"h-16 flex justify-end items-center px-5\">\n <button mat-button [mat-dialog-close]=\"true\" cdkFocusInitial>\u4FDD\u5B58</button>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatStepperModule }, { kind: "directive", type: i7.MatStepLabel, selector: "[matStepLabel]" }, { kind: "component", type: DetailItemComponent, selector: "rolatech-detail-item", inputs: ["isUploading", "detail", "shadow", "actions", "selectMedia"], outputs: ["upload", "delete", "save", "deleteMedia"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i8.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }] }); }
76
+ }
77
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CourseDetailsDialogComponent, decorators: [{
78
+ type: Component,
79
+ args: [{ selector: 'rolatech-course-details-dialog', standalone: true, imports: [
80
+ MatIconModule,
81
+ MatDividerModule,
82
+ FormsModule,
83
+ MatStepperModule,
84
+ DetailItemComponent,
85
+ MatButtonModule,
86
+ MatDialogClose,
87
+ ], template: "<div class=\"flex flex-col h-full overflow-hidden\">\n <div class=\"h-16 flex justify-between items-center px-5\">\n @if (data.title) {\n <div class=\"text-md font-medium\">{{ data.title }}</div>\n }\n <div class=\"cursor-pointer\" (click)=\"close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"flex-1 overflow-hidden mt-3 overflow-y-auto\">\n <form #detailForm=\"ngForm\" class=\"p-3\">\n <ng-template matStepLabel>\u8BE6\u60C5</ng-template>\n @for (item of details; track item) {\n <rolatech-detail-item\n [detail]=\"item\"\n (upload)=\"onDetailMediaUpload($event)\"\n (deleteMedia)=\"onDetailMediaDelete($event)\"\n (save)=\"onDetailSave($event)\"\n (delete)=\"onDetailDelete($event)\"\n ></rolatech-detail-item>\n }\n <div class=\"mb-6\">\n <button mat-button (click)=\"addDetail()\">\n <mat-icon>add</mat-icon>\n <span>\u589E\u52A0\u8BE6\u60C5</span>\n </button>\n </div>\n </form>\n </div>\n <mat-divider></mat-divider>\n <div class=\"h-16 flex justify-end items-center px-5\">\n <button mat-button [mat-dialog-close]=\"true\" cdkFocusInitial>\u4FDD\u5B58</button>\n </div>\n</div>\n" }]
88
+ }], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
89
+ type: Inject,
90
+ args: [MAT_DIALOG_DATA]
91
+ }] }, { type: i2.CourseService }, { type: i3.MatSnackBar }, { type: i1.MatDialog }] });
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLWRldGFpbHMtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1jb3Vyc2Uvc3JjL2xpYi9jb21wb25lbnRzL2NvdXJzZS1kZXRhaWxzLWRpYWxvZy9jb3Vyc2UtZGV0YWlscy1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLWRldGFpbHMtZGlhbG9nL2NvdXJzZS1kZXRhaWxzLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTFELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQVEsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7Ozs7O0FBaUJ2RCxNQUFNLE9BQU8sNEJBQTRCO0lBSXZD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dWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2csIE1hdERpYWxvZ0Nsb3NlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbmltcG9ydCB7IENvdXJzZURldGFpbCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ291cnNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGxhc3QsIHJlbW92ZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgRGV0YWlsSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL2RldGFpbC1pdGVtL2RldGFpbC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRTdGVwcGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc3RlcHBlcic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdERpdmlkZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncm9sYXRlY2gtY291cnNlLWRldGFpbHMtZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvdXJzZS1kZXRhaWxzLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvdXJzZS1kZXRhaWxzLWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBNYXREaXZpZGVyTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE1hdFN0ZXBwZXJNb2R1bGUsXG4gICAgRGV0YWlsSXRlbUNvbXBvbmVudCxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0RGlhbG9nQ2xvc2UsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIENvdXJzZURldGFpbHNEaWFsb2dDb21wb25lbnQge1xuICBjb3Vyc2VJZCE6IHN0cmluZztcbiAgZGV0YWlsczogQ291cnNlRGV0YWlsW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPENvdXJzZURldGFpbHNEaWFsb2dDb21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LFxuICAgIHByaXZhdGUgY291cnNlU2VydmljZTogQ291cnNlU2VydmljZSxcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICApIHtcbiAgICB0aGlzLmNvdXJzZUlkID0gZGF0YS5jb3Vyc2VJZDtcbiAgfVxuICBjbG9zZSgpIHtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICB9XG4gIGFkZERldGFpbCgpIHtcbiAgICB0aGlzLmNvdXJzZVNlcnZpY2VcbiAgICAgIC5hZGREZXRhaWwodGhpcy5jb3Vyc2VJZCwge1xuICAgICAgICB0aXRsZTogJycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgY29udGVudDogJycsXG4gICAgICAgIG1lZGlhOiBbXSxcbiAgICAgIH0pXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgZGV0YWlsID0gcmVzLmRhdGE7XG4gICAgICAgICAgdGhpcy5kZXRhaWxzLnB1c2goe1xuICAgICAgICAgICAgaWQ6IGRldGFpbC5pZCxcbiAgICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgICAgIGNvbnRlbnQ6ICcnLFxuICAgICAgICAgICAgbWVkaWE6IFtdLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGUpID0+IHtcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oZS5tZXNzYWdlKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG4gIG9uRGV0YWlsTWVkaWFVcGxvYWQoZXZlbnQ6IGFueSkge31cbiAgb25EZXRhaWxNZWRpYURlbGV0ZShldmVudDogYW55KSB7fVxuICBvbkRldGFpbFNhdmUoZXZlbnQ6IGFueSkge31cbiAgb25EZXRhaWxEZWxldGUoZGV0YWlsOiBDb3Vyc2VEZXRhaWwpIHtcbiAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZGVsZXRlRGV0YWlsKHRoaXMuY291cnNlSWQsIGRldGFpbC5pZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4ocmVzLmRhdGEpO1xuICAgICAgICByZW1vdmUodGhpcy5kZXRhaWxzLCB7XG4gICAgICAgICAgaWQ6IGRldGFpbC5pZCxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlKSA9PiB7XG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlLm1lc3NhZ2UpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaC1mdWxsIG92ZXJmbG93LWhpZGRlblwiPlxuICA8ZGl2IGNsYXNzPVwiaC0xNiBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgcHgtNVwiPlxuICAgIEBpZiAoZGF0YS50aXRsZSkge1xuICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgZm9udC1tZWRpdW1cIj57eyBkYXRhLnRpdGxlIH19PC9kaXY+XG4gICAgfVxuICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJjbG9zZSgpXCI+XG4gICAgICA8bWF0LWljb24gZm9udEljb249XCJjbG9zZVwiPjwvbWF0LWljb24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgPGRpdiBjbGFzcz1cImZsZXgtMSBvdmVyZmxvdy1oaWRkZW4gbXQtMyBvdmVyZmxvdy15LWF1dG9cIj5cbiAgICA8Zm9ybSAjZGV0YWlsRm9ybT1cIm5nRm9ybVwiIGNsYXNzPVwicC0zXCI+XG4gICAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPuivpuaDhTwvbmctdGVtcGxhdGU+XG4gICAgICBAZm9yIChpdGVtIG9mIGRldGFpbHM7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgPHJvbGF0ZWNoLWRldGFpbC1pdGVtXG4gICAgICAgICAgW2RldGFpbF09XCJpdGVtXCJcbiAgICAgICAgICAodXBsb2FkKT1cIm9uRGV0YWlsTWVkaWFVcGxvYWQoJGV2ZW50KVwiXG4gICAgICAgICAgKGRlbGV0ZU1lZGlhKT1cIm9uRGV0YWlsTWVkaWFEZWxldGUoJGV2ZW50KVwiXG4gICAgICAgICAgKHNhdmUpPVwib25EZXRhaWxTYXZlKCRldmVudClcIlxuICAgICAgICAgIChkZWxldGUpPVwib25EZXRhaWxEZWxldGUoJGV2ZW50KVwiXG4gICAgICAgID48L3JvbGF0ZWNoLWRldGFpbC1pdGVtPlxuICAgICAgfVxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTZcIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJhZGREZXRhaWwoKVwiPlxuICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICAgICAgICAgIDxzcGFuPuWinuWKoOivpuaDhTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+XG4gIDwvZGl2PlxuICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgPGRpdiBjbGFzcz1cImgtMTYgZmxleCBqdXN0aWZ5LWVuZCBpdGVtcy1jZW50ZXIgcHgtNVwiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0LWRpYWxvZy1jbG9zZV09XCJ0cnVlXCIgY2RrRm9jdXNJbml0aWFsPuS/neWtmDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,233 @@
1
+ import { CategoryService, CourseService } from '../../services';
2
+ import { Component, Inject, viewChild } from '@angular/core';
3
+ import { MatDialog, MatDialogRef, MAT_DIALOG_DATA, MatDialogClose } from '@angular/material/dialog';
4
+ import { ScheduleDate } from '../../interfaces';
5
+ import { MatStepper, MatStepperModule } from '@angular/material/stepper';
6
+ import { MatSnackBar } from '@angular/material/snack-bar';
7
+ import { findLastIndex, remove } from 'lodash';
8
+ import { ScheduleItemComponent } from '../schedule-item/schedule-item.component';
9
+ import { PricingItemComponent } from '../pricing-item/pricing-item.component';
10
+ import { MatButtonModule } from '@angular/material/button';
11
+ import { DetailItemComponent } from '../detail-item/detail-item.component';
12
+ import { MatOptionModule } from '@angular/material/core';
13
+ import { MatSelectModule } from '@angular/material/select';
14
+ import { TextFieldModule } from '@angular/cdk/text-field';
15
+ import { MatInputModule } from '@angular/material/input';
16
+ import { MatFormFieldModule } from '@angular/material/form-field';
17
+ import { FormsModule } from '@angular/forms';
18
+ import { MatDividerModule } from '@angular/material/divider';
19
+ import { MatIconModule } from '@angular/material/icon';
20
+ import { MediaListComponent, MediaListItemComponent, MediaPreviewDialogComponent } from '@rolatech/angular-components';
21
+ import * as i0 from "@angular/core";
22
+ import * as i1 from "@angular/material/dialog";
23
+ import * as i2 from "../../services";
24
+ import * as i3 from "@angular/material/snack-bar";
25
+ import * as i4 from "@angular/material/icon";
26
+ import * as i5 from "@angular/material/divider";
27
+ import * as i6 from "@angular/material/stepper";
28
+ import * as i7 from "@angular/forms";
29
+ import * as i8 from "@angular/material/form-field";
30
+ import * as i9 from "@angular/material/input";
31
+ import * as i10 from "@angular/cdk/text-field";
32
+ import * as i11 from "@angular/material/select";
33
+ import * as i12 from "@angular/material/core";
34
+ import * as i13 from "@angular/material/button";
35
+ export class CourseEditDialogComponent {
36
+ constructor(dialogRef, data, categoryService, courseService, snackBar, dialog) {
37
+ this.dialogRef = dialogRef;
38
+ this.data = data;
39
+ this.categoryService = categoryService;
40
+ this.courseService = courseService;
41
+ this.snackBar = snackBar;
42
+ this.dialog = dialog;
43
+ this.isUploading = false;
44
+ this.courseType = [
45
+ {
46
+ key: 'ONLINE',
47
+ value: '线上',
48
+ },
49
+ {
50
+ key: 'OFFLINE',
51
+ value: '线下',
52
+ },
53
+ {
54
+ key: 'MIXED',
55
+ value: '混合',
56
+ },
57
+ ];
58
+ this.date = ScheduleDate;
59
+ this.lastStepper = false;
60
+ this.firstStepper = true;
61
+ this.stepper = viewChild.required(MatStepper);
62
+ this.course = data.course;
63
+ this.classrooms = data.classrooms;
64
+ }
65
+ ngOnInit() {
66
+ this.categoryService.find({}).subscribe({
67
+ next: (res) => {
68
+ this.categories = res.data;
69
+ },
70
+ });
71
+ }
72
+ close() {
73
+ this.dialogRef.close();
74
+ }
75
+ compareFn(o1, o2) {
76
+ return o1.id === o2.id;
77
+ }
78
+ addDetail() {
79
+ if (!this.course.details) {
80
+ this.course.details = [];
81
+ }
82
+ this.courseService
83
+ .addDetail(this.course.id, {
84
+ title: '',
85
+ description: '',
86
+ content: '',
87
+ media: [],
88
+ })
89
+ .subscribe({
90
+ next: (res) => {
91
+ const detail = res.data;
92
+ this.course.details.push({
93
+ id: detail.id,
94
+ title: '',
95
+ description: '',
96
+ content: '',
97
+ media: [],
98
+ });
99
+ },
100
+ error: (e) => {
101
+ this.snackBar.open(e.message);
102
+ },
103
+ });
104
+ }
105
+ addSchedule() {
106
+ if (!this.course.schedule) {
107
+ this.course.schedule = [];
108
+ }
109
+ this.course.schedule.push({
110
+ title: '',
111
+ content: '',
112
+ });
113
+ }
114
+ addPricing() {
115
+ if (!this.course.pricing) {
116
+ this.course.pricing = [];
117
+ }
118
+ this.course.pricing.push({
119
+ min: 0,
120
+ max: 0,
121
+ total: 0,
122
+ });
123
+ }
124
+ onSelectionChange(event) {
125
+ this.selectedCategoyIds = event.value;
126
+ }
127
+ onStepperChange(event) {
128
+ this.lastStepper = event.selectedIndex === 3;
129
+ this.firstStepper = event.selectedIndex === 0;
130
+ }
131
+ previous() {
132
+ this.stepper().previous();
133
+ }
134
+ next() {
135
+ this.stepper().next();
136
+ }
137
+ onDetailMediaUpload(event) { }
138
+ onDetailMediaDelete(event) { }
139
+ onDetailSave(event) { }
140
+ onDetailDelete(detail) {
141
+ this.courseService.deleteDetail(this.course.id, detail.id).subscribe({
142
+ next: (res) => {
143
+ this.snackBar.open(res.message);
144
+ remove(this.details, {
145
+ id: detail.id,
146
+ });
147
+ },
148
+ error: (e) => {
149
+ this.snackBar.open(e.message);
150
+ },
151
+ });
152
+ }
153
+ onImageClick(i) {
154
+ const dialogRef = this.dialog.open(MediaPreviewDialogComponent, {
155
+ maxWidth: '80vw',
156
+ maxHeight: '80vh',
157
+ height: '80%',
158
+ width: '80%',
159
+ panelClass: 'full-screen-modal',
160
+ data: {
161
+ media: this.course.media,
162
+ selected: i,
163
+ },
164
+ });
165
+ }
166
+ onUpload(event) {
167
+ const file = event.target.files[0];
168
+ if (file) {
169
+ const reader = new FileReader();
170
+ reader.readAsDataURL(file);
171
+ reader.onload = () => {
172
+ if (this.course.media) {
173
+ this.course.media.push({
174
+ url: reader.result,
175
+ alt: 'upload image',
176
+ });
177
+ }
178
+ else {
179
+ this.course.media = [];
180
+ this.course.media.push({
181
+ url: reader.result,
182
+ alt: 'upload image',
183
+ });
184
+ }
185
+ this.isUploading = true;
186
+ const formData = new FormData();
187
+ formData.append('file', file);
188
+ this.courseService.upload(formData).subscribe({
189
+ next: (res) => {
190
+ this.isUploading = false;
191
+ const index = findLastIndex(this.course.media);
192
+ // Replace item at index using native splice
193
+ this.course.media.splice(index, 1, res.data);
194
+ },
195
+ error: (e) => {
196
+ this.isUploading = false;
197
+ this.snackBar.open('上传失败: ' + e.message);
198
+ },
199
+ });
200
+ };
201
+ reader.onerror = (error) => {
202
+ this.isUploading = false;
203
+ };
204
+ }
205
+ }
206
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CourseEditDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.CategoryService }, { token: i2.CourseService }, { token: i3.MatSnackBar }, { token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
207
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: CourseEditDialogComponent, isStandalone: true, selector: "rolatech-course-edit-dialog", viewQueries: [{ propertyName: "stepper", first: true, predicate: MatStepper, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"flex flex-col h-full overflow-hidden\">\n <div class=\"h-16 flex justify-between items-center px-5\">\n @if (data.title) {\n <div class=\"text-md font-medium\">{{ data.title }}</div>\n }\n <div class=\"cursor-pointer\" (click)=\"close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"flex-1 overflow-hidden mt-3 overflow-y-auto\">\n <mat-stepper #stepper (selectionChange)=\"onStepperChange($event)\">\n <mat-step [editable]=\"true\">\n <form #infoForm=\"ngForm\" class=\"py-3\">\n <ng-template matStepLabel>\u57FA\u672C\u4FE1\u606F</ng-template>\n <div class=\"flex flex-col\">\n <mat-form-field appearance=\"fill\">\n <mat-label> \u8BFE\u7A0B\u540D\u79F0 </mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"course.name\" name=\"name\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label> \u8BFE\u7A0B\u63CF\u8FF0 </mat-label>\n <textarea\n matInput\n type=\"text\"\n [(ngModel)]=\"course.description\"\n name=\"description\"\n required\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"3\"\n ></textarea>\n </mat-form-field>\n <mat-form-field appearance=\"fill\" ngModelGroup=\"categories\">\n <mat-label>\u5206\u7C7B</mat-label>\n <mat-select\n multiple\n name=\"id\"\n [compareWith]=\"compareFn\"\n [(ngModel)]=\"course.categories\"\n #select=\"matSelect\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n @for (item of categories; track item) {\n <mat-option [value]=\"item\">\n {{ item.name }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label>\u7C7B\u578B</mat-label>\n <mat-select name=\"type\" [(ngModel)]=\"course.type\">\n @for (item of courseType; track item) {\n <mat-option [value]=\"item.key\">\n {{ item.value }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n @if (course.type.toString() !== 'ONLINE') {\n <mat-form-field appearance=\"fill\" ngModelGroup=\"classroom\">\n <mat-label>\u6559\u5BA4</mat-label>\n <mat-select [(ngModel)]=\"course.classroom\" name=\"id\">\n @for (classroom of classrooms; track classroom) {\n <mat-option [value]=\"classroom.id\">\n <div class=\"flex gap-3\">\n <span>{{ classroom.name }}</span>\n <span> {{ classroom.address }}</span>\n </div>\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n </div>\n <div>\n <div class=\"py-3\">\n <h2>\u56FE\u7247\u4FE1\u606F</h2>\n </div>\n <rolatech-media-list (upload)=\"onUpload($event)\" [isUploading]=\"isUploading\">\n @for (item of course.media; track item; let i = $index) {\n <rolatech-media-list-item [media]=\"item\" (mediaItemClick)=\"onImageClick(i)\"></rolatech-media-list-item>\n }\n </rolatech-media-list>\n </div>\n </form>\n </mat-step>\n <mat-step [editable]=\"true\">\n <form #detailForm=\"ngForm\" class=\"py-3\">\n <ng-template matStepLabel>\u8BE6\u60C5</ng-template>\n @for (item of course.details; track item) {\n <rolatech-detail-item\n [detail]=\"item\"\n (upload)=\"onDetailMediaUpload($event)\"\n (deleteMedia)=\"onDetailMediaDelete($event)\"\n (save)=\"onDetailSave($event)\"\n (delete)=\"onDetailDelete($event)\"\n ></rolatech-detail-item>\n }\n <div class=\"mb-6\">\n <button mat-button (click)=\"addDetail()\">\n <mat-icon>add</mat-icon>\n <span>\u589E\u52A0\u8BE6\u60C5</span>\n </button>\n </div>\n </form>\n </mat-step>\n <mat-step [editable]=\"true\">\n <form #pricingForm=\"ngForm\" class=\"py-3\">\n <ng-template matStepLabel>\u4EF7\u683C</ng-template>\n <div>\n @for (item of course.pricing; track item) {\n <rolatech-pricing-item [pricing]=\"item\"> </rolatech-pricing-item>\n }\n <div class=\"mb-6\">\n <button mat-button (click)=\"addPricing()\">\n <mat-icon>add</mat-icon>\n <span>\u589E\u52A0\u4EF7\u683C</span>\n </button>\n </div>\n </div>\n </form>\n </mat-step>\n <mat-step>\n <form #scheduleForm=\"ngForm\">\n <ng-template matStepLabel>\u8BFE\u8868</ng-template>\n <div class=\"flex flex-col\">\n @for (item of course.schedule; track item) {\n <rolatech-schedule-item [value]=\"item\"></rolatech-schedule-item>\n }\n <div class=\"mb-6\">\n <button mat-button (click)=\"addSchedule()\">\n <mat-icon>add</mat-icon>\n <span>\u589E\u52A0\u8BFE\u8868</span>\n </button>\n </div>\n </div>\n </form>\n </mat-step>\n </mat-stepper>\n </div>\n <mat-divider></mat-divider>\n <div class=\"h-16 flex justify-end items-center px-5\">\n @if (!firstStepper) {\n <button mat-button mat-button (click)=\"previous()\">\u4E0A\u4E00\u6B65</button>\n }\n @if (!lastStepper) {\n <button mat-button (click)=\"next()\">\u4E0B\u4E00\u6B65</button>\n }\n @if (lastStepper) {\n <button mat-button [mat-dialog-close]=\"course\" cdkFocusInitial>\u4FDD\u5B58</button>\n }\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatStepperModule }, { kind: "component", type: i6.MatStep, selector: "mat-step", inputs: ["color"], exportAs: ["matStep"] }, { kind: "directive", type: i6.MatStepLabel, selector: "[matStepLabel]" }, { kind: "component", type: i6.MatStepper, selector: "mat-stepper, mat-vertical-stepper, mat-horizontal-stepper, [matStepper]", inputs: ["disableRipple", "color", "labelPosition", "headerPosition", "animationDuration"], outputs: ["animationDone"], exportAs: ["matStepper", "matVerticalStepper", "matHorizontalStepper"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.NgModelGroup, selector: "[ngModelGroup]", inputs: ["ngModelGroup"], exportAs: ["ngModelGroup"] }, { kind: "directive", type: i7.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i10.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "ngmodule", type: TextFieldModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i11.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i12.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatOptionModule }, { 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: DetailItemComponent, selector: "rolatech-detail-item", inputs: ["isUploading", "detail", "shadow", "actions", "selectMedia"], outputs: ["upload", "delete", "save", "deleteMedia"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i13.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: PricingItemComponent, selector: "rolatech-pricing-item", inputs: ["actions", "shadow", "pricing"], outputs: ["pricingChange", "delete", "save"] }, { kind: "component", type: ScheduleItemComponent, selector: "rolatech-schedule-item", inputs: ["value", "actions", "shadow"], outputs: ["delete", "save"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }] }); }
208
+ }
209
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CourseEditDialogComponent, decorators: [{
210
+ type: Component,
211
+ args: [{ selector: 'rolatech-course-edit-dialog', standalone: true, imports: [
212
+ MatIconModule,
213
+ MatDividerModule,
214
+ MatStepperModule,
215
+ FormsModule,
216
+ MatFormFieldModule,
217
+ MatInputModule,
218
+ TextFieldModule,
219
+ MatSelectModule,
220
+ MatOptionModule,
221
+ MediaListComponent,
222
+ MediaListItemComponent,
223
+ DetailItemComponent,
224
+ MatButtonModule,
225
+ PricingItemComponent,
226
+ ScheduleItemComponent,
227
+ MatDialogClose,
228
+ ], template: "<div class=\"flex flex-col h-full overflow-hidden\">\n <div class=\"h-16 flex justify-between items-center px-5\">\n @if (data.title) {\n <div class=\"text-md font-medium\">{{ data.title }}</div>\n }\n <div class=\"cursor-pointer\" (click)=\"close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"flex-1 overflow-hidden mt-3 overflow-y-auto\">\n <mat-stepper #stepper (selectionChange)=\"onStepperChange($event)\">\n <mat-step [editable]=\"true\">\n <form #infoForm=\"ngForm\" class=\"py-3\">\n <ng-template matStepLabel>\u57FA\u672C\u4FE1\u606F</ng-template>\n <div class=\"flex flex-col\">\n <mat-form-field appearance=\"fill\">\n <mat-label> \u8BFE\u7A0B\u540D\u79F0 </mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"course.name\" name=\"name\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label> \u8BFE\u7A0B\u63CF\u8FF0 </mat-label>\n <textarea\n matInput\n type=\"text\"\n [(ngModel)]=\"course.description\"\n name=\"description\"\n required\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"3\"\n ></textarea>\n </mat-form-field>\n <mat-form-field appearance=\"fill\" ngModelGroup=\"categories\">\n <mat-label>\u5206\u7C7B</mat-label>\n <mat-select\n multiple\n name=\"id\"\n [compareWith]=\"compareFn\"\n [(ngModel)]=\"course.categories\"\n #select=\"matSelect\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n @for (item of categories; track item) {\n <mat-option [value]=\"item\">\n {{ item.name }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label>\u7C7B\u578B</mat-label>\n <mat-select name=\"type\" [(ngModel)]=\"course.type\">\n @for (item of courseType; track item) {\n <mat-option [value]=\"item.key\">\n {{ item.value }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n @if (course.type.toString() !== 'ONLINE') {\n <mat-form-field appearance=\"fill\" ngModelGroup=\"classroom\">\n <mat-label>\u6559\u5BA4</mat-label>\n <mat-select [(ngModel)]=\"course.classroom\" name=\"id\">\n @for (classroom of classrooms; track classroom) {\n <mat-option [value]=\"classroom.id\">\n <div class=\"flex gap-3\">\n <span>{{ classroom.name }}</span>\n <span> {{ classroom.address }}</span>\n </div>\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n </div>\n <div>\n <div class=\"py-3\">\n <h2>\u56FE\u7247\u4FE1\u606F</h2>\n </div>\n <rolatech-media-list (upload)=\"onUpload($event)\" [isUploading]=\"isUploading\">\n @for (item of course.media; track item; let i = $index) {\n <rolatech-media-list-item [media]=\"item\" (mediaItemClick)=\"onImageClick(i)\"></rolatech-media-list-item>\n }\n </rolatech-media-list>\n </div>\n </form>\n </mat-step>\n <mat-step [editable]=\"true\">\n <form #detailForm=\"ngForm\" class=\"py-3\">\n <ng-template matStepLabel>\u8BE6\u60C5</ng-template>\n @for (item of course.details; track item) {\n <rolatech-detail-item\n [detail]=\"item\"\n (upload)=\"onDetailMediaUpload($event)\"\n (deleteMedia)=\"onDetailMediaDelete($event)\"\n (save)=\"onDetailSave($event)\"\n (delete)=\"onDetailDelete($event)\"\n ></rolatech-detail-item>\n }\n <div class=\"mb-6\">\n <button mat-button (click)=\"addDetail()\">\n <mat-icon>add</mat-icon>\n <span>\u589E\u52A0\u8BE6\u60C5</span>\n </button>\n </div>\n </form>\n </mat-step>\n <mat-step [editable]=\"true\">\n <form #pricingForm=\"ngForm\" class=\"py-3\">\n <ng-template matStepLabel>\u4EF7\u683C</ng-template>\n <div>\n @for (item of course.pricing; track item) {\n <rolatech-pricing-item [pricing]=\"item\"> </rolatech-pricing-item>\n }\n <div class=\"mb-6\">\n <button mat-button (click)=\"addPricing()\">\n <mat-icon>add</mat-icon>\n <span>\u589E\u52A0\u4EF7\u683C</span>\n </button>\n </div>\n </div>\n </form>\n </mat-step>\n <mat-step>\n <form #scheduleForm=\"ngForm\">\n <ng-template matStepLabel>\u8BFE\u8868</ng-template>\n <div class=\"flex flex-col\">\n @for (item of course.schedule; track item) {\n <rolatech-schedule-item [value]=\"item\"></rolatech-schedule-item>\n }\n <div class=\"mb-6\">\n <button mat-button (click)=\"addSchedule()\">\n <mat-icon>add</mat-icon>\n <span>\u589E\u52A0\u8BFE\u8868</span>\n </button>\n </div>\n </div>\n </form>\n </mat-step>\n </mat-stepper>\n </div>\n <mat-divider></mat-divider>\n <div class=\"h-16 flex justify-end items-center px-5\">\n @if (!firstStepper) {\n <button mat-button mat-button (click)=\"previous()\">\u4E0A\u4E00\u6B65</button>\n }\n @if (!lastStepper) {\n <button mat-button (click)=\"next()\">\u4E0B\u4E00\u6B65</button>\n }\n @if (lastStepper) {\n <button mat-button [mat-dialog-close]=\"course\" cdkFocusInitial>\u4FDD\u5B58</button>\n }\n </div>\n</div>\n" }]
229
+ }], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
230
+ type: Inject,
231
+ args: [MAT_DIALOG_DATA]
232
+ }] }, { type: i2.CategoryService }, { type: i2.CourseService }, { type: i3.MatSnackBar }, { type: i1.MatDialog }] });
233
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLWVkaXQtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1jb3Vyc2Uvc3JjL2xpYi9jb21wb25lbnRzL2NvdXJzZS1lZGl0LWRpYWxvZy9jb3Vyc2UtZWRpdC1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLWVkaXQtZGlhbG9nL2NvdXJzZS1lZGl0LWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEcsT0FBTyxFQUFnQyxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM5RSxPQUFPLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFekUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFP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Q25CLGVBQWUsNk5BQ2Ysb0JBQW9CLDBKQUNwQixxQkFBcUIsd0lBQ3JCLGNBQWM7OzJGQUdMLHlCQUF5QjtrQkF4QnJDLFNBQVM7K0JBQ0UsNkJBQTZCLGNBRzNCLElBQUksV0FDUDt3QkFDUCxhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsZ0JBQWdCO3dCQUNoQixXQUFXO3dCQUNYLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixrQkFBa0I7d0JBQ2xCLHNCQUFzQjt3QkFDdEIsbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLG9CQUFvQjt3QkFDcEIscUJBQXFCO3dCQUNyQixjQUFjO3FCQUNmOzswQkFpQ0UsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2F0ZWdvcnlTZXJ2aWNlLCBDb3Vyc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uSW5pdCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dDbG9zZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBDb3Vyc2VDYXRlZ29yeSwgQ291cnNlRGV0YWlsLCBTY2hlZHVsZURhdGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1hdFN0ZXBwZXIsIE1hdFN0ZXBwZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zdGVwcGVyJztcbmltcG9ydCB7IGxhc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbmltcG9ydCB7IGZpbmRMYXN0SW5kZXgsIHJlbW92ZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBTY2hlZHVsZUl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9zY2hlZHVsZS1pdGVtL3NjaGVkdWxlLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IFByaWNpbmdJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vcHJpY2luZy1pdGVtL3ByaWNpbmctaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IERldGFpbEl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9kZXRhaWwtaXRlbS9kZXRhaWwtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0T3B0aW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgVGV4dEZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RleHQtZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0RGl2aWRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXInO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuXG5pbXBvcnQgeyBNZWRpYUxpc3RDb21wb25lbnQsIE1lZGlhTGlzdEl0ZW1Db21wb25lbnQsIE1lZGlhUHJldmlld0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJ0Byb2xhdGVjaC9hbmd1bGFyLWNvbXBvbmVudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyb2xhdGVjaC1jb3Vyc2UtZWRpdC1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vY291cnNlLWVkaXQtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY291cnNlLWVkaXQtZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdERpdmlkZXJNb2R1bGUsXG4gICAgTWF0U3RlcHBlck1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgVGV4dEZpZWxkTW9kdWxlLFxuICAgIE1hdFNlbGVjdE1vZHVsZSxcbiAgICBNYXRPcHRpb25Nb2R1bGUsXG4gICAgTWVkaWFMaXN0Q29tcG9uZW50LFxuICAgIE1lZGlhTGlzdEl0ZW1Db21wb25lbnQsXG4gICAgRGV0YWlsSXRlbUNvbXBvbmVudCxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgUHJpY2luZ0l0ZW1Db21wb25lbnQsXG4gICAgU2NoZWR1bGVJdGVtQ29tcG9uZW50LFxuICAgIE1hdERpYWxvZ0Nsb3NlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDb3Vyc2VFZGl0RGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY291cnNlOiBhbnk7XG4gIGlzVXBsb2FkaW5nID0gZmFsc2U7XG4gIGRldGFpbHM6IGFueTtcbiAgcHJpY2luZzogYW55O1xuICBzY2hlZHVsZTogYW55O1xuICBjb3Vyc2VUeXBlID0gW1xuICAgIHtcbiAgICAgIGtleTogJ09OTElORScsXG4gICAgICB2YWx1ZTogJ+e6v+S4iicsXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdPRkZMSU5FJyxcbiAgICAgIHZhbHVlOiAn57q/5LiLJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ01JWEVEJyxcbiAgICAgIHZhbHVlOiAn5re35ZCIJyxcbiAgICB9LFxuICBdO1xuICBzZWxlY3RlZENhdGVnb3lJZHMhOiBzdHJpbmdbXTtcbiAgY2F0ZWdvcmllcyE6IENvdXJzZUNhdGVnb3J5W107XG4gIHNlbGVjdGVkQ2F0ZWdvcnkhOiBDb3Vyc2VDYXRlZ29yeTtcbiAgY2xhc3Nyb29tczogYW55O1xuICBkYXRlID0gU2NoZWR1bGVEYXRlO1xuICBsYXN0U3RlcHBlciA9IGZhbHNlO1xuICBmaXJzdFN0ZXBwZXIgPSB0cnVlO1xuICBzdGVwcGVyID0gdmlld0NoaWxkLnJlcXVpcmVkKE1hdFN0ZXBwZXIpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8Q291cnNlRWRpdERpYWxvZ0NvbXBvbmVudD4sXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksXG4gICAgcHJpdmF0ZSBjYXRlZ29yeVNlcnZpY2U6IENhdGVnb3J5U2VydmljZSxcbiAgICBwcml2YXRlIGNvdXJzZVNlcnZpY2U6IENvdXJzZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgKSB7XG4gICAgdGhpcy5jb3Vyc2UgPSBkYXRhLmNvdXJzZTtcbiAgICB0aGlzLmNsYXNzcm9vbXMgPSBkYXRhLmNsYXNzcm9vbXM7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNhdGVnb3J5U2VydmljZS5maW5kKHt9KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllcyA9IHJlcy5kYXRhO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cbiAgY29tcGFyZUZuKG8xOiBhbnksIG8yOiBhbnkpIHtcbiAgICByZXR1cm4gbzEuaWQgPT09IG8yLmlkO1xuICB9XG4gIGFkZERldGFpbCgpIHtcbiAgICBpZiAoIXRoaXMuY291cnNlLmRldGFpbHMpIHtcbiAgICAgIHRoaXMuY291cnNlLmRldGFpbHMgPSBbXTtcbiAgICB9XG4gICAgdGhpcy5jb3Vyc2VTZXJ2aWNlXG4gICAgICAuYWRkRGV0YWlsKHRoaXMuY291cnNlLmlkLCB7XG4gICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgICBjb250ZW50OiAnJyxcbiAgICAgICAgbWVkaWE6IFtdLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBkZXRhaWwgPSByZXMuZGF0YTtcbiAgICAgICAgICB0aGlzLmNvdXJzZS5kZXRhaWxzLnB1c2goe1xuICAgICAgICAgICAgaWQ6IGRldGFpbC5pZCxcbiAgICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgICAgIGNvbnRlbnQ6ICcnLFxuICAgICAgICAgICAgbWVkaWE6IFtdLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGUpID0+IHtcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oZS5tZXNzYWdlKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG4gIGFkZFNjaGVkdWxlKCkge1xuICAgIGlmICghdGhpcy5jb3Vyc2Uuc2NoZWR1bGUpIHtcbiAgICAgIHRoaXMuY291cnNlLnNjaGVkdWxlID0gW107XG4gICAgfVxuICAgIHRoaXMuY291cnNlLnNjaGVkdWxlLnB1c2goe1xuICAgICAgdGl0bGU6ICcnLFxuICAgICAgY29udGVudDogJycsXG4gICAgfSk7XG4gIH1cbiAgYWRkUHJpY2luZygpIHtcbiAgICBpZiAoIXRoaXMuY291cnNlLnByaWNpbmcpIHtcbiAgICAgIHRoaXMuY291cnNlLnByaWNpbmcgPSBbXTtcbiAgICB9XG4gICAgdGhpcy5jb3Vyc2UucHJpY2luZy5wdXNoKHtcbiAgICAgIG1pbjogMCxcbiAgICAgIG1heDogMCxcbiAgICAgIHRvdGFsOiAwLFxuICAgIH0pO1xuICB9XG4gIG9uU2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdveUlkcyA9IGV2ZW50LnZhbHVlO1xuICB9XG4gIG9uU3RlcHBlckNoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5sYXN0U3RlcHBlciA9IGV2ZW50LnNlbGVjdGVkSW5kZXggPT09IDM7XG4gICAgdGhpcy5maXJzdFN0ZXBwZXIgPSBldmVudC5zZWxlY3RlZEluZGV4ID09PSAwO1xuICB9XG4gIHByZXZpb3VzKCkge1xuICAgIHRoaXMuc3RlcHBlcigpLnByZXZpb3VzKCk7XG4gIH1cbiAgbmV4dCgpIHtcbiAgICB0aGlzLnN0ZXBwZXIoKS5uZXh0KCk7XG4gIH1cbiAgb25EZXRhaWxNZWRpYVVwbG9hZChldmVudDogYW55KSB7fVxuICBvbkRldGFpbE1lZGlhRGVsZXRlKGV2ZW50OiBhbnkpIHt9XG4gIG9uRGV0YWlsU2F2ZShldmVudDogYW55KSB7fVxuICBvbkRldGFpbERlbGV0ZShkZXRhaWw6IENvdXJzZURldGFpbCkge1xuICAgIHRoaXMuY291cnNlU2VydmljZS5kZWxldGVEZXRhaWwodGhpcy5jb3Vyc2UuaWQsIGRldGFpbC5pZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4ocmVzLm1lc3NhZ2UpO1xuICAgICAgICByZW1vdmUodGhpcy5kZXRhaWxzLCB7XG4gICAgICAgICAgaWQ6IGRldGFpbC5pZCxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlKSA9PiB7XG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlLm1lc3NhZ2UpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICBvbkltYWdlQ2xpY2soaTogYW55KSB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihNZWRpYVByZXZpZXdEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIG1heFdpZHRoOiAnODB2dycsXG4gICAgICBtYXhIZWlnaHQ6ICc4MHZoJyxcbiAgICAgIGhlaWdodDogJzgwJScsXG4gICAgICB3aWR0aDogJzgwJScsXG4gICAgICBwYW5lbENsYXNzOiAnZnVsbC1zY3JlZW4tbW9kYWwnLFxuICAgICAgZGF0YToge1xuICAgICAgICBtZWRpYTogdGhpcy5jb3Vyc2UubWVkaWEsXG4gICAgICAgIHNlbGVjdGVkOiBpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICBvblVwbG9hZChldmVudDogYW55KSB7XG4gICAgY29uc3QgZmlsZSA9IGV2ZW50LnRhcmdldC5maWxlc1swXTtcbiAgICBpZiAoZmlsZSkge1xuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY291cnNlLm1lZGlhKSB7XG4gICAgICAgICAgKHRoaXMuY291cnNlLm1lZGlhIGFzIGFueSkucHVzaCh7XG4gICAgICAgICAgICB1cmw6IHJlYWRlci5yZXN1bHQsXG4gICAgICAgICAgICBhbHQ6ICd1cGxvYWQgaW1hZ2UnLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY291cnNlLm1lZGlhID0gW107XG4gICAgICAgICAgKHRoaXMuY291cnNlLm1lZGlhIGFzIGFueSkucHVzaCh7XG4gICAgICAgICAgICB1cmw6IHJlYWRlci5yZXN1bHQsXG4gICAgICAgICAgICBhbHQ6ICd1cGxvYWQgaW1hZ2UnLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc1VwbG9hZGluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUpO1xuXG4gICAgICAgIHRoaXMuY291cnNlU2VydmljZS51cGxvYWQoZm9ybURhdGEpLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzVXBsb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGZpbmRMYXN0SW5kZXgodGhpcy5jb3Vyc2UubWVkaWEpO1xuICAgICAgICAgICAgLy8gUmVwbGFjZSBpdGVtIGF0IGluZGV4IHVzaW5nIG5hdGl2ZSBzcGxpY2VcbiAgICAgICAgICAgIHRoaXMuY291cnNlLm1lZGlhLnNwbGljZShpbmRleCwgMSwgcmVzLmRhdGEpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNVcGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3Blbign5LiK5Lyg5aSx6LSlOiAnICsgZS5tZXNzYWdlKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZWFkZXIub25lcnJvciA9IChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmlzVXBsb2FkaW5nID0gZmFsc2U7XG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaC1mdWxsIG92ZXJmbG93LWhpZGRlblwiPlxuICA8ZGl2IGNsYXNzPVwiaC0xNiBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgcHgtNVwiPlxuICAgIEBpZiAoZGF0YS50aXRsZSkge1xuICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgZm9udC1tZWRpdW1cIj57eyBkYXRhLnRpdGxlIH19PC9kaXY+XG4gICAgfVxuICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJjbG9zZSgpXCI+XG4gICAgICA8bWF0LWljb24gZm9udEljb249XCJjbG9zZVwiPjwvbWF0LWljb24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgPGRpdiBjbGFzcz1cImZsZXgtMSBvdmVyZmxvdy1oaWRkZW4gbXQtMyBvdmVyZmxvdy15LWF1dG9cIj5cbiAgICA8bWF0LXN0ZXBwZXIgI3N0ZXBwZXIgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblN0ZXBwZXJDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgPG1hdC1zdGVwIFtlZGl0YWJsZV09XCJ0cnVlXCI+XG4gICAgICAgIDxmb3JtICNpbmZvRm9ybT1cIm5nRm9ybVwiIGNsYXNzPVwicHktM1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWw+5Z+65pys5L+h5oGvPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbFwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJmaWxsXCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+IOivvueoi+WQjeensCA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJjb3Vyc2UubmFtZVwiIG5hbWU9XCJuYW1lXCIgcmVxdWlyZWQgLz5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cImZpbGxcIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD4g6K++56iL5o+P6L+wIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvdXJzZS5kZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgbmFtZT1cImRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgIGNka1RleHRhcmVhQXV0b3NpemVcbiAgICAgICAgICAgICAgICBjZGtBdXRvc2l6ZU1pblJvd3M9XCIzXCJcbiAgICAgICAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJmaWxsXCIgbmdNb2RlbEdyb3VwPVwiY2F0ZWdvcmllc1wiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPuWIhuexuzwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgbmFtZT1cImlkXCJcbiAgICAgICAgICAgICAgICBbY29tcGFyZVdpdGhdPVwiY29tcGFyZUZuXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvdXJzZS5jYXRlZ29yaWVzXCJcbiAgICAgICAgICAgICAgICAjc2VsZWN0PVwibWF0U2VsZWN0XCJcbiAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBjYXRlZ29yaWVzOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cImZpbGxcIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD7nsbvlnos8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgbmFtZT1cInR5cGVcIiBbKG5nTW9kZWwpXT1cImNvdXJzZS50eXBlXCI+XG4gICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBjb3Vyc2VUeXBlOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiaXRlbS5rZXlcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgaXRlbS52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIEBpZiAoY291cnNlLnR5cGUudG9TdHJpbmcoKSAhPT0gJ09OTElORScpIHtcbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJmaWxsXCIgbmdNb2RlbEdyb3VwPVwiY2xhc3Nyb29tXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD7mlZnlrqQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cImNvdXJzZS5jbGFzc3Jvb21cIiBuYW1lPVwiaWRcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGNsYXNzcm9vbSBvZiBjbGFzc3Jvb21zOyB0cmFjayBjbGFzc3Jvb20pIHtcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImNsYXNzcm9vbS5pZFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBjbGFzc3Jvb20ubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiB7eyBjbGFzc3Jvb20uYWRkcmVzcyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTNcIj5cbiAgICAgICAgICAgICAgPGgyPuWbvueJh+S/oeaBrzwvaDI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxyb2xhdGVjaC1tZWRpYS1saXN0ICh1cGxvYWQpPVwib25VcGxvYWQoJGV2ZW50KVwiIFtpc1VwbG9hZGluZ109XCJpc1VwbG9hZGluZ1wiPlxuICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGNvdXJzZS5tZWRpYTsgdHJhY2sgaXRlbTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICA8cm9sYXRlY2gtbWVkaWEtbGlzdC1pdGVtIFttZWRpYV09XCJpdGVtXCIgKG1lZGlhSXRlbUNsaWNrKT1cIm9uSW1hZ2VDbGljayhpKVwiPjwvcm9sYXRlY2gtbWVkaWEtbGlzdC1pdGVtPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3JvbGF0ZWNoLW1lZGlhLWxpc3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvbWF0LXN0ZXA+XG4gICAgICA8bWF0LXN0ZXAgW2VkaXRhYmxlXT1cInRydWVcIj5cbiAgICAgICAgPGZvcm0gI2RldGFpbEZvcm09XCJuZ0Zvcm1cIiBjbGFzcz1cInB5LTNcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPuivpuaDhTwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgQGZvciAoaXRlbSBvZiBjb3Vyc2UuZGV0YWlsczsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgPHJvbGF0ZWNoLWRldGFpbC1pdGVtXG4gICAgICAgICAgICAgIFtkZXRhaWxdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICh1cGxvYWQpPVwib25EZXRhaWxNZWRpYVVwbG9hZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGRlbGV0ZU1lZGlhKT1cIm9uRGV0YWlsTWVkaWFEZWxldGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChzYXZlKT1cIm9uRGV0YWlsU2F2ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGRlbGV0ZSk9XCJvbkRldGFpbERlbGV0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L3JvbGF0ZWNoLWRldGFpbC1pdGVtPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItNlwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJhZGREZXRhaWwoKVwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPHNwYW4+5aKe5Yqg6K+m5oOFPC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvbWF0LXN0ZXA+XG4gICAgICA8bWF0LXN0ZXAgW2VkaXRhYmxlXT1cInRydWVcIj5cbiAgICAgICAgPGZvcm0gI3ByaWNpbmdGb3JtPVwibmdGb3JtXCIgY2xhc3M9XCJweS0zXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD7ku7fmoLw8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICBAZm9yIChpdGVtIG9mIGNvdXJzZS5wcmljaW5nOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgICAgIDxyb2xhdGVjaC1wcmljaW5nLWl0ZW0gW3ByaWNpbmddPVwiaXRlbVwiPiA8L3JvbGF0ZWNoLXByaWNpbmctaXRlbT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi02XCI+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwiYWRkUHJpY2luZygpXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPHNwYW4+5aKe5Yqg5Lu35qC8PC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG4gICAgICA8L21hdC1zdGVwPlxuICAgICAgPG1hdC1zdGVwPlxuICAgICAgICA8Zm9ybSAjc2NoZWR1bGVGb3JtPVwibmdGb3JtXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD7or77ooag8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICBAZm9yIChpdGVtIG9mIGNvdXJzZS5zY2hlZHVsZTsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICA8cm9sYXRlY2gtc2NoZWR1bGUtaXRlbSBbdmFsdWVdPVwiaXRlbVwiPjwvcm9sYXRlY2gtc2NoZWR1bGUtaXRlbT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi02XCI+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwiYWRkU2NoZWR1bGUoKVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuPuWinuWKoOivvuihqDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgPC9tYXQtc3RlcD5cbiAgICA8L21hdC1zdGVwcGVyPlxuICA8L2Rpdj5cbiAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gIDxkaXYgY2xhc3M9XCJoLTE2IGZsZXgganVzdGlmeS1lbmQgaXRlbXMtY2VudGVyIHB4LTVcIj5cbiAgICBAaWYgKCFmaXJzdFN0ZXBwZXIpIHtcbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJwcmV2aW91cygpXCI+5LiK5LiA5q2lPC9idXR0b24+XG4gICAgfVxuICAgIEBpZiAoIWxhc3RTdGVwcGVyKSB7XG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cIm5leHQoKVwiPuS4i+S4gOatpTwvYnV0dG9uPlxuICAgIH1cbiAgICBAaWYgKGxhc3RTdGVwcGVyKSB7XG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdC1kaWFsb2ctY2xvc2VdPVwiY291cnNlXCIgY2RrRm9jdXNJbml0aWFsPuS/neWtmDwvYnV0dG9uPlxuICAgIH1cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,11 @@
1
+ import { Component } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class CoursePreviewComponent {
4
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CoursePreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.0", type: CoursePreviewComponent, isStandalone: true, selector: "rolatech-course-preview", ngImport: i0, template: "<p>course-preview works!</p>\n", styles: [""] }); }
6
+ }
7
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CoursePreviewComponent, decorators: [{
8
+ type: Component,
9
+ args: [{ selector: 'rolatech-course-preview', standalone: true, imports: [], template: "<p>course-preview works!</p>\n" }]
10
+ }] });
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLXByZXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXByZXZpZXcvY291cnNlLXByZXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXByZXZpZXcvY291cnNlLXByZXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFTMUMsTUFBTSxPQUFPLHNCQUFzQjs4R0FBdEIsc0JBQXNCO2tHQUF0QixzQkFBc0IsbUZDVG5DLGdDQUNBOzsyRkRRYSxzQkFBc0I7a0JBUGxDLFNBQVM7K0JBQ0UseUJBQXlCLGNBQ3ZCLElBQUksV0FDUCxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JvbGF0ZWNoLWNvdXJzZS1wcmV2aWV3JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW10sXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3Vyc2UtcHJldmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvdXJzZS1wcmV2aWV3LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIENvdXJzZVByZXZpZXdDb21wb25lbnQge31cbiIsIjxwPmNvdXJzZS1wcmV2aWV3IHdvcmtzITwvcD5cbiJdfQ==
@@ -0,0 +1,33 @@
1
+ import { Component, Inject } from '@angular/core';
2
+ import { MatDialogRef, MAT_DIALOG_DATA, MatDialogClose } from '@angular/material/dialog';
3
+ import { MatButtonModule } from '@angular/material/button';
4
+ import { PricingItemComponent } from '../pricing-item/pricing-item.component';
5
+ import { MatIconModule } from '@angular/material/icon';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/material/dialog";
8
+ import * as i2 from "@angular/material/icon";
9
+ import * as i3 from "@angular/material/button";
10
+ export class CoursePricingAddDialogComponent {
11
+ constructor(dialogRef, data) {
12
+ this.dialogRef = dialogRef;
13
+ this.data = data;
14
+ this.pricing = {
15
+ min: 0,
16
+ max: 0,
17
+ total: 0,
18
+ };
19
+ }
20
+ close() {
21
+ this.dialogRef.close();
22
+ }
23
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CoursePricingAddDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
24
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: CoursePricingAddDialogComponent, isStandalone: true, selector: "rolatech-course-pricing-add-dialog", ngImport: i0, template: "<div class=\"flex flex-col h-full overflow-hidden\">\n <div class=\"h-16 flex justify-between items-center px-5\">\n @if (data.title) {\n <div class=\"text-xl font-bold\">{{ data.title }}</div>\n }\n <div class=\"cursor-pointer\" (click)=\"close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </div>\n </div>\n <div class=\"flex-1 overflow-hidden p-3 overflow-y-auto max-h-[55vh]\">\n <rolatech-pricing-item [pricing]=\"pricing\"></rolatech-pricing-item>\n </div>\n <div class=\"h-16 flex justify-end items-center px-5 gap-3\">\n <button mat-button mat-dialog-close>\u53D6\u6D88</button>\n <button mat-button [mat-dialog-close]=\"pricing\" cdkFocusInitial>\u4FDD\u5B58</button>\n </div>\n</div>\n", styles: ["mat-form-field{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: PricingItemComponent, selector: "rolatech-pricing-item", inputs: ["actions", "shadow", "pricing"], outputs: ["pricingChange", "delete", "save"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }] }); }
25
+ }
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CoursePricingAddDialogComponent, decorators: [{
27
+ type: Component,
28
+ args: [{ selector: 'rolatech-course-pricing-add-dialog', standalone: true, imports: [MatIconModule, PricingItemComponent, MatButtonModule, MatDialogClose], template: "<div class=\"flex flex-col h-full overflow-hidden\">\n <div class=\"h-16 flex justify-between items-center px-5\">\n @if (data.title) {\n <div class=\"text-xl font-bold\">{{ data.title }}</div>\n }\n <div class=\"cursor-pointer\" (click)=\"close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </div>\n </div>\n <div class=\"flex-1 overflow-hidden p-3 overflow-y-auto max-h-[55vh]\">\n <rolatech-pricing-item [pricing]=\"pricing\"></rolatech-pricing-item>\n </div>\n <div class=\"h-16 flex justify-end items-center px-5 gap-3\">\n <button mat-button mat-dialog-close>\u53D6\u6D88</button>\n <button mat-button [mat-dialog-close]=\"pricing\" cdkFocusInitial>\u4FDD\u5B58</button>\n </div>\n</div>\n", styles: ["mat-form-field{width:100%}\n"] }]
29
+ }], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
30
+ type: Inject,
31
+ args: [MAT_DIALOG_DATA]
32
+ }] }] });
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLXByaWNpbmctYWRkLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItY291cnNlL3NyYy9saWIvY29tcG9uZW50cy9jb3Vyc2UtcHJpY2luZy1hZGQtZGlhbG9nL2NvdXJzZS1wcmljaW5nLWFkZC1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXByaWNpbmctYWRkLWRpYWxvZy9jb3Vyc2UtcHJpY2luZy1hZGQtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXpGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7O0FBU3ZELE1BQU0sT0FBTywrQkFBK0I7SUFNMUMsWUFDVSxTQUF3RCxFQUNoQyxJQUFTO1FBRGpDLGNBQVMsR0FBVCxTQUFTLENBQStDO1FBQ2hDLFNBQUksR0FBSixJQUFJLENBQUs7UUFQM0MsWUFBTyxHQUFZO1lBQ2pCLEdBQUcsRUFBRSxDQUFDO1lBQ04sR0FBRyxFQUFFLENBQUM7WUFDTixLQUFLLEVBQUUsQ0FBQztTQUNULENBQUM7SUFJQyxDQUFDO0lBRUosS0FBSztRQUNILElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekIsQ0FBQzs4R0FiVSwrQkFBK0IsOENBUWhDLGVBQWU7a0dBUmQsK0JBQStCLDhGQ2Q1QyxrdUJBaUJBLHFGRExZLGFBQWEsb0xBQUUsb0JBQW9CLHlKQUFFLGVBQWUsNE5BQUUsY0FBYzs7MkZBRW5FLCtCQUErQjtrQkFQM0MsU0FBUzsrQkFDRSxvQ0FBb0MsY0FHbEMsSUFBSSxXQUNQLENBQUMsYUFBYSxFQUFFLG9CQUFvQixFQUFFLGVBQWUsRUFBRSxjQUFjLENBQUM7OzBCQVU1RSxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ0Nsb3NlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IFByaWNpbmcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBQcmljaW5nSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL3ByaWNpbmctaXRlbS9wcmljaW5nLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncm9sYXRlY2gtY291cnNlLXByaWNpbmctYWRkLWRpYWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3Vyc2UtcHJpY2luZy1hZGQtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY291cnNlLXByaWNpbmctYWRkLWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTWF0SWNvbk1vZHVsZSwgUHJpY2luZ0l0ZW1Db21wb25lbnQsIE1hdEJ1dHRvbk1vZHVsZSwgTWF0RGlhbG9nQ2xvc2VdLFxufSlcbmV4cG9ydCBjbGFzcyBDb3Vyc2VQcmljaW5nQWRkRGlhbG9nQ29tcG9uZW50IHtcbiAgcHJpY2luZzogUHJpY2luZyA9IHtcbiAgICBtaW46IDAsXG4gICAgbWF4OiAwLFxuICAgIHRvdGFsOiAwLFxuICB9O1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPENvdXJzZVByaWNpbmdBZGREaWFsb2dDb21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LFxuICApIHt9XG5cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaC1mdWxsIG92ZXJmbG93LWhpZGRlblwiPlxuICA8ZGl2IGNsYXNzPVwiaC0xNiBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgcHgtNVwiPlxuICAgIEBpZiAoZGF0YS50aXRsZSkge1xuICAgICAgPGRpdiBjbGFzcz1cInRleHQteGwgZm9udC1ib2xkXCI+e3sgZGF0YS50aXRsZSB9fTwvZGl2PlxuICAgIH1cbiAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiY2xvc2UoKVwiPlxuICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwiY2xvc2VcIj48L21hdC1pY29uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImZsZXgtMSBvdmVyZmxvdy1oaWRkZW4gcC0zIG92ZXJmbG93LXktYXV0byBtYXgtaC1bNTV2aF1cIj5cbiAgICA8cm9sYXRlY2gtcHJpY2luZy1pdGVtIFtwcmljaW5nXT1cInByaWNpbmdcIj48L3JvbGF0ZWNoLXByaWNpbmctaXRlbT5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJoLTE2IGZsZXgganVzdGlmeS1lbmQgaXRlbXMtY2VudGVyIHB4LTUgZ2FwLTNcIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gbWF0LWRpYWxvZy1jbG9zZT7lj5bmtog8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdC1kaWFsb2ctY2xvc2VdPVwicHJpY2luZ1wiIGNka0ZvY3VzSW5pdGlhbD7kv53lrZg8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,59 @@
1
+ import { Component, Inject } from '@angular/core';
2
+ import { MatDialog, MatDialogRef, MAT_DIALOG_DATA, MatDialogClose } from '@angular/material/dialog';
3
+ import { MatSnackBar } from '@angular/material/snack-bar';
4
+ import { CourseService } from '../../services';
5
+ import { MatButtonModule } from '@angular/material/button';
6
+ import { PricingItemComponent } from '../pricing-item/pricing-item.component';
7
+ import { MatStepperModule } from '@angular/material/stepper';
8
+ import { FormsModule } from '@angular/forms';
9
+ import { MatDividerModule } from '@angular/material/divider';
10
+ import { MatIconModule } from '@angular/material/icon';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@angular/material/dialog";
13
+ import * as i2 from "../../services";
14
+ import * as i3 from "@angular/material/snack-bar";
15
+ import * as i4 from "@angular/material/icon";
16
+ import * as i5 from "@angular/material/divider";
17
+ import * as i6 from "@angular/forms";
18
+ import * as i7 from "@angular/material/stepper";
19
+ import * as i8 from "@angular/material/button";
20
+ export class CoursePricingDialogComponent {
21
+ constructor(dialogRef, data, courseService, snackBar, dialog) {
22
+ this.dialogRef = dialogRef;
23
+ this.data = data;
24
+ this.courseService = courseService;
25
+ this.snackBar = snackBar;
26
+ this.dialog = dialog;
27
+ this.pricing = [];
28
+ this.courseId = data.courseId;
29
+ this.pricing = data.pricing;
30
+ }
31
+ close() {
32
+ this.dialogRef.close();
33
+ }
34
+ addPricing() {
35
+ this.pricing.push({
36
+ min: 0,
37
+ max: 0,
38
+ total: 0,
39
+ });
40
+ }
41
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CoursePricingDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.CourseService }, { token: i3.MatSnackBar }, { token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
42
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: CoursePricingDialogComponent, isStandalone: true, selector: "rolatech-course-pricing-dialog", ngImport: i0, template: "<div class=\"flex flex-col h-full overflow-hidden\">\n <div class=\"h-16 flex justify-between items-center px-5\">\n @if (data.title) {\n <div class=\"text-md font-medium\">{{ data.title }}</div>\n }\n <div class=\"cursor-pointer\" (click)=\"close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"flex-1 overflow-hidden mt-3 overflow-y-auto w-2/3 max-h-[55vh]\">\n <form #detailForm=\"ngForm\" class=\"p-3\">\n <ng-template matStepLabel>\u8BE6\u60C5</ng-template>\n @for (item of pricing; track item) {\n <rolatech-pricing-item [pricing]=\"item\"> </rolatech-pricing-item>\n }\n <div class=\"mb-6\">\n <button mat-button (click)=\"addPricing()\">\n <mat-icon>add</mat-icon>\n <span>\u589E\u52A0\u4EF7\u683C</span>\n </button>\n </div>\n </form>\n </div>\n <mat-divider></mat-divider>\n <div class=\"h-16 flex justify-end items-center px-5\">\n <button mat-button [mat-dialog-close]=\"pricing\" cdkFocusInitial>\u4FDD\u5B58</button>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatStepperModule }, { kind: "directive", type: i7.MatStepLabel, selector: "[matStepLabel]" }, { kind: "component", type: PricingItemComponent, selector: "rolatech-pricing-item", inputs: ["actions", "shadow", "pricing"], outputs: ["pricingChange", "delete", "save"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i8.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }] }); }
43
+ }
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CoursePricingDialogComponent, decorators: [{
45
+ type: Component,
46
+ args: [{ selector: 'rolatech-course-pricing-dialog', standalone: true, imports: [
47
+ MatIconModule,
48
+ MatDividerModule,
49
+ FormsModule,
50
+ MatStepperModule,
51
+ PricingItemComponent,
52
+ MatButtonModule,
53
+ MatDialogClose,
54
+ ], template: "<div class=\"flex flex-col h-full overflow-hidden\">\n <div class=\"h-16 flex justify-between items-center px-5\">\n @if (data.title) {\n <div class=\"text-md font-medium\">{{ data.title }}</div>\n }\n <div class=\"cursor-pointer\" (click)=\"close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"flex-1 overflow-hidden mt-3 overflow-y-auto w-2/3 max-h-[55vh]\">\n <form #detailForm=\"ngForm\" class=\"p-3\">\n <ng-template matStepLabel>\u8BE6\u60C5</ng-template>\n @for (item of pricing; track item) {\n <rolatech-pricing-item [pricing]=\"item\"> </rolatech-pricing-item>\n }\n <div class=\"mb-6\">\n <button mat-button (click)=\"addPricing()\">\n <mat-icon>add</mat-icon>\n <span>\u589E\u52A0\u4EF7\u683C</span>\n </button>\n </div>\n </form>\n </div>\n <mat-divider></mat-divider>\n <div class=\"h-16 flex justify-end items-center px-5\">\n <button mat-button [mat-dialog-close]=\"pricing\" cdkFocusInitial>\u4FDD\u5B58</button>\n </div>\n</div>\n" }]
55
+ }], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
56
+ type: Inject,
57
+ args: [MAT_DIALOG_DATA]
58
+ }] }, { type: i2.CourseService }, { type: i3.MatSnackBar }, { type: i1.MatDialog }] });
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLXByaWNpbmctZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1jb3Vyc2Uvc3JjL2xpYi9jb21wb25lbnRzL2NvdXJzZS1wcmljaW5nLWRpYWxvZy9jb3Vyc2UtcHJpY2luZy1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXByaWNpbmctZGlhbG9nL2NvdXJzZS1wcmljaW5nLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTFELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7OztBQWlCdkQsTUFBTSxPQUFPLDRCQUE0QjtJQUd2QyxZQUNVLFNBQXFELEVBQzdCLElBQVMsRUFDakMsYUFBNEIsRUFDNUIsUUFBcUIsRUFDckIsTUFBaUI7UUFKakIsY0FBUyxHQUFULFNBQVMsQ0FBNEM7UUFDN0IsU0FBSSxHQUFKLElBQUksQ0FBSztRQUNqQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVc7UUFOM0IsWUFBTyxHQUFjLEVBQUUsQ0FBQztRQVF0QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQzlCLENBQUM7SUFDRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBQ0QsVUFBVTtRQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2hCLEdBQUcsRUFBRSxDQUFDO1lBQ04sR0FBRyxFQUFFLENBQUM7WUFDTixLQUFLLEVBQUUsQ0FBQztTQUNULENBQUMsQ0FBQztJQUNMLENBQUM7OEdBdEJVLDRCQUE0Qiw4Q0FLN0IsZUFBZTtrR0FMZCw0QkFBNEIsMEZDM0J6Qyw2bENBNkJBLHlERFhJLGFBQWEsbUxBQ2IsZ0JBQWdCLGtJQUNoQixXQUFXLHVkQUNYLGdCQUFnQix5R0FDaEIsb0JBQW9CLHlKQUNwQixlQUFlLDROQUNmLGNBQWM7OzJGQUdMLDRCQUE0QjtrQkFmeEMsU0FBUzsrQkFDRSxnQ0FBZ0MsY0FHOUIsSUFBSSxXQUNQO3dCQUNQLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixXQUFXO3dCQUNYLGdCQUFnQjt3QkFDaEIsb0JBQW9CO3dCQUNwQixlQUFlO3dCQUNmLGNBQWM7cUJBQ2Y7OzBCQU9FLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dDbG9zZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBQcmljaW5nIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb3Vyc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IFByaWNpbmdJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vcHJpY2luZy1pdGVtL3ByaWNpbmctaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0U3RlcHBlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3N0ZXBwZXInO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXREaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGl2aWRlcic7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JvbGF0ZWNoLWNvdXJzZS1wcmljaW5nLWRpYWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3Vyc2UtcHJpY2luZy1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb3Vyc2UtcHJpY2luZy1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgTWF0RGl2aWRlck1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBNYXRTdGVwcGVyTW9kdWxlLFxuICAgIFByaWNpbmdJdGVtQ29tcG9uZW50LFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXREaWFsb2dDbG9zZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ291cnNlUHJpY2luZ0RpYWxvZ0NvbXBvbmVudCB7XG4gIGNvdXJzZUlkITogc3RyaW5nO1xuICBwcmljaW5nOiBQcmljaW5nW10gPSBbXTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxDb3Vyc2VQcmljaW5nRGlhbG9nQ29tcG9uZW50PixcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IGFueSxcbiAgICBwcml2YXRlIGNvdXJzZVNlcnZpY2U6IENvdXJzZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgKSB7XG4gICAgdGhpcy5jb3Vyc2VJZCA9IGRhdGEuY291cnNlSWQ7XG4gICAgdGhpcy5wcmljaW5nID0gZGF0YS5wcmljaW5nO1xuICB9XG4gIGNsb3NlKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cbiAgYWRkUHJpY2luZygpIHtcbiAgICB0aGlzLnByaWNpbmcucHVzaCh7XG4gICAgICBtaW46IDAsXG4gICAgICBtYXg6IDAsXG4gICAgICB0b3RhbDogMCxcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaC1mdWxsIG92ZXJmbG93LWhpZGRlblwiPlxuICA8ZGl2IGNsYXNzPVwiaC0xNiBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgcHgtNVwiPlxuICAgIEBpZiAoZGF0YS50aXRsZSkge1xuICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgZm9udC1tZWRpdW1cIj57eyBkYXRhLnRpdGxlIH19PC9kaXY+XG4gICAgfVxuICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJjbG9zZSgpXCI+XG4gICAgICA8bWF0LWljb24gZm9udEljb249XCJjbG9zZVwiPjwvbWF0LWljb24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgPGRpdiBjbGFzcz1cImZsZXgtMSBvdmVyZmxvdy1oaWRkZW4gbXQtMyBvdmVyZmxvdy15LWF1dG8gdy0yLzMgbWF4LWgtWzU1dmhdXCI+XG4gICAgPGZvcm0gI2RldGFpbEZvcm09XCJuZ0Zvcm1cIiBjbGFzcz1cInAtM1wiPlxuICAgICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD7or6bmg4U8L25nLXRlbXBsYXRlPlxuICAgICAgQGZvciAoaXRlbSBvZiBwcmljaW5nOyB0cmFjayBpdGVtKSB7XG4gICAgICAgIDxyb2xhdGVjaC1wcmljaW5nLWl0ZW0gW3ByaWNpbmddPVwiaXRlbVwiPiA8L3JvbGF0ZWNoLXByaWNpbmctaXRlbT5cbiAgICAgIH1cbiAgICAgIDxkaXYgY2xhc3M9XCJtYi02XCI+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwiYWRkUHJpY2luZygpXCI+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+5aKe5Yqg5Lu35qC8PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9ybT5cbiAgPC9kaXY+XG4gIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICA8ZGl2IGNsYXNzPVwiaC0xNiBmbGV4IGp1c3RpZnktZW5kIGl0ZW1zLWNlbnRlciBweC01XCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXQtZGlhbG9nLWNsb3NlXT1cInByaWNpbmdcIiBjZGtGb2N1c0luaXRpYWw+5L+d5a2YPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=