@memberjunction/ng-core-entity-forms 5.22.0 → 5.24.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 (215) hide show
  1. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts +4 -5
  2. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
  3. package/dist/lib/custom/AIAgents/add-action-dialog.component.js +55 -59
  4. package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
  5. package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js +0 -1
  6. package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js.map +1 -1
  7. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts +4 -5
  8. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -1
  9. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +54 -71
  10. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js.map +1 -1
  11. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  12. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +1053 -1096
  13. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  14. package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts +2 -3
  15. package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts.map +1 -1
  16. package/dist/lib/custom/AIAgents/ai-agent-management.service.js +39 -82
  17. package/dist/lib/custom/AIAgents/ai-agent-management.service.js.map +1 -1
  18. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +4 -5
  19. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
  20. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +28 -31
  21. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js.map +1 -1
  22. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts +4 -5
  23. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
  24. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +15 -14
  25. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
  26. package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts +4 -7
  27. package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -1
  28. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +77 -124
  29. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
  30. package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts +2 -2
  31. package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts.map +1 -1
  32. package/dist/lib/custom/AIAgents/new-agent-dialog.service.js +10 -11
  33. package/dist/lib/custom/AIAgents/new-agent-dialog.service.js.map +1 -1
  34. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts +4 -5
  35. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
  36. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +18 -18
  37. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
  38. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts +4 -5
  39. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
  40. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +59 -80
  41. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -1
  42. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +4 -5
  43. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
  44. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +23 -24
  45. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
  46. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
  47. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +862 -906
  48. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  49. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +4 -5
  50. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js.map +1 -1
  51. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +448 -499
  52. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  53. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts +2 -2
  54. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts.map +1 -1
  55. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js +6 -11
  56. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js.map +1 -1
  57. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts +4 -5
  58. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -1
  59. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +16 -15
  60. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -1
  61. package/dist/lib/custom/Actions/action-execution-log-form.component.js +160 -166
  62. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  63. package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
  64. package/dist/lib/custom/Actions/action-form.component.js +93 -94
  65. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  66. package/dist/lib/custom/ContentSources/content-source-form.component.d.ts +22 -0
  67. package/dist/lib/custom/ContentSources/content-source-form.component.d.ts.map +1 -0
  68. package/dist/lib/custom/ContentSources/content-source-form.component.js +165 -0
  69. package/dist/lib/custom/ContentSources/content-source-form.component.js.map +1 -0
  70. package/dist/lib/custom/Entities/entity-form.component.js +2 -2
  71. package/dist/lib/custom/Lists/list-form.component.js +61 -63
  72. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  73. package/dist/lib/custom/Queries/query-category-dialog.component.js +33 -59
  74. package/dist/lib/custom/Queries/query-category-dialog.component.js.map +1 -1
  75. package/dist/lib/custom/Queries/query-form.component.js +354 -360
  76. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  77. package/dist/lib/custom/Queries/query-run-dialog.component.js +62 -71
  78. package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
  79. package/dist/lib/custom/Templates/template-param-dialog.component.js +128 -124
  80. package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
  81. package/dist/lib/custom/Templates/template-params-grid.component.d.ts +45 -22
  82. package/dist/lib/custom/Templates/template-params-grid.component.d.ts.map +1 -1
  83. package/dist/lib/custom/Templates/template-params-grid.component.js +380 -384
  84. package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -1
  85. package/dist/lib/custom/Templates/templates-form.component.js +34 -36
  86. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  87. package/dist/lib/custom/Tests/test-form.component.js +8 -9
  88. package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
  89. package/dist/lib/custom/Tests/test-run-feedback-form.component.js +4 -4
  90. package/dist/lib/custom/Tests/test-run-feedback-form.component.js.map +1 -1
  91. package/dist/lib/custom/Tests/test-run-form.component.js +7 -7
  92. package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
  93. package/dist/lib/custom/Tests/test-suite-form.component.js +6 -7
  94. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  95. package/dist/lib/custom/Tests/test-suite-run-form.component.js +6 -7
  96. package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
  97. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +381 -409
  98. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  99. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -1
  100. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +1 -1
  101. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
  102. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
  103. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +74 -63
  104. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
  105. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js +10 -10
  106. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js.map +1 -1
  107. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  108. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +352 -332
  109. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  110. package/dist/lib/custom/custom-forms.module.d.ts +25 -29
  111. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  112. package/dist/lib/custom/custom-forms.module.js +57 -82
  113. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  114. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +4 -5
  115. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
  116. package/dist/lib/custom/shared/entity-selector-dialog.component.js +59 -66
  117. package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
  118. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
  119. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +176 -156
  120. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
  121. package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.d.ts +10 -0
  122. package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.d.ts.map +1 -0
  123. package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.js +65 -0
  124. package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.js.map +1 -0
  125. package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.d.ts +10 -0
  126. package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.d.ts.map +1 -0
  127. package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.js +89 -0
  128. package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.js.map +1 -0
  129. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.d.ts.map +1 -1
  130. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +98 -44
  131. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
  132. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
  133. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +35 -17
  134. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
  135. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.d.ts.map +1 -1
  136. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js +79 -20
  137. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js.map +1 -1
  138. package/dist/lib/generated/Entities/MJContentItemDuplicate/mjcontentitemduplicate.form.component.d.ts +10 -0
  139. package/dist/lib/generated/Entities/MJContentItemDuplicate/mjcontentitemduplicate.form.component.d.ts.map +1 -0
  140. package/dist/lib/generated/Entities/MJContentItemDuplicate/mjcontentitemduplicate.form.component.js +73 -0
  141. package/dist/lib/generated/Entities/MJContentItemDuplicate/mjcontentitemduplicate.form.component.js.map +1 -0
  142. package/dist/lib/generated/Entities/MJContentItemTag/mjcontentitemtag.form.component.js +11 -6
  143. package/dist/lib/generated/Entities/MJContentItemTag/mjcontentitemtag.form.component.js.map +1 -1
  144. package/dist/lib/generated/Entities/MJContentProcessRun/mjcontentprocessrun.form.component.d.ts.map +1 -1
  145. package/dist/lib/generated/Entities/MJContentProcessRun/mjcontentprocessrun.form.component.js +49 -8
  146. package/dist/lib/generated/Entities/MJContentProcessRun/mjcontentprocessrun.form.component.js.map +1 -1
  147. package/dist/lib/generated/Entities/MJContentProcessRunDetail/mjcontentprocessrundetail.form.component.d.ts +10 -0
  148. package/dist/lib/generated/Entities/MJContentProcessRunDetail/mjcontentprocessrundetail.form.component.d.ts.map +1 -0
  149. package/dist/lib/generated/Entities/MJContentProcessRunDetail/mjcontentprocessrundetail.form.component.js +107 -0
  150. package/dist/lib/generated/Entities/MJContentProcessRunDetail/mjcontentprocessrundetail.form.component.js.map +1 -0
  151. package/dist/lib/generated/Entities/MJContentProcessRunPromptRun/mjcontentprocessrunpromptrun.form.component.d.ts +10 -0
  152. package/dist/lib/generated/Entities/MJContentProcessRunPromptRun/mjcontentprocessrunpromptrun.form.component.d.ts.map +1 -0
  153. package/dist/lib/generated/Entities/MJContentProcessRunPromptRun/mjcontentprocessrunpromptrun.form.component.js +57 -0
  154. package/dist/lib/generated/Entities/MJContentProcessRunPromptRun/mjcontentprocessrunpromptrun.form.component.js.map +1 -0
  155. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.d.ts.map +1 -1
  156. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js +71 -24
  157. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js.map +1 -1
  158. package/dist/lib/generated/Entities/MJContentSourceType/mjcontentsourcetype.form.component.d.ts.map +1 -1
  159. package/dist/lib/generated/Entities/MJContentSourceType/mjcontentsourcetype.form.component.js +43 -15
  160. package/dist/lib/generated/Entities/MJContentSourceType/mjcontentsourcetype.form.component.js.map +1 -1
  161. package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.d.ts.map +1 -1
  162. package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js +43 -17
  163. package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js.map +1 -1
  164. package/dist/lib/generated/Entities/MJDuplicateRun/mjduplicaterun.form.component.js +21 -11
  165. package/dist/lib/generated/Entities/MJDuplicateRun/mjduplicaterun.form.component.js.map +1 -1
  166. package/dist/lib/generated/Entities/MJDuplicateRunDetail/mjduplicaterundetail.form.component.js +19 -13
  167. package/dist/lib/generated/Entities/MJDuplicateRunDetail/mjduplicaterundetail.form.component.js.map +1 -1
  168. package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.d.ts.map +1 -1
  169. package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js +7 -9
  170. package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js.map +1 -1
  171. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
  172. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +78 -60
  173. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  174. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.d.ts.map +1 -1
  175. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js +24 -6
  176. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js.map +1 -1
  177. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.d.ts.map +1 -1
  178. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js +21 -9
  179. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js.map +1 -1
  180. package/dist/lib/generated/Entities/MJEntityRecordDocument/mjentityrecorddocument.form.component.d.ts.map +1 -1
  181. package/dist/lib/generated/Entities/MJEntityRecordDocument/mjentityrecorddocument.form.component.js +23 -5
  182. package/dist/lib/generated/Entities/MJEntityRecordDocument/mjentityrecorddocument.form.component.js.map +1 -1
  183. package/dist/lib/generated/Entities/MJKnowledgeHubSavedSearch/mjknowledgehubsavedsearch.form.component.d.ts +10 -0
  184. package/dist/lib/generated/Entities/MJKnowledgeHubSavedSearch/mjknowledgehubsavedsearch.form.component.d.ts.map +1 -0
  185. package/dist/lib/generated/Entities/MJKnowledgeHubSavedSearch/mjknowledgehubsavedsearch.form.component.js +77 -0
  186. package/dist/lib/generated/Entities/MJKnowledgeHubSavedSearch/mjknowledgehubsavedsearch.form.component.js.map +1 -0
  187. package/dist/lib/generated/Entities/MJScheduledAction/mjscheduledaction.form.component.d.ts.map +1 -1
  188. package/dist/lib/generated/Entities/MJScheduledAction/mjscheduledaction.form.component.js +22 -4
  189. package/dist/lib/generated/Entities/MJScheduledAction/mjscheduledaction.form.component.js.map +1 -1
  190. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.d.ts.map +1 -1
  191. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js +139 -19
  192. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js.map +1 -1
  193. package/dist/lib/generated/Entities/MJTagAuditLog/mjtagauditlog.form.component.d.ts +10 -0
  194. package/dist/lib/generated/Entities/MJTagAuditLog/mjtagauditlog.form.component.d.ts.map +1 -0
  195. package/dist/lib/generated/Entities/MJTagAuditLog/mjtagauditlog.form.component.js +67 -0
  196. package/dist/lib/generated/Entities/MJTagAuditLog/mjtagauditlog.form.component.js.map +1 -0
  197. package/dist/lib/generated/Entities/MJTagCoOccurrence/mjtagcooccurrence.form.component.d.ts +10 -0
  198. package/dist/lib/generated/Entities/MJTagCoOccurrence/mjtagcooccurrence.form.component.d.ts.map +1 -0
  199. package/dist/lib/generated/Entities/MJTagCoOccurrence/mjtagcooccurrence.form.component.js +65 -0
  200. package/dist/lib/generated/Entities/MJTagCoOccurrence/mjtagcooccurrence.form.component.js.map +1 -0
  201. package/dist/lib/generated/Entities/MJTaggedItem/mjtaggeditem.form.component.js +10 -8
  202. package/dist/lib/generated/Entities/MJTaggedItem/mjtaggeditem.form.component.js.map +1 -1
  203. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
  204. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +226 -154
  205. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  206. package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.d.ts.map +1 -1
  207. package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js +41 -5
  208. package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js.map +1 -1
  209. package/dist/lib/generated/generated-forms.module.d.ts +286 -279
  210. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  211. package/dist/lib/generated/generated-forms.module.js +192 -214
  212. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  213. package/dist/lib/shared/components/template-editor.component.js +14 -15
  214. package/dist/lib/shared/components/template-editor.component.js.map +1 -1
  215. package/package.json +34 -41
@@ -1 +1 @@
1
- {"version":3,"file":"query-run-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/Queries/query-run-dialog.component.ts","../../../../src/lib/custom/Queries/query-run-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, ChangeDetectorRef, inject } from '@angular/core';\nimport { MJQueryEntity, MJQueryParameterEntity } from '@memberjunction/core-entities';\nimport { GraphQLDataProvider } from '@memberjunction/graphql-dataprovider';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { Metadata } from '@memberjunction/core';\n\ninterface QueryRunResult {\n QueryID: string;\n QueryName: string;\n Success: boolean;\n Results: string; // This is a JSON string that needs to be parsed\n ErrorMessage: string;\n RowCount: number;\n TotalRowCount: number;\n ExecutionTime: number;\n AppliedParameters?: string; // JSON string of applied parameters\n}\n\ninterface ParameterPair {\n name: string;\n value: string;\n type: string;\n defaultValue: string;\n description: string;\n isRequired: boolean;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-query-run-dialog',\n templateUrl: './query-run-dialog.component.html',\n styleUrls: ['./query-run-dialog.component.css']\n})\nexport class QueryRunDialogComponent implements OnInit, OnChanges {\n private cdr = inject(ChangeDetectorRef);\n\n @Input() query: MJQueryEntity | null = null;\n @Input() parameters: MJQueryParameterEntity[] = [];\n @Input() isVisible = false;\n @Output() isVisibleChange = new EventEmitter<boolean>();\n @Output() onClose = new EventEmitter<void>();\n\n public isRunning = false;\n public isLoadingParams = false;\n public parameterPairs: ParameterPair[] = [];\n public parametersExpanded = true;\n public resultsExpanded = true;\n public paginationExpanded = false;\n public runResult: QueryRunResult | null = null;\n public resultColumns: any[] = [];\n public resultRows: any[] = [];\n public selectedRows: any[] = [];\n public maxRows: number | null = null;\n public startRow: number = 0;\n\n ngOnInit() {\n this.initializeParameters();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['isVisible'] && changes['isVisible'].currentValue) {\n this.initializeParameters();\n }\n if (changes['parameters']) {\n this.initializeParameters();\n }\n }\n\n private initializeParameters() {\n if (!this.query || !this.parameters) return;\n\n // Create parameter pairs from defined query parameters only\n this.parameterPairs = this.parameters.map(param => ({\n name: param.Name,\n value: param.DefaultValue || '',\n type: param.Type || 'string',\n defaultValue: param.DefaultValue || '',\n description: param.Description || '',\n isRequired: param.IsRequired || false\n }));\n }\n\n getValueListOptions(valueList: string): Array<{text: string, value: string}> {\n if (!valueList) return [];\n \n try {\n const options = valueList.split(',').map(v => v.trim());\n return options.map(opt => ({ text: opt, value: opt }));\n } catch {\n return [];\n }\n }\n\n isParameterValid(param: ParameterPair): boolean {\n if (param.isRequired && !param.value) {\n return false;\n }\n \n // Additional type-specific validation could go here\n if (param.type === 'number' && param.value) {\n return !isNaN(Number(param.value));\n }\n \n return true;\n }\n\n async runQuery(isPaginationRequest: boolean = false) {\n if (!this.query?.ID) return;\n\n // Validate required parameters\n const invalidParams = this.parameterPairs.filter(p => p.isRequired && !p.value);\n if (invalidParams.length > 0) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Required parameters missing: ${invalidParams.map(p => p.name).join(', ')}`,\n 'warning',\n 3000\n );\n return;\n }\n\n this.isRunning = true;\n this.runResult = null;\n\n try {\n // Build parameters object\n const queryParameters: Record<string, any> = {};\n this.parameterPairs.forEach(param => {\n if (param.value) {\n try {\n // Try to parse as JSON first, fallback to string\n queryParameters[param.name] = JSON.parse(param.value);\n } catch {\n // If JSON parsing fails, treat as string or number based on type\n if (param.type === 'number') {\n queryParameters[param.name] = Number(param.value);\n } else {\n queryParameters[param.name] = param.value;\n }\n }\n }\n });\n\n // Get GraphQL data provider\n const dataProvider = Metadata.Provider as GraphQLDataProvider;\n \n // Execute the GetQueryData GraphQL query\n const query = `\n query GetQueryData($QueryID: String!, $Parameters: JSONObject, $MaxRows: Int, $StartRow: Int) {\n GetQueryData(QueryID: $QueryID, Parameters: $Parameters, MaxRows: $MaxRows, StartRow: $StartRow) {\n QueryID\n QueryName\n Success\n Results\n ErrorMessage\n RowCount\n TotalRowCount\n ExecutionTime\n AppliedParameters\n }\n }\n `;\n\n const variables: any = {\n QueryID: this.query.ID,\n Parameters: queryParameters\n };\n \n // Only include MaxRows if it's set\n if (this.maxRows && this.maxRows > 0) {\n variables.MaxRows = this.maxRows;\n }\n \n // Only include StartRow if it's set and greater than 0\n if (this.startRow && this.startRow > 0) {\n variables.StartRow = this.startRow;\n }\n\n console.log('Executing query with variables:', variables);\n \n const response = await dataProvider.ExecuteGQL(\n query, \n variables\n ) as {GetQueryData: QueryRunResult};\n\n if (response?.GetQueryData) {\n this.runResult = response.GetQueryData;\n \n if (this.runResult.Success && this.runResult.Results) {\n // Parse the JSON string results\n try {\n const parsedResults = JSON.parse(this.runResult.Results);\n this.processResults(parsedResults);\n // Only show notification on first run (not pagination)\n if (!isPaginationRequest) {\n const rowCountMsg = this.runResult.TotalRowCount > this.runResult.RowCount\n ? `Query executed successfully. Showing ${this.runResult.RowCount} of ${this.runResult.TotalRowCount} total rows.`\n : `Query executed successfully. ${this.runResult.RowCount} rows returned.`;\n MJNotificationService.Instance.CreateSimpleNotification(\n rowCountMsg,\n 'success',\n 3000\n );\n }\n \n // Automatically expand results and collapse other sections\n this.parametersExpanded = false;\n this.paginationExpanded = false;\n this.resultsExpanded = true;\n } catch (error) {\n console.error('Error parsing results:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to parse query results',\n 'error',\n 3000\n );\n }\n } else {\n console.error('Query execution failed:', this.runResult);\n MJNotificationService.Instance.CreateSimpleNotification(\n this.runResult?.ErrorMessage || 'Query execution failed',\n 'error',\n 3000\n );\n \n // Expand results section to show error\n this.parametersExpanded = false;\n this.paginationExpanded = false;\n this.resultsExpanded = true;\n }\n } else {\n throw new Error('No response from server');\n }\n } catch (error) {\n console.error('Error running query:', error);\n this.runResult = {\n QueryID: this.query.ID,\n QueryName: this.query.Name,\n Success: false,\n Results: '[]',\n ErrorMessage: error instanceof Error ? error.message : 'Unknown error occurred',\n RowCount: 0,\n TotalRowCount: 0,\n ExecutionTime: 0\n };\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to execute query. Please check your parameters and try again.',\n 'error',\n 3000\n );\n } finally {\n this.isRunning = false;\n this.cdr.detectChanges();\n }\n }\n\n private processResults(results: any[]) {\n if (!results || results.length === 0) {\n this.resultColumns = [];\n this.resultRows = [];\n return;\n }\n\n // Extract columns from first row\n const firstRow = results[0];\n this.resultColumns = Object.keys(firstRow).map(key => ({\n field: key,\n title: this.formatColumnTitle(key),\n width: this.calculateColumnWidth(key, results)\n }));\n\n // Set rows\n this.resultRows = results;\n }\n\n private formatColumnTitle(field: string): string {\n // Convert camelCase or snake_case to Title Case\n return field\n .replace(/([A-Z])/g, ' $1')\n .replace(/_/g, ' ')\n .replace(/^\\s+/, '')\n .split(' ')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n }\n\n private calculateColumnWidth(field: string, data: any[]): number {\n // Calculate appropriate column width based on content\n const maxLength = Math.max(\n field.length,\n ...data.slice(0, 10).map(row => String(row[field] || '').length)\n );\n return Math.min(Math.max(maxLength * 10, 100), 300);\n }\n\n exportToCSV() {\n if (!this.resultRows || this.resultRows.length === 0) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'No data to export',\n 'warning',\n 3000\n );\n return;\n }\n\n // Create CSV content\n const headers = this.resultColumns.map(col => col.title).join(',');\n const rows = this.resultRows.map(row =>\n this.resultColumns.map(col => {\n const value = row[col.field];\n // Escape values containing commas or quotes\n if (typeof value === 'string' && (value.includes(',') || value.includes('\"'))) {\n return `\"${value.replace(/\"/g, '\"\"')}\"`;\n }\n return value;\n }).join(',')\n );\n\n const csv = [headers, ...rows].join('\\n');\n\n // Create and download file\n const blob = new Blob([csv], { type: 'text/csv' });\n const url = window.URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = `${this.query?.Name || 'query'}_results_${new Date().toISOString().slice(0, 10)}.csv`;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n window.URL.revokeObjectURL(url);\n\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Results exported to CSV',\n 'success',\n 3000\n );\n }\n\n async copyToClipboard() {\n if (!this.resultRows || this.resultRows.length === 0) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'No data to copy',\n 'warning',\n 3000\n );\n return;\n }\n\n try {\n // Create tab-delimited content for pasting into Excel\n const headers = this.resultColumns.map(col => col.title).join('\\t');\n const rows = this.resultRows.map(row =>\n this.resultColumns.map(col => row[col.field] || '').join('\\t')\n );\n\n const content = [headers, ...rows].join('\\n');\n await navigator.clipboard.writeText(content);\n\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Results copied to clipboard',\n 'success',\n 3000\n );\n } catch (error) {\n console.error('Failed to copy to clipboard:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to copy to clipboard',\n 'error',\n 3000\n );\n }\n }\n\n close() {\n this.isVisible = false;\n this.isVisibleChange.emit(false);\n this.onClose.emit();\n \n // Reset state\n this.runResult = null;\n this.resultColumns = [];\n this.resultRows = [];\n this.selectedRows = [];\n this.startRow = 0;\n }\n\n getAppliedParametersCount(): number {\n return this.parameterPairs.filter(p => p.value).length;\n }\n \n hasInvalidParameters(): boolean {\n return this.parameterPairs.some(p => !this.isParameterValid(p));\n }\n \n // Pagination methods\n goToFirstPage() {\n this.startRow = 0;\n this.runQuery(true);\n }\n \n goToPreviousPage() {\n if (this.startRow > 0 && this.maxRows) {\n this.startRow = Math.max(0, this.startRow - this.maxRows);\n this.runQuery(true);\n }\n }\n \n goToNextPage() {\n if (this.maxRows && this.runResult && this.startRow + this.runResult.RowCount < this.runResult.TotalRowCount) {\n this.startRow += this.maxRows;\n this.runQuery(true);\n }\n }\n \n goToLastPage() {\n if (this.maxRows && this.runResult) {\n const totalPages = Math.ceil(this.runResult.TotalRowCount / this.maxRows);\n this.startRow = (totalPages - 1) * this.maxRows;\n this.runQuery(true);\n }\n }\n}","@if (isVisible) {\n <kendo-dialog\n [width]=\"900\"\n [height]=\"800\"\n (close)=\"close()\">\n <kendo-dialog-titlebar>\n <div style=\"display: flex; align-items: center; gap: 8px;\">\n <i class=\"fa-solid fa-play-circle\" style=\"color: var(--mj-brand-primary);\"></i>\n Run Query: {{ query?.Name || 'Untitled' }}\n </div>\n </kendo-dialog-titlebar>\n <div style=\"display: flex; flex-direction: column; height: 100%; overflow-y: auto; overflow-x: hidden;\">\n @if (isLoadingParams) {\n <div style=\"display: flex; align-items: center; justify-content: center; padding: 40px;\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 24px; color: var(--mj-text-muted); margin-right: 12px;\"></i>\n <span style=\"color: var(--mj-text-muted);\">Loading query parameters...</span>\n </div>\n } @else {\n <!-- Query Parameters Section -->\n @if (parameterPairs.length > 0) {\n <kendo-expansionpanel\n [(expanded)]=\"parametersExpanded\"\n style=\"margin-bottom: 16px; flex-shrink: 0;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: var(--mj-text-muted);\"></i>\n Query Parameters\n <span class=\"badge\" style=\"background: #17a2b8; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ parameterPairs.length }}\n </span>\n </span>\n </ng-template>\n <div style=\"padding: 12px 0;\">\n <div style=\"margin-bottom: 12px; color: var(--mj-text-muted); font-size: 0.85em;\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Configure parameter values for query execution.\n </div>\n <!-- Parameters List -->\n <div style=\"display: flex; flex-direction: column; gap: 16px;\">\n @for (param of parameterPairs; track param.name) {\n <div style=\"background: var(--mj-bg-surface-sunken); border: 1px solid var(--mj-border-default); border-radius: 6px; padding: 16px;\">\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 8px;\">\n <div>\n <label style=\"font-weight: 600; color: var(--mj-text-secondary); display: flex; align-items: center; gap: 6px;\">\n <i class=\"fa-solid fa-at\" style=\"color: var(--mj-brand-primary);\"></i>\n {{ param.name }}\n @if (param.isRequired) {\n <span style=\"color: #dc3545;\">*</span>\n }\n </label>\n @if (param.description) {\n <div style=\"font-size: 0.85em; color: var(--mj-text-muted); margin-top: 4px;\">\n {{ param.description }}\n </div>\n }\n </div>\n <div style=\"display: flex; gap: 8px; align-items: center;\">\n <span class=\"badge\" style=\"background: var(--mj-text-muted); color: white; padding: 2px 6px; border-radius: 4px; font-size: 0.75em;\">\n {{ param.type }}\n </span>\n @if (!isParameterValid(param)) {\n <i class=\"fa-solid fa-exclamation-triangle\" style=\"color: #dc3545;\" title=\"Required parameter is empty\"></i>\n }\n </div>\n </div>\n <!-- Parameter Value Input -->\n @if (param.type === 'number') {\n <kendo-numerictextbox\n [(ngModel)]=\"param.value\"\n placeholder=\"Enter number value...\"\n style=\"width: 100%;\">\n </kendo-numerictextbox>\n } @else {\n <kendo-textarea\n [(ngModel)]=\"param.value\"\n [rows]=\"2\"\n placeholder=\"Enter value (JSON, string, or number)...\"\n style=\"width: 100%; font-family: 'Courier New', monospace;\">\n </kendo-textarea>\n }\n @if (param.defaultValue) {\n <div style=\"font-size: 0.8em; color: var(--mj-text-muted); margin-top: 4px;\">\n Default: <code style=\"background: var(--mj-bg-surface-sunken); padding: 2px 4px; border-radius: 3px;\">{{ param.defaultValue }}</code>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </kendo-expansionpanel>\n } @else {\n <div style=\"padding: 20px; background: var(--mj-bg-surface-sunken); border-radius: 6px; margin-bottom: 16px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-info-circle\"></i> This query has no parameters.\n </div>\n }\n <!-- Pagination Settings -->\n <kendo-expansionpanel\n [(expanded)]=\"paginationExpanded\"\n style=\"margin-bottom: 16px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-table-list\" style=\"color: var(--mj-text-muted);\"></i>\n Pagination Settings\n @if (maxRows && maxRows > 0) {\n <span class=\"badge\" style=\"background: var(--mj-text-muted); color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ maxRows }} rows/page\n </span>\n }\n </span>\n </ng-template>\n <div style=\"padding: 12px 0;\">\n <div style=\"display: flex; flex-direction: column; gap: 12px;\">\n <!-- Max Rows -->\n <div style=\"display: flex; align-items: center; gap: 12px;\">\n <label style=\"font-weight: 600; color: var(--mj-text-secondary); white-space: nowrap; min-width: 100px;\">\n <i class=\"fa-solid fa-list-ol\" style=\"color: var(--mj-text-muted); margin-right: 6px;\"></i>\n Max Rows:\n </label>\n <kendo-numerictextbox\n [(ngModel)]=\"maxRows\"\n [min]=\"1\"\n [step]=\"100\"\n placeholder=\"All rows\"\n style=\"width: 150px;\">\n </kendo-numerictextbox>\n <span style=\"font-size: 0.85em; color: var(--mj-text-muted);\">\n Leave empty to return all rows\n </span>\n </div>\n <!-- Start Row -->\n <div style=\"display: flex; align-items: center; gap: 12px;\">\n <label style=\"font-weight: 600; color: var(--mj-text-secondary); white-space: nowrap; min-width: 100px;\">\n <i class=\"fa-solid fa-forward\" style=\"color: var(--mj-text-muted); margin-right: 6px;\"></i>\n Start Row:\n </label>\n <kendo-numerictextbox\n [(ngModel)]=\"startRow\"\n [min]=\"0\"\n [step]=\"1\"\n placeholder=\"0\"\n style=\"width: 150px;\">\n </kendo-numerictextbox>\n <span style=\"font-size: 0.85em; color: var(--mj-text-muted);\">\n 0-based offset for pagination\n </span>\n </div>\n </div>\n </div>\n </kendo-expansionpanel>\n <!-- Results Section -->\n @if (runResult) {\n <kendo-expansionpanel\n [(expanded)]=\"resultsExpanded\"\n style=\"flex: 1; display: flex; flex-direction: column; overflow: hidden; min-height: 0;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-table\" style=\"color: #28a745;\"></i>\n Query Results\n @if (runResult.Success) {\n <span class=\"badge\" style=\"background: #28a745; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ runResult.RowCount }} rows\n </span>\n @if (runResult.TotalRowCount > runResult.RowCount) {\n <span class=\"badge\" style=\"background: #17a2b8; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n of {{ runResult.TotalRowCount }} total\n </span>\n }\n } @else {\n <span class=\"badge\" style=\"background: #dc3545; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n Error\n </span>\n }\n @if (runResult.ExecutionTime) {\n <span style=\"font-size: 0.8em; color: var(--mj-text-muted); font-weight: normal;\">\n ({{ runResult.ExecutionTime }}ms)\n </span>\n }\n </span>\n </ng-template>\n <div style=\"flex: 1; display: flex; flex-direction: column; overflow: hidden; min-height: 0;\">\n @if (runResult.Success) {\n @if (resultRows.length > 0) {\n <!-- Export and Pagination Controls -->\n <div style=\"display: flex; justify-content: space-between; align-items: center; padding: 12px; border-bottom: 1px solid var(--mj-border-default);\">\n <!-- Pagination Info and Controls -->\n <div style=\"display: flex; align-items: center; gap: 12px;\">\n @if (runResult.TotalRowCount > runResult.RowCount || startRow > 0) {\n <span style=\"font-size: 0.9em; color: var(--mj-text-muted);\">\n Showing rows {{ startRow + 1 }} - {{ startRow + runResult.RowCount }} of {{ runResult.TotalRowCount }}\n </span>\n <div style=\"display: flex; gap: 4px;\">\n <button kendoButton\n fillMode=\"flat\"\n size=\"small\"\n [disabled]=\"startRow === 0\"\n (click)=\"goToFirstPage()\"\n title=\"First page\">\n <i class=\"fa-solid fa-angles-left\"></i>\n </button>\n <button kendoButton\n fillMode=\"flat\"\n size=\"small\"\n [disabled]=\"startRow === 0\"\n (click)=\"goToPreviousPage()\"\n title=\"Previous page\">\n <i class=\"fa-solid fa-angle-left\"></i>\n </button>\n <button kendoButton\n fillMode=\"flat\"\n size=\"small\"\n [disabled]=\"startRow + runResult.RowCount >= runResult.TotalRowCount\"\n (click)=\"goToNextPage()\"\n title=\"Next page\">\n <i class=\"fa-solid fa-angle-right\"></i>\n </button>\n <button kendoButton\n fillMode=\"flat\"\n size=\"small\"\n [disabled]=\"startRow + runResult.RowCount >= runResult.TotalRowCount\"\n (click)=\"goToLastPage()\"\n title=\"Last page\">\n <i class=\"fa-solid fa-angles-right\"></i>\n </button>\n </div>\n }\n </div>\n <!-- Export Buttons -->\n <div style=\"display: flex; gap: 8px;\">\n <button kendoButton\n fillMode=\"flat\"\n (click)=\"copyToClipboard()\"\n title=\"Copy to clipboard\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button kendoButton\n fillMode=\"flat\"\n (click)=\"exportToCSV()\"\n title=\"Export to CSV\">\n <i class=\"fa-solid fa-download\"></i> Export CSV\n </button>\n </div>\n </div>\n <!-- Results Grid -->\n <div class=\"results-table-container\" style=\"flex: 1; overflow: auto; border: 1px solid var(--mj-border-default); border-radius: 4px; min-height: 0;\">\n <table class=\"results-table\" style=\"width: 100%; border-collapse: collapse; font-size: 14px;\">\n <thead style=\"position: sticky; top: 0; background: var(--mj-bg-surface-sunken); z-index: 10;\">\n <tr>\n @for (col of resultColumns; track col.field) {\n <th style=\"padding: 12px 16px; text-align: left; font-weight: 600; color: var(--mj-text-secondary); border-bottom: 2px solid var(--mj-border-default); background: var(--mj-bg-surface-sunken); white-space: nowrap;\">\n {{ col.title }}\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of resultRows; track $index) {\n <tr style=\"border-bottom: 1px solid var(--mj-border-default); transition: background-color 0.2s;\">\n @for (col of resultColumns; track col.field) {\n <td style=\"padding: 10px 16px; color: var(--mj-text-primary); max-width: 300px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\"\n [title]=\"row[col.field]\">\n {{ row[col.field] || '' }}\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n @if (resultRows.length === 0) {\n <div style=\"padding: 40px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-table\" style=\"font-size: 48px; margin-bottom: 12px; opacity: 0.3;\"></i>\n <p>No data in results</p>\n </div>\n }\n </div>\n } @else {\n <div style=\"display: flex; align-items: center; justify-content: center; height: 200px; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-inbox\" style=\"font-size: 48px; margin-bottom: 12px;\"></i>\n <p>No results returned</p>\n </div>\n }\n } @else {\n <div style=\"padding: 20px; background: #f8d7da; border: 1px solid #f5c6cb; border-radius: 6px; margin: 12px;\">\n <div style=\"color: #721c24;\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n <strong>Query execution failed</strong>\n </div>\n @if (runResult.ErrorMessage) {\n <div style=\"margin-top: 8px; font-family: 'Courier New', monospace; font-size: 0.9em;\">\n {{ runResult.ErrorMessage }}\n </div>\n }\n </div>\n }\n </div>\n </kendo-expansionpanel>\n }\n }\n </div>\n <kendo-dialog-actions>\n @if (!runResult) {\n <button kendoButton (click)=\"close()\">\n <i class=\"fa-solid fa-times\"></i> Cancel\n </button>\n <button kendoButton\n [themeColor]=\"'primary'\"\n [disabled]=\"isRunning || hasInvalidParameters()\"\n (click)=\"runQuery()\">\n @if (isRunning) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Running...\n } @else {\n <i class=\"fa-solid fa-play\"></i> Run Query\n }\n </button>\n } @else {\n <button kendoButton (click)=\"close()\">\n <i class=\"fa-solid fa-times\"></i> Close\n </button>\n <button kendoButton\n [themeColor]=\"'primary'\"\n [disabled]=\"isRunning\"\n (click)=\"runQuery()\">\n <i class=\"fa-solid fa-refresh\"></i> Run Again\n </button>\n }\n </kendo-dialog-actions>\n </kendo-dialog>\n}"]}
1
+ {"version":3,"file":"query-run-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/Queries/query-run-dialog.component.ts","../../../../src/lib/custom/Queries/query-run-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, ChangeDetectorRef, inject } from '@angular/core';\nimport { MJQueryEntity, MJQueryParameterEntity } from '@memberjunction/core-entities';\nimport { GraphQLDataProvider } from '@memberjunction/graphql-dataprovider';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { Metadata } from '@memberjunction/core';\n\ninterface QueryRunResult {\n QueryID: string;\n QueryName: string;\n Success: boolean;\n Results: string; // This is a JSON string that needs to be parsed\n ErrorMessage: string;\n RowCount: number;\n TotalRowCount: number;\n ExecutionTime: number;\n AppliedParameters?: string; // JSON string of applied parameters\n}\n\ninterface ParameterPair {\n name: string;\n value: string;\n type: string;\n defaultValue: string;\n description: string;\n isRequired: boolean;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-query-run-dialog',\n templateUrl: './query-run-dialog.component.html',\n styleUrls: ['./query-run-dialog.component.css']\n})\nexport class QueryRunDialogComponent implements OnInit, OnChanges {\n private cdr = inject(ChangeDetectorRef);\n\n @Input() query: MJQueryEntity | null = null;\n @Input() parameters: MJQueryParameterEntity[] = [];\n @Input() isVisible = false;\n @Output() isVisibleChange = new EventEmitter<boolean>();\n @Output() onClose = new EventEmitter<void>();\n\n public isRunning = false;\n public isLoadingParams = false;\n public parameterPairs: ParameterPair[] = [];\n public parametersExpanded = true;\n public resultsExpanded = true;\n public paginationExpanded = false;\n public runResult: QueryRunResult | null = null;\n public resultColumns: any[] = [];\n public resultRows: any[] = [];\n public selectedRows: any[] = [];\n public maxRows: number | null = null;\n public startRow: number = 0;\n\n ngOnInit() {\n this.initializeParameters();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['isVisible'] && changes['isVisible'].currentValue) {\n this.initializeParameters();\n }\n if (changes['parameters']) {\n this.initializeParameters();\n }\n }\n\n private initializeParameters() {\n if (!this.query || !this.parameters) return;\n\n // Create parameter pairs from defined query parameters only\n this.parameterPairs = this.parameters.map(param => ({\n name: param.Name,\n value: param.DefaultValue || '',\n type: param.Type || 'string',\n defaultValue: param.DefaultValue || '',\n description: param.Description || '',\n isRequired: param.IsRequired || false\n }));\n }\n\n getValueListOptions(valueList: string): Array<{text: string, value: string}> {\n if (!valueList) return [];\n \n try {\n const options = valueList.split(',').map(v => v.trim());\n return options.map(opt => ({ text: opt, value: opt }));\n } catch {\n return [];\n }\n }\n\n isParameterValid(param: ParameterPair): boolean {\n if (param.isRequired && !param.value) {\n return false;\n }\n \n // Additional type-specific validation could go here\n if (param.type === 'number' && param.value) {\n return !isNaN(Number(param.value));\n }\n \n return true;\n }\n\n async runQuery(isPaginationRequest: boolean = false) {\n if (!this.query?.ID) return;\n\n // Validate required parameters\n const invalidParams = this.parameterPairs.filter(p => p.isRequired && !p.value);\n if (invalidParams.length > 0) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Required parameters missing: ${invalidParams.map(p => p.name).join(', ')}`,\n 'warning',\n 3000\n );\n return;\n }\n\n this.isRunning = true;\n this.runResult = null;\n\n try {\n // Build parameters object\n const queryParameters: Record<string, any> = {};\n this.parameterPairs.forEach(param => {\n if (param.value) {\n try {\n // Try to parse as JSON first, fallback to string\n queryParameters[param.name] = JSON.parse(param.value);\n } catch {\n // If JSON parsing fails, treat as string or number based on type\n if (param.type === 'number') {\n queryParameters[param.name] = Number(param.value);\n } else {\n queryParameters[param.name] = param.value;\n }\n }\n }\n });\n\n // Get GraphQL data provider\n const dataProvider = Metadata.Provider as GraphQLDataProvider;\n \n // Execute the GetQueryData GraphQL query\n const query = `\n query GetQueryData($QueryID: String!, $Parameters: JSONObject, $MaxRows: Int, $StartRow: Int) {\n GetQueryData(QueryID: $QueryID, Parameters: $Parameters, MaxRows: $MaxRows, StartRow: $StartRow) {\n QueryID\n QueryName\n Success\n Results\n ErrorMessage\n RowCount\n TotalRowCount\n ExecutionTime\n AppliedParameters\n }\n }\n `;\n\n const variables: any = {\n QueryID: this.query.ID,\n Parameters: queryParameters\n };\n \n // Only include MaxRows if it's set\n if (this.maxRows && this.maxRows > 0) {\n variables.MaxRows = this.maxRows;\n }\n \n // Only include StartRow if it's set and greater than 0\n if (this.startRow && this.startRow > 0) {\n variables.StartRow = this.startRow;\n }\n\n console.log('Executing query with variables:', variables);\n \n const response = await dataProvider.ExecuteGQL(\n query, \n variables\n ) as {GetQueryData: QueryRunResult};\n\n if (response?.GetQueryData) {\n this.runResult = response.GetQueryData;\n \n if (this.runResult.Success && this.runResult.Results) {\n // Parse the JSON string results\n try {\n const parsedResults = JSON.parse(this.runResult.Results);\n this.processResults(parsedResults);\n // Only show notification on first run (not pagination)\n if (!isPaginationRequest) {\n const rowCountMsg = this.runResult.TotalRowCount > this.runResult.RowCount\n ? `Query executed successfully. Showing ${this.runResult.RowCount} of ${this.runResult.TotalRowCount} total rows.`\n : `Query executed successfully. ${this.runResult.RowCount} rows returned.`;\n MJNotificationService.Instance.CreateSimpleNotification(\n rowCountMsg,\n 'success',\n 3000\n );\n }\n \n // Automatically expand results and collapse other sections\n this.parametersExpanded = false;\n this.paginationExpanded = false;\n this.resultsExpanded = true;\n } catch (error) {\n console.error('Error parsing results:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to parse query results',\n 'error',\n 3000\n );\n }\n } else {\n console.error('Query execution failed:', this.runResult);\n MJNotificationService.Instance.CreateSimpleNotification(\n this.runResult?.ErrorMessage || 'Query execution failed',\n 'error',\n 3000\n );\n \n // Expand results section to show error\n this.parametersExpanded = false;\n this.paginationExpanded = false;\n this.resultsExpanded = true;\n }\n } else {\n throw new Error('No response from server');\n }\n } catch (error) {\n console.error('Error running query:', error);\n this.runResult = {\n QueryID: this.query.ID,\n QueryName: this.query.Name,\n Success: false,\n Results: '[]',\n ErrorMessage: error instanceof Error ? error.message : 'Unknown error occurred',\n RowCount: 0,\n TotalRowCount: 0,\n ExecutionTime: 0\n };\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to execute query. Please check your parameters and try again.',\n 'error',\n 3000\n );\n } finally {\n this.isRunning = false;\n this.cdr.detectChanges();\n }\n }\n\n private processResults(results: any[]) {\n if (!results || results.length === 0) {\n this.resultColumns = [];\n this.resultRows = [];\n return;\n }\n\n // Extract columns from first row\n const firstRow = results[0];\n this.resultColumns = Object.keys(firstRow).map(key => ({\n field: key,\n title: this.formatColumnTitle(key),\n width: this.calculateColumnWidth(key, results)\n }));\n\n // Set rows\n this.resultRows = results;\n }\n\n private formatColumnTitle(field: string): string {\n // Convert camelCase or snake_case to Title Case\n return field\n .replace(/([A-Z])/g, ' $1')\n .replace(/_/g, ' ')\n .replace(/^\\s+/, '')\n .split(' ')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n }\n\n private calculateColumnWidth(field: string, data: any[]): number {\n // Calculate appropriate column width based on content\n const maxLength = Math.max(\n field.length,\n ...data.slice(0, 10).map(row => String(row[field] || '').length)\n );\n return Math.min(Math.max(maxLength * 10, 100), 300);\n }\n\n exportToCSV() {\n if (!this.resultRows || this.resultRows.length === 0) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'No data to export',\n 'warning',\n 3000\n );\n return;\n }\n\n // Create CSV content\n const headers = this.resultColumns.map(col => col.title).join(',');\n const rows = this.resultRows.map(row =>\n this.resultColumns.map(col => {\n const value = row[col.field];\n // Escape values containing commas or quotes\n if (typeof value === 'string' && (value.includes(',') || value.includes('\"'))) {\n return `\"${value.replace(/\"/g, '\"\"')}\"`;\n }\n return value;\n }).join(',')\n );\n\n const csv = [headers, ...rows].join('\\n');\n\n // Create and download file\n const blob = new Blob([csv], { type: 'text/csv' });\n const url = window.URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = `${this.query?.Name || 'query'}_results_${new Date().toISOString().slice(0, 10)}.csv`;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n window.URL.revokeObjectURL(url);\n\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Results exported to CSV',\n 'success',\n 3000\n );\n }\n\n async copyToClipboard() {\n if (!this.resultRows || this.resultRows.length === 0) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'No data to copy',\n 'warning',\n 3000\n );\n return;\n }\n\n try {\n // Create tab-delimited content for pasting into Excel\n const headers = this.resultColumns.map(col => col.title).join('\\t');\n const rows = this.resultRows.map(row =>\n this.resultColumns.map(col => row[col.field] || '').join('\\t')\n );\n\n const content = [headers, ...rows].join('\\n');\n await navigator.clipboard.writeText(content);\n\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Results copied to clipboard',\n 'success',\n 3000\n );\n } catch (error) {\n console.error('Failed to copy to clipboard:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to copy to clipboard',\n 'error',\n 3000\n );\n }\n }\n\n close() {\n this.isVisible = false;\n this.isVisibleChange.emit(false);\n this.onClose.emit();\n \n // Reset state\n this.runResult = null;\n this.resultColumns = [];\n this.resultRows = [];\n this.selectedRows = [];\n this.startRow = 0;\n }\n\n getAppliedParametersCount(): number {\n return this.parameterPairs.filter(p => p.value).length;\n }\n \n hasInvalidParameters(): boolean {\n return this.parameterPairs.some(p => !this.isParameterValid(p));\n }\n \n // Pagination methods\n goToFirstPage() {\n this.startRow = 0;\n this.runQuery(true);\n }\n \n goToPreviousPage() {\n if (this.startRow > 0 && this.maxRows) {\n this.startRow = Math.max(0, this.startRow - this.maxRows);\n this.runQuery(true);\n }\n }\n \n goToNextPage() {\n if (this.maxRows && this.runResult && this.startRow + this.runResult.RowCount < this.runResult.TotalRowCount) {\n this.startRow += this.maxRows;\n this.runQuery(true);\n }\n }\n \n goToLastPage() {\n if (this.maxRows && this.runResult) {\n const totalPages = Math.ceil(this.runResult.TotalRowCount / this.maxRows);\n this.startRow = (totalPages - 1) * this.maxRows;\n this.runQuery(true);\n }\n }\n}","@if (isVisible) {\n <mj-dialog\n [Visible]=\"true\"\n [Width]=\"900\"\n (Close)=\"close()\">\n <mj-dialog-titlebar>\n <div style=\"display: flex; align-items: center; gap: 8px;\">\n <i class=\"fa-solid fa-play-circle\" style=\"color: var(--mj-brand-primary);\"></i>\n Run Query: {{ query?.Name || 'Untitled' }}\n </div>\n </mj-dialog-titlebar>\n <div style=\"display: flex; flex-direction: column; height: 100%; overflow-y: auto; overflow-x: hidden;\">\n @if (isLoadingParams) {\n <div style=\"display: flex; align-items: center; justify-content: center; padding: 40px;\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 24px; color: var(--mj-text-muted); margin-right: 12px;\"></i>\n <span style=\"color: var(--mj-text-muted);\">Loading query parameters...</span>\n </div>\n } @else {\n <!-- Query Parameters Section -->\n @if (parameterPairs.length > 0) {\n <mj-accordion-panel\n [(Expanded)]=\"parametersExpanded\"\n style=\"margin-bottom: 16px; flex-shrink: 0;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: var(--mj-text-muted);\"></i>\n Query Parameters\n <span style=\"background: var(--mj-status-info); color: var(--mj-text-inverse); padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ parameterPairs.length }}\n </span>\n </span>\n </ng-template>\n <div style=\"padding: 12px 0;\">\n <div style=\"margin-bottom: 12px; color: var(--mj-text-muted); font-size: 0.85em;\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Configure parameter values for query execution.\n </div>\n <!-- Parameters List -->\n <div style=\"display: flex; flex-direction: column; gap: 16px;\">\n @for (param of parameterPairs; track param.name) {\n <div style=\"background: var(--mj-bg-surface-sunken); border: 1px solid var(--mj-border-default); border-radius: 6px; padding: 16px;\">\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 8px;\">\n <div>\n <label style=\"font-weight: 600; color: var(--mj-text-secondary); display: flex; align-items: center; gap: 6px;\">\n <i class=\"fa-solid fa-at\" style=\"color: var(--mj-brand-primary);\"></i>\n {{ param.name }}\n @if (param.isRequired) {\n <span style=\"color: #dc3545;\">*</span>\n }\n </label>\n @if (param.description) {\n <div style=\"font-size: 0.85em; color: var(--mj-text-muted); margin-top: 4px;\">\n {{ param.description }}\n </div>\n }\n </div>\n <div style=\"display: flex; gap: 8px; align-items: center;\">\n <span class=\"badge\" style=\"background: var(--mj-text-muted); color: white; padding: 2px 6px; border-radius: 4px; font-size: 0.75em;\">\n {{ param.type }}\n </span>\n @if (!isParameterValid(param)) {\n <i class=\"fa-solid fa-exclamation-triangle\" style=\"color: #dc3545;\" title=\"Required parameter is empty\"></i>\n }\n </div>\n </div>\n <!-- Parameter Value Input -->\n @if (param.type === 'number') {\n <input type=\"number\" class=\"mj-input\"\n [(ngModel)]=\"param.value\"\n placeholder=\"Enter number value...\"\n style=\"width: 100%;\" />\n } @else {\n <textarea class=\"mj-input\"\n [(ngModel)]=\"param.value\"\n rows=\"2\"\n placeholder=\"Enter value (JSON, string, or number)...\"\n style=\"width: 100%; font-family: 'Courier New', monospace;\">\n </textarea>\n }\n @if (param.defaultValue) {\n <div style=\"font-size: 0.8em; color: var(--mj-text-muted); margin-top: 4px;\">\n Default: <code style=\"background: var(--mj-bg-surface-sunken); padding: 2px 4px; border-radius: 3px;\">{{ param.defaultValue }}</code>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n } @else {\n <div style=\"padding: 20px; background: var(--mj-bg-surface-sunken); border-radius: 6px; margin-bottom: 16px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-info-circle\"></i> This query has no parameters.\n </div>\n }\n <!-- Pagination Settings -->\n <mj-accordion-panel\n [(Expanded)]=\"paginationExpanded\"\n style=\"margin-bottom: 16px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-table-list\" style=\"color: var(--mj-text-muted);\"></i>\n Pagination Settings\n @if (maxRows && maxRows > 0) {\n <span style=\"background: var(--mj-text-muted); color: var(--mj-text-inverse); padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ maxRows }} rows/page\n </span>\n }\n </span>\n </ng-template>\n <div style=\"padding: 12px 0;\">\n <div style=\"display: flex; flex-direction: column; gap: 12px;\">\n <!-- Max Rows -->\n <div style=\"display: flex; align-items: center; gap: 12px;\">\n <label style=\"font-weight: 600; color: var(--mj-text-secondary); white-space: nowrap; min-width: 100px;\">\n <i class=\"fa-solid fa-list-ol\" style=\"color: var(--mj-text-muted); margin-right: 6px;\"></i>\n Max Rows:\n </label>\n <input type=\"number\" class=\"mj-input\"\n [(ngModel)]=\"maxRows\"\n min=\"1\"\n step=\"100\"\n placeholder=\"All rows\"\n style=\"width: 150px;\" />\n <span style=\"font-size: 0.85em; color: var(--mj-text-muted);\">\n Leave empty to return all rows\n </span>\n </div>\n <!-- Start Row -->\n <div style=\"display: flex; align-items: center; gap: 12px;\">\n <label style=\"font-weight: 600; color: var(--mj-text-secondary); white-space: nowrap; min-width: 100px;\">\n <i class=\"fa-solid fa-forward\" style=\"color: var(--mj-text-muted); margin-right: 6px;\"></i>\n Start Row:\n </label>\n <input type=\"number\" class=\"mj-input\"\n [(ngModel)]=\"startRow\"\n min=\"0\"\n step=\"1\"\n placeholder=\"0\"\n style=\"width: 150px;\" />\n <span style=\"font-size: 0.85em; color: var(--mj-text-muted);\">\n 0-based offset for pagination\n </span>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n <!-- Results Section -->\n @if (runResult) {\n <mj-accordion-panel\n [(Expanded)]=\"resultsExpanded\"\n style=\"flex: 1; display: flex; flex-direction: column; overflow: hidden; min-height: 0;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n @if (runResult.Success) {\n <i class=\"fa-solid fa-table\" style=\"color: var(--mj-status-success);\"></i>\n Query Results\n <span style=\"background: var(--mj-status-success); color: var(--mj-text-inverse); padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ runResult.RowCount }} rows@if (runResult.TotalRowCount > runResult.RowCount) { of {{ runResult.TotalRowCount }} total}\n </span>\n @if (runResult.ExecutionTime) {\n <span style=\"color: var(--mj-text-muted); font-size: 0.85em; font-weight: normal;\">&mdash; {{ runResult.ExecutionTime }}ms</span>\n }\n } @else {\n <i class=\"fa-solid fa-exclamation-circle\" style=\"color: var(--mj-status-error);\"></i>\n Query Results &mdash; Error\n }\n </span>\n </ng-template>\n <div style=\"flex: 1; display: flex; flex-direction: column; overflow: hidden; min-height: 0;\">\n @if (runResult.Success) {\n @if (resultRows.length > 0) {\n <!-- Export and Pagination Controls -->\n <div style=\"display: flex; justify-content: space-between; align-items: center; padding: 12px; border-bottom: 1px solid var(--mj-border-default);\">\n <!-- Pagination Info and Controls -->\n <div style=\"display: flex; align-items: center; gap: 12px;\">\n @if (runResult.TotalRowCount > runResult.RowCount || startRow > 0) {\n <span style=\"font-size: 0.9em; color: var(--mj-text-muted);\">\n Showing rows {{ startRow + 1 }} - {{ startRow + runResult.RowCount }} of {{ runResult.TotalRowCount }}\n </span>\n <div style=\"display: flex; gap: 4px;\">\n <button mjButton\n variant=\"flat\"\n [disabled]=\"startRow === 0\"\n (click)=\"goToFirstPage()\"\n title=\"First page\">\n <i class=\"fa-solid fa-angles-left\"></i>\n </button>\n <button mjButton\n variant=\"flat\"\n [disabled]=\"startRow === 0\"\n (click)=\"goToPreviousPage()\"\n title=\"Previous page\">\n <i class=\"fa-solid fa-angle-left\"></i>\n </button>\n <button mjButton\n variant=\"flat\"\n [disabled]=\"startRow + runResult.RowCount >= runResult.TotalRowCount\"\n (click)=\"goToNextPage()\"\n title=\"Next page\">\n <i class=\"fa-solid fa-angle-right\"></i>\n </button>\n <button mjButton\n variant=\"flat\"\n [disabled]=\"startRow + runResult.RowCount >= runResult.TotalRowCount\"\n (click)=\"goToLastPage()\"\n title=\"Last page\">\n <i class=\"fa-solid fa-angles-right\"></i>\n </button>\n </div>\n }\n </div>\n <!-- Export Buttons -->\n <div style=\"display: flex; gap: 8px;\">\n <button mjButton\n variant=\"flat\"\n (click)=\"copyToClipboard()\"\n title=\"Copy to clipboard\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n (click)=\"exportToCSV()\"\n title=\"Export to CSV\">\n <i class=\"fa-solid fa-download\"></i> Export CSV\n </button>\n </div>\n </div>\n <!-- Results Grid -->\n <div class=\"results-table-container\" style=\"flex: 1; overflow: auto; border: 1px solid var(--mj-border-default); border-radius: 4px; min-height: 0;\">\n <table class=\"results-table\" style=\"width: 100%; border-collapse: collapse; font-size: 14px;\">\n <thead style=\"position: sticky; top: 0; background: var(--mj-bg-surface-sunken); z-index: 10;\">\n <tr>\n @for (col of resultColumns; track col.field) {\n <th style=\"padding: 12px 16px; text-align: left; font-weight: 600; color: var(--mj-text-secondary); border-bottom: 2px solid var(--mj-border-default); background: var(--mj-bg-surface-sunken); white-space: nowrap;\">\n {{ col.title }}\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of resultRows; track $index) {\n <tr style=\"border-bottom: 1px solid var(--mj-border-default); transition: background-color 0.2s;\">\n @for (col of resultColumns; track col.field) {\n <td style=\"padding: 10px 16px; color: var(--mj-text-primary); max-width: 300px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\"\n [title]=\"row[col.field]\">\n {{ row[col.field] || '' }}\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n @if (resultRows.length === 0) {\n <div style=\"padding: 40px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-table\" style=\"font-size: 48px; margin-bottom: 12px; opacity: 0.3;\"></i>\n <p>No data in results</p>\n </div>\n }\n </div>\n } @else {\n <div style=\"display: flex; align-items: center; justify-content: center; height: 200px; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-inbox\" style=\"font-size: 48px; margin-bottom: 12px;\"></i>\n <p>No results returned</p>\n </div>\n }\n } @else {\n <div style=\"padding: 20px; background: #f8d7da; border: 1px solid #f5c6cb; border-radius: 6px; margin: 12px;\">\n <div style=\"color: #721c24;\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n <strong>Query execution failed</strong>\n </div>\n @if (runResult.ErrorMessage) {\n <div style=\"margin-top: 8px; font-family: 'Courier New', monospace; font-size: 0.9em;\">\n {{ runResult.ErrorMessage }}\n </div>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n }\n </div>\n <mj-dialog-actions>\n @if (!runResult) {\n <button mjButton (click)=\"close()\">\n <i class=\"fa-solid fa-times\"></i> Cancel\n </button>\n <button mjButton\n variant=\"primary\"\n [disabled]=\"isRunning || hasInvalidParameters()\"\n (click)=\"runQuery()\">\n @if (isRunning) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Running...\n } @else {\n <i class=\"fa-solid fa-play\"></i> Run Query\n }\n </button>\n } @else {\n <button mjButton (click)=\"close()\">\n <i class=\"fa-solid fa-times\"></i> Close\n </button>\n <button mjButton\n variant=\"primary\"\n [disabled]=\"isRunning\"\n (click)=\"runQuery()\">\n <i class=\"fa-solid fa-refresh\"></i> Run Again\n </button>\n }\n </mj-dialog-actions>\n </mj-dialog>\n}\n"]}