@decaf-ts/for-angular 0.0.12 → 0.0.14
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/{dist/lib/components → components}/component-renderer/component-renderer.component.d.ts +0 -1
- package/{dist/lib/components → components}/crud-field/crud-field.component.d.ts +0 -1
- package/{dist/lib/components → components}/crud-form/constants.d.ts +0 -1
- package/{dist/lib/components → components}/crud-form/crud-form.component.d.ts +0 -1
- package/{dist/lib/components → components}/crud-form/types.d.ts +0 -1
- package/{dist/lib/components → components}/empty-state/empty-state.component.d.ts +0 -1
- package/{dist/lib/components → components}/fieldset/fieldset.component.d.ts +0 -1
- package/{dist/lib/components → components}/filter/filter.component.d.ts +0 -1
- package/{dist/lib/components → components}/for-angular-components.module.d.ts +0 -1
- package/{dist/lib/components → components}/index.d.ts +0 -1
- package/{dist/lib/components → components}/layout/layout.component.d.ts +0 -1
- package/{dist/lib/components → components}/list/constants.d.ts +0 -1
- package/{dist/lib/components → components}/list/list.component.d.ts +0 -1
- package/{dist/lib/components → components}/list-item/list-item.component.d.ts +0 -1
- package/{dist/lib/components → components}/model-renderer/model-renderer.component.d.ts +0 -1
- package/{dist/lib/components → components}/pagination/constants.d.ts +0 -1
- package/{dist/lib/components → components}/pagination/pagination.component.d.ts +0 -1
- package/{dist/lib/components → components}/searchbar/searchbar.component.d.ts +0 -1
- package/{dist/lib/directives → directives}/collapsable.directive.d.ts +0 -1
- package/{dist/lib/directives → directives}/index.d.ts +0 -1
- package/{dist/lib/engine → engine}/DynamicModule.d.ts +0 -1
- package/{dist/lib/engine → engine}/NgxBaseComponent.d.ts +0 -1
- package/{dist/lib/engine → engine}/NgxCrudFormField.d.ts +0 -1
- package/{dist/lib/engine → engine}/NgxFormService.d.ts +0 -1
- package/{dist/lib/engine → engine}/NgxRenderingEngine.d.ts +0 -1
- package/{dist/lib/engine → engine}/NgxRenderingEngine2.d.ts +0 -1
- package/{dist/lib/engine → engine}/ValidatorFactory.d.ts +0 -1
- package/{dist/lib/engine → engine}/constants.d.ts +0 -1
- package/{dist/lib/engine → engine}/decorators.d.ts +0 -1
- package/{dist/lib/engine → engine}/index.d.ts +0 -1
- package/{dist/lib/engine → engine}/types.d.ts +0 -1
- package/esm2022/components/component-renderer/component-renderer.component.mjs +313 -0
- package/esm2022/components/crud-field/crud-field.component.mjs +301 -0
- package/esm2022/components/crud-form/crud-form.component.mjs +139 -0
- package/esm2022/components/empty-state/empty-state.component.mjs +348 -0
- package/esm2022/components/fieldset/fieldset.component.mjs +225 -0
- package/esm2022/components/filter/filter.component.mjs +689 -0
- package/esm2022/components/for-angular-components.module.mjs +71 -0
- package/esm2022/components/layout/layout.component.mjs +176 -0
- package/esm2022/components/list/list.component.mjs +1236 -0
- package/esm2022/components/list-item/list-item.component.mjs +408 -0
- package/esm2022/components/model-renderer/model-renderer.component.mjs +138 -0
- package/esm2022/components/pagination/pagination.component.mjs +323 -0
- package/esm2022/components/searchbar/searchbar.component.mjs +493 -0
- package/esm2022/directives/collapsable.directive.mjs +28 -0
- package/esm2022/engine/NgxBaseComponent.mjs +539 -0
- package/esm2022/for-angular.module.mjs +118 -0
- package/{dist/lib/fesm2022 → fesm2022}/decaf-ts-for-angular.mjs +621 -1805
- package/fesm2022/decaf-ts-for-angular.mjs.map +1 -0
- package/{dist/lib/for-angular.module.d.ts → for-angular.module.d.ts} +0 -1
- package/{dist/lib/helpers → helpers}/index.d.ts +0 -1
- package/{dist/lib/helpers → helpers}/utils.d.ts +0 -1
- package/{dist/lib/index.d.ts → index.d.ts} +0 -1
- package/{dist/lib/interfaces.d.ts → interfaces.d.ts} +0 -1
- package/package.json +19 -95
- package/{dist/lib/public-apis.d.ts → public-apis.d.ts} +0 -1
- package/LICENSE.md +0 -659
- package/dist/for-angular/cli/cli-module.d.ts +0 -22
- package/dist/for-angular/cli/cli-module.d.ts.map +0 -1
- package/dist/for-angular/cli/cli-module.js +0 -131
- package/dist/for-angular/cli/cli-module.js.map +0 -1
- package/dist/lib/README.md +0 -92
- package/dist/lib/components/component-renderer/component-renderer.component.d.ts.map +0 -1
- package/dist/lib/components/crud-field/crud-field.component.d.ts.map +0 -1
- package/dist/lib/components/crud-form/constants.d.ts.map +0 -1
- package/dist/lib/components/crud-form/crud-form.component.d.ts.map +0 -1
- package/dist/lib/components/crud-form/types.d.ts.map +0 -1
- package/dist/lib/components/empty-state/empty-state.component.d.ts.map +0 -1
- package/dist/lib/components/fieldset/fieldset.component.d.ts.map +0 -1
- package/dist/lib/components/filter/filter.component.d.ts.map +0 -1
- package/dist/lib/components/for-angular-components.module.d.ts.map +0 -1
- package/dist/lib/components/index.d.ts.map +0 -1
- package/dist/lib/components/layout/layout.component.d.ts.map +0 -1
- package/dist/lib/components/list/constants.d.ts.map +0 -1
- package/dist/lib/components/list/list.component.d.ts.map +0 -1
- package/dist/lib/components/list-item/list-item.component.d.ts.map +0 -1
- package/dist/lib/components/model-renderer/model-renderer.component.d.ts.map +0 -1
- package/dist/lib/components/pagination/constants.d.ts.map +0 -1
- package/dist/lib/components/pagination/pagination.component.d.ts.map +0 -1
- package/dist/lib/components/searchbar/searchbar.component.d.ts.map +0 -1
- package/dist/lib/decaf-ts-for-angular.d.ts.map +0 -1
- package/dist/lib/directives/collapsable.directive.d.ts.map +0 -1
- package/dist/lib/directives/index.d.ts.map +0 -1
- package/dist/lib/engine/DynamicModule.d.ts.map +0 -1
- package/dist/lib/engine/NgxBaseComponent.d.ts.map +0 -1
- package/dist/lib/engine/NgxCrudFormField.d.ts.map +0 -1
- package/dist/lib/engine/NgxFormService.d.ts.map +0 -1
- package/dist/lib/engine/NgxRenderingEngine.d.ts.map +0 -1
- package/dist/lib/engine/NgxRenderingEngine2.d.ts.map +0 -1
- package/dist/lib/engine/ValidatorFactory.d.ts.map +0 -1
- package/dist/lib/engine/constants.d.ts.map +0 -1
- package/dist/lib/engine/decorators.d.ts.map +0 -1
- package/dist/lib/engine/index.d.ts.map +0 -1
- package/dist/lib/engine/types.d.ts.map +0 -1
- package/dist/lib/esm2022/components/component-renderer/component-renderer.component.mjs +0 -359
- package/dist/lib/esm2022/components/crud-field/crud-field.component.mjs +0 -456
- package/dist/lib/esm2022/components/crud-form/crud-form.component.mjs +0 -272
- package/dist/lib/esm2022/components/empty-state/empty-state.component.mjs +0 -410
- package/dist/lib/esm2022/components/fieldset/fieldset.component.mjs +0 -250
- package/dist/lib/esm2022/components/filter/filter.component.mjs +0 -906
- package/dist/lib/esm2022/components/for-angular-components.module.mjs +0 -72
- package/dist/lib/esm2022/components/layout/layout.component.mjs +0 -245
- package/dist/lib/esm2022/components/list/list.component.mjs +0 -1405
- package/dist/lib/esm2022/components/list-item/list-item.component.mjs +0 -612
- package/dist/lib/esm2022/components/model-renderer/model-renderer.component.mjs +0 -182
- package/dist/lib/esm2022/components/pagination/pagination.component.mjs +0 -364
- package/dist/lib/esm2022/components/searchbar/searchbar.component.mjs +0 -503
- package/dist/lib/esm2022/directives/collapsable.directive.mjs +0 -28
- package/dist/lib/esm2022/engine/NgxBaseComponent.mjs +0 -546
- package/dist/lib/esm2022/for-angular.module.mjs +0 -119
- package/dist/lib/fesm2022/decaf-ts-for-angular.mjs.map +0 -1
- package/dist/lib/for-angular.module.d.ts.map +0 -1
- package/dist/lib/helpers/index.d.ts.map +0 -1
- package/dist/lib/helpers/utils.d.ts.map +0 -1
- package/dist/lib/interfaces.d.ts.map +0 -1
- package/dist/lib/public-apis.d.ts.map +0 -1
- /package/{dist/lib/assets → assets}/i18n/en.json +0 -0
- /package/{dist/lib/assets → assets}/images/angular-logo.svg +0 -0
- /package/{dist/lib/assets → assets}/images/decaf-logo-black.svg +0 -0
- /package/{dist/lib/assets → assets}/images/decaf-logo-lw.svg +0 -0
- /package/{dist/lib/assets → assets}/images/decaf-logo-white.svg +0 -0
- /package/{dist/lib/assets → assets}/images/decaf-logo.svg +0 -0
- /package/{dist/lib/esm2022 → esm2022}/components/crud-form/constants.mjs +0 -0
- /package/{dist/lib/esm2022 → esm2022}/components/crud-form/types.mjs +0 -0
- /package/{dist/lib/esm2022 → esm2022}/components/index.mjs +0 -0
- /package/{dist/lib/esm2022 → esm2022}/components/list/constants.mjs +0 -0
- /package/{dist/lib/esm2022 → esm2022}/components/pagination/constants.mjs +0 -0
- /package/{dist/lib/esm2022 → esm2022}/decaf-ts-for-angular.mjs +0 -0
- /package/{dist/lib/esm2022 → esm2022}/directives/index.mjs +0 -0
- /package/{dist/lib/esm2022 → esm2022}/engine/DynamicModule.mjs +0 -0
- /package/{dist/lib/esm2022 → esm2022}/engine/NgxCrudFormField.mjs +0 -0
- /package/{dist/lib/esm2022 → esm2022}/engine/NgxFormService.mjs +0 -0
- /package/{dist/lib/esm2022 → esm2022}/engine/NgxRenderingEngine.mjs +0 -0
- /package/{dist/lib/esm2022 → esm2022}/engine/NgxRenderingEngine2.mjs +0 -0
- /package/{dist/lib/esm2022 → esm2022}/engine/ValidatorFactory.mjs +0 -0
- /package/{dist/lib/esm2022 → esm2022}/engine/constants.mjs +0 -0
- /package/{dist/lib/esm2022 → esm2022}/engine/decorators.mjs +0 -0
- /package/{dist/lib/esm2022 → esm2022}/engine/index.mjs +0 -0
- /package/{dist/lib/esm2022 → esm2022}/engine/types.mjs +0 -0
- /package/{dist/lib/esm2022 → esm2022}/helpers/index.mjs +0 -0
- /package/{dist/lib/esm2022 → esm2022}/helpers/utils.mjs +0 -0
- /package/{dist/lib/esm2022 → esm2022}/interfaces.mjs +0 -0
- /package/{dist/lib/esm2022 → esm2022}/public-apis.mjs +0 -0
|
@@ -1,272 +0,0 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
|
-
import { Component, ElementRef, EventEmitter, inject, Input, Output, ViewChild, } from '@angular/core';
|
|
3
|
-
import { Location } from '@angular/common';
|
|
4
|
-
import { NgxFormService } from '../../engine/NgxFormService';
|
|
5
|
-
import { Dynamic, EventConstants } from '../../engine';
|
|
6
|
-
import { OperationKeys } from '@decaf-ts/db-decorators';
|
|
7
|
-
import { DefaultFormReactiveOptions } from './constants';
|
|
8
|
-
import { ForAngularModule, getLogger } from '../../for-angular.module';
|
|
9
|
-
import { IonIcon } from '@ionic/angular/standalone';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "@ionic/angular/standalone";
|
|
12
|
-
import * as i2 from "@angular/forms";
|
|
13
|
-
const _c0 = ["reactiveForm"];
|
|
14
|
-
const _c1 = ["*"];
|
|
15
|
-
const _c2 = () => ["create", "update"];
|
|
16
|
-
const _c3 = () => ["delete", "read", "update"];
|
|
17
|
-
function CrudFormComponent_Conditional_0_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
18
|
-
i0.ɵɵelement(0, "ion-icon", 6);
|
|
19
|
-
} if (rf & 2) {
|
|
20
|
-
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
21
|
-
i0.ɵɵproperty("slot", ctx_r1.options.buttons.submit.iconSlot)("name", ctx_r1.options.buttons.submit.icon);
|
|
22
|
-
} }
|
|
23
|
-
function CrudFormComponent_Conditional_0_Conditional_9_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
24
|
-
i0.ɵɵelement(0, "ion-icon", 6);
|
|
25
|
-
} if (rf & 2) {
|
|
26
|
-
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
27
|
-
i0.ɵɵproperty("slot", ctx_r1.options.buttons.clear == null ? null : ctx_r1.options.buttons.clear.iconSlot)("name", ctx_r1.options.buttons.clear == null ? null : ctx_r1.options.buttons.clear.icon);
|
|
28
|
-
} }
|
|
29
|
-
function CrudFormComponent_Conditional_0_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
30
|
-
const _r3 = i0.ɵɵgetCurrentView();
|
|
31
|
-
i0.ɵɵelementStart(0, "ion-button", 8);
|
|
32
|
-
i0.ɵɵlistener("click", function CrudFormComponent_Conditional_0_Conditional_9_Template_ion_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.handleReset()); });
|
|
33
|
-
i0.ɵɵtemplate(1, CrudFormComponent_Conditional_0_Conditional_9_Conditional_1_Template, 1, 2, "ion-icon", 6);
|
|
34
|
-
i0.ɵɵtext(2);
|
|
35
|
-
i0.ɵɵelementEnd();
|
|
36
|
-
} if (rf & 2) {
|
|
37
|
-
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
38
|
-
i0.ɵɵadvance();
|
|
39
|
-
i0.ɵɵconditional((ctx_r1.options.buttons.clear == null ? null : ctx_r1.options.buttons.clear.icon) ? 1 : -1);
|
|
40
|
-
i0.ɵɵadvance();
|
|
41
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpureFunction0(2, _c2).includes(ctx_r1.operation) ? "Back" : ctx_r1.options.buttons.clear == null ? null : ctx_r1.options.buttons.clear.text, " ");
|
|
42
|
-
} }
|
|
43
|
-
function CrudFormComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
44
|
-
const _r1 = i0.ɵɵgetCurrentView();
|
|
45
|
-
i0.ɵɵelementStart(0, "form", 3, 0);
|
|
46
|
-
i0.ɵɵlistener("submit", function CrudFormComponent_Conditional_0_Template_form_submit_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.submit($event)); });
|
|
47
|
-
i0.ɵɵprojection(2, 0, ["#formContent", ""]);
|
|
48
|
-
i0.ɵɵelementStart(3, "div", 4)(4, "div")(5, "ion-button", 5);
|
|
49
|
-
i0.ɵɵtemplate(6, CrudFormComponent_Conditional_0_Conditional_6_Template, 1, 2, "ion-icon", 6);
|
|
50
|
-
i0.ɵɵtext(7);
|
|
51
|
-
i0.ɵɵelementEnd()();
|
|
52
|
-
i0.ɵɵelementStart(8, "div");
|
|
53
|
-
i0.ɵɵtemplate(9, CrudFormComponent_Conditional_0_Conditional_9_Template, 3, 3, "ion-button", 7);
|
|
54
|
-
i0.ɵɵelementEnd()()();
|
|
55
|
-
} if (rf & 2) {
|
|
56
|
-
const ctx_r1 = i0.ɵɵnextContext();
|
|
57
|
-
i0.ɵɵproperty("id", ctx_r1.rendererId)("formGroup", ctx_r1.formGroup)("target", ctx_r1.target);
|
|
58
|
-
i0.ɵɵadvance(6);
|
|
59
|
-
i0.ɵɵconditional(ctx_r1.options.buttons.submit.icon ? 6 : -1);
|
|
60
|
-
i0.ɵɵadvance();
|
|
61
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.action ? ctx_r1.action : ctx_r1.options.buttons.submit.text, " ");
|
|
62
|
-
i0.ɵɵadvance(2);
|
|
63
|
-
i0.ɵɵconditional(ctx_r1.options.buttons.clear ? 9 : -1);
|
|
64
|
-
} }
|
|
65
|
-
function CrudFormComponent_Conditional_1_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
66
|
-
i0.ɵɵelement(0, "ion-icon", 6);
|
|
67
|
-
} if (rf & 2) {
|
|
68
|
-
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
69
|
-
i0.ɵɵproperty("slot", ctx_r1.options.buttons.submit.iconSlot)("name", ctx_r1.options.buttons.submit.icon);
|
|
70
|
-
} }
|
|
71
|
-
function CrudFormComponent_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
72
|
-
const _r4 = i0.ɵɵgetCurrentView();
|
|
73
|
-
i0.ɵɵelementStart(0, "div")(1, "ion-button", 10);
|
|
74
|
-
i0.ɵɵlistener("click", function CrudFormComponent_Conditional_1_Conditional_1_Template_ion_button_click_1_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.handleDelete()); });
|
|
75
|
-
i0.ɵɵtemplate(2, CrudFormComponent_Conditional_1_Conditional_1_Conditional_2_Template, 1, 2, "ion-icon", 6);
|
|
76
|
-
i0.ɵɵtext(3, " Delete ");
|
|
77
|
-
i0.ɵɵelementEnd()();
|
|
78
|
-
} if (rf & 2) {
|
|
79
|
-
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
80
|
-
i0.ɵɵadvance(2);
|
|
81
|
-
i0.ɵɵconditional(ctx_r1.options.buttons.submit.icon ? 2 : -1);
|
|
82
|
-
} }
|
|
83
|
-
function CrudFormComponent_Conditional_1_Conditional_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
84
|
-
i0.ɵɵelement(0, "ion-icon", 6);
|
|
85
|
-
} if (rf & 2) {
|
|
86
|
-
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
87
|
-
i0.ɵɵproperty("slot", ctx_r1.options.buttons.submit.iconSlot)("name", ctx_r1.options.buttons.submit.icon);
|
|
88
|
-
} }
|
|
89
|
-
function CrudFormComponent_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
90
|
-
i0.ɵɵelementStart(0, "div")(1, "ion-button", 5);
|
|
91
|
-
i0.ɵɵtemplate(2, CrudFormComponent_Conditional_1_Conditional_2_Conditional_2_Template, 1, 2, "ion-icon", 6);
|
|
92
|
-
i0.ɵɵtext(3);
|
|
93
|
-
i0.ɵɵelementEnd()();
|
|
94
|
-
} if (rf & 2) {
|
|
95
|
-
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
96
|
-
i0.ɵɵadvance(2);
|
|
97
|
-
i0.ɵɵconditional(ctx_r1.options.buttons.submit.icon ? 2 : -1);
|
|
98
|
-
i0.ɵɵadvance();
|
|
99
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.options.buttons.submit.text, " ");
|
|
100
|
-
} }
|
|
101
|
-
function CrudFormComponent_Conditional_1_Conditional_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
102
|
-
i0.ɵɵelement(0, "ion-icon", 6);
|
|
103
|
-
} if (rf & 2) {
|
|
104
|
-
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
105
|
-
i0.ɵɵproperty("slot", ctx_r1.options.buttons.clear == null ? null : ctx_r1.options.buttons.clear.iconSlot)("name", ctx_r1.options.buttons.clear == null ? null : ctx_r1.options.buttons.clear.icon);
|
|
106
|
-
} }
|
|
107
|
-
function CrudFormComponent_Conditional_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
108
|
-
const _r5 = i0.ɵɵgetCurrentView();
|
|
109
|
-
i0.ɵɵelementStart(0, "div")(1, "ion-button", 8);
|
|
110
|
-
i0.ɵɵlistener("click", function CrudFormComponent_Conditional_1_Conditional_3_Template_ion_button_click_1_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.handleReset()); });
|
|
111
|
-
i0.ɵɵtemplate(2, CrudFormComponent_Conditional_1_Conditional_3_Conditional_2_Template, 1, 2, "ion-icon", 6);
|
|
112
|
-
i0.ɵɵtext(3);
|
|
113
|
-
i0.ɵɵelementEnd()();
|
|
114
|
-
} if (rf & 2) {
|
|
115
|
-
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
116
|
-
i0.ɵɵadvance(2);
|
|
117
|
-
i0.ɵɵconditional((ctx_r1.options.buttons.clear == null ? null : ctx_r1.options.buttons.clear.icon) ? 2 : -1);
|
|
118
|
-
i0.ɵɵadvance();
|
|
119
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpureFunction0(2, _c3).includes(ctx_r1.operation) ? "Back" : ctx_r1.options.buttons.clear == null ? null : ctx_r1.options.buttons.clear.text, " ");
|
|
120
|
-
} }
|
|
121
|
-
function CrudFormComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
122
|
-
i0.ɵɵelementStart(0, "div", 9);
|
|
123
|
-
i0.ɵɵtemplate(1, CrudFormComponent_Conditional_1_Conditional_1_Template, 4, 1, "div")(2, CrudFormComponent_Conditional_1_Conditional_2_Template, 4, 2, "div")(3, CrudFormComponent_Conditional_1_Conditional_3_Template, 4, 3, "div");
|
|
124
|
-
i0.ɵɵelementEnd();
|
|
125
|
-
} if (rf & 2) {
|
|
126
|
-
const ctx_r1 = i0.ɵɵnextContext();
|
|
127
|
-
i0.ɵɵclassMap("dcf-grid dcf-grid-collapse dcf-flex dcf-flex-left " + ctx_r1.operation);
|
|
128
|
-
i0.ɵɵadvance();
|
|
129
|
-
i0.ɵɵconditional(ctx_r1.operation === "delete" && ctx_r1.uid ? 1 : -1);
|
|
130
|
-
i0.ɵɵadvance();
|
|
131
|
-
i0.ɵɵconditional(ctx_r1.operation === ctx_r1.OperationKeys.CREATE || ctx_r1.operation === ctx_r1.OperationKeys.UPDATE ? 2 : -1);
|
|
132
|
-
i0.ɵɵadvance();
|
|
133
|
-
i0.ɵɵconditional(ctx_r1.options.buttons.clear ? 3 : -1);
|
|
134
|
-
} }
|
|
135
|
-
/**
|
|
136
|
-
* @component CrudFormComponent
|
|
137
|
-
* @example <ngx-decaf-crud-form
|
|
138
|
-
* action="create"
|
|
139
|
-
* operation="create"
|
|
140
|
-
* formGroup="formGroup"
|
|
141
|
-
* rendererId="rendererId"
|
|
142
|
-
* submitEvent="submitEvent"
|
|
143
|
-
* target="_self"
|
|
144
|
-
* method="event">
|
|
145
|
-
* </ngx-decaf-crud-form>
|
|
146
|
-
*
|
|
147
|
-
* @param {string} action - The action to be performed (create, read, update, delete)
|
|
148
|
-
* @param {CrudOperations} operation - The CRUD operation being performed (create, read, update, delete)
|
|
149
|
-
* @param {FormGroup} formGroup - The form group
|
|
150
|
-
* @param {string} rendererId - The renderer id
|
|
151
|
-
* @param {SubmitEvent} submitEvent - The submit event
|
|
152
|
-
* @param {string} target - The target
|
|
153
|
-
* @param {string} method - The method
|
|
154
|
-
*/
|
|
155
|
-
let CrudFormComponent = class CrudFormComponent {
|
|
156
|
-
constructor() {
|
|
157
|
-
this.updateOn = 'change';
|
|
158
|
-
this.target = '_self';
|
|
159
|
-
this.method = 'event';
|
|
160
|
-
this.submitEvent = new EventEmitter();
|
|
161
|
-
/**
|
|
162
|
-
* @description Angular Location service.
|
|
163
|
-
* @summary Injected service that provides access to the browser's URL and history.
|
|
164
|
-
* This service is used for interacting with the browser's history API, allowing
|
|
165
|
-
* for back navigation and URL manipulation outside of Angular's router.
|
|
166
|
-
*
|
|
167
|
-
* @private
|
|
168
|
-
* @type {Location}
|
|
169
|
-
* @memberOf CrudFormComponent
|
|
170
|
-
*/
|
|
171
|
-
this.location = inject(Location);
|
|
172
|
-
this.OperationKeys = OperationKeys;
|
|
173
|
-
}
|
|
174
|
-
// ngAfterViewInit() {
|
|
175
|
-
// if (![OperationKeys.READ, OperationKeys.DELETE].includes(this.operation))
|
|
176
|
-
// NgxFormService.formAfterViewInit(this, this.rendererId);
|
|
177
|
-
// }
|
|
178
|
-
async ngOnInit() {
|
|
179
|
-
if (!this.logger)
|
|
180
|
-
this.logger = getLogger(this);
|
|
181
|
-
if (this.operation === OperationKeys.READ || this.operation === OperationKeys.DELETE)
|
|
182
|
-
this.formGroup = undefined;
|
|
183
|
-
this.options = Object.assign({}, DefaultFormReactiveOptions, this.options || {});
|
|
184
|
-
}
|
|
185
|
-
ngOnDestroy() {
|
|
186
|
-
if (this.formGroup)
|
|
187
|
-
NgxFormService.unregister(this.formGroup);
|
|
188
|
-
}
|
|
189
|
-
/**
|
|
190
|
-
* @param {SubmitEvent} event
|
|
191
|
-
*/
|
|
192
|
-
async submit(event) {
|
|
193
|
-
event.preventDefault();
|
|
194
|
-
event.stopImmediatePropagation();
|
|
195
|
-
event.stopPropagation();
|
|
196
|
-
if (!NgxFormService.validateFields(this.formGroup))
|
|
197
|
-
return false;
|
|
198
|
-
const data = NgxFormService.getFormData(this.formGroup);
|
|
199
|
-
this.submitEvent.emit({
|
|
200
|
-
data,
|
|
201
|
-
component: 'CrudFormComponent',
|
|
202
|
-
name: this.action || EventConstants.SUBMIT_EVENT,
|
|
203
|
-
handlers: this.handlers,
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
handleReset() {
|
|
207
|
-
this.location.back();
|
|
208
|
-
// if(OperationKeys.DELETE !== this.operation)
|
|
209
|
-
// NgxFormService.reset(this.formGroup);
|
|
210
|
-
// else
|
|
211
|
-
// this.location.back();
|
|
212
|
-
}
|
|
213
|
-
handleDelete() {
|
|
214
|
-
this.submitEvent.emit({
|
|
215
|
-
data: this.uid,
|
|
216
|
-
component: 'CrudFormComponent',
|
|
217
|
-
name: EventConstants.SUBMIT_EVENT,
|
|
218
|
-
});
|
|
219
|
-
}
|
|
220
|
-
static { this.ɵfac = function CrudFormComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CrudFormComponent)(); }; }
|
|
221
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CrudFormComponent, selectors: [["ngx-decaf-crud-form"]], viewQuery: function CrudFormComponent_Query(rf, ctx) { if (rf & 1) {
|
|
222
|
-
i0.ɵɵviewQuery(_c0, 5, ElementRef);
|
|
223
|
-
} if (rf & 2) {
|
|
224
|
-
let _t;
|
|
225
|
-
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.component = _t.first);
|
|
226
|
-
} }, inputs: { model: "model", updateOn: "updateOn", target: "target", method: "method", options: "options", action: "action", operation: "operation", handlers: "handlers", formGroup: "formGroup", childOf: "childOf", rendererId: "rendererId", uid: "uid" }, outputs: { submitEvent: "submitEvent" }, standalone: true, features: [i0.ɵɵStandaloneFeature], ngContentSelectors: _c1, decls: 2, vars: 1, consts: [["reactiveForm", ""], ["novalidate", "", 3, "id", "formGroup", "target"], ["id", "dcf-buttons-container", 3, "class"], ["novalidate", "", 3, "submit", "id", "formGroup", "target"], ["id", "dcf-buttons-container", 1, "dcf-grid", "dcf-grid-collapse", "dcf-flex", "dcf-flex-left"], ["type", "submit"], ["aria-hidden", "true", 3, "slot", "name"], ["fill", "clear"], ["fill", "clear", 3, "click"], ["id", "dcf-buttons-container"], ["color", "danger", "type", "button", 3, "click"]], template: function CrudFormComponent_Template(rf, ctx) { if (rf & 1) {
|
|
227
|
-
i0.ɵɵprojectionDef();
|
|
228
|
-
i0.ɵɵtemplate(0, CrudFormComponent_Conditional_0_Template, 10, 6, "form", 1)(1, CrudFormComponent_Conditional_1_Template, 4, 5, "div", 2);
|
|
229
|
-
} if (rf & 2) {
|
|
230
|
-
i0.ɵɵconditional(ctx.operation !== "read" && ctx.operation !== "delete" ? 0 : 1);
|
|
231
|
-
} }, dependencies: [ForAngularModule, i1.IonButton, i2.ɵNgNoValidate, i2.NgControlStatusGroup, i2.FormGroupDirective, IonIcon], styles: ["#dcf-buttons-container[_ngcontent-%COMP%]{margin-top:1.8rem;margin-bottom:0}@media (min-width: 991px){#dcf-buttons-container.dcf-flex[_ngcontent-%COMP%]{flex-direction:row-reverse}}@media (max-width: 990px){#dcf-buttons-container.dcf-flex[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{width:100%}#dcf-buttons-container.dcf-flex[_ngcontent-%COMP%] ion-button[_ngcontent-%COMP%]{width:100%;margin-bottom:1rem}}"] }); }
|
|
232
|
-
};
|
|
233
|
-
CrudFormComponent = __decorate([
|
|
234
|
-
Dynamic()
|
|
235
|
-
], CrudFormComponent);
|
|
236
|
-
export { CrudFormComponent };
|
|
237
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CrudFormComponent, [{
|
|
238
|
-
type: Component,
|
|
239
|
-
args: [{ standalone: true, selector: 'ngx-decaf-crud-form', imports: [ForAngularModule, IonIcon], template: "@if(operation !== 'read' && operation !== 'delete') {\n <form #reactiveForm [id]=\"rendererId\" [formGroup]=\"formGroup\" (submit)=\"submit($event)\" novalidate [target]=\"target\">\n <ng-content #formContent></ng-content>\n <div id=\"dcf-buttons-container\" class=\"dcf-grid dcf-grid-collapse dcf-flex dcf-flex-left\">\n <div>\n <ion-button\n type=\"submit\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{ action ? action : options.buttons.submit.text}}\n </ion-button>\n </div>\n <div>\n @if(options.buttons.clear) {\n <ion-button fill=\"clear\" (click)=\"handleReset()\">\n @if(options.buttons.clear?.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.clear?.iconSlot\" [name]=\"options.buttons.clear?.icon\"></ion-icon>\n }\n {{ ['create', 'update'].includes(operation) ? 'Back' : options.buttons.clear?.text}}\n </ion-button>\n }\n </div>\n </div>\n </form>\n} @else {\n <div [class]=\"'dcf-grid dcf-grid-collapse dcf-flex dcf-flex-left ' + operation\" id=\"dcf-buttons-container\">\n\n @if(operation === 'delete' && uid) {\n <div>\n <ion-button\n (click)=\"handleDelete()\"\n color=\"danger\"\n type=\"button\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n Delete\n </ion-button>\n </div>\n\n }\n @if(operation === OperationKeys.CREATE || operation === OperationKeys.UPDATE) {\n <div>\n <ion-button\n type=\"submit\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{options.buttons.submit.text}}\n </ion-button>\n </div>\n }\n\n @if(options.buttons.clear) {\n <div>\n <ion-button fill=\"clear\" (click)=\"handleReset()\">\n @if(options.buttons.clear?.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.clear?.iconSlot\" [name]=\"options.buttons.clear?.icon\"></ion-icon>\n }\n {{ ['delete', 'read', 'update'].includes(operation) ? 'Back' : options.buttons.clear?.text}}\n </ion-button>\n </div>\n\n }\n </div>\n}\n\n", styles: ["#dcf-buttons-container{margin-top:1.8rem;margin-bottom:0}@media (min-width: 991px){#dcf-buttons-container.dcf-flex{flex-direction:row-reverse}}@media (max-width: 990px){#dcf-buttons-container.dcf-flex div{width:100%}#dcf-buttons-container.dcf-flex ion-button{width:100%;margin-bottom:1rem}}\n"] }]
|
|
240
|
-
}], null, { model: [{
|
|
241
|
-
type: Input
|
|
242
|
-
}], updateOn: [{
|
|
243
|
-
type: Input
|
|
244
|
-
}], component: [{
|
|
245
|
-
type: ViewChild,
|
|
246
|
-
args: ['reactiveForm', { static: false, read: ElementRef }]
|
|
247
|
-
}], target: [{
|
|
248
|
-
type: Input
|
|
249
|
-
}], method: [{
|
|
250
|
-
type: Input
|
|
251
|
-
}], options: [{
|
|
252
|
-
type: Input
|
|
253
|
-
}], action: [{
|
|
254
|
-
type: Input
|
|
255
|
-
}], operation: [{
|
|
256
|
-
type: Input,
|
|
257
|
-
args: [{ required: true }]
|
|
258
|
-
}], handlers: [{
|
|
259
|
-
type: Input
|
|
260
|
-
}], formGroup: [{
|
|
261
|
-
type: Input
|
|
262
|
-
}], childOf: [{
|
|
263
|
-
type: Input
|
|
264
|
-
}], rendererId: [{
|
|
265
|
-
type: Input
|
|
266
|
-
}], uid: [{
|
|
267
|
-
type: Input
|
|
268
|
-
}], submitEvent: [{
|
|
269
|
-
type: Output
|
|
270
|
-
}] }); })();
|
|
271
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CrudFormComponent, { className: "CrudFormComponent", filePath: "components/crud-form/crud-form.component.ts", lineNumber: 54 }); })();
|
|
272
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jcnVkLWZvcm0vY3J1ZC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jcnVkLWZvcm0vY3J1ZC1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUczQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFpQixPQUFPLEVBQUUsY0FBYyxFQUFrRCxNQUFNLGNBQWMsQ0FBQztBQUV0SCxPQUFPLEVBQWtCLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7SUNaeEMsOEJBQXNIOzs7SUFBaEQsQUFBekMsNkRBQXdDLDRDQUFxQzs7O0lBU3RHLDhCQUF1SDs7O0lBQWhELEFBQXpDLDBHQUF3Qyx5RkFBcUM7Ozs7SUFGL0cscUNBQWlEO0lBQXhCLHdNQUFTLG9CQUFhLEtBQUM7SUFDOUMsMkdBQWtDO0lBR2xDLFlBQ0Y7SUFBQSxpQkFBYTs7O0lBSlgsY0FFQztJQUZELDRHQUVDO0lBQ0QsY0FDRjtJQURFLGlMQUNGOzs7O0lBbkJWLGtDQUFxSDtJQUF2RCwyTEFBVSxx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UzttQkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7WUFJOUQsTUFBTTtrQkFETCxLQUFLO1lBSU4sTUFBTTtrQkFETCxLQUFLO1lBSU4sT0FBTztrQkFETixLQUFLO1lBSU4sTUFBTTtrQkFETCxLQUFLO1lBSU4sU0FBUztrQkFEUixLQUFLO21CQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUl6QixRQUFRO2tCQURQLEtBQUs7WUFJTixTQUFTO2tCQURSLEtBQUs7WUFXTixPQUFPO2tCQUROLEtBQUs7WUFJTixVQUFVO2tCQURULEtBQUs7WUFXTixHQUFHO2tCQURGLEtBQUs7WUFLTixXQUFXO2tCQURWLE1BQU07O2tGQS9ESSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1FbGVtZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBOZ3hGb3JtU2VydmljZSB9IGZyb20gJy4uLy4uL2VuZ2luZS9OZ3hGb3JtU2VydmljZSc7XG5pbXBvcnQgeyBDcnVkRm9ybUV2ZW50LCBEeW5hbWljLCBFdmVudENvbnN0YW50cywgRmllbGRVcGRhdGVNb2RlLCBIVE1MRm9ybVRhcmdldCwgUmVuZGVyZWRNb2RlbCB9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQgeyBDcnVkRm9ybU9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IENydWRPcGVyYXRpb25zLCBPcGVyYXRpb25LZXlzIH0gZnJvbSAnQGRlY2FmLXRzL2RiLWRlY29yYXRvcnMnO1xuaW1wb3J0IHsgRGVmYXVsdEZvcm1SZWFjdGl2ZU9wdGlvbnMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBGb3JBbmd1bGFyTW9kdWxlLCBnZXRMb2dnZXIgfSBmcm9tICcuLi8uLi9mb3ItYW5ndWxhci5tb2R1bGUnO1xuaW1wb3J0IHsgSW9uSWNvbiB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tICdAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb24nO1xuaW1wb3J0IHsgTG9nZ2VyIH0gZnJvbSAnQGRlY2FmLXRzL2xvZ2dpbmcnO1xuXG5cbi8qKlxuICogQGNvbXBvbmVudCBDcnVkRm9ybUNvbXBvbmVudFxuICogQGV4YW1wbGUgPG5neC1kZWNhZi1jcnVkLWZvcm1cbiAqICAgYWN0aW9uPVwiY3JlYXRlXCJcbiAqICAgb3BlcmF0aW9uPVwiY3JlYXRlXCJcbiAqICAgZm9ybUdyb3VwPVwiZm9ybUdyb3VwXCJcbiAqICAgcmVuZGVyZXJJZD1cInJlbmRlcmVySWRcIlxuICogICBzdWJtaXRFdmVudD1cInN1Ym1pdEV2ZW50XCJcbiAqICAgdGFyZ2V0PVwiX3NlbGZcIlxuICogICBtZXRob2Q9XCJldmVudFwiPlxuICogPC9uZ3gtZGVjYWYtY3J1ZC1mb3JtPlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb24gLSBUaGUgYWN0aW9uIHRvIGJlIHBlcmZvcm1lZCAoY3JlYXRlLCByZWFkLCB1cGRhdGUsIGRlbGV0ZSlcbiAqIEBwYXJhbSB7Q3J1ZE9wZXJhdGlvbnN9IG9wZXJhdGlvbiAtIFRoZSBDUlVEIG9wZXJhdGlvbiBiZWluZyBwZXJmb3JtZWQgKGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBkZWxldGUpXG4gKiBAcGFyYW0ge0Zvcm1Hcm91cH0gZm9ybUdyb3VwIC0gVGhlIGZvcm0gZ3JvdXBcbiAqIEBwYXJhbSB7c3RyaW5nfSByZW5kZXJlcklkIC0gVGhlIHJlbmRlcmVyIGlkXG4gKiBAcGFyYW0ge1N1Ym1pdEV2ZW50fSBzdWJtaXRFdmVudCAtIFRoZSBzdWJtaXQgZXZlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXQgLSBUaGUgdGFyZ2V0XG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIC0gVGhlIG1ldGhvZFxuICovXG5ARHluYW1pYygpXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICduZ3gtZGVjYWYtY3J1ZC1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NydWQtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NydWQtZm9ybS5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOiBbRm9yQW5ndWxhck1vZHVsZSwgSW9uSWNvbl0sXG59KVxuZXhwb3J0IGNsYXNzIENydWRGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBGb3JtRWxlbWVudCwgT25EZXN0cm95LCBSZW5kZXJlZE1vZGVsIHtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlcG9zaXRvcnkgbW9kZWwgZm9yIGRhdGEgb3BlcmF0aW9ucy5cbiAgICogQHN1bW1hcnkgVGhlIGRhdGEgbW9kZWwgcmVwb3NpdG9yeSB0aGF0IHRoaXMgY29tcG9uZW50IHdpbGwgdXNlIGZvciBDUlVEIG9wZXJhdGlvbnMuXG4gICAqIFRoaXMgcHJvdmlkZXMgYSBjb25uZWN0aW9uIHRvIHRoZSBkYXRhIGxheWVyIGZvciByZXRyaWV2aW5nIGFuZCBtYW5pcHVsYXRpbmcgZGF0YS5cbiAgICpcbiAgICogQHR5cGUge01vZGVsfCB1bmRlZmluZWR9XG4gICAqL1xuICBASW5wdXQoKVxuICBtb2RlbCE6IE1vZGVsIHwgdW5kZWZpbmVkO1xuXG4gIEBJbnB1dCgpXG4gIHVwZGF0ZU9uOiBGaWVsZFVwZGF0ZU1vZGUgPSAnY2hhbmdlJztcblxuICBAVmlld0NoaWxkKCdyZWFjdGl2ZUZvcm0nLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgY29tcG9uZW50ITogRWxlbWVudFJlZjtcblxuICBASW5wdXQoKVxuICB0YXJnZXQ6IEhUTUxGb3JtVGFyZ2V0ID0gJ19zZWxmJztcblxuICBASW5wdXQoKVxuICBtZXRob2Q6ICdnZXQnIHwgJ3Bvc3QnIHwgJ2V2ZW50JyA9ICdldmVudCc7XG5cbiAgQElucHV0KClcbiAgb3B0aW9ucyE6IENydWRGb3JtT3B0aW9ucztcblxuICBASW5wdXQoKVxuICBhY3Rpb24/OiBzdHJpbmc7XG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgb3BlcmF0aW9uITogQ3J1ZE9wZXJhdGlvbnM7XG5cbiAgQElucHV0KClcbiAgaGFuZGxlcnMhOiBSZWNvcmQ8c3RyaW5nLCAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duIHwgUHJvbWlzZTx1bmtub3duPj47XG5cbiAgQElucHV0KClcbiAgZm9ybUdyb3VwITogRm9ybUdyb3VwIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUGF0aCB0byB0aGUgcGFyZW50IEZvcm1Hcm91cCwgaWYgbmVzdGVkLlxuICAgKiBAc3VtbWFyeSBGdWxsIGRvdC1kZWxpbWl0ZWQgcGF0aCBvZiB0aGUgcGFyZW50IEZvcm1Hcm91cC4gU2V0IG9ubHkgd2hlbiBpcyBwYXJ0IG9mIGEgbmVzdGVkIHN0cnVjdHVyZS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBjaGlsZE9mPzogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHJlbmRlcmVySWQhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGN1cnJlbnQgcmVjb3JkLlxuICAgKiBAc3VtbWFyeSBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY3VycmVudCByZWNvcmQgYmVpbmcgZGlzcGxheWVkIG9yIG1hbmlwdWxhdGVkLlxuICAgKiBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHByaW1hcnkga2V5IGZvciBvcGVyYXRpb25zIG9uIHNwZWNpZmljIHJlY29yZHMuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmcgfCBudW1iZXJ9XG4gICAqL1xuICBASW5wdXQoKVxuICB1aWQhOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQ7XG5cblxuICBAT3V0cHV0KClcbiAgc3VibWl0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPENydWRGb3JtRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMb2dnZXIgaW5zdGFuY2UgZm9yIHRoZSBjb21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IFByb3ZpZGVzIGxvZ2dpbmcgY2FwYWJpbGl0aWVzIGZvciB0aGUgY29tcG9uZW50LCBhbGxvd2luZyBmb3IgY29uc2lzdGVudFxuICAgKiBhbmQgc3RydWN0dXJlZCBsb2dnaW5nIG9mIGluZm9ybWF0aW9uLCB3YXJuaW5ncywgYW5kIGVycm9ycy4gVGhpcyBsb2dnZXIgaXMgaW5pdGlhbGl6ZWRcbiAgICogaW4gdGhlIG5nT25Jbml0IG1ldGhvZCB1c2luZyB0aGUgZ2V0TG9nZ2VyIGZ1bmN0aW9uIGZyb20gdGhlIEZvckFuZ3VsYXJNb2R1bGUuXG4gICAqXG4gICAqIFRoZSBsb2dnZXIgaXMgdXNlZCB0aHJvdWdob3V0IHRoZSBjb21wb25lbnQgdG8gcmVjb3JkIGltcG9ydGFudCBldmVudHMsIGRlYnVnIGluZm9ybWF0aW9uLFxuICAgKiBhbmQgcG90ZW50aWFsIGlzc3Vlcy4gSXQgaGVscHMgaW4gbW9uaXRvcmluZyB0aGUgY29tcG9uZW50J3MgYmVoYXZpb3IsIHRyYWNraW5nIHRoZSBmbG93XG4gICAqIG9mIG9wZXJhdGlvbnMsIGFuZCBmYWNpbGl0YXRpbmcgZWFzaWVyIGRlYnVnZ2luZyBhbmQgbWFpbnRlbmFuY2UuXG4gICAqXG4gICAqIEB0eXBlIHtMb2dnZXJ9XG4gICAqIEBwcml2YXRlXG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgcHJpdmF0ZSBsb2dnZXIhOiBMb2dnZXI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBbmd1bGFyIExvY2F0aW9uIHNlcnZpY2UuXG4gICAqIEBzdW1tYXJ5IEluamVjdGVkIHNlcnZpY2UgdGhhdCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGJyb3dzZXIncyBVUkwgYW5kIGhpc3RvcnkuXG4gICAqIFRoaXMgc2VydmljZSBpcyB1c2VkIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBicm93c2VyJ3MgaGlzdG9yeSBBUEksIGFsbG93aW5nXG4gICAqIGZvciBiYWNrIG5hdmlnYXRpb24gYW5kIFVSTCBtYW5pcHVsYXRpb24gb3V0c2lkZSBvZiBBbmd1bGFyJ3Mgcm91dGVyLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7TG9jYXRpb259XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24gPSBpbmplY3QoTG9jYXRpb24pO1xuXG4gIC8vIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyBpZiAoIVtPcGVyYXRpb25LZXlzLlJFQUQsIE9wZXJhdGlvbktleXMuREVMRVRFXS5pbmNsdWRlcyh0aGlzLm9wZXJhdGlvbikpXG4gICAgLy8gICBOZ3hGb3JtU2VydmljZS5mb3JtQWZ0ZXJWaWV3SW5pdCh0aGlzLCB0aGlzLnJlbmRlcmVySWQpO1xuICAvLyB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLmxvZ2dlcilcbiAgICAgIHRoaXMubG9nZ2VyID0gZ2V0TG9nZ2VyKHRoaXMpO1xuICAgIGlmICh0aGlzLm9wZXJhdGlvbiA9PT0gT3BlcmF0aW9uS2V5cy5SRUFEIHx8IHRoaXMub3BlcmF0aW9uID09PSBPcGVyYXRpb25LZXlzLkRFTEVURSlcbiAgICAgIHRoaXMuZm9ybUdyb3VwID0gdW5kZWZpbmVkO1xuICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIERlZmF1bHRGb3JtUmVhY3RpdmVPcHRpb25zLFxuICAgICAgdGhpcy5vcHRpb25zIHx8IHt9LFxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5mb3JtR3JvdXApXG4gICAgICBOZ3hGb3JtU2VydmljZS51bnJlZ2lzdGVyKHRoaXMuZm9ybUdyb3VwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gIHtTdWJtaXRFdmVudH0gZXZlbnRcbiAgICovXG4gIGFzeW5jIHN1Ym1pdChldmVudDogU3VibWl0RXZlbnQpOiBQcm9taXNlPGJvb2xlYW4gfCB2b2lkPiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmICghTmd4Rm9ybVNlcnZpY2UudmFsaWRhdGVGaWVsZHModGhpcy5mb3JtR3JvdXAgYXMgRm9ybUdyb3VwKSlcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IGRhdGEgPSBOZ3hGb3JtU2VydmljZS5nZXRGb3JtRGF0YSh0aGlzLmZvcm1Hcm91cCBhcyBGb3JtR3JvdXApO1xuICAgIHRoaXMuc3VibWl0RXZlbnQuZW1pdCh7XG4gICAgICBkYXRhLFxuICAgICAgY29tcG9uZW50OiAnQ3J1ZEZvcm1Db21wb25lbnQnLFxuICAgICAgbmFtZTogdGhpcy5hY3Rpb24gfHwgRXZlbnRDb25zdGFudHMuU1VCTUlUX0VWRU5ULFxuICAgICAgaGFuZGxlcnM6IHRoaXMuaGFuZGxlcnMsXG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVSZXNldCgpIHtcbiAgICB0aGlzLmxvY2F0aW9uLmJhY2soKTtcbiAgICAvLyBpZihPcGVyYXRpb25LZXlzLkRFTEVURSAhPT0gdGhpcy5vcGVyYXRpb24pXG4gICAgLy8gICBOZ3hGb3JtU2VydmljZS5yZXNldCh0aGlzLmZvcm1Hcm91cCk7XG4gICAgLy8gZWxzZVxuICAgIC8vICAgdGhpcy5sb2NhdGlvbi5iYWNrKCk7XG4gIH1cblxuICBoYW5kbGVEZWxldGUoKSB7XG4gICAgdGhpcy5zdWJtaXRFdmVudC5lbWl0KHtcbiAgICAgIGRhdGE6IHRoaXMudWlkLFxuICAgICAgY29tcG9uZW50OiAnQ3J1ZEZvcm1Db21wb25lbnQnLFxuICAgICAgbmFtZTogRXZlbnRDb25zdGFudHMuU1VCTUlUX0VWRU5ULFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IE9wZXJhdGlvbktleXMgPSBPcGVyYXRpb25LZXlzO1xufVxuIiwiQGlmKG9wZXJhdGlvbiAhPT0gJ3JlYWQnICYmIG9wZXJhdGlvbiAhPT0gJ2RlbGV0ZScpIHtcbiAgPGZvcm0gI3JlYWN0aXZlRm9ybSBbaWRdPVwicmVuZGVyZXJJZFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgKHN1Ym1pdCk9XCJzdWJtaXQoJGV2ZW50KVwiIG5vdmFsaWRhdGUgW3RhcmdldF09XCJ0YXJnZXRcIj5cbiAgICA8bmctY29udGVudCAjZm9ybUNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDxkaXYgaWQ9XCJkY2YtYnV0dG9ucy1jb250YWluZXJcIiBjbGFzcz1cImRjZi1ncmlkIGRjZi1ncmlkLWNvbGxhcHNlIGRjZi1mbGV4IGRjZi1mbGV4LWxlZnRcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgdHlwZT1cInN1Ym1pdFwiPlxuICAgICAgICAgIEBpZihvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb24pIHtcbiAgICAgICAgICAgIDxpb24taWNvbiBhcmlhLWhpZGRlbj1cInRydWVcIiBbc2xvdF09XCJvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb25TbG90XCIgW25hbWVdPVwib3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAge3sgYWN0aW9uID8gYWN0aW9uIDogb3B0aW9ucy5idXR0b25zLnN1Ym1pdC50ZXh0fX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICAgIEBpZihvcHRpb25zLmJ1dHRvbnMuY2xlYXIpIHtcbiAgICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIChjbGljayk9XCJoYW5kbGVSZXNldCgpXCI+XG4gICAgICAgICAgICAgIEBpZihvcHRpb25zLmJ1dHRvbnMuY2xlYXI/Lmljb24pIHtcbiAgICAgICAgICAgICAgICA8aW9uLWljb24gIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFtzbG90XT1cIm9wdGlvbnMuYnV0dG9ucy5jbGVhcj8uaWNvblNsb3RcIiBbbmFtZV09XCJvcHRpb25zLmJ1dHRvbnMuY2xlYXI/Lmljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHt7IFsnY3JlYXRlJywgJ3VwZGF0ZSddLmluY2x1ZGVzKG9wZXJhdGlvbikgPyAnQmFjaycgOiBvcHRpb25zLmJ1dHRvbnMuY2xlYXI/LnRleHR9fVxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbn0gQGVsc2Uge1xuICA8ZGl2IFtjbGFzc109XCInZGNmLWdyaWQgZGNmLWdyaWQtY29sbGFwc2UgZGNmLWZsZXggZGNmLWZsZXgtbGVmdCAnICsgb3BlcmF0aW9uXCIgaWQ9XCJkY2YtYnV0dG9ucy1jb250YWluZXJcIj5cblxuICAgIEBpZihvcGVyYXRpb24gPT09ICdkZWxldGUnICYmIHVpZCkge1xuICAgICAgPGRpdj5cbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlRGVsZXRlKClcIlxuICAgICAgICAgIGNvbG9yPVwiZGFuZ2VyXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgQGlmKG9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvbikge1xuICAgICAgICAgICAgPGlvbi1pY29uIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFtzbG90XT1cIm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvblNsb3RcIiBbbmFtZV09XCJvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgIH1cbiAgICAgICAgICBEZWxldGVcbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICB9XG4gICAgQGlmKG9wZXJhdGlvbiA9PT0gT3BlcmF0aW9uS2V5cy5DUkVBVEUgfHwgb3BlcmF0aW9uID09PSBPcGVyYXRpb25LZXlzLlVQREFURSkge1xuICAgICAgPGRpdj5cbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICB0eXBlPVwic3VibWl0XCI+XG4gICAgICAgICAgQGlmKG9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvbikge1xuICAgICAgICAgICAgPGlvbi1pY29uIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFtzbG90XT1cIm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvblNsb3RcIiBbbmFtZV09XCJvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgIH1cbiAgICAgICAgICB7e29wdGlvbnMuYnV0dG9ucy5zdWJtaXQudGV4dH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIEBpZihvcHRpb25zLmJ1dHRvbnMuY2xlYXIpIHtcbiAgICAgIDxkaXY+XG4gICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgKGNsaWNrKT1cImhhbmRsZVJlc2V0KClcIj5cbiAgICAgICAgICBAaWYob3B0aW9ucy5idXR0b25zLmNsZWFyPy5pY29uKSB7XG4gICAgICAgICAgICA8aW9uLWljb24gIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFtzbG90XT1cIm9wdGlvbnMuYnV0dG9ucy5jbGVhcj8uaWNvblNsb3RcIiBbbmFtZV09XCJvcHRpb25zLmJ1dHRvbnMuY2xlYXI/Lmljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgIH1cbiAgICAgICAgICB7eyBbJ2RlbGV0ZScsICdyZWFkJywgJ3VwZGF0ZSddLmluY2x1ZGVzKG9wZXJhdGlvbikgPyAnQmFjaycgOiBvcHRpb25zLmJ1dHRvbnMuY2xlYXI/LnRleHR9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgIH1cbiAgPC9kaXY+XG59XG5cbiJdfQ==
|