@memberjunction/ng-core-entity-forms 6.2.0-edge.6 → 6.2.0-edge.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +2 -2
- package/dist/lib/custom/Conversations/conversation-overview.panel.js +1 -1
- package/dist/lib/custom/Conversations/conversation-overview.panel.js.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.js +3 -3
- package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
- package/dist/lib/custom/Files/file-form.component.d.ts +8 -0
- package/dist/lib/custom/Files/file-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Files/file-form.component.js +21 -5
- package/dist/lib/custom/Files/file-form.component.js.map +1 -1
- package/dist/lib/custom/Files/file-form.logic.d.ts +7 -0
- package/dist/lib/custom/Files/file-form.logic.d.ts.map +1 -1
- package/dist/lib/custom/Files/file-form.logic.js +20 -0
- package/dist/lib/custom/Files/file-form.logic.js.map +1 -1
- package/dist/lib/custom/Lists/list-form.component.js +5 -5
- package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-child-labels.d.ts +12 -0
- package/dist/lib/custom/Queries/query-child-labels.d.ts.map +1 -0
- package/dist/lib/custom/Queries/query-child-labels.js +28 -0
- package/dist/lib/custom/Queries/query-child-labels.js.map +1 -0
- package/dist/lib/custom/Queries/query-fields-grid.component.d.ts +37 -0
- package/dist/lib/custom/Queries/query-fields-grid.component.d.ts.map +1 -0
- package/dist/lib/custom/Queries/query-fields-grid.component.js +321 -0
- package/dist/lib/custom/Queries/query-fields-grid.component.js.map +1 -0
- package/dist/lib/custom/Queries/query-form-logic.d.ts +37 -0
- package/dist/lib/custom/Queries/query-form-logic.d.ts.map +1 -0
- package/dist/lib/custom/Queries/query-form-logic.js +48 -0
- package/dist/lib/custom/Queries/query-form-logic.js.map +1 -0
- package/dist/lib/custom/Queries/query-form.component.d.ts +76 -7
- package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +740 -688
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-parameters-grid.component.d.ts +31 -0
- package/dist/lib/custom/Queries/query-parameters-grid.component.d.ts.map +1 -0
- package/dist/lib/custom/Queries/query-parameters-grid.component.js +298 -0
- package/dist/lib/custom/Queries/query-parameters-grid.component.js.map +1 -0
- package/dist/lib/custom/Rubrics/record-forms.component.js +2 -2
- package/dist/lib/custom/Rubrics/record-forms.component.js.map +1 -1
- package/dist/lib/custom/Rubrics/scale-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Rubrics/scale-form.component.js +2 -1
- package/dist/lib/custom/Rubrics/scale-form.component.js.map +1 -1
- package/dist/lib/custom/SearchScopes/searchscope-form.component.js +1 -1
- package/dist/lib/custom/SearchScopes/searchscope-form.component.js.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +41 -35
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +32 -3
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +234 -226
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentConfiguration/mjaiagentconfiguration.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentConfiguration/mjaiagentconfiguration.form.component.js +25 -6
- package/dist/lib/generated/Entities/MJAIAgentConfiguration/mjaiagentconfiguration.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRelationship/mjaiagentrelationship.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRelationship/mjaiagentrelationship.form.component.js +13 -3
- package/dist/lib/generated/Entities/MJAIAgentRelationship/mjaiagentrelationship.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJBrandKit/mjbrandkit.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJBrandKit/mjbrandkit.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJBrandKit/mjbrandkit.form.component.js +91 -0
- package/dist/lib/generated/Entities/MJBrandKit/mjbrandkit.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJBrandKitAsset/mjbrandkitasset.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJBrandKitAsset/mjbrandkitasset.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJBrandKitAsset/mjbrandkitasset.form.component.js +72 -0
- package/dist/lib/generated/Entities/MJBrandKitAsset/mjbrandkitasset.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJCompany/mjcompany.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJCompany/mjcompany.form.component.js +46 -10
- package/dist/lib/generated/Entities/MJCompany/mjcompany.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +459 -451
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js +24 -6
- package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJFile/mjfile.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js +32 -14
- package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.js +67 -61
- package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJQueryField/mjqueryfield.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJQueryField/mjqueryfield.form.component.js +15 -3
- package/dist/lib/generated/Entities/MJQueryField/mjqueryfield.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJVideoArchetype/mjvideoarchetype.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJVideoArchetype/mjvideoarchetype.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJVideoArchetype/mjvideoarchetype.form.component.js +80 -0
- package/dist/lib/generated/Entities/MJVideoArchetype/mjvideoarchetype.form.component.js.map +1 -0
- package/dist/lib/generated/generated-forms.module.d.ts +334 -331
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +11 -2
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/lib/panels/brand-kits/brand-kit-assets.panel.d.ts +15 -0
- package/dist/lib/panels/brand-kits/brand-kit-assets.panel.d.ts.map +1 -0
- package/dist/lib/panels/brand-kits/brand-kit-assets.panel.js +52 -0
- package/dist/lib/panels/brand-kits/brand-kit-assets.panel.js.map +1 -0
- package/dist/lib/panels/brand-kits/brand-kit-generation-policy.panel.d.ts +15 -0
- package/dist/lib/panels/brand-kits/brand-kit-generation-policy.panel.d.ts.map +1 -0
- package/dist/lib/panels/brand-kits/brand-kit-generation-policy.panel.js +52 -0
- package/dist/lib/panels/brand-kits/brand-kit-generation-policy.panel.js.map +1 -0
- package/dist/public-api.d.ts +2 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +50 -48
|
@@ -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 { MJQueryEntityExtended, MJQueryParameterEntity, MJQueryCategoryEntity, MJQueryFieldEntity, MJQueryEntityEntity, MJQueryPermissionEntity, MJQueryDependencyEntity, QueryEngine } from '@memberjunction/core-entities';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseFormComponent, FormToolbarConfig, CUSTOM_LAYOUT_TOOLBAR_CONFIG, MJFormPresenterService } from '@memberjunction/ng-base-forms';\nimport { MJQueryFormComponent } from '../../generated/Entities/MJQuery/mjquery.form.component';\nimport { RUN_QUERY_SQL_FILTERS, CompositeKey, BaseEntity } 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 { MJConfirmService } from '@memberjunction/ng-ui-components';\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!: MJQueryEntityExtended;\n public QueryParameters: MJQueryParameterEntity[] = [];\n\n /** @deprecated Use {@link QueryParameters}. */\n public get queryParameters(): MJQueryParameterEntity[] {\n return this.QueryParameters;\n }\n /** @deprecated Use {@link QueryParameters}. */\n public set queryParameters(value: MJQueryParameterEntity[]) {\n this.QueryParameters = value;\n }\n public QueryFields: MJQueryFieldEntity[] = [];\n\n /** @deprecated Use {@link QueryFields}. */\n public get queryFields(): MJQueryFieldEntity[] {\n return this.QueryFields;\n }\n /** @deprecated Use {@link QueryFields}. */\n public set queryFields(value: MJQueryFieldEntity[]) {\n this.QueryFields = value;\n }\n public QueryEntities: MJQueryEntityEntity[] = [];\n\n /** @deprecated Use {@link QueryEntities}. */\n public get queryEntities(): MJQueryEntityEntity[] {\n return this.QueryEntities;\n }\n /** @deprecated Use {@link QueryEntities}. */\n public set queryEntities(value: MJQueryEntityEntity[]) {\n this.QueryEntities = value;\n }\n public QueryPermissions: MJQueryPermissionEntity[] = [];\n\n /** @deprecated Use {@link QueryPermissions}. */\n public get queryPermissions(): MJQueryPermissionEntity[] {\n return this.QueryPermissions;\n }\n /** @deprecated Use {@link QueryPermissions}. */\n public set queryPermissions(value: MJQueryPermissionEntity[]) {\n this.QueryPermissions = value;\n }\n public IsLoadingParameters = false;\n\n /** @deprecated Use {@link IsLoadingParameters}. */\n public get isLoadingParameters() {\n return this.IsLoadingParameters;\n }\n /** @deprecated Use {@link IsLoadingParameters}. */\n public set isLoadingParameters(value) {\n this.IsLoadingParameters = value;\n }\n public IsLoadingFields = false;\n\n /** @deprecated Use {@link IsLoadingFields}. */\n public get isLoadingFields() {\n return this.IsLoadingFields;\n }\n /** @deprecated Use {@link IsLoadingFields}. */\n public set isLoadingFields(value) {\n this.IsLoadingFields = value;\n }\n public IsLoadingEntities = false;\n\n /** @deprecated Use {@link IsLoadingEntities}. */\n public get isLoadingEntities() {\n return this.IsLoadingEntities;\n }\n /** @deprecated Use {@link IsLoadingEntities}. */\n public set isLoadingEntities(value) {\n this.IsLoadingEntities = value;\n }\n public IsLoadingPermissions = false;\n\n /** @deprecated Use {@link IsLoadingPermissions}. */\n public get isLoadingPermissions() {\n return this.IsLoadingPermissions;\n }\n /** @deprecated Use {@link IsLoadingPermissions}. */\n public set isLoadingPermissions(value) {\n this.IsLoadingPermissions = value;\n }\n public HasUnsavedChanges = false;\n\n /** @deprecated Use {@link HasUnsavedChanges}. */\n public get hasUnsavedChanges() {\n return this.HasUnsavedChanges;\n }\n /** @deprecated Use {@link HasUnsavedChanges}. */\n public set hasUnsavedChanges(value) {\n this.HasUnsavedChanges = value;\n }\n public ShowFiltersHelp = false;\n\n /** @deprecated Use {@link ShowFiltersHelp}. */\n public get showFiltersHelp() {\n return this.ShowFiltersHelp;\n }\n /** @deprecated Use {@link ShowFiltersHelp}. */\n public set showFiltersHelp(value) {\n this.ShowFiltersHelp = value;\n }\n public ShowRunDialog = false;\n\n /** @deprecated Use {@link ShowRunDialog}. */\n public get showRunDialog() {\n return this.ShowRunDialog;\n }\n /** @deprecated Use {@link ShowRunDialog}. */\n public set showRunDialog(value) {\n this.ShowRunDialog = value;\n }\n public CategoryPathDisplay = '';\n\n /** @deprecated Use {@link CategoryPathDisplay}. */\n public get categoryPathDisplay() {\n return this.CategoryPathDisplay;\n }\n /** @deprecated Use {@link CategoryPathDisplay}. */\n public set categoryPathDisplay(value) {\n this.CategoryPathDisplay = value;\n }\n public IsSaving = false;\n\n // Expansion panel states\n public SqlPanelExpanded = true;\n\n /** @deprecated Use {@link SqlPanelExpanded}. */\n public get sqlPanelExpanded() {\n return this.SqlPanelExpanded;\n }\n /** @deprecated Use {@link SqlPanelExpanded}. */\n public set sqlPanelExpanded(value) {\n this.SqlPanelExpanded = value;\n }\n public ParametersPanelExpanded = false;\n\n /** @deprecated Use {@link ParametersPanelExpanded}. */\n public get parametersPanelExpanded() {\n return this.ParametersPanelExpanded;\n }\n /** @deprecated Use {@link ParametersPanelExpanded}. */\n public set parametersPanelExpanded(value) {\n this.ParametersPanelExpanded = value;\n }\n public FieldsPanelExpanded = false;\n\n /** @deprecated Use {@link FieldsPanelExpanded}. */\n public get fieldsPanelExpanded() {\n return this.FieldsPanelExpanded;\n }\n /** @deprecated Use {@link FieldsPanelExpanded}. */\n public set fieldsPanelExpanded(value) {\n this.FieldsPanelExpanded = value;\n }\n public EntitiesPanelExpanded = false;\n\n /** @deprecated Use {@link EntitiesPanelExpanded}. */\n public get entitiesPanelExpanded() {\n return this.EntitiesPanelExpanded;\n }\n /** @deprecated Use {@link EntitiesPanelExpanded}. */\n public set entitiesPanelExpanded(value) {\n this.EntitiesPanelExpanded = value;\n }\n public TechnicalDescriptionPanelExpanded = false;\n\n /** @deprecated Use {@link TechnicalDescriptionPanelExpanded}. */\n public get technicalDescriptionPanelExpanded() {\n return this.TechnicalDescriptionPanelExpanded;\n }\n /** @deprecated Use {@link TechnicalDescriptionPanelExpanded}. */\n public set technicalDescriptionPanelExpanded(value) {\n this.TechnicalDescriptionPanelExpanded = value;\n }\n public DetailsPanelExpanded = false;\n\n /** @deprecated Use {@link DetailsPanelExpanded}. */\n public get detailsPanelExpanded() {\n return this.DetailsPanelExpanded;\n }\n /** @deprecated Use {@link DetailsPanelExpanded}. */\n public set detailsPanelExpanded(value) {\n this.DetailsPanelExpanded = value;\n }\n public PermissionsPanelExpanded = false;\n\n /** @deprecated Use {@link PermissionsPanelExpanded}. */\n public get permissionsPanelExpanded() {\n return this.PermissionsPanelExpanded;\n }\n /** @deprecated Use {@link PermissionsPanelExpanded}. */\n public set permissionsPanelExpanded(value) {\n this.PermissionsPanelExpanded = value;\n }\n public DependentsPanelExpanded = false;\n\n /** @deprecated Use {@link DependentsPanelExpanded}. */\n public get dependentsPanelExpanded() {\n return this.DependentsPanelExpanded;\n }\n /** @deprecated Use {@link DependentsPanelExpanded}. */\n public set dependentsPanelExpanded(value) {\n this.DependentsPanelExpanded = value;\n }\n \n // Category data\n public CategoryOptions: Array<{text: string, value: string}> = [\n { text: 'Select Category...', value: '' }\n ];\n\n /** @deprecated Use {@link CategoryOptions}. */\n public get categoryOptions(): Array<{text: string, value: string}> {\n return this.CategoryOptions;\n }\n /** @deprecated Use {@link CategoryOptions}. */\n public set categoryOptions(value: Array<{text: string, value: string}>) {\n this.CategoryOptions = value;\n }\n public Categories: MJQueryCategoryEntity[] = [];\n\n /** @deprecated Use {@link Categories}. */\n public get categories(): MJQueryCategoryEntity[] {\n return this.Categories;\n }\n /** @deprecated Use {@link Categories}. */\n public set categories(value: MJQueryCategoryEntity[]) {\n this.Categories = value;\n }\n public CategoryTreeData: CategoryTreeNode[] = [];\n\n /** @deprecated Use {@link CategoryTreeData}. */\n public get categoryTreeData(): CategoryTreeNode[] {\n return this.CategoryTreeData;\n }\n /** @deprecated Use {@link CategoryTreeData}. */\n public set categoryTreeData(value: CategoryTreeNode[]) {\n this.CategoryTreeData = value;\n }\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; // first-pk-ok: FK target — Query CategoryID references the single-column ID key of Query Categories\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 /** @deprecated Use {@link StatusOptions}. */\n public get statusOptions() {\n return this.StatusOptions;\n }\n /** @deprecated Use {@link StatusOptions}. */\n public set statusOptions(value) {\n this.StatusOptions = value;\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 /** Custom-layout form owns its entire body; suppress auto-filled relationship sections. */\n public override get OwnsEntireFormBody(): boolean { return true; }\n\n @ViewChild('sqlEditor') SqlEditor: CodeEditorComponent | null = null;\n\n /** @deprecated Use {@link SqlEditor}. */\n get sqlEditor(): CodeEditorComponent | null {\n return this.SqlEditor;\n }\n /** @deprecated Use {@link SqlEditor}. */\n set sqlEditor(value: CodeEditorComponent | null) {\n this.SqlEditor = value;\n }\n \n // SQL Filters for help display\n public SqlFilters = RUN_QUERY_SQL_FILTERS;\n\n /** @deprecated Use {@link SqlFilters}. */\n public get sqlFilters() {\n return this.SqlFilters;\n }\n /** @deprecated Use {@link SqlFilters}. */\n public set sqlFilters(value) {\n this.SqlFilters = value;\n }\n \n private navigationService = inject(NavigationService);\n private formPresenter = inject(MJFormPresenterService);\n private confirmService = inject(MJConfirmService);\n private destroy$ = new Subject<void>();\n\n /**\n * Gets queries that depend on (reference) this query via composition.\n */\n public get DependentQueries(): MJQueryDependencyEntity[] {\n return this.record?.QueryDependents ?? [];\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 all data synchronously from QueryEngine cache\n this.LoadCategories();\n this.LoadQueryParameters();\n this.LoadQueryFields();\n this.LoadQueryEntities();\n this.LoadQueryPermissions();\n\n this.isInitialLoad = false;\n this.cdr.detectChanges();\n }\n\n ngOnDestroy() {\n super.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 /** @deprecated Use {@link IsFormReadOnly}. */\n public isFormReadOnly(): boolean {\n return this.IsFormReadOnly();\n }\n\n LoadQueryParameters() {\n if (this.record && this.record.ID) {\n this.QueryParameters = this.record.QueryParameters;\n if (!this.isInitialLoad) this.cdr.detectChanges();\n }\n }\n\n /** @deprecated Use {@link LoadQueryParameters}. */\n loadQueryParameters() {\n return this.LoadQueryParameters();\n }\n\n LoadQueryFields() {\n if (this.record && this.record.ID) {\n this.QueryFields = this.record.QueryFields;\n if (!this.isInitialLoad) this.cdr.detectChanges();\n }\n }\n\n /** @deprecated Use {@link LoadQueryFields}. */\n loadQueryFields() {\n return this.LoadQueryFields();\n }\n\n LoadQueryEntities() {\n if (this.record && this.record.ID) {\n this.QueryEntities = this.record.QueryEntities;\n if (!this.isInitialLoad) this.cdr.detectChanges();\n }\n }\n\n /** @deprecated Use {@link LoadQueryEntities}. */\n loadQueryEntities() {\n return this.LoadQueryEntities();\n }\n\n LoadQueryPermissions() {\n if (this.record && this.record.ID) {\n this.QueryPermissions = this.record.QueryPermissions;\n if (!this.isInitialLoad) this.cdr.detectChanges();\n }\n }\n\n /** @deprecated Use {@link LoadQueryPermissions}. */\n loadQueryPermissions() {\n return this.LoadQueryPermissions();\n }\n\n LoadCategories() {\n this.Categories = QueryEngine.Instance.Categories;\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\n /** @deprecated Use {@link LoadCategories}. */\n loadCategories() {\n return this.LoadCategories();\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 /** @deprecated Use {@link GetCategoryPath}. */\n getCategoryPath(): string {\n return this.GetCategoryPath();\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 /** @deprecated Use {@link OnCategoryChange}. */\n async onCategoryChange(value: string) {\n return this.OnCategoryChange(value);\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 /** @deprecated Use {@link ToggleFiltersHelp}. */\n toggleFiltersHelp() {\n return this.ToggleFiltersHelp();\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 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 /** @deprecated Use {@link RunQuery}. */\n async runQuery() {\n return this.RunQuery();\n }\n\n /**\n * Handle run dialog close\n */\n OnRunDialogClose() {\n this.ShowRunDialog = false;\n }\n\n /** @deprecated Use {@link OnRunDialogClose}. */\n onRunDialogClose() {\n return this.OnRunDialogClose();\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 /** @deprecated Use {@link AddParameter}. */\n async addParameter() {\n return this.AddParameter();\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 /** @deprecated Use {@link EditParameter}. */\n async editParameter(param: MJQueryParameterEntity) {\n return this.EditParameter(param);\n }\n \n /**\n * Delete a parameter\n */\n async DeleteParameter(param: MJQueryParameterEntity) {\n if (!(await this.confirmService.ConfirmDelete({ title: 'Delete Parameter', message: `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 /** @deprecated Use {@link DeleteParameter}. */\n async deleteParameter(param: MJQueryParameterEntity) {\n return this.DeleteParameter(param);\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 * Create a new Query Category in a slide-in via the generic\n * MJFormPresenterService. A new record opens in edit mode automatically.\n * On save, refresh the category tree and select the new category.\n */\n async CreateCategory(): Promise<void> {\n const ref = this.formPresenter.Open({\n EntityName: 'MJ: Query Categories',\n Presentation: 'slide-in',\n // Quick-create: drop the system-metadata (timestamps) section — empty\n // for a new record. Merges over the slide-in preset (toolbar still off).\n Config: { HiddenSectionKeys: ['systemMetadata'] },\n Provider: this.ProviderToUse,\n });\n const saved = await ref.AfterSaved();\n if (saved) {\n this.OnCategoryCreated(saved);\n }\n }\n\n /** @deprecated Use {@link CreateCategory}. */\n async createCategory(): Promise<void> {\n return this.CreateCategory();\n }\n\n /**\n * Edit the currently-selected category in a slide-in via the generic\n * MJFormPresenterService. `StartInEditMode` opens the existing record\n * editable. On save, refresh the category tree.\n */\n async EditSelectedCategory(): Promise<void> {\n if (!this.record.CategoryID) return;\n const ref = this.formPresenter.Open({\n EntityName: 'MJ: Query Categories',\n RecordId: this.record.CategoryID,\n Presentation: 'slide-in',\n // Open editable + drop the system-metadata section. Partial config\n // merges over the slide-in preset, so the toolbar stays suppressed.\n Config: { StartInEditMode: true, HiddenSectionKeys: ['systemMetadata'] },\n Provider: this.ProviderToUse,\n });\n const saved = await ref.AfterSaved();\n if (saved) {\n this.LoadCategories();\n this.cdr.detectChanges();\n }\n }\n\n /** @deprecated Use {@link EditSelectedCategory}. */\n async editSelectedCategory(): Promise<void> {\n return this.EditSelectedCategory();\n }\n\n OnCategoryCreated(newCategory: BaseEntity) {\n // Reload categories to include the new one\n this.LoadCategories();\n\n // Set the new category as selected\n this.record.CategoryID = (newCategory as MJQueryCategoryEntity).ID;\n\n // Trigger change detection\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link OnCategoryCreated}. */\n onCategoryCreated(newCategory: BaseEntity) {\n return this.OnCategoryCreated(newCategory);\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 this.LoadQueryParameters();\n this.LoadQueryFields();\n this.LoadQueryEntities();\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 /** @deprecated Use {@link GetStatusBadgeColor}. */\n getStatusBadgeColor(): string {\n return this.GetStatusBadgeColor();\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 /** @deprecated Use {@link GetStatusBannerIcon}. */\n getStatusBannerIcon(): string {\n return this.GetStatusBannerIcon();\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 /** @deprecated Use {@link GetStatusBannerMessage}. */\n getStatusBannerMessage(): string {\n return this.GetStatusBannerMessage();\n }\n\n /**\n * Handle composition token click — navigate to the referenced query\n */\n OnCompositionTokenClick(event: CompositionTokenClickEvent): void {\n const allQueries = QueryEngine.Instance.Queries;\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 = allQueries.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 = allQueries.find(q => q.Name === queryName);\n }\n\n if (targetQuery) {\n this.navigationService.OpenEntityRecord('MJ: Queries', CompositeKey.FromID(targetQuery.ID));\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Referenced query \"${event.FullPath}\" not found.`,\n 'warning',\n 3000\n );\n }\n }\n\n /** @deprecated Use {@link OnCompositionTokenClick}. */\n onCompositionTokenClick(event: CompositionTokenClickEvent): void {\n return this.OnCompositionTokenClick(event);\n }\n\n /**\n * Navigate to a dependent query's record\n */\n OnDependentQueryClick(dep: MJQueryDependencyEntity): void {\n this.navigationService.OpenEntityRecord('MJ: Queries', CompositeKey.FromID(dep.QueryID));\n }\n\n /** @deprecated Use {@link OnDependentQueryClick}. */\n onDependentQueryClick(dep: MJQueryDependencyEntity): void {\n return this.OnDependentQueryClick(dep);\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 /** @deprecated Use {@link OnSQLChange}. */\n onSQLChange(value: string) {\n return this.OnSQLChange(value);\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 /** @deprecated Use {@link AddField}. */\n async addField() {\n return this.AddField();\n }\n\n /**\n * Delete a field\n */\n async DeleteField(field: MJQueryFieldEntity) {\n if (!(await this.confirmService.ConfirmDelete({ title: 'Delete Field', message: `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 /** @deprecated Use {@link DeleteField}. */\n async deleteField(field: MJQueryFieldEntity) {\n return this.DeleteField(field);\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 /** @deprecated Use {@link AddEntity}. */\n async addEntity() {\n return this.AddEntity();\n }\n\n /**\n * Delete an entity\n */\n async DeleteEntity(entity: MJQueryEntityEntity) {\n if (!(await this.confirmService.ConfirmDelete({ title: 'Delete Entity', message: `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 /** @deprecated Use {@link DeleteEntity}. */\n async deleteEntity(entity: MJQueryEntityEntity) {\n return this.DeleteEntity(entity);\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 /** @deprecated Use {@link GetEntityOptions}. */\n getEntityOptions(): Array<{text: string, id: string}> {\n return this.GetEntityOptions();\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 <div class=\"meta-dropdown-row\">\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 <button mjButton variant=\"icon\" title=\"New category\" (click)=\"createCategory()\">\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n @if (record.CategoryID) {\n <button mjButton variant=\"icon\" title=\"Edit category\" (click)=\"editSelectedCategory()\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n </div>\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 <mj-alert Variant=\"warning\">\n <span>\n This query has status <strong>{{ record.Status }}</strong>. {{ getStatusBannerMessage() }}\n </span>\n </mj-alert>\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\">— 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\">— 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 <mj-empty-state Icon=\"fa-solid fa-sliders\"\n Title=\"No Parameters Defined\"\n Message=\"Add parameters to make your query dynamic and reusable.\"\n [ActionText]=\"EditMode ? 'Add First Parameter' : ''\"\n ActionIcon=\"fa-solid fa-plus\"\n (Action)=\"addParameter()\" />\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 <mj-empty-state Icon=\"fa-solid fa-table\"\n Title=\"No Fields Defined\"\n Message=\"Define output fields for your query results.\"\n [ActionText]=\"EditMode ? 'Add First Field' : ''\"\n ActionIcon=\"fa-solid fa-plus\"\n (Action)=\"addField()\" />\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 <mj-empty-state Icon=\"fa-solid fa-database\"\n Title=\"No Entities Tracked\"\n Message=\"Track which entities this query uses for documentation.\"\n [ActionText]=\"EditMode ? 'Add First Entity' : ''\"\n ActionIcon=\"fa-solid fa-plus\"\n (Action)=\"addEntity()\" />\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 <mj-empty-state Icon=\"fa-solid fa-shield-halved\"\n Title=\"No Permissions Set\"\n Message=\"This query uses default permissions.\" />\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"]}
|
|
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 { MJQueryEntityExtended, MJQueryParameterEntity, MJQueryCategoryEntity, MJQueryFieldEntity, MJQueryEntityEntity, MJQueryPermissionEntity, MJQueryDependencyEntity, QueryEngine, ParseQueryDiagnostics } from '@memberjunction/core-entities';\nimport type { QueryDiagnosticLine, QueryRefreshExtractionOutput } from '@memberjunction/core-entities';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseFormComponent, FormToolbarConfig, CUSTOM_LAYOUT_TOOLBAR_CONFIG, MJFormPresenterService } from '@memberjunction/ng-base-forms';\nimport { MJQueryFormComponent } from '../../generated/Entities/MJQuery/mjquery.form.component';\nimport { RUN_QUERY_SQL_FILTERS, CompositeKey, BaseEntity } from '@memberjunction/core';\nimport { TreeBranchConfig } from '@memberjunction/ng-trees';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { CodeEditorComponent, CompositionTokenClickEvent } from '@memberjunction/ng-code-editor';\nimport { EditorMarkersFor, ExtractionSeverityOf, HideUnreadableFieldRows, SaveRefusalOf } from './query-form-logic';\nimport type { QueryRefreshScope } from '@memberjunction/ng-query-viewer';\nimport { NavigationService } from '@memberjunction/ng-shared';\nimport { MJConfirmService } from '@memberjunction/ng-ui-components';\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!: MJQueryEntityExtended;\n public QueryParameters: MJQueryParameterEntity[] = [];\n\n /** @deprecated Use {@link QueryParameters}. */\n public get queryParameters(): MJQueryParameterEntity[] {\n return this.QueryParameters;\n }\n /** @deprecated Use {@link QueryParameters}. */\n public set queryParameters(value: MJQueryParameterEntity[]) {\n this.QueryParameters = value;\n }\n public QueryFields: MJQueryFieldEntity[] = [];\n\n /** @deprecated Use {@link QueryFields}. */\n public get queryFields(): MJQueryFieldEntity[] {\n return this.QueryFields;\n }\n /** @deprecated Use {@link QueryFields}. */\n public set queryFields(value: MJQueryFieldEntity[]) {\n this.QueryFields = value;\n }\n public QueryEntities: MJQueryEntityEntity[] = [];\n\n /** @deprecated Use {@link QueryEntities}. */\n public get queryEntities(): MJQueryEntityEntity[] {\n return this.QueryEntities;\n }\n /** @deprecated Use {@link QueryEntities}. */\n public set queryEntities(value: MJQueryEntityEntity[]) {\n this.QueryEntities = value;\n }\n public QueryPermissions: MJQueryPermissionEntity[] = [];\n\n /** @deprecated Use {@link QueryPermissions}. */\n public get queryPermissions(): MJQueryPermissionEntity[] {\n return this.QueryPermissions;\n }\n /** @deprecated Use {@link QueryPermissions}. */\n public set queryPermissions(value: MJQueryPermissionEntity[]) {\n this.QueryPermissions = value;\n }\n public IsLoadingParameters = false;\n\n /** @deprecated Use {@link IsLoadingParameters}. */\n public get isLoadingParameters() {\n return this.IsLoadingParameters;\n }\n /** @deprecated Use {@link IsLoadingParameters}. */\n public set isLoadingParameters(value) {\n this.IsLoadingParameters = value;\n }\n public IsLoadingFields = false;\n\n /** @deprecated Use {@link IsLoadingFields}. */\n public get isLoadingFields() {\n return this.IsLoadingFields;\n }\n /** @deprecated Use {@link IsLoadingFields}. */\n public set isLoadingFields(value) {\n this.IsLoadingFields = value;\n }\n public IsLoadingEntities = false;\n\n /** @deprecated Use {@link IsLoadingEntities}. */\n public get isLoadingEntities() {\n return this.IsLoadingEntities;\n }\n /** @deprecated Use {@link IsLoadingEntities}. */\n public set isLoadingEntities(value) {\n this.IsLoadingEntities = value;\n }\n public IsLoadingPermissions = false;\n\n /** @deprecated Use {@link IsLoadingPermissions}. */\n public get isLoadingPermissions() {\n return this.IsLoadingPermissions;\n }\n /** @deprecated Use {@link IsLoadingPermissions}. */\n public set isLoadingPermissions(value) {\n this.IsLoadingPermissions = value;\n }\n public HasUnsavedChanges = false;\n\n /** @deprecated Use {@link HasUnsavedChanges}. */\n public get hasUnsavedChanges() {\n return this.HasUnsavedChanges;\n }\n /** @deprecated Use {@link HasUnsavedChanges}. */\n public set hasUnsavedChanges(value) {\n this.HasUnsavedChanges = value;\n }\n public ShowFiltersHelp = false;\n\n /** @deprecated Use {@link ShowFiltersHelp}. */\n public get showFiltersHelp() {\n return this.ShowFiltersHelp;\n }\n /** @deprecated Use {@link ShowFiltersHelp}. */\n public set showFiltersHelp(value) {\n this.ShowFiltersHelp = value;\n }\n public ShowRunDialog = false;\n\n /** @deprecated Use {@link ShowRunDialog}. */\n public get showRunDialog() {\n return this.ShowRunDialog;\n }\n /** @deprecated Use {@link ShowRunDialog}. */\n public set showRunDialog(value) {\n this.ShowRunDialog = value;\n }\n public CategoryPathDisplay = '';\n\n /** @deprecated Use {@link CategoryPathDisplay}. */\n public get categoryPathDisplay() {\n return this.CategoryPathDisplay;\n }\n /** @deprecated Use {@link CategoryPathDisplay}. */\n public set categoryPathDisplay(value) {\n this.CategoryPathDisplay = value;\n }\n public IsSaving = false;\n\n // Expansion panel states\n public SqlPanelExpanded = true;\n\n /** @deprecated Use {@link SqlPanelExpanded}. */\n public get sqlPanelExpanded() {\n return this.SqlPanelExpanded;\n }\n /** @deprecated Use {@link SqlPanelExpanded}. */\n public set sqlPanelExpanded(value) {\n this.SqlPanelExpanded = value;\n }\n public ParametersPanelExpanded = false;\n\n /** @deprecated Use {@link ParametersPanelExpanded}. */\n public get parametersPanelExpanded() {\n return this.ParametersPanelExpanded;\n }\n /** @deprecated Use {@link ParametersPanelExpanded}. */\n public set parametersPanelExpanded(value) {\n this.ParametersPanelExpanded = value;\n }\n public FieldsPanelExpanded = false;\n\n /** @deprecated Use {@link FieldsPanelExpanded}. */\n public get fieldsPanelExpanded() {\n return this.FieldsPanelExpanded;\n }\n /** @deprecated Use {@link FieldsPanelExpanded}. */\n public set fieldsPanelExpanded(value) {\n this.FieldsPanelExpanded = value;\n }\n public EntitiesPanelExpanded = false;\n\n /** @deprecated Use {@link EntitiesPanelExpanded}. */\n public get entitiesPanelExpanded() {\n return this.EntitiesPanelExpanded;\n }\n /** @deprecated Use {@link EntitiesPanelExpanded}. */\n public set entitiesPanelExpanded(value) {\n this.EntitiesPanelExpanded = value;\n }\n public TechnicalDescriptionPanelExpanded = false;\n\n /** @deprecated Use {@link TechnicalDescriptionPanelExpanded}. */\n public get technicalDescriptionPanelExpanded() {\n return this.TechnicalDescriptionPanelExpanded;\n }\n /** @deprecated Use {@link TechnicalDescriptionPanelExpanded}. */\n public set technicalDescriptionPanelExpanded(value) {\n this.TechnicalDescriptionPanelExpanded = value;\n }\n public DetailsPanelExpanded = false;\n\n /** @deprecated Use {@link DetailsPanelExpanded}. */\n public get detailsPanelExpanded() {\n return this.DetailsPanelExpanded;\n }\n /** @deprecated Use {@link DetailsPanelExpanded}. */\n public set detailsPanelExpanded(value) {\n this.DetailsPanelExpanded = value;\n }\n public PermissionsPanelExpanded = false;\n\n /** @deprecated Use {@link PermissionsPanelExpanded}. */\n public get permissionsPanelExpanded() {\n return this.PermissionsPanelExpanded;\n }\n /** @deprecated Use {@link PermissionsPanelExpanded}. */\n public set permissionsPanelExpanded(value) {\n this.PermissionsPanelExpanded = value;\n }\n public DependentsPanelExpanded = false;\n\n /** @deprecated Use {@link DependentsPanelExpanded}. */\n public get dependentsPanelExpanded() {\n return this.DependentsPanelExpanded;\n }\n /** @deprecated Use {@link DependentsPanelExpanded}. */\n public set dependentsPanelExpanded(value) {\n this.DependentsPanelExpanded = value;\n }\n \n // Category data\n public CategoryOptions: Array<{text: string, value: string}> = [\n { text: 'Select Category...', value: '' }\n ];\n\n /** @deprecated Use {@link CategoryOptions}. */\n public get categoryOptions(): Array<{text: string, value: string}> {\n return this.CategoryOptions;\n }\n /** @deprecated Use {@link CategoryOptions}. */\n public set categoryOptions(value: Array<{text: string, value: string}>) {\n this.CategoryOptions = value;\n }\n public Categories: MJQueryCategoryEntity[] = [];\n\n /** @deprecated Use {@link Categories}. */\n public get categories(): MJQueryCategoryEntity[] {\n return this.Categories;\n }\n /** @deprecated Use {@link Categories}. */\n public set categories(value: MJQueryCategoryEntity[]) {\n this.Categories = value;\n }\n public CategoryTreeData: CategoryTreeNode[] = [];\n\n /** @deprecated Use {@link CategoryTreeData}. */\n public get categoryTreeData(): CategoryTreeNode[] {\n return this.CategoryTreeData;\n }\n /** @deprecated Use {@link CategoryTreeData}. */\n public set categoryTreeData(value: CategoryTreeNode[]) {\n this.CategoryTreeData = value;\n }\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; // first-pk-ok: FK target — Query CategoryID references the single-column ID key of Query Categories\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 /** @deprecated Use {@link StatusOptions}. */\n public get statusOptions() {\n return this.StatusOptions;\n }\n /** @deprecated Use {@link StatusOptions}. */\n public set statusOptions(value) {\n this.StatusOptions = value;\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 /** Custom-layout form owns its entire body; suppress auto-filled relationship sections. */\n public override get OwnsEntireFormBody(): boolean { return true; }\n\n @ViewChild('sqlEditor') SqlEditor: CodeEditorComponent | null = null;\n\n /** @deprecated Use {@link SqlEditor}. */\n get sqlEditor(): CodeEditorComponent | null {\n return this.SqlEditor;\n }\n /** @deprecated Use {@link SqlEditor}. */\n set sqlEditor(value: CodeEditorComponent | null) {\n this.SqlEditor = value;\n }\n \n // SQL Filters for help display\n public SqlFilters = RUN_QUERY_SQL_FILTERS;\n\n /** @deprecated Use {@link SqlFilters}. */\n public get sqlFilters() {\n return this.SqlFilters;\n }\n /** @deprecated Use {@link SqlFilters}. */\n public set sqlFilters(value) {\n this.SqlFilters = value;\n }\n \n private navigationService = inject(NavigationService);\n private formPresenter = inject(MJFormPresenterService);\n private confirmService = inject(MJConfirmService);\n private destroy$ = new Subject<void>();\n\n /**\n * Gets queries that depend on (reference) this query via composition.\n */\n public get DependentQueries(): MJQueryDependencyEntity[] {\n return this.record?.QueryDependents ?? [];\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 all data synchronously from QueryEngine cache\n this.LoadCategories();\n this.LoadQueryParameters();\n this.LoadQueryFields();\n this.LoadQueryEntities();\n this.LoadQueryPermissions();\n\n this.isInitialLoad = false;\n this.cdr.detectChanges();\n\n // The editable child rows come from the database, not the cache, so a save writes exactly\n // what the user saw and changed.\n await this.loadDeclaredChildren();\n }\n\n ngOnDestroy() {\n super.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.clearSaveDiagnostics();\n this.updateEditorValue(); // Reset editor value to record SQL\n this.SqlEditor?.setEditable(false);\n // Discard added, removed and edited child rows: reload them as stored.\n void this.loadDeclaredChildren(true).then(() => this.updateUnsavedChangesFlag());\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 // Replacing the text drops the markers, so set them again for the new text.\n this.applyEditorMarkers();\n }, 0);\n }\n\n public IsFormReadOnly(): boolean {\n return !this.EditMode;\n }\n\n /** @deprecated Use {@link IsFormReadOnly}. */\n public isFormReadOnly(): boolean {\n return this.IsFormReadOnly();\n }\n\n LoadQueryParameters() {\n if (this.record) {\n const declared = this.record.DeclaredParameters;\n this.QueryParameters = declared.IsLoaded || !this.record.IsSaved ? [...declared.Items] : this.record.QueryParameters;\n if (!this.isInitialLoad) this.cdr.detectChanges();\n }\n }\n\n /** @deprecated Use {@link LoadQueryParameters}. */\n loadQueryParameters() {\n return this.LoadQueryParameters();\n }\n\n LoadQueryFields() {\n if (this.record) {\n const declared = this.record.DeclaredFields;\n const rows = declared.IsLoaded || !this.record.IsSaved ? [...declared.Items] : this.record.QueryFields;\n this.QueryFields = this.fieldsVisibleToUser(rows);\n if (!this.isInitialLoad) this.cdr.detectChanges();\n }\n }\n\n /**\n * Leaves out the fields whose source the current user may not read: the user's results never\n * carry those columns, so the form does not name them either.\n */\n private fieldsVisibleToUser(rows: MJQueryFieldEntity[]): MJQueryFieldEntity[] {\n const provider = this.ProviderToUse;\n const visible = this.record.QueryFieldsVisibleTo(provider.CurrentUser, provider.Entities);\n return HideUnreadableFieldRows(rows, this.record.QueryFields, visible);\n }\n\n /** @deprecated Use {@link LoadQueryFields}. */\n loadQueryFields() {\n return this.LoadQueryFields();\n }\n\n LoadQueryEntities() {\n if (this.record) {\n const declared = this.record.DeclaredEntities;\n this.QueryEntities = declared.IsLoaded || !this.record.IsSaved ? [...declared.Items] : this.record.QueryEntities;\n if (!this.isInitialLoad) this.cdr.detectChanges();\n }\n }\n\n /**\n * Loads the query's parameters, fields and entity links into the declared collections, which\n * the form edits and the query's save writes as one unit (a graph save). `force` discards\n * unsaved changes to them.\n */\n private async loadDeclaredChildren(force = false): Promise<void> {\n if (!this.record?.IsSaved) {\n this.refreshChildLists();\n return;\n }\n this.IsLoadingParameters = this.IsLoadingFields = this.IsLoadingEntities = true;\n this.cdr.detectChanges();\n try {\n await Promise.all([\n this.record.DeclaredParameters.Load(force),\n this.record.DeclaredFields.Load(force),\n this.record.DeclaredEntities.Load(force),\n ]);\n } catch (error) {\n console.error('Error loading the query\\'s parameters, fields and entities:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Could not load this query\\'s parameters, fields and entities for editing; showing the cached copy.', 'warning', 5000);\n } finally {\n this.IsLoadingParameters = this.IsLoadingFields = this.IsLoadingEntities = false;\n this.refreshChildLists();\n }\n }\n\n /** Copies the declared collections into the lists the template shows. */\n private refreshChildLists(): void {\n this.LoadQueryParameters();\n this.LoadQueryFields();\n this.LoadQueryEntities();\n this.updateUnsavedChangesFlag();\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link LoadQueryEntities}. */\n loadQueryEntities() {\n return this.LoadQueryEntities();\n }\n\n LoadQueryPermissions() {\n if (this.record && this.record.ID) {\n this.QueryPermissions = this.record.QueryPermissions;\n if (!this.isInitialLoad) this.cdr.detectChanges();\n }\n }\n\n /** @deprecated Use {@link LoadQueryPermissions}. */\n loadQueryPermissions() {\n return this.LoadQueryPermissions();\n }\n\n LoadCategories() {\n this.Categories = QueryEngine.Instance.Categories;\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\n /** @deprecated Use {@link LoadCategories}. */\n loadCategories() {\n return this.LoadCategories();\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 /** @deprecated Use {@link GetCategoryPath}. */\n getCategoryPath(): string {\n return this.GetCategoryPath();\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 /** @deprecated Use {@link OnCategoryChange}. */\n async onCategoryChange(value: string) {\n return this.OnCategoryChange(value);\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 // The record's Dirty includes its declared collections (added, removed and edited rows).\n this.HasUnsavedChanges = this.record?.Dirty ?? false;\n }\n\n /** A child row's annotation changed in a grid. */\n public OnChildRowChanged(): void {\n this.updateUnsavedChangesFlag();\n }\n\n ToggleFiltersHelp() {\n this.ShowFiltersHelp = !this.ShowFiltersHelp;\n }\n\n /** @deprecated Use {@link ToggleFiltersHelp}. */\n toggleFiltersHelp() {\n return this.ToggleFiltersHelp();\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 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 /** @deprecated Use {@link RunQuery}. */\n async runQuery() {\n return this.RunQuery();\n }\n\n /**\n * Handle run dialog close\n */\n OnRunDialogClose() {\n this.ShowRunDialog = false;\n }\n\n /** @deprecated Use {@link OnRunDialogClose}. */\n onRunDialogClose() {\n return this.OnRunDialogClose();\n }\n \n /**\n * Adds a parameter the user declares. It is written with the query when the query is saved.\n */\n async AddParameter() {\n try {\n const param = await this.record.DeclaredParameters.Create();\n param.Name = `param${this.QueryParameters.length + 1}`;\n param.Type = 'string';\n param.IsRequired = false;\n param.DetectionMethod = 'Manual';\n this.ParametersPanelExpanded = true;\n this.refreshChildLists();\n } catch (error) {\n console.error('Error adding parameter:', error);\n MJNotificationService.Instance.CreateSimpleNotification('Error adding parameter', 'error', 3000);\n }\n }\n\n /** @deprecated Use {@link AddParameter}. */\n async addParameter() {\n return this.AddParameter();\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 /** @deprecated Use {@link EditParameter}. */\n async editParameter(param: MJQueryParameterEntity) {\n return this.EditParameter(param);\n }\n \n /**\n * Removes a parameter. A stored one is deleted when the query is saved.\n */\n async DeleteParameter(param: MJQueryParameterEntity) {\n if (!(await this.confirmService.ConfirmDelete({ title: 'Remove Parameter', message: `Remove parameter \"${param.Name}\"? It is deleted when you save the query.` }))) {\n return;\n }\n this.removeChildRow(this.record.DeclaredParameters.Items, row => this.record.DeclaredParameters.Remove(row), param);\n }\n\n /** @deprecated Use {@link DeleteParameter}. */\n async deleteParameter(param: MJQueryParameterEntity) {\n return this.DeleteParameter(param);\n }\n\n /**\n * Removes a row from one of the declared collections and refreshes the lists. A row the form\n * shows from the cache (the collections could not be loaded) cannot be removed this way.\n */\n private removeChildRow<T>(items: readonly T[], remove: (row: T) => void, row: T): void {\n if (!items.includes(row)) {\n MJNotificationService.Instance.CreateSimpleNotification('This row cannot be removed here; reload the query and try again.', 'warning', 4000);\n return;\n }\n remove(row);\n this.refreshChildLists();\n }\n\n /**\n * Create a new Query Category in a slide-in via the generic\n * MJFormPresenterService. A new record opens in edit mode automatically.\n * On save, refresh the category tree and select the new category.\n */\n async CreateCategory(): Promise<void> {\n const ref = this.formPresenter.Open({\n EntityName: 'MJ: Query Categories',\n Presentation: 'slide-in',\n // Quick-create: drop the system-metadata (timestamps) section — empty\n // for a new record. Merges over the slide-in preset (toolbar still off).\n Config: { HiddenSectionKeys: ['systemMetadata'] },\n Provider: this.ProviderToUse,\n });\n const saved = await ref.AfterSaved();\n if (saved) {\n this.OnCategoryCreated(saved);\n }\n }\n\n /** @deprecated Use {@link CreateCategory}. */\n async createCategory(): Promise<void> {\n return this.CreateCategory();\n }\n\n /**\n * Edit the currently-selected category in a slide-in via the generic\n * MJFormPresenterService. `StartInEditMode` opens the existing record\n * editable. On save, refresh the category tree.\n */\n async EditSelectedCategory(): Promise<void> {\n if (!this.record.CategoryID) return;\n const ref = this.formPresenter.Open({\n EntityName: 'MJ: Query Categories',\n RecordId: this.record.CategoryID,\n Presentation: 'slide-in',\n // Open editable + drop the system-metadata section. Partial config\n // merges over the slide-in preset, so the toolbar stays suppressed.\n Config: { StartInEditMode: true, HiddenSectionKeys: ['systemMetadata'] },\n Provider: this.ProviderToUse,\n });\n const saved = await ref.AfterSaved();\n if (saved) {\n this.LoadCategories();\n this.cdr.detectChanges();\n }\n }\n\n /** @deprecated Use {@link EditSelectedCategory}. */\n async editSelectedCategory(): Promise<void> {\n return this.EditSelectedCategory();\n }\n\n OnCategoryCreated(newCategory: BaseEntity) {\n // Reload categories to include the new one\n this.LoadCategories();\n\n // Set the new category as selected\n this.record.CategoryID = (newCategory as MJQueryCategoryEntity).ID;\n\n // Trigger change detection\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link OnCategoryCreated}. */\n onCategoryCreated(newCategory: BaseEntity) {\n return this.OnCategoryCreated(newCategory);\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 // An entity link with no entity chosen yet is not saved with the query.\n for (const link of [...this.record.DeclaredEntities.Items]) {\n if (!link.IsSaved && !link.EntityID) this.record.DeclaredEntities.Remove(link);\n }\n\n // One graph save: the query row and its declared parameters, fields and entity links are\n // written together, so the server's extraction sees the children in the same transaction.\n const result = await super.SaveRecord(StopEditModeAfterSave);\n\n if (result) {\n this.clearSaveDiagnostics();\n // The server re-derives facts after the save, so reload the rows as now stored.\n await this.loadDeclaredChildren(true);\n this.updateCategoryPathDisplay();\n this.applyEditorMarkers();\n this.cdr.detectChanges();\n } else {\n this.showSaveDiagnostics();\n }\n\n return result;\n }\n\n /**\n * Saves the query with its declared parameters, fields and entity links as one graph save, then\n * any permission rows the permissions grid queued, in a transaction group of their own.\n *\n * The base form enrols the record in a transaction group whenever rows are queued, and a graph\n * save cannot run inside one (the group defers the query's own write, so its children would be\n * written against a row that does not exist yet). The query is therefore written first; if a\n * permission row then fails, the query stays saved and the save reports the failure.\n */\n protected override async InternalSaveRecord(): Promise<boolean> {\n if (!this.record) return false;\n if (!(await this.record.Save())) return false;\n return this.savePendingRows();\n }\n\n private async savePendingRows(): Promise<boolean> {\n const pending = this.PendingRecords;\n if (pending.length === 0) return true;\n const tg = await this.ProviderToUse.CreateTransactionGroup();\n try {\n for (const item of pending) {\n item.entityObject.TransactionGroup = tg;\n if (item.action === 'save') await item.entityObject.Save();\n else await item.entityObject.Delete();\n }\n return await tg.Submit();\n } finally {\n // A member left in a submitted group would queue its next write into a group that is done.\n for (const item of pending) {\n if (item.entityObject.TransactionGroup === tg) item.entityObject.TransactionGroup = null;\n }\n }\n }\n\n // ─── Save-time diagnostics and extraction status ────────────────────────────\n\n /** Why the last save was refused, one finding per rule the SQL broke; empty after a successful save. */\n public SaveDiagnostics: QueryDiagnosticLine[] = [];\n /** The refusal's headline, e.g. `Query \"X\" was not saved:`. */\n public SaveDiagnosticsHeadline: string | null = null;\n\n /** The findings of the query's last metadata extraction (`ExtractionMessage`), one per line. */\n public get ExtractionDiagnostics(): QueryDiagnosticLine[] {\n return ParseQueryDiagnostics(this.record?.ExtractionMessage);\n }\n\n /** The extraction status as the badge shows it. */\n public get ExtractionStatusLabel(): string {\n return this.record?.ExtractionStatus ?? 'Not extracted';\n }\n\n /** CSS modifier for the extraction status badge. */\n public get ExtractionStatusClass(): string {\n return `extraction-badge--${(this.record?.ExtractionStatus ?? 'none').toLowerCase()}`;\n }\n\n /** How serious the extraction message is, for the diagnostics list. */\n public get ExtractionSeverity(): 'error' | 'warning' | 'info' {\n return ExtractionSeverityOf(this.record?.ExtractionStatus);\n }\n\n private showSaveDiagnostics(): void {\n const refusal = SaveRefusalOf(this.record.LatestResult?.Message || this.record.LatestResult?.CompleteMessage);\n this.SaveDiagnostics = refusal ? [...refusal.Diagnostics] : [];\n this.SaveDiagnosticsHeadline = refusal?.Headline ?? null;\n if (refusal) this.SqlPanelExpanded = true;\n this.applyEditorMarkers();\n this.cdr.detectChanges();\n }\n\n private clearSaveDiagnostics(): void {\n this.SaveDiagnostics = [];\n this.SaveDiagnosticsHeadline = null;\n }\n\n /**\n * Marks findings in the SQL editor: a refused save's findings as errors while there are any,\n * otherwise the last extraction's findings that carry a location.\n */\n private applyEditorMarkers(): void {\n this.SqlEditor?.SetDiagnosticMarkers(EditorMarkersFor(this.SaveDiagnostics, this.ExtractionDiagnostics, this.record?.ExtractionStatus));\n }\n\n /** A finding's location was clicked: show that place in the SQL editor. */\n public OnDiagnosticLocationClick(diagnostic: QueryDiagnosticLine): void {\n if (diagnostic.Line === null || diagnostic.Column === null) return;\n this.SqlPanelExpanded = true;\n this.cdr.detectChanges();\n this.SqlEditor?.RevealPosition(diagnostic.Line, diagnostic.Column);\n }\n\n // ─── Refresh metadata ───────────────────────────────────────────────────────\n\n public ShowRefreshDialog = false;\n\n /** This query, as the refresh dialog's scope. */\n public get RefreshScope(): QueryRefreshScope | null {\n return this.record?.IsSaved ? { Kind: 'Queries', QueryIDs: [this.record.ID] } : null;\n }\n\n /** Names this query in the refresh dialog. */\n public get RefreshScopeLabel(): string {\n return `Query “${this.record?.Name ?? ''}”`;\n }\n\n /** Whether the user may refresh this query's metadata: a saved query, not being edited, and Update permission on queries. */\n public get CanRefreshMetadata(): boolean {\n if (!this.record?.IsSaved || this.EditMode) return false;\n const user = this.ProviderToUse.CurrentUser;\n return !!user && !!this.record.EntityInfo?.GetUserPermisions(user)?.CanUpdate;\n }\n\n public OpenRefreshDialog(): void {\n this.ShowRefreshDialog = true;\n this.cdr.detectChanges();\n }\n\n public OnRefreshDialogClosed(): void {\n this.ShowRefreshDialog = false;\n this.cdr.detectChanges();\n }\n\n /** A refresh was applied: reload the query row (its extraction status) and its child rows. */\n public async OnRefreshApplied(_output: QueryRefreshExtractionOutput): Promise<void> {\n try {\n await this.record.Load(this.record.ID);\n } catch (error) {\n console.error('Error reloading the query after a refresh:', error);\n }\n await this.loadDeclaredChildren(true);\n this.applyEditorMarkers();\n this.cdr.detectChanges();\n }\n\n /** Opens a query named in the refresh report. */\n public OnRefreshOpenQuery(queryID: string): void {\n this.navigationService.OpenEntityRecord('MJ: Queries', CompositeKey.FromID(queryID));\n }\n\n /** Opens the entity field a query column comes from. */\n public OnOpenSourceField(entityFieldID: string): void {\n this.navigationService.OpenEntityRecord('MJ: Entity Fields', CompositeKey.FromID(entityFieldID));\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 /** @deprecated Use {@link GetStatusBadgeColor}. */\n getStatusBadgeColor(): string {\n return this.GetStatusBadgeColor();\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 /** @deprecated Use {@link GetStatusBannerIcon}. */\n getStatusBannerIcon(): string {\n return this.GetStatusBannerIcon();\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 /** @deprecated Use {@link GetStatusBannerMessage}. */\n getStatusBannerMessage(): string {\n return this.GetStatusBannerMessage();\n }\n\n /**\n * Handle composition token click — navigate to the referenced query\n */\n OnCompositionTokenClick(event: CompositionTokenClickEvent): void {\n const allQueries = QueryEngine.Instance.Queries;\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 = allQueries.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 = allQueries.find(q => q.Name === queryName);\n }\n\n if (targetQuery) {\n this.navigationService.OpenEntityRecord('MJ: Queries', CompositeKey.FromID(targetQuery.ID));\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Referenced query \"${event.FullPath}\" not found.`,\n 'warning',\n 3000\n );\n }\n }\n\n /** @deprecated Use {@link OnCompositionTokenClick}. */\n onCompositionTokenClick(event: CompositionTokenClickEvent): void {\n return this.OnCompositionTokenClick(event);\n }\n\n /**\n * Navigate to a dependent query's record\n */\n OnDependentQueryClick(dep: MJQueryDependencyEntity): void {\n this.navigationService.OpenEntityRecord('MJ: Queries', CompositeKey.FromID(dep.QueryID));\n }\n\n /** @deprecated Use {@link OnDependentQueryClick}. */\n onDependentQueryClick(dep: MJQueryDependencyEntity): void {\n return this.OnDependentQueryClick(dep);\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 /** @deprecated Use {@link OnSQLChange}. */\n onSQLChange(value: string) {\n return this.OnSQLChange(value);\n }\n\n /**\n * Adds a field the user declares, by name. Its facts (type, nullability, source) come from the\n * database server when the query is saved; the user supplies the annotations.\n */\n async AddField() {\n try {\n const field = await this.record.DeclaredFields.Create();\n field.Name = `field${this.QueryFields.length + 1}`;\n field.Description = '';\n field.Sequence = this.QueryFields.length + 1;\n field.SQLBaseType = 'nvarchar';\n field.SQLFullType = 'nvarchar(255)';\n field.DetectionMethod = 'Manual';\n this.FieldsPanelExpanded = true;\n this.refreshChildLists();\n } catch (error) {\n console.error('Error adding field:', error);\n MJNotificationService.Instance.CreateSimpleNotification('Failed to add field', 'error', 3000);\n }\n }\n\n /** @deprecated Use {@link AddField}. */\n async addField() {\n return this.AddField();\n }\n\n /**\n * Removes a field. A stored one is deleted when the query is saved.\n */\n async DeleteField(field: MJQueryFieldEntity) {\n if (!(await this.confirmService.ConfirmDelete({ title: 'Remove Field', message: `Remove field \"${field.Name}\"? It is deleted when you save the query.` }))) {\n return;\n }\n this.removeChildRow(this.record.DeclaredFields.Items, row => this.record.DeclaredFields.Remove(row), field);\n }\n\n /** @deprecated Use {@link DeleteField}. */\n async deleteField(field: MJQueryFieldEntity) {\n return this.DeleteField(field);\n }\n\n /**\n * Adds an entity link the user declares. It is written with the query when the query is saved.\n */\n async AddEntity() {\n try {\n const entity = await this.record.DeclaredEntities.Create();\n entity.DetectionMethod = 'Manual';\n this.EntitiesPanelExpanded = true;\n this.refreshChildLists();\n } catch (error) {\n console.error('Error adding entity:', error);\n MJNotificationService.Instance.CreateSimpleNotification('Failed to add entity', 'error', 3000);\n }\n }\n\n /** @deprecated Use {@link AddEntity}. */\n async addEntity() {\n return this.AddEntity();\n }\n\n /**\n * Removes an entity link. A stored one is deleted when the query is saved.\n */\n async DeleteEntity(entity: MJQueryEntityEntity) {\n if (!(await this.confirmService.ConfirmDelete({ title: 'Remove Entity', message: `Remove entity \"${entity.Entity || 'this entity'}\"? It is deleted when you save the query.` }))) {\n return;\n }\n this.removeChildRow(this.record.DeclaredEntities.Items, row => this.record.DeclaredEntities.Remove(row), entity);\n }\n\n /** @deprecated Use {@link DeleteEntity}. */\n async deleteEntity(entity: MJQueryEntityEntity) {\n return this.DeleteEntity(entity);\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 /** @deprecated Use {@link GetEntityOptions}. */\n getEntityOptions(): Array<{text: string, id: string}> {\n return this.GetEntityOptions();\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 <div class=\"meta-dropdown-row\">\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 <button mjButton variant=\"icon\" title=\"New category\" (click)=\"createCategory()\">\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n @if (record.CategoryID) {\n <button mjButton variant=\"icon\" title=\"Edit category\" (click)=\"editSelectedCategory()\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n </div>\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\n <!-- Metadata extraction status -->\n @if (record.IsSaved) {\n <div class=\"query-meta-item\">\n <label class=\"meta-label\">Metadata</label>\n <div class=\"meta-dropdown-row\">\n <span class=\"extraction-badge\" [class]=\"'extraction-badge ' + ExtractionStatusClass\"\n [title]=\"'Last metadata extraction: ' + ExtractionStatusLabel\">\n {{ ExtractionStatusLabel }}\n </span>\n @if (CanRefreshMetadata) {\n <button mjButton Variant=\"outline\" Size=\"sm\" type=\"button\" class=\"refresh-metadata-btn\"\n (click)=\"OpenRefreshDialog()\" title=\"Re-derive the fields, parameters and entities from the SQL and the database server\">\n <i class=\"fa-solid fa-rotate\"></i> Refresh metadata\n </button>\n }\n </div>\n </div>\n }\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 <mj-alert Variant=\"warning\">\n <span>\n This query has status <strong>{{ record.Status }}</strong>. {{ getStatusBannerMessage() }}\n </span>\n </mj-alert>\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\">— 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 @if (SaveDiagnostics.length > 0 || SaveDiagnosticsHeadline) {\n <mj-query-diagnostics class=\"save-diagnostics\"\n [Headline]=\"SaveDiagnosticsHeadline\"\n [Diagnostics]=\"SaveDiagnostics\"\n Severity=\"error\"\n [LocationsClickable]=\"true\"\n (LocationClick)=\"OnDiagnosticLocationClick($event)\" />\n }\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 @if (SaveDiagnostics.length === 0 && ExtractionDiagnostics.length > 0) {\n <mj-query-diagnostics class=\"extraction-diagnostics\"\n [Headline]=\"'Last metadata extraction: ' + ExtractionStatusLabel\"\n [Diagnostics]=\"ExtractionDiagnostics\"\n [Severity]=\"ExtractionSeverity\"\n [LocationsClickable]=\"true\"\n (LocationClick)=\"OnDiagnosticLocationClick($event)\" />\n }\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\">— 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 || EditMode) {\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 <mj-empty-state Icon=\"fa-solid fa-sliders\"\n Title=\"No Parameters Defined\"\n Message=\"Parameters are found in the SQL when you save. Add one here to describe it before it is used.\"\n [ActionText]=\"EditMode ? 'Add First Parameter' : ''\"\n ActionIcon=\"fa-solid fa-plus\"\n (Action)=\"addParameter()\" />\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 <mj-query-parameters-grid\n [Parameters]=\"queryParameters\"\n [EditMode]=\"EditMode\"\n (Remove)=\"deleteParameter($event)\"\n (Changed)=\"OnChildRowChanged()\" />\n }\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Query Fields Panel -->\n @if (record.IsSaved || EditMode) {\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 <mj-empty-state Icon=\"fa-solid fa-table\"\n Title=\"No Fields Defined\"\n Message=\"Output fields are described by the database server when you save. Add one here to annotate it.\"\n [ActionText]=\"EditMode ? 'Add First Field' : ''\"\n ActionIcon=\"fa-solid fa-plus\"\n (Action)=\"addField()\" />\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 <mj-query-fields-grid\n [Fields]=\"queryFields\"\n [EditMode]=\"EditMode\"\n (Remove)=\"deleteField($event)\"\n (OpenSourceField)=\"OnOpenSourceField($event)\"\n (Changed)=\"OnChildRowChanged()\" />\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 || EditMode) {\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 <mj-empty-state Icon=\"fa-solid fa-database\"\n Title=\"No Entities Tracked\"\n Message=\"Track which entities this query uses for documentation.\"\n [ActionText]=\"EditMode ? 'Add First Entity' : ''\"\n ActionIcon=\"fa-solid fa-plus\"\n (Action)=\"addEntity()\" />\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 || $index) {\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 || $index)\"\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 @if (entity.DetectionMethod) {\n <span class=\"meta-tag\" title=\"How this entity link was detected\">\n <strong>Detected by:</strong> {{ entity.DetectionMethod }}\n </span>\n }\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 <mj-empty-state Icon=\"fa-solid fa-shield-halved\"\n Title=\"No Permissions Set\"\n Message=\"This query uses default permissions.\" />\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<!-- Refresh metadata: always a dry run first unless the user turned that off -->\n<mj-query-refresh-dialog\n [Visible]=\"ShowRefreshDialog\"\n [Scope]=\"RefreshScope\"\n [ScopeLabel]=\"RefreshScopeLabel\"\n [AllowSkipDryRun]=\"true\"\n [Provider]=\"ProviderToUse\"\n (Closed)=\"OnRefreshDialogClosed()\"\n (Applied)=\"OnRefreshApplied($event)\" />\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"]}
|