@memberjunction/ng-core-entity-forms 5.9.0 → 5.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/custom/Queries/query-form.component.d.ts +1 -0
- package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +354 -284
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +2 -1
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +7 -3
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +19 -21
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
- package/package.json +31 -30
|
@@ -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 } from '@angular/core';\nimport { MJQueryEntity, MJQueryParameterEntity, MJQueryCategoryEntity, MJQueryFieldEntity, MJQueryEntityEntity, MJQueryPermissionEntity } from '@memberjunction/core-entities';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseFormComponent } from '@memberjunction/ng-base-forms';\nimport { MJQueryFormComponent } from '../../generated/Entities/MJQuery/mjquery.form.component';\nimport { Metadata, RunView, RUN_QUERY_SQL_FILTERS } from '@memberjunction/core';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { CodeEditorComponent } from '@memberjunction/ng-code-editor';\nimport { Subject } from 'rxjs';\n\ninterface CategoryTreeNode {\n id: string;\n name: string;\n items?: CategoryTreeNode[];\n}\n\n@RegisterClass(BaseFormComponent, 'MJ: Queries')\n@Component({\n standalone: false,\n selector: 'mj-query-form',\n templateUrl: './query-form.component.html',\n styleUrls: ['../../../shared/form-styles.css', './query-form.component.css']\n})\nexport class MJQueryFormComponentExtended extends MJQueryFormComponent implements OnInit, OnDestroy, AfterViewInit {\n public record!: MJQueryEntity;\n public queryParameters: MJQueryParameterEntity[] = [];\n public queryFields: MJQueryFieldEntity[] = [];\n public queryEntities: MJQueryEntityEntity[] = [];\n public queryPermissions: MJQueryPermissionEntity[] = [];\n public isLoadingParameters = false;\n public isLoadingFields = false;\n public isLoadingEntities = false;\n public isLoadingPermissions = false;\n public hasUnsavedChanges = false;\n public showFiltersHelp = false;\n public showRunDialog = false;\n public showCategoryDialog = false;\n \n // Expansion panel states\n public sqlPanelExpanded = true;\n public parametersPanelExpanded = false;\n public fieldsPanelExpanded = false;\n public entitiesPanelExpanded = false;\n public detailsPanelExpanded = false;\n public permissionsPanelExpanded = false;\n \n // Category data\n public categoryOptions: Array<{text: string, value: string}> = [\n { text: 'Select Category...', value: '' }\n ];\n public categories: MJQueryCategoryEntity[] = [];\n public categoryTreeData: CategoryTreeNode[] = [];\n \n // 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 @ViewChild('sqlEditor') sqlEditor: CodeEditorComponent | null = null;\n \n // SQL Filters for help display\n public sqlFilters = RUN_QUERY_SQL_FILTERS;\n \n private destroy$ = new Subject<void>();\n private isUpdatingEditorValue = false;\n private isInitialLoad = true;\n\n async ngOnInit() {\n await super.ngOnInit();\n\n // During init, suppress per-method detectChanges to avoid NG0100.\n // We do one unified detectChanges after everything completes.\n this.isInitialLoad = true;\n\n // Load categories first to ensure they're available for the dropdown\n await this.loadCategories();\n\n // Then load other data in parallel\n await Promise.all([\n this.loadQueryParameters(),\n this.loadQueryFields(),\n this.loadQueryEntities(),\n this.loadQueryPermissions()\n ]);\n\n this.isInitialLoad = false;\n this.cdr.detectChanges();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n ngAfterViewInit() {\n super.ngAfterViewInit();\n\n this.sqlEditor?.setEditable(this.EditMode);\n\n // Set initial SQL value in the editor\n this.updateEditorValue();\n }\n \n override EndEditMode(): void {\n super.EndEditMode();\n this.sqlEditor?.setEditable(false);\n }\n\n override StartEditMode(): void {\n super.StartEditMode();\n this.sqlEditor?.setEditable(true);\n \n // Force change detection after a brief delay to ensure form controls are initialized\n setTimeout(() => {\n this.cdr.detectChanges();\n }, 50);\n }\n\n override CancelEdit(): void {\n super.CancelEdit();\n this.updateEditorValue(); // Reset editor value to record SQL\n this.sqlEditor?.setEditable(false);\n this.updateUnsavedChangesFlag(); // Reset unsaved changes flag\n }\n\n private updateEditorValue() {\n if (!this.sqlEditor || this.isUpdatingEditorValue) {\n return;\n }\n \n // Use setTimeout to avoid ExpressionChangedAfterItHasBeenCheckedError\n setTimeout(() => {\n if (!this.sqlEditor) {\n return;\n }\n \n this.isUpdatingEditorValue = true;\n const sqlValue = this.record?.SQL || '';\n \n // Use the setValue method from mj-code-editor component\n this.sqlEditor.setValue(sqlValue);\n this.isUpdatingEditorValue = false;\n }, 0);\n }\n\n public isFormReadOnly(): boolean {\n return !this.EditMode;\n }\n\n async loadQueryParameters() {\n if (this.record && this.record.ID) {\n this.isLoadingParameters = true;\n try {\n const rv = new RunView();\n const results = await rv.RunView<MJQueryParameterEntity>({\n EntityName: 'MJ: Query Parameters',\n ExtraFilter: `QueryID='${this.record.ID}'`,\n OrderBy: 'Name ASC',\n ResultType: 'entity_object'\n });\n \n if (results.Success) {\n this.queryParameters = results.Results || [];\n }\n } catch (error) {\n console.error('Error loading query parameters:', error);\n } finally {\n this.isLoadingParameters = false;\n if (!this.isInitialLoad) this.cdr.detectChanges();\n }\n }\n }\n\n async loadQueryFields() {\n if (this.record && this.record.ID) {\n this.isLoadingFields = true;\n try {\n const rv = new RunView();\n const results = await rv.RunView<MJQueryFieldEntity>({\n EntityName: 'MJ: Query Fields',\n ExtraFilter: `QueryID='${this.record.ID}'`,\n OrderBy: 'Sequence ASC, Name ASC',\n ResultType: 'entity_object'\n });\n \n if (results.Success) {\n this.queryFields = results.Results || [];\n }\n } catch (error) {\n console.error('Error loading query fields:', error);\n } finally {\n this.isLoadingFields = false;\n if (!this.isInitialLoad) this.cdr.detectChanges();\n }\n }\n }\n\n async loadQueryEntities() {\n if (this.record && this.record.ID) {\n this.isLoadingEntities = true;\n try {\n const rv = new RunView();\n const results = await rv.RunView<MJQueryEntityEntity>({\n EntityName: 'MJ: Query Entities',\n ExtraFilter: `QueryID='${this.record.ID}'`,\n OrderBy: 'Entity ASC',\n ResultType: 'entity_object'\n });\n \n if (results.Success) {\n this.queryEntities = results.Results || [];\n console.log('Loaded query entities:', this.queryEntities);\n }\n } catch (error) {\n console.error('Error loading query entities:', error);\n } finally {\n this.isLoadingEntities = false;\n if (!this.isInitialLoad) this.cdr.detectChanges();\n }\n }\n }\n\n async loadQueryPermissions() {\n if (this.record && this.record.ID) {\n this.isLoadingPermissions = true;\n try {\n const rv = new RunView();\n const results = await rv.RunView<MJQueryPermissionEntity>({\n EntityName: 'MJ: Query Permissions',\n ExtraFilter: `QueryID='${this.record.ID}'`,\n OrderBy: 'Role ASC',\n ResultType: 'entity_object'\n });\n \n if (results.Success) {\n this.queryPermissions = results.Results || [];\n }\n } catch (error) {\n console.error('Error loading query permissions:', error);\n } finally {\n this.isLoadingPermissions = false;\n if (!this.isInitialLoad) this.cdr.detectChanges();\n }\n }\n }\n\n async loadCategories() {\n try {\n const rv = new RunView();\n const results = await rv.RunView<MJQueryCategoryEntity>({\n EntityName: 'MJ: Query Categories',\n OrderBy: 'Name',\n ResultType: 'entity_object'\n });\n \n if (results.Success && results.Results) {\n this.categories = results.Results;\n \n // Build flat options for legacy compatibility\n this.categoryOptions = [\n { text: 'Select Category...', value: '' },\n ...this.categories.map(cat => ({\n text: cat.Name,\n value: cat.ID\n }))\n ];\n \n // Build tree data after options are set\n this.categoryTreeData = this.buildCategoryTree(this.categories);\n \n // Trigger change detection to update the view (skip during init)\n if (!this.isInitialLoad) this.cdr.detectChanges();\n }\n } catch (error) {\n console.error('Error loading categories:', error);\n this.categoryOptions = [{ text: 'Select Category...', value: '' }];\n this.categoryTreeData = [];\n }\n }\n \n private buildCategoryTree(categories: MJQueryCategoryEntity[]): CategoryTreeNode[] {\n const categoryMap = new Map<string, CategoryTreeNode>();\n const rootCategories: CategoryTreeNode[] = [];\n \n // Create nodes for all categories\n categories.forEach(cat => {\n categoryMap.set(cat.ID, {\n id: cat.ID,\n name: cat.Name,\n items: []\n });\n });\n \n // Build the tree structure\n categories.forEach(cat => {\n const node = categoryMap.get(cat.ID)!;\n if (cat.ParentID && categoryMap.has(cat.ParentID)) {\n const parent = categoryMap.get(cat.ParentID)!;\n if (!parent.items) parent.items = [];\n parent.items.push(node);\n } else {\n rootCategories.push(node);\n }\n });\n \n // Sort children alphabetically\n const sortNodes = (nodes: CategoryTreeNode[]) => {\n nodes.sort((a, b) => a.name.localeCompare(b.name));\n nodes.forEach(node => {\n if (node.items && node.items.length > 0) {\n sortNodes(node.items);\n }\n });\n };\n sortNodes(rootCategories);\n \n return rootCategories;\n }\n \n getCategoryPath(): string {\n if (!this.record.CategoryID) return '';\n \n const findPath = (categoryId: string): string[] => {\n const category = this.categories.find(c => UUIDsEqual(c.ID, categoryId));\n if (!category) return [];\n \n if (category.ParentID) {\n return [...findPath(category.ParentID), category.Name];\n }\n return [category.Name];\n };\n \n return findPath(this.record.CategoryID).join(' / ');\n }\n\n async onCategoryChange(value: string) {\n // If it's a new category (string but not in existing options)\n if (value && !this.categoryOptions.find(opt => opt.value === value)) {\n // Check for duplicate category names (case-insensitive, trimmed)\n if (this.isDuplicateCategory(value)) {\n const existingCategory = this.categoryOptions.find(option => \n option.text && option.text.trim().toLowerCase() === value.trim().toLowerCase()\n );\n if (existingCategory) {\n // Use the existing category instead\n this.record.CategoryID = existingCategory.value;\n MJNotificationService.Instance.CreateSimpleNotification(\n `Category \"${existingCategory.text}\" already exists. Using existing category.`, \n 'warning',\n 3000\n );\n }\n return;\n }\n\n try {\n // Create new category with trimmed name\n const md = new Metadata();\n const newCategory = await md.GetEntityObject<MJQueryCategoryEntity>('MJ: Query Categories');\n newCategory.Name = value.trim();\n const saved = await newCategory.Save();\n \n if (saved) {\n // Add to options and set the ID\n this.categoryOptions.push({\n text: newCategory.Name,\n value: newCategory.ID\n });\n this.record.CategoryID = newCategory.ID;\n MJNotificationService.Instance.CreateSimpleNotification(\n `New category \"${newCategory.Name}\" created successfully.`, \n 'success',\n 3000\n );\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to create new category. ${newCategory.LatestResult?.Message || ''}`, \n 'error',\n 3000\n );\n }\n } catch (error) {\n console.error('Error creating new category:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error creating new category. Please try again.', \n 'error',\n 3000\n );\n }\n }\n }\n\n private isDuplicateCategory(categoryName: string): boolean {\n const normalizedName = categoryName?.trim().toLowerCase();\n return this.categoryOptions.some(option => \n option.text && option.text.trim().toLowerCase() === normalizedName\n );\n }\n\n /**\n * Updates the hasUnsavedChanges flag based on entity dirty states\n */\n private updateUnsavedChangesFlag() {\n this.hasUnsavedChanges = this.queryParameters.some(param => param.Dirty) || \n this.record?.Dirty || false;\n }\n\n toggleFiltersHelp() {\n this.showFiltersHelp = !this.showFiltersHelp;\n }\n\n /**\n * Run the query with parameter dialog\n */\n async runQuery() {\n if (!this.record?.IsSaved) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Please save the query before running it.', \n 'warning',\n 3000\n );\n return;\n }\n\n // Save any unsaved changes first\n if (this.hasUnsavedChanges) {\n const saveResult = await this.SaveRecord(false); // Don't exit edit mode\n if (!saveResult) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to save query changes.', \n 'error',\n 3000\n );\n return;\n }\n }\n\n // Warn if query is not approved\n if (this.record.Status !== 'Approved') {\n console.warn(`Executing query '${this.record.Name}' with status '${this.record.Status}'. Query has not been approved.`);\n }\n\n // Reload parameters in case they were updated\n await this.loadQueryParameters();\n\n // Show the run dialog — set before detectChanges to avoid NG0100\n this.showRunDialog = true;\n this.cdr.detectChanges();\n }\n\n /**\n * Handle run dialog close\n */\n onRunDialogClose() {\n this.showRunDialog = false;\n }\n \n /**\n * Add a new parameter\n */\n async addParameter() {\n try {\n const md = new Metadata();\n const newParam = await md.GetEntityObject<MJQueryParameterEntity>('MJ: Query Parameters');\n newParam.QueryID = this.record.ID;\n newParam.Name = `param${this.queryParameters.length + 1}`;\n newParam.Type = 'string';\n newParam.IsRequired = false;\n \n const saved = await newParam.Save();\n if (saved) {\n this.queryParameters.push(newParam);\n this.updateUnsavedChangesFlag();\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Parameter added successfully',\n 'success',\n 3000\n );\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to add parameter',\n 'error',\n 3000\n );\n }\n } catch (error) {\n console.error('Error adding parameter:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error adding parameter',\n 'error',\n 3000\n );\n }\n }\n \n /**\n * Edit a parameter\n */\n async editParameter(param: MJQueryParameterEntity) {\n // TODO: Show parameter edit dialog\n console.log('Edit parameter:', param);\n }\n \n /**\n * Delete a parameter\n */\n async deleteParameter(param: MJQueryParameterEntity) {\n if (!confirm(`Are you sure you want to delete parameter \"${param.Name}\"?`)) {\n return;\n }\n \n try {\n const deleted = await param.Delete();\n if (deleted) {\n const index = this.queryParameters.indexOf(param);\n if (index > -1) {\n this.queryParameters.splice(index, 1);\n }\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Parameter deleted successfully',\n 'success',\n 3000\n );\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to delete parameter',\n 'error',\n 3000\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 /**\n * Handle category creation from dialog\n */\n async onCategoryCreated(newCategory: MJQueryCategoryEntity) {\n // Reload categories to include the new one\n await this.loadCategories();\n \n // Set the new category as selected\n this.record.CategoryID = newCategory.ID;\n \n // Trigger change detection\n this.cdr.detectChanges();\n }\n \n /**\n * Format date for display\n */\n formatDate(date: Date | string | null): string {\n if (!date) return '-';\n const d = typeof date === 'string' ? new Date(date) : date;\n return d.toLocaleDateString() + ' ' + d.toLocaleTimeString();\n }\n\n async SaveRecord(StopEditModeAfterSave: boolean = true): Promise<boolean> {\n // Handle category creation before saving query\n if (this.record.CategoryID && !this.categoryOptions.find(opt => opt.value === this.record.CategoryID)) {\n if (this.isDuplicateCategory(this.record.CategoryID)) {\n const existingCategory = this.categoryOptions.find(option => \n option.text && option.text.trim().toLowerCase() === this.record.CategoryID?.trim().toLowerCase()\n );\n if (existingCategory) {\n this.record.CategoryID = existingCategory.value;\n MJNotificationService.Instance.CreateSimpleNotification(\n `Category \"${existingCategory.text}\" already exists. Using existing category.`, \n 'warning',\n 3000\n );\n }\n } else {\n try {\n const md = new Metadata();\n const newCategory = await md.GetEntityObject<MJQueryCategoryEntity>('MJ: Query Categories');\n newCategory.Name = this.record.CategoryID.trim();\n const saved = await newCategory.Save();\n \n if (saved) {\n this.categoryOptions.push({\n text: newCategory.Name,\n value: newCategory.ID\n });\n this.record.CategoryID = newCategory.ID;\n } else {\n console.error('Failed to create new category');\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to create new category. ${newCategory.LatestResult?.Message || ''}`, \n 'error'\n );\n return false;\n }\n } catch (error) {\n console.error('Error creating new category during save:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error creating new category during save. Please try again.', \n 'error'\n );\n return false;\n }\n }\n }\n\n // Save any unsaved query entities first\n if (this.EditMode) {\n for (const entity of this.queryEntities) {\n if (!entity.IsSaved && entity.EntityID) {\n try {\n await entity.Save();\n } catch (error) {\n console.error('Error saving query entity:', error);\n }\n }\n }\n }\n\n // Call the parent save method\n const result = await super.SaveRecord(StopEditModeAfterSave);\n \n if (result) {\n this.updateUnsavedChangesFlag();\n \n // Reload related data after successful save as server-side processes may have updated them\n if (this.record && this.record.ID) {\n await Promise.all([\n this.loadQueryParameters(),\n this.loadQueryFields(),\n this.loadQueryEntities()\n ]);\n this.cdr.detectChanges();\n }\n }\n \n return result;\n }\n\n getStatusBadgeColor(): string {\n switch (this.record?.Status) {\n case 'Approved': return '#28a745';\n case 'Pending': return '#f59e0b';\n case 'Rejected': return '#dc3545';\n case 'Expired': return '#6c757d';\n default: return '#6c757d';\n }\n }\n\n getStatusBannerIcon(): string {\n switch (this.record?.Status) {\n case 'Pending': return 'fa-clock';\n case 'Rejected': return 'fa-times-circle';\n case 'Expired': return 'fa-archive';\n default: return 'fa-info-circle';\n }\n }\n\n getStatusBannerMessage(): string {\n switch (this.record?.Status) {\n case 'Pending': return 'It can be executed for testing but has not yet been approved.';\n case 'Rejected': return 'It was rejected and may need revision before approval.';\n case 'Expired': return 'It has expired and is no longer in active use.';\n default: return '';\n }\n }\n\n /**\n * Handle SQL value changes from the code editor\n */\n onSQLChange(value: any) {\n if (this.isUpdatingEditorValue || !this.record) {\n return;\n }\n \n // Update the record SQL value\n this.record.SQL = value;\n this.updateUnsavedChangesFlag();\n }\n\n /**\n * Add a new field\n */\n async addField() {\n try {\n const md = new Metadata();\n const newField = await md.GetEntityObject<MJQueryFieldEntity>('MJ: Query Fields');\n newField.QueryID = this.record.ID;\n newField.Name = `field${this.queryFields.length + 1}`;\n newField.Description = '';\n newField.Sequence = (this.queryFields.length + 1) * 10;\n newField.SQLBaseType = 'nvarchar';\n newField.SQLFullType = 'nvarchar(255)';\n \n const saved = await newField.Save();\n if (saved) {\n this.queryFields.push(newField);\n this.queryFields.sort((a, b) => (a.Sequence || 0) - (b.Sequence || 0));\n this.updateUnsavedChangesFlag();\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Field added successfully',\n 'success',\n 3000\n );\n }\n } catch (error) {\n console.error('Error adding field:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to add field',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Delete a field\n */\n async deleteField(field: MJQueryFieldEntity) {\n if (!confirm(`Are you sure you want to delete field \"${field.Name}\"?`)) {\n return;\n }\n \n try {\n const deleted = await field.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 }\n } catch (error) {\n console.error('Error deleting field:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to delete field',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Add a new entity\n */\n async addEntity() {\n try {\n const md = new Metadata();\n const newEntity = await md.GetEntityObject<MJQueryEntityEntity>('MJ: Query Entities');\n newEntity.QueryID = this.record.ID;\n \n // Add to the list immediately for UI responsiveness\n this.queryEntities.push(newEntity);\n this.updateUnsavedChangesFlag();\n } catch (error) {\n console.error('Error adding entity:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to add entity',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Delete an entity\n */\n async deleteEntity(entity: MJQueryEntityEntity) {\n if (!confirm(`Are you sure you want to delete entity \"${entity.Entity}\"?`)) {\n return;\n }\n \n try {\n const deleted = await entity.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 }\n } catch (error) {\n console.error('Error deleting entity:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to delete entity',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Get entity options for dropdown\n */\n getEntityOptions(): Array<{text: string, id: string}> {\n return Metadata.Provider.Entities.map(e => ({\n text: e.Name,\n id: e.ID\n })).sort((a, b) => a.text.localeCompare(b.text));\n }\n\n /**\n * Get the grid edit mode based on component edit mode\n */\n override GridEditMode(): \"None\" | \"Save\" | \"Queue\" {\n return this.EditMode ? \"Queue\" : \"None\";\n }\n\n}\n","<div class=\"record-form-container\" style=\"height: 100%; display: flex; flex-direction: column;\">\n @if (record) {\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n <mj-form-toolbar [Form]=\"this\"></mj-form-toolbar>\n\n <!-- Header Section -->\n <div class=\"query-header\">\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 <kendo-textbox [(ngModel)]=\"record.Name\"\n name=\"queryName\"\n placeholder=\"Enter query name...\"\n class=\"query-name-input\">\n </kendo-textbox>\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 kendoButton\n [themeColor]=\"'primary'\"\n [size]=\"'large'\"\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 <kendo-dropdownlist\n [(ngModel)]=\"record.CategoryID\"\n name=\"categoryId\"\n [data]=\"categoryOptions\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n placeholder=\"Select category...\"\n class=\"meta-dropdown\">\n </kendo-dropdownlist>\n } @else {\n <span class=\"meta-value\">{{ getCategoryPath() || '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 <kendo-dropdownlist\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 </kendo-dropdownlist>\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 <kendo-textarea [(ngModel)]=\"record.Description\"\n name=\"description\"\n [rows]=\"2\"\n placeholder=\"Enter query description...\"\n class=\"query-description-input\">\n </kendo-textarea>\n } @else {\n <p class=\"query-description-text\">{{ record.Description }}</p>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Status Warning Banner for Non-Approved Queries -->\n @if (record.Status && record.Status !== 'Approved' && !EditMode) {\n <div class=\"status-warning-banner\" [style.border-left-color]=\"getStatusBadgeColor()\">\n <i class=\"fa-solid\" [class]=\"getStatusBannerIcon()\"\n [style.color]=\"getStatusBadgeColor()\"></i>\n <span>\n This query has status <strong>{{ record.Status }}</strong>. {{ getStatusBannerMessage() }}\n </span>\n </div>\n }\n\n <!-- Main Content Area with Expansion Panels -->\n <div class=\"query-content\">\n\n <!-- SQL Query Panel -->\n <kendo-expansionpanel\n [(expanded)]=\"sqlPanelExpanded\"\n class=\"query-panel\">\n <ng-template kendoExpansionPanelTitleDirective>\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\">\n <i class=\"fa-solid fa-check\"></i> Defined\n </span>\n }\n </span>\n <button type=\"button\"\n kendoButton\n fillMode=\"flat\"\n size=\"small\"\n (click)=\"toggleFiltersHelp(); $event.stopPropagation()\"\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 </span>\n </ng-template>\n\n <div class=\"sql-panel-content\">\n <!-- Code Editor -->\n <mj-code-editor #sqlEditor\n (change)=\"onSQLChange($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 </kendo-expansionpanel>\n\n <!-- Parameters Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel\n [(expanded)]=\"parametersPanelExpanded\"\n class=\"query-panel\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-sliders panel-icon\"></i>\n Query Parameters\n @if (queryParameters.length > 0) {\n <span class=\"panel-badge count\">{{ queryParameters.length }}</span>\n }\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (isLoadingParameters) {\n <div class=\"panel-loading\">\n <mj-loading text=\"Loading parameters...\"></mj-loading>\n </div>\n } @else {\n @if (queryParameters.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-sliders empty-state-icon\"></i>\n <div class=\"empty-state-title\">No Parameters Defined</div>\n <div class=\"empty-state-text\">\n Add parameters to make your query dynamic and reusable.\n </div>\n @if (EditMode) {\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addParameter()\">\n <i class=\"fa-solid fa-plus\"></i> Add First Parameter\n </button>\n }\n </div>\n } @else {\n @if (EditMode) {\n <div class=\"panel-toolbar\">\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addParameter()\">\n <i class=\"fa-solid fa-plus\"></i> Add Parameter\n </button>\n </div>\n }\n <div class=\"card-grid\">\n @for (param of queryParameters; track param.ID || $index) {\n <div class=\"item-card\" [class.required]=\"param.IsRequired\" (click)=\"editParameter(param)\">\n <div class=\"item-card-header\">\n <div class=\"item-name\">\n <i class=\"fa-solid fa-at item-name-icon param-icon\"></i>\n {{ param.Name }}\n </div>\n <div class=\"item-badges\">\n @if (param.IsRequired) {\n <span class=\"item-badge required\">Required</span>\n }\n </div>\n </div>\n <div class=\"item-card-body\">\n @if (param.Description) {\n <div class=\"item-description\">{{ param.Description }}</div>\n }\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <strong>Type:</strong> {{ param.Type || 'Text' }}\n </span>\n @if (param.DefaultValue) {\n <span class=\"meta-tag\">\n <strong>Default:</strong>\n <code class=\"meta-code\">{{ param.DefaultValue }}</code>\n </span>\n }\n </div>\n </div>\n @if (EditMode) {\n <div class=\"item-actions\" (click)=\"$event.stopPropagation()\">\n <button type=\"button\" class=\"item-action-btn\" (click)=\"editParameter(param)\" title=\"Edit parameter\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n <button type=\"button\" class=\"item-action-btn delete\" (click)=\"deleteParameter(param)\" title=\"Delete parameter\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Query Fields Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel\n [(expanded)]=\"fieldsPanelExpanded\"\n class=\"query-panel\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-table panel-icon\"></i>\n Query Fields\n @if (queryFields.length > 0) {\n <span class=\"panel-badge count\">{{ queryFields.length }}</span>\n }\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (isLoadingFields) {\n <div class=\"panel-loading\">\n <mj-loading text=\"Loading fields...\"></mj-loading>\n </div>\n } @else {\n @if (queryFields.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-table empty-state-icon\"></i>\n <div class=\"empty-state-title\">No Fields Defined</div>\n <div class=\"empty-state-text\">\n Define output fields for your query results.\n </div>\n @if (EditMode) {\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addField()\">\n <i class=\"fa-solid fa-plus\"></i> Add First Field\n </button>\n }\n </div>\n } @else {\n @if (EditMode) {\n <div class=\"panel-toolbar\">\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addField()\">\n <i class=\"fa-solid fa-plus\"></i> Add Field\n </button>\n </div>\n }\n <div class=\"card-grid\">\n @for (field of queryFields; track field.ID) {\n <div class=\"item-card\">\n <div class=\"item-card-header\">\n <div class=\"item-name\">\n <i class=\"fa-solid fa-columns item-name-icon field-icon\"></i>\n {{ field.Name }}\n </div>\n <div class=\"item-badges\">\n <span class=\"item-badge type\">{{ field.SQLBaseType }}</span>\n @if (field.Sequence) {\n <span class=\"item-badge sequence\">#{{ field.Sequence }}</span>\n }\n </div>\n </div>\n <div class=\"item-card-body\">\n @if (field.Description) {\n <div class=\"item-description\">{{ field.Description }}</div>\n }\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <i class=\"fa-solid fa-code\"></i> {{ field.SQLFullType || field.SQLBaseType }}\n </span>\n </div>\n </div>\n @if (EditMode) {\n <div class=\"item-card-actions\">\n <button type=\"button\" class=\"item-action-btn delete\" (click)=\"deleteField(field)\" title=\"Delete field\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Query Entities Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel\n [(expanded)]=\"entitiesPanelExpanded\"\n class=\"query-panel\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-database panel-icon\"></i>\n Query Entities\n @if (queryEntities.length > 0) {\n <span class=\"panel-badge count\">{{ queryEntities.length }}</span>\n }\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (isLoadingEntities) {\n <div class=\"panel-loading\">\n <mj-loading text=\"Loading entities...\"></mj-loading>\n </div>\n } @else {\n @if (queryEntities.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-database empty-state-icon\"></i>\n <div class=\"empty-state-title\">No Entities Tracked</div>\n <div class=\"empty-state-text\">\n Track which entities this query uses for documentation.\n </div>\n @if (EditMode) {\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addEntity()\">\n <i class=\"fa-solid fa-plus\"></i> Add First Entity\n </button>\n }\n </div>\n } @else {\n @if (EditMode) {\n <div class=\"panel-toolbar\">\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addEntity()\">\n <i class=\"fa-solid fa-plus\"></i> Add Entity\n </button>\n </div>\n }\n <div class=\"card-grid\">\n @for (entity of queryEntities; track entity.ID) {\n <div class=\"item-card\">\n <div class=\"item-card-header\">\n <div class=\"item-name\">\n <i class=\"fa-solid fa-table item-name-icon entity-icon\"></i>\n {{ entity.Entity || 'Select Entity...' }}\n </div>\n @if (EditMode) {\n <div class=\"entity-dropdown-wrapper\">\n <kendo-dropdownlist\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 </kendo-dropdownlist>\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 </kendo-expansionpanel>\n }\n\n <!-- Details Panel -->\n <kendo-expansionpanel\n [(expanded)]=\"detailsPanelExpanded\"\n class=\"query-panel\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-info-circle panel-icon\"></i>\n Query Details\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n <div class=\"details-grid\">\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 <kendo-switch [(ngModel)]=\"record.UsesTemplate\" name=\"usesTemplate\"></kendo-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 </kendo-expansionpanel>\n\n <!-- Permissions Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel\n [(expanded)]=\"permissionsPanelExpanded\"\n class=\"query-panel\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-shield-alt panel-icon\"></i>\n Query Permissions\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (isLoadingPermissions) {\n <div class=\"panel-loading\">\n <mj-loading text=\"Loading permissions...\"></mj-loading>\n </div>\n } @else {\n @if (queryPermissions.length === 0 && !EditMode) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-shield-alt empty-state-icon\"></i>\n <div class=\"empty-state-title\">No Permissions Set</div>\n <div class=\"empty-state-text\">\n This query uses default permissions.\n </div>\n </div>\n } @else {\n @if (EditMode) {\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Query Permissions','QueryID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Query Permissions')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n } @else {\n <div class=\"permissions-list\">\n @for (permission of queryPermissions; track permission.ID) {\n <div class=\"permission-card\">\n <i class=\"fa-solid fa-users permission-icon\"></i>\n <div class=\"permission-info\">\n <div class=\"permission-role\">{{ permission.Role }}</div>\n <div class=\"permission-type\">Role Permission</div>\n </div>\n <span class=\"permission-badge\">\n <i class=\"fa-solid fa-play\"></i> Can Execute\n </span>\n </div>\n }\n </div>\n }\n }\n }\n </div>\n </kendo-expansionpanel>\n }\n </div>\n </form>\n\n <!-- Query Run Dialog -->\n <mj-query-run-dialog\n [query]=\"record\"\n [parameters]=\"queryParameters\"\n [(isVisible)]=\"showRunDialog\"\n (onClose)=\"onRunDialogClose()\">\n </mj-query-run-dialog>\n\n <!-- Category Creation Dialog -->\n <mj-query-category-dialog\n [(isVisible)]=\"showCategoryDialog\"\n (onCategoryCreated)=\"onCategoryCreated($event)\">\n </mj-query-category-dialog>\n }\n</div>\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 } from '@angular/core';\nimport { MJQueryEntity, MJQueryParameterEntity, MJQueryCategoryEntity, MJQueryFieldEntity, MJQueryEntityEntity, MJQueryPermissionEntity } from '@memberjunction/core-entities';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseFormComponent } from '@memberjunction/ng-base-forms';\nimport { MJQueryFormComponent } from '../../generated/Entities/MJQuery/mjquery.form.component';\nimport { Metadata, RunView, RUN_QUERY_SQL_FILTERS } from '@memberjunction/core';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { CodeEditorComponent } from '@memberjunction/ng-code-editor';\nimport { Subject } from 'rxjs';\n\ninterface CategoryTreeNode {\n id: string;\n name: string;\n items?: CategoryTreeNode[];\n}\n\n@RegisterClass(BaseFormComponent, 'MJ: Queries')\n@Component({\n standalone: false,\n selector: 'mj-query-form',\n templateUrl: './query-form.component.html',\n styleUrls: ['../../../shared/form-styles.css', './query-form.component.css']\n})\nexport class MJQueryFormComponentExtended extends MJQueryFormComponent implements OnInit, OnDestroy, AfterViewInit {\n public record!: MJQueryEntity;\n public queryParameters: MJQueryParameterEntity[] = [];\n public queryFields: MJQueryFieldEntity[] = [];\n public queryEntities: MJQueryEntityEntity[] = [];\n public queryPermissions: MJQueryPermissionEntity[] = [];\n public isLoadingParameters = false;\n public isLoadingFields = false;\n public isLoadingEntities = false;\n public isLoadingPermissions = false;\n public hasUnsavedChanges = false;\n public showFiltersHelp = false;\n public showRunDialog = false;\n public showCategoryDialog = false;\n \n // Expansion panel states\n public sqlPanelExpanded = true;\n public parametersPanelExpanded = false;\n public fieldsPanelExpanded = false;\n public entitiesPanelExpanded = false;\n public technicalDescriptionPanelExpanded = false;\n public detailsPanelExpanded = false;\n public permissionsPanelExpanded = false;\n \n // Category data\n public categoryOptions: Array<{text: string, value: string}> = [\n { text: 'Select Category...', value: '' }\n ];\n public categories: MJQueryCategoryEntity[] = [];\n public categoryTreeData: CategoryTreeNode[] = [];\n \n // 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 @ViewChild('sqlEditor') sqlEditor: CodeEditorComponent | null = null;\n \n // SQL Filters for help display\n public sqlFilters = RUN_QUERY_SQL_FILTERS;\n \n private destroy$ = new Subject<void>();\n private isUpdatingEditorValue = false;\n private isInitialLoad = true;\n\n async ngOnInit() {\n await super.ngOnInit();\n\n // During init, suppress per-method detectChanges to avoid NG0100.\n // We do one unified detectChanges after everything completes.\n this.isInitialLoad = true;\n\n // Load categories first to ensure they're available for the dropdown\n await this.loadCategories();\n\n // Then load other data in parallel\n await Promise.all([\n this.loadQueryParameters(),\n this.loadQueryFields(),\n this.loadQueryEntities(),\n this.loadQueryPermissions()\n ]);\n\n this.isInitialLoad = false;\n this.cdr.detectChanges();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n ngAfterViewInit() {\n super.ngAfterViewInit();\n\n this.sqlEditor?.setEditable(this.EditMode);\n\n // Set initial SQL value in the editor\n this.updateEditorValue();\n }\n \n override EndEditMode(): void {\n super.EndEditMode();\n this.sqlEditor?.setEditable(false);\n }\n\n override StartEditMode(): void {\n super.StartEditMode();\n this.sqlEditor?.setEditable(true);\n \n // Force change detection after a brief delay to ensure form controls are initialized\n setTimeout(() => {\n this.cdr.detectChanges();\n }, 50);\n }\n\n override CancelEdit(): void {\n super.CancelEdit();\n this.updateEditorValue(); // Reset editor value to record SQL\n this.sqlEditor?.setEditable(false);\n this.updateUnsavedChangesFlag(); // Reset unsaved changes flag\n }\n\n private updateEditorValue() {\n if (!this.sqlEditor || this.isUpdatingEditorValue) {\n return;\n }\n \n // Use setTimeout to avoid ExpressionChangedAfterItHasBeenCheckedError\n setTimeout(() => {\n if (!this.sqlEditor) {\n return;\n }\n \n this.isUpdatingEditorValue = true;\n const sqlValue = this.record?.SQL || '';\n \n // Use the setValue method from mj-code-editor component\n this.sqlEditor.setValue(sqlValue);\n this.isUpdatingEditorValue = false;\n }, 0);\n }\n\n public isFormReadOnly(): boolean {\n return !this.EditMode;\n }\n\n async loadQueryParameters() {\n if (this.record && this.record.ID) {\n this.isLoadingParameters = true;\n try {\n const rv = new RunView();\n const results = await rv.RunView<MJQueryParameterEntity>({\n EntityName: 'MJ: Query Parameters',\n ExtraFilter: `QueryID='${this.record.ID}'`,\n OrderBy: 'Name ASC',\n ResultType: 'entity_object'\n });\n \n if (results.Success) {\n this.queryParameters = results.Results || [];\n }\n } catch (error) {\n console.error('Error loading query parameters:', error);\n } finally {\n this.isLoadingParameters = false;\n if (!this.isInitialLoad) this.cdr.detectChanges();\n }\n }\n }\n\n async loadQueryFields() {\n if (this.record && this.record.ID) {\n this.isLoadingFields = true;\n try {\n const rv = new RunView();\n const results = await rv.RunView<MJQueryFieldEntity>({\n EntityName: 'MJ: Query Fields',\n ExtraFilter: `QueryID='${this.record.ID}'`,\n OrderBy: 'Sequence ASC, Name ASC',\n ResultType: 'entity_object'\n });\n \n if (results.Success) {\n this.queryFields = results.Results || [];\n }\n } catch (error) {\n console.error('Error loading query fields:', error);\n } finally {\n this.isLoadingFields = false;\n if (!this.isInitialLoad) this.cdr.detectChanges();\n }\n }\n }\n\n async loadQueryEntities() {\n if (this.record && this.record.ID) {\n this.isLoadingEntities = true;\n try {\n const rv = new RunView();\n const results = await rv.RunView<MJQueryEntityEntity>({\n EntityName: 'MJ: Query Entities',\n ExtraFilter: `QueryID='${this.record.ID}'`,\n OrderBy: 'Entity ASC',\n ResultType: 'entity_object'\n });\n \n if (results.Success) {\n this.queryEntities = results.Results || [];\n console.log('Loaded query entities:', this.queryEntities);\n }\n } catch (error) {\n console.error('Error loading query entities:', error);\n } finally {\n this.isLoadingEntities = false;\n if (!this.isInitialLoad) this.cdr.detectChanges();\n }\n }\n }\n\n async loadQueryPermissions() {\n if (this.record && this.record.ID) {\n this.isLoadingPermissions = true;\n try {\n const rv = new RunView();\n const results = await rv.RunView<MJQueryPermissionEntity>({\n EntityName: 'MJ: Query Permissions',\n ExtraFilter: `QueryID='${this.record.ID}'`,\n OrderBy: 'Role ASC',\n ResultType: 'entity_object'\n });\n \n if (results.Success) {\n this.queryPermissions = results.Results || [];\n }\n } catch (error) {\n console.error('Error loading query permissions:', error);\n } finally {\n this.isLoadingPermissions = false;\n if (!this.isInitialLoad) this.cdr.detectChanges();\n }\n }\n }\n\n async loadCategories() {\n try {\n const rv = new RunView();\n const results = await rv.RunView<MJQueryCategoryEntity>({\n EntityName: 'MJ: Query Categories',\n OrderBy: 'Name',\n ResultType: 'entity_object'\n });\n \n if (results.Success && results.Results) {\n this.categories = results.Results;\n \n // Build flat options for legacy compatibility\n this.categoryOptions = [\n { text: 'Select Category...', value: '' },\n ...this.categories.map(cat => ({\n text: cat.Name,\n value: cat.ID\n }))\n ];\n \n // Build tree data after options are set\n this.categoryTreeData = this.buildCategoryTree(this.categories);\n \n // Trigger change detection to update the view (skip during init)\n if (!this.isInitialLoad) this.cdr.detectChanges();\n }\n } catch (error) {\n console.error('Error loading categories:', error);\n this.categoryOptions = [{ text: 'Select Category...', value: '' }];\n this.categoryTreeData = [];\n }\n }\n \n private buildCategoryTree(categories: MJQueryCategoryEntity[]): CategoryTreeNode[] {\n const categoryMap = new Map<string, CategoryTreeNode>();\n const rootCategories: CategoryTreeNode[] = [];\n \n // Create nodes for all categories\n categories.forEach(cat => {\n categoryMap.set(cat.ID, {\n id: cat.ID,\n name: cat.Name,\n items: []\n });\n });\n \n // Build the tree structure\n categories.forEach(cat => {\n const node = categoryMap.get(cat.ID)!;\n if (cat.ParentID && categoryMap.has(cat.ParentID)) {\n const parent = categoryMap.get(cat.ParentID)!;\n if (!parent.items) parent.items = [];\n parent.items.push(node);\n } else {\n rootCategories.push(node);\n }\n });\n \n // Sort children alphabetically\n const sortNodes = (nodes: CategoryTreeNode[]) => {\n nodes.sort((a, b) => a.name.localeCompare(b.name));\n nodes.forEach(node => {\n if (node.items && node.items.length > 0) {\n sortNodes(node.items);\n }\n });\n };\n sortNodes(rootCategories);\n \n return rootCategories;\n }\n \n getCategoryPath(): string {\n if (!this.record.CategoryID) return '';\n \n const findPath = (categoryId: string): string[] => {\n const category = this.categories.find(c => UUIDsEqual(c.ID, categoryId));\n if (!category) return [];\n \n if (category.ParentID) {\n return [...findPath(category.ParentID), category.Name];\n }\n return [category.Name];\n };\n \n return findPath(this.record.CategoryID).join(' / ');\n }\n\n async onCategoryChange(value: string) {\n // If it's a new category (string but not in existing options)\n if (value && !this.categoryOptions.find(opt => opt.value === value)) {\n // Check for duplicate category names (case-insensitive, trimmed)\n if (this.isDuplicateCategory(value)) {\n const existingCategory = this.categoryOptions.find(option => \n option.text && option.text.trim().toLowerCase() === value.trim().toLowerCase()\n );\n if (existingCategory) {\n // Use the existing category instead\n this.record.CategoryID = existingCategory.value;\n MJNotificationService.Instance.CreateSimpleNotification(\n `Category \"${existingCategory.text}\" already exists. Using existing category.`, \n 'warning',\n 3000\n );\n }\n return;\n }\n\n try {\n // Create new category with trimmed name\n const md = new Metadata();\n const newCategory = await md.GetEntityObject<MJQueryCategoryEntity>('MJ: Query Categories');\n newCategory.Name = value.trim();\n const saved = await newCategory.Save();\n \n if (saved) {\n // Add to options and set the ID\n this.categoryOptions.push({\n text: newCategory.Name,\n value: newCategory.ID\n });\n this.record.CategoryID = newCategory.ID;\n MJNotificationService.Instance.CreateSimpleNotification(\n `New category \"${newCategory.Name}\" created successfully.`, \n 'success',\n 3000\n );\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to create new category. ${newCategory.LatestResult?.Message || ''}`, \n 'error',\n 3000\n );\n }\n } catch (error) {\n console.error('Error creating new category:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error creating new category. Please try again.', \n 'error',\n 3000\n );\n }\n }\n }\n\n private isDuplicateCategory(categoryName: string): boolean {\n const normalizedName = categoryName?.trim().toLowerCase();\n return this.categoryOptions.some(option => \n option.text && option.text.trim().toLowerCase() === normalizedName\n );\n }\n\n /**\n * Updates the hasUnsavedChanges flag based on entity dirty states\n */\n private updateUnsavedChangesFlag() {\n this.hasUnsavedChanges = this.queryParameters.some(param => param.Dirty) || \n this.record?.Dirty || false;\n }\n\n toggleFiltersHelp() {\n this.showFiltersHelp = !this.showFiltersHelp;\n }\n\n /**\n * Run the query with parameter dialog\n */\n async runQuery() {\n if (!this.record?.IsSaved) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Please save the query before running it.', \n 'warning',\n 3000\n );\n return;\n }\n\n // Save any unsaved changes first\n if (this.hasUnsavedChanges) {\n const saveResult = await this.SaveRecord(false); // Don't exit edit mode\n if (!saveResult) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to save query changes.', \n 'error',\n 3000\n );\n return;\n }\n }\n\n // Warn if query is not approved\n if (this.record.Status !== 'Approved') {\n console.warn(`Executing query '${this.record.Name}' with status '${this.record.Status}'. Query has not been approved.`);\n }\n\n // Reload parameters in case they were updated\n await this.loadQueryParameters();\n\n // Show the run dialog — set before detectChanges to avoid NG0100\n this.showRunDialog = true;\n this.cdr.detectChanges();\n }\n\n /**\n * Handle run dialog close\n */\n onRunDialogClose() {\n this.showRunDialog = false;\n }\n \n /**\n * Add a new parameter\n */\n async addParameter() {\n try {\n const md = new Metadata();\n const newParam = await md.GetEntityObject<MJQueryParameterEntity>('MJ: Query Parameters');\n newParam.QueryID = this.record.ID;\n newParam.Name = `param${this.queryParameters.length + 1}`;\n newParam.Type = 'string';\n newParam.IsRequired = false;\n \n const saved = await newParam.Save();\n if (saved) {\n this.queryParameters.push(newParam);\n this.updateUnsavedChangesFlag();\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Parameter added successfully',\n 'success',\n 3000\n );\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to add parameter',\n 'error',\n 3000\n );\n }\n } catch (error) {\n console.error('Error adding parameter:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error adding parameter',\n 'error',\n 3000\n );\n }\n }\n \n /**\n * Edit a parameter\n */\n async editParameter(param: MJQueryParameterEntity) {\n // TODO: Show parameter edit dialog\n console.log('Edit parameter:', param);\n }\n \n /**\n * Delete a parameter\n */\n async deleteParameter(param: MJQueryParameterEntity) {\n if (!confirm(`Are you sure you want to delete parameter \"${param.Name}\"?`)) {\n return;\n }\n \n try {\n const deleted = await param.Delete();\n if (deleted) {\n const index = this.queryParameters.indexOf(param);\n if (index > -1) {\n this.queryParameters.splice(index, 1);\n }\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Parameter deleted successfully',\n 'success',\n 3000\n );\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to delete parameter',\n 'error',\n 3000\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 /**\n * Handle category creation from dialog\n */\n async onCategoryCreated(newCategory: MJQueryCategoryEntity) {\n // Reload categories to include the new one\n await this.loadCategories();\n \n // Set the new category as selected\n this.record.CategoryID = newCategory.ID;\n \n // Trigger change detection\n this.cdr.detectChanges();\n }\n \n /**\n * Format date for display\n */\n formatDate(date: Date | string | null): string {\n if (!date) return '-';\n const d = typeof date === 'string' ? new Date(date) : date;\n return d.toLocaleDateString() + ' ' + d.toLocaleTimeString();\n }\n\n async SaveRecord(StopEditModeAfterSave: boolean = true): Promise<boolean> {\n // Handle category creation before saving query\n if (this.record.CategoryID && !this.categoryOptions.find(opt => opt.value === this.record.CategoryID)) {\n if (this.isDuplicateCategory(this.record.CategoryID)) {\n const existingCategory = this.categoryOptions.find(option => \n option.text && option.text.trim().toLowerCase() === this.record.CategoryID?.trim().toLowerCase()\n );\n if (existingCategory) {\n this.record.CategoryID = existingCategory.value;\n MJNotificationService.Instance.CreateSimpleNotification(\n `Category \"${existingCategory.text}\" already exists. Using existing category.`, \n 'warning',\n 3000\n );\n }\n } else {\n try {\n const md = new Metadata();\n const newCategory = await md.GetEntityObject<MJQueryCategoryEntity>('MJ: Query Categories');\n newCategory.Name = this.record.CategoryID.trim();\n const saved = await newCategory.Save();\n \n if (saved) {\n this.categoryOptions.push({\n text: newCategory.Name,\n value: newCategory.ID\n });\n this.record.CategoryID = newCategory.ID;\n } else {\n console.error('Failed to create new category');\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to create new category. ${newCategory.LatestResult?.Message || ''}`, \n 'error'\n );\n return false;\n }\n } catch (error) {\n console.error('Error creating new category during save:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error creating new category during save. Please try again.', \n 'error'\n );\n return false;\n }\n }\n }\n\n // Save any unsaved query entities first\n if (this.EditMode) {\n for (const entity of this.queryEntities) {\n if (!entity.IsSaved && entity.EntityID) {\n try {\n await entity.Save();\n } catch (error) {\n console.error('Error saving query entity:', error);\n }\n }\n }\n }\n\n // Call the parent save method\n const result = await super.SaveRecord(StopEditModeAfterSave);\n \n if (result) {\n this.updateUnsavedChangesFlag();\n \n // Reload related data after successful save as server-side processes may have updated them\n if (this.record && this.record.ID) {\n await Promise.all([\n this.loadQueryParameters(),\n this.loadQueryFields(),\n this.loadQueryEntities()\n ]);\n this.cdr.detectChanges();\n }\n }\n \n return result;\n }\n\n getStatusBadgeColor(): string {\n switch (this.record?.Status) {\n case 'Approved': return '#28a745';\n case 'Pending': return '#f59e0b';\n case 'Rejected': return '#dc3545';\n case 'Expired': return '#6c757d';\n default: return '#6c757d';\n }\n }\n\n getStatusBannerIcon(): string {\n switch (this.record?.Status) {\n case 'Pending': return 'fa-clock';\n case 'Rejected': return 'fa-times-circle';\n case 'Expired': return 'fa-archive';\n default: return 'fa-info-circle';\n }\n }\n\n getStatusBannerMessage(): string {\n switch (this.record?.Status) {\n case 'Pending': return 'It can be executed for testing but has not yet been approved.';\n case 'Rejected': return 'It was rejected and may need revision before approval.';\n case 'Expired': return 'It has expired and is no longer in active use.';\n default: return '';\n }\n }\n\n /**\n * Handle SQL value changes from the code editor\n */\n onSQLChange(value: any) {\n if (this.isUpdatingEditorValue || !this.record) {\n return;\n }\n \n // Update the record SQL value\n this.record.SQL = value;\n this.updateUnsavedChangesFlag();\n }\n\n /**\n * Add a new field\n */\n async addField() {\n try {\n const md = new Metadata();\n const newField = await md.GetEntityObject<MJQueryFieldEntity>('MJ: Query Fields');\n newField.QueryID = this.record.ID;\n newField.Name = `field${this.queryFields.length + 1}`;\n newField.Description = '';\n newField.Sequence = (this.queryFields.length + 1) * 10;\n newField.SQLBaseType = 'nvarchar';\n newField.SQLFullType = 'nvarchar(255)';\n \n const saved = await newField.Save();\n if (saved) {\n this.queryFields.push(newField);\n this.queryFields.sort((a, b) => (a.Sequence || 0) - (b.Sequence || 0));\n this.updateUnsavedChangesFlag();\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Field added successfully',\n 'success',\n 3000\n );\n }\n } catch (error) {\n console.error('Error adding field:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to add field',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Delete a field\n */\n async deleteField(field: MJQueryFieldEntity) {\n if (!confirm(`Are you sure you want to delete field \"${field.Name}\"?`)) {\n return;\n }\n \n try {\n const deleted = await field.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 }\n } catch (error) {\n console.error('Error deleting field:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to delete field',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Add a new entity\n */\n async addEntity() {\n try {\n const md = new Metadata();\n const newEntity = await md.GetEntityObject<MJQueryEntityEntity>('MJ: Query Entities');\n newEntity.QueryID = this.record.ID;\n \n // Add to the list immediately for UI responsiveness\n this.queryEntities.push(newEntity);\n this.updateUnsavedChangesFlag();\n } catch (error) {\n console.error('Error adding entity:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to add entity',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Delete an entity\n */\n async deleteEntity(entity: MJQueryEntityEntity) {\n if (!confirm(`Are you sure you want to delete entity \"${entity.Entity}\"?`)) {\n return;\n }\n \n try {\n const deleted = await entity.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 }\n } catch (error) {\n console.error('Error deleting entity:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to delete entity',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Get entity options for dropdown\n */\n getEntityOptions(): Array<{text: string, id: string}> {\n return Metadata.Provider.Entities.map(e => ({\n text: e.Name,\n id: e.ID\n })).sort((a, b) => a.text.localeCompare(b.text));\n }\n\n /**\n * Get the grid edit mode based on component edit mode\n */\n override GridEditMode(): \"None\" | \"Save\" | \"Queue\" {\n return this.EditMode ? \"Queue\" : \"None\";\n }\n\n}\n","<div class=\"record-form-container\" style=\"height: 100%; display: flex; flex-direction: column;\">\n @if (record) {\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n <mj-form-toolbar [Form]=\"this\"></mj-form-toolbar>\n\n <!-- Header Section -->\n <div class=\"query-header\">\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 <kendo-textbox [(ngModel)]=\"record.Name\"\n name=\"queryName\"\n placeholder=\"Enter query name...\"\n class=\"query-name-input\">\n </kendo-textbox>\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 kendoButton\n [themeColor]=\"'primary'\"\n [size]=\"'large'\"\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 <kendo-dropdownlist\n [(ngModel)]=\"record.CategoryID\"\n name=\"categoryId\"\n [data]=\"categoryOptions\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n placeholder=\"Select category...\"\n class=\"meta-dropdown\">\n </kendo-dropdownlist>\n } @else {\n <span class=\"meta-value\">{{ getCategoryPath() || '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 <kendo-dropdownlist\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 </kendo-dropdownlist>\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 <kendo-textarea [(ngModel)]=\"record.Description\"\n name=\"description\"\n [rows]=\"2\"\n placeholder=\"Enter query description...\"\n class=\"query-description-input\">\n </kendo-textarea>\n } @else {\n <p class=\"query-description-text\">{{ record.Description }}</p>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Status Warning Banner for Non-Approved Queries -->\n @if (record.Status && record.Status !== 'Approved' && !EditMode) {\n <div class=\"status-warning-banner\" [style.border-left-color]=\"getStatusBadgeColor()\">\n <i class=\"fa-solid\" [class]=\"getStatusBannerIcon()\"\n [style.color]=\"getStatusBadgeColor()\"></i>\n <span>\n This query has status <strong>{{ record.Status }}</strong>. {{ getStatusBannerMessage() }}\n </span>\n </div>\n }\n\n <!-- Main Content Area with Expansion Panels -->\n <div class=\"query-content\">\n\n <!-- SQL Query Panel -->\n <kendo-expansionpanel\n [(expanded)]=\"sqlPanelExpanded\"\n class=\"query-panel\">\n <ng-template kendoExpansionPanelTitleDirective>\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\">\n <i class=\"fa-solid fa-check\"></i> Defined\n </span>\n }\n </span>\n <button type=\"button\"\n kendoButton\n fillMode=\"flat\"\n size=\"small\"\n (click)=\"toggleFiltersHelp(); $event.stopPropagation()\"\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 </span>\n </ng-template>\n\n <div class=\"sql-panel-content\">\n <!-- Code Editor -->\n <mj-code-editor #sqlEditor\n (change)=\"onSQLChange($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 </kendo-expansionpanel>\n\n <!-- Technical Description Panel -->\n @if (record.TechnicalDescription || EditMode) {\n <kendo-expansionpanel\n [(expanded)]=\"technicalDescriptionPanelExpanded\"\n class=\"query-panel\">\n <ng-template kendoExpansionPanelTitleDirective>\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\">\n <i class=\"fa-solid fa-check\"></i> Documented\n </span>\n }\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (EditMode) {\n <kendo-textarea [(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 class=\"technical-description-textarea\">\n </kendo-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 </kendo-expansionpanel>\n }\n\n <!-- Parameters Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel\n [(expanded)]=\"parametersPanelExpanded\"\n class=\"query-panel\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-sliders panel-icon\"></i>\n Query Parameters\n @if (queryParameters.length > 0) {\n <span class=\"panel-badge count\">{{ queryParameters.length }}</span>\n }\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (isLoadingParameters) {\n <div class=\"panel-loading\">\n <mj-loading text=\"Loading parameters...\"></mj-loading>\n </div>\n } @else {\n @if (queryParameters.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-sliders empty-state-icon\"></i>\n <div class=\"empty-state-title\">No Parameters Defined</div>\n <div class=\"empty-state-text\">\n Add parameters to make your query dynamic and reusable.\n </div>\n @if (EditMode) {\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addParameter()\">\n <i class=\"fa-solid fa-plus\"></i> Add First Parameter\n </button>\n }\n </div>\n } @else {\n @if (EditMode) {\n <div class=\"panel-toolbar\">\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addParameter()\">\n <i class=\"fa-solid fa-plus\"></i> Add Parameter\n </button>\n </div>\n }\n <div class=\"card-grid\">\n @for (param of queryParameters; track param.ID || $index) {\n <div class=\"item-card\" [class.required]=\"param.IsRequired\" (click)=\"editParameter(param)\">\n <div class=\"item-card-header\">\n <div class=\"item-name\">\n <i class=\"fa-solid fa-at item-name-icon param-icon\"></i>\n {{ param.Name }}\n </div>\n <div class=\"item-badges\">\n @if (param.IsRequired) {\n <span class=\"item-badge required\">Required</span>\n }\n </div>\n </div>\n <div class=\"item-card-body\">\n @if (param.Description) {\n <div class=\"item-description\">{{ param.Description }}</div>\n }\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <strong>Type:</strong> {{ param.Type || 'Text' }}\n </span>\n @if (param.DefaultValue) {\n <span class=\"meta-tag\">\n <strong>Default:</strong>\n <code class=\"meta-code\">{{ param.DefaultValue }}</code>\n </span>\n }\n </div>\n </div>\n @if (EditMode) {\n <div class=\"item-actions\" (click)=\"$event.stopPropagation()\">\n <button type=\"button\" class=\"item-action-btn\" (click)=\"editParameter(param)\" title=\"Edit parameter\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n <button type=\"button\" class=\"item-action-btn delete\" (click)=\"deleteParameter(param)\" title=\"Delete parameter\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Query Fields Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel\n [(expanded)]=\"fieldsPanelExpanded\"\n class=\"query-panel\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-table panel-icon\"></i>\n Query Fields\n @if (queryFields.length > 0) {\n <span class=\"panel-badge count\">{{ queryFields.length }}</span>\n }\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (isLoadingFields) {\n <div class=\"panel-loading\">\n <mj-loading text=\"Loading fields...\"></mj-loading>\n </div>\n } @else {\n @if (queryFields.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-table empty-state-icon\"></i>\n <div class=\"empty-state-title\">No Fields Defined</div>\n <div class=\"empty-state-text\">\n Define output fields for your query results.\n </div>\n @if (EditMode) {\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addField()\">\n <i class=\"fa-solid fa-plus\"></i> Add First Field\n </button>\n }\n </div>\n } @else {\n @if (EditMode) {\n <div class=\"panel-toolbar\">\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addField()\">\n <i class=\"fa-solid fa-plus\"></i> Add Field\n </button>\n </div>\n }\n <div class=\"card-grid\">\n @for (field of queryFields; track field.ID) {\n <div class=\"item-card\">\n <div class=\"item-card-header\">\n <div class=\"item-name\">\n <i class=\"fa-solid fa-columns item-name-icon field-icon\"></i>\n {{ field.Name }}\n </div>\n <div class=\"item-badges\">\n <span class=\"item-badge type\">{{ field.SQLBaseType }}</span>\n @if (field.Sequence) {\n <span class=\"item-badge sequence\">#{{ field.Sequence }}</span>\n }\n </div>\n </div>\n <div class=\"item-card-body\">\n @if (field.Description) {\n <div class=\"item-description\">{{ field.Description }}</div>\n }\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <i class=\"fa-solid fa-code\"></i> {{ field.SQLFullType || field.SQLBaseType }}\n </span>\n </div>\n </div>\n @if (EditMode) {\n <div class=\"item-card-actions\">\n <button type=\"button\" class=\"item-action-btn delete\" (click)=\"deleteField(field)\" title=\"Delete field\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Query Entities Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel\n [(expanded)]=\"entitiesPanelExpanded\"\n class=\"query-panel\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-database panel-icon\"></i>\n Query Entities\n @if (queryEntities.length > 0) {\n <span class=\"panel-badge count\">{{ queryEntities.length }}</span>\n }\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (isLoadingEntities) {\n <div class=\"panel-loading\">\n <mj-loading text=\"Loading entities...\"></mj-loading>\n </div>\n } @else {\n @if (queryEntities.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-database empty-state-icon\"></i>\n <div class=\"empty-state-title\">No Entities Tracked</div>\n <div class=\"empty-state-text\">\n Track which entities this query uses for documentation.\n </div>\n @if (EditMode) {\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addEntity()\">\n <i class=\"fa-solid fa-plus\"></i> Add First Entity\n </button>\n }\n </div>\n } @else {\n @if (EditMode) {\n <div class=\"panel-toolbar\">\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addEntity()\">\n <i class=\"fa-solid fa-plus\"></i> Add Entity\n </button>\n </div>\n }\n <div class=\"card-grid\">\n @for (entity of queryEntities; track entity.ID) {\n <div class=\"item-card\">\n <div class=\"item-card-header\">\n <div class=\"item-name\">\n <i class=\"fa-solid fa-table item-name-icon entity-icon\"></i>\n {{ entity.Entity || 'Select Entity...' }}\n </div>\n @if (EditMode) {\n <div class=\"entity-dropdown-wrapper\">\n <kendo-dropdownlist\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 </kendo-dropdownlist>\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 </kendo-expansionpanel>\n }\n\n <!-- Details Panel -->\n <kendo-expansionpanel\n [(expanded)]=\"detailsPanelExpanded\"\n class=\"query-panel\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-info-circle panel-icon\"></i>\n Query Details\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n <div class=\"details-grid\">\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 <kendo-switch [(ngModel)]=\"record.UsesTemplate\" name=\"usesTemplate\"></kendo-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 </kendo-expansionpanel>\n\n <!-- Permissions Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel\n [(expanded)]=\"permissionsPanelExpanded\"\n class=\"query-panel\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-shield-alt panel-icon\"></i>\n Query Permissions\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (isLoadingPermissions) {\n <div class=\"panel-loading\">\n <mj-loading text=\"Loading permissions...\"></mj-loading>\n </div>\n } @else {\n @if (queryPermissions.length === 0 && !EditMode) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-shield-alt empty-state-icon\"></i>\n <div class=\"empty-state-title\">No Permissions Set</div>\n <div class=\"empty-state-text\">\n This query uses default permissions.\n </div>\n </div>\n } @else {\n @if (EditMode) {\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Query Permissions','QueryID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Query Permissions')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n } @else {\n <div class=\"permissions-list\">\n @for (permission of queryPermissions; track permission.ID) {\n <div class=\"permission-card\">\n <i class=\"fa-solid fa-users permission-icon\"></i>\n <div class=\"permission-info\">\n <div class=\"permission-role\">{{ permission.Role }}</div>\n <div class=\"permission-type\">Role Permission</div>\n </div>\n <span class=\"permission-badge\">\n <i class=\"fa-solid fa-play\"></i> Can Execute\n </span>\n </div>\n }\n </div>\n }\n }\n }\n </div>\n </kendo-expansionpanel>\n }\n </div>\n </form>\n\n <!-- Query Run Dialog -->\n <mj-query-run-dialog\n [query]=\"record\"\n [parameters]=\"queryParameters\"\n [(isVisible)]=\"showRunDialog\"\n (onClose)=\"onRunDialogClose()\">\n </mj-query-run-dialog>\n\n <!-- Category Creation Dialog -->\n <mj-query-category-dialog\n [(isVisible)]=\"showCategoryDialog\"\n (onCategoryCreated)=\"onCategoryCreated($event)\">\n </mj-query-category-dialog>\n }\n</div>\n"]}
|
|
@@ -64,9 +64,10 @@ import * as i62 from "@memberjunction/ng-list-management";
|
|
|
64
64
|
import * as i63 from "@memberjunction/ng-actions";
|
|
65
65
|
import * as i64 from "@memberjunction/ng-agents";
|
|
66
66
|
import * as i65 from "@memberjunction/ng-entity-viewer";
|
|
67
|
+
import * as i66 from "@memberjunction/ng-markdown";
|
|
67
68
|
export declare class MemberJunctionCoreEntityFormsModule {
|
|
68
69
|
static ɵfac: i0.ɵɵFactoryDeclaration<MemberJunctionCoreEntityFormsModule, never>;
|
|
69
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<MemberJunctionCoreEntityFormsModule, [typeof i1.MJEntityFormComponentExtended, typeof i2.MJEntityActionFormComponentExtended, typeof i3.MJTemplateFormComponentExtended, typeof i4.TemplateParamDialogComponent, typeof i5.TemplateParamsGridComponent, typeof i6.TemplateEditorComponent, typeof i7.MJAIPromptFormComponentExtended, typeof i8.MJAIAgentFormComponentExtended, typeof i9.NewAgentDialogComponent, typeof i10.AddActionDialogComponent, typeof i11.PromptSelectorDialogComponent, typeof i12.AgentPromptAdvancedSettingsDialogComponent, typeof i13.SubAgentAdvancedSettingsDialogComponent, typeof i14.SubAgentSelectorDialogComponent, typeof i15.CreatePromptDialogComponent, typeof i16.CreateSubAgentDialogComponent, typeof i17.EntitySelectorDialogComponent, typeof i18.MJAIPromptRunFormComponentExtended, typeof i19.ChatMessageViewerComponent, typeof i20.MJActionFormComponentExtended, typeof i21.MJActionExecutionLogFormComponentExtended, typeof i22.MJAIAgentRunFormComponentExtended, typeof i23.AIAgentRunTimelineComponent, typeof i24.AIAgentRunStepNodeComponent, typeof i25.AIAgentRunAnalyticsComponent, typeof i26.AIAgentRunVisualizationComponent, typeof i27.AIAgentRunStepDetailComponent, typeof i28.MJQueryFormComponentExtended, typeof i29.QueryRunDialogComponent, typeof i30.QueryCategoryDialogComponent, typeof i31.FlowAgentFormSectionComponent, typeof i32.MJTestRunFormComponentExtended, typeof i33.MJTestFormComponentExtended, typeof i34.MJTestSuiteRunFormComponentExtended, typeof i35.MJTestSuiteFormComponentExtended, typeof i36.MJTestRunFeedbackFormComponentExtended, typeof i37.MJTestRubricFormComponentExtended, typeof i38.EntityLinkPillComponent, typeof i39.MJListFormComponentExtended], [typeof i40.CommonModule, typeof i41.FormsModule, typeof i41.ReactiveFormsModule, typeof i42.LayoutModule, typeof i42.ExpansionPanelModule, typeof i42.TabStripModule, typeof i42.SplitterModule, typeof i42.PanelBarModule, typeof i43.DialogsModule, typeof i43.WindowModule, typeof i44.GridModule, typeof i45.InputsModule, typeof i45.TextBoxModule, typeof i45.TextAreaModule, typeof i45.NumericTextBoxModule, typeof i45.SwitchModule, typeof i46.DropDownsModule, typeof i46.ComboBoxModule, typeof i46.DropDownTreesModule, typeof i46.DropDownListModule, typeof i47.ButtonsModule, typeof i47.ButtonModule, typeof i47.SplitButtonModule, typeof i48.DateInputsModule, typeof i49.LinkDirectivesModule, typeof i50.JoinGridModule, typeof i51.BaseFormsModule, typeof i52.MJTabStripModule, typeof i53.CodeEditorModule, typeof i54.DeepDiffModule, typeof i55.TreeViewModule, typeof i45.CheckBoxModule, typeof i56.AITestHarnessModule, typeof i57.ActionGalleryModule, typeof i58.TestingModule, typeof i59.FlowEditorModule, typeof i60.SharedGenericModule, typeof i61.EntityRelationshipDiagramModule, typeof i62.ListManagementModule, typeof i63.ActionsModule, typeof i64.AgentsModule, typeof i65.EntityViewerModule], [typeof i1.MJEntityFormComponentExtended, typeof i2.MJEntityActionFormComponentExtended, typeof i3.MJTemplateFormComponentExtended, typeof i6.TemplateEditorComponent, typeof i7.MJAIPromptFormComponentExtended, typeof i8.MJAIAgentFormComponentExtended, typeof i18.MJAIPromptRunFormComponentExtended, typeof i19.ChatMessageViewerComponent, typeof i20.MJActionFormComponentExtended, typeof i21.MJActionExecutionLogFormComponentExtended, typeof i22.MJAIAgentRunFormComponentExtended, typeof i23.AIAgentRunTimelineComponent, typeof i24.AIAgentRunStepNodeComponent, typeof i25.AIAgentRunAnalyticsComponent, typeof i28.MJQueryFormComponentExtended, typeof i31.FlowAgentFormSectionComponent, typeof i32.MJTestRunFormComponentExtended, typeof i33.MJTestFormComponentExtended, typeof i34.MJTestSuiteRunFormComponentExtended, typeof i35.MJTestSuiteFormComponentExtended, typeof i36.MJTestRunFeedbackFormComponentExtended, typeof i37.MJTestRubricFormComponentExtended, typeof i38.EntityLinkPillComponent, typeof i39.MJListFormComponentExtended, typeof i63.ActionsModule]>;
|
|
70
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<MemberJunctionCoreEntityFormsModule, [typeof i1.MJEntityFormComponentExtended, typeof i2.MJEntityActionFormComponentExtended, typeof i3.MJTemplateFormComponentExtended, typeof i4.TemplateParamDialogComponent, typeof i5.TemplateParamsGridComponent, typeof i6.TemplateEditorComponent, typeof i7.MJAIPromptFormComponentExtended, typeof i8.MJAIAgentFormComponentExtended, typeof i9.NewAgentDialogComponent, typeof i10.AddActionDialogComponent, typeof i11.PromptSelectorDialogComponent, typeof i12.AgentPromptAdvancedSettingsDialogComponent, typeof i13.SubAgentAdvancedSettingsDialogComponent, typeof i14.SubAgentSelectorDialogComponent, typeof i15.CreatePromptDialogComponent, typeof i16.CreateSubAgentDialogComponent, typeof i17.EntitySelectorDialogComponent, typeof i18.MJAIPromptRunFormComponentExtended, typeof i19.ChatMessageViewerComponent, typeof i20.MJActionFormComponentExtended, typeof i21.MJActionExecutionLogFormComponentExtended, typeof i22.MJAIAgentRunFormComponentExtended, typeof i23.AIAgentRunTimelineComponent, typeof i24.AIAgentRunStepNodeComponent, typeof i25.AIAgentRunAnalyticsComponent, typeof i26.AIAgentRunVisualizationComponent, typeof i27.AIAgentRunStepDetailComponent, typeof i28.MJQueryFormComponentExtended, typeof i29.QueryRunDialogComponent, typeof i30.QueryCategoryDialogComponent, typeof i31.FlowAgentFormSectionComponent, typeof i32.MJTestRunFormComponentExtended, typeof i33.MJTestFormComponentExtended, typeof i34.MJTestSuiteRunFormComponentExtended, typeof i35.MJTestSuiteFormComponentExtended, typeof i36.MJTestRunFeedbackFormComponentExtended, typeof i37.MJTestRubricFormComponentExtended, typeof i38.EntityLinkPillComponent, typeof i39.MJListFormComponentExtended], [typeof i40.CommonModule, typeof i41.FormsModule, typeof i41.ReactiveFormsModule, typeof i42.LayoutModule, typeof i42.ExpansionPanelModule, typeof i42.TabStripModule, typeof i42.SplitterModule, typeof i42.PanelBarModule, typeof i43.DialogsModule, typeof i43.WindowModule, typeof i44.GridModule, typeof i45.InputsModule, typeof i45.TextBoxModule, typeof i45.TextAreaModule, typeof i45.NumericTextBoxModule, typeof i45.SwitchModule, typeof i46.DropDownsModule, typeof i46.ComboBoxModule, typeof i46.DropDownTreesModule, typeof i46.DropDownListModule, typeof i47.ButtonsModule, typeof i47.ButtonModule, typeof i47.SplitButtonModule, typeof i48.DateInputsModule, typeof i49.LinkDirectivesModule, typeof i50.JoinGridModule, typeof i51.BaseFormsModule, typeof i52.MJTabStripModule, typeof i53.CodeEditorModule, typeof i54.DeepDiffModule, typeof i55.TreeViewModule, typeof i45.CheckBoxModule, typeof i56.AITestHarnessModule, typeof i57.ActionGalleryModule, typeof i58.TestingModule, typeof i59.FlowEditorModule, typeof i60.SharedGenericModule, typeof i61.EntityRelationshipDiagramModule, typeof i62.ListManagementModule, typeof i63.ActionsModule, typeof i64.AgentsModule, typeof i65.EntityViewerModule, typeof i66.MarkdownModule], [typeof i1.MJEntityFormComponentExtended, typeof i2.MJEntityActionFormComponentExtended, typeof i3.MJTemplateFormComponentExtended, typeof i6.TemplateEditorComponent, typeof i7.MJAIPromptFormComponentExtended, typeof i8.MJAIAgentFormComponentExtended, typeof i18.MJAIPromptRunFormComponentExtended, typeof i19.ChatMessageViewerComponent, typeof i20.MJActionFormComponentExtended, typeof i21.MJActionExecutionLogFormComponentExtended, typeof i22.MJAIAgentRunFormComponentExtended, typeof i23.AIAgentRunTimelineComponent, typeof i24.AIAgentRunStepNodeComponent, typeof i25.AIAgentRunAnalyticsComponent, typeof i28.MJQueryFormComponentExtended, typeof i31.FlowAgentFormSectionComponent, typeof i32.MJTestRunFormComponentExtended, typeof i33.MJTestFormComponentExtended, typeof i34.MJTestSuiteRunFormComponentExtended, typeof i35.MJTestSuiteFormComponentExtended, typeof i36.MJTestRunFeedbackFormComponentExtended, typeof i37.MJTestRubricFormComponentExtended, typeof i38.EntityLinkPillComponent, typeof i39.MJListFormComponentExtended, typeof i63.ActionsModule]>;
|
|
70
71
|
static ɵinj: i0.ɵɵInjectorDeclaration<MemberJunctionCoreEntityFormsModule>;
|
|
71
72
|
}
|
|
72
73
|
//# sourceMappingURL=custom-forms.module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-forms.module.d.ts","sourceRoot":"","sources":["../../../src/lib/custom/custom-forms.module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"custom-forms.module.d.ts","sourceRoot":"","sources":["../../../src/lib/custom/custom-forms.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsEA,qBAuHa,mCAAmC;yCAAnC,mCAAmC;0CAAnC,mCAAmC;0CAAnC,mCAAmC;CAAI"}
|
|
@@ -58,6 +58,7 @@ import { QueryRunDialogComponent } from "./Queries/query-run-dialog.component";
|
|
|
58
58
|
import { QueryCategoryDialogComponent } from "./Queries/query-category-dialog.component";
|
|
59
59
|
import { FlowAgentFormSectionComponent } from "./AIAgents/FlowAgentType/flow-agent-form-section.component";
|
|
60
60
|
import { FlowEditorModule } from "@memberjunction/ng-flow-editor";
|
|
61
|
+
import { MarkdownModule } from "@memberjunction/ng-markdown";
|
|
61
62
|
import { MJTestRunFormComponentExtended } from "./Tests/test-run-form.component";
|
|
62
63
|
import { MJTestFormComponentExtended } from "./Tests/test-form.component";
|
|
63
64
|
import { MJTestSuiteRunFormComponentExtended } from "./Tests/test-suite-run-form.component";
|
|
@@ -115,7 +116,8 @@ export class MemberJunctionCoreEntityFormsModule {
|
|
|
115
116
|
ListManagementModule,
|
|
116
117
|
ActionsModule,
|
|
117
118
|
AgentsModule,
|
|
118
|
-
EntityViewerModule,
|
|
119
|
+
EntityViewerModule,
|
|
120
|
+
MarkdownModule, ActionsModule] }); }
|
|
119
121
|
}
|
|
120
122
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MemberJunctionCoreEntityFormsModule, [{
|
|
121
123
|
type: NgModule,
|
|
@@ -203,7 +205,8 @@ export class MemberJunctionCoreEntityFormsModule {
|
|
|
203
205
|
ListManagementModule,
|
|
204
206
|
ActionsModule,
|
|
205
207
|
AgentsModule,
|
|
206
|
-
EntityViewerModule
|
|
208
|
+
EntityViewerModule,
|
|
209
|
+
MarkdownModule
|
|
207
210
|
],
|
|
208
211
|
exports: [
|
|
209
212
|
MJEntityFormComponentExtended,
|
|
@@ -317,7 +320,8 @@ export class MemberJunctionCoreEntityFormsModule {
|
|
|
317
320
|
ListManagementModule,
|
|
318
321
|
ActionsModule,
|
|
319
322
|
AgentsModule,
|
|
320
|
-
EntityViewerModule
|
|
323
|
+
EntityViewerModule,
|
|
324
|
+
MarkdownModule], exports: [MJEntityFormComponentExtended,
|
|
321
325
|
MJEntityActionFormComponentExtended,
|
|
322
326
|
MJTemplateFormComponentExtended,
|
|
323
327
|
TemplateEditorComponent,
|