@memberjunction/ng-core-entity-forms 5.22.0 → 5.23.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/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js +55 -59
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js +0 -1
- package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +54 -71
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +1053 -1096
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts +2 -3
- package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-management.service.js +39 -82
- package/dist/lib/custom/AIAgents/ai-agent-management.service.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +28 -31
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +15 -14
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts +4 -7
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +77 -124
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts +2 -2
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.js +10 -11
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.js.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +18 -18
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +59 -80
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +23 -24
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +862 -906
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +4 -5
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +448 -499
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts +2 -2
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js +6 -11
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js.map +1 -1
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +16 -15
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.js +160 -166
- package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.js +93 -94
- package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.js +2 -2
- package/dist/lib/custom/Lists/list-form.component.js +61 -63
- package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-category-dialog.component.js +33 -59
- package/dist/lib/custom/Queries/query-category-dialog.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +354 -360
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.js +62 -71
- package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-param-dialog.component.js +128 -124
- package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.d.ts +45 -22
- package/dist/lib/custom/Templates/template-params-grid.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.js +380 -384
- package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.js +34 -36
- package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.js +8 -9
- package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-feedback-form.component.js +4 -4
- package/dist/lib/custom/Tests/test-run-feedback-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.js +7 -7
- package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.js +6 -7
- package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.js +6 -7
- package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +381 -409
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +74 -63
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js +10 -10
- package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +352 -332
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +22 -27
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +51 -81
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +4 -5
- package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.js +59 -66
- package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +176 -156
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.js +65 -0
- package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.js +89 -0
- package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +80 -44
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJContentItemTag/mjcontentitemtag.form.component.js +11 -8
- package/dist/lib/generated/Entities/MJContentItemTag/mjcontentitemtag.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js +39 -24
- package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js +35 -17
- package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJDuplicateRunDetail/mjduplicaterundetail.form.component.js +15 -13
- package/dist/lib/generated/Entities/MJDuplicateRunDetail/mjduplicaterundetail.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js +7 -9
- package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js +21 -9
- package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js +41 -5
- package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +280 -279
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +102 -142
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/lib/shared/components/template-editor.component.js +14 -15
- package/dist/lib/shared/components/template-editor.component.js.map +1 -1
- package/package.json +34 -41
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
2
|
import { RunView } from '@memberjunction/core';
|
|
3
3
|
import { UUIDsEqual } from '@memberjunction/global';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "@memberjunction/ng-shared";
|
|
6
|
-
import * as i2 from "@
|
|
7
|
-
import * as i3 from "@
|
|
8
|
-
import * as i4 from "@progress/kendo-angular-inputs";
|
|
9
|
-
import * as i5 from "@progress/kendo-angular-buttons";
|
|
6
|
+
import * as i2 from "@angular/forms";
|
|
7
|
+
import * as i3 from "@memberjunction/ng-ui-components";
|
|
10
8
|
const _forTrack0 = ($index, $item) => $item.ID;
|
|
11
9
|
function EntitySelectorDialogComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
12
10
|
i0.ɵɵelement(0, "i");
|
|
@@ -14,11 +12,8 @@ function EntitySelectorDialogComponent_Conditional_3_Template(rf, ctx) { if (rf
|
|
|
14
12
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
15
13
|
i0.ɵɵclassMap(ctx_r0.config.icon);
|
|
16
14
|
} }
|
|
17
|
-
function
|
|
18
|
-
i0.ɵɵ
|
|
19
|
-
} }
|
|
20
|
-
function EntitySelectorDialogComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
21
|
-
i0.ɵɵelementStart(0, "div", 7);
|
|
15
|
+
function EntitySelectorDialogComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
16
|
+
i0.ɵɵelementStart(0, "div", 8);
|
|
22
17
|
i0.ɵɵelement(1, "i", 15);
|
|
23
18
|
i0.ɵɵelementStart(2, "p");
|
|
24
19
|
i0.ɵɵtext(3);
|
|
@@ -28,7 +23,7 @@ function EntitySelectorDialogComponent_Conditional_9_Template(rf, ctx) { if (rf
|
|
|
28
23
|
i0.ɵɵadvance(3);
|
|
29
24
|
i0.ɵɵtextInterpolate1("Loading ", ctx_r0.config.entityName, "...");
|
|
30
25
|
} }
|
|
31
|
-
function
|
|
26
|
+
function EntitySelectorDialogComponent_Conditional_11_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
32
27
|
i0.ɵɵelementStart(0, "div", 16);
|
|
33
28
|
i0.ɵɵelement(1, "i", 18);
|
|
34
29
|
i0.ɵɵelementStart(2, "p");
|
|
@@ -39,7 +34,7 @@ function EntitySelectorDialogComponent_Conditional_10_Conditional_1_Template(rf,
|
|
|
39
34
|
i0.ɵɵadvance(3);
|
|
40
35
|
i0.ɵɵtextInterpolate1("No ", ctx_r0.config.entityName, " found");
|
|
41
36
|
} }
|
|
42
|
-
function
|
|
37
|
+
function EntitySelectorDialogComponent_Conditional_11_Conditional_2_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
43
38
|
i0.ɵɵelementStart(0, "div", 24);
|
|
44
39
|
i0.ɵɵtext(1);
|
|
45
40
|
i0.ɵɵelementEnd();
|
|
@@ -49,7 +44,7 @@ function EntitySelectorDialogComponent_Conditional_10_Conditional_2_For_2_Condit
|
|
|
49
44
|
i0.ɵɵadvance();
|
|
50
45
|
i0.ɵɵtextInterpolate(entity_r3[ctx_r0.config.descriptionField]);
|
|
51
46
|
} }
|
|
52
|
-
function
|
|
47
|
+
function EntitySelectorDialogComponent_Conditional_11_Conditional_2_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
53
48
|
i0.ɵɵelementStart(0, "div", 25)(1, "span", 26);
|
|
54
49
|
i0.ɵɵtext(2);
|
|
55
50
|
i0.ɵɵelementEnd()();
|
|
@@ -61,18 +56,18 @@ function EntitySelectorDialogComponent_Conditional_10_Conditional_2_For_2_Condit
|
|
|
61
56
|
i0.ɵɵadvance();
|
|
62
57
|
i0.ɵɵtextInterpolate1(" ", entity_r3[ctx_r0.config.statusField], " ");
|
|
63
58
|
} }
|
|
64
|
-
function
|
|
59
|
+
function EntitySelectorDialogComponent_Conditional_11_Conditional_2_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
65
60
|
const _r2 = i0.ɵɵgetCurrentView();
|
|
66
61
|
i0.ɵɵelementStart(0, "div", 20);
|
|
67
|
-
i0.ɵɵlistener("click", function
|
|
62
|
+
i0.ɵɵlistener("click", function EntitySelectorDialogComponent_Conditional_11_Conditional_2_For_2_Template_div_click_0_listener() { const entity_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.selectEntity(entity_r3)); });
|
|
68
63
|
i0.ɵɵelementStart(1, "div", 21);
|
|
69
64
|
i0.ɵɵelement(2, "i");
|
|
70
65
|
i0.ɵɵelementEnd();
|
|
71
66
|
i0.ɵɵelementStart(3, "div", 22)(4, "div", 23);
|
|
72
67
|
i0.ɵɵtext(5);
|
|
73
68
|
i0.ɵɵelementEnd();
|
|
74
|
-
i0.ɵɵconditionalCreate(6,
|
|
75
|
-
i0.ɵɵconditionalCreate(7,
|
|
69
|
+
i0.ɵɵconditionalCreate(6, EntitySelectorDialogComponent_Conditional_11_Conditional_2_For_2_Conditional_6_Template, 2, 1, "div", 24);
|
|
70
|
+
i0.ɵɵconditionalCreate(7, EntitySelectorDialogComponent_Conditional_11_Conditional_2_For_2_Conditional_7_Template, 3, 3, "div", 25);
|
|
76
71
|
i0.ɵɵelementEnd()();
|
|
77
72
|
} if (rf & 2) {
|
|
78
73
|
const entity_r3 = ctx.$implicit;
|
|
@@ -87,18 +82,18 @@ function EntitySelectorDialogComponent_Conditional_10_Conditional_2_For_2_Templa
|
|
|
87
82
|
i0.ɵɵadvance();
|
|
88
83
|
i0.ɵɵconditional(ctx_r0.config.statusField && entity_r3[ctx_r0.config.statusField] ? 7 : -1);
|
|
89
84
|
} }
|
|
90
|
-
function
|
|
85
|
+
function EntitySelectorDialogComponent_Conditional_11_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
91
86
|
i0.ɵɵelementStart(0, "div", 17);
|
|
92
|
-
i0.ɵɵrepeaterCreate(1,
|
|
87
|
+
i0.ɵɵrepeaterCreate(1, EntitySelectorDialogComponent_Conditional_11_Conditional_2_For_2_Template, 8, 7, "div", 19, _forTrack0);
|
|
93
88
|
i0.ɵɵelementEnd();
|
|
94
89
|
} if (rf & 2) {
|
|
95
90
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
96
91
|
i0.ɵɵadvance();
|
|
97
92
|
i0.ɵɵrepeater(ctx_r0.filteredEntities);
|
|
98
93
|
} }
|
|
99
|
-
function
|
|
100
|
-
i0.ɵɵelementStart(0, "div",
|
|
101
|
-
i0.ɵɵconditionalCreate(1,
|
|
94
|
+
function EntitySelectorDialogComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
95
|
+
i0.ɵɵelementStart(0, "div", 9);
|
|
96
|
+
i0.ɵɵconditionalCreate(1, EntitySelectorDialogComponent_Conditional_11_Conditional_1_Template, 4, 1, "div", 16)(2, EntitySelectorDialogComponent_Conditional_11_Conditional_2_Template, 3, 0, "div", 17);
|
|
102
97
|
i0.ɵɵelementEnd();
|
|
103
98
|
} if (rf & 2) {
|
|
104
99
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
@@ -106,14 +101,14 @@ function EntitySelectorDialogComponent_Conditional_10_Template(rf, ctx) { if (rf
|
|
|
106
101
|
i0.ɵɵconditional(ctx_r0.filteredEntities.length === 0 ? 1 : 2);
|
|
107
102
|
} }
|
|
108
103
|
export class EntitySelectorDialogComponent {
|
|
109
|
-
constructor(sharedService
|
|
104
|
+
constructor(sharedService) {
|
|
110
105
|
this.sharedService = sharedService;
|
|
111
|
-
this.dialogRef = dialogRef;
|
|
112
106
|
this.entities = [];
|
|
113
107
|
this.filteredEntities = [];
|
|
114
108
|
this.selectedEntity = null;
|
|
115
109
|
this.searchText = '';
|
|
116
110
|
this.isLoading = true;
|
|
111
|
+
this.DialogClosed = new EventEmitter();
|
|
117
112
|
}
|
|
118
113
|
async ngOnInit() {
|
|
119
114
|
await this.loadEntities();
|
|
@@ -158,59 +153,60 @@ export class EntitySelectorDialogComponent {
|
|
|
158
153
|
}
|
|
159
154
|
onSelect() {
|
|
160
155
|
if (this.selectedEntity) {
|
|
161
|
-
this.
|
|
156
|
+
this.DialogClosed.emit({ entity: this.selectedEntity });
|
|
162
157
|
}
|
|
163
158
|
}
|
|
164
159
|
createNew() {
|
|
165
|
-
this.
|
|
160
|
+
this.DialogClosed.emit({ createNew: true });
|
|
166
161
|
}
|
|
167
162
|
IsEntitySelected(entity) {
|
|
168
163
|
return UUIDsEqual(this.selectedEntity?.ID, entity.ID);
|
|
169
164
|
}
|
|
170
165
|
onCancel() {
|
|
171
|
-
this.
|
|
166
|
+
this.DialogClosed.emit(null);
|
|
172
167
|
}
|
|
173
|
-
static { this.ɵfac = function EntitySelectorDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || EntitySelectorDialogComponent)(i0.ɵɵdirectiveInject(i1.SharedService)
|
|
174
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EntitySelectorDialogComponent, selectors: [["mj-entity-selector-dialog"]], inputs: { config: "config" }, standalone: false, decls:
|
|
168
|
+
static { this.ɵfac = function EntitySelectorDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || EntitySelectorDialogComponent)(i0.ɵɵdirectiveInject(i1.SharedService)); }; }
|
|
169
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EntitySelectorDialogComponent, selectors: [["mj-entity-selector-dialog"]], inputs: { config: "config" }, outputs: { DialogClosed: "DialogClosed" }, standalone: false, decls: 20, vars: 6, consts: [[1, "dialog-wrapper"], [1, "dialog-header"], [3, "class"], [1, "dialog-content"], [1, "search-bar"], [1, "search-input-wrapper"], [1, "fa-solid", "fa-search", "search-icon"], ["placeholder", "Search...", 1, "mj-input", "search-input", 3, "ngModelChange", "ngModel"], [1, "loading-state"], [1, "entity-list-container"], [1, "dialog-actions"], ["mjButton", "", "variant", "primary", 3, "click"], [1, "fa-solid", "fa-plus"], ["mjButton", "", 3, "click"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "empty-state"], [1, "entity-list"], [1, "fa-solid", "fa-inbox"], [1, "entity-item", 3, "selected"], [1, "entity-item", 3, "click"], [1, "item-icon"], [1, "item-content"], [1, "item-title"], [1, "item-description"], [1, "item-status"], [1, "status-badge"]], template: function EntitySelectorDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
175
170
|
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "h3");
|
|
176
171
|
i0.ɵɵconditionalCreate(3, EntitySelectorDialogComponent_Conditional_3_Template, 1, 2, "i", 2);
|
|
177
172
|
i0.ɵɵtext(4);
|
|
178
173
|
i0.ɵɵelementEnd()();
|
|
179
|
-
i0.ɵɵelementStart(5, "div", 3)(6, "div", 4)(7, "
|
|
180
|
-
i0.ɵɵ
|
|
181
|
-
i0.ɵɵ
|
|
182
|
-
i0.ɵɵ
|
|
183
|
-
i0.ɵɵ
|
|
184
|
-
i0.ɵɵ
|
|
185
|
-
i0.ɵɵconditionalCreate(10, EntitySelectorDialogComponent_Conditional_10_Template,
|
|
174
|
+
i0.ɵɵelementStart(5, "div", 3)(6, "div", 4)(7, "div", 5);
|
|
175
|
+
i0.ɵɵelement(8, "i", 6);
|
|
176
|
+
i0.ɵɵelementStart(9, "input", 7);
|
|
177
|
+
i0.ɵɵtwoWayListener("ngModelChange", function EntitySelectorDialogComponent_Template_input_ngModelChange_9_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.searchText, $event) || (ctx.searchText = $event); return $event; });
|
|
178
|
+
i0.ɵɵlistener("ngModelChange", function EntitySelectorDialogComponent_Template_input_ngModelChange_9_listener() { return ctx.onSearchChange(); });
|
|
179
|
+
i0.ɵɵelementEnd()()();
|
|
180
|
+
i0.ɵɵconditionalCreate(10, EntitySelectorDialogComponent_Conditional_10_Template, 4, 1, "div", 8);
|
|
181
|
+
i0.ɵɵconditionalCreate(11, EntitySelectorDialogComponent_Conditional_11_Template, 3, 1, "div", 9);
|
|
186
182
|
i0.ɵɵelementEnd();
|
|
187
|
-
i0.ɵɵelementStart(
|
|
188
|
-
i0.ɵɵlistener("click", function
|
|
189
|
-
i0.ɵɵelement(
|
|
190
|
-
i0.ɵɵtext(
|
|
183
|
+
i0.ɵɵelementStart(12, "div", 10)(13, "button", 11);
|
|
184
|
+
i0.ɵɵlistener("click", function EntitySelectorDialogComponent_Template_button_click_13_listener() { return ctx.createNew(); });
|
|
185
|
+
i0.ɵɵelement(14, "i", 12);
|
|
186
|
+
i0.ɵɵtext(15, " Create New ");
|
|
191
187
|
i0.ɵɵelementEnd();
|
|
192
|
-
i0.ɵɵelementStart(
|
|
193
|
-
i0.ɵɵlistener("click", function
|
|
194
|
-
i0.ɵɵtext(
|
|
188
|
+
i0.ɵɵelementStart(16, "button", 13);
|
|
189
|
+
i0.ɵɵlistener("click", function EntitySelectorDialogComponent_Template_button_click_16_listener() { return ctx.onCancel(); });
|
|
190
|
+
i0.ɵɵtext(17, "Cancel");
|
|
195
191
|
i0.ɵɵelementEnd();
|
|
196
|
-
i0.ɵɵelementStart(
|
|
197
|
-
i0.ɵɵlistener("click", function
|
|
198
|
-
i0.ɵɵtext(
|
|
192
|
+
i0.ɵɵelementStart(18, "button", 14);
|
|
193
|
+
i0.ɵɵlistener("click", function EntitySelectorDialogComponent_Template_button_click_18_listener() { return ctx.onSelect(); });
|
|
194
|
+
i0.ɵɵtext(19, "Select");
|
|
199
195
|
i0.ɵɵelementEnd()()();
|
|
200
196
|
} if (rf & 2) {
|
|
201
197
|
i0.ɵɵadvance(3);
|
|
202
198
|
i0.ɵɵconditional(ctx.config.icon ? 3 : -1);
|
|
203
199
|
i0.ɵɵadvance();
|
|
204
200
|
i0.ɵɵtextInterpolate1(" ", ctx.config.title);
|
|
205
|
-
i0.ɵɵadvance(
|
|
201
|
+
i0.ɵɵadvance(5);
|
|
206
202
|
i0.ɵɵtwoWayProperty("ngModel", ctx.searchText);
|
|
207
|
-
i0.ɵɵadvance(2);
|
|
208
|
-
i0.ɵɵconditional(ctx.isLoading ? 9 : -1);
|
|
209
203
|
i0.ɵɵadvance();
|
|
210
|
-
i0.ɵɵconditional(
|
|
204
|
+
i0.ɵɵconditional(ctx.isLoading ? 10 : -1);
|
|
205
|
+
i0.ɵɵadvance();
|
|
206
|
+
i0.ɵɵconditional(!ctx.isLoading ? 11 : -1);
|
|
211
207
|
i0.ɵɵadvance(7);
|
|
212
208
|
i0.ɵɵproperty("disabled", !ctx.selectedEntity);
|
|
213
|
-
} }, dependencies: [
|
|
209
|
+
} }, dependencies: [i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel, i3.MJButtonDirective], styles: [".dialog-wrapper[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 600px;\n width: 800px;\n }\n\n .dialog-header[_ngcontent-%COMP%] {\n padding: 16px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .dialog-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .dialog-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n flex: 1;\n padding: 16px;\n gap: 16px;\n overflow: hidden;\n }\n\n .dialog-actions[_ngcontent-%COMP%] {\n padding: 16px;\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n }\n\n .search-bar[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n }\n\n .search-input-wrapper[_ngcontent-%COMP%] {\n flex: 1;\n position: relative;\n display: flex;\n align-items: center;\n }\n\n .search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 10px;\n color: var(--mj-text-muted);\n pointer-events: none;\n }\n\n .search-input[_ngcontent-%COMP%] {\n flex: 1;\n padding-left: 32px;\n }\n\n .loading-state[_ngcontent-%COMP%], \n .empty-state[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-muted);\n gap: 12px;\n }\n\n .loading-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n .empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n color: var(--mj-border-default);\n }\n\n .entity-list-container[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface-sunken);\n }\n\n .entity-list[_ngcontent-%COMP%] {\n padding: 8px;\n }\n\n .entity-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n margin-bottom: 8px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n }\n\n .entity-item[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 2px 8px rgba(0,0,0,0.08);\n }\n\n .entity-item.selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n }\n\n .item-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n\n .item-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 16px;\n }\n\n .item-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n }\n\n .item-title[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n }\n\n .item-description[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n line-height: 1.4;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n .item-status[_ngcontent-%COMP%] {\n margin-top: 4px;\n }\n\n .status-badge[_ngcontent-%COMP%] {\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 12px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n font-weight: 500;\n }\n\n .status-badge.active[_ngcontent-%COMP%] {\n background: #d4edda;\n color: #28a745;\n }"] }); }
|
|
214
210
|
}
|
|
215
211
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EntitySelectorDialogComponent, [{
|
|
216
212
|
type: Component,
|
|
@@ -224,15 +220,10 @@ export class EntitySelectorDialogComponent {
|
|
|
224
220
|
<div class="dialog-content">
|
|
225
221
|
<!-- Search Bar -->
|
|
226
222
|
<div class="search-bar">
|
|
227
|
-
<
|
|
228
|
-
|
|
229
|
-
placeholder="Search..."
|
|
230
|
-
|
|
231
|
-
class="search-input">
|
|
232
|
-
<ng-template kendoTextBoxPrefixTemplate>
|
|
233
|
-
<i class="fa-solid fa-search"></i>
|
|
234
|
-
</ng-template>
|
|
235
|
-
</kendo-textbox>
|
|
223
|
+
<div class="search-input-wrapper">
|
|
224
|
+
<i class="fa-solid fa-search search-icon"></i>
|
|
225
|
+
<input class="mj-input search-input" [(ngModel)]="searchText" placeholder="Search..." (ngModelChange)="onSearchChange()" />
|
|
226
|
+
</div>
|
|
236
227
|
</div>
|
|
237
228
|
|
|
238
229
|
<!-- Loading State -->
|
|
@@ -281,16 +272,18 @@ export class EntitySelectorDialogComponent {
|
|
|
281
272
|
}
|
|
282
273
|
</div>
|
|
283
274
|
<div class="dialog-actions">
|
|
284
|
-
<button
|
|
275
|
+
<button mjButton variant="primary" (click)="createNew()">
|
|
285
276
|
<i class="fa-solid fa-plus"></i> Create New
|
|
286
277
|
</button>
|
|
287
|
-
<button
|
|
288
|
-
<button
|
|
278
|
+
<button mjButton (click)="onCancel()">Cancel</button>
|
|
279
|
+
<button mjButton variant="primary" [disabled]="!selectedEntity" (click)="onSelect()">Select</button>
|
|
289
280
|
</div>
|
|
290
281
|
</div>
|
|
291
|
-
`, styles: ["\n .dialog-wrapper {\n display: flex;\n flex-direction: column;\n height: 600px;\n width: 800px;\n }\n\n .dialog-header {\n padding: 16px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .dialog-header h3 {\n margin: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .dialog-content {\n display: flex;\n flex-direction: column;\n flex: 1;\n padding: 16px;\n gap: 16px;\n overflow: hidden;\n }\n\n .dialog-actions {\n padding: 16px;\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n }\n\n .search-bar {\n display: flex;\n gap: 12px;\n }\n\n .search-input {\n flex: 1;\n }\n\n .loading-state,\n .empty-state {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-muted);\n gap: 12px;\n }\n\n .loading-state i,\n .empty-state i {\n font-size: 48px;\n color: var(--mj-border-default);\n }\n\n .entity-list-container {\n flex: 1;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface-sunken);\n }\n\n .entity-list {\n padding: 8px;\n }\n\n .entity-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n margin-bottom: 8px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n }\n\n .entity-item:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 2px 8px rgba(0,0,0,0.08);\n }\n\n .entity-item.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n }\n\n .item-icon {\n width: 36px;\n height: 36px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n\n .item-icon i {\n color: var(--mj-brand-primary);\n font-size: 16px;\n }\n\n .item-content {\n flex: 1;\n min-width: 0;\n }\n\n .item-title {\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n }\n\n .item-description {\n font-size: 13px;\n color: var(--mj-text-muted);\n line-height: 1.4;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n .item-status {\n margin-top: 4px;\n }\n\n .status-badge {\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 12px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n font-weight: 500;\n }\n\n .status-badge.active {\n background: #d4edda;\n color: #28a745;\n }\n "] }]
|
|
292
|
-
}], () => [{ type: i1.SharedService }
|
|
282
|
+
`, styles: ["\n .dialog-wrapper {\n display: flex;\n flex-direction: column;\n height: 600px;\n width: 800px;\n }\n\n .dialog-header {\n padding: 16px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .dialog-header h3 {\n margin: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .dialog-content {\n display: flex;\n flex-direction: column;\n flex: 1;\n padding: 16px;\n gap: 16px;\n overflow: hidden;\n }\n\n .dialog-actions {\n padding: 16px;\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n }\n\n .search-bar {\n display: flex;\n gap: 12px;\n }\n\n .search-input-wrapper {\n flex: 1;\n position: relative;\n display: flex;\n align-items: center;\n }\n\n .search-icon {\n position: absolute;\n left: 10px;\n color: var(--mj-text-muted);\n pointer-events: none;\n }\n\n .search-input {\n flex: 1;\n padding-left: 32px;\n }\n\n .loading-state,\n .empty-state {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-muted);\n gap: 12px;\n }\n\n .loading-state i,\n .empty-state i {\n font-size: 48px;\n color: var(--mj-border-default);\n }\n\n .entity-list-container {\n flex: 1;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface-sunken);\n }\n\n .entity-list {\n padding: 8px;\n }\n\n .entity-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n margin-bottom: 8px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n }\n\n .entity-item:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 2px 8px rgba(0,0,0,0.08);\n }\n\n .entity-item.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n }\n\n .item-icon {\n width: 36px;\n height: 36px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n\n .item-icon i {\n color: var(--mj-brand-primary);\n font-size: 16px;\n }\n\n .item-content {\n flex: 1;\n min-width: 0;\n }\n\n .item-title {\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n }\n\n .item-description {\n font-size: 13px;\n color: var(--mj-text-muted);\n line-height: 1.4;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n .item-status {\n margin-top: 4px;\n }\n\n .status-badge {\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 12px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n font-weight: 500;\n }\n\n .status-badge.active {\n background: #d4edda;\n color: #28a745;\n }\n "] }]
|
|
283
|
+
}], () => [{ type: i1.SharedService }], { config: [{
|
|
293
284
|
type: Input
|
|
285
|
+
}], DialogClosed: [{
|
|
286
|
+
type: Output
|
|
294
287
|
}] }); })();
|
|
295
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EntitySelectorDialogComponent, { className: "EntitySelectorDialogComponent", filePath: "src/lib/custom/shared/entity-selector-dialog.component.ts", lineNumber:
|
|
288
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EntitySelectorDialogComponent, { className: "EntitySelectorDialogComponent", filePath: "src/lib/custom/shared/entity-selector-dialog.component.ts", lineNumber: 259 }); })();
|
|
296
289
|
//# sourceMappingURL=entity-selector-dialog.component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-selector-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/shared/entity-selector-dialog.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, OnInit } from '@angular/core';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { RunView } from '@memberjunction/core';\nimport { DialogRef } from '@progress/kendo-angular-dialog';\nimport { UUIDsEqual } from '@memberjunction/global';\n\nexport interface EntitySelectorConfig {\n entityName: string;\n title: string;\n displayField: string;\n descriptionField?: string;\n statusField?: string;\n filters?: string;\n orderBy?: string;\n icon?: string;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-entity-selector-dialog',\n template: `\n <div class=\"dialog-wrapper\">\n <div class=\"dialog-header\">\n <h3>@if (config.icon) {\n <i [class]=\"config.icon\"></i>\n } {{ config.title }}</h3>\n </div>\n <div class=\"dialog-content\">\n <!-- Search Bar -->\n <div class=\"search-bar\">\n <kendo-textbox\n [(ngModel)]=\"searchText\"\n placeholder=\"Search...\"\n (valueChange)=\"onSearchChange()\"\n class=\"search-input\">\n <ng-template kendoTextBoxPrefixTemplate>\n <i class=\"fa-solid fa-search\"></i>\n </ng-template>\n </kendo-textbox>\n </div>\n \n <!-- Loading State -->\n @if (isLoading) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <p>Loading {{ config.entityName }}...</p>\n </div>\n }\n \n <!-- Entity List -->\n @if (!isLoading) {\n <div class=\"entity-list-container\">\n @if (filteredEntities.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No {{ config.entityName }} found</p>\n </div>\n } @else {\n <div class=\"entity-list\">\n @for (entity of filteredEntities; track entity.ID) {\n <div class=\"entity-item\"\n [class.selected]=\"IsEntitySelected(entity)\"\n (click)=\"selectEntity(entity)\">\n <div class=\"item-icon\">\n <i [class]=\"config.icon || 'fa-solid fa-file'\"></i>\n </div>\n <div class=\"item-content\">\n <div class=\"item-title\">{{ entity[config.displayField] || 'Untitled' }}</div>\n @if (config.descriptionField && entity[config.descriptionField]) {\n <div class=\"item-description\">{{ entity[config.descriptionField] }}</div>\n }\n @if (config.statusField && entity[config.statusField]) {\n <div class=\"item-status\">\n <span class=\"status-badge\" [class.active]=\"entity[config.statusField] === 'Active'\">\n {{ entity[config.statusField] }}\n </span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n <div class=\"dialog-actions\">\n <button kendoButton themeColor=\"primary\" (click)=\"createNew()\">\n <i class=\"fa-solid fa-plus\"></i> Create New\n </button>\n <button kendoButton (click)=\"onCancel()\">Cancel</button>\n <button kendoButton themeColor=\"primary\" [disabled]=\"!selectedEntity\" (click)=\"onSelect()\">Select</button>\n </div>\n </div>\n `,\n styles: [`\n .dialog-wrapper {\n display: flex;\n flex-direction: column;\n height: 600px;\n width: 800px;\n }\n\n .dialog-header {\n padding: 16px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .dialog-header h3 {\n margin: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .dialog-content {\n display: flex;\n flex-direction: column;\n flex: 1;\n padding: 16px;\n gap: 16px;\n overflow: hidden;\n }\n\n .dialog-actions {\n padding: 16px;\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n }\n\n .search-bar {\n display: flex;\n gap: 12px;\n }\n\n .search-input {\n flex: 1;\n }\n\n .loading-state,\n .empty-state {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-muted);\n gap: 12px;\n }\n\n .loading-state i,\n .empty-state i {\n font-size: 48px;\n color: var(--mj-border-default);\n }\n\n .entity-list-container {\n flex: 1;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface-sunken);\n }\n\n .entity-list {\n padding: 8px;\n }\n\n .entity-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n margin-bottom: 8px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n }\n\n .entity-item:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 2px 8px rgba(0,0,0,0.08);\n }\n\n .entity-item.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n }\n\n .item-icon {\n width: 36px;\n height: 36px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n\n .item-icon i {\n color: var(--mj-brand-primary);\n font-size: 16px;\n }\n\n .item-content {\n flex: 1;\n min-width: 0;\n }\n\n .item-title {\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n }\n\n .item-description {\n font-size: 13px;\n color: var(--mj-text-muted);\n line-height: 1.4;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n .item-status {\n margin-top: 4px;\n }\n\n .status-badge {\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 12px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n font-weight: 500;\n }\n\n .status-badge.active {\n background: #d4edda;\n color: #28a745;\n }\n `]\n})\nexport class EntitySelectorDialogComponent implements OnInit {\n @Input() config!: EntitySelectorConfig;\n\n public entities: any[] = [];\n public filteredEntities: any[] = [];\n public selectedEntity: any = null;\n public searchText: string = '';\n public isLoading: boolean = true;\n\n constructor(\n private sharedService: SharedService,\n public dialogRef: DialogRef\n ) {}\n\n async ngOnInit() {\n await this.loadEntities();\n }\n\n async loadEntities() {\n this.isLoading = true;\n try {\n const rv = new RunView();\n const result = await rv.RunView({\n EntityName: this.config.entityName,\n ExtraFilter: this.config.filters,\n OrderBy: this.config.orderBy \n });\n\n this.entities = result.Results;\n this.filteredEntities = [...this.entities];\n } catch (error) {\n console.error('Error loading entities:', error);\n this.entities = [];\n this.filteredEntities = [];\n } finally {\n this.isLoading = false;\n }\n }\n\n onSearchChange() {\n if (!this.searchText) {\n this.filteredEntities = [...this.entities];\n } else {\n const searchLower = this.searchText.toLowerCase();\n this.filteredEntities = this.entities.filter(entity => {\n const displayValue = entity[this.config.displayField] || '';\n const descriptionValue = this.config.descriptionField ? (entity[this.config.descriptionField] || '') : '';\n return displayValue.toLowerCase().includes(searchLower) || \n descriptionValue.toLowerCase().includes(searchLower);\n });\n }\n }\n\n selectEntity(entity: any) {\n this.selectedEntity = entity;\n }\n\n onSelect() {\n if (this.selectedEntity) {\n this.dialogRef.close({ entity: this.selectedEntity });\n }\n }\n\n createNew() {\n this.dialogRef.close({ createNew: true });\n }\n\n IsEntitySelected(entity: Record<string, unknown>): boolean {\n return UUIDsEqual(this.selectedEntity?.ID, entity.ID as string);\n }\n\n onCancel() {\n this.dialogRef.close(null);\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"entity-selector-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/shared/entity-selector-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAU,MAAM,eAAe,CAAC;AAE/E,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;;;;;;;IAoBtC,oBAA6B;;;IAA1B,iCAAqB;;;IAcxB,8BAA2B;IACzB,wBAA2C;IAC3C,yBAAG;IAAA,YAAkC;IACvC,AADuC,iBAAI,EACrC;;;IADD,eAAkC;IAAlC,kEAAkC;;;IAQnC,+BAAyB;IACvB,wBAAiC;IACjC,yBAAG;IAAA,YAAgC;IACrC,AADqC,iBAAI,EACnC;;;IADD,eAAgC;IAAhC,gEAAgC;;;IAc3B,+BAA8B;IAAA,YAAqC;IAAA,iBAAM;;;;IAA3C,cAAqC;IAArC,+DAAqC;;;IAIjE,AADF,+BAAyB,eAC6D;IAClF,YACF;IACF,AADE,iBAAO,EACH;;;;IAHuB,cAAwD;IAAxD,2EAAwD;IACjF,cACF;IADE,qEACF;;;;IAfR,+BAEiC;IAA/B,gPAAS,8BAAoB,KAAC;IAC9B,+BAAuB;IACrB,oBAAmD;IACrD,iBAAM;IAEJ,AADF,+BAA0B,cACA;IAAA,YAA+C;IAAA,iBAAM;IAC7E,mIAAkE;IAGlE,mIAAwD;IAQ5D,AADE,iBAAM,EACF;;;;IAlBJ,8DAA2C;IAGtC,eAA2C;IAA3C,uDAA2C;IAGtB,eAA+C;IAA/C,yEAA+C;IACvE,cAEC;IAFD,sGAEC;IACD,cAMC;IAND,4FAMC;;;IAnBT,+BAAyB;IACvB,8HAqBC;IACH,iBAAM;;;IAtBJ,cAqBC;IArBD,sCAqBC;;;IA7BP,8BAAmC;IAM/B,AALF,+GAAqC,yFAK5B;IA0BX,iBAAM;;;IA/BJ,cA8BC;IA9BD,8DA8BC;;AAsLjB,MAAM,OAAO,6BAA6B;IAWtC,YACY,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;QATjC,aAAQ,GAAU,EAAE,CAAC;QACrB,qBAAgB,GAAU,EAAE,CAAC;QAC7B,mBAAc,GAAQ,IAAI,CAAC;QAC3B,eAAU,GAAW,EAAE,CAAC;QACxB,cAAS,GAAY,IAAI,CAAC;QAEvB,iBAAY,GAAG,IAAI,YAAY,EAAkC,CAAC;IAIzE,CAAC;IAEJ,KAAK,CAAC,QAAQ;QACV,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,YAAY;QACd,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC;YACD,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC;gBAC5B,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;gBAClC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;gBAChC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;aAC/B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;YAC/B,IAAI,CAAC,gBAAgB,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YAChD,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;YACnB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC/B,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAC3B,CAAC;IACL,CAAC;IAED,cAAc;QACV,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACnB,IAAI,CAAC,gBAAgB,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACJ,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YAClD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;gBAClD,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;gBAC5D,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1G,OAAO,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;oBAChD,gBAAgB,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAChE,CAAC,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,YAAY,CAAC,MAAW;QACpB,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;IACjC,CAAC;IAED,QAAQ;QACJ,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QAC5D,CAAC;IACL,CAAC;IAED,SAAS;QACL,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,gBAAgB,CAAC,MAA+B;QAC5C,OAAO,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,EAAE,MAAM,CAAC,EAAY,CAAC,CAAC;IACpE,CAAC;IAED,QAAQ;QACJ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;8HA1EQ,6BAA6B;oEAA7B,6BAA6B;YA5O9B,AADF,AADF,8BAA4B,aACC,SACrB;YAAA,6FAAmB;YAErB,YAAkB;YACtB,AADsB,iBAAK,EACrB;YAIF,AADF,AAFF,8BAA4B,aAEF,aACY;YAChC,uBAA8C;YAC9C,gCAA2H;YAAtF,2NAAwB;YAAyB,yHAAiB,oBAAgB,IAAC;YAE5H,AADE,AADE,iBAA2H,EACvH,EACF;YAGN,iGAAiB;YAQjB,iGAAkB;YAmCpB,iBAAM;YAEJ,AADF,gCAA4B,kBAC+B;YAAtB,2GAAS,eAAW,IAAC;YACtD,yBAAgC;YAAC,6BACnC;YAAA,iBAAS;YACT,mCAAsC;YAArB,2GAAS,cAAU,IAAC;YAAC,uBAAM;YAAA,iBAAS;YACrD,mCAAqF;YAArB,2GAAS,cAAU,IAAC;YAAC,uBAAM;YAE/F,AADE,AAD6F,iBAAS,EAChG,EACF;;YAjEE,eAEH;YAFG,0CAEH;YAAC,cAAkB;YAAlB,4CAAkB;YAOqB,eAAwB;YAAxB,8CAAwB;YAKjE,cAKC;YALD,yCAKC;YAGD,cAkCC;YAlCD,0CAkCC;YAOkC,eAA4B;YAA5B,8CAA4B;;;iFA6K9D,6BAA6B;cAlPzC,SAAS;6BACI,KAAK,YACL,2BAA2B,YAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAqEL;;kBA2KJ,KAAK;;kBAQL,MAAM;;kFATE,6BAA6B","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { RunView } from '@memberjunction/core';\nimport { UUIDsEqual } from '@memberjunction/global';\n\nexport interface EntitySelectorConfig {\n entityName: string;\n title: string;\n displayField: string;\n descriptionField?: string;\n statusField?: string;\n filters?: string;\n orderBy?: string;\n icon?: string;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-entity-selector-dialog',\n template: `\n <div class=\"dialog-wrapper\">\n <div class=\"dialog-header\">\n <h3>@if (config.icon) {\n <i [class]=\"config.icon\"></i>\n } {{ config.title }}</h3>\n </div>\n <div class=\"dialog-content\">\n <!-- Search Bar -->\n <div class=\"search-bar\">\n <div class=\"search-input-wrapper\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input class=\"mj-input search-input\" [(ngModel)]=\"searchText\" placeholder=\"Search...\" (ngModelChange)=\"onSearchChange()\" />\n </div>\n </div>\n \n <!-- Loading State -->\n @if (isLoading) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <p>Loading {{ config.entityName }}...</p>\n </div>\n }\n \n <!-- Entity List -->\n @if (!isLoading) {\n <div class=\"entity-list-container\">\n @if (filteredEntities.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No {{ config.entityName }} found</p>\n </div>\n } @else {\n <div class=\"entity-list\">\n @for (entity of filteredEntities; track entity.ID) {\n <div class=\"entity-item\"\n [class.selected]=\"IsEntitySelected(entity)\"\n (click)=\"selectEntity(entity)\">\n <div class=\"item-icon\">\n <i [class]=\"config.icon || 'fa-solid fa-file'\"></i>\n </div>\n <div class=\"item-content\">\n <div class=\"item-title\">{{ entity[config.displayField] || 'Untitled' }}</div>\n @if (config.descriptionField && entity[config.descriptionField]) {\n <div class=\"item-description\">{{ entity[config.descriptionField] }}</div>\n }\n @if (config.statusField && entity[config.statusField]) {\n <div class=\"item-status\">\n <span class=\"status-badge\" [class.active]=\"entity[config.statusField] === 'Active'\">\n {{ entity[config.statusField] }}\n </span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n <div class=\"dialog-actions\">\n <button mjButton variant=\"primary\" (click)=\"createNew()\">\n <i class=\"fa-solid fa-plus\"></i> Create New\n </button>\n <button mjButton (click)=\"onCancel()\">Cancel</button>\n <button mjButton variant=\"primary\" [disabled]=\"!selectedEntity\" (click)=\"onSelect()\">Select</button>\n </div>\n </div>\n `,\n styles: [`\n .dialog-wrapper {\n display: flex;\n flex-direction: column;\n height: 600px;\n width: 800px;\n }\n\n .dialog-header {\n padding: 16px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .dialog-header h3 {\n margin: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .dialog-content {\n display: flex;\n flex-direction: column;\n flex: 1;\n padding: 16px;\n gap: 16px;\n overflow: hidden;\n }\n\n .dialog-actions {\n padding: 16px;\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n }\n\n .search-bar {\n display: flex;\n gap: 12px;\n }\n\n .search-input-wrapper {\n flex: 1;\n position: relative;\n display: flex;\n align-items: center;\n }\n\n .search-icon {\n position: absolute;\n left: 10px;\n color: var(--mj-text-muted);\n pointer-events: none;\n }\n\n .search-input {\n flex: 1;\n padding-left: 32px;\n }\n\n .loading-state,\n .empty-state {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-muted);\n gap: 12px;\n }\n\n .loading-state i,\n .empty-state i {\n font-size: 48px;\n color: var(--mj-border-default);\n }\n\n .entity-list-container {\n flex: 1;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface-sunken);\n }\n\n .entity-list {\n padding: 8px;\n }\n\n .entity-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n margin-bottom: 8px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n }\n\n .entity-item:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 2px 8px rgba(0,0,0,0.08);\n }\n\n .entity-item.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n }\n\n .item-icon {\n width: 36px;\n height: 36px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n\n .item-icon i {\n color: var(--mj-brand-primary);\n font-size: 16px;\n }\n\n .item-content {\n flex: 1;\n min-width: 0;\n }\n\n .item-title {\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n }\n\n .item-description {\n font-size: 13px;\n color: var(--mj-text-muted);\n line-height: 1.4;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n .item-status {\n margin-top: 4px;\n }\n\n .status-badge {\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 12px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n font-weight: 500;\n }\n\n .status-badge.active {\n background: #d4edda;\n color: #28a745;\n }\n `]\n})\nexport class EntitySelectorDialogComponent implements OnInit {\n @Input() config!: EntitySelectorConfig;\n\n public entities: any[] = [];\n public filteredEntities: any[] = [];\n public selectedEntity: any = null;\n public searchText: string = '';\n public isLoading: boolean = true;\n\n @Output() DialogClosed = new EventEmitter<Record<string, unknown> | null>();\n\n constructor(\n private sharedService: SharedService\n ) {}\n\n async ngOnInit() {\n await this.loadEntities();\n }\n\n async loadEntities() {\n this.isLoading = true;\n try {\n const rv = new RunView();\n const result = await rv.RunView({\n EntityName: this.config.entityName,\n ExtraFilter: this.config.filters,\n OrderBy: this.config.orderBy \n });\n\n this.entities = result.Results;\n this.filteredEntities = [...this.entities];\n } catch (error) {\n console.error('Error loading entities:', error);\n this.entities = [];\n this.filteredEntities = [];\n } finally {\n this.isLoading = false;\n }\n }\n\n onSearchChange() {\n if (!this.searchText) {\n this.filteredEntities = [...this.entities];\n } else {\n const searchLower = this.searchText.toLowerCase();\n this.filteredEntities = this.entities.filter(entity => {\n const displayValue = entity[this.config.displayField] || '';\n const descriptionValue = this.config.descriptionField ? (entity[this.config.descriptionField] || '') : '';\n return displayValue.toLowerCase().includes(searchLower) || \n descriptionValue.toLowerCase().includes(searchLower);\n });\n }\n }\n\n selectEntity(entity: any) {\n this.selectedEntity = entity;\n }\n\n onSelect() {\n if (this.selectedEntity) {\n this.DialogClosed.emit({ entity: this.selectedEntity });\n }\n }\n\n createNew() {\n this.DialogClosed.emit({ createNew: true });\n }\n\n IsEntitySelected(entity: Record<string, unknown>): boolean {\n return UUIDsEqual(this.selectedEntity?.ID, entity.ID as string);\n }\n\n onCancel() {\n this.DialogClosed.emit(null);\n }\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mjaiagent.form.component.d.ts","sourceRoot":"","sources":["../../../../../src/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;;AAGlE,qBAMa,sBAAuB,SAAQ,iBAAiB;IAClD,MAAM,EAAG,eAAe,CAAC;IAEjB,QAAQ;yCAHd,sBAAsB;2CAAtB,sBAAsB;
|
|
1
|
+
{"version":3,"file":"mjaiagent.form.component.d.ts","sourceRoot":"","sources":["../../../../../src/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;;AAGlE,qBAMa,sBAAuB,SAAQ,iBAAiB;IAClD,MAAM,EAAG,eAAe,CAAC;IAEjB,QAAQ;yCAHd,sBAAsB;2CAAtB,sBAAsB;CAyClC"}
|