ngx-techlify-core 18.83.0 → 18.85.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/entity-files/entity-file-list/entity-file-list.component.mjs +8 -3
- package/esm2022/lib/entity-files/entity-file-list-widget/entity-file-list-widget.component.mjs +35 -0
- package/esm2022/lib/entity-files/entity-file-list.module.mjs +10 -4
- package/esm2022/lib/entity-files/index.mjs +2 -1
- package/esm2022/lib/import-csv/field-mapping/field-mapping.component.mjs +8 -8
- package/esm2022/lib/note/comment-form/comment-form.component.mjs +12 -9
- package/esm2022/lib/note/index.mjs +2 -1
- package/esm2022/lib/note/note-comment-list/note-comment-list.component.mjs +103 -0
- package/esm2022/lib/note/note-form/note-form.component.mjs +50 -66
- package/esm2022/lib/note/note-list/note-list.component.mjs +39 -106
- package/esm2022/lib/note/note.module.mjs +14 -45
- package/esm2022/lib/note/note.service.mjs +4 -15
- package/fesm2022/ngx-techlify-core.mjs +835 -828
- package/fesm2022/ngx-techlify-core.mjs.map +1 -1
- package/lib/entity-files/entity-file-list/entity-file-list.component.d.ts +2 -1
- package/lib/entity-files/entity-file-list-widget/entity-file-list-widget.component.d.ts +9 -0
- package/lib/entity-files/entity-file-list.module.d.ts +2 -1
- package/lib/entity-files/index.d.ts +1 -0
- package/lib/note/comment-form/comment-form.component.d.ts +1 -1
- package/lib/note/index.d.ts +1 -0
- package/lib/note/note-comment-list/note-comment-list.component.d.ts +33 -0
- package/lib/note/note-form/note-form.component.d.ts +24 -25
- package/lib/note/note-list/note-list.component.d.ts +7 -11
- package/lib/note/note.module.d.ts +4 -12
- package/lib/note/note.service.d.ts +2 -6
- package/package.json +1 -1
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import { Component, Input, Output, EventEmitter } from "@angular/core";
|
|
2
|
+
import { FlexLayoutModule } from "@angular/flex-layout";
|
|
3
|
+
import { ReadMoreModule } from "../../read-more/read-more.module";
|
|
4
|
+
import { SharedModule } from "../../shared.module";
|
|
2
5
|
import * as i0 from "@angular/core";
|
|
3
6
|
import * as i1 from "@angular/forms";
|
|
4
7
|
import * as i2 from "../../core/credentials.service";
|
|
5
8
|
import * as i3 from "@angular/common";
|
|
6
|
-
import * as i4 from "@angular/
|
|
7
|
-
import * as i5 from "@angular/
|
|
8
|
-
import * as i6 from "@angular/material/
|
|
9
|
-
import * as i7 from "@angular/material/
|
|
10
|
-
import * as i8 from "@angular/
|
|
11
|
-
import * as i9 from "@angular/
|
|
9
|
+
import * as i4 from "@angular/material/button";
|
|
10
|
+
import * as i5 from "@angular/material/form-field";
|
|
11
|
+
import * as i6 from "@angular/material/icon";
|
|
12
|
+
import * as i7 from "@angular/material/input";
|
|
13
|
+
import * as i8 from "@angular/flex-layout/flex";
|
|
14
|
+
import * as i9 from "@angular/flex-layout/extended";
|
|
12
15
|
import * as i10 from "../../read-more/read-more.component";
|
|
13
16
|
export class CommentFormComponent {
|
|
14
17
|
set commentData(data) {
|
|
@@ -64,14 +67,14 @@ export class CommentFormComponent {
|
|
|
64
67
|
}
|
|
65
68
|
ngOnDestroy() { }
|
|
66
69
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CommentFormComponent, deps: [{ token: i1.UntypedFormBuilder }, { token: i2.CredentialsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
67
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CommentFormComponent, selector: "app-comment-form", inputs: { commentData: "commentData" }, outputs: { action: "action" }, ngImport: i0, template: "<form (ngSubmit)=\"submit()\" [formGroup]=\"commentFormGroup\">\n <div fxLayout=\"column\" class=\"my-2\" [ngClass]=\"{ 'border border-primary shadow rounded ': view}\">\n <div *ngIf=\"!view\" fxLayout=\"column\">\n <mat-form-field appearance=\"outline\" style=\"background-color:white;\">\n <mat-label>Comment</mat-label>\n <textarea matInput rows=\"5\" placeholder=\"Add a comment...\" formControlName=\"note\" autocomplete=\"off\"></textarea>\n </mat-form-field>\n\n <div fxLayout fxLayoutGap=\"1rem\" class=\"mt-2\">\n <span fxFlex></span>\n <button *ngIf=\"_commentData\" mat-button type=\"button\" (click)=\"view = !view\">\n Cancel\n </button>\n <button mat-raised-button color=\"primary\" type=\"submit\">\n {{ _commentData ? \"Update\" : \"Post comment\" }}\n </button>\n </div>\n </div>\n\n <div fxLayout=\"column\" *ngIf=\"view\" class=\"p-2 m-2\">\n <div fxLayout=\"row wrap\" fxLayoutGap=\".5rem\">\n <div fxFlex=\"20%\" fxLayoutAlign=\"start\">\n <button mat-icon-button type=\"button\" style=\"color:grey\">\n <mat-icon style=\"font-size:60px\">account_circle</mat-icon>\n </button>\n </div>\n <div fxFlex=\"75%\">\n <div fxLayout=\"column\" fxLayoutGap=\".5rem\">\n <div class=\"font-weight-bold\">{{ _commentData?.creator?.name }}</div>\n <div class=\"text-muted\">{{ _commentData.updated_at | date:'medium' }}</div>\n </div>\n </div>\n </div>\n <app-read-more class=\"mt-2\" [text]=\"_commentData.note\"></app-read-more>\n <div fxLayout class=\"mt-1\" fxLayoutGap=\"1rem\" *ngIf=\"isLoggedIn && currentUser.id === _commentData.creator_id\">\n <a href=\"javascript:;\" (click)=\"editComment()\">\n Edit\n </a>\n <a href=\"javascript:;\" (click)=\"deleteComment()\">\n Delete\n </a>\n </div>\n </div>\n </div>\n</form>", styles: [":host ::ng-deep .mat-form-field-wrapper{padding-bottom:0!important;margin:0!important}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type:
|
|
70
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CommentFormComponent, isStandalone: true, selector: "app-comment-form", inputs: { commentData: "commentData" }, outputs: { action: "action" }, ngImport: i0, template: "<form (ngSubmit)=\"submit()\" [formGroup]=\"commentFormGroup\">\n <div fxLayout=\"column\" class=\"my-2\" [ngClass]=\"{ 'border border-primary shadow rounded ': view}\">\n <div *ngIf=\"!view\" fxLayout=\"column\">\n <mat-form-field appearance=\"outline\" style=\"background-color:white;\">\n <mat-label>Comment</mat-label>\n <textarea matInput rows=\"5\" placeholder=\"Add a comment...\" formControlName=\"note\" autocomplete=\"off\"></textarea>\n </mat-form-field>\n\n <div fxLayout fxLayoutGap=\"1rem\" class=\"mt-2\">\n <span fxFlex></span>\n <button *ngIf=\"_commentData\" mat-button type=\"button\" (click)=\"view = !view\">\n Cancel\n </button>\n <button mat-raised-button color=\"primary\" type=\"submit\">\n {{ _commentData ? \"Update\" : \"Post comment\" }}\n </button>\n </div>\n </div>\n\n <div fxLayout=\"column\" *ngIf=\"view\" class=\"p-2 m-2\">\n <div fxLayout=\"row wrap\" fxLayoutGap=\".5rem\">\n <div fxFlex=\"20%\" fxLayoutAlign=\"start\">\n <button mat-icon-button type=\"button\" style=\"color:grey\">\n <mat-icon style=\"font-size:60px\">account_circle</mat-icon>\n </button>\n </div>\n <div fxFlex=\"75%\">\n <div fxLayout=\"column\" fxLayoutGap=\".5rem\">\n <div class=\"font-weight-bold\">{{ _commentData?.creator?.name }}</div>\n <div class=\"text-muted\">{{ _commentData.updated_at | date:'medium' }}</div>\n </div>\n </div>\n </div>\n <app-read-more class=\"mt-2\" [text]=\"_commentData.note\"></app-read-more>\n <div fxLayout class=\"mt-1\" fxLayoutGap=\"1rem\" *ngIf=\"isLoggedIn && currentUser.id === _commentData.creator_id\">\n <a href=\"javascript:;\" (click)=\"editComment()\">\n Edit\n </a>\n <a href=\"javascript:;\" (click)=\"deleteComment()\">\n Delete\n </a>\n </div>\n </div>\n </div>\n</form>", styles: [":host ::ng-deep .mat-form-field-wrapper{padding-bottom:0!important;margin:0!important}\n"], dependencies: [{ kind: "ngmodule", type: SharedModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i7.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: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i3.DatePipe, name: "date" }, { kind: "ngmodule", type: FlexLayoutModule }, { kind: "directive", type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i8.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i9.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "ngmodule", type: ReadMoreModule }, { kind: "component", type: i10.ReadMoreComponent, selector: "app-read-more", inputs: ["text", "maxLength"] }] }); }
|
|
68
71
|
}
|
|
69
72
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CommentFormComponent, decorators: [{
|
|
70
73
|
type: Component,
|
|
71
|
-
args: [{ selector: "app-comment-form", template: "<form (ngSubmit)=\"submit()\" [formGroup]=\"commentFormGroup\">\n <div fxLayout=\"column\" class=\"my-2\" [ngClass]=\"{ 'border border-primary shadow rounded ': view}\">\n <div *ngIf=\"!view\" fxLayout=\"column\">\n <mat-form-field appearance=\"outline\" style=\"background-color:white;\">\n <mat-label>Comment</mat-label>\n <textarea matInput rows=\"5\" placeholder=\"Add a comment...\" formControlName=\"note\" autocomplete=\"off\"></textarea>\n </mat-form-field>\n\n <div fxLayout fxLayoutGap=\"1rem\" class=\"mt-2\">\n <span fxFlex></span>\n <button *ngIf=\"_commentData\" mat-button type=\"button\" (click)=\"view = !view\">\n Cancel\n </button>\n <button mat-raised-button color=\"primary\" type=\"submit\">\n {{ _commentData ? \"Update\" : \"Post comment\" }}\n </button>\n </div>\n </div>\n\n <div fxLayout=\"column\" *ngIf=\"view\" class=\"p-2 m-2\">\n <div fxLayout=\"row wrap\" fxLayoutGap=\".5rem\">\n <div fxFlex=\"20%\" fxLayoutAlign=\"start\">\n <button mat-icon-button type=\"button\" style=\"color:grey\">\n <mat-icon style=\"font-size:60px\">account_circle</mat-icon>\n </button>\n </div>\n <div fxFlex=\"75%\">\n <div fxLayout=\"column\" fxLayoutGap=\".5rem\">\n <div class=\"font-weight-bold\">{{ _commentData?.creator?.name }}</div>\n <div class=\"text-muted\">{{ _commentData.updated_at | date:'medium' }}</div>\n </div>\n </div>\n </div>\n <app-read-more class=\"mt-2\" [text]=\"_commentData.note\"></app-read-more>\n <div fxLayout class=\"mt-1\" fxLayoutGap=\"1rem\" *ngIf=\"isLoggedIn && currentUser.id === _commentData.creator_id\">\n <a href=\"javascript:;\" (click)=\"editComment()\">\n Edit\n </a>\n <a href=\"javascript:;\" (click)=\"deleteComment()\">\n Delete\n </a>\n </div>\n </div>\n </div>\n</form>", styles: [":host ::ng-deep .mat-form-field-wrapper{padding-bottom:0!important;margin:0!important}\n"] }]
|
|
74
|
+
args: [{ selector: "app-comment-form", standalone: true, imports: [SharedModule, FlexLayoutModule, ReadMoreModule], template: "<form (ngSubmit)=\"submit()\" [formGroup]=\"commentFormGroup\">\n <div fxLayout=\"column\" class=\"my-2\" [ngClass]=\"{ 'border border-primary shadow rounded ': view}\">\n <div *ngIf=\"!view\" fxLayout=\"column\">\n <mat-form-field appearance=\"outline\" style=\"background-color:white;\">\n <mat-label>Comment</mat-label>\n <textarea matInput rows=\"5\" placeholder=\"Add a comment...\" formControlName=\"note\" autocomplete=\"off\"></textarea>\n </mat-form-field>\n\n <div fxLayout fxLayoutGap=\"1rem\" class=\"mt-2\">\n <span fxFlex></span>\n <button *ngIf=\"_commentData\" mat-button type=\"button\" (click)=\"view = !view\">\n Cancel\n </button>\n <button mat-raised-button color=\"primary\" type=\"submit\">\n {{ _commentData ? \"Update\" : \"Post comment\" }}\n </button>\n </div>\n </div>\n\n <div fxLayout=\"column\" *ngIf=\"view\" class=\"p-2 m-2\">\n <div fxLayout=\"row wrap\" fxLayoutGap=\".5rem\">\n <div fxFlex=\"20%\" fxLayoutAlign=\"start\">\n <button mat-icon-button type=\"button\" style=\"color:grey\">\n <mat-icon style=\"font-size:60px\">account_circle</mat-icon>\n </button>\n </div>\n <div fxFlex=\"75%\">\n <div fxLayout=\"column\" fxLayoutGap=\".5rem\">\n <div class=\"font-weight-bold\">{{ _commentData?.creator?.name }}</div>\n <div class=\"text-muted\">{{ _commentData.updated_at | date:'medium' }}</div>\n </div>\n </div>\n </div>\n <app-read-more class=\"mt-2\" [text]=\"_commentData.note\"></app-read-more>\n <div fxLayout class=\"mt-1\" fxLayoutGap=\"1rem\" *ngIf=\"isLoggedIn && currentUser.id === _commentData.creator_id\">\n <a href=\"javascript:;\" (click)=\"editComment()\">\n Edit\n </a>\n <a href=\"javascript:;\" (click)=\"deleteComment()\">\n Delete\n </a>\n </div>\n </div>\n </div>\n</form>", styles: [":host ::ng-deep .mat-form-field-wrapper{padding-bottom:0!important;margin:0!important}\n"] }]
|
|
72
75
|
}], ctorParameters: () => [{ type: i1.UntypedFormBuilder }, { type: i2.CredentialsService }], propDecorators: { commentData: [{
|
|
73
76
|
type: Input
|
|
74
77
|
}], action: [{
|
|
75
78
|
type: Output
|
|
76
79
|
}] } });
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvbm90ZS9jb21tZW50LWZvcm0vY29tbWVudC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvbm90ZS9jb21tZW50LWZvcm0vY29tbWVudC1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBRWIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBU25ELE1BQU0sT0FBTyxvQkFBb0I7SUFLL0IsSUFBYSxXQUFXLENBQUMsSUFBUztRQUNoQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBSUQsWUFBb0IsRUFBc0IsRUFDaEMsaUJBQXFDO1FBRDNCLE9BQUUsR0FBRixFQUFFLENBQW9CO1FBQ2hDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBb0I7UUFIckMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFLcEMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxRQUFRLEtBQUssQ0FBQztJQUVkLElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztJQUNqRCxDQUFDO0lBRU8sVUFBVTtRQUNoQiwyQ0FBMkM7UUFDM0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ3BDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNSLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNWLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNoQixnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQztTQUN2QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM1QyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDekIsQ0FBQztZQUNELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hDLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELFdBQVcsS0FBSyxDQUFDOytHQWxFTixvQkFBb0I7bUdBQXBCLG9CQUFvQixtSkNyQmpDLHE5REE0Q08saUpEM0JLLFlBQVksd3RFQUFFLGdCQUFnQixtMUZBQUUsY0FBYzs7NEZBSTdDLG9CQUFvQjtrQkFQaEMsU0FBUzsrQkFDRSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsQ0FBQzt3SEFTNUMsV0FBVztzQkFBdkIsS0FBSztnQkFNSSxNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkRlc3Ryb3lcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZsZXhMYXlvdXRNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvZmxleC1sYXlvdXRcIjtcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAsIFVudHlwZWRGb3JtQnVpbGRlciB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgQ3JlZGVudGlhbHNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvY3JlZGVudGlhbHMuc2VydmljZVwiO1xuaW1wb3J0IHsgUmVhZE1vcmVNb2R1bGUgfSBmcm9tIFwiLi4vLi4vcmVhZC1tb3JlL3JlYWQtbW9yZS5tb2R1bGVcIjtcbmltcG9ydCB7IFNoYXJlZE1vZHVsZSB9IGZyb20gXCIuLi8uLi9zaGFyZWQubW9kdWxlXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhcHAtY29tbWVudC1mb3JtXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtTaGFyZWRNb2R1bGUsIEZsZXhMYXlvdXRNb2R1bGUsIFJlYWRNb3JlTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6IFwiLi9jb21tZW50LWZvcm0uY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2NvbW1lbnQtZm9ybS5jb21wb25lbnQuc2Nzc1wiXVxufSlcbmV4cG9ydCBjbGFzcyBDb21tZW50Rm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgY29tbWVudEZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cDtcbiAgdmlldzogYm9vbGVhbjtcbiAgX2NvbW1lbnREYXRhOiBhbnk7XG5cbiAgQElucHV0KCkgc2V0IGNvbW1lbnREYXRhKGRhdGE6IGFueSkge1xuICAgIHRoaXMudmlldyA9ICEhZGF0YTtcbiAgICB0aGlzLl9jb21tZW50RGF0YSA9IGRhdGE7XG4gICAgdGhpcy5jb21tZW50Rm9ybUdyb3VwLnBhdGNoVmFsdWUoZGF0YSk7XG4gIH1cblxuICBAT3V0cHV0KCkgYWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGNyZWRlbnRpYWxTZXJ2aWNlOiBDcmVkZW50aWFsc1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5jcmVhdGVGb3JtKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHsgfVxuXG4gIGdldCBpc0xvZ2dlZEluKCkge1xuICAgIHJldHVybiB0aGlzLmNyZWRlbnRpYWxTZXJ2aWNlLmlzQXV0aGVudGljYXRlZDtcbiAgfVxuXG4gIGdldCBjdXJyZW50VXNlcigpIHtcbiAgICByZXR1cm4gdGhpcy5jcmVkZW50aWFsU2VydmljZS5jcmVkZW50aWFscy51c2VyO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVGb3JtKCkge1xuICAgIC8vVE9ETzogRmluaWFsaXplIGFuZCBhZGQgbW9yZSB2YWxpZGF0aW9ucy5cbiAgICB0aGlzLmNvbW1lbnRGb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGlkOiBbXCJcIl0sXG4gICAgICBub3RlOiBbXCJcIl0sXG4gICAgICBtb2RlbF90eXBlOiBbXCJcIl0sXG4gICAgICByZWxhdGVkX21vZGVsX2lkOiBbXCJcIl0sXG4gICAgfSk7XG4gIH1cblxuICBzdWJtaXQoKSB7XG4gICAgaWYgKHRoaXMuY29tbWVudEZvcm1Hcm91cC5nZXQoXCJub3RlXCIpLnZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5fY29tbWVudERhdGEpIHtcbiAgICAgICAgdGhpcy52aWV3ID0gIXRoaXMudmlldztcbiAgICAgIH1cbiAgICAgIHRoaXMuYWN0aW9uLmVtaXQoeyB0eXBlOiBcInNhdmVcIiwgdmFsdWU6IHRoaXMuY29tbWVudEZvcm1Hcm91cC52YWx1ZSB9KTtcbiAgICAgIHRoaXMuY29tbWVudEZvcm1Hcm91cC5yZXNldCgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb21tZW50Rm9ybUdyb3VwLmdldChcImlkXCIpLnZhbHVlKSB7XG4gICAgICB0aGlzLmRlbGV0ZUNvbW1lbnQoKTtcbiAgICB9XG4gIH1cblxuICBoaWRlRWRpdCgpIHtcbiAgICBpZiAodGhpcy5jb21tZW50Rm9ybUdyb3VwLmdldChcImlkXCIpLnZhbHVlKSB7XG4gICAgICB0aGlzLnZpZXcgPSAhdGhpcy52aWV3O1xuICAgIH1cbiAgfVxuXG4gIGVkaXRDb21tZW50KCkge1xuICAgIHRoaXMudmlldyA9ICF0aGlzLnZpZXc7XG4gICAgdGhpcy5jb21tZW50Rm9ybUdyb3VwLnBhdGNoVmFsdWUodGhpcy5fY29tbWVudERhdGEpO1xuICB9XG5cbiAgZGVsZXRlQ29tbWVudCgpIHtcbiAgICB0aGlzLmFjdGlvbi5lbWl0KHsgdHlwZTogXCJkZWxldGVcIiwgdmFsdWU6IHRoaXMuY29tbWVudEZvcm1Hcm91cC52YWx1ZSB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkgeyB9XG59XG4iLCI8Zm9ybSAobmdTdWJtaXQpPVwic3VibWl0KClcIiBbZm9ybUdyb3VwXT1cImNvbW1lbnRGb3JtR3JvdXBcIj5cbiAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGNsYXNzPVwibXktMlwiIFtuZ0NsYXNzXT1cInsgJ2JvcmRlciBib3JkZXItcHJpbWFyeSBzaGFkb3cgcm91bmRlZCAnOiB2aWV3fVwiPlxuICAgIDxkaXYgKm5nSWY9XCIhdmlld1wiIGZ4TGF5b3V0PVwiY29sdW1uXCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6d2hpdGU7XCI+XG4gICAgICAgIDxtYXQtbGFiZWw+Q29tbWVudDwvbWF0LWxhYmVsPlxuICAgICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgcm93cz1cIjVcIiBwbGFjZWhvbGRlcj1cIkFkZCBhIGNvbW1lbnQuLi5cIiBmb3JtQ29udHJvbE5hbWU9XCJub3RlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+PC90ZXh0YXJlYT5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgIDxkaXYgZnhMYXlvdXQgZnhMYXlvdXRHYXA9XCIxcmVtXCIgY2xhc3M9XCJtdC0yXCI+XG4gICAgICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJfY29tbWVudERhdGFcIiBtYXQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwidmlldyA9ICF2aWV3XCI+XG4gICAgICAgICAgQ2FuY2VsXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJzdWJtaXRcIj5cbiAgICAgICAgICB7eyBfY29tbWVudERhdGEgPyBcIlVwZGF0ZVwiIDogXCJQb3N0IGNvbW1lbnRcIiB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiICpuZ0lmPVwidmlld1wiIGNsYXNzPVwicC0yIG0tMlwiPlxuICAgICAgPGRpdiBmeExheW91dD1cInJvdyB3cmFwXCIgZnhMYXlvdXRHYXA9XCIuNXJlbVwiPlxuICAgICAgICA8ZGl2IGZ4RmxleD1cIjIwJVwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydFwiPlxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIHR5cGU9XCJidXR0b25cIiBzdHlsZT1cImNvbG9yOmdyZXlcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cImZvbnQtc2l6ZTo2MHB4XCI+YWNjb3VudF9jaXJjbGU8L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBmeEZsZXg9XCI3NSVcIj5cbiAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRHYXA9XCIuNXJlbVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtd2VpZ2h0LWJvbGRcIj57eyBfY29tbWVudERhdGE/LmNyZWF0b3I/Lm5hbWUgfX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+e3sgX2NvbW1lbnREYXRhLnVwZGF0ZWRfYXQgfCBkYXRlOidtZWRpdW0nIH19PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8YXBwLXJlYWQtbW9yZSBjbGFzcz1cIm10LTJcIiBbdGV4dF09XCJfY29tbWVudERhdGEubm90ZVwiPjwvYXBwLXJlYWQtbW9yZT5cbiAgICAgIDxkaXYgZnhMYXlvdXQgY2xhc3M9XCJtdC0xXCIgZnhMYXlvdXRHYXA9XCIxcmVtXCIgKm5nSWY9XCJpc0xvZ2dlZEluICYmIGN1cnJlbnRVc2VyLmlkID09PSBfY29tbWVudERhdGEuY3JlYXRvcl9pZFwiPlxuICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgKGNsaWNrKT1cImVkaXRDb21tZW50KClcIj5cbiAgICAgICAgICBFZGl0XG4gICAgICAgIDwvYT5cbiAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIChjbGljayk9XCJkZWxldGVDb21tZW50KClcIj5cbiAgICAgICAgICBEZWxldGVcbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9mb3JtPiJdfQ==
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export * from './note-list/note-list.component';
|
|
2
|
+
export * from './note-comment-list/note-comment-list.component';
|
|
2
3
|
export * from './note-form/note-form.component';
|
|
3
4
|
export * from './comment-form/comment-form.component';
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL25vdGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyx1Q0FBdUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbm90ZS1saXN0L25vdGUtbGlzdC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9ub3RlLWNvbW1lbnQtbGlzdC9ub3RlLWNvbW1lbnQtbGlzdC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9ub3RlLWZvcm0vbm90ZS1mb3JtLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1lbnQtZm9ybS9jb21tZW50LWZvcm0uY29tcG9uZW50JztcbiJdfQ==
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { finalize } from 'rxjs/operators';
|
|
3
|
+
import { ActionPopupComponent } from '../../action-popup';
|
|
4
|
+
import { ActionPopupModule } from '../../action-popup/action-popup.module';
|
|
5
|
+
import { TechlifyListComponent } from '../../base-model';
|
|
6
|
+
import { CommentFormComponent } from '../comment-form/comment-form.component';
|
|
7
|
+
import { SharedModule } from '../../shared.module';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "../note.service";
|
|
10
|
+
import * as i2 from "@angular/material/dialog";
|
|
11
|
+
import * as i3 from "@angular/common";
|
|
12
|
+
import * as i4 from "ngx-infinite-scroll";
|
|
13
|
+
/**
|
|
14
|
+
* Notes rendered as a comment thread, where each comment is edited in place
|
|
15
|
+
* through app-comment-form. Use app-note-list for the table/timeline views.
|
|
16
|
+
*/
|
|
17
|
+
export class NoteCommentListComponent extends TechlifyListComponent {
|
|
18
|
+
constructor(service, dialog) {
|
|
19
|
+
super(service);
|
|
20
|
+
this.service = service;
|
|
21
|
+
this.dialog = dialog;
|
|
22
|
+
this.labelText = 'Comment';
|
|
23
|
+
this.lastPage = 0;
|
|
24
|
+
this.filters = { sort_by: 'created_at|DESC' };
|
|
25
|
+
}
|
|
26
|
+
ngOnInit() {
|
|
27
|
+
this.filters.related_model_id = this.relatedModelId;
|
|
28
|
+
this.filters.model_type = this.modelType;
|
|
29
|
+
this.loadData();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Comments are not filtered from the route, so the filters are held
|
|
33
|
+
* on the component rather than in a filter form
|
|
34
|
+
*/
|
|
35
|
+
loadData() {
|
|
36
|
+
this.isWorking = true;
|
|
37
|
+
this.service.index({
|
|
38
|
+
...this.filters,
|
|
39
|
+
page: this.page,
|
|
40
|
+
with: 'creator'
|
|
41
|
+
})
|
|
42
|
+
.pipe(finalize(() => this.isWorking = false))
|
|
43
|
+
.subscribe((result) => {
|
|
44
|
+
this.models = this.models.concat(result?.data);
|
|
45
|
+
this.lastPage = result?.last_page;
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
commentAction(event) {
|
|
49
|
+
if (event.type === 'save') {
|
|
50
|
+
if (event.value.id) {
|
|
51
|
+
this.editComment(event.value);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
this.addComment(event.value);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
this.deleteComment(event.value);
|
|
58
|
+
}
|
|
59
|
+
addComment(comment) {
|
|
60
|
+
comment.related_model_id = this.relatedModelId;
|
|
61
|
+
comment.model_type = this.modelType;
|
|
62
|
+
this.service.store(comment)
|
|
63
|
+
.subscribe((result) => this.models = [...this.models, result?.item]);
|
|
64
|
+
}
|
|
65
|
+
editComment(comment) {
|
|
66
|
+
this.service.update(comment)
|
|
67
|
+
.subscribe((result) => this.modelsUpdatedById(result?.item));
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* app-comment-form has its own delete link rather than
|
|
71
|
+
* app-techlify-delete-button, so the confirmation is opened here
|
|
72
|
+
*/
|
|
73
|
+
deleteComment(comment) {
|
|
74
|
+
this.dialog.open(ActionPopupComponent, {
|
|
75
|
+
width: '400px',
|
|
76
|
+
data: {
|
|
77
|
+
title: `Delete ${this.labelText}`,
|
|
78
|
+
message: `Are you sure to delete?`
|
|
79
|
+
},
|
|
80
|
+
autoFocus: false
|
|
81
|
+
})
|
|
82
|
+
.afterClosed()
|
|
83
|
+
.subscribe(result => {
|
|
84
|
+
if (result) {
|
|
85
|
+
this.service.delete(comment)
|
|
86
|
+
.subscribe(() => this.modelsDeletedById(comment));
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NoteCommentListComponent, deps: [{ token: i1.NoteService }, { token: i2.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
91
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: NoteCommentListComponent, isStandalone: true, selector: "app-note-comment-list", inputs: { relatedModelId: "relatedModelId", modelType: "modelType", labelText: "labelText" }, usesInheritance: true, ngImport: i0, template: "<div class=\"d-flex flex-column gap-3\">\n <div class=\"d-flex justify-content-center align-items-center\">\n <h5 class=\"m-0\">{{ labelText }}s</h5>\n </div>\n\n <div class=\"w-100 scroll-container jumbotron\" infiniteScroll [infiniteScrollDistance]=\"1\"\n [infiniteScrollThrottle]=\"50\" (scrolled)=\"onScroll()\" [scrollWindow]=\"false\">\n <app-comment-form [commentData]=\"comment\" (action)=\"commentAction($event)\"\n *ngFor=\"let comment of models\"></app-comment-form>\n <app-comment-form (action)=\"commentAction($event)\"></app-comment-form>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: SharedModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "ngmodule", type: ActionPopupModule }, { kind: "component", type: CommentFormComponent, selector: "app-comment-form", inputs: ["commentData"], outputs: ["action"] }] }); }
|
|
92
|
+
}
|
|
93
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NoteCommentListComponent, decorators: [{
|
|
94
|
+
type: Component,
|
|
95
|
+
args: [{ selector: 'app-note-comment-list', standalone: true, imports: [SharedModule, ActionPopupModule, CommentFormComponent], template: "<div class=\"d-flex flex-column gap-3\">\n <div class=\"d-flex justify-content-center align-items-center\">\n <h5 class=\"m-0\">{{ labelText }}s</h5>\n </div>\n\n <div class=\"w-100 scroll-container jumbotron\" infiniteScroll [infiniteScrollDistance]=\"1\"\n [infiniteScrollThrottle]=\"50\" (scrolled)=\"onScroll()\" [scrollWindow]=\"false\">\n <app-comment-form [commentData]=\"comment\" (action)=\"commentAction($event)\"\n *ngFor=\"let comment of models\"></app-comment-form>\n <app-comment-form (action)=\"commentAction($event)\"></app-comment-form>\n </div>\n</div>\n" }]
|
|
96
|
+
}], ctorParameters: () => [{ type: i1.NoteService }, { type: i2.MatDialog }], propDecorators: { relatedModelId: [{
|
|
97
|
+
type: Input
|
|
98
|
+
}], modelType: [{
|
|
99
|
+
type: Input
|
|
100
|
+
}], labelText: [{
|
|
101
|
+
type: Input
|
|
102
|
+
}] } });
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90ZS1jb21tZW50LWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlY2hsaWZ5LWNvcmUvc3JjL2xpYi9ub3RlL25vdGUtY29tbWVudC1saXN0L25vdGUtY29tbWVudC1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvbm90ZS9ub3RlLWNvbW1lbnQtbGlzdC9ub3RlLWNvbW1lbnQtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFlLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7QUFFbkQ7OztHQUdHO0FBT0gsTUFBTSxPQUFPLHdCQUF5QixTQUFRLHFCQUFxQjtJQU1qRSxZQUNZLE9BQW9CLEVBQ3RCLE1BQWlCO1FBRXpCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUhMLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUpsQixjQUFTLEdBQUcsU0FBUyxDQUFDO1FBTzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUNwRCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQ7OztPQUdHO0lBQ00sUUFBUTtRQUNmLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ2pCLEdBQUcsSUFBSSxDQUFDLE9BQU87WUFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixJQUFJLEVBQUUsU0FBUztTQUNoQixDQUFDO2FBQ0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDO2FBQzVDLFNBQVMsQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxFQUFFLFNBQVMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBVTtRQUN0QixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDMUIsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUIsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxVQUFVLENBQUMsT0FBWTtRQUNyQixPQUFPLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUMvQyxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO2FBQ3hCLFNBQVMsQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQVk7UUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO2FBQ3pCLFNBQVMsQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxhQUFhLENBQUMsT0FBWTtRQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUNyQyxLQUFLLEVBQUUsT0FBTztZQUNkLElBQUksRUFBRTtnQkFDSixLQUFLLEVBQUUsVUFBVSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNqQyxPQUFPLEVBQUUseUJBQXlCO2FBQ3BCO1lBQ2hCLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLENBQUM7YUFDQyxXQUFXLEVBQUU7YUFDYixTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbEIsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7cUJBQ3pCLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN0RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOytHQW5GVSx3QkFBd0I7bUdBQXhCLHdCQUF3QixzTUNwQnJDLG1sQkFZQSwyQ0RLWSxZQUFZLCtoQkFBRSxpQkFBaUIsK0JBQUUsb0JBQW9COzs0RkFHcEQsd0JBQXdCO2tCQU5wQyxTQUFTOytCQUNFLHVCQUF1QixjQUNyQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLENBQUM7d0dBS3ZELGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBY3Rpb25Qb3B1cCwgQWN0aW9uUG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hY3Rpb24tcG9wdXAnO1xuaW1wb3J0IHsgQWN0aW9uUG9wdXBNb2R1bGUgfSBmcm9tICcuLi8uLi9hY3Rpb24tcG9wdXAvYWN0aW9uLXBvcHVwLm1vZHVsZSc7XG5pbXBvcnQgeyBUZWNobGlmeUxpc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9iYXNlLW1vZGVsJztcbmltcG9ydCB7IENvbW1lbnRGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tbWVudC1mb3JtL2NvbW1lbnQtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTm90ZVNlcnZpY2UgfSBmcm9tICcuLi9ub3RlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2hhcmVkTW9kdWxlIH0gZnJvbSAnLi4vLi4vc2hhcmVkLm1vZHVsZSc7XG5cbi8qKlxuICogTm90ZXMgcmVuZGVyZWQgYXMgYSBjb21tZW50IHRocmVhZCwgd2hlcmUgZWFjaCBjb21tZW50IGlzIGVkaXRlZCBpbiBwbGFjZVxuICogdGhyb3VnaCBhcHAtY29tbWVudC1mb3JtLiBVc2UgYXBwLW5vdGUtbGlzdCBmb3IgdGhlIHRhYmxlL3RpbWVsaW5lIHZpZXdzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtbm90ZS1jb21tZW50LWxpc3QnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbU2hhcmVkTW9kdWxlLCBBY3Rpb25Qb3B1cE1vZHVsZSwgQ29tbWVudEZvcm1Db21wb25lbnRdLFxuICB0ZW1wbGF0ZVVybDogJy4vbm90ZS1jb21tZW50LWxpc3QuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBOb3RlQ29tbWVudExpc3RDb21wb25lbnQgZXh0ZW5kcyBUZWNobGlmeUxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIHJlbGF0ZWRNb2RlbElkICE6IGFueTtcbiAgQElucHV0KCkgbW9kZWxUeXBlICE6IGFueTtcbiAgQElucHV0KCkgbGFiZWxUZXh0ID0gJ0NvbW1lbnQnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBzZXJ2aWNlOiBOb3RlU2VydmljZSxcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nXG4gICkge1xuICAgIHN1cGVyKHNlcnZpY2UpO1xuICAgIHRoaXMubGFzdFBhZ2UgPSAwO1xuICAgIHRoaXMuZmlsdGVycyA9IHsgc29ydF9ieTogJ2NyZWF0ZWRfYXR8REVTQycgfTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVycy5yZWxhdGVkX21vZGVsX2lkID0gdGhpcy5yZWxhdGVkTW9kZWxJZDtcbiAgICB0aGlzLmZpbHRlcnMubW9kZWxfdHlwZSA9IHRoaXMubW9kZWxUeXBlO1xuICAgIHRoaXMubG9hZERhdGEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21tZW50cyBhcmUgbm90IGZpbHRlcmVkIGZyb20gdGhlIHJvdXRlLCBzbyB0aGUgZmlsdGVycyBhcmUgaGVsZFxuICAgKiBvbiB0aGUgY29tcG9uZW50IHJhdGhlciB0aGFuIGluIGEgZmlsdGVyIGZvcm1cbiAgICovXG4gIG92ZXJyaWRlIGxvYWREYXRhKCk6IHZvaWQge1xuICAgIHRoaXMuaXNXb3JraW5nID0gdHJ1ZTtcbiAgICB0aGlzLnNlcnZpY2UuaW5kZXgoe1xuICAgICAgLi4udGhpcy5maWx0ZXJzLFxuICAgICAgcGFnZTogdGhpcy5wYWdlLFxuICAgICAgd2l0aDogJ2NyZWF0b3InXG4gICAgfSlcbiAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+IHRoaXMuaXNXb3JraW5nID0gZmFsc2UpKVxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5tb2RlbHMgPSB0aGlzLm1vZGVscy5jb25jYXQocmVzdWx0Py5kYXRhKTtcbiAgICAgICAgdGhpcy5sYXN0UGFnZSA9IHJlc3VsdD8ubGFzdF9wYWdlO1xuICAgICAgfSk7XG4gIH1cblxuICBjb21tZW50QWN0aW9uKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3NhdmUnKSB7XG4gICAgICBpZiAoZXZlbnQudmFsdWUuaWQpIHtcbiAgICAgICAgdGhpcy5lZGl0Q29tbWVudChldmVudC52YWx1ZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWRkQ29tbWVudChldmVudC52YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGVsZXRlQ29tbWVudChldmVudC52YWx1ZSk7XG4gIH1cblxuICBhZGRDb21tZW50KGNvbW1lbnQ6IGFueSk6IHZvaWQge1xuICAgIGNvbW1lbnQucmVsYXRlZF9tb2RlbF9pZCA9IHRoaXMucmVsYXRlZE1vZGVsSWQ7XG4gICAgY29tbWVudC5tb2RlbF90eXBlID0gdGhpcy5tb2RlbFR5cGU7XG4gICAgdGhpcy5zZXJ2aWNlLnN0b3JlKGNvbW1lbnQpXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4gdGhpcy5tb2RlbHMgPSBbLi4udGhpcy5tb2RlbHMsIHJlc3VsdD8uaXRlbV0pO1xuICB9XG5cbiAgZWRpdENvbW1lbnQoY29tbWVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zZXJ2aWNlLnVwZGF0ZShjb21tZW50KVxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHRoaXMubW9kZWxzVXBkYXRlZEJ5SWQocmVzdWx0Py5pdGVtKSk7XG4gIH1cblxuICAvKipcbiAgICogYXBwLWNvbW1lbnQtZm9ybSBoYXMgaXRzIG93biBkZWxldGUgbGluayByYXRoZXIgdGhhblxuICAgKiBhcHAtdGVjaGxpZnktZGVsZXRlLWJ1dHRvbiwgc28gdGhlIGNvbmZpcm1hdGlvbiBpcyBvcGVuZWQgaGVyZVxuICAgKi9cbiAgZGVsZXRlQ29tbWVudChjb21tZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmRpYWxvZy5vcGVuKEFjdGlvblBvcHVwQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzQwMHB4JyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdGl0bGU6IGBEZWxldGUgJHt0aGlzLmxhYmVsVGV4dH1gLFxuICAgICAgICBtZXNzYWdlOiBgQXJlIHlvdSBzdXJlIHRvIGRlbGV0ZT9gXG4gICAgICB9IGFzIEFjdGlvblBvcHVwLFxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZVxuICAgIH0pXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgdGhpcy5zZXJ2aWNlLmRlbGV0ZShjb21tZW50KVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLm1vZGVsc0RlbGV0ZWRCeUlkKGNvbW1lbnQpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTNcIj5cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgIDxoNSBjbGFzcz1cIm0tMFwiPnt7IGxhYmVsVGV4dCB9fXM8L2g1PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwidy0xMDAgc2Nyb2xsLWNvbnRhaW5lciBqdW1ib3Ryb25cIiBpbmZpbml0ZVNjcm9sbCBbaW5maW5pdGVTY3JvbGxEaXN0YW5jZV09XCIxXCJcbiAgICBbaW5maW5pdGVTY3JvbGxUaHJvdHRsZV09XCI1MFwiIChzY3JvbGxlZCk9XCJvblNjcm9sbCgpXCIgW3Njcm9sbFdpbmRvd109XCJmYWxzZVwiPlxuICAgIDxhcHAtY29tbWVudC1mb3JtIFtjb21tZW50RGF0YV09XCJjb21tZW50XCIgKGFjdGlvbik9XCJjb21tZW50QWN0aW9uKCRldmVudClcIlxuICAgICAgKm5nRm9yPVwibGV0IGNvbW1lbnQgb2YgbW9kZWxzXCI+PC9hcHAtY29tbWVudC1mb3JtPlxuICAgIDxhcHAtY29tbWVudC1mb3JtIChhY3Rpb24pPVwiY29tbWVudEFjdGlvbigkZXZlbnQpXCI+PC9hcHAtY29tbWVudC1mb3JtPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -1,79 +1,63 @@
|
|
|
1
|
-
import { Component, Inject } from
|
|
2
|
-
import { Validators } from
|
|
3
|
-
import { MAT_DIALOG_DATA } from
|
|
1
|
+
import { Component, Inject, Optional } from '@angular/core';
|
|
2
|
+
import { Validators } from '@angular/forms';
|
|
3
|
+
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
4
|
+
import { TechlifyFormComponent } from '../../base-model';
|
|
5
|
+
import { SharedModule } from '../../shared.module';
|
|
4
6
|
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "
|
|
6
|
-
import * as i2 from "
|
|
7
|
-
import * as i3 from "
|
|
8
|
-
import * as i4 from "
|
|
9
|
-
import * as i5 from "
|
|
10
|
-
import * as i6 from "@angular/
|
|
11
|
-
import * as i7 from "@angular/
|
|
12
|
-
import * as i8 from "@angular/material/
|
|
13
|
-
import * as i9 from "@angular/material/
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
export class NoteFormComponent {
|
|
21
|
-
constructor(dialogRef, data, fb, formValidatorService, alertService, noteService) {
|
|
7
|
+
import * as i1 from "../../core/form-validator.service";
|
|
8
|
+
import * as i2 from "../note.service";
|
|
9
|
+
import * as i3 from "@angular/forms";
|
|
10
|
+
import * as i4 from "@angular/material/dialog";
|
|
11
|
+
import * as i5 from "@angular/common";
|
|
12
|
+
import * as i6 from "@angular/material/button";
|
|
13
|
+
import * as i7 from "@angular/material/form-field";
|
|
14
|
+
import * as i8 from "@angular/material/input";
|
|
15
|
+
import * as i9 from "@angular/material/card";
|
|
16
|
+
export class NoteFormComponent extends TechlifyFormComponent {
|
|
17
|
+
constructor(formValidatorService, service, fb, dialogRef, data) {
|
|
18
|
+
super(formValidatorService, service);
|
|
19
|
+
this.formValidatorService = formValidatorService;
|
|
20
|
+
this.service = service;
|
|
21
|
+
this.fb = fb;
|
|
22
22
|
this.dialogRef = dialogRef;
|
|
23
23
|
this.data = data;
|
|
24
|
-
this.
|
|
25
|
-
this.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
note: ["", Validators.compose([Validators.required])],
|
|
36
|
-
model_type: [""],
|
|
37
|
-
related_model_id: [""],
|
|
24
|
+
this.labelText = 'Note';
|
|
25
|
+
this.errorMessages = {
|
|
26
|
+
note: {
|
|
27
|
+
required: 'Note is required',
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
this.form = this.fb.group({
|
|
31
|
+
id: [''],
|
|
32
|
+
note: ['', Validators.required],
|
|
33
|
+
model_type: ['', Validators.required],
|
|
34
|
+
related_model_id: ['', Validators.required],
|
|
38
35
|
});
|
|
39
36
|
}
|
|
40
37
|
ngOnInit() {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const model = this.noteFormGroup.value;
|
|
51
|
-
const result = this.updateMode
|
|
52
|
-
? await this.noteService.editNote(model)
|
|
53
|
-
: await this.noteService.addNote(model);
|
|
54
|
-
this.alertService.addAlert(`${this.data?.labelText} saved successfully`, "success");
|
|
55
|
-
this.dialogRef.close(result);
|
|
38
|
+
this.labelText = this.data?.labelText ?? this.labelText;
|
|
39
|
+
this.form.patchValue({
|
|
40
|
+
model_type: this.data?.model_type ?? '',
|
|
41
|
+
related_model_id: this.data?.related_model_id ?? '',
|
|
42
|
+
});
|
|
43
|
+
const model = this.data?.model;
|
|
44
|
+
if (model?.id) {
|
|
45
|
+
this.isUpdate = true;
|
|
46
|
+
this.form.patchValue(model);
|
|
56
47
|
}
|
|
57
48
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
/**Method to evaluate form fields*/
|
|
62
|
-
isFieldValid(field) {
|
|
63
|
-
return this.formValidatorService.isFieldValid(field, this.noteFormGroup, this.noteFormFirstAttempt);
|
|
64
|
-
}
|
|
65
|
-
/**Method to find error in form fields*/
|
|
66
|
-
getErrorMessage(field) {
|
|
67
|
-
return this.formValidatorService.getErrorMessage(field, this.noteFormGroup, errorMessages);
|
|
68
|
-
}
|
|
69
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NoteFormComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.UntypedFormBuilder }, { token: i3.FormValidatorService }, { token: i4.AlertService }, { token: i5.NoteService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
70
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: NoteFormComponent, selector: "app-note-form", ngImport: i0, template: "<form [formGroup]=\"noteFormGroup\" (ngSubmit)=\"submit()\">\n <div fxLayout=\"column\" class=\"mat-typography\">\n <div mat-dialog-title class=\"text-center\">\n <div>{{data?.labelText}}</div>\n </div>\n\n <div mat-dialog-content fxLayout=\"column\">\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\">\n <mat-form-field fxFlex=\"100%\">\n <textarea matInput formControlName=\"note\" placeholder=\"{{data?.labelText}}\" autocomplete=\"off\"\n required></textarea>\n <mat-error *ngIf=\"isFieldValid('note')\">{{\n getErrorMessage(\"note\")\n }}</mat-error>\n </mat-form-field>\n\n <div class=\"my-2\" fxLayout=\"row\" fxLayoutGap=\"30px\" fxLayoutAlign=\"end\" fxFlex=\"100%\">\n <button mat-raised-button type=\"button\" (click)=\"cancel()\">\n Cancel\n </button>\n <button mat-raised-button type=\"submit\" color=\"primary\">Save</button>\n </div>\n </div>\n </div>\n </div>\n</form>", styles: [""], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i7.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i7.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i7.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i7.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "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: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i9.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i9.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i10.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"] }] }); }
|
|
49
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NoteFormComponent, deps: [{ token: i1.FormValidatorService }, { token: i2.NoteService }, { token: i3.UntypedFormBuilder }, { token: i4.MatDialogRef, optional: true }, { token: MAT_DIALOG_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
50
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: NoteFormComponent, isStandalone: true, selector: "app-note-form", usesInheritance: true, ngImport: i0, template: "<mat-card-title class=\"d-flex flex-row justify-content-center align-items-center\">\n {{ labelText }}\n</mat-card-title>\n\n<mat-card-content>\n <form class=\"d-flex flex-column\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <mat-form-field class=\"w-100\">\n <mat-label>{{ labelText }}</mat-label>\n <textarea matInput formControlName=\"note\" rows=\"3\" autocomplete=\"off\" required></textarea>\n <mat-error *ngIf=\"isFieldValid('note')\">{{ getErrorMessage('note') }}</mat-error>\n </mat-form-field>\n\n <div class=\"d-flex justify-content-end gap-2\">\n <button type=\"button\" mat-flat-button [disabled]=\"isWorking\" (click)=\"dialogRef.close()\">Cancel</button>\n <button type=\"submit\" mat-raised-button color=\"primary\" [disabled]=\"isWorking\">Save</button>\n </div>\n </form>\n</mat-card-content>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: SharedModule }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i9.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i9.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
|
|
71
51
|
}
|
|
72
52
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NoteFormComponent, decorators: [{
|
|
73
53
|
type: Component,
|
|
74
|
-
args: [{ selector: 'app-note-form',
|
|
75
|
-
}], ctorParameters: () => [{ type: i1.
|
|
54
|
+
args: [{ selector: 'app-note-form', standalone: true, imports: [SharedModule], template: "<mat-card-title class=\"d-flex flex-row justify-content-center align-items-center\">\n {{ labelText }}\n</mat-card-title>\n\n<mat-card-content>\n <form class=\"d-flex flex-column\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <mat-form-field class=\"w-100\">\n <mat-label>{{ labelText }}</mat-label>\n <textarea matInput formControlName=\"note\" rows=\"3\" autocomplete=\"off\" required></textarea>\n <mat-error *ngIf=\"isFieldValid('note')\">{{ getErrorMessage('note') }}</mat-error>\n </mat-form-field>\n\n <div class=\"d-flex justify-content-end gap-2\">\n <button type=\"button\" mat-flat-button [disabled]=\"isWorking\" (click)=\"dialogRef.close()\">Cancel</button>\n <button type=\"submit\" mat-raised-button color=\"primary\" [disabled]=\"isWorking\">Save</button>\n </div>\n </form>\n</mat-card-content>\n" }]
|
|
55
|
+
}], ctorParameters: () => [{ type: i1.FormValidatorService }, { type: i2.NoteService }, { type: i3.UntypedFormBuilder }, { type: i4.MatDialogRef, decorators: [{
|
|
56
|
+
type: Optional
|
|
57
|
+
}] }, { type: undefined, decorators: [{
|
|
58
|
+
type: Optional
|
|
59
|
+
}, {
|
|
76
60
|
type: Inject,
|
|
77
61
|
args: [MAT_DIALOG_DATA]
|
|
78
|
-
}] }
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
}] }] });
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90ZS1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvbm90ZS9ub3RlLWZvcm0vbm90ZS1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvbm90ZS9ub3RlLWZvcm0vbm90ZS1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBQXNCLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBZ0IsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7OztBQVNuRCxNQUFNLE9BQU8saUJBQWtCLFNBQVEscUJBQXFCO0lBRzFELFlBQ3FCLG9CQUEwQyxFQUMxQyxPQUFvQixFQUMvQixFQUFzQixFQUNGLFNBQTBDLEVBQzFCLElBSzNDO1FBRUQsS0FBSyxDQUFDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBWGxCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMsWUFBTyxHQUFQLE9BQU8sQ0FBYTtRQUMvQixPQUFFLEdBQUYsRUFBRSxDQUFvQjtRQUNGLGNBQVMsR0FBVCxTQUFTLENBQWlDO1FBQzFCLFNBQUksR0FBSixJQUFJLENBSy9DO1FBWkgsY0FBUyxHQUFHLE1BQU0sQ0FBQztRQWdCakIsSUFBSSxDQUFDLGFBQWEsR0FBRztZQUNuQixJQUFJLEVBQUU7Z0JBQ0osUUFBUSxFQUFFLGtCQUFrQjthQUM3QjtTQUNGLENBQUM7UUFFRixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ3hCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNSLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQy9CLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3JDLGdCQUFnQixFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7U0FDNUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUM7UUFFeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDbkIsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxJQUFJLEVBQUU7WUFDdkMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsSUFBSSxFQUFFO1NBQ3BELENBQUMsQ0FBQztRQUVILE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO1FBQy9CLElBQUksS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7K0dBNUNVLGlCQUFpQiwrSkFRTixlQUFlO21HQVIxQixpQkFBaUIsZ0dDZjlCLDAxQkFrQkEseUREUFksWUFBWTs7NEZBSVgsaUJBQWlCO2tCQVA3QixTQUFTOytCQUNFLGVBQWUsY0FDYixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUM7OzBCQVdwQixRQUFROzswQkFDUixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgVGVjaGxpZnlGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYmFzZS1tb2RlbCc7XG5pbXBvcnQgeyBGb3JtVmFsaWRhdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvZm9ybS12YWxpZGF0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RlU2VydmljZSB9IGZyb20gJy4uL25vdGUuc2VydmljZSc7XG5pbXBvcnQgeyBTaGFyZWRNb2R1bGUgfSBmcm9tICcuLi8uLi9zaGFyZWQubW9kdWxlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLW5vdGUtZm9ybScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtTaGFyZWRNb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vbm90ZS1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbm90ZS1mb3JtLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBOb3RlRm9ybUNvbXBvbmVudCBleHRlbmRzIFRlY2hsaWZ5Rm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGxhYmVsVGV4dCA9ICdOb3RlJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZm9ybVZhbGlkYXRvclNlcnZpY2U6IEZvcm1WYWxpZGF0b3JTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBzZXJ2aWNlOiBOb3RlU2VydmljZSxcbiAgICBwcml2YXRlIGZiOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgQE9wdGlvbmFsKCkgcHVibGljIG92ZXJyaWRlIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPE5vdGVGb3JtQ29tcG9uZW50PixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE/OiB7XG4gICAgICBtb2RlbD86IGFueSxcbiAgICAgIG1vZGVsX3R5cGU/OiBzdHJpbmcsXG4gICAgICByZWxhdGVkX21vZGVsX2lkPzogYW55LFxuICAgICAgbGFiZWxUZXh0Pzogc3RyaW5nLFxuICAgIH1cbiAgKSB7XG4gICAgc3VwZXIoZm9ybVZhbGlkYXRvclNlcnZpY2UsIHNlcnZpY2UpO1xuXG4gICAgdGhpcy5lcnJvck1lc3NhZ2VzID0ge1xuICAgICAgbm90ZToge1xuICAgICAgICByZXF1aXJlZDogJ05vdGUgaXMgcmVxdWlyZWQnLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBpZDogWycnXSxcbiAgICAgIG5vdGU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBtb2RlbF90eXBlOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgcmVsYXRlZF9tb2RlbF9pZDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubGFiZWxUZXh0ID0gdGhpcy5kYXRhPy5sYWJlbFRleHQgPz8gdGhpcy5sYWJlbFRleHQ7XG5cbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICBtb2RlbF90eXBlOiB0aGlzLmRhdGE/Lm1vZGVsX3R5cGUgPz8gJycsXG4gICAgICByZWxhdGVkX21vZGVsX2lkOiB0aGlzLmRhdGE/LnJlbGF0ZWRfbW9kZWxfaWQgPz8gJycsXG4gICAgfSk7XG5cbiAgICBjb25zdCBtb2RlbCA9IHRoaXMuZGF0YT8ubW9kZWw7XG4gICAgaWYgKG1vZGVsPy5pZCkge1xuICAgICAgdGhpcy5pc1VwZGF0ZSA9IHRydWU7XG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShtb2RlbCk7XG4gICAgfVxuICB9XG59XG4iLCI8bWF0LWNhcmQtdGl0bGUgY2xhc3M9XCJkLWZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAge3sgbGFiZWxUZXh0IH19XG48L21hdC1jYXJkLXRpdGxlPlxuXG48bWF0LWNhcmQtY29udGVudD5cbiAgPGZvcm0gY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIiBbZm9ybUdyb3VwXT1cImZvcm1cIiAobmdTdWJtaXQpPVwic3VibWl0KClcIj5cbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ3LTEwMFwiPlxuICAgICAgPG1hdC1sYWJlbD57eyBsYWJlbFRleHQgfX08L21hdC1sYWJlbD5cbiAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJub3RlXCIgcm93cz1cIjNcIiBhdXRvY29tcGxldGU9XCJvZmZcIiByZXF1aXJlZD48L3RleHRhcmVhPlxuICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImlzRmllbGRWYWxpZCgnbm90ZScpXCI+e3sgZ2V0RXJyb3JNZXNzYWdlKCdub3RlJykgfX08L21hdC1lcnJvcj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGdhcC0yXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtZmxhdC1idXR0b24gW2Rpc2FibGVkXT1cImlzV29ya2luZ1wiIChjbGljayk9XCJkaWFsb2dSZWYuY2xvc2UoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgW2Rpc2FibGVkXT1cImlzV29ya2luZ1wiPlNhdmU8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9tYXQtY2FyZC1jb250ZW50PlxuIl19
|