@memberjunction/ng-core-entity-forms 3.2.0 → 3.4.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.
Files changed (170) hide show
  1. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +16 -17
  2. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  3. package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
  4. package/dist/lib/custom/Actions/action-form.component.js +16 -30
  5. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  6. package/dist/lib/custom/EntityActions/entityaction.form.component.js +9 -10
  7. package/dist/lib/custom/EntityActions/entityaction.form.component.js.map +1 -1
  8. package/dist/lib/custom/Queries/query-form.component.js +7 -7
  9. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  10. package/dist/lib/custom/Templates/templates-form.component.js +195 -112
  11. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  12. package/dist/lib/custom/Tests/test-form.component.d.ts +4 -1
  13. package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
  14. package/dist/lib/custom/Tests/test-form.component.js +401 -380
  15. package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
  16. package/dist/lib/custom/Tests/test-suite-form.component.d.ts +4 -1
  17. package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
  18. package/dist/lib/custom/Tests/test-suite-form.component.js +539 -518
  19. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  20. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts +4 -1
  21. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -1
  22. package/dist/lib/custom/Tests/test-suite-run-form.component.js +535 -518
  23. package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
  24. package/dist/lib/custom/custom-forms.module.d.ts +48 -52
  25. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  26. package/dist/lib/custom/custom-forms.module.js +11 -25
  27. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  28. package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.d.ts.map +1 -1
  29. package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.js +141 -113
  30. package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.js.map +1 -1
  31. package/dist/lib/generated/Entities/AIAgentExample/aiagentexample.form.component.js +28 -14
  32. package/dist/lib/generated/Entities/AIAgentExample/aiagentexample.form.component.js.map +1 -1
  33. package/dist/lib/generated/Entities/AIAgentNote/aiagentnote.form.component.js +26 -12
  34. package/dist/lib/generated/Entities/AIAgentNote/aiagentnote.form.component.js.map +1 -1
  35. package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.d.ts.map +1 -1
  36. package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.js +67 -47
  37. package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.js.map +1 -1
  38. package/dist/lib/generated/Entities/AIAgentRunStep/aiagentrunstep.form.component.d.ts.map +1 -1
  39. package/dist/lib/generated/Entities/AIAgentRunStep/aiagentrunstep.form.component.js +18 -24
  40. package/dist/lib/generated/Entities/AIAgentRunStep/aiagentrunstep.form.component.js.map +1 -1
  41. package/dist/lib/generated/Entities/AIResultCache/airesultcache.form.component.d.ts.map +1 -1
  42. package/dist/lib/generated/Entities/AIResultCache/airesultcache.form.component.js +11 -17
  43. package/dist/lib/generated/Entities/AIResultCache/airesultcache.form.component.js.map +1 -1
  44. package/dist/lib/generated/Entities/APIApplication/apiapplication.form.component.d.ts +11 -0
  45. package/dist/lib/generated/Entities/APIApplication/apiapplication.form.component.d.ts.map +1 -0
  46. package/dist/lib/generated/Entities/APIApplication/apiapplication.form.component.js +120 -0
  47. package/dist/lib/generated/Entities/APIApplication/apiapplication.form.component.js.map +1 -0
  48. package/dist/lib/generated/Entities/APIApplicationScope/apiapplicationscope.form.component.d.ts +11 -0
  49. package/dist/lib/generated/Entities/APIApplicationScope/apiapplicationscope.form.component.d.ts.map +1 -0
  50. package/dist/lib/generated/Entities/APIApplicationScope/apiapplicationscope.form.component.js +75 -0
  51. package/dist/lib/generated/Entities/APIApplicationScope/apiapplicationscope.form.component.js.map +1 -0
  52. package/dist/lib/generated/Entities/APIKey/apikey.form.component.d.ts.map +1 -1
  53. package/dist/lib/generated/Entities/APIKey/apikey.form.component.js +25 -7
  54. package/dist/lib/generated/Entities/APIKey/apikey.form.component.js.map +1 -1
  55. package/dist/lib/generated/Entities/APIKeyApplication/apikeyapplication.form.component.d.ts +11 -0
  56. package/dist/lib/generated/Entities/APIKeyApplication/apikeyapplication.form.component.d.ts.map +1 -0
  57. package/dist/lib/generated/Entities/APIKeyApplication/apikeyapplication.form.component.js +61 -0
  58. package/dist/lib/generated/Entities/APIKeyApplication/apikeyapplication.form.component.js.map +1 -0
  59. package/dist/lib/generated/Entities/APIKeyScope/apikeyscope.form.component.js +17 -9
  60. package/dist/lib/generated/Entities/APIKeyScope/apikeyscope.form.component.js.map +1 -1
  61. package/dist/lib/generated/Entities/APIKeyUsageLog/apikeyusagelog.form.component.js +19 -7
  62. package/dist/lib/generated/Entities/APIKeyUsageLog/apikeyusagelog.form.component.js.map +1 -1
  63. package/dist/lib/generated/Entities/APIScope/apiscope.form.component.d.ts.map +1 -1
  64. package/dist/lib/generated/Entities/APIScope/apiscope.form.component.js +67 -11
  65. package/dist/lib/generated/Entities/APIScope/apiscope.form.component.js.map +1 -1
  66. package/dist/lib/generated/Entities/Action/action.form.component.d.ts.map +1 -1
  67. package/dist/lib/generated/Entities/Action/action.form.component.js +44 -26
  68. package/dist/lib/generated/Entities/Action/action.form.component.js.map +1 -1
  69. package/dist/lib/generated/Entities/ActionCategory/actioncategory.form.component.d.ts.map +1 -1
  70. package/dist/lib/generated/Entities/ActionCategory/actioncategory.form.component.js +23 -5
  71. package/dist/lib/generated/Entities/ActionCategory/actioncategory.form.component.js.map +1 -1
  72. package/dist/lib/generated/Entities/Company/company.form.component.d.ts.map +1 -1
  73. package/dist/lib/generated/Entities/Company/company.form.component.js +28 -10
  74. package/dist/lib/generated/Entities/Company/company.form.component.js.map +1 -1
  75. package/dist/lib/generated/Entities/Conversation/conversation.form.component.js +3 -3
  76. package/dist/lib/generated/Entities/ConversationDetailArtifact/conversationdetailartifact.form.component.js +3 -3
  77. package/dist/lib/generated/Entities/ConversationDetailArtifact/conversationdetailartifact.form.component.js.map +1 -1
  78. package/dist/lib/generated/Entities/ConversationDetailRating/conversationdetailrating.form.component.js +3 -3
  79. package/dist/lib/generated/Entities/ConversationDetailRating/conversationdetailrating.form.component.js.map +1 -1
  80. package/dist/lib/generated/Entities/Credential/credential.form.component.d.ts.map +1 -1
  81. package/dist/lib/generated/Entities/Credential/credential.form.component.js +23 -5
  82. package/dist/lib/generated/Entities/Credential/credential.form.component.js.map +1 -1
  83. package/dist/lib/generated/Entities/CredentialType/credentialtype.form.component.d.ts.map +1 -1
  84. package/dist/lib/generated/Entities/CredentialType/credentialtype.form.component.js +23 -5
  85. package/dist/lib/generated/Entities/CredentialType/credentialtype.form.component.js.map +1 -1
  86. package/dist/lib/generated/Entities/DuplicateRunDetail/duplicaterundetail.form.component.d.ts.map +1 -1
  87. package/dist/lib/generated/Entities/DuplicateRunDetail/duplicaterundetail.form.component.js +14 -20
  88. package/dist/lib/generated/Entities/DuplicateRunDetail/duplicaterundetail.form.component.js.map +1 -1
  89. package/dist/lib/generated/Entities/EmployeeCompanyIntegration/employeecompanyintegration.form.component.d.ts.map +1 -1
  90. package/dist/lib/generated/Entities/EmployeeCompanyIntegration/employeecompanyintegration.form.component.js +9 -15
  91. package/dist/lib/generated/Entities/EmployeeCompanyIntegration/employeecompanyintegration.form.component.js.map +1 -1
  92. package/dist/lib/generated/Entities/EmployeeRole/employeerole.form.component.js +3 -3
  93. package/dist/lib/generated/Entities/EmployeeRole/employeerole.form.component.js.map +1 -1
  94. package/dist/lib/generated/Entities/EmployeeSkill/employeeskill.form.component.d.ts.map +1 -1
  95. package/dist/lib/generated/Entities/EmployeeSkill/employeeskill.form.component.js +6 -12
  96. package/dist/lib/generated/Entities/EmployeeSkill/employeeskill.form.component.js.map +1 -1
  97. package/dist/lib/generated/Entities/Entity/entity.form.component.d.ts.map +1 -1
  98. package/dist/lib/generated/Entities/Entity/entity.form.component.js +110 -56
  99. package/dist/lib/generated/Entities/Entity/entity.form.component.js.map +1 -1
  100. package/dist/lib/generated/Entities/EntityActionFilter/entityactionfilter.form.component.d.ts.map +1 -1
  101. package/dist/lib/generated/Entities/EntityActionFilter/entityactionfilter.form.component.js +5 -11
  102. package/dist/lib/generated/Entities/EntityActionFilter/entityactionfilter.form.component.js.map +1 -1
  103. package/dist/lib/generated/Entities/EntityActionInvocation/entityactioninvocation.form.component.d.ts.map +1 -1
  104. package/dist/lib/generated/Entities/EntityActionInvocation/entityactioninvocation.form.component.js +8 -14
  105. package/dist/lib/generated/Entities/EntityActionInvocation/entityactioninvocation.form.component.js.map +1 -1
  106. package/dist/lib/generated/Entities/EntityActionParam/entityactionparam.form.component.d.ts.map +1 -1
  107. package/dist/lib/generated/Entities/EntityActionParam/entityactionparam.form.component.js +6 -12
  108. package/dist/lib/generated/Entities/EntityActionParam/entityactionparam.form.component.js.map +1 -1
  109. package/dist/lib/generated/Entities/EntityCommunicationField/entitycommunicationfield.form.component.d.ts.map +1 -1
  110. package/dist/lib/generated/Entities/EntityCommunicationField/entitycommunicationfield.form.component.js +6 -12
  111. package/dist/lib/generated/Entities/EntityCommunicationField/entitycommunicationfield.form.component.js.map +1 -1
  112. package/dist/lib/generated/Entities/ErrorLog/errorlog.form.component.d.ts.map +1 -1
  113. package/dist/lib/generated/Entities/ErrorLog/errorlog.form.component.js +11 -17
  114. package/dist/lib/generated/Entities/ErrorLog/errorlog.form.component.js.map +1 -1
  115. package/dist/lib/generated/Entities/MCPServer/mcpserver.form.component.d.ts +11 -0
  116. package/dist/lib/generated/Entities/MCPServer/mcpserver.form.component.d.ts.map +1 -0
  117. package/dist/lib/generated/Entities/MCPServer/mcpserver.form.component.js +142 -0
  118. package/dist/lib/generated/Entities/MCPServer/mcpserver.form.component.js.map +1 -0
  119. package/dist/lib/generated/Entities/MCPServerConnection/mcpserverconnection.form.component.d.ts +11 -0
  120. package/dist/lib/generated/Entities/MCPServerConnection/mcpserverconnection.form.component.d.ts.map +1 -0
  121. package/dist/lib/generated/Entities/MCPServerConnection/mcpserverconnection.form.component.js +158 -0
  122. package/dist/lib/generated/Entities/MCPServerConnection/mcpserverconnection.form.component.js.map +1 -0
  123. package/dist/lib/generated/Entities/MCPServerConnectionPermission/mcpserverconnectionpermission.form.component.d.ts +11 -0
  124. package/dist/lib/generated/Entities/MCPServerConnectionPermission/mcpserverconnectionpermission.form.component.d.ts.map +1 -0
  125. package/dist/lib/generated/Entities/MCPServerConnectionPermission/mcpserverconnectionpermission.form.component.js +77 -0
  126. package/dist/lib/generated/Entities/MCPServerConnectionPermission/mcpserverconnectionpermission.form.component.js.map +1 -0
  127. package/dist/lib/generated/Entities/MCPServerConnectionTool/mcpserverconnectiontool.form.component.d.ts +11 -0
  128. package/dist/lib/generated/Entities/MCPServerConnectionTool/mcpserverconnectiontool.form.component.d.ts.map +1 -0
  129. package/dist/lib/generated/Entities/MCPServerConnectionTool/mcpserverconnectiontool.form.component.js +73 -0
  130. package/dist/lib/generated/Entities/MCPServerConnectionTool/mcpserverconnectiontool.form.component.js.map +1 -0
  131. package/dist/lib/generated/Entities/MCPServerTool/mcpservertool.form.component.d.ts +11 -0
  132. package/dist/lib/generated/Entities/MCPServerTool/mcpservertool.form.component.d.ts.map +1 -0
  133. package/dist/lib/generated/Entities/MCPServerTool/mcpservertool.form.component.js +132 -0
  134. package/dist/lib/generated/Entities/MCPServerTool/mcpservertool.form.component.js.map +1 -0
  135. package/dist/lib/generated/Entities/MCPToolExecutionLog/mcptoolexecutionlog.form.component.d.ts +11 -0
  136. package/dist/lib/generated/Entities/MCPToolExecutionLog/mcptoolexecutionlog.form.component.d.ts.map +1 -0
  137. package/dist/lib/generated/Entities/MCPToolExecutionLog/mcptoolexecutionlog.form.component.js +101 -0
  138. package/dist/lib/generated/Entities/MCPToolExecutionLog/mcptoolexecutionlog.form.component.js.map +1 -0
  139. package/dist/lib/generated/Entities/Role/role.form.component.d.ts.map +1 -1
  140. package/dist/lib/generated/Entities/Role/role.form.component.js +30 -12
  141. package/dist/lib/generated/Entities/Role/role.form.component.js.map +1 -1
  142. package/dist/lib/generated/Entities/Task/task.form.component.d.ts.map +1 -1
  143. package/dist/lib/generated/Entities/Task/task.form.component.js +26 -32
  144. package/dist/lib/generated/Entities/Task/task.form.component.js.map +1 -1
  145. package/dist/lib/generated/Entities/User/user.form.component.d.ts.map +1 -1
  146. package/dist/lib/generated/Entities/User/user.form.component.js +182 -146
  147. package/dist/lib/generated/Entities/User/user.form.component.js.map +1 -1
  148. package/dist/lib/generated/generated-forms.module.d.ts +142 -128
  149. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  150. package/dist/lib/generated/generated-forms.module.js +194 -101
  151. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  152. package/dist/public-api.js +1 -0
  153. package/dist/public-api.js.map +1 -1
  154. package/package.json +30 -30
  155. package/dist/lib/custom/Actions/action-param-dialog.component.d.ts +0 -32
  156. package/dist/lib/custom/Actions/action-param-dialog.component.d.ts.map +0 -1
  157. package/dist/lib/custom/Actions/action-param-dialog.component.js +0 -321
  158. package/dist/lib/custom/Actions/action-param-dialog.component.js.map +0 -1
  159. package/dist/lib/custom/Actions/action-result-code-dialog.component.d.ts +0 -20
  160. package/dist/lib/custom/Actions/action-result-code-dialog.component.d.ts.map +0 -1
  161. package/dist/lib/custom/Actions/action-result-code-dialog.component.js +0 -127
  162. package/dist/lib/custom/Actions/action-result-code-dialog.component.js.map +0 -1
  163. package/dist/lib/custom/Actions/action-test-harness-dialog.component.d.ts +0 -15
  164. package/dist/lib/custom/Actions/action-test-harness-dialog.component.d.ts.map +0 -1
  165. package/dist/lib/custom/Actions/action-test-harness-dialog.component.js +0 -96
  166. package/dist/lib/custom/Actions/action-test-harness-dialog.component.js.map +0 -1
  167. package/dist/lib/custom/Actions/action-test-harness.component.d.ts +0 -50
  168. package/dist/lib/custom/Actions/action-test-harness.component.d.ts.map +0 -1
  169. package/dist/lib/custom/Actions/action-test-harness.component.js +0 -710
  170. package/dist/lib/custom/Actions/action-test-harness.component.js.map +0 -1
@@ -1,710 +0,0 @@
1
- import { Component, Input, Output, EventEmitter } from '@angular/core';
2
- import { Metadata } from '@memberjunction/core';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/forms";
5
- import * as i2 from "@progress/kendo-angular-inputs";
6
- import * as i3 from "@progress/kendo-angular-buttons";
7
- const _forTrack0 = ($index, $item) => $item.param.ID;
8
- const _forTrack1 = ($index, $item) => $item.ID;
9
- function ActionTestHarnessComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
10
- i0.ɵɵelementStart(0, "div", 8);
11
- i0.ɵɵelement(1, "i", 16);
12
- i0.ɵɵelementStart(2, "p");
13
- i0.ɵɵtext(3, "This action has no input parameters");
14
- i0.ɵɵelementEnd()();
15
- } }
16
- function ActionTestHarnessComponent_Conditional_14_For_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
17
- i0.ɵɵelementStart(0, "span", 19);
18
- i0.ɵɵtext(1, "*");
19
- i0.ɵɵelementEnd();
20
- } }
21
- function ActionTestHarnessComponent_Conditional_14_For_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
22
- i0.ɵɵelementStart(0, "span", 20);
23
- i0.ɵɵtext(1, "Array");
24
- i0.ɵɵelementEnd();
25
- } }
26
- function ActionTestHarnessComponent_Conditional_14_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
27
- i0.ɵɵelementStart(0, "div", 22);
28
- i0.ɵɵtext(1);
29
- i0.ɵɵelementEnd();
30
- } if (rf & 2) {
31
- const paramValue_r1 = i0.ɵɵnextContext().$implicit;
32
- i0.ɵɵadvance();
33
- i0.ɵɵtextInterpolate(paramValue_r1.param.Description);
34
- } }
35
- function ActionTestHarnessComponent_Conditional_14_For_2_Case_8_Template(rf, ctx) { if (rf & 1) {
36
- const _r2 = i0.ɵɵgetCurrentView();
37
- i0.ɵɵelementStart(0, "textarea", 30);
38
- i0.ɵɵlistener("change", function ActionTestHarnessComponent_Conditional_14_For_2_Case_8_Template_textarea_change_0_listener($event) { i0.ɵɵrestoreView(_r2); const paramValue_r1 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onParamValueChange(paramValue_r1, $event)); });
39
- i0.ɵɵtext(1, " ");
40
- i0.ɵɵelementEnd();
41
- } if (rf & 2) {
42
- const paramValue_r1 = i0.ɵɵnextContext().$implicit;
43
- const ctx_r2 = i0.ɵɵnextContext(2);
44
- i0.ɵɵproperty("value", ctx_r2.getParamDisplayValue(paramValue_r1))("placeholder", paramValue_r1.param.IsArray ? "Enter JSON array" : paramValue_r1.param.ValueType === "Simple Object" ? "Enter JSON object" : "Enter value");
45
- } }
46
- function ActionTestHarnessComponent_Conditional_14_For_2_Case_9_Template(rf, ctx) { if (rf & 1) {
47
- const _r4 = i0.ɵɵgetCurrentView();
48
- i0.ɵɵelementStart(0, "div", 24)(1, "input", 31);
49
- i0.ɵɵlistener("change", function ActionTestHarnessComponent_Conditional_14_For_2_Case_9_Template_input_change_1_listener($event) { i0.ɵɵrestoreView(_r4); const paramValue_r1 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onParamValueChange(paramValue_r1, $event)); });
50
- i0.ɵɵelementEnd()();
51
- } if (rf & 2) {
52
- const paramValue_r1 = i0.ɵɵnextContext().$implicit;
53
- i0.ɵɵadvance();
54
- i0.ɵɵproperty("checked", paramValue_r1.value);
55
- } }
56
- function ActionTestHarnessComponent_Conditional_14_For_2_Case_10_Template(rf, ctx) { if (rf & 1) {
57
- const _r5 = i0.ɵɵgetCurrentView();
58
- i0.ɵɵelementStart(0, "input", 32);
59
- i0.ɵɵlistener("change", function ActionTestHarnessComponent_Conditional_14_For_2_Case_10_Template_input_change_0_listener($event) { i0.ɵɵrestoreView(_r5); const paramValue_r1 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onParamValueChange(paramValue_r1, $event)); });
60
- i0.ɵɵelementEnd();
61
- } if (rf & 2) {
62
- const paramValue_r1 = i0.ɵɵnextContext().$implicit;
63
- i0.ɵɵproperty("value", paramValue_r1.value);
64
- } }
65
- function ActionTestHarnessComponent_Conditional_14_For_2_Case_11_Template(rf, ctx) { if (rf & 1) {
66
- const _r6 = i0.ɵɵgetCurrentView();
67
- i0.ɵɵelementStart(0, "input", 33);
68
- i0.ɵɵlistener("change", function ActionTestHarnessComponent_Conditional_14_For_2_Case_11_Template_input_change_0_listener($event) { i0.ɵɵrestoreView(_r6); const paramValue_r1 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onParamValueChange(paramValue_r1, $event)); });
69
- i0.ɵɵelementEnd();
70
- } if (rf & 2) {
71
- const paramValue_r1 = i0.ɵɵnextContext().$implicit;
72
- i0.ɵɵproperty("value", paramValue_r1.value);
73
- } }
74
- function ActionTestHarnessComponent_Conditional_14_For_2_Case_12_Template(rf, ctx) { if (rf & 1) {
75
- const _r7 = i0.ɵɵgetCurrentView();
76
- i0.ɵɵelementStart(0, "input", 34);
77
- i0.ɵɵlistener("change", function ActionTestHarnessComponent_Conditional_14_For_2_Case_12_Template_input_change_0_listener($event) { i0.ɵɵrestoreView(_r7); const paramValue_r1 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onParamValueChange(paramValue_r1, $event)); });
78
- i0.ɵɵelementEnd();
79
- } if (rf & 2) {
80
- const paramValue_r1 = i0.ɵɵnextContext().$implicit;
81
- i0.ɵɵproperty("value", paramValue_r1.value || "");
82
- } }
83
- function ActionTestHarnessComponent_Conditional_14_For_2_Conditional_13_Template(rf, ctx) { if (rf & 1) {
84
- i0.ɵɵelementStart(0, "div", 28);
85
- i0.ɵɵelement(1, "i", 35);
86
- i0.ɵɵtext(2);
87
- i0.ɵɵelementEnd();
88
- } if (rf & 2) {
89
- const paramValue_r1 = i0.ɵɵnextContext().$implicit;
90
- i0.ɵɵadvance(2);
91
- i0.ɵɵtextInterpolate1(" ", paramValue_r1.error, " ");
92
- } }
93
- function ActionTestHarnessComponent_Conditional_14_For_2_Conditional_14_Template(rf, ctx) { if (rf & 1) {
94
- i0.ɵɵelementStart(0, "div", 29);
95
- i0.ɵɵtext(1);
96
- i0.ɵɵelementEnd();
97
- } if (rf & 2) {
98
- const paramValue_r1 = i0.ɵɵnextContext().$implicit;
99
- i0.ɵɵadvance();
100
- i0.ɵɵtextInterpolate1(" Default: ", paramValue_r1.param.DefaultValue, " ");
101
- } }
102
- function ActionTestHarnessComponent_Conditional_14_For_2_Template(rf, ctx) { if (rf & 1) {
103
- i0.ɵɵelementStart(0, "div", 18)(1, "label");
104
- i0.ɵɵtext(2);
105
- i0.ɵɵtemplate(3, ActionTestHarnessComponent_Conditional_14_For_2_Conditional_3_Template, 2, 0, "span", 19)(4, ActionTestHarnessComponent_Conditional_14_For_2_Conditional_4_Template, 2, 0, "span", 20);
106
- i0.ɵɵelementStart(5, "span", 21);
107
- i0.ɵɵtext(6);
108
- i0.ɵɵelementEnd()();
109
- i0.ɵɵtemplate(7, ActionTestHarnessComponent_Conditional_14_For_2_Conditional_7_Template, 2, 1, "div", 22)(8, ActionTestHarnessComponent_Conditional_14_For_2_Case_8_Template, 2, 2, "textarea", 23)(9, ActionTestHarnessComponent_Conditional_14_For_2_Case_9_Template, 2, 1, "div", 24)(10, ActionTestHarnessComponent_Conditional_14_For_2_Case_10_Template, 1, 1, "input", 25)(11, ActionTestHarnessComponent_Conditional_14_For_2_Case_11_Template, 1, 1, "input", 26)(12, ActionTestHarnessComponent_Conditional_14_For_2_Case_12_Template, 1, 1, "input", 27)(13, ActionTestHarnessComponent_Conditional_14_For_2_Conditional_13_Template, 3, 1, "div", 28)(14, ActionTestHarnessComponent_Conditional_14_For_2_Conditional_14_Template, 2, 1, "div", 29);
110
- i0.ɵɵelementEnd();
111
- } if (rf & 2) {
112
- let tmp_18_0;
113
- const paramValue_r1 = ctx.$implicit;
114
- const ctx_r2 = i0.ɵɵnextContext(2);
115
- i0.ɵɵclassProp("required", paramValue_r1.param.IsRequired)("error", paramValue_r1.error);
116
- i0.ɵɵadvance(2);
117
- i0.ɵɵtextInterpolate1(" ", paramValue_r1.param.Name, " ");
118
- i0.ɵɵadvance();
119
- i0.ɵɵconditional(paramValue_r1.param.IsRequired ? 3 : -1);
120
- i0.ɵɵadvance();
121
- i0.ɵɵconditional(paramValue_r1.param.IsArray ? 4 : -1);
122
- i0.ɵɵadvance(2);
123
- i0.ɵɵtextInterpolate(paramValue_r1.param.ValueType);
124
- i0.ɵɵadvance();
125
- i0.ɵɵconditional(paramValue_r1.param.Description ? 7 : -1);
126
- i0.ɵɵadvance();
127
- i0.ɵɵconditional((tmp_18_0 = ctx_r2.getInputType(paramValue_r1.param)) === "textarea" ? 8 : tmp_18_0 === "checkbox" ? 9 : tmp_18_0 === "number" ? 10 : tmp_18_0 === "datetime-local" ? 11 : 12);
128
- i0.ɵɵadvance(5);
129
- i0.ɵɵconditional(paramValue_r1.error ? 13 : -1);
130
- i0.ɵɵadvance();
131
- i0.ɵɵconditional(paramValue_r1.param.DefaultValue && !paramValue_r1.value ? 14 : -1);
132
- } }
133
- function ActionTestHarnessComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
134
- i0.ɵɵelementStart(0, "div", 9);
135
- i0.ɵɵrepeaterCreate(1, ActionTestHarnessComponent_Conditional_14_For_2_Template, 15, 12, "div", 17, _forTrack0);
136
- i0.ɵɵelementEnd();
137
- } if (rf & 2) {
138
- const ctx_r2 = i0.ɵɵnextContext();
139
- i0.ɵɵadvance();
140
- i0.ɵɵrepeater(ctx_r2.paramValues);
141
- } }
142
- function ActionTestHarnessComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
143
- i0.ɵɵelement(0, "i", 36);
144
- i0.ɵɵtext(1, " Executing... ");
145
- } }
146
- function ActionTestHarnessComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
147
- i0.ɵɵelement(0, "i", 37);
148
- i0.ɵɵtext(1, " Execute Action ");
149
- } }
150
- function ActionTestHarnessComponent_Conditional_22_Template(rf, ctx) { if (rf & 1) {
151
- const _r8 = i0.ɵɵgetCurrentView();
152
- i0.ɵɵelementStart(0, "button", 12);
153
- i0.ɵɵlistener("click", function ActionTestHarnessComponent_Conditional_22_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.clearResults()); });
154
- i0.ɵɵelement(1, "i", 38);
155
- i0.ɵɵtext(2, " Clear Results ");
156
- i0.ɵɵelementEnd();
157
- } }
158
- function ActionTestHarnessComponent_Conditional_23_Conditional_9_Template(rf, ctx) { if (rf & 1) {
159
- const _r9 = i0.ɵɵgetCurrentView();
160
- i0.ɵɵelementStart(0, "button", 46);
161
- i0.ɵɵlistener("click", function ActionTestHarnessComponent_Conditional_23_Conditional_9_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.copyResultToClipboard()); });
162
- i0.ɵɵelement(1, "i", 47);
163
- i0.ɵɵtext(2, " Copy ");
164
- i0.ɵɵelementEnd();
165
- i0.ɵɵelementStart(3, "button", 46);
166
- i0.ɵɵlistener("click", function ActionTestHarnessComponent_Conditional_23_Conditional_9_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r9); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.showRawResult = !ctx_r2.showRawResult); });
167
- i0.ɵɵelement(4, "i", 48);
168
- i0.ɵɵtext(5);
169
- i0.ɵɵelementEnd();
170
- } if (rf & 2) {
171
- const ctx_r2 = i0.ɵɵnextContext(2);
172
- i0.ɵɵadvance(5);
173
- i0.ɵɵtextInterpolate1(" ", ctx_r2.showRawResult ? "Hide" : "Show", " Raw ");
174
- } }
175
- function ActionTestHarnessComponent_Conditional_23_Conditional_10_Template(rf, ctx) { if (rf & 1) {
176
- i0.ɵɵelementStart(0, "div", 44);
177
- i0.ɵɵelement(1, "i", 49);
178
- i0.ɵɵelementStart(2, "div", 50)(3, "h5");
179
- i0.ɵɵtext(4, "Execution Error");
180
- i0.ɵɵelementEnd();
181
- i0.ɵɵelementStart(5, "p");
182
- i0.ɵɵtext(6);
183
- i0.ɵɵelementEnd()()();
184
- } if (rf & 2) {
185
- const ctx_r2 = i0.ɵɵnextContext(2);
186
- i0.ɵɵadvance(6);
187
- i0.ɵɵtextInterpolate(ctx_r2.executionError);
188
- } }
189
- function ActionTestHarnessComponent_Conditional_23_Conditional_11_Conditional_5_Template(rf, ctx) { if (rf & 1) {
190
- i0.ɵɵelementStart(0, "span", 53);
191
- i0.ɵɵtext(1);
192
- i0.ɵɵelementEnd();
193
- } if (rf & 2) {
194
- const ctx_r2 = i0.ɵɵnextContext(3);
195
- i0.ɵɵadvance();
196
- i0.ɵɵtextInterpolate(ctx_r2.executionResult.ResultCode);
197
- } }
198
- function ActionTestHarnessComponent_Conditional_23_Conditional_11_Conditional_6_Template(rf, ctx) { if (rf & 1) {
199
- i0.ɵɵelementStart(0, "div", 54)(1, "h5");
200
- i0.ɵɵelement(2, "i", 56);
201
- i0.ɵɵtext(3, " Message ");
202
- i0.ɵɵelementEnd();
203
- i0.ɵɵelementStart(4, "div", 57)(5, "pre", 58);
204
- i0.ɵɵtext(6);
205
- i0.ɵɵelementEnd()()();
206
- } if (rf & 2) {
207
- const ctx_r2 = i0.ɵɵnextContext(3);
208
- i0.ɵɵadvance(6);
209
- i0.ɵɵtextInterpolate(ctx_r2.executionResult.Message);
210
- } }
211
- function ActionTestHarnessComponent_Conditional_23_Conditional_11_Conditional_7_Conditional_7_Template(rf, ctx) { if (rf & 1) {
212
- const _r11 = i0.ɵɵgetCurrentView();
213
- i0.ɵɵelementStart(0, "div", 57)(1, "div", 62)(2, "span", 63);
214
- i0.ɵɵtext(3, "JSON");
215
- i0.ɵɵelementEnd();
216
- i0.ɵɵelementStart(4, "button", 64);
217
- i0.ɵɵlistener("click", function ActionTestHarnessComponent_Conditional_23_Conditional_11_Conditional_7_Conditional_7_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r11); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.copyResultDataToClipboard()); });
218
- i0.ɵɵelement(5, "i", 47);
219
- i0.ɵɵelementEnd()();
220
- i0.ɵɵelementStart(6, "pre", 65);
221
- i0.ɵɵtext(7);
222
- i0.ɵɵelementEnd()();
223
- } if (rf & 2) {
224
- const ctx_r2 = i0.ɵɵnextContext(4);
225
- i0.ɵɵadvance(7);
226
- i0.ɵɵtextInterpolate(ctx_r2.formatResultData(ctx_r2.executionResult.ResultData));
227
- } }
228
- function ActionTestHarnessComponent_Conditional_23_Conditional_11_Conditional_7_Conditional_8_Conditional_0_For_2_Template(rf, ctx) { if (rf & 1) {
229
- i0.ɵɵelementStart(0, "div", 67)(1, "label");
230
- i0.ɵɵelement(2, "i", 68);
231
- i0.ɵɵtext(3);
232
- i0.ɵɵelementEnd();
233
- i0.ɵɵelementStart(4, "div", 69)(5, "pre", 58);
234
- i0.ɵɵtext(6);
235
- i0.ɵɵelementEnd()()();
236
- } if (rf & 2) {
237
- const outputParam_r12 = ctx.$implicit;
238
- const ctx_r2 = i0.ɵɵnextContext(6);
239
- i0.ɵɵadvance(3);
240
- i0.ɵɵtextInterpolate1(" ", outputParam_r12.Name, " ");
241
- i0.ɵɵadvance(3);
242
- i0.ɵɵtextInterpolate(ctx_r2.formatResultData(ctx_r2.executionResult.ResultData[outputParam_r12.Name]));
243
- } }
244
- function ActionTestHarnessComponent_Conditional_23_Conditional_11_Conditional_7_Conditional_8_Conditional_0_Template(rf, ctx) { if (rf & 1) {
245
- i0.ɵɵelementStart(0, "div", 66);
246
- i0.ɵɵrepeaterCreate(1, ActionTestHarnessComponent_Conditional_23_Conditional_11_Conditional_7_Conditional_8_Conditional_0_For_2_Template, 7, 2, "div", 67, _forTrack1);
247
- i0.ɵɵelementEnd();
248
- } if (rf & 2) {
249
- const ctx_r2 = i0.ɵɵnextContext(5);
250
- i0.ɵɵadvance();
251
- i0.ɵɵrepeater(ctx_r2.getOutputParams());
252
- } }
253
- function ActionTestHarnessComponent_Conditional_23_Conditional_11_Conditional_7_Conditional_8_Conditional_1_Template(rf, ctx) { if (rf & 1) {
254
- const _r13 = i0.ɵɵgetCurrentView();
255
- i0.ɵɵelementStart(0, "div", 57)(1, "div", 62)(2, "span", 63);
256
- i0.ɵɵtext(3, "JSON");
257
- i0.ɵɵelementEnd();
258
- i0.ɵɵelementStart(4, "button", 64);
259
- i0.ɵɵlistener("click", function ActionTestHarnessComponent_Conditional_23_Conditional_11_Conditional_7_Conditional_8_Conditional_1_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r13); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.copyResultDataToClipboard()); });
260
- i0.ɵɵelement(5, "i", 47);
261
- i0.ɵɵelementEnd()();
262
- i0.ɵɵelementStart(6, "pre", 65);
263
- i0.ɵɵtext(7);
264
- i0.ɵɵelementEnd()();
265
- } if (rf & 2) {
266
- const ctx_r2 = i0.ɵɵnextContext(5);
267
- i0.ɵɵadvance(7);
268
- i0.ɵɵtextInterpolate(ctx_r2.formatResultData(ctx_r2.executionResult.ResultData));
269
- } }
270
- function ActionTestHarnessComponent_Conditional_23_Conditional_11_Conditional_7_Conditional_8_Template(rf, ctx) { if (rf & 1) {
271
- i0.ɵɵtemplate(0, ActionTestHarnessComponent_Conditional_23_Conditional_11_Conditional_7_Conditional_8_Conditional_0_Template, 3, 0, "div", 66)(1, ActionTestHarnessComponent_Conditional_23_Conditional_11_Conditional_7_Conditional_8_Conditional_1_Template, 8, 1, "div", 57);
272
- } if (rf & 2) {
273
- const ctx_r2 = i0.ɵɵnextContext(4);
274
- i0.ɵɵconditional(ctx_r2.getOutputParams().length > 0 ? 0 : 1);
275
- } }
276
- function ActionTestHarnessComponent_Conditional_23_Conditional_11_Conditional_7_Template(rf, ctx) { if (rf & 1) {
277
- const _r10 = i0.ɵɵgetCurrentView();
278
- i0.ɵɵelementStart(0, "div", 55)(1, "h5");
279
- i0.ɵɵelement(2, "i", 59);
280
- i0.ɵɵtext(3, " Result Data ");
281
- i0.ɵɵelementStart(4, "button", 60);
282
- i0.ɵɵlistener("click", function ActionTestHarnessComponent_Conditional_23_Conditional_11_Conditional_7_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r10); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.showRawResult = !ctx_r2.showRawResult); });
283
- i0.ɵɵelement(5, "i", 61);
284
- i0.ɵɵtext(6);
285
- i0.ɵɵelementEnd()();
286
- i0.ɵɵtemplate(7, ActionTestHarnessComponent_Conditional_23_Conditional_11_Conditional_7_Conditional_7_Template, 8, 1, "div", 57)(8, ActionTestHarnessComponent_Conditional_23_Conditional_11_Conditional_7_Conditional_8_Template, 2, 1);
287
- i0.ɵɵelementEnd();
288
- } if (rf & 2) {
289
- const ctx_r2 = i0.ɵɵnextContext(3);
290
- i0.ɵɵadvance(5);
291
- i0.ɵɵclassProp("fa-code", !ctx_r2.showRawResult)("fa-list", ctx_r2.showRawResult);
292
- i0.ɵɵadvance();
293
- i0.ɵɵtextInterpolate1(" ", ctx_r2.showRawResult ? "Formatted View" : "Raw JSON", " ");
294
- i0.ɵɵadvance();
295
- i0.ɵɵconditional(ctx_r2.showRawResult ? 7 : 8);
296
- } }
297
- function ActionTestHarnessComponent_Conditional_23_Conditional_11_Template(rf, ctx) { if (rf & 1) {
298
- i0.ɵɵelementStart(0, "div", 51)(1, "div", 52);
299
- i0.ɵɵelement(2, "i");
300
- i0.ɵɵelementStart(3, "span");
301
- i0.ɵɵtext(4);
302
- i0.ɵɵelementEnd();
303
- i0.ɵɵtemplate(5, ActionTestHarnessComponent_Conditional_23_Conditional_11_Conditional_5_Template, 2, 1, "span", 53);
304
- i0.ɵɵelementEnd();
305
- i0.ɵɵtemplate(6, ActionTestHarnessComponent_Conditional_23_Conditional_11_Conditional_6_Template, 7, 1, "div", 54)(7, ActionTestHarnessComponent_Conditional_23_Conditional_11_Conditional_7_Template, 9, 6, "div", 55);
306
- i0.ɵɵelementEnd();
307
- } if (rf & 2) {
308
- const ctx_r2 = i0.ɵɵnextContext(2);
309
- i0.ɵɵclassProp("failure", !ctx_r2.executionResult.Success);
310
- i0.ɵɵadvance();
311
- i0.ɵɵstyleProp("background-color", ctx_r2.getResultColor());
312
- i0.ɵɵadvance();
313
- i0.ɵɵclassMap("fa-solid " + ctx_r2.getResultIcon());
314
- i0.ɵɵadvance(2);
315
- i0.ɵɵtextInterpolate(ctx_r2.executionResult.Success ? "Success" : "Failed");
316
- i0.ɵɵadvance();
317
- i0.ɵɵconditional(ctx_r2.executionResult.ResultCode ? 5 : -1);
318
- i0.ɵɵadvance();
319
- i0.ɵɵconditional(ctx_r2.executionResult.Message ? 6 : -1);
320
- i0.ɵɵadvance();
321
- i0.ɵɵconditional(ctx_r2.executionResult.ResultData !== null && ctx_r2.executionResult.ResultData !== undefined ? 7 : -1);
322
- } }
323
- function ActionTestHarnessComponent_Conditional_23_Template(rf, ctx) { if (rf & 1) {
324
- i0.ɵɵelementStart(0, "div", 15)(1, "div", 39)(2, "h4");
325
- i0.ɵɵelement(3, "i", 40);
326
- i0.ɵɵtext(4, " Execution Results ");
327
- i0.ɵɵelementEnd();
328
- i0.ɵɵelementStart(5, "div", 41)(6, "span", 42);
329
- i0.ɵɵelement(7, "i", 43);
330
- i0.ɵɵtext(8);
331
- i0.ɵɵelementEnd();
332
- i0.ɵɵtemplate(9, ActionTestHarnessComponent_Conditional_23_Conditional_9_Template, 6, 1);
333
- i0.ɵɵelementEnd()();
334
- i0.ɵɵtemplate(10, ActionTestHarnessComponent_Conditional_23_Conditional_10_Template, 7, 1, "div", 44)(11, ActionTestHarnessComponent_Conditional_23_Conditional_11_Template, 8, 10, "div", 45);
335
- i0.ɵɵelementEnd();
336
- } if (rf & 2) {
337
- const ctx_r2 = i0.ɵɵnextContext();
338
- i0.ɵɵadvance(8);
339
- i0.ɵɵtextInterpolate1(" ", ctx_r2.executionTime, "ms ");
340
- i0.ɵɵadvance();
341
- i0.ɵɵconditional(ctx_r2.executionResult ? 9 : -1);
342
- i0.ɵɵadvance();
343
- i0.ɵɵconditional(ctx_r2.executionError ? 10 : -1);
344
- i0.ɵɵadvance();
345
- i0.ɵɵconditional(ctx_r2.executionResult ? 11 : -1);
346
- } }
347
- export class ActionTestHarnessComponent {
348
- constructor(cdr) {
349
- this.cdr = cdr;
350
- this.actionParams = [];
351
- this.isVisible = false;
352
- this.visibilityChange = new EventEmitter();
353
- this.paramValues = [];
354
- this.isExecuting = false;
355
- this.executionResult = null;
356
- this.executionError = null;
357
- this.executionTime = 0;
358
- this.showRawResult = false;
359
- this.skipActionLog = false;
360
- }
361
- ngOnInit() {
362
- this.initializeParamValues();
363
- }
364
- initializeParamValues() {
365
- // Initialize parameter values with defaults
366
- this.paramValues = this.actionParams
367
- .filter(p => {
368
- const type = p.Type?.trim().toLowerCase();
369
- return type === 'input' || type === 'both';
370
- })
371
- .sort((a, b) => {
372
- // Sort required params first, then by name
373
- if (a.IsRequired !== b.IsRequired) {
374
- return a.IsRequired ? -1 : 1;
375
- }
376
- return a.Name.localeCompare(b.Name);
377
- })
378
- .map(param => ({
379
- param,
380
- value: this.getDefaultValue(param)
381
- }));
382
- }
383
- getDefaultValue(param) {
384
- if (param.DefaultValue) {
385
- return this.parseDefaultValue(param.DefaultValue, param.ValueType);
386
- }
387
- // Return appropriate empty value based on type
388
- if (param.IsArray) {
389
- return [];
390
- }
391
- switch (param.ValueType) {
392
- case 'Scalar':
393
- return null;
394
- case 'Simple Object':
395
- return {};
396
- case 'BaseEntity Sub-Class':
397
- return null;
398
- default:
399
- return null;
400
- }
401
- }
402
- parseDefaultValue(defaultValue, valueType) {
403
- try {
404
- // Try to parse as JSON first
405
- return JSON.parse(defaultValue);
406
- }
407
- catch {
408
- // If not JSON, return as string for scalar types
409
- if (valueType === 'Scalar') {
410
- return defaultValue;
411
- }
412
- return defaultValue;
413
- }
414
- }
415
- getInputType(param) {
416
- if (param.IsArray || param.ValueType === 'Simple Object' || param.ValueType === 'BaseEntity Sub-Class') {
417
- return 'textarea';
418
- }
419
- // Try to infer from default value or name
420
- const value = param.DefaultValue?.toLowerCase() || param.Name.toLowerCase();
421
- if (value.includes('date') || value.includes('time')) {
422
- return 'datetime-local';
423
- }
424
- if (value === 'true' || value === 'false') {
425
- return 'checkbox';
426
- }
427
- if (!isNaN(Number(value))) {
428
- return 'number';
429
- }
430
- return 'text';
431
- }
432
- onParamValueChange(paramValue, event) {
433
- const inputType = this.getInputType(paramValue.param);
434
- if (inputType === 'checkbox') {
435
- paramValue.value = event.target.checked;
436
- }
437
- else if (inputType === 'number') {
438
- paramValue.value = event.target.valueAsNumber;
439
- }
440
- else if (inputType === 'textarea') {
441
- // For complex types, try to parse as JSON
442
- try {
443
- paramValue.value = JSON.parse(event.target.value);
444
- paramValue.error = undefined;
445
- }
446
- catch (e) {
447
- // If not valid JSON, keep as string
448
- paramValue.value = event.target.value;
449
- if (paramValue.param.ValueType !== 'Scalar') {
450
- paramValue.error = 'Invalid JSON format';
451
- }
452
- }
453
- }
454
- else {
455
- paramValue.value = event.target.value;
456
- }
457
- }
458
- getParamDisplayValue(paramValue) {
459
- if (paramValue.value === null || paramValue.value === undefined) {
460
- return '';
461
- }
462
- if (typeof paramValue.value === 'object') {
463
- return JSON.stringify(paramValue.value, null, 2);
464
- }
465
- return String(paramValue.value);
466
- }
467
- validateParams() {
468
- let isValid = true;
469
- for (const paramValue of this.paramValues) {
470
- // Check required fields
471
- if (paramValue.param.IsRequired) {
472
- if (paramValue.value === null || paramValue.value === undefined ||
473
- (typeof paramValue.value === 'string' && paramValue.value.trim() === '') ||
474
- (Array.isArray(paramValue.value) && paramValue.value.length === 0)) {
475
- paramValue.error = 'This field is required';
476
- isValid = false;
477
- }
478
- }
479
- // Check for JSON parse errors
480
- if (paramValue.error) {
481
- isValid = false;
482
- }
483
- }
484
- return isValid;
485
- }
486
- async executeAction() {
487
- if (!this.validateParams()) {
488
- return;
489
- }
490
- this.isExecuting = true;
491
- this.executionResult = null;
492
- this.executionError = null;
493
- const startTime = Date.now();
494
- try {
495
- // Build parameters object
496
- const params = {};
497
- for (const paramValue of this.paramValues) {
498
- params[paramValue.param.Name] = paramValue.value;
499
- }
500
- // Execute the action using GraphQL
501
- const query = `
502
- mutation RunAction($input: RunActionInput!) {
503
- RunAction(input: $input) {
504
- Success
505
- Message
506
- ResultCode
507
- ResultData
508
- }
509
- }
510
- `;
511
- // Get GraphQL data provider from Metadata
512
- const graphQLProvider = Metadata.Provider;
513
- // Convert params to ActionParamInput array format
514
- const actionParams = this.paramValues.map(paramValue => {
515
- // Determine the actual data type for the Type field
516
- let dataType = 'string'; // default
517
- if (paramValue.param.ValueType === 'Scalar') {
518
- // For scalar, check the actual value type
519
- if (typeof paramValue.value === 'boolean') {
520
- dataType = 'boolean';
521
- }
522
- else if (typeof paramValue.value === 'number') {
523
- dataType = 'number';
524
- }
525
- else {
526
- dataType = 'string';
527
- }
528
- }
529
- else if (paramValue.param.ValueType === 'Simple Object') {
530
- dataType = 'object';
531
- }
532
- else if (paramValue.param.IsArray) {
533
- dataType = 'array';
534
- }
535
- return {
536
- Name: paramValue.param.Name,
537
- Value: paramValue.value === null || paramValue.value === undefined
538
- ? null
539
- : typeof paramValue.value === 'object'
540
- ? JSON.stringify(paramValue.value)
541
- : String(paramValue.value),
542
- Type: dataType
543
- };
544
- });
545
- const variables = {
546
- input: {
547
- ActionID: this.action.ID,
548
- Params: actionParams,
549
- SkipActionLog: this.skipActionLog
550
- }
551
- };
552
- let result;
553
- try {
554
- result = await graphQLProvider.ExecuteGQL(query, variables);
555
- }
556
- catch (gqlError) {
557
- console.error('❌ Action Test Harness: GraphQL execution failed', {
558
- error: gqlError,
559
- message: gqlError?.message,
560
- networkError: gqlError?.networkError,
561
- graphQLErrors: gqlError?.graphQLErrors,
562
- statusCode: gqlError?.networkError?.statusCode,
563
- response: gqlError?.networkError?.response
564
- });
565
- throw gqlError;
566
- }
567
- this.executionTime = Date.now() - startTime;
568
- if (result?.RunAction) {
569
- this.executionResult = result.RunAction;
570
- // If result is false/failed, it might still have an error in the data
571
- if (!this.executionResult?.Success && this.executionResult?.Message) {
572
- console.warn('⚠️ Action Test Harness: Action failed with message', this.executionResult.Message);
573
- }
574
- }
575
- else {
576
- console.error('❌ Action Test Harness: No RunAction in result', {
577
- result,
578
- resultType: typeof result,
579
- resultStringified: JSON.stringify(result)
580
- });
581
- throw new Error('No result returned from action execution');
582
- }
583
- }
584
- catch (error) {
585
- this.executionTime = Date.now() - startTime;
586
- this.executionError = error.message || 'An unknown error occurred';
587
- console.error('❌ Action Test Harness: Caught error during action execution', {
588
- error: error,
589
- message: error?.message,
590
- stack: error?.stack,
591
- type: error?.constructor?.name
592
- });
593
- }
594
- finally {
595
- this.isExecuting = false;
596
- this.cdr.detectChanges();
597
- }
598
- }
599
- clearResults() {
600
- this.executionResult = null;
601
- this.executionError = null;
602
- this.executionTime = 0;
603
- }
604
- resetParams() {
605
- this.initializeParamValues();
606
- this.clearResults();
607
- }
608
- copyResultToClipboard() {
609
- if (!this.executionResult)
610
- return;
611
- const resultText = JSON.stringify(this.executionResult, null, 2);
612
- navigator.clipboard.writeText(resultText).then(() => {
613
- // Could add a notification here
614
- }).catch(() => {
615
- // Failed to copy to clipboard
616
- });
617
- }
618
- copyResultDataToClipboard() {
619
- if (!this.executionResult?.ResultData)
620
- return;
621
- const resultDataText = this.formatResultData(this.executionResult.ResultData);
622
- navigator.clipboard.writeText(resultDataText).then(() => {
623
- // Could add a notification here
624
- }).catch(() => {
625
- // Failed to copy to clipboard
626
- });
627
- }
628
- getResultIcon() {
629
- if (!this.executionResult)
630
- return '';
631
- return this.executionResult.Success ? 'fa-check-circle' : 'fa-times-circle';
632
- }
633
- getResultColor() {
634
- if (!this.executionResult)
635
- return '';
636
- return this.executionResult.Success ? '#28a745' : '#dc3545';
637
- }
638
- getOutputParams() {
639
- return this.actionParams.filter(p => p.Type === 'Output' || p.Type === 'Both');
640
- }
641
- formatResultData(data) {
642
- if (data === null || data === undefined)
643
- return 'null';
644
- if (typeof data === 'object') {
645
- return JSON.stringify(data, null, 2);
646
- }
647
- return String(data);
648
- }
649
- static { this.ɵfac = function ActionTestHarnessComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ActionTestHarnessComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
650
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ActionTestHarnessComponent, selectors: [["mj-action-test-harness"]], inputs: { action: "action", actionParams: "actionParams", isVisible: "isVisible" }, outputs: { visibilityChange: "visibilityChange" }, decls: 24, vars: 7, consts: [[1, "action-test-harness"], [1, "harness-header"], [1, "fa-solid", "fa-flask"], [1, "header-actions"], ["name", "skipActionLog", 3, "ngModelChange", "ngModel"], [2, "margin-left", "8px"], [1, "parameters-section"], [1, "fa-solid", "fa-sliders"], [1, "no-params"], [1, "params-grid"], [1, "action-buttons"], ["kendoButton", "", "themeColor", "primary", "size", "large", 3, "click", "disabled"], ["kendoButton", "", "fillMode", "outline", 3, "click"], [1, "fa-solid", "fa-undo"], ["kendoButton", "", "fillMode", "outline"], [1, "results-section"], [1, "fa-solid", "fa-inbox"], [1, "param-field", 3, "required", "error"], [1, "param-field"], [1, "required-indicator"], [1, "array-badge"], [1, "value-type"], [1, "param-description"], ["rows", "4", 1, "param-input", 3, "value", "placeholder"], [1, "checkbox-wrapper"], ["type", "number", "placeholder", "Enter number", 1, "param-input", 3, "value"], ["type", "datetime-local", 1, "param-input", 3, "value"], ["type", "text", "placeholder", "Enter value", 1, "param-input", 3, "value"], [1, "field-error"], [1, "default-hint"], ["rows", "4", 1, "param-input", 3, "change", "value", "placeholder"], ["type", "checkbox", 1, "param-checkbox", 3, "change", "checked"], ["type", "number", "placeholder", "Enter number", 1, "param-input", 3, "change", "value"], ["type", "datetime-local", 1, "param-input", 3, "change", "value"], ["type", "text", "placeholder", "Enter value", 1, "param-input", 3, "change", "value"], [1, "fa-solid", "fa-exclamation-circle"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-play"], [1, "fa-solid", "fa-trash"], [1, "results-header"], [1, "fa-solid", "fa-poll"], [1, "execution-meta"], [1, "execution-time"], [1, "fa-solid", "fa-clock"], [1, "error-result"], [1, "success-result", 3, "failure"], ["kendoButton", "", "fillMode", "flat", "size", "small", 3, "click"], [1, "fa-solid", "fa-copy"], [1, "fa-solid", "fa-code"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "error-content"], [1, "success-result"], [1, "status-banner"], [1, "result-code"], [1, "result-message"], [1, "result-data"], [1, "fa-solid", "fa-message"], [1, "code-editor-container"], [1, "code-editor"], [1, "fa-solid", "fa-database"], ["kendoButton", "", "fillMode", "flat", "size", "small", 1, "toggle-view-btn", 3, "click"], [1, "fa-solid"], [1, "code-editor-header"], [1, "language-badge"], ["kendoButton", "", "fillMode", "flat", "size", "small", 1, "copy-btn", 3, "click"], [1, "code-editor", "json"], [1, "output-params"], [1, "output-param"], [1, "fa-solid", "fa-tag"], [1, "code-editor-container", "compact"]], template: function ActionTestHarnessComponent_Template(rf, ctx) { if (rf & 1) {
651
- i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "h3");
652
- i0.ɵɵelement(3, "i", 2);
653
- i0.ɵɵtext(4);
654
- i0.ɵɵelementEnd();
655
- i0.ɵɵelementStart(5, "div", 3)(6, "kendo-switch", 4);
656
- i0.ɵɵtwoWayListener("ngModelChange", function ActionTestHarnessComponent_Template_kendo_switch_ngModelChange_6_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.skipActionLog, $event) || (ctx.skipActionLog = $event); return $event; });
657
- i0.ɵɵelementEnd();
658
- i0.ɵɵelementStart(7, "label", 5);
659
- i0.ɵɵtext(8, "Skip Action Log");
660
- i0.ɵɵelementEnd()()();
661
- i0.ɵɵelementStart(9, "div", 6)(10, "h4");
662
- i0.ɵɵelement(11, "i", 7);
663
- i0.ɵɵtext(12, " Input Parameters ");
664
- i0.ɵɵelementEnd();
665
- i0.ɵɵtemplate(13, ActionTestHarnessComponent_Conditional_13_Template, 4, 0, "div", 8)(14, ActionTestHarnessComponent_Conditional_14_Template, 3, 0, "div", 9);
666
- i0.ɵɵelementEnd();
667
- i0.ɵɵelementStart(15, "div", 10)(16, "button", 11);
668
- i0.ɵɵlistener("click", function ActionTestHarnessComponent_Template_button_click_16_listener() { return ctx.executeAction(); });
669
- i0.ɵɵtemplate(17, ActionTestHarnessComponent_Conditional_17_Template, 2, 0)(18, ActionTestHarnessComponent_Conditional_18_Template, 2, 0);
670
- i0.ɵɵelementEnd();
671
- i0.ɵɵelementStart(19, "button", 12);
672
- i0.ɵɵlistener("click", function ActionTestHarnessComponent_Template_button_click_19_listener() { return ctx.resetParams(); });
673
- i0.ɵɵelement(20, "i", 13);
674
- i0.ɵɵtext(21, " Reset ");
675
- i0.ɵɵelementEnd();
676
- i0.ɵɵtemplate(22, ActionTestHarnessComponent_Conditional_22_Template, 3, 0, "button", 14);
677
- i0.ɵɵelementEnd();
678
- i0.ɵɵtemplate(23, ActionTestHarnessComponent_Conditional_23_Template, 12, 4, "div", 15);
679
- i0.ɵɵelementEnd();
680
- } if (rf & 2) {
681
- i0.ɵɵadvance(4);
682
- i0.ɵɵtextInterpolate1(" Test Harness for ", ctx.action.Name, " ");
683
- i0.ɵɵadvance(2);
684
- i0.ɵɵtwoWayProperty("ngModel", ctx.skipActionLog);
685
- i0.ɵɵadvance(7);
686
- i0.ɵɵconditional(ctx.paramValues.length === 0 ? 13 : 14);
687
- i0.ɵɵadvance(3);
688
- i0.ɵɵproperty("disabled", ctx.isExecuting || ctx.action.Status !== "Active");
689
- i0.ɵɵadvance();
690
- i0.ɵɵconditional(ctx.isExecuting ? 17 : 18);
691
- i0.ɵɵadvance(5);
692
- i0.ɵɵconditional(ctx.executionResult || ctx.executionError ? 22 : -1);
693
- i0.ɵɵadvance();
694
- i0.ɵɵconditional(ctx.executionResult || ctx.executionError ? 23 : -1);
695
- } }, dependencies: [i1.NgControlStatus, i1.NgModel, i2.SwitchComponent, i3.ButtonComponent], styles: [".action-test-harness[_ngcontent-%COMP%] {\n background: white;\n border-radius: 8px;\n padding: 24px;\n max-width: 100%;\n margin: 0;\n width: 100%;\n box-sizing: border-box;\n}\n\n\n\n.action-test-harness[_ngcontent-%COMP%] *[_ngcontent-%COMP%] {\n box-sizing: border-box;\n}\n\n\n\n.harness-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n padding-bottom: 16px;\n border-bottom: 2px solid #e9ecef;\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.harness-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.harness-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #6f42c1;\n}\n\n.header-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n\n\n.parameters-section[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n width: 100%;\n overflow-x: auto;\n}\n\n.parameters-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.no-params[_ngcontent-%COMP%] {\n text-align: center;\n padding: 40px;\n color: #6c757d;\n}\n\n.no-params[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 2.5em;\n margin-bottom: 12px;\n opacity: 0.3;\n}\n\n.params-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 16px;\n width: 100%;\n}\n\n.param-field[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 6px;\n padding: 12px;\n transition: all 0.2s;\n min-width: 0;\n overflow: hidden;\n}\n\n.param-field[_ngcontent-%COMP%]:hover {\n border-color: #dee2e6;\n box-shadow: 0 2px 4px rgba(0,0,0,0.05);\n}\n\n.param-field.required[_ngcontent-%COMP%] {\n border-left: 3px solid #ffc107;\n}\n\n.param-field.error[_ngcontent-%COMP%] {\n border-color: #dc3545;\n background: #f8d7da20;\n}\n\n.param-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-bottom: 8px;\n font-weight: 600;\n color: #495057;\n flex-wrap: wrap;\n font-size: 0.95em;\n}\n\n.required-indicator[_ngcontent-%COMP%] {\n color: #dc3545;\n}\n\n.array-badge[_ngcontent-%COMP%] {\n background: #6f42c1;\n color: white;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.value-type[_ngcontent-%COMP%] {\n margin-left: auto;\n color: #6c757d;\n font-size: 0.8em;\n font-weight: 400;\n white-space: nowrap;\n}\n\n.param-description[_ngcontent-%COMP%] {\n color: #6c757d;\n font-size: 0.9em;\n margin-bottom: 8px;\n line-height: 1.4;\n}\n\n.param-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 8px 12px;\n border: 1px solid #ced4da;\n border-radius: 4px;\n font-family: inherit;\n font-size: 0.95em;\n transition: border-color 0.2s;\n box-sizing: border-box;\n max-width: 100%;\n}\n\n.param-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: #80bdff;\n box-shadow: 0 0 0 2px rgba(0,123,255,0.1);\n}\n\ntextarea.param-input[_ngcontent-%COMP%] {\n resize: vertical;\n font-family: 'Courier New', monospace;\n font-size: 0.9em;\n}\n\n.checkbox-wrapper[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.param-checkbox[_ngcontent-%COMP%] {\n width: 20px;\n height: 20px;\n cursor: pointer;\n}\n\n.field-error[_ngcontent-%COMP%] {\n margin-top: 6px;\n color: #dc3545;\n font-size: 0.85em;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.default-hint[_ngcontent-%COMP%] {\n margin-top: 6px;\n color: #6c757d;\n font-size: 0.85em;\n font-style: italic;\n}\n\n\n\n.action-buttons[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n margin-bottom: 24px;\n padding: 16px;\n background: #f8f9fa;\n border-radius: 6px;\n align-items: center;\n flex-wrap: wrap;\n}\n\n\n\n.results-section[_ngcontent-%COMP%] {\n border: 2px solid #e9ecef;\n border-radius: 8px;\n overflow: hidden;\n margin-top: 20px;\n}\n\n.results-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n background: #f8f9fa;\n border-bottom: 1px solid #e9ecef;\n}\n\n.results-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.execution-time[_ngcontent-%COMP%] {\n color: #6c757d;\n font-size: 0.9em;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n\n\n.error-result[_ngcontent-%COMP%] {\n padding: 20px;\n background: #f8d7da;\n display: flex;\n gap: 16px;\n align-items: flex-start;\n}\n\n.error-result[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.5em;\n color: #dc3545;\n flex-shrink: 0;\n}\n\n.error-content[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: #721c24;\n}\n\n.error-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: #721c24;\n}\n\n\n\n.success-result[_ngcontent-%COMP%] {\n background: white;\n}\n\n.success-result.failure[_ngcontent-%COMP%] .status-banner[_ngcontent-%COMP%] {\n background: #dc3545 !important;\n}\n\n.status-banner[_ngcontent-%COMP%] {\n padding: 16px 20px;\n color: white;\n display: flex;\n align-items: center;\n gap: 12px;\n font-weight: 600;\n font-size: 1.1em;\n}\n\n.status-banner[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n}\n\n.result-code[_ngcontent-%COMP%] {\n margin-left: auto;\n background: rgba(255,255,255,0.2);\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 0.9em;\n}\n\n.result-message[_ngcontent-%COMP%] {\n padding: 20px;\n border-bottom: 1px solid #e9ecef;\n}\n\n.result-message[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.result-message[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #17a2b8;\n}\n\n.result-message[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: #6c757d;\n line-height: 1.5;\n}\n\n.result-message[_ngcontent-%COMP%] .code-editor-container[_ngcontent-%COMP%] {\n margin-bottom: 0;\n}\n\n.result-message[_ngcontent-%COMP%] .code-editor[_ngcontent-%COMP%] {\n color: #e8e8e8;\n background: #2d2d30;\n max-height: 200px;\n overflow-y: auto;\n}\n\n\n\n.result-data[_ngcontent-%COMP%] {\n padding: 20px;\n}\n\n.result-data[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.result-data[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #6f42c1;\n}\n\n.toggle-view-btn[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: 0.85em;\n}\n\n.raw-data[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 4px;\n padding: 16px;\n margin: 0;\n font-family: 'Courier New', monospace;\n font-size: 0.9em;\n overflow-x: auto;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n\n\n.code-editor-container[_ngcontent-%COMP%] {\n background: #1e1e1e;\n border-radius: 6px;\n overflow: hidden;\n margin-bottom: 16px;\n}\n\n.code-editor-container.compact[_ngcontent-%COMP%] {\n margin-bottom: 0;\n}\n\n.code-editor-header[_ngcontent-%COMP%] {\n background: #2d2d30;\n padding: 8px 12px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n border-bottom: 1px solid #3e3e42;\n}\n\n.language-badge[_ngcontent-%COMP%] {\n background: #007acc;\n color: white;\n padding: 2px 8px;\n border-radius: 3px;\n font-size: 0.75em;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.copy-btn[_ngcontent-%COMP%] {\n color: #cccccc;\n padding: 4px 8px;\n min-width: auto;\n}\n\n.copy-btn[_ngcontent-%COMP%]:hover {\n color: #ffffff;\n background: rgba(255, 255, 255, 0.1);\n}\n\n.code-editor[_ngcontent-%COMP%] {\n background: #1e1e1e;\n color: #d4d4d4;\n border: none;\n border-radius: 0;\n padding: 16px;\n margin: 0;\n font-family: 'Consolas', 'Monaco', 'Courier New', monospace;\n font-size: 13px;\n line-height: 1.5;\n overflow-x: auto;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n.code-editor.json[_ngcontent-%COMP%] {\n \n\n color: #9cdcfe;\n}\n\n\n\n.output-params[_ngcontent-%COMP%] {\n display: grid;\n gap: 16px;\n}\n\n.output-param[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 6px;\n padding: 16px;\n}\n\n.output-param[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-bottom: 8px;\n font-weight: 600;\n color: #495057;\n}\n\n.output-param[_ngcontent-%COMP%] label[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #6f42c1;\n font-size: 0.9em;\n}\n\n.output-value[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n padding: 12px;\n}\n\n.output-value[_ngcontent-%COMP%] pre[_ngcontent-%COMP%] {\n margin: 0;\n font-family: 'Courier New', monospace;\n font-size: 0.9em;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n.no-value[_ngcontent-%COMP%] {\n color: #6c757d;\n font-style: italic;\n}\n\n\n\n@media (max-width: 768px) {\n .params-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n \n .harness-header[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n gap: 12px;\n }\n \n .results-header[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n gap: 12px;\n }\n \n .action-buttons[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n}"] }); }
696
- }
697
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ActionTestHarnessComponent, [{
698
- type: Component,
699
- args: [{ selector: 'mj-action-test-harness', template: "<div class=\"action-test-harness\">\n <div class=\"harness-header\">\n <h3>\n <i class=\"fa-solid fa-flask\"></i>\n Test Harness for {{ action.Name }}\n </h3>\n <div class=\"header-actions\">\n <kendo-switch [(ngModel)]=\"skipActionLog\" name=\"skipActionLog\">\n </kendo-switch>\n <label style=\"margin-left: 8px;\">Skip Action Log</label>\n </div>\n </div>\n\n <!-- Input Parameters Section -->\n <div class=\"parameters-section\">\n <h4>\n <i class=\"fa-solid fa-sliders\"></i>\n Input Parameters\n </h4>\n \n @if (paramValues.length === 0) {\n <div class=\"no-params\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>This action has no input parameters</p>\n </div>\n } @else {\n <div class=\"params-grid\">\n @for (paramValue of paramValues; track paramValue.param.ID) {\n <div class=\"param-field\" [class.required]=\"paramValue.param.IsRequired\" [class.error]=\"paramValue.error\">\n <label>\n {{ paramValue.param.Name }}\n @if (paramValue.param.IsRequired) {\n <span class=\"required-indicator\">*</span>\n }\n @if (paramValue.param.IsArray) {\n <span class=\"array-badge\">Array</span>\n }\n <span class=\"value-type\">{{ paramValue.param.ValueType }}</span>\n </label>\n \n @if (paramValue.param.Description) {\n <div class=\"param-description\">{{ paramValue.param.Description }}</div>\n }\n \n @switch (getInputType(paramValue.param)) {\n @case ('textarea') {\n <textarea \n [value]=\"getParamDisplayValue(paramValue)\"\n (change)=\"onParamValueChange(paramValue, $event)\"\n [placeholder]=\"paramValue.param.IsArray ? 'Enter JSON array' : paramValue.param.ValueType === 'Simple Object' ? 'Enter JSON object' : 'Enter value'\"\n rows=\"4\"\n class=\"param-input\">\n </textarea>\n }\n @case ('checkbox') {\n <div class=\"checkbox-wrapper\">\n <input \n type=\"checkbox\"\n [checked]=\"paramValue.value\"\n (change)=\"onParamValueChange(paramValue, $event)\"\n class=\"param-checkbox\">\n </div>\n }\n @case ('number') {\n <input \n type=\"number\"\n [value]=\"paramValue.value\"\n (change)=\"onParamValueChange(paramValue, $event)\"\n placeholder=\"Enter number\"\n class=\"param-input\">\n }\n @case ('datetime-local') {\n <input \n type=\"datetime-local\"\n [value]=\"paramValue.value\"\n (change)=\"onParamValueChange(paramValue, $event)\"\n class=\"param-input\">\n }\n @default {\n <input \n type=\"text\"\n [value]=\"paramValue.value || ''\"\n (change)=\"onParamValueChange(paramValue, $event)\"\n placeholder=\"Enter value\"\n class=\"param-input\">\n }\n }\n \n @if (paramValue.error) {\n <div class=\"field-error\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n {{ paramValue.error }}\n </div>\n }\n \n @if (paramValue.param.DefaultValue && !paramValue.value) {\n <div class=\"default-hint\">\n Default: {{ paramValue.param.DefaultValue }}\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Action Buttons -->\n <div class=\"action-buttons\">\n <button \n kendoButton\n themeColor=\"primary\" \n size=\"large\"\n (click)=\"executeAction()\"\n [disabled]=\"isExecuting || action.Status !== 'Active'\">\n @if (isExecuting) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Executing...\n } @else {\n <i class=\"fa-solid fa-play\"></i> Execute Action\n }\n </button>\n \n <button \n kendoButton\n fillMode=\"outline\"\n (click)=\"resetParams()\">\n <i class=\"fa-solid fa-undo\"></i> Reset\n </button>\n \n @if (executionResult || executionError) {\n <button \n kendoButton\n fillMode=\"outline\"\n (click)=\"clearResults()\">\n <i class=\"fa-solid fa-trash\"></i> Clear Results\n </button>\n }\n </div>\n\n <!-- Results Section -->\n @if (executionResult || executionError) {\n <div class=\"results-section\">\n <div class=\"results-header\">\n <h4>\n <i class=\"fa-solid fa-poll\"></i>\n Execution Results\n </h4>\n <div class=\"execution-meta\">\n <span class=\"execution-time\">\n <i class=\"fa-solid fa-clock\"></i>\n {{ executionTime }}ms\n </span>\n @if (executionResult) {\n <button \n kendoButton\n fillMode=\"flat\" \n size=\"small\"\n (click)=\"copyResultToClipboard()\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button \n kendoButton\n fillMode=\"flat\" \n size=\"small\"\n (click)=\"showRawResult = !showRawResult\">\n <i class=\"fa-solid fa-code\"></i> \n {{ showRawResult ? 'Hide' : 'Show' }} Raw\n </button>\n }\n </div>\n </div>\n\n @if (executionError) {\n <div class=\"error-result\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <div class=\"error-content\">\n <h5>Execution Error</h5>\n <p>{{ executionError }}</p>\n </div>\n </div>\n }\n\n @if (executionResult) {\n <div class=\"success-result\" [class.failure]=\"!executionResult.Success\">\n <!-- Status Banner -->\n <div class=\"status-banner\" [style.background-color]=\"getResultColor()\">\n <i [class]=\"'fa-solid ' + getResultIcon()\"></i>\n <span>{{ executionResult.Success ? 'Success' : 'Failed' }}</span>\n @if (executionResult.ResultCode) {\n <span class=\"result-code\">{{ executionResult.ResultCode }}</span>\n }\n </div>\n\n <!-- Message -->\n @if (executionResult.Message) {\n <div class=\"result-message\">\n <h5>\n <i class=\"fa-solid fa-message\"></i> Message\n </h5>\n <div class=\"code-editor-container\">\n <pre class=\"code-editor\">{{ executionResult.Message }}</pre>\n </div>\n </div>\n }\n\n <!-- Result Data -->\n @if (executionResult.ResultData !== null && executionResult.ResultData !== undefined) {\n <div class=\"result-data\">\n <h5>\n <i class=\"fa-solid fa-database\"></i> Result Data\n <button \n kendoButton\n fillMode=\"flat\" \n size=\"small\"\n class=\"toggle-view-btn\"\n (click)=\"showRawResult = !showRawResult\">\n <i class=\"fa-solid\" [class.fa-code]=\"!showRawResult\" [class.fa-list]=\"showRawResult\"></i> \n {{ showRawResult ? 'Formatted View' : 'Raw JSON' }}\n </button>\n </h5>\n @if (showRawResult) {\n <div class=\"code-editor-container\">\n <div class=\"code-editor-header\">\n <span class=\"language-badge\">JSON</span>\n <button \n kendoButton\n fillMode=\"flat\" \n size=\"small\"\n class=\"copy-btn\"\n (click)=\"copyResultDataToClipboard()\">\n <i class=\"fa-solid fa-copy\"></i>\n </button>\n </div>\n <pre class=\"code-editor json\">{{ formatResultData(executionResult.ResultData) }}</pre>\n </div>\n } @else {\n <!-- Output Parameters Mapping -->\n @if (getOutputParams().length > 0) {\n <div class=\"output-params\">\n @for (outputParam of getOutputParams(); track outputParam.ID) {\n <div class=\"output-param\">\n <label>\n <i class=\"fa-solid fa-tag\"></i> {{ outputParam.Name }}\n </label>\n <div class=\"code-editor-container compact\">\n <pre class=\"code-editor\">{{ formatResultData(executionResult.ResultData[outputParam.Name]) }}</pre>\n </div>\n </div>\n }\n </div>\n } @else {\n <div class=\"code-editor-container\">\n <div class=\"code-editor-header\">\n <span class=\"language-badge\">JSON</span>\n <button \n kendoButton\n fillMode=\"flat\" \n size=\"small\"\n class=\"copy-btn\"\n (click)=\"copyResultDataToClipboard()\">\n <i class=\"fa-solid fa-copy\"></i>\n </button>\n </div>\n <pre class=\"code-editor json\">{{ formatResultData(executionResult.ResultData) }}</pre>\n </div>\n }\n }\n </div>\n }\n </div>\n }\n </div>\n }\n</div>", styles: [".action-test-harness {\n background: white;\n border-radius: 8px;\n padding: 24px;\n max-width: 100%;\n margin: 0;\n width: 100%;\n box-sizing: border-box;\n}\n\n/* Ensure all child elements use border-box */\n.action-test-harness * {\n box-sizing: border-box;\n}\n\n/* Header */\n.harness-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n padding-bottom: 16px;\n border-bottom: 2px solid #e9ecef;\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.harness-header h3 {\n margin: 0;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.harness-header h3 i {\n color: #6f42c1;\n}\n\n.header-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n/* Parameters Section */\n.parameters-section {\n margin-bottom: 20px;\n width: 100%;\n overflow-x: auto;\n}\n\n.parameters-section h4 {\n margin: 0 0 16px 0;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.no-params {\n text-align: center;\n padding: 40px;\n color: #6c757d;\n}\n\n.no-params i {\n font-size: 2.5em;\n margin-bottom: 12px;\n opacity: 0.3;\n}\n\n.params-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 16px;\n width: 100%;\n}\n\n.param-field {\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 6px;\n padding: 12px;\n transition: all 0.2s;\n min-width: 0;\n overflow: hidden;\n}\n\n.param-field:hover {\n border-color: #dee2e6;\n box-shadow: 0 2px 4px rgba(0,0,0,0.05);\n}\n\n.param-field.required {\n border-left: 3px solid #ffc107;\n}\n\n.param-field.error {\n border-color: #dc3545;\n background: #f8d7da20;\n}\n\n.param-field label {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-bottom: 8px;\n font-weight: 600;\n color: #495057;\n flex-wrap: wrap;\n font-size: 0.95em;\n}\n\n.required-indicator {\n color: #dc3545;\n}\n\n.array-badge {\n background: #6f42c1;\n color: white;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.value-type {\n margin-left: auto;\n color: #6c757d;\n font-size: 0.8em;\n font-weight: 400;\n white-space: nowrap;\n}\n\n.param-description {\n color: #6c757d;\n font-size: 0.9em;\n margin-bottom: 8px;\n line-height: 1.4;\n}\n\n.param-input {\n width: 100%;\n padding: 8px 12px;\n border: 1px solid #ced4da;\n border-radius: 4px;\n font-family: inherit;\n font-size: 0.95em;\n transition: border-color 0.2s;\n box-sizing: border-box;\n max-width: 100%;\n}\n\n.param-input:focus {\n outline: none;\n border-color: #80bdff;\n box-shadow: 0 0 0 2px rgba(0,123,255,0.1);\n}\n\ntextarea.param-input {\n resize: vertical;\n font-family: 'Courier New', monospace;\n font-size: 0.9em;\n}\n\n.checkbox-wrapper {\n padding: 8px 0;\n}\n\n.param-checkbox {\n width: 20px;\n height: 20px;\n cursor: pointer;\n}\n\n.field-error {\n margin-top: 6px;\n color: #dc3545;\n font-size: 0.85em;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.default-hint {\n margin-top: 6px;\n color: #6c757d;\n font-size: 0.85em;\n font-style: italic;\n}\n\n/* Action Buttons */\n.action-buttons {\n display: flex;\n gap: 12px;\n margin-bottom: 24px;\n padding: 16px;\n background: #f8f9fa;\n border-radius: 6px;\n align-items: center;\n flex-wrap: wrap;\n}\n\n/* Results Section */\n.results-section {\n border: 2px solid #e9ecef;\n border-radius: 8px;\n overflow: hidden;\n margin-top: 20px;\n}\n\n.results-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n background: #f8f9fa;\n border-bottom: 1px solid #e9ecef;\n}\n\n.results-header h4 {\n margin: 0;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-meta {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.execution-time {\n color: #6c757d;\n font-size: 0.9em;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n/* Error Result */\n.error-result {\n padding: 20px;\n background: #f8d7da;\n display: flex;\n gap: 16px;\n align-items: flex-start;\n}\n\n.error-result i {\n font-size: 1.5em;\n color: #dc3545;\n flex-shrink: 0;\n}\n\n.error-content h5 {\n margin: 0 0 8px 0;\n color: #721c24;\n}\n\n.error-content p {\n margin: 0;\n color: #721c24;\n}\n\n/* Success Result */\n.success-result {\n background: white;\n}\n\n.success-result.failure .status-banner {\n background: #dc3545 !important;\n}\n\n.status-banner {\n padding: 16px 20px;\n color: white;\n display: flex;\n align-items: center;\n gap: 12px;\n font-weight: 600;\n font-size: 1.1em;\n}\n\n.status-banner i {\n font-size: 1.2em;\n}\n\n.result-code {\n margin-left: auto;\n background: rgba(255,255,255,0.2);\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 0.9em;\n}\n\n.result-message {\n padding: 20px;\n border-bottom: 1px solid #e9ecef;\n}\n\n.result-message h5 {\n margin: 0 0 12px 0;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.result-message h5 i {\n color: #17a2b8;\n}\n\n.result-message p {\n margin: 0;\n color: #6c757d;\n line-height: 1.5;\n}\n\n.result-message .code-editor-container {\n margin-bottom: 0;\n}\n\n.result-message .code-editor {\n color: #e8e8e8;\n background: #2d2d30;\n max-height: 200px;\n overflow-y: auto;\n}\n\n/* Result Data */\n.result-data {\n padding: 20px;\n}\n\n.result-data h5 {\n margin: 0 0 16px 0;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.result-data h5 i {\n color: #6f42c1;\n}\n\n.toggle-view-btn {\n margin-left: auto;\n font-size: 0.85em;\n}\n\n.raw-data {\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 4px;\n padding: 16px;\n margin: 0;\n font-family: 'Courier New', monospace;\n font-size: 0.9em;\n overflow-x: auto;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n/* Code Editor Styles */\n.code-editor-container {\n background: #1e1e1e;\n border-radius: 6px;\n overflow: hidden;\n margin-bottom: 16px;\n}\n\n.code-editor-container.compact {\n margin-bottom: 0;\n}\n\n.code-editor-header {\n background: #2d2d30;\n padding: 8px 12px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n border-bottom: 1px solid #3e3e42;\n}\n\n.language-badge {\n background: #007acc;\n color: white;\n padding: 2px 8px;\n border-radius: 3px;\n font-size: 0.75em;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.copy-btn {\n color: #cccccc;\n padding: 4px 8px;\n min-width: auto;\n}\n\n.copy-btn:hover {\n color: #ffffff;\n background: rgba(255, 255, 255, 0.1);\n}\n\n.code-editor {\n background: #1e1e1e;\n color: #d4d4d4;\n border: none;\n border-radius: 0;\n padding: 16px;\n margin: 0;\n font-family: 'Consolas', 'Monaco', 'Courier New', monospace;\n font-size: 13px;\n line-height: 1.5;\n overflow-x: auto;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n.code-editor.json {\n /* JSON syntax highlighting simulation */\n color: #9cdcfe;\n}\n\n/* Output Parameters */\n.output-params {\n display: grid;\n gap: 16px;\n}\n\n.output-param {\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 6px;\n padding: 16px;\n}\n\n.output-param label {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-bottom: 8px;\n font-weight: 600;\n color: #495057;\n}\n\n.output-param label i {\n color: #6f42c1;\n font-size: 0.9em;\n}\n\n.output-value {\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n padding: 12px;\n}\n\n.output-value pre {\n margin: 0;\n font-family: 'Courier New', monospace;\n font-size: 0.9em;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n.no-value {\n color: #6c757d;\n font-style: italic;\n}\n\n/* Responsive */\n@media (max-width: 768px) {\n .params-grid {\n grid-template-columns: 1fr;\n }\n \n .harness-header {\n flex-direction: column;\n align-items: flex-start;\n gap: 12px;\n }\n \n .results-header {\n flex-direction: column;\n align-items: flex-start;\n gap: 12px;\n }\n \n .action-buttons {\n flex-wrap: wrap;\n }\n}"] }]
700
- }], () => [{ type: i0.ChangeDetectorRef }], { action: [{
701
- type: Input
702
- }], actionParams: [{
703
- type: Input
704
- }], isVisible: [{
705
- type: Input
706
- }], visibilityChange: [{
707
- type: Output
708
- }] }); })();
709
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ActionTestHarnessComponent, { className: "ActionTestHarnessComponent", filePath: "src/lib/custom/Actions/action-test-harness.component.ts", lineNumber: 24 }); })();
710
- //# sourceMappingURL=action-test-harness.component.js.map