@memberjunction/ng-core-entity-forms 5.8.0 → 5.9.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/Entities/entity-form.component.d.ts +1 -1
- package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.js +530 -484
- package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.d.ts +3 -0
- package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +314 -276
- 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/MJCompanyIntegration/mjcompanyintegration.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.js +61 -35
- package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJIntegration/mjintegration.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJIntegration/mjintegration.form.component.js +24 -6
- package/dist/lib/generated/Entities/MJIntegration/mjintegration.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js +137 -0
- package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.js +103 -0
- package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.js.map +1 -0
- package/dist/lib/generated/generated-forms.module.d.ts +119 -117
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +48 -42
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/package.json +30 -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\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\n async ngOnInit() {\n await super.ngOnInit();\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 // Ensure form is properly initialized after all data is loaded\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 }\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 }\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 }\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 }\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\n 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 // Reload parameters in case they were updated\n await this.loadQueryParameters();\n this.cdr.detectChanges();\n\n // Show the run dialog\n this.showRunDialog = true;\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':\n return '#28a745';\n case 'Pending':\n return '#ffc107';\n case 'Rejected':\n return '#dc3545';\n default:\n return '#6c757d';\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\" style=\"flex-shrink: 0; background: #f8f9fa; border-bottom: 1px solid #dee2e6; padding: 20px;\">\n <div style=\"display: flex; flex-direction: column; gap: 16px;\">\n\n <!-- Top Row: Name and Run Button -->\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; gap: 20px;\">\n <!-- Left: Query Name -->\n <div style=\"flex: 1; min-width: 0;\">\n <div style=\"display: flex; align-items: center; gap: 12px;\">\n <i class=\"fa-solid fa-database\" style=\"color: #17a2b8; font-size: 1.4em;\"></i>\n @if (EditMode) {\n <kendo-textbox [(ngModel)]=\"record.Name\"\n name=\"queryName\"\n placeholder=\"Enter query name...\"\n style=\"font-size: 1.2em; font-weight: 600; min-width: 300px; flex: 1;\">\n </kendo-textbox>\n } @else {\n <h4 style=\"margin: 0; color: #495057; font-weight: 600; flex: 1;\">{{ record.Name || 'Untitled Query' }}</h4>\n }\n </div>\n </div>\n\n <!-- Right: Action Buttons -->\n <div class=\"action-buttons\" style=\"display: flex; gap: 8px; align-items: center;\">\n @if (record.ID) {\n <button kendoButton\n [themeColor]=\"'primary'\"\n [size]=\"'large'\"\n [disabled]=\"EditMode || record.Status !== 'Approved' || !record.SQL || record.SQL.trim().length === 0\"\n (click)=\"runQuery()\"\n title=\"Run Query\">\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 style=\"display: grid; grid-template-columns: 1fr auto; gap: 24px; align-items: center;\">\n <!-- Category -->\n <div style=\"display: flex; align-items: center; gap: 12px;\">\n <label style=\"font-weight: 600; color: #495057; min-width: 80px;\">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 style=\"flex: 1;\">\n </kendo-dropdownlist>\n } @else {\n <span style=\"color: #495057;\">{{ getCategoryPath() || 'Uncategorized' }}</span>\n }\n </div>\n\n <!-- Status -->\n <div style=\"display: flex; align-items: center; gap: 12px;\">\n <label style=\"font-weight: 600; color: #495057; min-width: 50px;\">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 style=\"flex: 1;\">\n </kendo-dropdownlist>\n } @else {\n <span class=\"badge\"\n [style.background]=\"getStatusBadgeColor()\"\n style=\"color: white; padding: 6px 12px; border-radius: 12px; font-size: 0.85em;\">\n @if (record.Status === 'Approved') {\n <i class=\"fa-solid fa-check-circle\"></i>\n }\n @if (record.Status === 'Pending') {\n <i class=\"fa-solid fa-clock\"></i>\n }\n @if (record.Status === 'Rejected') {\n <i class=\"fa-solid fa-times-circle\"></i>\n }\n {{ record.Status || 'Unknown' }}\n </span>\n }\n </div>\n </div>\n\n <!-- Third Row: Description -->\n @if (EditMode || record.Description) {\n <div>\n @if (EditMode) {\n <kendo-textarea [(ngModel)]=\"record.Description\"\n name=\"description\"\n [rows]=\"2\"\n placeholder=\"Enter query description...\"\n style=\"width: 100%;\">\n </kendo-textarea>\n } @else {\n <p style=\"margin: 0; color: #6c757d; font-size: 0.9em; line-height: 1.4;\">{{ record.Description }}</p>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content Area with Expansion Panels -->\n <div class=\"query-content\" style=\"flex: 1; min-height: 0; padding: 20px; overflow-y: auto; background: #f5f7fa;\">\n\n <!-- SQL Query Panel -->\n <kendo-expansionpanel\n [(expanded)]=\"sqlPanelExpanded\"\n style=\"margin-bottom: 16px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; justify-content: space-between; width: 100%;\">\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: #17a2b8;\"></i>\n SQL\n @if (record.SQL) {\n <span class=\"badge\" style=\"background: #28a745; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\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 style=\"margin-right: 8px;\">\n <i class=\"fa-solid fa-question-circle\"></i>\n <span style=\"margin-left: 4px;\">Filters Help</span>\n <i class=\"fa-solid\" [ngClass]=\"showFiltersHelp ? 'fa-chevron-up' : 'fa-chevron-down'\" style=\"margin-left: 4px;\"></i>\n </button>\n </span>\n </ng-template>\n\n <div style=\"display: flex; flex-direction: column;\">\n <!-- Code Editor -->\n <mj-code-editor #sqlEditor\n (change)=\"onSQLChange($event)\"\n [language]=\"'sql'\"\n style=\"flex: 1; height: 400px; border: 1px solid #ced4da; border-radius: 4px;\">\n </mj-code-editor>\n\n <!-- SQL Filters Help (Below Editor) -->\n @if (showFiltersHelp) {\n <div class=\"filters-help\" style=\"background: #f8f9fa; border: 1px solid #dee2e6; border-radius: 6px; padding: 16px; margin-top: 16px;\">\n <h6 style=\"margin: 0 0 12px 0; color: #495057; font-weight: 600;\">\n <i class=\"fa-solid fa-filter\"></i> Available SQL Filters for Parameterized Queries\n </h6>\n\n <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 12px;\">\n @for (filter of sqlFilters; track filter.name) {\n <div class=\"filter-card\" style=\"background: white; border: 1px solid #e9ecef; border-radius: 4px; padding: 12px;\">\n <div style=\"font-family: 'Courier New', monospace; font-weight: bold; color: #007bff; margin-bottom: 4px;\">\n {{ filter.name }}\n </div>\n <div style=\"font-size: 0.85em; color: #495057; margin-bottom: 8px;\">\n {{ filter.description }}\n </div>\n <div style=\"font-family: 'Courier New', monospace; font-size: 0.8em; background: #f1f3f4; padding: 6px; border-radius: 3px; margin-bottom: 4px;\">\n {{ filter.exampleSyntax }}\n </div>\n @if (filter.notes) {\n <div style=\"font-size: 0.75em; color: #6c757d; font-style: italic;\">\n {{ filter.notes }}\n </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 style=\"margin-bottom: 16px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: #6c757d;\"></i>\n Query Parameters\n @if (queryParameters.length > 0) {\n <span class=\"badge\" style=\"background: #17a2b8; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ queryParameters.length }}\n </span>\n }\n </span>\n </ng-template>\n\n <div style=\"padding: 16px 0;\">\n @if (isLoadingParameters) {\n <div style=\"display: flex; align-items: center; justify-content: center; padding: 40px;\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 24px; color: #6c757d; margin-right: 12px;\"></i>\n <span style=\"color: #6c757d;\">Loading parameters...</span>\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-param-btn\" (click)=\"addParameter()\">\n <i class=\"fa-solid fa-plus\"></i> Add First Parameter\n </button>\n }\n </div>\n } @else {\n <!-- Parameters Header with Add Button -->\n @if (EditMode) {\n <div style=\"display: flex; justify-content: flex-end; margin-bottom: 16px; padding: 0 20px;\">\n <button type=\"button\" class=\"add-param-btn\" (click)=\"addParameter()\">\n <i class=\"fa-solid fa-plus\"></i> Add Parameter\n </button>\n </div>\n }\n\n <!-- Parameters Grid -->\n <div class=\"parameters-grid\">\n @for (param of queryParameters; track param.ID || $index) {\n <div class=\"param-card\" [class.required]=\"param.IsRequired\" (click)=\"editParameter(param)\">\n <div class=\"param-card-header\">\n <div class=\"param-name\">\n <i class=\"fa-solid fa-at\" style=\"color: #007bff;\"></i>\n {{ param.Name }}\n </div>\n <div class=\"param-badges\">\n @if (param.IsRequired) {\n <span class=\"param-badge required\">Required</span>\n }\n </div>\n </div>\n\n <div class=\"param-card-body\">\n @if (param.Description) {\n <div style=\"margin-bottom: 8px;\">{{ param.Description }}</div>\n }\n\n <div style=\"display: flex; gap: 16px; font-size: 0.85em;\">\n <div>\n <strong>Type:</strong> {{ param.Type || 'Text' }}\n </div>\n @if (param.DefaultValue) {\n <div>\n <strong>Default:</strong>\n <code style=\"background: #f1f3f4; padding: 2px 4px; border-radius: 3px;\">\n {{ param.DefaultValue }}\n </code>\n </div>\n }\n </div>\n </div>\n\n @if (EditMode) {\n <div class=\"param-actions\" (click)=\"$event.stopPropagation()\">\n <button type=\"button\" class=\"param-action-btn\" (click)=\"editParameter(param)\" title=\"Edit parameter\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n <button type=\"button\" class=\"param-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 style=\"margin-bottom: 16px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-table\" style=\"color: #6c757d;\"></i>\n Query Fields\n @if (queryFields.length > 0) {\n <span class=\"badge\" style=\"background: #17a2b8; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ queryFields.length }}\n </span>\n }\n </span>\n </ng-template>\n\n <div style=\"padding: 16px 0;\">\n @if (isLoadingFields) {\n <div style=\"display: flex; justify-content: center; padding: 40px;\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 2em; color: #007bff;\"></i>\n </div>\n } @else {\n @if (queryFields.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-table\" style=\"font-size: 3em; color: #dee2e6; margin-bottom: 12px;\"></i>\n <h5 style=\"color: #6c757d; margin-bottom: 8px;\">No Fields Defined</h5>\n <div style=\"color: #adb5bd; margin-bottom: 16px;\">\n Define output fields for your query results.\n </div>\n @if (EditMode) {\n <button type=\"button\" class=\"add-param-btn\" (click)=\"addField()\">\n <i class=\"fa-solid fa-plus\"></i> Add First Field\n </button>\n }\n </div>\n } @else {\n <!-- Fields Header with Add Button -->\n @if (EditMode) {\n <div style=\"display: flex; justify-content: flex-end; margin-bottom: 16px; padding: 0 20px;\">\n <button type=\"button\" class=\"add-param-btn\" (click)=\"addField()\">\n <i class=\"fa-solid fa-plus\"></i> Add Field\n </button>\n </div>\n }\n\n <!-- Fields Grid -->\n <div class=\"parameters-grid\">\n @for (field of queryFields; track field.ID) {\n <div class=\"param-card\">\n <div class=\"param-card-header\">\n <div class=\"param-name\">\n <i class=\"fa-solid fa-columns\" style=\"color: #17a2b8;\"></i>\n {{ field.Name }}\n </div>\n <div class=\"param-badges\">\n <span class=\"param-badge\" style=\"background: #e3f2fd; color: #1976d2;\">{{ field.SQLBaseType }}</span>\n @if (field.Sequence) {\n <span class=\"param-badge\" style=\"background: #f3e5f5; color: #7b1fa2;\">#{{ field.Sequence }}</span>\n }\n </div>\n </div>\n\n <div class=\"param-card-body\">\n @if (field.Description) {\n <div class=\"param-description\">{{ field.Description }}</div>\n }\n <div class=\"param-meta\">\n <span class=\"meta-item\">\n <i class=\"fa-solid fa-code\"></i> {{ field.SQLFullType || field.SQLBaseType }}\n </span>\n </div>\n </div>\n\n @if (EditMode) {\n <div class=\"param-card-actions\">\n <button type=\"button\" class=\"action-btn danger\" (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 style=\"margin-bottom: 16px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-database\" style=\"color: #6c757d;\"></i>\n Query Entities\n @if (queryEntities.length > 0) {\n <span class=\"badge\" style=\"background: #17a2b8; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ queryEntities.length }}\n </span>\n }\n </span>\n </ng-template>\n\n <div style=\"padding: 16px 0;\">\n @if (isLoadingEntities) {\n <div style=\"display: flex; justify-content: center; padding: 40px;\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 2em; color: #007bff;\"></i>\n </div>\n } @else {\n @if (queryEntities.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-database\" style=\"font-size: 3em; color: #dee2e6; margin-bottom: 12px;\"></i>\n <h5 style=\"color: #6c757d; margin-bottom: 8px;\">No Entities Tracked</h5>\n <div style=\"color: #adb5bd; margin-bottom: 16px;\">\n Track which entities this query uses for documentation.\n </div>\n @if (EditMode) {\n <button type=\"button\" class=\"add-param-btn\" (click)=\"addEntity()\">\n <i class=\"fa-solid fa-plus\"></i> Add First Entity\n </button>\n }\n </div>\n } @else {\n <!-- Entities Header with Add Button -->\n @if (EditMode) {\n <div style=\"display: flex; justify-content: flex-end; margin-bottom: 16px; padding: 0 20px;\">\n <button type=\"button\" class=\"add-param-btn\" (click)=\"addEntity()\">\n <i class=\"fa-solid fa-plus\"></i> Add Entity\n </button>\n </div>\n }\n\n <!-- Entities Grid -->\n <div class=\"parameters-grid\">\n @for (entity of queryEntities; track entity.ID) {\n <div class=\"param-card\">\n <div class=\"param-card-header\">\n <div class=\"param-name\">\n <i class=\"fa-solid fa-table\" style=\"color: #28a745;\"></i>\n {{ entity.Entity || 'Select Entity...' }}\n </div>\n @if (EditMode) {\n <div style=\"flex: 1; margin-left: 12px;\">\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 style=\"width: 100%;\">\n </kendo-dropdownlist>\n </div>\n }\n </div>\n\n @if (!EditMode && entity.Entity) {\n <div class=\"param-card-body\">\n <div class=\"param-meta\">\n <span class=\"meta-item\">\n <i class=\"fa-solid fa-database\"></i> Data Source\n </span>\n </div>\n </div>\n }\n\n @if (EditMode) {\n <div class=\"param-card-actions\">\n <button type=\"button\" class=\"action-btn danger\" (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 style=\"margin-bottom: 16px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-info-circle\" style=\"color: #6c757d;\"></i>\n Query Details\n </span>\n </ng-template>\n\n <div style=\"padding: 20px;\">\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 style=\"color: #28a745;\"><i class=\"fa-solid fa-check\"></i> Uses Templates</span>\n } @else {\n <span style=\"color: #6c757d;\"><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 style=\"margin-bottom: 16px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-shield-alt\" style=\"color: #6c757d;\"></i>\n Query Permissions\n </span>\n </ng-template>\n\n <div style=\"padding: 16px 0;\">\n @if (isLoadingPermissions) {\n <div style=\"display: flex; justify-content: center; padding: 40px;\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 2em; color: #007bff;\"></i>\n </div>\n } @else {\n @if (queryPermissions.length === 0 && !EditMode) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-shield-alt\" style=\"font-size: 3em; color: #dee2e6; margin-bottom: 12px;\"></i>\n <h5 style=\"color: #6c757d; margin-bottom: 8px;\">No Permissions Set</h5>\n <div style=\"color: #adb5bd;\">\n This query uses default permissions.\n </div>\n </div>\n } @else {\n @if (EditMode) {\n <!-- Edit Mode: Use the standard grid -->\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 <!-- Read Mode: Nice card-based display -->\n <div class=\"permissions-display\">\n @for (permission of queryPermissions; track permission.ID) {\n <div class=\"permission-card\" style=\"background: #f8f9fa; border: 1px solid #dee2e6; border-radius: 8px; padding: 16px; margin-bottom: 12px;\">\n <div style=\"display: flex; align-items: center; gap: 12px;\">\n <i class=\"fa-solid fa-users\" style=\"font-size: 1.5em; color: #6c757d;\"></i>\n <div style=\"flex: 1;\">\n <div style=\"font-weight: 600; color: #495057;\">\n {{ permission.Role }}\n </div>\n <div style=\"font-size: 0.85em; color: #6c757d;\">\n Role Permission\n </div>\n </div>\n <div style=\"display: flex; gap: 8px;\">\n <span class=\"permission-badge\" style=\"background: #6f42c1; color: white; padding: 4px 8px; border-radius: 4px; font-size: 0.8em;\">\n <i class=\"fa-solid fa-play\"></i> Can Execute\n </span>\n </div>\n </div>\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>"]}
|
|
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"]}
|
|
@@ -63,9 +63,10 @@ import * as i61 from "@memberjunction/ng-entity-relationship-diagram";
|
|
|
63
63
|
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
|
+
import * as i65 from "@memberjunction/ng-entity-viewer";
|
|
66
67
|
export declare class MemberJunctionCoreEntityFormsModule {
|
|
67
68
|
static ɵfac: i0.ɵɵFactoryDeclaration<MemberJunctionCoreEntityFormsModule, never>;
|
|
68
|
-
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 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]>;
|
|
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]>;
|
|
69
70
|
static ɵinj: i0.ɵɵInjectorDeclaration<MemberJunctionCoreEntityFormsModule>;
|
|
70
71
|
}
|
|
71
72
|
//# 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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqEA,qBAsHa,mCAAmC;yCAAnC,mCAAmC;0CAAnC,mCAAmC;0CAAnC,mCAAmC;CAAI"}
|
|
@@ -11,6 +11,7 @@ import { GridModule } from '@progress/kendo-angular-grid';
|
|
|
11
11
|
import { BaseFormsModule } from '@memberjunction/ng-base-forms';
|
|
12
12
|
import { LinkDirectivesModule } from '@memberjunction/ng-link-directives';
|
|
13
13
|
import { SharedGenericModule } from '@memberjunction/ng-shared-generic';
|
|
14
|
+
import { EntityViewerModule } from '@memberjunction/ng-entity-viewer';
|
|
14
15
|
import { MJEntityFormComponentExtended } from "./Entities/entity-form.component";
|
|
15
16
|
import { MJTabStripModule } from "@memberjunction/ng-tabstrip";
|
|
16
17
|
import { MJEntityActionFormComponentExtended } from "./EntityActions/entityaction.form.component";
|
|
@@ -113,7 +114,8 @@ export class MemberJunctionCoreEntityFormsModule {
|
|
|
113
114
|
EntityRelationshipDiagramModule,
|
|
114
115
|
ListManagementModule,
|
|
115
116
|
ActionsModule,
|
|
116
|
-
AgentsModule,
|
|
117
|
+
AgentsModule,
|
|
118
|
+
EntityViewerModule, ActionsModule] }); }
|
|
117
119
|
}
|
|
118
120
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MemberJunctionCoreEntityFormsModule, [{
|
|
119
121
|
type: NgModule,
|
|
@@ -200,7 +202,8 @@ export class MemberJunctionCoreEntityFormsModule {
|
|
|
200
202
|
EntityRelationshipDiagramModule,
|
|
201
203
|
ListManagementModule,
|
|
202
204
|
ActionsModule,
|
|
203
|
-
AgentsModule
|
|
205
|
+
AgentsModule,
|
|
206
|
+
EntityViewerModule
|
|
204
207
|
],
|
|
205
208
|
exports: [
|
|
206
209
|
MJEntityFormComponentExtended,
|
|
@@ -313,7 +316,8 @@ export class MemberJunctionCoreEntityFormsModule {
|
|
|
313
316
|
EntityRelationshipDiagramModule,
|
|
314
317
|
ListManagementModule,
|
|
315
318
|
ActionsModule,
|
|
316
|
-
AgentsModule
|
|
319
|
+
AgentsModule,
|
|
320
|
+
EntityViewerModule], exports: [MJEntityFormComponentExtended,
|
|
317
321
|
MJEntityActionFormComponentExtended,
|
|
318
322
|
MJTemplateFormComponentExtended,
|
|
319
323
|
TemplateEditorComponent,
|