@memberjunction/ng-core-entity-forms 5.30.1 → 5.31.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 (163) hide show
  1. package/dist/lib/__tests__/content-source-form.test.d.ts +2 -0
  2. package/dist/lib/__tests__/content-source-form.test.d.ts.map +1 -0
  3. package/dist/lib/__tests__/content-source-form.test.js +183 -0
  4. package/dist/lib/__tests__/content-source-form.test.js.map +1 -0
  5. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts +2 -1
  6. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
  7. package/dist/lib/custom/AIAgents/add-action-dialog.component.js +6 -4
  8. package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
  9. package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js +2 -2
  10. package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js.map +1 -1
  11. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts +2 -1
  12. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -1
  13. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +6 -4
  14. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js.map +1 -1
  15. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +15 -15
  16. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  17. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +2 -1
  18. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
  19. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +9 -7
  20. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js.map +1 -1
  21. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts +2 -1
  22. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
  23. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +11 -9
  24. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
  25. package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts +2 -1
  26. package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -1
  27. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +6 -5
  28. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
  29. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts +2 -1
  30. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
  31. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +6 -4
  32. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
  33. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts +2 -1
  34. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
  35. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +6 -4
  36. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -1
  37. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +2 -1
  38. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
  39. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +6 -4
  40. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
  41. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +3 -3
  42. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  43. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +1 -1
  44. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
  45. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +6 -6
  46. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  47. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts +2 -1
  48. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -1
  49. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +7 -5
  50. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -1
  51. package/dist/lib/custom/Actions/action-execution-log-form.component.js +3 -3
  52. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  53. package/dist/lib/custom/Actions/action-form.component.js +12 -12
  54. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  55. package/dist/lib/custom/ContentSources/content-source-form.component.d.ts +59 -5
  56. package/dist/lib/custom/ContentSources/content-source-form.component.d.ts.map +1 -1
  57. package/dist/lib/custom/ContentSources/content-source-form.component.js +379 -34
  58. package/dist/lib/custom/ContentSources/content-source-form.component.js.map +1 -1
  59. package/dist/lib/custom/Entities/entity-form.component.d.ts +1 -1
  60. package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
  61. package/dist/lib/custom/Entities/entity-form.component.js +5 -5
  62. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  63. package/dist/lib/custom/Lists/list-form.component.d.ts +1 -1
  64. package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
  65. package/dist/lib/custom/Lists/list-form.component.js +10 -10
  66. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  67. package/dist/lib/custom/Queries/query-category-dialog.component.d.ts +2 -1
  68. package/dist/lib/custom/Queries/query-category-dialog.component.d.ts.map +1 -1
  69. package/dist/lib/custom/Queries/query-category-dialog.component.js +9 -7
  70. package/dist/lib/custom/Queries/query-category-dialog.component.js.map +1 -1
  71. package/dist/lib/custom/Queries/query-form.component.js +17 -17
  72. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  73. package/dist/lib/custom/Queries/query-run-dialog.component.d.ts +2 -1
  74. package/dist/lib/custom/Queries/query-run-dialog.component.d.ts.map +1 -1
  75. package/dist/lib/custom/Queries/query-run-dialog.component.js +7 -6
  76. package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
  77. package/dist/lib/custom/Templates/template-param-dialog.component.d.ts +2 -1
  78. package/dist/lib/custom/Templates/template-param-dialog.component.d.ts.map +1 -1
  79. package/dist/lib/custom/Templates/template-param-dialog.component.js +10 -8
  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 +2 -1
  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 +9 -7
  84. package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -1
  85. package/dist/lib/custom/Templates/templates-form.component.js +8 -8
  86. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  87. package/dist/lib/custom/Tests/entity-link-pill.component.d.ts +3 -2
  88. package/dist/lib/custom/Tests/entity-link-pill.component.d.ts.map +1 -1
  89. package/dist/lib/custom/Tests/entity-link-pill.component.js +8 -6
  90. package/dist/lib/custom/Tests/entity-link-pill.component.js.map +1 -1
  91. package/dist/lib/custom/Tests/test-form.component.d.ts +1 -1
  92. package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
  93. package/dist/lib/custom/Tests/test-form.component.js +7 -7
  94. package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
  95. package/dist/lib/custom/Tests/test-run-form.component.js +5 -5
  96. package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
  97. package/dist/lib/custom/Tests/test-suite-form.component.d.ts +1 -1
  98. package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
  99. package/dist/lib/custom/Tests/test-suite-form.component.js +8 -8
  100. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  101. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts +1 -1
  102. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -1
  103. package/dist/lib/custom/Tests/test-suite-run-form.component.js +6 -6
  104. package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
  105. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +2 -1
  106. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
  107. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +8 -6
  108. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  109. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts +9 -0
  110. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -1
  111. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +15 -3
  112. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
  113. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +3 -2
  114. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
  115. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +10 -5
  116. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
  117. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +2 -2
  118. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  119. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +2 -1
  120. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
  121. package/dist/lib/custom/shared/entity-selector-dialog.component.js +6 -4
  122. package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
  123. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.d.ts.map +1 -1
  124. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +46 -28
  125. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
  126. package/dist/lib/generated/Entities/MJCompanyIntegrationEntityMap/mjcompanyintegrationentitymap.form.component.js +10 -10
  127. package/dist/lib/generated/Entities/MJCompanyIntegrationEntityMap/mjcompanyintegrationentitymap.form.component.js.map +1 -1
  128. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.d.ts.map +1 -1
  129. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js +25 -7
  130. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js.map +1 -1
  131. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.d.ts.map +1 -1
  132. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js +25 -7
  133. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js.map +1 -1
  134. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
  135. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +106 -88
  136. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  137. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.d.ts.map +1 -1
  138. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js +181 -61
  139. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js.map +1 -1
  140. package/dist/lib/generated/Entities/MJTagScope/mjtagscope.form.component.d.ts +10 -0
  141. package/dist/lib/generated/Entities/MJTagScope/mjtagscope.form.component.d.ts.map +1 -0
  142. package/dist/lib/generated/Entities/MJTagScope/mjtagscope.form.component.js +63 -0
  143. package/dist/lib/generated/Entities/MJTagScope/mjtagscope.form.component.js.map +1 -0
  144. package/dist/lib/generated/Entities/MJTagSuggestion/mjtagsuggestion.form.component.d.ts +10 -0
  145. package/dist/lib/generated/Entities/MJTagSuggestion/mjtagsuggestion.form.component.d.ts.map +1 -0
  146. package/dist/lib/generated/Entities/MJTagSuggestion/mjtagsuggestion.form.component.js +95 -0
  147. package/dist/lib/generated/Entities/MJTagSuggestion/mjtagsuggestion.form.component.js.map +1 -0
  148. package/dist/lib/generated/Entities/MJTagSynonym/mjtagsynonym.form.component.d.ts +10 -0
  149. package/dist/lib/generated/Entities/MJTagSynonym/mjtagsynonym.form.component.d.ts.map +1 -0
  150. package/dist/lib/generated/Entities/MJTagSynonym/mjtagsynonym.form.component.js +63 -0
  151. package/dist/lib/generated/Entities/MJTagSynonym/mjtagsynonym.form.component.js.map +1 -0
  152. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
  153. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +199 -181
  154. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  155. package/dist/lib/generated/generated-forms.module.d.ts +51 -48
  156. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  157. package/dist/lib/generated/generated-forms.module.js +27 -18
  158. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  159. package/dist/lib/shared/components/template-editor.component.d.ts +3 -2
  160. package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
  161. package/dist/lib/shared/components/template-editor.component.js +8 -6
  162. package/dist/lib/shared/components/template-editor.component.js.map +1 -1
  163. package/package.json +37 -35
@@ -1 +1 @@
1
- {"version":3,"file":"query-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/Queries/query-form.component.ts","../../../../src/lib/custom/Queries/query-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ViewChild, ChangeDetectorRef, AfterViewInit, inject } from '@angular/core';\nimport { MJQueryEntity, MJQueryParameterEntity, MJQueryCategoryEntity, MJQueryFieldEntity, MJQueryEntityEntity, MJQueryPermissionEntity } from '@memberjunction/core-entities';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseFormComponent, FormToolbarConfig, CUSTOM_LAYOUT_TOOLBAR_CONFIG } from '@memberjunction/ng-base-forms';\nimport { MJQueryFormComponent } from '../../generated/Entities/MJQuery/mjquery.form.component';\nimport { Metadata, RunView, RUN_QUERY_SQL_FILTERS, CompositeKey, QueryInfo, QueryDependencyInfo } from '@memberjunction/core';\nimport { TreeBranchConfig } from '@memberjunction/ng-trees';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { CodeEditorComponent, CompositionTokenClickEvent } from '@memberjunction/ng-code-editor';\nimport { NavigationService } from '@memberjunction/ng-shared';\nimport { Subject } from 'rxjs';\n\ninterface CategoryTreeNode {\n id: string;\n name: string;\n items?: CategoryTreeNode[];\n}\n\n@RegisterClass(BaseFormComponent, 'MJ: Queries')\n@Component({\n standalone: false,\n selector: 'mj-query-form',\n templateUrl: './query-form.component.html',\n styleUrls: ['../../../shared/form-styles.css', './query-form.component.css']\n})\nexport class MJQueryFormComponentExtended extends MJQueryFormComponent implements OnInit, OnDestroy, AfterViewInit {\n public record!: MJQueryEntity;\n public queryParameters: MJQueryParameterEntity[] = [];\n public queryFields: MJQueryFieldEntity[] = [];\n public queryEntities: MJQueryEntityEntity[] = [];\n public queryPermissions: MJQueryPermissionEntity[] = [];\n public isLoadingParameters = false;\n public isLoadingFields = false;\n public isLoadingEntities = false;\n public isLoadingPermissions = false;\n public hasUnsavedChanges = false;\n public showFiltersHelp = false;\n public showRunDialog = false;\n public showCategoryDialog = false;\n public categoryPathDisplay = '';\n public IsSaving = false;\n\n // Expansion panel states\n public sqlPanelExpanded = true;\n public parametersPanelExpanded = false;\n public fieldsPanelExpanded = false;\n public entitiesPanelExpanded = false;\n public technicalDescriptionPanelExpanded = false;\n public detailsPanelExpanded = false;\n public permissionsPanelExpanded = false;\n public dependentsPanelExpanded = false;\n \n // Category data\n public categoryOptions: Array<{text: string, value: string}> = [\n { text: 'Select Category...', value: '' }\n ];\n public categories: MJQueryCategoryEntity[] = [];\n public categoryTreeData: CategoryTreeNode[] = [];\n\n /** Tree dropdown config for Query Categories */\n public CategoryBranchConfig: TreeBranchConfig = {\n EntityName: 'MJ: Query Categories',\n DisplayField: 'Name',\n IDField: 'ID',\n ParentIDField: 'ParentID',\n DefaultIcon: 'fa-solid fa-folder',\n DescriptionField: 'Description',\n OrderBy: 'Name ASC'\n };\n\n /** CategoryID as CompositeKey for tree dropdown binding */\n public get CategoryIDAsKey(): CompositeKey | null {\n return this.record?.CategoryID ? CompositeKey.FromID(this.record.CategoryID) : null;\n }\n\n /** Handle tree dropdown category selection */\n public OnCategoryTreeChange(value: CompositeKey | CompositeKey[] | null): void {\n if (!this.record) return;\n if (value instanceof CompositeKey && value.HasValue) {\n this.record.CategoryID = value.KeyValuePairs[0]?.Value ?? null;\n } else {\n this.record.CategoryID = null;\n }\n this.updateCategoryPathDisplay();\n }\n\n // Status options — matches MJQueryEntity.Status type from database CHECK constraint\n public statusOptions = [\n { text: 'Pending', value: 'Pending' },\n { text: 'Approved', value: 'Approved' },\n { text: 'Rejected', value: 'Rejected' },\n { text: 'Expired', value: 'Expired' }\n ];\n\n // Toolbar config: custom layout — hides the right-hand section-controls\n // group, keeps all left-side action buttons (delete/favorite/history/list)\n // since they're now wired through `<mj-record-form-container>`.\n public readonly ToolbarConfig: FormToolbarConfig = CUSTOM_LAYOUT_TOOLBAR_CONFIG;\n\n /** Custom-layout Query form looks best full-width on first open. */\n public override getDefaultFormWidthMode(): 'centered' | 'full-width' { return 'full-width'; }\n\n @ViewChild('sqlEditor') sqlEditor: CodeEditorComponent | null = null;\n \n // SQL Filters for help display\n public sqlFilters = RUN_QUERY_SQL_FILTERS;\n \n private navigationService = inject(NavigationService);\n private destroy$ = new Subject<void>();\n\n /**\n * Gets the QueryInfo metadata object for the current record, used to access Dependents.\n */\n public get CurrentQueryInfo(): QueryInfo | undefined {\n if (!this.record?.ID) return undefined;\n return Metadata.Provider.Queries.find(q => UUIDsEqual(q.ID, this.record.ID));\n }\n\n /**\n * Gets queries that depend on (reference) this query via composition.\n */\n public get DependentQueries(): QueryDependencyInfo[] {\n return this.CurrentQueryInfo?.Dependents ?? [];\n }\n private isUpdatingEditorValue = false;\n private isInitialLoad = true;\n\n async ngOnInit() {\n await super.ngOnInit();\n\n // During init, suppress per-method detectChanges to avoid NG0100.\n // We do one unified detectChanges after everything completes.\n this.isInitialLoad = true;\n\n // Load categories first to ensure they're available for the dropdown\n await this.loadCategories();\n\n // Then load other data in parallel\n await Promise.all([\n this.loadQueryParameters(),\n this.loadQueryFields(),\n this.loadQueryEntities(),\n this.loadQueryPermissions()\n ]);\n\n this.isInitialLoad = false;\n this.cdr.detectChanges();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n ngAfterViewInit() {\n super.ngAfterViewInit();\n\n this.sqlEditor?.setEditable(this.EditMode);\n\n // Set initial SQL value in the editor\n this.updateEditorValue();\n }\n \n override EndEditMode(): void {\n super.EndEditMode();\n this.sqlEditor?.setEditable(false);\n }\n\n override StartEditMode(): void {\n super.StartEditMode();\n this.sqlEditor?.setEditable(true);\n \n // Force change detection after a brief delay to ensure form controls are initialized\n setTimeout(() => {\n this.cdr.detectChanges();\n }, 50);\n }\n\n override CancelEdit(): void {\n super.CancelEdit();\n this.updateEditorValue(); // Reset editor value to record SQL\n this.sqlEditor?.setEditable(false);\n this.updateUnsavedChangesFlag(); // Reset unsaved changes flag\n }\n\n private updateEditorValue() {\n if (!this.sqlEditor || this.isUpdatingEditorValue) {\n return;\n }\n \n // Use setTimeout to avoid ExpressionChangedAfterItHasBeenCheckedError\n setTimeout(() => {\n if (!this.sqlEditor) {\n return;\n }\n \n this.isUpdatingEditorValue = true;\n const sqlValue = this.record?.SQL || '';\n \n // Use the setValue method from mj-code-editor component\n this.sqlEditor.setValue(sqlValue);\n this.isUpdatingEditorValue = false;\n }, 0);\n }\n\n public isFormReadOnly(): boolean {\n return !this.EditMode;\n }\n\n async loadQueryParameters() {\n if (this.record && this.record.ID) {\n this.isLoadingParameters = true;\n try {\n const rv = new RunView();\n const results = await rv.RunView<MJQueryParameterEntity>({\n EntityName: 'MJ: Query Parameters',\n ExtraFilter: `QueryID='${this.record.ID}'`,\n OrderBy: 'Name ASC',\n ResultType: 'entity_object'\n });\n \n if (results.Success) {\n this.queryParameters = results.Results || [];\n }\n } catch (error) {\n console.error('Error loading query parameters:', error);\n } finally {\n this.isLoadingParameters = false;\n if (!this.isInitialLoad) this.cdr.detectChanges();\n }\n }\n }\n\n async loadQueryFields() {\n if (this.record && this.record.ID) {\n this.isLoadingFields = true;\n try {\n const rv = new RunView();\n const results = await rv.RunView<MJQueryFieldEntity>({\n EntityName: 'MJ: Query Fields',\n ExtraFilter: `QueryID='${this.record.ID}'`,\n OrderBy: 'Sequence ASC, Name ASC',\n ResultType: 'entity_object'\n });\n \n if (results.Success) {\n this.queryFields = results.Results || [];\n }\n } catch (error) {\n console.error('Error loading query fields:', error);\n } finally {\n this.isLoadingFields = false;\n if (!this.isInitialLoad) this.cdr.detectChanges();\n }\n }\n }\n\n async loadQueryEntities() {\n if (this.record && this.record.ID) {\n this.isLoadingEntities = true;\n try {\n const rv = new RunView();\n const results = await rv.RunView<MJQueryEntityEntity>({\n EntityName: 'MJ: Query Entities',\n ExtraFilter: `QueryID='${this.record.ID}'`,\n OrderBy: 'Entity ASC',\n ResultType: 'entity_object'\n });\n \n if (results.Success) {\n this.queryEntities = results.Results || [];\n console.log('Loaded query entities:', this.queryEntities);\n }\n } catch (error) {\n console.error('Error loading query entities:', error);\n } finally {\n this.isLoadingEntities = false;\n if (!this.isInitialLoad) this.cdr.detectChanges();\n }\n }\n }\n\n async loadQueryPermissions() {\n if (this.record && this.record.ID) {\n this.isLoadingPermissions = true;\n try {\n const rv = new RunView();\n const results = await rv.RunView<MJQueryPermissionEntity>({\n EntityName: 'MJ: Query Permissions',\n ExtraFilter: `QueryID='${this.record.ID}'`,\n OrderBy: 'Role ASC',\n ResultType: 'entity_object'\n });\n \n if (results.Success) {\n this.queryPermissions = results.Results || [];\n }\n } catch (error) {\n console.error('Error loading query permissions:', error);\n } finally {\n this.isLoadingPermissions = false;\n if (!this.isInitialLoad) this.cdr.detectChanges();\n }\n }\n }\n\n async loadCategories() {\n try {\n const rv = new RunView();\n const results = await rv.RunView<MJQueryCategoryEntity>({\n EntityName: 'MJ: Query Categories',\n OrderBy: 'Name',\n ResultType: 'entity_object'\n });\n \n if (results.Success && results.Results) {\n this.categories = results.Results;\n \n // Build flat options for legacy compatibility\n this.categoryOptions = [\n { text: 'Select Category...', value: '' },\n ...this.categories.map(cat => ({\n text: cat.Name,\n value: cat.ID\n }))\n ];\n \n // Build tree data after options are set\n this.categoryTreeData = this.buildCategoryTree(this.categories);\n\n // Update cached category path display\n this.updateCategoryPathDisplay();\n\n // Trigger change detection to update the view (skip during init)\n if (!this.isInitialLoad) this.cdr.detectChanges();\n }\n } catch (error) {\n console.error('Error loading categories:', error);\n this.categoryOptions = [{ text: 'Select Category...', value: '' }];\n this.categoryTreeData = [];\n }\n }\n \n private buildCategoryTree(categories: MJQueryCategoryEntity[]): CategoryTreeNode[] {\n const categoryMap = new Map<string, CategoryTreeNode>();\n const rootCategories: CategoryTreeNode[] = [];\n \n // Create nodes for all categories\n categories.forEach(cat => {\n categoryMap.set(cat.ID, {\n id: cat.ID,\n name: cat.Name,\n items: []\n });\n });\n \n // Build the tree structure\n categories.forEach(cat => {\n const node = categoryMap.get(cat.ID)!;\n if (cat.ParentID && categoryMap.has(cat.ParentID)) {\n const parent = categoryMap.get(cat.ParentID)!;\n if (!parent.items) parent.items = [];\n parent.items.push(node);\n } else {\n rootCategories.push(node);\n }\n });\n \n // Sort children alphabetically\n const sortNodes = (nodes: CategoryTreeNode[]) => {\n nodes.sort((a, b) => a.name.localeCompare(b.name));\n nodes.forEach(node => {\n if (node.items && node.items.length > 0) {\n sortNodes(node.items);\n }\n });\n };\n sortNodes(rootCategories);\n \n return rootCategories;\n }\n \n getCategoryPath(): string {\n if (!this.record?.CategoryID) return '';\n\n const findPath = (categoryId: string): string[] => {\n const category = this.categories.find(c => UUIDsEqual(c.ID, categoryId));\n if (!category) return [];\n\n if (category.ParentID) {\n return [...findPath(category.ParentID), category.Name];\n }\n return [category.Name];\n };\n\n return findPath(this.record.CategoryID).join(' / ');\n }\n\n private updateCategoryPathDisplay(): void {\n this.categoryPathDisplay = this.getCategoryPath();\n }\n\n async onCategoryChange(value: string) {\n // If it's a new category (string but not in existing options)\n if (value && !this.categoryOptions.find(opt => opt.value === value)) {\n // Check for duplicate category names (case-insensitive, trimmed)\n if (this.isDuplicateCategory(value)) {\n const existingCategory = this.categoryOptions.find(option => \n option.text && option.text.trim().toLowerCase() === value.trim().toLowerCase()\n );\n if (existingCategory) {\n // Use the existing category instead\n this.record.CategoryID = existingCategory.value;\n MJNotificationService.Instance.CreateSimpleNotification(\n `Category \"${existingCategory.text}\" already exists. Using existing category.`, \n 'warning',\n 3000\n );\n }\n return;\n }\n\n try {\n // Create new category with trimmed name\n const md = new Metadata();\n const newCategory = await md.GetEntityObject<MJQueryCategoryEntity>('MJ: Query Categories');\n newCategory.Name = value.trim();\n const saved = await newCategory.Save();\n \n if (saved) {\n // Add to options and set the ID\n this.categoryOptions.push({\n text: newCategory.Name,\n value: newCategory.ID\n });\n this.record.CategoryID = newCategory.ID;\n MJNotificationService.Instance.CreateSimpleNotification(\n `New category \"${newCategory.Name}\" created successfully.`, \n 'success',\n 3000\n );\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to create new category. ${newCategory.LatestResult?.Message || ''}`, \n 'error',\n 3000\n );\n }\n } catch (error) {\n console.error('Error creating new category:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error creating new category. Please try again.', \n 'error',\n 3000\n );\n }\n }\n }\n\n private isDuplicateCategory(categoryName: string): boolean {\n const normalizedName = categoryName?.trim().toLowerCase();\n return this.categoryOptions.some(option => \n option.text && option.text.trim().toLowerCase() === normalizedName\n );\n }\n\n /**\n * Updates the hasUnsavedChanges flag based on entity dirty states\n */\n private updateUnsavedChangesFlag() {\n this.hasUnsavedChanges = this.queryParameters.some(param => param.Dirty) || \n this.record?.Dirty || false;\n }\n\n toggleFiltersHelp() {\n this.showFiltersHelp = !this.showFiltersHelp;\n }\n\n /**\n * Run the query with parameter dialog\n */\n async runQuery() {\n if (!this.record?.IsSaved) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Please save the query before running it.', \n 'warning',\n 3000\n );\n return;\n }\n\n // Save any unsaved changes first\n if (this.hasUnsavedChanges) {\n const saveResult = await this.SaveRecord(false); // Don't exit edit mode\n if (!saveResult) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to save query changes.', \n 'error',\n 3000\n );\n return;\n }\n }\n\n // Warn if query is not approved\n if (this.record.Status !== 'Approved') {\n console.warn(`Executing query '${this.record.Name}' with status '${this.record.Status}'. Query has not been approved.`);\n }\n\n // Reload parameters in case they were updated\n await this.loadQueryParameters();\n\n // Show the run dialog — set before detectChanges to avoid NG0100\n this.showRunDialog = true;\n this.cdr.detectChanges();\n }\n\n /**\n * Handle run dialog close\n */\n onRunDialogClose() {\n this.showRunDialog = false;\n }\n \n /**\n * Add a new parameter\n */\n async addParameter() {\n try {\n const md = new Metadata();\n const newParam = await md.GetEntityObject<MJQueryParameterEntity>('MJ: Query Parameters');\n newParam.QueryID = this.record.ID;\n newParam.Name = `param${this.queryParameters.length + 1}`;\n newParam.Type = 'string';\n newParam.IsRequired = false;\n \n const saved = await newParam.Save();\n if (saved) {\n this.queryParameters.push(newParam);\n this.updateUnsavedChangesFlag();\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Parameter added successfully',\n 'success',\n 3000\n );\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to add parameter',\n 'error',\n 3000\n );\n }\n } catch (error) {\n console.error('Error adding parameter:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error adding parameter',\n 'error',\n 3000\n );\n }\n }\n \n /**\n * Edit a parameter\n */\n async editParameter(param: MJQueryParameterEntity) {\n // TODO: Show parameter edit dialog\n console.log('Edit parameter:', param);\n }\n \n /**\n * Delete a parameter\n */\n async deleteParameter(param: MJQueryParameterEntity) {\n if (!confirm(`Are you sure you want to delete parameter \"${param.Name}\"?`)) {\n return;\n }\n\n try {\n // Reload the parameter entity fresh to ensure we have a clean copy\n // not tied to any form transaction state\n const md = new Metadata();\n const freshParam = await md.GetEntityObject<MJQueryParameterEntity>('MJ: Query Parameters');\n const loaded = await freshParam.Load(param.ID);\n if (!loaded) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Could not load parameter record. It may have already been deleted.',\n 'warning',\n 3000\n );\n // Remove from local list anyway since it doesn't exist\n this.removeParameterFromList(param);\n return;\n }\n\n const deleted = await freshParam.Delete();\n if (deleted) {\n this.removeParameterFromList(param);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Parameter deleted successfully',\n 'success',\n 3000\n );\n } else {\n const errorDetail = freshParam.LatestResult?.CompleteMessage ?? 'Unknown reason';\n console.error('Failed to delete parameter:', errorDetail);\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to delete parameter: ${errorDetail}`,\n 'error',\n 5000\n );\n }\n } catch (error) {\n console.error('Error deleting parameter:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error deleting parameter',\n 'error',\n 3000\n );\n }\n }\n\n private removeParameterFromList(param: MJQueryParameterEntity): void {\n const index = this.queryParameters.indexOf(param);\n if (index > -1) {\n this.queryParameters.splice(index, 1);\n }\n this.cdr.detectChanges();\n }\n \n /**\n * Handle category creation from dialog\n */\n async onCategoryCreated(newCategory: MJQueryCategoryEntity) {\n // Reload categories to include the new one\n await this.loadCategories();\n \n // Set the new category as selected\n this.record.CategoryID = newCategory.ID;\n \n // Trigger change detection\n this.cdr.detectChanges();\n }\n \n /**\n * Format date for display\n */\n formatDate(date: Date | string | null): string {\n if (!date) return '-';\n const d = typeof date === 'string' ? new Date(date) : date;\n return d.toLocaleDateString() + ' ' + d.toLocaleTimeString();\n }\n\n async SaveRecord(StopEditModeAfterSave: boolean = true): Promise<boolean> {\n this.IsSaving = true;\n this.cdr.markForCheck();\n try {\n return await this.internalSaveRecord(StopEditModeAfterSave);\n } finally {\n await Promise.resolve(); // microtask to avoid ExpressionChangedAfterItHasBeenCheckedError\n this.IsSaving = false;\n this.cdr.markForCheck();\n }\n }\n\n private async internalSaveRecord(StopEditModeAfterSave: boolean): Promise<boolean> {\n // Handle category creation before saving query\n if (this.record.CategoryID && !this.categoryOptions.find(opt => opt.value === this.record.CategoryID)) {\n if (this.isDuplicateCategory(this.record.CategoryID)) {\n const existingCategory = this.categoryOptions.find(option => \n option.text && option.text.trim().toLowerCase() === this.record.CategoryID?.trim().toLowerCase()\n );\n if (existingCategory) {\n this.record.CategoryID = existingCategory.value;\n MJNotificationService.Instance.CreateSimpleNotification(\n `Category \"${existingCategory.text}\" already exists. Using existing category.`, \n 'warning',\n 3000\n );\n }\n } else {\n try {\n const md = new Metadata();\n const newCategory = await md.GetEntityObject<MJQueryCategoryEntity>('MJ: Query Categories');\n newCategory.Name = this.record.CategoryID.trim();\n const saved = await newCategory.Save();\n \n if (saved) {\n this.categoryOptions.push({\n text: newCategory.Name,\n value: newCategory.ID\n });\n this.record.CategoryID = newCategory.ID;\n } else {\n console.error('Failed to create new category');\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to create new category. ${newCategory.LatestResult?.Message || ''}`, \n 'error'\n );\n return false;\n }\n } catch (error) {\n console.error('Error creating new category during save:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error creating new category during save. Please try again.', \n 'error'\n );\n return false;\n }\n }\n }\n\n // Save any unsaved query entities first\n if (this.EditMode) {\n for (const entity of this.queryEntities) {\n if (!entity.IsSaved && entity.EntityID) {\n try {\n await entity.Save();\n } catch (error) {\n console.error('Error saving query entity:', error);\n }\n }\n }\n }\n\n // Call the parent save method\n const result = await super.SaveRecord(StopEditModeAfterSave);\n \n if (result) {\n this.updateUnsavedChangesFlag();\n\n // Reload related data after successful save as server-side processes may have updated them\n if (this.record && this.record.ID) {\n await Promise.all([\n this.loadQueryParameters(),\n this.loadQueryFields(),\n this.loadQueryEntities()\n ]);\n this.updateCategoryPathDisplay();\n this.cdr.detectChanges();\n }\n }\n \n return result;\n }\n\n getStatusBadgeColor(): string {\n switch (this.record?.Status) {\n case 'Approved': return '#28a745';\n case 'Pending': return '#f59e0b';\n case 'Rejected': return '#dc3545';\n case 'Expired': return '#6c757d';\n default: return '#6c757d';\n }\n }\n\n getStatusBannerIcon(): string {\n switch (this.record?.Status) {\n case 'Pending': return 'fa-clock';\n case 'Rejected': return 'fa-times-circle';\n case 'Expired': return 'fa-archive';\n default: return 'fa-info-circle';\n }\n }\n\n getStatusBannerMessage(): string {\n switch (this.record?.Status) {\n case 'Pending': return 'It can be executed for testing but has not yet been approved.';\n case 'Rejected': return 'It was rejected and may need revision before approval.';\n case 'Expired': return 'It has expired and is no longer in active use.';\n default: return '';\n }\n }\n\n /**\n * Handle composition token click — navigate to the referenced query\n */\n onCompositionTokenClick(event: CompositionTokenClickEvent): void {\n const md = new Metadata();\n const segments = event.FullPath.split('/').map(s => s.trim()).filter(s => s.length > 0);\n if (segments.length === 0) return;\n\n const queryName = segments[segments.length - 1];\n const categorySegments = segments.slice(0, -1);\n\n // First try: exact match on Name + CategoryPath\n let targetQuery = md.Queries.find(q => {\n if (q.Name !== queryName) return false;\n if (categorySegments.length === 0) return true;\n const expectedPath = '/' + categorySegments.join('/') + '/';\n return q.CategoryPath === expectedPath;\n });\n\n // Fallback: match on Name alone\n if (!targetQuery) {\n targetQuery = md.Queries.find(q => q.Name === queryName);\n }\n\n if (targetQuery) {\n const compositeKey = CompositeKey.FromID(targetQuery.ID);\n this.navigationService.OpenEntityRecord('MJ: Queries', compositeKey);\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Referenced query \"${event.FullPath}\" not found.`,\n 'warning',\n 3000\n );\n }\n }\n\n /**\n * Navigate to a dependent query's record\n */\n onDependentQueryClick(dep: QueryDependencyInfo): void {\n const compositeKey = CompositeKey.FromID(dep.QueryID);\n this.navigationService.OpenEntityRecord('MJ: Queries', compositeKey);\n }\n\n /**\n * Handle SQL value changes from the code editor\n */\n onSQLChange(value: string) {\n if (this.isUpdatingEditorValue || !this.record) {\n return;\n }\n \n // Update the record SQL value\n this.record.SQL = value;\n this.updateUnsavedChangesFlag();\n }\n\n /**\n * Add a new field\n */\n async addField() {\n try {\n const md = new Metadata();\n const newField = await md.GetEntityObject<MJQueryFieldEntity>('MJ: Query Fields');\n newField.QueryID = this.record.ID;\n newField.Name = `field${this.queryFields.length + 1}`;\n newField.Description = '';\n newField.Sequence = (this.queryFields.length + 1) * 10;\n newField.SQLBaseType = 'nvarchar';\n newField.SQLFullType = 'nvarchar(255)';\n \n const saved = await newField.Save();\n if (saved) {\n this.queryFields.push(newField);\n this.queryFields.sort((a, b) => (a.Sequence || 0) - (b.Sequence || 0));\n this.updateUnsavedChangesFlag();\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Field added successfully',\n 'success',\n 3000\n );\n }\n } catch (error) {\n console.error('Error adding field:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to add field',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Delete a field\n */\n async deleteField(field: MJQueryFieldEntity) {\n if (!confirm(`Are you sure you want to delete field \"${field.Name}\"?`)) {\n return;\n }\n\n try {\n const md = new Metadata();\n const freshField = await md.GetEntityObject<MJQueryFieldEntity>('MJ: Query Fields');\n const loaded = await freshField.Load(field.ID);\n if (!loaded) {\n this.queryFields = this.queryFields.filter(f => !UUIDsEqual(f.ID, field.ID));\n this.cdr.detectChanges();\n return;\n }\n\n const deleted = await freshField.Delete();\n if (deleted) {\n this.queryFields = this.queryFields.filter(f => !UUIDsEqual(f.ID, field.ID));\n this.updateUnsavedChangesFlag();\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Field deleted successfully',\n 'success',\n 3000\n );\n } else {\n const errorDetail = freshField.LatestResult?.CompleteMessage ?? 'Unknown reason';\n console.error('Failed to delete field:', errorDetail);\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to delete field: ${errorDetail}`,\n 'error',\n 5000\n );\n }\n } catch (error) {\n console.error('Error deleting field:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to delete field',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Add a new entity\n */\n async addEntity() {\n try {\n const md = new Metadata();\n const newEntity = await md.GetEntityObject<MJQueryEntityEntity>('MJ: Query Entities');\n newEntity.QueryID = this.record.ID;\n \n // Add to the list immediately for UI responsiveness\n this.queryEntities.push(newEntity);\n this.updateUnsavedChangesFlag();\n } catch (error) {\n console.error('Error adding entity:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to add entity',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Delete an entity\n */\n async deleteEntity(entity: MJQueryEntityEntity) {\n if (!confirm(`Are you sure you want to delete entity \"${entity.Entity}\"?`)) {\n return;\n }\n\n try {\n const md = new Metadata();\n const freshEntity = await md.GetEntityObject<MJQueryEntityEntity>('MJ: Query Entities');\n const loaded = await freshEntity.Load(entity.ID);\n if (!loaded) {\n this.queryEntities = this.queryEntities.filter(e => !UUIDsEqual(e.ID, entity.ID));\n this.cdr.detectChanges();\n return;\n }\n\n const deleted = await freshEntity.Delete();\n if (deleted) {\n this.queryEntities = this.queryEntities.filter(e => !UUIDsEqual(e.ID, entity.ID));\n this.updateUnsavedChangesFlag();\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Entity deleted successfully',\n 'success',\n 3000\n );\n } else {\n const errorDetail = freshEntity.LatestResult?.CompleteMessage ?? 'Unknown reason';\n console.error('Failed to delete entity:', errorDetail);\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to delete entity: ${errorDetail}`,\n 'error',\n 5000\n );\n }\n } catch (error) {\n console.error('Error deleting entity:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to delete entity',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Get entity options for dropdown\n */\n getEntityOptions(): Array<{text: string, id: string}> {\n return Metadata.Provider.Entities.map(e => ({\n text: e.Name,\n id: e.ID\n })).sort((a, b) => a.text.localeCompare(b.text));\n }\n\n /**\n * Get the grid edit mode based on component edit mode\n */\n override GridEditMode(): \"None\" | \"Save\" | \"Queue\" {\n return this.EditMode ? \"Queue\" : \"None\";\n }\n\n}\n","@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"ToolbarConfig\"\n [IsSaving]=\"IsSaving\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n\n <!-- Saving Overlay -->\n @if (IsSaving) {\n <div class=\"saving-overlay\">\n <i class=\"fa-solid fa-spinner fa-spin saving-spinner\"></i>\n <span>Saving...</span>\n </div>\n }\n\n <!-- Header Section -->\n <div class=\"query-header\" [class.content-saving]=\"IsSaving\">\n <div class=\"query-header-content\">\n <!-- Top Row: Name and Run Button -->\n <div class=\"query-header-top\">\n <!-- Left: Query Name -->\n <div class=\"query-name-section\">\n <i class=\"fa-solid fa-database query-title-icon\"></i>\n @if (EditMode) {\n <input class=\"mj-input query-name-input\"\n [(ngModel)]=\"record.Name\"\n name=\"queryName\"\n placeholder=\"Enter query name...\" />\n } @else {\n <h4 class=\"query-name-display\">{{ record.Name || 'Untitled Query' }}</h4>\n }\n </div>\n\n <!-- Right: Action Buttons -->\n <div class=\"query-header-actions\">\n @if (record.ID) {\n <button mjButton\n variant=\"primary\"\n [disabled]=\"EditMode || !record.SQL || record.SQL.trim().length === 0\"\n (click)=\"runQuery()\"\n title=\"Run Query\"\n class=\"run-query-btn\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n }\n </div>\n </div>\n\n <!-- Second Row: Category and Status -->\n <div class=\"query-meta-row\">\n <!-- Category -->\n <div class=\"query-meta-item\">\n <label class=\"meta-label\">Category</label>\n @if (EditMode) {\n <mj-tree-dropdown\n [BranchConfig]=\"CategoryBranchConfig\"\n [Value]=\"CategoryIDAsKey\"\n [SelectableTypes]=\"'branch'\"\n [SelectionMode]=\"'single'\"\n [Placeholder]=\"'Select category...'\"\n [EnableSearch]=\"true\"\n [Clearable]=\"true\"\n (ValueChange)=\"OnCategoryTreeChange($event)\"\n class=\"meta-dropdown\">\n </mj-tree-dropdown>\n } @else {\n <span class=\"meta-value\">{{ categoryPathDisplay || 'Uncategorized' }}</span>\n }\n </div>\n\n <!-- Status -->\n <div class=\"query-meta-item\">\n <label class=\"meta-label\">Status</label>\n @if (EditMode) {\n <mj-dropdown\n [(ngModel)]=\"record.Status\"\n name=\"status\"\n [Data]=\"statusOptions\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n class=\"meta-dropdown status-dropdown\">\n </mj-dropdown>\n } @else {\n <span class=\"status-pill\"\n [style.background]=\"getStatusBadgeColor()\">\n <i class=\"fa-solid\" [class]=\"getStatusBannerIcon()\"></i>\n {{ record.Status || 'Unknown' }}\n </span>\n }\n </div>\n </div>\n\n <!-- Third Row: Description -->\n @if (EditMode || record.Description) {\n <div class=\"query-description-row\">\n @if (EditMode) {\n <textarea class=\"mj-input query-description-input\"\n [(ngModel)]=\"record.Description\"\n name=\"description\"\n rows=\"2\"\n placeholder=\"Enter query description...\">\n </textarea>\n } @else {\n <p class=\"query-description-text\">{{ record.Description }}</p>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Status Warning Banner for Non-Approved Queries -->\n @if (record.Status && record.Status !== 'Approved' && !EditMode) {\n <div class=\"status-warning-banner\" [style.border-left-color]=\"getStatusBadgeColor()\">\n <i class=\"fa-solid\" [class]=\"getStatusBannerIcon()\"\n [style.color]=\"getStatusBadgeColor()\"></i>\n <span>\n This query has status <strong>{{ record.Status }}</strong>. {{ getStatusBannerMessage() }}\n </span>\n </div>\n }\n\n <!-- Main Content Area with Expansion Panels -->\n <div class=\"query-content\" [class.content-saving]=\"IsSaving\">\n\n <!-- SQL Query Panel -->\n <mj-accordion-panel\n [(Expanded)]=\"sqlPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title-row\">\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-code panel-icon sql-icon\"></i>\n SQL\n @if (record.SQL) {\n <span class=\"panel-badge defined\">&mdash; Defined</span>\n }\n </span>\n </span>\n </ng-template>\n\n <div class=\"sql-panel-toolbar\" style=\"display: flex; justify-content: flex-end; padding: 4px 0 8px;\">\n <button type=\"button\"\n mjButton\n variant=\"flat\"\n (click)=\"toggleFiltersHelp()\"\n title=\"Show/hide SQL filters help\"\n class=\"filters-help-btn\">\n <i class=\"fa-solid fa-question-circle\"></i>\n <span>Filters Help</span>\n <i class=\"fa-solid\" [ngClass]=\"showFiltersHelp ? 'fa-chevron-up' : 'fa-chevron-down'\"></i>\n </button>\n </div>\n\n <div class=\"sql-panel-content\">\n <!-- Code Editor -->\n <mj-code-editor #sqlEditor\n (change)=\"onSQLChange($event)\"\n (CompositionTokenClick)=\"onCompositionTokenClick($event)\"\n [language]=\"'sql'\"\n class=\"sql-editor\">\n </mj-code-editor>\n\n <!-- SQL Filters Help (Below Editor) -->\n @if (showFiltersHelp) {\n <div class=\"filters-help\">\n <h6 class=\"filters-help-title\">\n <i class=\"fa-solid fa-filter\"></i> Available SQL Filters for Parameterized Queries\n </h6>\n <div class=\"filters-grid\">\n @for (filter of sqlFilters; track filter.name) {\n <div class=\"filter-card\">\n <div class=\"filter-name\">{{ filter.name }}</div>\n <div class=\"filter-description\">{{ filter.description }}</div>\n <div class=\"filter-syntax\">{{ filter.exampleSyntax }}</div>\n @if (filter.notes) {\n <div class=\"filter-notes\">{{ filter.notes }}</div>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Technical Description Panel -->\n @if (record.TechnicalDescription || EditMode) {\n <mj-accordion-panel\n [(Expanded)]=\"technicalDescriptionPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-book panel-icon\"></i>\n Technical Description\n @if (record.TechnicalDescription) {\n <span class=\"panel-badge defined\">&mdash; Documented</span>\n }\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (EditMode) {\n <textarea class=\"mj-input technical-description-textarea\"\n [(ngModel)]=\"record.TechnicalDescription\"\n name=\"technicalDescription\"\n rows=\"8\"\n placeholder=\"Technical documentation of the query logic, performance considerations, and parameter usage. Supports markdown and mermaid diagrams.\">\n </textarea>\n @if (record.TechnicalDescription) {\n <div class=\"technical-description-preview\">\n <div class=\"preview-label\">\n <i class=\"fa-solid fa-eye\"></i> Preview\n </div>\n <mj-markdown\n [data]=\"record.TechnicalDescription || ''\"\n [enableMermaid]=\"true\"\n [enableHighlight]=\"true\"\n [enableCollapsibleHeadings]=\"false\"\n [enableSmartypants]=\"true\">\n </mj-markdown>\n </div>\n }\n } @else {\n <div class=\"technical-description-view\">\n <mj-markdown\n [data]=\"record.TechnicalDescription || ''\"\n [enableMermaid]=\"true\"\n [enableHighlight]=\"true\"\n [enableCollapsibleHeadings]=\"false\"\n [enableSmartypants]=\"true\">\n </mj-markdown>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Parameters Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [(Expanded)]=\"parametersPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-sliders panel-icon\"></i>\n Parameters\n @if (queryParameters.length > 0) {\n <span class=\"panel-badge count\">{{ queryParameters.length }}</span>\n }\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (isLoadingParameters) {\n <div class=\"panel-loading\">\n <mj-loading text=\"Loading parameters...\"></mj-loading>\n </div>\n } @else {\n @if (queryParameters.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-sliders empty-state-icon\"></i>\n <div class=\"empty-state-title\">No Parameters Defined</div>\n <div class=\"empty-state-text\">\n Add parameters to make your query dynamic and reusable.\n </div>\n @if (EditMode) {\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addParameter()\">\n <i class=\"fa-solid fa-plus\"></i> Add First Parameter\n </button>\n }\n </div>\n } @else {\n @if (EditMode) {\n <div class=\"panel-toolbar\">\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addParameter()\">\n <i class=\"fa-solid fa-plus\"></i> Add Parameter\n </button>\n </div>\n }\n <div class=\"card-grid\">\n @for (param of queryParameters; track param.ID || $index) {\n <div class=\"item-card\" [class.required]=\"param.IsRequired\" (click)=\"editParameter(param)\">\n <div class=\"item-card-header\">\n <div class=\"item-name\">\n <i class=\"fa-solid fa-at item-name-icon param-icon\"></i>\n {{ param.Name }}\n </div>\n <div class=\"item-badges\">\n @if (param.IsRequired) {\n <span class=\"item-badge required\">Required</span>\n }\n </div>\n </div>\n <div class=\"item-card-body\">\n @if (param.Description) {\n <div class=\"item-description\">{{ param.Description }}</div>\n }\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <strong>Type:</strong> {{ param.Type || 'Text' }}\n </span>\n @if (param.DefaultValue) {\n <span class=\"meta-tag\">\n <strong>Default:</strong>\n <code class=\"meta-code\">{{ param.DefaultValue }}</code>\n </span>\n }\n </div>\n </div>\n @if (EditMode) {\n <div class=\"item-actions\" (click)=\"$event.stopPropagation()\">\n <button type=\"button\" class=\"item-action-btn\" (click)=\"editParameter(param)\" title=\"Edit parameter\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n <button type=\"button\" class=\"item-action-btn delete\" (click)=\"deleteParameter(param)\" title=\"Delete parameter\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Query Fields Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [(Expanded)]=\"fieldsPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-table panel-icon\"></i>\n Fields\n @if (queryFields.length > 0) {\n <span class=\"panel-badge count\">{{ queryFields.length }}</span>\n }\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (isLoadingFields) {\n <div class=\"panel-loading\">\n <mj-loading text=\"Loading fields...\"></mj-loading>\n </div>\n } @else {\n @if (queryFields.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-table empty-state-icon\"></i>\n <div class=\"empty-state-title\">No Fields Defined</div>\n <div class=\"empty-state-text\">\n Define output fields for your query results.\n </div>\n @if (EditMode) {\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addField()\">\n <i class=\"fa-solid fa-plus\"></i> Add First Field\n </button>\n }\n </div>\n } @else {\n @if (EditMode) {\n <div class=\"panel-toolbar\">\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addField()\">\n <i class=\"fa-solid fa-plus\"></i> Add Field\n </button>\n </div>\n }\n <div class=\"card-grid\">\n @for (field of queryFields; track field.ID) {\n <div class=\"item-card\">\n <div class=\"item-card-header\">\n <div class=\"item-name\">\n <i class=\"fa-solid fa-columns item-name-icon field-icon\"></i>\n {{ field.Name }}\n </div>\n <div class=\"item-badges\">\n <span class=\"item-badge type\">{{ field.SQLBaseType }}</span>\n @if (field.Sequence) {\n <span class=\"item-badge sequence\">#{{ field.Sequence }}</span>\n }\n </div>\n </div>\n <div class=\"item-card-body\">\n @if (field.Description) {\n <div class=\"item-description\">{{ field.Description }}</div>\n }\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <i class=\"fa-solid fa-code\"></i> {{ field.SQLFullType || field.SQLBaseType }}\n </span>\n </div>\n </div>\n @if (EditMode) {\n <div class=\"item-card-actions\">\n <button type=\"button\" class=\"item-action-btn delete\" (click)=\"deleteField(field)\" title=\"Delete field\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Dependent Queries Panel -->\n @if (record.IsSaved && DependentQueries.length > 0) {\n <mj-accordion-panel\n [(Expanded)]=\"dependentsPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-arrow-left panel-icon dependents-icon\"></i>\n Dependent Queries\n <span class=\"panel-badge count\">{{ DependentQueries.length }}</span>\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n <div class=\"dependents-description\">\n These queries reference this query via <code>{{\"{{query:\\\"...\\\"}}\"}} </code> composition syntax.\n </div>\n <div class=\"card-grid\">\n @for (dep of DependentQueries; track dep.ID) {\n <div class=\"item-card dependent-card\" (click)=\"onDependentQueryClick(dep)\">\n <div class=\"item-card-header\">\n <div class=\"item-name\">\n <i class=\"fa-solid fa-arrow-left item-name-icon dependent-query-icon\"></i>\n {{ dep.Query }}\n </div>\n </div>\n <div class=\"item-card-body\">\n @if (dep.ReferencePath) {\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <i class=\"fa-solid fa-link\"></i> {{ dep.ReferencePath }}\n </span>\n </div>\n }\n @if (dep.Alias) {\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <strong>Alias:</strong> <code class=\"meta-code\">{{ dep.Alias }}</code>\n </span>\n </div>\n }\n </div>\n <div class=\"item-card-footer\">\n <span class=\"open-link\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i> Open\n </span>\n </div>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Query Entities Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [(Expanded)]=\"entitiesPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-database panel-icon\"></i>\n Entities\n @if (queryEntities.length > 0) {\n <span class=\"panel-badge count\">{{ queryEntities.length }}</span>\n }\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (isLoadingEntities) {\n <div class=\"panel-loading\">\n <mj-loading text=\"Loading entities...\"></mj-loading>\n </div>\n } @else {\n @if (queryEntities.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-database empty-state-icon\"></i>\n <div class=\"empty-state-title\">No Entities Tracked</div>\n <div class=\"empty-state-text\">\n Track which entities this query uses for documentation.\n </div>\n @if (EditMode) {\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addEntity()\">\n <i class=\"fa-solid fa-plus\"></i> Add First Entity\n </button>\n }\n </div>\n } @else {\n @if (EditMode) {\n <div class=\"panel-toolbar\">\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addEntity()\">\n <i class=\"fa-solid fa-plus\"></i> Add Entity\n </button>\n </div>\n }\n <div class=\"card-grid\">\n @for (entity of queryEntities; track entity.ID) {\n <div class=\"item-card\">\n <div class=\"item-card-header\">\n <div class=\"item-name\">\n <i class=\"fa-solid fa-table item-name-icon entity-icon\"></i>\n {{ entity.Entity || 'Select Entity...' }}\n </div>\n @if (EditMode) {\n <div class=\"entity-dropdown-wrapper\">\n <mj-dropdown\n [(ngModel)]=\"entity.EntityID\"\n [name]=\"'entity_' + entity.ID\"\n [Data]=\"getEntityOptions()\"\n TextField=\"text\"\n ValueField=\"id\"\n [ValuePrimitive]=\"true\"\n Placeholder=\"Select entity...\"\n class=\"entity-dropdown\">\n </mj-dropdown>\n </div>\n }\n </div>\n @if (!EditMode && entity.Entity) {\n <div class=\"item-card-body\">\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <i class=\"fa-solid fa-database\"></i> Data Source\n </span>\n </div>\n </div>\n }\n @if (EditMode) {\n <div class=\"item-card-actions\">\n <button type=\"button\" class=\"item-action-btn delete\" (click)=\"deleteEntity(entity)\" title=\"Delete entity\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Details Panel -->\n <mj-accordion-panel\n [(Expanded)]=\"detailsPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-info-circle panel-icon\"></i>\n Details\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n <div class=\"details-grid\">\n <!-- Reusable -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-puzzle-piece\"></i> Reusable\n </label>\n @if (EditMode) {\n <mj-switch [(ngModel)]=\"record.Reusable\" name=\"reusable\"></mj-switch>\n <div class=\"detail-hint\">Allow other queries to reference this query using composition syntax</div>\n } @else {\n <div class=\"detail-value\">\n @if (record.Reusable) {\n <span class=\"detail-tag positive\"><i class=\"fa-solid fa-check\"></i> Reusable</span>\n } @else {\n <span class=\"detail-tag neutral\"><i class=\"fa-solid fa-times\"></i> Not Reusable</span>\n }\n </div>\n }\n </div>\n\n <!-- Cache Enabled -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-bolt\"></i> Cache Enabled\n </label>\n @if (EditMode) {\n <mj-switch [(ngModel)]=\"record.CacheEnabled\" name=\"cacheEnabled\"></mj-switch>\n <div class=\"detail-hint\">Cache query results in memory to reduce database load on repeated runs</div>\n } @else {\n <div class=\"detail-value\">\n @if (record.CacheEnabled) {\n <span class=\"detail-tag positive\"><i class=\"fa-solid fa-check\"></i> Caching On</span>\n } @else {\n <span class=\"detail-tag neutral\"><i class=\"fa-solid fa-times\"></i> Caching Off</span>\n }\n </div>\n }\n </div>\n\n <!-- Cache TTL -->\n @if (record.CacheEnabled) {\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-clock\"></i> Cache TTL (Minutes)\n </label>\n @if (EditMode) {\n <input class=\"mj-input detail-input-narrow\"\n type=\"number\"\n [(ngModel)]=\"record.CacheTTLMinutes\"\n name=\"cacheTTLMinutes\"\n min=\"1\"\n placeholder=\"Default\" />\n <div class=\"detail-hint\">How long cached results remain valid. Leave blank for default TTL.</div>\n } @else {\n <div class=\"detail-value\">{{ record.CacheTTLMinutes != null ? record.CacheTTLMinutes + ' min' : 'Default' }}</div>\n }\n </div>\n }\n\n <!-- Audit Query Runs -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-clipboard-list\"></i> Audit Runs\n </label>\n @if (EditMode) {\n <mj-switch [(ngModel)]=\"record.AuditQueryRuns\" name=\"auditQueryRuns\"></mj-switch>\n <div class=\"detail-hint\">Log all executions of this query to the Audit Log for tracking and compliance</div>\n } @else {\n <div class=\"detail-value\">\n @if (record.AuditQueryRuns) {\n <span class=\"detail-tag positive\"><i class=\"fa-solid fa-check\"></i> Auditing On</span>\n } @else {\n <span class=\"detail-tag neutral\"><i class=\"fa-solid fa-times\"></i> Auditing Off</span>\n }\n </div>\n }\n </div>\n\n <!-- Uses Template -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-file-code\"></i> Template Usage\n </label>\n @if (EditMode) {\n <mj-switch [(ngModel)]=\"record.UsesTemplate\" name=\"usesTemplate\"></mj-switch>\n } @else {\n <div class=\"detail-value\">\n @if (record.UsesTemplate) {\n <span class=\"detail-tag positive\"><i class=\"fa-solid fa-check\"></i> Uses Templates</span>\n } @else {\n <span class=\"detail-tag neutral\"><i class=\"fa-solid fa-times\"></i> No Templates</span>\n }\n </div>\n }\n </div>\n\n <!-- Created Date -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-calendar-plus\"></i> Created\n </label>\n <div class=\"detail-value\">{{ formatDate(record.__mj_CreatedAt) }}</div>\n </div>\n\n <!-- Updated Date -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-calendar-check\"></i> Last Updated\n </label>\n <div class=\"detail-value\">{{ formatDate(record.__mj_UpdatedAt) }}</div>\n </div>\n\n <!-- Quality Rank -->\n @if (record.QualityRank != null) {\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-star\"></i> Quality Rank\n </label>\n <div class=\"detail-value\">{{ record.QualityRank }}/10</div>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Permissions Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [(Expanded)]=\"permissionsPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-shield-alt panel-icon\"></i>\n Permissions\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (isLoadingPermissions) {\n <div class=\"panel-loading\">\n <mj-loading text=\"Loading permissions...\"></mj-loading>\n </div>\n } @else {\n @if (queryPermissions.length === 0 && !EditMode) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-shield-alt empty-state-icon\"></i>\n <div class=\"empty-state-title\">No Permissions Set</div>\n <div class=\"empty-state-text\">\n This query uses default permissions.\n </div>\n </div>\n } @else {\n @if (EditMode) {\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Query Permissions','QueryID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Query Permissions')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n } @else {\n <div class=\"permissions-list\">\n @for (permission of queryPermissions; track permission.ID) {\n <div class=\"permission-card\">\n <i class=\"fa-solid fa-users permission-icon\"></i>\n <div class=\"permission-info\">\n <div class=\"permission-role\">{{ permission.Role }}</div>\n <div class=\"permission-type\">Role Permission</div>\n </div>\n <span class=\"permission-badge\">\n <i class=\"fa-solid fa-play\"></i> Can Execute\n </span>\n </div>\n }\n </div>\n }\n }\n }\n </div>\n </mj-accordion-panel>\n }\n\n </div>\n </form>\n</mj-record-form-container>\n\n<!-- Query Run Dialog -->\n<mj-query-run-dialog\n [query]=\"record\"\n [parameters]=\"queryParameters\"\n [(isVisible)]=\"showRunDialog\"\n (onClose)=\"onRunDialogClose()\">\n</mj-query-run-dialog>\n\n<!-- Category Creation Dialog -->\n<mj-query-category-dialog\n [(isVisible)]=\"showCategoryDialog\"\n (onCategoryCreated)=\"onCategoryCreated($event)\">\n</mj-query-category-dialog>\n}\n"]}
1
+ {"version":3,"file":"query-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/Queries/query-form.component.ts","../../../../src/lib/custom/Queries/query-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ViewChild, ChangeDetectorRef, AfterViewInit, inject } from '@angular/core';\nimport { MJQueryEntity, MJQueryParameterEntity, MJQueryCategoryEntity, MJQueryFieldEntity, MJQueryEntityEntity, MJQueryPermissionEntity } from '@memberjunction/core-entities';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseFormComponent, FormToolbarConfig, CUSTOM_LAYOUT_TOOLBAR_CONFIG } from '@memberjunction/ng-base-forms';\nimport { MJQueryFormComponent } from '../../generated/Entities/MJQuery/mjquery.form.component';\nimport { Metadata, RunView, RUN_QUERY_SQL_FILTERS, CompositeKey, QueryInfo, QueryDependencyInfo } from '@memberjunction/core';\nimport { TreeBranchConfig } from '@memberjunction/ng-trees';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { CodeEditorComponent, CompositionTokenClickEvent } from '@memberjunction/ng-code-editor';\nimport { NavigationService } from '@memberjunction/ng-shared';\nimport { Subject } from 'rxjs';\n\ninterface CategoryTreeNode {\n id: string;\n name: string;\n items?: CategoryTreeNode[];\n}\n\n@RegisterClass(BaseFormComponent, 'MJ: Queries')\n@Component({\n standalone: false,\n selector: 'mj-query-form',\n templateUrl: './query-form.component.html',\n styleUrls: ['../../../shared/form-styles.css', './query-form.component.css']\n})\nexport class MJQueryFormComponentExtended extends MJQueryFormComponent implements OnInit, OnDestroy, AfterViewInit {\n public record!: MJQueryEntity;\n public queryParameters: MJQueryParameterEntity[] = [];\n public queryFields: MJQueryFieldEntity[] = [];\n public queryEntities: MJQueryEntityEntity[] = [];\n public queryPermissions: MJQueryPermissionEntity[] = [];\n public isLoadingParameters = false;\n public isLoadingFields = false;\n public isLoadingEntities = false;\n public isLoadingPermissions = false;\n public hasUnsavedChanges = false;\n public showFiltersHelp = false;\n public showRunDialog = false;\n public showCategoryDialog = false;\n public categoryPathDisplay = '';\n public IsSaving = false;\n\n // Expansion panel states\n public sqlPanelExpanded = true;\n public parametersPanelExpanded = false;\n public fieldsPanelExpanded = false;\n public entitiesPanelExpanded = false;\n public technicalDescriptionPanelExpanded = false;\n public detailsPanelExpanded = false;\n public permissionsPanelExpanded = false;\n public dependentsPanelExpanded = false;\n \n // Category data\n public categoryOptions: Array<{text: string, value: string}> = [\n { text: 'Select Category...', value: '' }\n ];\n public categories: MJQueryCategoryEntity[] = [];\n public categoryTreeData: CategoryTreeNode[] = [];\n\n /** Tree dropdown config for Query Categories */\n public CategoryBranchConfig: TreeBranchConfig = {\n EntityName: 'MJ: Query Categories',\n DisplayField: 'Name',\n IDField: 'ID',\n ParentIDField: 'ParentID',\n DefaultIcon: 'fa-solid fa-folder',\n DescriptionField: 'Description',\n OrderBy: 'Name ASC'\n };\n\n /** CategoryID as CompositeKey for tree dropdown binding */\n public get CategoryIDAsKey(): CompositeKey | null {\n return this.record?.CategoryID ? CompositeKey.FromID(this.record.CategoryID) : null;\n }\n\n /** Handle tree dropdown category selection */\n public OnCategoryTreeChange(value: CompositeKey | CompositeKey[] | null): void {\n if (!this.record) return;\n if (value instanceof CompositeKey && value.HasValue) {\n this.record.CategoryID = value.KeyValuePairs[0]?.Value ?? null;\n } else {\n this.record.CategoryID = null;\n }\n this.updateCategoryPathDisplay();\n }\n\n // Status options — matches MJQueryEntity.Status type from database CHECK constraint\n public statusOptions = [\n { text: 'Pending', value: 'Pending' },\n { text: 'Approved', value: 'Approved' },\n { text: 'Rejected', value: 'Rejected' },\n { text: 'Expired', value: 'Expired' }\n ];\n\n // Toolbar config: custom layout — hides the right-hand section-controls\n // group, keeps all left-side action buttons (delete/favorite/history/list)\n // since they're now wired through `<mj-record-form-container>`.\n public readonly ToolbarConfig: FormToolbarConfig = CUSTOM_LAYOUT_TOOLBAR_CONFIG;\n\n /** Custom-layout Query form looks best full-width on first open. */\n public override getDefaultFormWidthMode(): 'centered' | 'full-width' { return 'full-width'; }\n\n @ViewChild('sqlEditor') sqlEditor: CodeEditorComponent | null = null;\n \n // SQL Filters for help display\n public sqlFilters = RUN_QUERY_SQL_FILTERS;\n \n private navigationService = inject(NavigationService);\n private destroy$ = new Subject<void>();\n\n /**\n * Gets the QueryInfo metadata object for the current record, used to access Dependents.\n */\n public get CurrentQueryInfo(): QueryInfo | undefined {\n if (!this.record?.ID) return undefined;\n return this.ProviderToUse.Queries.find(q => UUIDsEqual(q.ID, this.record.ID));\n }\n\n /**\n * Gets queries that depend on (reference) this query via composition.\n */\n public get DependentQueries(): QueryDependencyInfo[] {\n return this.CurrentQueryInfo?.Dependents ?? [];\n }\n private isUpdatingEditorValue = false;\n private isInitialLoad = true;\n\n async ngOnInit() {\n await super.ngOnInit();\n\n // During init, suppress per-method detectChanges to avoid NG0100.\n // We do one unified detectChanges after everything completes.\n this.isInitialLoad = true;\n\n // Load categories first to ensure they're available for the dropdown\n await this.loadCategories();\n\n // Then load other data in parallel\n await Promise.all([\n this.loadQueryParameters(),\n this.loadQueryFields(),\n this.loadQueryEntities(),\n this.loadQueryPermissions()\n ]);\n\n this.isInitialLoad = false;\n this.cdr.detectChanges();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n ngAfterViewInit() {\n super.ngAfterViewInit();\n\n this.sqlEditor?.setEditable(this.EditMode);\n\n // Set initial SQL value in the editor\n this.updateEditorValue();\n }\n \n override EndEditMode(): void {\n super.EndEditMode();\n this.sqlEditor?.setEditable(false);\n }\n\n override StartEditMode(): void {\n super.StartEditMode();\n this.sqlEditor?.setEditable(true);\n \n // Force change detection after a brief delay to ensure form controls are initialized\n setTimeout(() => {\n this.cdr.detectChanges();\n }, 50);\n }\n\n override CancelEdit(): void {\n super.CancelEdit();\n this.updateEditorValue(); // Reset editor value to record SQL\n this.sqlEditor?.setEditable(false);\n this.updateUnsavedChangesFlag(); // Reset unsaved changes flag\n }\n\n private updateEditorValue() {\n if (!this.sqlEditor || this.isUpdatingEditorValue) {\n return;\n }\n \n // Use setTimeout to avoid ExpressionChangedAfterItHasBeenCheckedError\n setTimeout(() => {\n if (!this.sqlEditor) {\n return;\n }\n \n this.isUpdatingEditorValue = true;\n const sqlValue = this.record?.SQL || '';\n \n // Use the setValue method from mj-code-editor component\n this.sqlEditor.setValue(sqlValue);\n this.isUpdatingEditorValue = false;\n }, 0);\n }\n\n public isFormReadOnly(): boolean {\n return !this.EditMode;\n }\n\n async loadQueryParameters() {\n if (this.record && this.record.ID) {\n this.isLoadingParameters = true;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const results = await rv.RunView<MJQueryParameterEntity>({\n EntityName: 'MJ: Query Parameters',\n ExtraFilter: `QueryID='${this.record.ID}'`,\n OrderBy: 'Name ASC',\n ResultType: 'entity_object'\n });\n \n if (results.Success) {\n this.queryParameters = results.Results || [];\n }\n } catch (error) {\n console.error('Error loading query parameters:', error);\n } finally {\n this.isLoadingParameters = false;\n if (!this.isInitialLoad) this.cdr.detectChanges();\n }\n }\n }\n\n async loadQueryFields() {\n if (this.record && this.record.ID) {\n this.isLoadingFields = true;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const results = await rv.RunView<MJQueryFieldEntity>({\n EntityName: 'MJ: Query Fields',\n ExtraFilter: `QueryID='${this.record.ID}'`,\n OrderBy: 'Sequence ASC, Name ASC',\n ResultType: 'entity_object'\n });\n \n if (results.Success) {\n this.queryFields = results.Results || [];\n }\n } catch (error) {\n console.error('Error loading query fields:', error);\n } finally {\n this.isLoadingFields = false;\n if (!this.isInitialLoad) this.cdr.detectChanges();\n }\n }\n }\n\n async loadQueryEntities() {\n if (this.record && this.record.ID) {\n this.isLoadingEntities = true;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const results = await rv.RunView<MJQueryEntityEntity>({\n EntityName: 'MJ: Query Entities',\n ExtraFilter: `QueryID='${this.record.ID}'`,\n OrderBy: 'Entity ASC',\n ResultType: 'entity_object'\n });\n \n if (results.Success) {\n this.queryEntities = results.Results || [];\n console.log('Loaded query entities:', this.queryEntities);\n }\n } catch (error) {\n console.error('Error loading query entities:', error);\n } finally {\n this.isLoadingEntities = false;\n if (!this.isInitialLoad) this.cdr.detectChanges();\n }\n }\n }\n\n async loadQueryPermissions() {\n if (this.record && this.record.ID) {\n this.isLoadingPermissions = true;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const results = await rv.RunView<MJQueryPermissionEntity>({\n EntityName: 'MJ: Query Permissions',\n ExtraFilter: `QueryID='${this.record.ID}'`,\n OrderBy: 'Role ASC',\n ResultType: 'entity_object'\n });\n \n if (results.Success) {\n this.queryPermissions = results.Results || [];\n }\n } catch (error) {\n console.error('Error loading query permissions:', error);\n } finally {\n this.isLoadingPermissions = false;\n if (!this.isInitialLoad) this.cdr.detectChanges();\n }\n }\n }\n\n async loadCategories() {\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const results = await rv.RunView<MJQueryCategoryEntity>({\n EntityName: 'MJ: Query Categories',\n OrderBy: 'Name',\n ResultType: 'entity_object'\n });\n \n if (results.Success && results.Results) {\n this.categories = results.Results;\n \n // Build flat options for legacy compatibility\n this.categoryOptions = [\n { text: 'Select Category...', value: '' },\n ...this.categories.map(cat => ({\n text: cat.Name,\n value: cat.ID\n }))\n ];\n \n // Build tree data after options are set\n this.categoryTreeData = this.buildCategoryTree(this.categories);\n\n // Update cached category path display\n this.updateCategoryPathDisplay();\n\n // Trigger change detection to update the view (skip during init)\n if (!this.isInitialLoad) this.cdr.detectChanges();\n }\n } catch (error) {\n console.error('Error loading categories:', error);\n this.categoryOptions = [{ text: 'Select Category...', value: '' }];\n this.categoryTreeData = [];\n }\n }\n \n private buildCategoryTree(categories: MJQueryCategoryEntity[]): CategoryTreeNode[] {\n const categoryMap = new Map<string, CategoryTreeNode>();\n const rootCategories: CategoryTreeNode[] = [];\n \n // Create nodes for all categories\n categories.forEach(cat => {\n categoryMap.set(cat.ID, {\n id: cat.ID,\n name: cat.Name,\n items: []\n });\n });\n \n // Build the tree structure\n categories.forEach(cat => {\n const node = categoryMap.get(cat.ID)!;\n if (cat.ParentID && categoryMap.has(cat.ParentID)) {\n const parent = categoryMap.get(cat.ParentID)!;\n if (!parent.items) parent.items = [];\n parent.items.push(node);\n } else {\n rootCategories.push(node);\n }\n });\n \n // Sort children alphabetically\n const sortNodes = (nodes: CategoryTreeNode[]) => {\n nodes.sort((a, b) => a.name.localeCompare(b.name));\n nodes.forEach(node => {\n if (node.items && node.items.length > 0) {\n sortNodes(node.items);\n }\n });\n };\n sortNodes(rootCategories);\n \n return rootCategories;\n }\n \n getCategoryPath(): string {\n if (!this.record?.CategoryID) return '';\n\n const findPath = (categoryId: string): string[] => {\n const category = this.categories.find(c => UUIDsEqual(c.ID, categoryId));\n if (!category) return [];\n\n if (category.ParentID) {\n return [...findPath(category.ParentID), category.Name];\n }\n return [category.Name];\n };\n\n return findPath(this.record.CategoryID).join(' / ');\n }\n\n private updateCategoryPathDisplay(): void {\n this.categoryPathDisplay = this.getCategoryPath();\n }\n\n async onCategoryChange(value: string) {\n // If it's a new category (string but not in existing options)\n if (value && !this.categoryOptions.find(opt => opt.value === value)) {\n // Check for duplicate category names (case-insensitive, trimmed)\n if (this.isDuplicateCategory(value)) {\n const existingCategory = this.categoryOptions.find(option => \n option.text && option.text.trim().toLowerCase() === value.trim().toLowerCase()\n );\n if (existingCategory) {\n // Use the existing category instead\n this.record.CategoryID = existingCategory.value;\n MJNotificationService.Instance.CreateSimpleNotification(\n `Category \"${existingCategory.text}\" already exists. Using existing category.`, \n 'warning',\n 3000\n );\n }\n return;\n }\n\n try {\n // Create new category with trimmed name\n const md = this.ProviderToUse;\n const newCategory = await md.GetEntityObject<MJQueryCategoryEntity>('MJ: Query Categories');\n newCategory.Name = value.trim();\n const saved = await newCategory.Save();\n \n if (saved) {\n // Add to options and set the ID\n this.categoryOptions.push({\n text: newCategory.Name,\n value: newCategory.ID\n });\n this.record.CategoryID = newCategory.ID;\n MJNotificationService.Instance.CreateSimpleNotification(\n `New category \"${newCategory.Name}\" created successfully.`, \n 'success',\n 3000\n );\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to create new category. ${newCategory.LatestResult?.Message || ''}`, \n 'error',\n 3000\n );\n }\n } catch (error) {\n console.error('Error creating new category:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error creating new category. Please try again.', \n 'error',\n 3000\n );\n }\n }\n }\n\n private isDuplicateCategory(categoryName: string): boolean {\n const normalizedName = categoryName?.trim().toLowerCase();\n return this.categoryOptions.some(option => \n option.text && option.text.trim().toLowerCase() === normalizedName\n );\n }\n\n /**\n * Updates the hasUnsavedChanges flag based on entity dirty states\n */\n private updateUnsavedChangesFlag() {\n this.hasUnsavedChanges = this.queryParameters.some(param => param.Dirty) || \n this.record?.Dirty || false;\n }\n\n toggleFiltersHelp() {\n this.showFiltersHelp = !this.showFiltersHelp;\n }\n\n /**\n * Run the query with parameter dialog\n */\n async runQuery() {\n if (!this.record?.IsSaved) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Please save the query before running it.', \n 'warning',\n 3000\n );\n return;\n }\n\n // Save any unsaved changes first\n if (this.hasUnsavedChanges) {\n const saveResult = await this.SaveRecord(false); // Don't exit edit mode\n if (!saveResult) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to save query changes.', \n 'error',\n 3000\n );\n return;\n }\n }\n\n // Warn if query is not approved\n if (this.record.Status !== 'Approved') {\n console.warn(`Executing query '${this.record.Name}' with status '${this.record.Status}'. Query has not been approved.`);\n }\n\n // Reload parameters in case they were updated\n await this.loadQueryParameters();\n\n // Show the run dialog — set before detectChanges to avoid NG0100\n this.showRunDialog = true;\n this.cdr.detectChanges();\n }\n\n /**\n * Handle run dialog close\n */\n onRunDialogClose() {\n this.showRunDialog = false;\n }\n \n /**\n * Add a new parameter\n */\n async addParameter() {\n try {\n const md = this.ProviderToUse;\n const newParam = await md.GetEntityObject<MJQueryParameterEntity>('MJ: Query Parameters');\n newParam.QueryID = this.record.ID;\n newParam.Name = `param${this.queryParameters.length + 1}`;\n newParam.Type = 'string';\n newParam.IsRequired = false;\n \n const saved = await newParam.Save();\n if (saved) {\n this.queryParameters.push(newParam);\n this.updateUnsavedChangesFlag();\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Parameter added successfully',\n 'success',\n 3000\n );\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to add parameter',\n 'error',\n 3000\n );\n }\n } catch (error) {\n console.error('Error adding parameter:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error adding parameter',\n 'error',\n 3000\n );\n }\n }\n \n /**\n * Edit a parameter\n */\n async editParameter(param: MJQueryParameterEntity) {\n // TODO: Show parameter edit dialog\n console.log('Edit parameter:', param);\n }\n \n /**\n * Delete a parameter\n */\n async deleteParameter(param: MJQueryParameterEntity) {\n if (!confirm(`Are you sure you want to delete parameter \"${param.Name}\"?`)) {\n return;\n }\n\n try {\n // Reload the parameter entity fresh to ensure we have a clean copy\n // not tied to any form transaction state\n const md = this.ProviderToUse;\n const freshParam = await md.GetEntityObject<MJQueryParameterEntity>('MJ: Query Parameters');\n const loaded = await freshParam.Load(param.ID);\n if (!loaded) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Could not load parameter record. It may have already been deleted.',\n 'warning',\n 3000\n );\n // Remove from local list anyway since it doesn't exist\n this.removeParameterFromList(param);\n return;\n }\n\n const deleted = await freshParam.Delete();\n if (deleted) {\n this.removeParameterFromList(param);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Parameter deleted successfully',\n 'success',\n 3000\n );\n } else {\n const errorDetail = freshParam.LatestResult?.CompleteMessage ?? 'Unknown reason';\n console.error('Failed to delete parameter:', errorDetail);\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to delete parameter: ${errorDetail}`,\n 'error',\n 5000\n );\n }\n } catch (error) {\n console.error('Error deleting parameter:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error deleting parameter',\n 'error',\n 3000\n );\n }\n }\n\n private removeParameterFromList(param: MJQueryParameterEntity): void {\n const index = this.queryParameters.indexOf(param);\n if (index > -1) {\n this.queryParameters.splice(index, 1);\n }\n this.cdr.detectChanges();\n }\n \n /**\n * Handle category creation from dialog\n */\n async onCategoryCreated(newCategory: MJQueryCategoryEntity) {\n // Reload categories to include the new one\n await this.loadCategories();\n \n // Set the new category as selected\n this.record.CategoryID = newCategory.ID;\n \n // Trigger change detection\n this.cdr.detectChanges();\n }\n \n /**\n * Format date for display\n */\n formatDate(date: Date | string | null): string {\n if (!date) return '-';\n const d = typeof date === 'string' ? new Date(date) : date;\n return d.toLocaleDateString() + ' ' + d.toLocaleTimeString();\n }\n\n async SaveRecord(StopEditModeAfterSave: boolean = true): Promise<boolean> {\n this.IsSaving = true;\n this.cdr.markForCheck();\n try {\n return await this.internalSaveRecord(StopEditModeAfterSave);\n } finally {\n await Promise.resolve(); // microtask to avoid ExpressionChangedAfterItHasBeenCheckedError\n this.IsSaving = false;\n this.cdr.markForCheck();\n }\n }\n\n private async internalSaveRecord(StopEditModeAfterSave: boolean): Promise<boolean> {\n // Handle category creation before saving query\n if (this.record.CategoryID && !this.categoryOptions.find(opt => opt.value === this.record.CategoryID)) {\n if (this.isDuplicateCategory(this.record.CategoryID)) {\n const existingCategory = this.categoryOptions.find(option => \n option.text && option.text.trim().toLowerCase() === this.record.CategoryID?.trim().toLowerCase()\n );\n if (existingCategory) {\n this.record.CategoryID = existingCategory.value;\n MJNotificationService.Instance.CreateSimpleNotification(\n `Category \"${existingCategory.text}\" already exists. Using existing category.`, \n 'warning',\n 3000\n );\n }\n } else {\n try {\n const md = this.ProviderToUse;\n const newCategory = await md.GetEntityObject<MJQueryCategoryEntity>('MJ: Query Categories');\n newCategory.Name = this.record.CategoryID.trim();\n const saved = await newCategory.Save();\n \n if (saved) {\n this.categoryOptions.push({\n text: newCategory.Name,\n value: newCategory.ID\n });\n this.record.CategoryID = newCategory.ID;\n } else {\n console.error('Failed to create new category');\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to create new category. ${newCategory.LatestResult?.Message || ''}`, \n 'error'\n );\n return false;\n }\n } catch (error) {\n console.error('Error creating new category during save:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error creating new category during save. Please try again.', \n 'error'\n );\n return false;\n }\n }\n }\n\n // Save any unsaved query entities first\n if (this.EditMode) {\n for (const entity of this.queryEntities) {\n if (!entity.IsSaved && entity.EntityID) {\n try {\n await entity.Save();\n } catch (error) {\n console.error('Error saving query entity:', error);\n }\n }\n }\n }\n\n // Call the parent save method\n const result = await super.SaveRecord(StopEditModeAfterSave);\n \n if (result) {\n this.updateUnsavedChangesFlag();\n\n // Reload related data after successful save as server-side processes may have updated them\n if (this.record && this.record.ID) {\n await Promise.all([\n this.loadQueryParameters(),\n this.loadQueryFields(),\n this.loadQueryEntities()\n ]);\n this.updateCategoryPathDisplay();\n this.cdr.detectChanges();\n }\n }\n \n return result;\n }\n\n getStatusBadgeColor(): string {\n switch (this.record?.Status) {\n case 'Approved': return '#28a745';\n case 'Pending': return '#f59e0b';\n case 'Rejected': return '#dc3545';\n case 'Expired': return '#6c757d';\n default: return '#6c757d';\n }\n }\n\n getStatusBannerIcon(): string {\n switch (this.record?.Status) {\n case 'Pending': return 'fa-clock';\n case 'Rejected': return 'fa-times-circle';\n case 'Expired': return 'fa-archive';\n default: return 'fa-info-circle';\n }\n }\n\n getStatusBannerMessage(): string {\n switch (this.record?.Status) {\n case 'Pending': return 'It can be executed for testing but has not yet been approved.';\n case 'Rejected': return 'It was rejected and may need revision before approval.';\n case 'Expired': return 'It has expired and is no longer in active use.';\n default: return '';\n }\n }\n\n /**\n * Handle composition token click — navigate to the referenced query\n */\n onCompositionTokenClick(event: CompositionTokenClickEvent): void {\n const md = this.ProviderToUse;\n const segments = event.FullPath.split('/').map(s => s.trim()).filter(s => s.length > 0);\n if (segments.length === 0) return;\n\n const queryName = segments[segments.length - 1];\n const categorySegments = segments.slice(0, -1);\n\n // First try: exact match on Name + CategoryPath\n let targetQuery = md.Queries.find(q => {\n if (q.Name !== queryName) return false;\n if (categorySegments.length === 0) return true;\n const expectedPath = '/' + categorySegments.join('/') + '/';\n return q.CategoryPath === expectedPath;\n });\n\n // Fallback: match on Name alone\n if (!targetQuery) {\n targetQuery = md.Queries.find(q => q.Name === queryName);\n }\n\n if (targetQuery) {\n const compositeKey = CompositeKey.FromID(targetQuery.ID);\n this.navigationService.OpenEntityRecord('MJ: Queries', compositeKey);\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Referenced query \"${event.FullPath}\" not found.`,\n 'warning',\n 3000\n );\n }\n }\n\n /**\n * Navigate to a dependent query's record\n */\n onDependentQueryClick(dep: QueryDependencyInfo): void {\n const compositeKey = CompositeKey.FromID(dep.QueryID);\n this.navigationService.OpenEntityRecord('MJ: Queries', compositeKey);\n }\n\n /**\n * Handle SQL value changes from the code editor\n */\n onSQLChange(value: string) {\n if (this.isUpdatingEditorValue || !this.record) {\n return;\n }\n \n // Update the record SQL value\n this.record.SQL = value;\n this.updateUnsavedChangesFlag();\n }\n\n /**\n * Add a new field\n */\n async addField() {\n try {\n const md = this.ProviderToUse;\n const newField = await md.GetEntityObject<MJQueryFieldEntity>('MJ: Query Fields');\n newField.QueryID = this.record.ID;\n newField.Name = `field${this.queryFields.length + 1}`;\n newField.Description = '';\n newField.Sequence = (this.queryFields.length + 1) * 10;\n newField.SQLBaseType = 'nvarchar';\n newField.SQLFullType = 'nvarchar(255)';\n \n const saved = await newField.Save();\n if (saved) {\n this.queryFields.push(newField);\n this.queryFields.sort((a, b) => (a.Sequence || 0) - (b.Sequence || 0));\n this.updateUnsavedChangesFlag();\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Field added successfully',\n 'success',\n 3000\n );\n }\n } catch (error) {\n console.error('Error adding field:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to add field',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Delete a field\n */\n async deleteField(field: MJQueryFieldEntity) {\n if (!confirm(`Are you sure you want to delete field \"${field.Name}\"?`)) {\n return;\n }\n\n try {\n const md = this.ProviderToUse;\n const freshField = await md.GetEntityObject<MJQueryFieldEntity>('MJ: Query Fields');\n const loaded = await freshField.Load(field.ID);\n if (!loaded) {\n this.queryFields = this.queryFields.filter(f => !UUIDsEqual(f.ID, field.ID));\n this.cdr.detectChanges();\n return;\n }\n\n const deleted = await freshField.Delete();\n if (deleted) {\n this.queryFields = this.queryFields.filter(f => !UUIDsEqual(f.ID, field.ID));\n this.updateUnsavedChangesFlag();\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Field deleted successfully',\n 'success',\n 3000\n );\n } else {\n const errorDetail = freshField.LatestResult?.CompleteMessage ?? 'Unknown reason';\n console.error('Failed to delete field:', errorDetail);\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to delete field: ${errorDetail}`,\n 'error',\n 5000\n );\n }\n } catch (error) {\n console.error('Error deleting field:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to delete field',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Add a new entity\n */\n async addEntity() {\n try {\n const md = this.ProviderToUse;\n const newEntity = await md.GetEntityObject<MJQueryEntityEntity>('MJ: Query Entities');\n newEntity.QueryID = this.record.ID;\n \n // Add to the list immediately for UI responsiveness\n this.queryEntities.push(newEntity);\n this.updateUnsavedChangesFlag();\n } catch (error) {\n console.error('Error adding entity:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to add entity',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Delete an entity\n */\n async deleteEntity(entity: MJQueryEntityEntity) {\n if (!confirm(`Are you sure you want to delete entity \"${entity.Entity}\"?`)) {\n return;\n }\n\n try {\n const md = this.ProviderToUse;\n const freshEntity = await md.GetEntityObject<MJQueryEntityEntity>('MJ: Query Entities');\n const loaded = await freshEntity.Load(entity.ID);\n if (!loaded) {\n this.queryEntities = this.queryEntities.filter(e => !UUIDsEqual(e.ID, entity.ID));\n this.cdr.detectChanges();\n return;\n }\n\n const deleted = await freshEntity.Delete();\n if (deleted) {\n this.queryEntities = this.queryEntities.filter(e => !UUIDsEqual(e.ID, entity.ID));\n this.updateUnsavedChangesFlag();\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Entity deleted successfully',\n 'success',\n 3000\n );\n } else {\n const errorDetail = freshEntity.LatestResult?.CompleteMessage ?? 'Unknown reason';\n console.error('Failed to delete entity:', errorDetail);\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to delete entity: ${errorDetail}`,\n 'error',\n 5000\n );\n }\n } catch (error) {\n console.error('Error deleting entity:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to delete entity',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Get entity options for dropdown\n */\n getEntityOptions(): Array<{text: string, id: string}> {\n return this.ProviderToUse.Entities.map(e => ({\n text: e.Name,\n id: e.ID\n })).sort((a, b) => a.text.localeCompare(b.text));\n }\n\n /**\n * Get the grid edit mode based on component edit mode\n */\n override GridEditMode(): \"None\" | \"Save\" | \"Queue\" {\n return this.EditMode ? \"Queue\" : \"None\";\n }\n\n}\n","@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"ToolbarConfig\"\n [IsSaving]=\"IsSaving\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n\n <!-- Saving Overlay -->\n @if (IsSaving) {\n <div class=\"saving-overlay\">\n <i class=\"fa-solid fa-spinner fa-spin saving-spinner\"></i>\n <span>Saving...</span>\n </div>\n }\n\n <!-- Header Section -->\n <div class=\"query-header\" [class.content-saving]=\"IsSaving\">\n <div class=\"query-header-content\">\n <!-- Top Row: Name and Run Button -->\n <div class=\"query-header-top\">\n <!-- Left: Query Name -->\n <div class=\"query-name-section\">\n <i class=\"fa-solid fa-database query-title-icon\"></i>\n @if (EditMode) {\n <input class=\"mj-input query-name-input\"\n [(ngModel)]=\"record.Name\"\n name=\"queryName\"\n placeholder=\"Enter query name...\" />\n } @else {\n <h4 class=\"query-name-display\">{{ record.Name || 'Untitled Query' }}</h4>\n }\n </div>\n\n <!-- Right: Action Buttons -->\n <div class=\"query-header-actions\">\n @if (record.ID) {\n <button mjButton\n variant=\"primary\"\n [disabled]=\"EditMode || !record.SQL || record.SQL.trim().length === 0\"\n (click)=\"runQuery()\"\n title=\"Run Query\"\n class=\"run-query-btn\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n }\n </div>\n </div>\n\n <!-- Second Row: Category and Status -->\n <div class=\"query-meta-row\">\n <!-- Category -->\n <div class=\"query-meta-item\">\n <label class=\"meta-label\">Category</label>\n @if (EditMode) {\n <mj-tree-dropdown\n [BranchConfig]=\"CategoryBranchConfig\"\n [Value]=\"CategoryIDAsKey\"\n [SelectableTypes]=\"'branch'\"\n [SelectionMode]=\"'single'\"\n [Placeholder]=\"'Select category...'\"\n [EnableSearch]=\"true\"\n [Clearable]=\"true\"\n (ValueChange)=\"OnCategoryTreeChange($event)\"\n class=\"meta-dropdown\">\n </mj-tree-dropdown>\n } @else {\n <span class=\"meta-value\">{{ categoryPathDisplay || 'Uncategorized' }}</span>\n }\n </div>\n\n <!-- Status -->\n <div class=\"query-meta-item\">\n <label class=\"meta-label\">Status</label>\n @if (EditMode) {\n <mj-dropdown\n [(ngModel)]=\"record.Status\"\n name=\"status\"\n [Data]=\"statusOptions\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n class=\"meta-dropdown status-dropdown\">\n </mj-dropdown>\n } @else {\n <span class=\"status-pill\"\n [style.background]=\"getStatusBadgeColor()\">\n <i class=\"fa-solid\" [class]=\"getStatusBannerIcon()\"></i>\n {{ record.Status || 'Unknown' }}\n </span>\n }\n </div>\n </div>\n\n <!-- Third Row: Description -->\n @if (EditMode || record.Description) {\n <div class=\"query-description-row\">\n @if (EditMode) {\n <textarea class=\"mj-input query-description-input\"\n [(ngModel)]=\"record.Description\"\n name=\"description\"\n rows=\"2\"\n placeholder=\"Enter query description...\">\n </textarea>\n } @else {\n <p class=\"query-description-text\">{{ record.Description }}</p>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Status Warning Banner for Non-Approved Queries -->\n @if (record.Status && record.Status !== 'Approved' && !EditMode) {\n <div class=\"status-warning-banner\" [style.border-left-color]=\"getStatusBadgeColor()\">\n <i class=\"fa-solid\" [class]=\"getStatusBannerIcon()\"\n [style.color]=\"getStatusBadgeColor()\"></i>\n <span>\n This query has status <strong>{{ record.Status }}</strong>. {{ getStatusBannerMessage() }}\n </span>\n </div>\n }\n\n <!-- Main Content Area with Expansion Panels -->\n <div class=\"query-content\" [class.content-saving]=\"IsSaving\">\n\n <!-- SQL Query Panel -->\n <mj-accordion-panel\n [(Expanded)]=\"sqlPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title-row\">\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-code panel-icon sql-icon\"></i>\n SQL\n @if (record.SQL) {\n <span class=\"panel-badge defined\">&mdash; Defined</span>\n }\n </span>\n </span>\n </ng-template>\n\n <div class=\"sql-panel-toolbar\" style=\"display: flex; justify-content: flex-end; padding: 4px 0 8px;\">\n <button type=\"button\"\n mjButton\n variant=\"flat\"\n (click)=\"toggleFiltersHelp()\"\n title=\"Show/hide SQL filters help\"\n class=\"filters-help-btn\">\n <i class=\"fa-solid fa-question-circle\"></i>\n <span>Filters Help</span>\n <i class=\"fa-solid\" [ngClass]=\"showFiltersHelp ? 'fa-chevron-up' : 'fa-chevron-down'\"></i>\n </button>\n </div>\n\n <div class=\"sql-panel-content\">\n <!-- Code Editor -->\n <mj-code-editor #sqlEditor\n (change)=\"onSQLChange($event)\"\n (CompositionTokenClick)=\"onCompositionTokenClick($event)\"\n [language]=\"'sql'\"\n class=\"sql-editor\">\n </mj-code-editor>\n\n <!-- SQL Filters Help (Below Editor) -->\n @if (showFiltersHelp) {\n <div class=\"filters-help\">\n <h6 class=\"filters-help-title\">\n <i class=\"fa-solid fa-filter\"></i> Available SQL Filters for Parameterized Queries\n </h6>\n <div class=\"filters-grid\">\n @for (filter of sqlFilters; track filter.name) {\n <div class=\"filter-card\">\n <div class=\"filter-name\">{{ filter.name }}</div>\n <div class=\"filter-description\">{{ filter.description }}</div>\n <div class=\"filter-syntax\">{{ filter.exampleSyntax }}</div>\n @if (filter.notes) {\n <div class=\"filter-notes\">{{ filter.notes }}</div>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Technical Description Panel -->\n @if (record.TechnicalDescription || EditMode) {\n <mj-accordion-panel\n [(Expanded)]=\"technicalDescriptionPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-book panel-icon\"></i>\n Technical Description\n @if (record.TechnicalDescription) {\n <span class=\"panel-badge defined\">&mdash; Documented</span>\n }\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (EditMode) {\n <textarea class=\"mj-input technical-description-textarea\"\n [(ngModel)]=\"record.TechnicalDescription\"\n name=\"technicalDescription\"\n rows=\"8\"\n placeholder=\"Technical documentation of the query logic, performance considerations, and parameter usage. Supports markdown and mermaid diagrams.\">\n </textarea>\n @if (record.TechnicalDescription) {\n <div class=\"technical-description-preview\">\n <div class=\"preview-label\">\n <i class=\"fa-solid fa-eye\"></i> Preview\n </div>\n <mj-markdown\n [data]=\"record.TechnicalDescription || ''\"\n [enableMermaid]=\"true\"\n [enableHighlight]=\"true\"\n [enableCollapsibleHeadings]=\"false\"\n [enableSmartypants]=\"true\">\n </mj-markdown>\n </div>\n }\n } @else {\n <div class=\"technical-description-view\">\n <mj-markdown\n [data]=\"record.TechnicalDescription || ''\"\n [enableMermaid]=\"true\"\n [enableHighlight]=\"true\"\n [enableCollapsibleHeadings]=\"false\"\n [enableSmartypants]=\"true\">\n </mj-markdown>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Parameters Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [(Expanded)]=\"parametersPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-sliders panel-icon\"></i>\n Parameters\n @if (queryParameters.length > 0) {\n <span class=\"panel-badge count\">{{ queryParameters.length }}</span>\n }\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (isLoadingParameters) {\n <div class=\"panel-loading\">\n <mj-loading text=\"Loading parameters...\"></mj-loading>\n </div>\n } @else {\n @if (queryParameters.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-sliders empty-state-icon\"></i>\n <div class=\"empty-state-title\">No Parameters Defined</div>\n <div class=\"empty-state-text\">\n Add parameters to make your query dynamic and reusable.\n </div>\n @if (EditMode) {\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addParameter()\">\n <i class=\"fa-solid fa-plus\"></i> Add First Parameter\n </button>\n }\n </div>\n } @else {\n @if (EditMode) {\n <div class=\"panel-toolbar\">\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addParameter()\">\n <i class=\"fa-solid fa-plus\"></i> Add Parameter\n </button>\n </div>\n }\n <div class=\"card-grid\">\n @for (param of queryParameters; track param.ID || $index) {\n <div class=\"item-card\" [class.required]=\"param.IsRequired\" (click)=\"editParameter(param)\">\n <div class=\"item-card-header\">\n <div class=\"item-name\">\n <i class=\"fa-solid fa-at item-name-icon param-icon\"></i>\n {{ param.Name }}\n </div>\n <div class=\"item-badges\">\n @if (param.IsRequired) {\n <span class=\"item-badge required\">Required</span>\n }\n </div>\n </div>\n <div class=\"item-card-body\">\n @if (param.Description) {\n <div class=\"item-description\">{{ param.Description }}</div>\n }\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <strong>Type:</strong> {{ param.Type || 'Text' }}\n </span>\n @if (param.DefaultValue) {\n <span class=\"meta-tag\">\n <strong>Default:</strong>\n <code class=\"meta-code\">{{ param.DefaultValue }}</code>\n </span>\n }\n </div>\n </div>\n @if (EditMode) {\n <div class=\"item-actions\" (click)=\"$event.stopPropagation()\">\n <button type=\"button\" class=\"item-action-btn\" (click)=\"editParameter(param)\" title=\"Edit parameter\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n <button type=\"button\" class=\"item-action-btn delete\" (click)=\"deleteParameter(param)\" title=\"Delete parameter\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Query Fields Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [(Expanded)]=\"fieldsPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-table panel-icon\"></i>\n Fields\n @if (queryFields.length > 0) {\n <span class=\"panel-badge count\">{{ queryFields.length }}</span>\n }\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (isLoadingFields) {\n <div class=\"panel-loading\">\n <mj-loading text=\"Loading fields...\"></mj-loading>\n </div>\n } @else {\n @if (queryFields.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-table empty-state-icon\"></i>\n <div class=\"empty-state-title\">No Fields Defined</div>\n <div class=\"empty-state-text\">\n Define output fields for your query results.\n </div>\n @if (EditMode) {\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addField()\">\n <i class=\"fa-solid fa-plus\"></i> Add First Field\n </button>\n }\n </div>\n } @else {\n @if (EditMode) {\n <div class=\"panel-toolbar\">\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addField()\">\n <i class=\"fa-solid fa-plus\"></i> Add Field\n </button>\n </div>\n }\n <div class=\"card-grid\">\n @for (field of queryFields; track field.ID) {\n <div class=\"item-card\">\n <div class=\"item-card-header\">\n <div class=\"item-name\">\n <i class=\"fa-solid fa-columns item-name-icon field-icon\"></i>\n {{ field.Name }}\n </div>\n <div class=\"item-badges\">\n <span class=\"item-badge type\">{{ field.SQLBaseType }}</span>\n @if (field.Sequence) {\n <span class=\"item-badge sequence\">#{{ field.Sequence }}</span>\n }\n </div>\n </div>\n <div class=\"item-card-body\">\n @if (field.Description) {\n <div class=\"item-description\">{{ field.Description }}</div>\n }\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <i class=\"fa-solid fa-code\"></i> {{ field.SQLFullType || field.SQLBaseType }}\n </span>\n </div>\n </div>\n @if (EditMode) {\n <div class=\"item-card-actions\">\n <button type=\"button\" class=\"item-action-btn delete\" (click)=\"deleteField(field)\" title=\"Delete field\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Dependent Queries Panel -->\n @if (record.IsSaved && DependentQueries.length > 0) {\n <mj-accordion-panel\n [(Expanded)]=\"dependentsPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-arrow-left panel-icon dependents-icon\"></i>\n Dependent Queries\n <span class=\"panel-badge count\">{{ DependentQueries.length }}</span>\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n <div class=\"dependents-description\">\n These queries reference this query via <code>{{\"{{query:\\\"...\\\"}}\"}} </code> composition syntax.\n </div>\n <div class=\"card-grid\">\n @for (dep of DependentQueries; track dep.ID) {\n <div class=\"item-card dependent-card\" (click)=\"onDependentQueryClick(dep)\">\n <div class=\"item-card-header\">\n <div class=\"item-name\">\n <i class=\"fa-solid fa-arrow-left item-name-icon dependent-query-icon\"></i>\n {{ dep.Query }}\n </div>\n </div>\n <div class=\"item-card-body\">\n @if (dep.ReferencePath) {\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <i class=\"fa-solid fa-link\"></i> {{ dep.ReferencePath }}\n </span>\n </div>\n }\n @if (dep.Alias) {\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <strong>Alias:</strong> <code class=\"meta-code\">{{ dep.Alias }}</code>\n </span>\n </div>\n }\n </div>\n <div class=\"item-card-footer\">\n <span class=\"open-link\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i> Open\n </span>\n </div>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Query Entities Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [(Expanded)]=\"entitiesPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-database panel-icon\"></i>\n Entities\n @if (queryEntities.length > 0) {\n <span class=\"panel-badge count\">{{ queryEntities.length }}</span>\n }\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (isLoadingEntities) {\n <div class=\"panel-loading\">\n <mj-loading text=\"Loading entities...\"></mj-loading>\n </div>\n } @else {\n @if (queryEntities.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-database empty-state-icon\"></i>\n <div class=\"empty-state-title\">No Entities Tracked</div>\n <div class=\"empty-state-text\">\n Track which entities this query uses for documentation.\n </div>\n @if (EditMode) {\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addEntity()\">\n <i class=\"fa-solid fa-plus\"></i> Add First Entity\n </button>\n }\n </div>\n } @else {\n @if (EditMode) {\n <div class=\"panel-toolbar\">\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addEntity()\">\n <i class=\"fa-solid fa-plus\"></i> Add Entity\n </button>\n </div>\n }\n <div class=\"card-grid\">\n @for (entity of queryEntities; track entity.ID) {\n <div class=\"item-card\">\n <div class=\"item-card-header\">\n <div class=\"item-name\">\n <i class=\"fa-solid fa-table item-name-icon entity-icon\"></i>\n {{ entity.Entity || 'Select Entity...' }}\n </div>\n @if (EditMode) {\n <div class=\"entity-dropdown-wrapper\">\n <mj-dropdown\n [(ngModel)]=\"entity.EntityID\"\n [name]=\"'entity_' + entity.ID\"\n [Data]=\"getEntityOptions()\"\n TextField=\"text\"\n ValueField=\"id\"\n [ValuePrimitive]=\"true\"\n Placeholder=\"Select entity...\"\n class=\"entity-dropdown\">\n </mj-dropdown>\n </div>\n }\n </div>\n @if (!EditMode && entity.Entity) {\n <div class=\"item-card-body\">\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <i class=\"fa-solid fa-database\"></i> Data Source\n </span>\n </div>\n </div>\n }\n @if (EditMode) {\n <div class=\"item-card-actions\">\n <button type=\"button\" class=\"item-action-btn delete\" (click)=\"deleteEntity(entity)\" title=\"Delete entity\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Details Panel -->\n <mj-accordion-panel\n [(Expanded)]=\"detailsPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-info-circle panel-icon\"></i>\n Details\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n <div class=\"details-grid\">\n <!-- Reusable -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-puzzle-piece\"></i> Reusable\n </label>\n @if (EditMode) {\n <mj-switch [(ngModel)]=\"record.Reusable\" name=\"reusable\"></mj-switch>\n <div class=\"detail-hint\">Allow other queries to reference this query using composition syntax</div>\n } @else {\n <div class=\"detail-value\">\n @if (record.Reusable) {\n <span class=\"detail-tag positive\"><i class=\"fa-solid fa-check\"></i> Reusable</span>\n } @else {\n <span class=\"detail-tag neutral\"><i class=\"fa-solid fa-times\"></i> Not Reusable</span>\n }\n </div>\n }\n </div>\n\n <!-- Cache Enabled -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-bolt\"></i> Cache Enabled\n </label>\n @if (EditMode) {\n <mj-switch [(ngModel)]=\"record.CacheEnabled\" name=\"cacheEnabled\"></mj-switch>\n <div class=\"detail-hint\">Cache query results in memory to reduce database load on repeated runs</div>\n } @else {\n <div class=\"detail-value\">\n @if (record.CacheEnabled) {\n <span class=\"detail-tag positive\"><i class=\"fa-solid fa-check\"></i> Caching On</span>\n } @else {\n <span class=\"detail-tag neutral\"><i class=\"fa-solid fa-times\"></i> Caching Off</span>\n }\n </div>\n }\n </div>\n\n <!-- Cache TTL -->\n @if (record.CacheEnabled) {\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-clock\"></i> Cache TTL (Minutes)\n </label>\n @if (EditMode) {\n <input class=\"mj-input detail-input-narrow\"\n type=\"number\"\n [(ngModel)]=\"record.CacheTTLMinutes\"\n name=\"cacheTTLMinutes\"\n min=\"1\"\n placeholder=\"Default\" />\n <div class=\"detail-hint\">How long cached results remain valid. Leave blank for default TTL.</div>\n } @else {\n <div class=\"detail-value\">{{ record.CacheTTLMinutes != null ? record.CacheTTLMinutes + ' min' : 'Default' }}</div>\n }\n </div>\n }\n\n <!-- Audit Query Runs -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-clipboard-list\"></i> Audit Runs\n </label>\n @if (EditMode) {\n <mj-switch [(ngModel)]=\"record.AuditQueryRuns\" name=\"auditQueryRuns\"></mj-switch>\n <div class=\"detail-hint\">Log all executions of this query to the Audit Log for tracking and compliance</div>\n } @else {\n <div class=\"detail-value\">\n @if (record.AuditQueryRuns) {\n <span class=\"detail-tag positive\"><i class=\"fa-solid fa-check\"></i> Auditing On</span>\n } @else {\n <span class=\"detail-tag neutral\"><i class=\"fa-solid fa-times\"></i> Auditing Off</span>\n }\n </div>\n }\n </div>\n\n <!-- Uses Template -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-file-code\"></i> Template Usage\n </label>\n @if (EditMode) {\n <mj-switch [(ngModel)]=\"record.UsesTemplate\" name=\"usesTemplate\"></mj-switch>\n } @else {\n <div class=\"detail-value\">\n @if (record.UsesTemplate) {\n <span class=\"detail-tag positive\"><i class=\"fa-solid fa-check\"></i> Uses Templates</span>\n } @else {\n <span class=\"detail-tag neutral\"><i class=\"fa-solid fa-times\"></i> No Templates</span>\n }\n </div>\n }\n </div>\n\n <!-- Created Date -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-calendar-plus\"></i> Created\n </label>\n <div class=\"detail-value\">{{ formatDate(record.__mj_CreatedAt) }}</div>\n </div>\n\n <!-- Updated Date -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-calendar-check\"></i> Last Updated\n </label>\n <div class=\"detail-value\">{{ formatDate(record.__mj_UpdatedAt) }}</div>\n </div>\n\n <!-- Quality Rank -->\n @if (record.QualityRank != null) {\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-star\"></i> Quality Rank\n </label>\n <div class=\"detail-value\">{{ record.QualityRank }}/10</div>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Permissions Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [(Expanded)]=\"permissionsPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-shield-alt panel-icon\"></i>\n Permissions\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (isLoadingPermissions) {\n <div class=\"panel-loading\">\n <mj-loading text=\"Loading permissions...\"></mj-loading>\n </div>\n } @else {\n @if (queryPermissions.length === 0 && !EditMode) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-shield-alt empty-state-icon\"></i>\n <div class=\"empty-state-title\">No Permissions Set</div>\n <div class=\"empty-state-text\">\n This query uses default permissions.\n </div>\n </div>\n } @else {\n @if (EditMode) {\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Query Permissions','QueryID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Query Permissions')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n } @else {\n <div class=\"permissions-list\">\n @for (permission of queryPermissions; track permission.ID) {\n <div class=\"permission-card\">\n <i class=\"fa-solid fa-users permission-icon\"></i>\n <div class=\"permission-info\">\n <div class=\"permission-role\">{{ permission.Role }}</div>\n <div class=\"permission-type\">Role Permission</div>\n </div>\n <span class=\"permission-badge\">\n <i class=\"fa-solid fa-play\"></i> Can Execute\n </span>\n </div>\n }\n </div>\n }\n }\n }\n </div>\n </mj-accordion-panel>\n }\n\n </div>\n </form>\n</mj-record-form-container>\n\n<!-- Query Run Dialog -->\n<mj-query-run-dialog\n [query]=\"record\"\n [parameters]=\"queryParameters\"\n [(isVisible)]=\"showRunDialog\"\n (onClose)=\"onRunDialogClose()\">\n</mj-query-run-dialog>\n\n<!-- Category Creation Dialog -->\n<mj-query-category-dialog\n [(isVisible)]=\"showCategoryDialog\"\n (onCategoryCreated)=\"onCategoryCreated($event)\">\n</mj-query-category-dialog>\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import { EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';
2
2
  import { MJQueryEntity, MJQueryParameterEntity } from '@memberjunction/core-entities';
3
+ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
3
4
  import * as i0 from "@angular/core";
4
5
  interface QueryRunResult {
5
6
  QueryID: string;
@@ -20,7 +21,7 @@ interface ParameterPair {
20
21
  description: string;
21
22
  isRequired: boolean;
22
23
  }
23
- export declare class QueryRunDialogComponent implements OnInit, OnChanges {
24
+ export declare class QueryRunDialogComponent extends BaseAngularComponent implements OnInit, OnChanges {
24
25
  private cdr;
25
26
  query: MJQueryEntity | null;
26
27
  parameters: MJQueryParameterEntity[];
@@ -1 +1 @@
1
- {"version":3,"file":"query-run-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/Queries/query-run-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAA6B,MAAM,eAAe,CAAC;AACpI,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;;AAKtF,UAAU,cAAc;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,UAAU,aAAa;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACvB;AAED,qBAMa,uBAAwB,YAAW,MAAM,EAAE,SAAS;IAC7D,OAAO,CAAC,GAAG,CAA6B;IAE/B,KAAK,EAAE,aAAa,GAAG,IAAI,CAAQ;IACnC,UAAU,EAAE,sBAAsB,EAAE,CAAM;IAC1C,SAAS,UAAS;IACjB,eAAe,wBAA+B;IAC9C,OAAO,qBAA4B;IAEtC,SAAS,UAAS;IAClB,eAAe,UAAS;IACxB,cAAc,EAAE,aAAa,EAAE,CAAM;IACrC,kBAAkB,UAAQ;IAC1B,eAAe,UAAQ;IACvB,kBAAkB,UAAS;IAC3B,SAAS,EAAE,cAAc,GAAG,IAAI,CAAQ;IACxC,aAAa,EAAE,GAAG,EAAE,CAAM;IAC1B,UAAU,EAAE,GAAG,EAAE,CAAM;IACvB,YAAY,EAAE,GAAG,EAAE,CAAM;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC9B,QAAQ,EAAE,MAAM,CAAK;IAE5B,QAAQ;IAIR,WAAW,CAAC,OAAO,EAAE,aAAa;IASlC,OAAO,CAAC,oBAAoB;IAc5B,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC;IAW5E,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;IAazC,QAAQ,CAAC,mBAAmB,GAAE,OAAe;IAqJnD,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,oBAAoB;IAS5B,WAAW;IA2CL,eAAe;IAmCrB,KAAK;IAaL,yBAAyB,IAAI,MAAM;IAInC,oBAAoB,IAAI,OAAO;IAK/B,aAAa;IAKb,gBAAgB;IAOhB,YAAY;IAOZ,YAAY;yCA5XH,uBAAuB;2CAAvB,uBAAuB;CAmYnC"}
1
+ {"version":3,"file":"query-run-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/Queries/query-run-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAA6B,MAAM,eAAe,CAAC;AACpI,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAKtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AACrE,UAAU,cAAc;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,UAAU,aAAa;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACvB;AAED,qBAMa,uBAAwB,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS;IAC1F,OAAO,CAAC,GAAG,CAA6B;IAE/B,KAAK,EAAE,aAAa,GAAG,IAAI,CAAQ;IACnC,UAAU,EAAE,sBAAsB,EAAE,CAAM;IAC1C,SAAS,UAAS;IACjB,eAAe,wBAA+B;IAC9C,OAAO,qBAA4B;IAEtC,SAAS,UAAS;IAClB,eAAe,UAAS;IACxB,cAAc,EAAE,aAAa,EAAE,CAAM;IACrC,kBAAkB,UAAQ;IAC1B,eAAe,UAAQ;IACvB,kBAAkB,UAAS;IAC3B,SAAS,EAAE,cAAc,GAAG,IAAI,CAAQ;IACxC,aAAa,EAAE,GAAG,EAAE,CAAM;IAC1B,UAAU,EAAE,GAAG,EAAE,CAAM;IACvB,YAAY,EAAE,GAAG,EAAE,CAAM;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC9B,QAAQ,EAAE,MAAM,CAAK;IAE5B,QAAQ;IAIR,WAAW,CAAC,OAAO,EAAE,aAAa;IASlC,OAAO,CAAC,oBAAoB;IAc5B,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC;IAW5E,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;IAazC,QAAQ,CAAC,mBAAmB,GAAE,OAAe;IAqJnD,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,oBAAoB;IAS5B,WAAW;IA2CL,eAAe;IAmCrB,KAAK;IAaL,yBAAyB,IAAI,MAAM;IAInC,oBAAoB,IAAI,OAAO;IAK/B,aAAa;IAKb,gBAAgB;IAOhB,YAAY;IAOZ,YAAY;yCA5XH,uBAAuB;2CAAvB,uBAAuB;CAmYnC"}