@memberjunction/ng-core-entity-forms 5.47.0 → 5.49.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/Lists/list-form.component.d.ts +8 -0
- package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Lists/list-form.component.js +341 -228
- package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.js +5 -2
- package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-checks.d.ts +28 -0
- package/dist/lib/custom/Tests/test-run-checks.d.ts.map +1 -0
- package/dist/lib/custom/Tests/test-run-checks.js +31 -0
- package/dist/lib/custom/Tests/test-run-checks.js.map +1 -0
- package/dist/lib/custom/Tests/test-run-form.component.d.ts +2 -7
- package/dist/lib/custom/Tests/test-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.js +3 -5
- package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +250 -236
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentType/mjaiagenttype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentType/mjaiagenttype.form.component.js +37 -17
- package/dist/lib/generated/Entities/MJAIAgentType/mjaiagenttype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js +84 -30
- package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +30 -12
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js +66 -62
- package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTheme/mjtheme.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJTheme/mjtheme.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJTheme/mjtheme.form.component.js +94 -0
- package/dist/lib/generated/Entities/MJTheme/mjtheme.form.component.js.map +1 -0
- package/dist/lib/generated/generated-forms.module.d.ts +32 -31
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +8 -5
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/package.json +40 -39
- package/dist/__tests__/bridge-provider-features.test.d.ts +0 -2
- package/dist/__tests__/bridge-provider-features.test.d.ts.map +0 -1
- package/dist/__tests__/bridge-provider-features.test.js +0 -70
- package/dist/__tests__/bridge-provider-features.test.js.map +0 -1
- package/dist/__tests__/core-entity-forms.test.d.ts +0 -2
- package/dist/__tests__/core-entity-forms.test.d.ts.map +0 -1
- package/dist/__tests__/core-entity-forms.test.js +0 -21
- package/dist/__tests__/core-entity-forms.test.js.map +0 -1
- package/dist/__tests__/model-prediction.logic.test.d.ts +0 -2
- package/dist/__tests__/model-prediction.logic.test.d.ts.map +0 -1
- package/dist/__tests__/model-prediction.logic.test.js +0 -140
- package/dist/__tests__/model-prediction.logic.test.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-params-grid.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/Templates/template-params-grid.component.ts","../../../../src/lib/custom/Templates/template-params-grid.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, OnInit, OnChanges, SimpleChanges, inject } from '@angular/core';\nimport { MJTemplateEntity, MJTemplateParamEntity } from '@memberjunction/core-entities';\nimport { Metadata, RunView } from '@memberjunction/core';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { MJConfirmService } from '@memberjunction/ng-ui-components';\nimport {\n ColDef,\n GridReadyEvent,\n GridApi,\n GetRowIdParams,\n ModuleRegistry,\n AllCommunityModule,\n RowEditingStoppedEvent,\n ICellRendererParams,\n themeAlpine,\n colorSchemeVariable,\n type Theme\n} from 'ag-grid-community';\n\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\n// Register AG Grid modules\nModuleRegistry.registerModules([AllCommunityModule]);\n\n/** Valid parameter type values, matching the entity's union type */\ntype ParamType = 'Array' | 'Entity' | 'Object' | 'Record' | 'Scalar';\n\n/** Row data shape for the grid (flattened from the entity for editing) */\ninterface ParamRowData {\n /** Entity reference for save/delete operations */\n Entity: MJTemplateParamEntity;\n /** Used as row ID; empty string for unsaved new rows */\n ID: string;\n Name: string;\n Type: ParamType;\n IsRequired: boolean;\n Description: string;\n DefaultValue: string;\n LinkedParameterName: string;\n LinkedParameterField: string;\n /** Tracks whether this row is brand-new (not yet persisted) */\n IsNew: boolean;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-template-params-grid',\n templateUrl: './template-params-grid.component.html',\n styleUrls: ['./template-params-grid.component.css']\n})\nexport class TemplateParamsGridComponent extends BaseAngularComponent implements OnInit, OnChanges {\n @Input() template: MJTemplateEntity | null = null;\n @Input() editMode: boolean = false;\n\n private confirmService = inject(MJConfirmService);\n\n public templateParams: ParamRowData[] = [];\n public isLoading = false;\n\n // Type options for dropdown\n public typeOptions = ['Scalar', 'Array', 'Object', 'Record', 'Entity'];\n\n // AG Grid configuration\n public ColumnDefs: ColDef[] = [];\n public DefaultColDef: ColDef = {\n sortable: true,\n resizable: true,\n filter: false,\n flex: 1\n };\n public GridTheme: Theme = themeAlpine.withPart(colorSchemeVariable);\n private gridApi: GridApi | null = null;\n\n /** Row currently being edited (for cancel/revert) */\n private editingRowBackup: ParamRowData | null = null;\n private editingRowId: string | null = null;\n\n public noRowsTemplate = `\n <div style=\"text-align: center; padding: 40px 20px; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-info-circle\" style=\"font-size: 2em; margin-bottom: 10px;\"></i>\n <p>No parameters defined for this template.</p>\n </div>\n `;\n\n public getRowId = (params: GetRowIdParams<ParamRowData>): string => {\n // Use entity ID if saved, otherwise use a temporary key\n return params.data.ID || `new_${params.data.Name}_${Date.now()}`;\n };\n\n ngOnInit() {\n this.buildColumnDefs();\n if (this.template?.ID) {\n this.loadTemplateParams();\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['template'] && this.template?.ID) {\n this.loadTemplateParams();\n }\n if (changes['editMode']) {\n this.buildColumnDefs();\n }\n }\n\n public onGridReady(event: GridReadyEvent): void {\n this.gridApi = event.api;\n }\n\n async loadTemplateParams() {\n if (!this.template?.ID) return;\n\n this.isLoading = true;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const results = await rv.RunView<MJTemplateParamEntity>({\n EntityName: 'MJ: Template Params',\n ExtraFilter: `TemplateID='${this.template.ID}'`,\n OrderBy: 'Name ASC',\n ResultType: 'entity_object'\n });\n\n if (results.Success) {\n const entities = results.Results || [];\n this.templateParams = entities.map(e => this.entityToRowData(e));\n } else {\n console.error('Failed to load template params:', results.ErrorMessage);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to load template parameters',\n 'error'\n );\n }\n } catch (error) {\n console.error('Error loading template params:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error loading template parameters',\n 'error'\n );\n } finally {\n this.isLoading = false;\n }\n }\n\n // -- Grid editing lifecycle --\n\n public async addNewParam(): Promise<void> {\n if (!this.editMode || !this.template?.ID) return;\n\n // Cancel any in-progress edit first\n this.cancelCurrentEdit();\n\n const newEntity = await this.createNewParamEntity();\n if (!newEntity) return;\n\n const newRow = this.entityToRowData(newEntity);\n newRow.IsNew = true;\n // Prepend the new row\n this.templateParams = [newRow, ...this.templateParams];\n\n // Wait for grid to process the new row, then start editing it\n setTimeout(() => {\n if (!this.gridApi) return;\n const rowNode = this.gridApi.getDisplayedRowAtIndex(0);\n if (rowNode) {\n this.editingRowId = rowNode.id ?? null;\n this.editingRowBackup = { ...newRow };\n this.gridApi.startEditingCell({\n rowIndex: 0,\n colKey: 'Name'\n });\n this.gridApi.refreshCells({ columns: ['actions'], force: true });\n }\n });\n }\n\n public startEditRow(params: ICellRendererParams): void {\n if (!this.gridApi || !this.editMode) return;\n\n // Cancel any in-progress edit first\n this.cancelCurrentEdit();\n\n const rowIndex = params.node.rowIndex;\n if (rowIndex == null) return;\n\n this.editingRowId = params.node.id ?? null;\n this.editingRowBackup = { ...params.data };\n this.gridApi.startEditingCell({\n rowIndex,\n colKey: 'Name'\n });\n this.gridApi.refreshCells({ columns: ['actions'], force: true });\n }\n\n public cancelEditRow(): void {\n this.cancelCurrentEdit();\n }\n\n public saveEditRow(): void {\n if (!this.gridApi) return;\n // stopEditing triggers onRowEditingStopped, which handles the save\n this.gridApi.stopEditing(false);\n this.gridApi.refreshCells({ columns: ['actions'], force: true });\n }\n\n public async onRowEditingStopped(event: RowEditingStoppedEvent): Promise<void> {\n const rowData = event.data as ParamRowData;\n if (!rowData) return;\n\n // If the user cancelled (via Escape or cancel button backup restore), skip save\n if (this.editingRowBackup === null) return;\n\n // Validate: Name is required\n if (!rowData.Name || rowData.Name.trim().length === 0) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Parameter name is required',\n 'error'\n );\n // If it was a new unsaved row, remove it\n if (rowData.IsNew) {\n this.templateParams = this.templateParams.filter(p => p !== rowData);\n } else if (this.editingRowBackup) {\n // Revert to backup\n this.revertRow(event.node, this.editingRowBackup);\n }\n this.clearEditState();\n return;\n }\n\n await this.saveParamRow(rowData);\n this.clearEditState();\n }\n\n public async deleteRow(params: ICellRendererParams): Promise<void> {\n if (!this.editMode) return;\n\n const rowData = params.data as ParamRowData;\n const entity = rowData.Entity;\n\n if (!(await this.confirmService.ConfirmDelete({ title: 'Delete Parameter', message: `Delete the parameter \"${rowData.Name}\"?` }))) {\n return;\n }\n\n try {\n if (entity.ID) {\n const deleted = await entity.Delete();\n if (deleted) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Parameter \"${rowData.Name}\" deleted successfully`,\n 'success'\n );\n this.templateParams = this.templateParams.filter(p => p !== rowData);\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to delete parameter: ${entity.LatestResult?.Message || 'Unknown error'}`,\n 'error'\n );\n }\n } else {\n // Not yet saved -- just remove from the array\n this.templateParams = this.templateParams.filter(p => p !== rowData);\n }\n } catch (error) {\n console.error('Error deleting parameter:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error deleting parameter',\n 'error'\n );\n }\n }\n\n // -- Helpers --\n\n public getTypeIcon(type: string): string {\n switch (type) {\n case 'Scalar': return 'fa-font';\n case 'Array': return 'fa-list';\n case 'Object': return 'fa-cube';\n case 'Record': return 'fa-file';\n case 'Entity': return 'fa-table';\n default: return 'fa-question';\n }\n }\n\n private entityToRowData(entity: MJTemplateParamEntity): ParamRowData {\n return {\n Entity: entity,\n ID: entity.ID || '',\n Name: entity.Name || '',\n Type: entity.Type || 'Scalar',\n IsRequired: entity.IsRequired || false,\n Description: entity.Description || '',\n DefaultValue: entity.DefaultValue || '',\n LinkedParameterName: entity.LinkedParameterName || '',\n LinkedParameterField: entity.LinkedParameterField || '',\n IsNew: false\n };\n }\n\n private async saveParamRow(rowData: ParamRowData): Promise<void> {\n const entity = rowData.Entity;\n\n entity.Name = rowData.Name;\n entity.Type = rowData.Type;\n entity.IsRequired = rowData.IsRequired;\n entity.Description = rowData.Description;\n entity.DefaultValue = rowData.DefaultValue;\n\n // Handle linked parameter fields for Entity type\n if (rowData.Type === 'Entity') {\n entity.LinkedParameterName = rowData.LinkedParameterName;\n entity.LinkedParameterField = rowData.LinkedParameterField;\n } else {\n entity.LinkedParameterName = null;\n entity.LinkedParameterField = null;\n }\n\n try {\n const saved = await entity.Save();\n if (saved) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Parameter \"${entity.Name}\" saved successfully`,\n 'success'\n );\n // Update the row data with the saved entity ID\n rowData.ID = entity.ID;\n rowData.IsNew = false;\n // Refresh the grid to pick up the new ID\n this.templateParams = [...this.templateParams];\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to save parameter: ${entity.LatestResult?.Message || 'Unknown error'}`,\n 'error'\n );\n await this.loadTemplateParams();\n }\n } catch (error) {\n console.error('Error saving parameter:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error saving parameter',\n 'error'\n );\n await this.loadTemplateParams();\n }\n }\n\n private async createNewParamEntity(): Promise<MJTemplateParamEntity | null> {\n if (!this.template?.ID) return null;\n\n try {\n const md = this.ProviderToUse;\n const newParam = await md.GetEntityObject<MJTemplateParamEntity>('MJ: Template Params');\n newParam.TemplateID = this.template.ID;\n newParam.Type = 'Scalar';\n newParam.IsRequired = false;\n\n return newParam;\n } catch (error) {\n console.error('Error creating new parameter:', error);\n return null;\n }\n }\n\n private cancelCurrentEdit(): void {\n if (!this.gridApi) return;\n\n if (this.editingRowBackup && this.editingRowId) {\n const rowNode = this.gridApi.getRowNode(this.editingRowId);\n if (rowNode) {\n // If the row was new and unsaved, remove it\n if (this.editingRowBackup.IsNew) {\n const backup = this.editingRowBackup;\n this.clearEditState();\n this.gridApi.stopEditing(true);\n this.templateParams = this.templateParams.filter(p => p.Entity !== backup.Entity);\n return;\n }\n // Revert to backup\n this.revertRow(rowNode, this.editingRowBackup);\n }\n }\n\n this.clearEditState();\n this.gridApi.stopEditing(true);\n this.gridApi.refreshCells({ columns: ['actions'], force: true });\n }\n\n private revertRow(rowNode: { setData: (data: ParamRowData) => void }, backup: ParamRowData): void {\n rowNode.setData(backup);\n }\n\n private clearEditState(): void {\n this.editingRowBackup = null;\n this.editingRowId = null;\n }\n\n private buildColumnDefs(): void {\n const self = this;\n\n const cols: ColDef[] = [\n {\n field: 'Name',\n headerName: 'Parameter Name',\n width: 200,\n editable: this.editMode,\n cellRenderer: (params: ICellRendererParams) => {\n if (!params.value) return '';\n const row = params.data as ParamRowData;\n let html = `<strong>${params.value}</strong>`;\n if (row.IsRequired) {\n html += ` <span style=\"display: inline-flex; align-items: center; gap: 4px; background-color: var(--mj-status-error); color: var(--mj-text-inverse); padding: 2px 8px; border-radius: 12px; font-size: 0.75em; font-weight: 500;\"><i class=\"fa-solid fa-asterisk\" style=\"font-size: 0.6em;\"></i> Required</span>`;\n }\n return html;\n }\n },\n {\n field: 'Type',\n headerName: 'Type',\n width: 140,\n editable: this.editMode,\n cellEditor: 'agSelectCellEditor',\n cellEditorParams: {\n values: this.typeOptions\n },\n cellRenderer: (params: ICellRendererParams) => {\n if (!params.value) return '';\n const icon = self.getTypeIcon(params.value);\n return `<span style=\"display: flex; align-items: center; gap: 6px; color: var(--mj-text-secondary);\"><i class=\"fa-solid ${icon}\" style=\"color: var(--mj-text-muted);\"></i> ${params.value}</span>`;\n }\n },\n {\n field: 'IsRequired',\n headerName: 'Required',\n width: 100,\n editable: this.editMode,\n cellDataType: 'boolean',\n cellRenderer: (params: ICellRendererParams) => {\n if (params.value) {\n return `<div style=\"text-align: center;\"><i class=\"fa-solid fa-check\" style=\"color: var(--mj-status-success);\"></i></div>`;\n }\n return `<div style=\"text-align: center;\"><i class=\"fa-solid fa-times\" style=\"color: var(--mj-text-muted);\"></i></div>`;\n }\n },\n {\n field: 'Description',\n headerName: 'Description',\n width: 300,\n editable: this.editMode,\n cellRenderer: (params: ICellRendererParams) => {\n return params.value || '<span style=\"color: var(--mj-text-muted); font-style: italic; font-size: 0.9em;\">(No description)</span>';\n }\n },\n {\n field: 'DefaultValue',\n headerName: 'Default Value',\n width: 200,\n editable: this.editMode,\n cellRenderer: (params: ICellRendererParams) => {\n if (params.value) {\n return `<code style=\"background-color: var(--mj-bg-surface-card); padding: 2px 6px; border-radius: 3px; font-size: 0.85em; color: var(--mj-text-secondary);\">${params.value}</code>`;\n }\n return '<span style=\"color: var(--mj-text-muted); font-style: italic; font-size: 0.9em;\">(No default)</span>';\n }\n }\n ];\n\n if (this.editMode) {\n cols.push({\n headerName: 'Actions',\n width: 120,\n sortable: false,\n resizable: false,\n editable: false,\n cellRenderer: ActionsCellRenderer,\n cellRendererParams: {\n componentRef: self\n }\n });\n }\n\n this.ColumnDefs = cols;\n }\n}\n\n/**\n * Inline cell renderer for edit/delete/save/cancel action buttons.\n * This is a plain-JS AG Grid cell renderer (not an Angular component)\n * because the grid doesn't support Angular component renderers without\n * the AG Grid Enterprise \"Framework Components\" feature.\n */\nfunction ActionsCellRenderer(params: ICellRendererParams & { componentRef: TemplateParamsGridComponent }): HTMLElement {\n const container = document.createElement('div');\n container.style.display = 'flex';\n container.style.gap = '4px';\n container.style.alignItems = 'center';\n\n const comp = params.componentRef;\n const isEditing = params.node.rowIndex != null && params.api.getEditingCells().some(\n cell => cell.rowIndex === params.node.rowIndex\n );\n\n if (isEditing) {\n // Save button\n const saveBtn = createActionButton('fa-check', 'Save changes', 'var(--mj-brand-primary)');\n saveBtn.addEventListener('click', (e) => {\n e.stopPropagation();\n comp.saveEditRow();\n });\n container.appendChild(saveBtn);\n\n // Cancel button\n const cancelBtn = createActionButton('fa-times', 'Cancel changes', 'var(--mj-text-secondary)');\n cancelBtn.addEventListener('click', (e) => {\n e.stopPropagation();\n comp.cancelEditRow();\n });\n container.appendChild(cancelBtn);\n } else {\n // Edit button\n const editBtn = createActionButton('fa-edit', 'Edit parameter', 'var(--mj-text-secondary)');\n editBtn.addEventListener('click', (e) => {\n e.stopPropagation();\n comp.startEditRow(params);\n });\n container.appendChild(editBtn);\n\n // Delete button\n const deleteBtn = createActionButton('fa-trash', 'Delete parameter', 'var(--mj-status-error)');\n deleteBtn.addEventListener('click', (e) => {\n e.stopPropagation();\n comp.deleteRow(params);\n });\n container.appendChild(deleteBtn);\n }\n\n return container;\n}\n\nfunction createActionButton(iconClass: string, title: string, color: string): HTMLButtonElement {\n const btn = document.createElement('button');\n btn.type = 'button';\n btn.title = title;\n btn.style.cssText = `\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: ${color};\n border-radius: 4px;\n padding: 4px 8px;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n `;\n const icon = document.createElement('i');\n icon.className = `fa-solid ${iconClass}`;\n btn.appendChild(icon);\n return btn;\n}\n","<div class=\"template-params-grid\">\n <div class=\"params-header\">\n <h3><i class=\"fa-solid fa-sliders\"></i> Template Parameters</h3>\n <p class=\"params-description\">\n Define the parameters that can be used within this template. Parameters allow dynamic content injection at runtime.\n </p>\n </div>\n\n @if (editMode) {\n <div class=\"params-toolbar\">\n <button mjButton variant=\"primary\" (click)=\"addNewParam()\">\n <i class=\"fa-solid fa-plus\"></i> Add Parameter\n </button>\n </div>\n }\n\n <ag-grid-angular\n class=\"params-ag-grid\"\n [theme]=\"GridTheme\"\n [rowData]=\"templateParams\"\n [columnDefs]=\"ColumnDefs\"\n [defaultColDef]=\"DefaultColDef\"\n [editType]=\"'fullRow'\"\n [getRowId]=\"getRowId\"\n [suppressClickEdit]=\"true\"\n [overlayNoRowsTemplate]=\"noRowsTemplate\"\n (gridReady)=\"onGridReady($event)\"\n (rowEditingStopped)=\"onRowEditingStopped($event)\"\n style=\"width: 100%; height: 400px;\">\n </ag-grid-angular>\n\n <!-- Help Section -->\n @if (editMode) {\n <div class=\"params-help\">\n <h4><i class=\"fa-solid fa-question-circle\"></i> Parameter Types</h4>\n <ul>\n <li><strong>Scalar:</strong> Single value like text, number, or boolean</li>\n <li><strong>Array:</strong> List of values</li>\n <li><strong>Object:</strong> JSON object with multiple properties</li>\n <li><strong>Record:</strong> Single record from a MemberJunction entity</li>\n <li><strong>Entity:</strong> Multiple records from a MemberJunction entity (can be filtered)</li>\n </ul>\n <p class=\"help-note\">\n <i class=\"fa-solid fa-lightbulb\"></i>\n Use parameters in your template with the syntax: <code>{{ '{{' }} parameterName {{ '}}' }}</code>\n </p>\n </div>\n }\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"template-params-grid.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/Templates/template-params-grid.component.ts","../../../../src/lib/custom/Templates/template-params-grid.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, OnInit, OnChanges, SimpleChanges, inject } from '@angular/core';\nimport { MJTemplateEntity, MJTemplateParamEntity } from '@memberjunction/core-entities';\nimport { Metadata, RunView } from '@memberjunction/core';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { MJConfirmService } from '@memberjunction/ng-ui-components';\nimport {\n ColDef,\n GridReadyEvent,\n GridApi,\n GetRowIdParams,\n ModuleRegistry,\n AllCommunityModule,\n RowEditingStoppedEvent,\n ICellRendererParams,\n themeAlpine,\n type Theme\n} from 'ag-grid-community';\n\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { MJ_AG_GRID_THEME_PARAMS } from '@memberjunction/ng-shared-generic';\n// Register AG Grid modules\nModuleRegistry.registerModules([AllCommunityModule]);\n\n/** Valid parameter type values, matching the entity's union type */\ntype ParamType = 'Array' | 'Entity' | 'Object' | 'Record' | 'Scalar';\n\n/** Row data shape for the grid (flattened from the entity for editing) */\ninterface ParamRowData {\n /** Entity reference for save/delete operations */\n Entity: MJTemplateParamEntity;\n /** Used as row ID; empty string for unsaved new rows */\n ID: string;\n Name: string;\n Type: ParamType;\n IsRequired: boolean;\n Description: string;\n DefaultValue: string;\n LinkedParameterName: string;\n LinkedParameterField: string;\n /** Tracks whether this row is brand-new (not yet persisted) */\n IsNew: boolean;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-template-params-grid',\n templateUrl: './template-params-grid.component.html',\n styleUrls: ['./template-params-grid.component.css']\n})\nexport class TemplateParamsGridComponent extends BaseAngularComponent implements OnInit, OnChanges {\n @Input() template: MJTemplateEntity | null = null;\n @Input() editMode: boolean = false;\n\n private confirmService = inject(MJConfirmService);\n\n public templateParams: ParamRowData[] = [];\n public isLoading = false;\n\n // Type options for dropdown\n public typeOptions = ['Scalar', 'Array', 'Object', 'Record', 'Entity'];\n\n // AG Grid configuration\n public ColumnDefs: ColDef[] = [];\n public DefaultColDef: ColDef = {\n sortable: true,\n resizable: true,\n filter: false,\n flex: 1\n };\n // Themed from the shared --mj-* token params so this grid follows light/dark and\n // the org brand overlay, matching the main entity/query grids.\n public GridTheme: Theme = themeAlpine.withParams(MJ_AG_GRID_THEME_PARAMS);\n private gridApi: GridApi | null = null;\n\n /** Row currently being edited (for cancel/revert) */\n private editingRowBackup: ParamRowData | null = null;\n private editingRowId: string | null = null;\n\n public noRowsTemplate = `\n <div style=\"text-align: center; padding: 40px 20px; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-info-circle\" style=\"font-size: 2em; margin-bottom: 10px;\"></i>\n <p>No parameters defined for this template.</p>\n </div>\n `;\n\n public getRowId = (params: GetRowIdParams<ParamRowData>): string => {\n // Use entity ID if saved, otherwise use a temporary key\n return params.data.ID || `new_${params.data.Name}_${Date.now()}`;\n };\n\n ngOnInit() {\n this.buildColumnDefs();\n if (this.template?.ID) {\n this.loadTemplateParams();\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['template'] && this.template?.ID) {\n this.loadTemplateParams();\n }\n if (changes['editMode']) {\n this.buildColumnDefs();\n }\n }\n\n public onGridReady(event: GridReadyEvent): void {\n this.gridApi = event.api;\n }\n\n async loadTemplateParams() {\n if (!this.template?.ID) return;\n\n this.isLoading = true;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const results = await rv.RunView<MJTemplateParamEntity>({\n EntityName: 'MJ: Template Params',\n ExtraFilter: `TemplateID='${this.template.ID}'`,\n OrderBy: 'Name ASC',\n ResultType: 'entity_object'\n });\n\n if (results.Success) {\n const entities = results.Results || [];\n this.templateParams = entities.map(e => this.entityToRowData(e));\n } else {\n console.error('Failed to load template params:', results.ErrorMessage);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to load template parameters',\n 'error'\n );\n }\n } catch (error) {\n console.error('Error loading template params:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error loading template parameters',\n 'error'\n );\n } finally {\n this.isLoading = false;\n }\n }\n\n // -- Grid editing lifecycle --\n\n public async addNewParam(): Promise<void> {\n if (!this.editMode || !this.template?.ID) return;\n\n // Cancel any in-progress edit first\n this.cancelCurrentEdit();\n\n const newEntity = await this.createNewParamEntity();\n if (!newEntity) return;\n\n const newRow = this.entityToRowData(newEntity);\n newRow.IsNew = true;\n // Prepend the new row\n this.templateParams = [newRow, ...this.templateParams];\n\n // Wait for grid to process the new row, then start editing it\n setTimeout(() => {\n if (!this.gridApi) return;\n const rowNode = this.gridApi.getDisplayedRowAtIndex(0);\n if (rowNode) {\n this.editingRowId = rowNode.id ?? null;\n this.editingRowBackup = { ...newRow };\n this.gridApi.startEditingCell({\n rowIndex: 0,\n colKey: 'Name'\n });\n this.gridApi.refreshCells({ columns: ['actions'], force: true });\n }\n });\n }\n\n public startEditRow(params: ICellRendererParams): void {\n if (!this.gridApi || !this.editMode) return;\n\n // Cancel any in-progress edit first\n this.cancelCurrentEdit();\n\n const rowIndex = params.node.rowIndex;\n if (rowIndex == null) return;\n\n this.editingRowId = params.node.id ?? null;\n this.editingRowBackup = { ...params.data };\n this.gridApi.startEditingCell({\n rowIndex,\n colKey: 'Name'\n });\n this.gridApi.refreshCells({ columns: ['actions'], force: true });\n }\n\n public cancelEditRow(): void {\n this.cancelCurrentEdit();\n }\n\n public saveEditRow(): void {\n if (!this.gridApi) return;\n // stopEditing triggers onRowEditingStopped, which handles the save\n this.gridApi.stopEditing(false);\n this.gridApi.refreshCells({ columns: ['actions'], force: true });\n }\n\n public async onRowEditingStopped(event: RowEditingStoppedEvent): Promise<void> {\n const rowData = event.data as ParamRowData;\n if (!rowData) return;\n\n // If the user cancelled (via Escape or cancel button backup restore), skip save\n if (this.editingRowBackup === null) return;\n\n // Validate: Name is required\n if (!rowData.Name || rowData.Name.trim().length === 0) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Parameter name is required',\n 'error'\n );\n // If it was a new unsaved row, remove it\n if (rowData.IsNew) {\n this.templateParams = this.templateParams.filter(p => p !== rowData);\n } else if (this.editingRowBackup) {\n // Revert to backup\n this.revertRow(event.node, this.editingRowBackup);\n }\n this.clearEditState();\n return;\n }\n\n await this.saveParamRow(rowData);\n this.clearEditState();\n }\n\n public async deleteRow(params: ICellRendererParams): Promise<void> {\n if (!this.editMode) return;\n\n const rowData = params.data as ParamRowData;\n const entity = rowData.Entity;\n\n if (!(await this.confirmService.ConfirmDelete({ title: 'Delete Parameter', message: `Delete the parameter \"${rowData.Name}\"?` }))) {\n return;\n }\n\n try {\n if (entity.ID) {\n const deleted = await entity.Delete();\n if (deleted) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Parameter \"${rowData.Name}\" deleted successfully`,\n 'success'\n );\n this.templateParams = this.templateParams.filter(p => p !== rowData);\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to delete parameter: ${entity.LatestResult?.Message || 'Unknown error'}`,\n 'error'\n );\n }\n } else {\n // Not yet saved -- just remove from the array\n this.templateParams = this.templateParams.filter(p => p !== rowData);\n }\n } catch (error) {\n console.error('Error deleting parameter:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error deleting parameter',\n 'error'\n );\n }\n }\n\n // -- Helpers --\n\n public getTypeIcon(type: string): string {\n switch (type) {\n case 'Scalar': return 'fa-font';\n case 'Array': return 'fa-list';\n case 'Object': return 'fa-cube';\n case 'Record': return 'fa-file';\n case 'Entity': return 'fa-table';\n default: return 'fa-question';\n }\n }\n\n private entityToRowData(entity: MJTemplateParamEntity): ParamRowData {\n return {\n Entity: entity,\n ID: entity.ID || '',\n Name: entity.Name || '',\n Type: entity.Type || 'Scalar',\n IsRequired: entity.IsRequired || false,\n Description: entity.Description || '',\n DefaultValue: entity.DefaultValue || '',\n LinkedParameterName: entity.LinkedParameterName || '',\n LinkedParameterField: entity.LinkedParameterField || '',\n IsNew: false\n };\n }\n\n private async saveParamRow(rowData: ParamRowData): Promise<void> {\n const entity = rowData.Entity;\n\n entity.Name = rowData.Name;\n entity.Type = rowData.Type;\n entity.IsRequired = rowData.IsRequired;\n entity.Description = rowData.Description;\n entity.DefaultValue = rowData.DefaultValue;\n\n // Handle linked parameter fields for Entity type\n if (rowData.Type === 'Entity') {\n entity.LinkedParameterName = rowData.LinkedParameterName;\n entity.LinkedParameterField = rowData.LinkedParameterField;\n } else {\n entity.LinkedParameterName = null;\n entity.LinkedParameterField = null;\n }\n\n try {\n const saved = await entity.Save();\n if (saved) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Parameter \"${entity.Name}\" saved successfully`,\n 'success'\n );\n // Update the row data with the saved entity ID\n rowData.ID = entity.ID;\n rowData.IsNew = false;\n // Refresh the grid to pick up the new ID\n this.templateParams = [...this.templateParams];\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to save parameter: ${entity.LatestResult?.Message || 'Unknown error'}`,\n 'error'\n );\n await this.loadTemplateParams();\n }\n } catch (error) {\n console.error('Error saving parameter:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error saving parameter',\n 'error'\n );\n await this.loadTemplateParams();\n }\n }\n\n private async createNewParamEntity(): Promise<MJTemplateParamEntity | null> {\n if (!this.template?.ID) return null;\n\n try {\n const md = this.ProviderToUse;\n const newParam = await md.GetEntityObject<MJTemplateParamEntity>('MJ: Template Params');\n newParam.TemplateID = this.template.ID;\n newParam.Type = 'Scalar';\n newParam.IsRequired = false;\n\n return newParam;\n } catch (error) {\n console.error('Error creating new parameter:', error);\n return null;\n }\n }\n\n private cancelCurrentEdit(): void {\n if (!this.gridApi) return;\n\n if (this.editingRowBackup && this.editingRowId) {\n const rowNode = this.gridApi.getRowNode(this.editingRowId);\n if (rowNode) {\n // If the row was new and unsaved, remove it\n if (this.editingRowBackup.IsNew) {\n const backup = this.editingRowBackup;\n this.clearEditState();\n this.gridApi.stopEditing(true);\n this.templateParams = this.templateParams.filter(p => p.Entity !== backup.Entity);\n return;\n }\n // Revert to backup\n this.revertRow(rowNode, this.editingRowBackup);\n }\n }\n\n this.clearEditState();\n this.gridApi.stopEditing(true);\n this.gridApi.refreshCells({ columns: ['actions'], force: true });\n }\n\n private revertRow(rowNode: { setData: (data: ParamRowData) => void }, backup: ParamRowData): void {\n rowNode.setData(backup);\n }\n\n private clearEditState(): void {\n this.editingRowBackup = null;\n this.editingRowId = null;\n }\n\n private buildColumnDefs(): void {\n const self = this;\n\n const cols: ColDef[] = [\n {\n field: 'Name',\n headerName: 'Parameter Name',\n width: 200,\n editable: this.editMode,\n cellRenderer: (params: ICellRendererParams) => {\n if (!params.value) return '';\n const row = params.data as ParamRowData;\n let html = `<strong>${params.value}</strong>`;\n if (row.IsRequired) {\n html += ` <span style=\"display: inline-flex; align-items: center; gap: 4px; background-color: var(--mj-status-error); color: var(--mj-text-inverse); padding: 2px 8px; border-radius: 12px; font-size: 0.75em; font-weight: 500;\"><i class=\"fa-solid fa-asterisk\" style=\"font-size: 0.6em;\"></i> Required</span>`;\n }\n return html;\n }\n },\n {\n field: 'Type',\n headerName: 'Type',\n width: 140,\n editable: this.editMode,\n cellEditor: 'agSelectCellEditor',\n cellEditorParams: {\n values: this.typeOptions\n },\n cellRenderer: (params: ICellRendererParams) => {\n if (!params.value) return '';\n const icon = self.getTypeIcon(params.value);\n return `<span style=\"display: flex; align-items: center; gap: 6px; color: var(--mj-text-secondary);\"><i class=\"fa-solid ${icon}\" style=\"color: var(--mj-text-muted);\"></i> ${params.value}</span>`;\n }\n },\n {\n field: 'IsRequired',\n headerName: 'Required',\n width: 100,\n editable: this.editMode,\n cellDataType: 'boolean',\n cellRenderer: (params: ICellRendererParams) => {\n if (params.value) {\n return `<div style=\"text-align: center;\"><i class=\"fa-solid fa-check\" style=\"color: var(--mj-status-success);\"></i></div>`;\n }\n return `<div style=\"text-align: center;\"><i class=\"fa-solid fa-times\" style=\"color: var(--mj-text-muted);\"></i></div>`;\n }\n },\n {\n field: 'Description',\n headerName: 'Description',\n width: 300,\n editable: this.editMode,\n cellRenderer: (params: ICellRendererParams) => {\n return params.value || '<span style=\"color: var(--mj-text-muted); font-style: italic; font-size: 0.9em;\">(No description)</span>';\n }\n },\n {\n field: 'DefaultValue',\n headerName: 'Default Value',\n width: 200,\n editable: this.editMode,\n cellRenderer: (params: ICellRendererParams) => {\n if (params.value) {\n return `<code style=\"background-color: var(--mj-bg-surface-card); padding: 2px 6px; border-radius: 3px; font-size: 0.85em; color: var(--mj-text-secondary);\">${params.value}</code>`;\n }\n return '<span style=\"color: var(--mj-text-muted); font-style: italic; font-size: 0.9em;\">(No default)</span>';\n }\n }\n ];\n\n if (this.editMode) {\n cols.push({\n headerName: 'Actions',\n width: 120,\n sortable: false,\n resizable: false,\n editable: false,\n cellRenderer: ActionsCellRenderer,\n cellRendererParams: {\n componentRef: self\n }\n });\n }\n\n this.ColumnDefs = cols;\n }\n}\n\n/**\n * Inline cell renderer for edit/delete/save/cancel action buttons.\n * This is a plain-JS AG Grid cell renderer (not an Angular component)\n * because the grid doesn't support Angular component renderers without\n * the AG Grid Enterprise \"Framework Components\" feature.\n */\nfunction ActionsCellRenderer(params: ICellRendererParams & { componentRef: TemplateParamsGridComponent }): HTMLElement {\n const container = document.createElement('div');\n container.style.display = 'flex';\n container.style.gap = '4px';\n container.style.alignItems = 'center';\n\n const comp = params.componentRef;\n const isEditing = params.node.rowIndex != null && params.api.getEditingCells().some(\n cell => cell.rowIndex === params.node.rowIndex\n );\n\n if (isEditing) {\n // Save button\n const saveBtn = createActionButton('fa-check', 'Save changes', 'var(--mj-brand-primary)');\n saveBtn.addEventListener('click', (e) => {\n e.stopPropagation();\n comp.saveEditRow();\n });\n container.appendChild(saveBtn);\n\n // Cancel button\n const cancelBtn = createActionButton('fa-times', 'Cancel changes', 'var(--mj-text-secondary)');\n cancelBtn.addEventListener('click', (e) => {\n e.stopPropagation();\n comp.cancelEditRow();\n });\n container.appendChild(cancelBtn);\n } else {\n // Edit button\n const editBtn = createActionButton('fa-edit', 'Edit parameter', 'var(--mj-text-secondary)');\n editBtn.addEventListener('click', (e) => {\n e.stopPropagation();\n comp.startEditRow(params);\n });\n container.appendChild(editBtn);\n\n // Delete button\n const deleteBtn = createActionButton('fa-trash', 'Delete parameter', 'var(--mj-status-error)');\n deleteBtn.addEventListener('click', (e) => {\n e.stopPropagation();\n comp.deleteRow(params);\n });\n container.appendChild(deleteBtn);\n }\n\n return container;\n}\n\nfunction createActionButton(iconClass: string, title: string, color: string): HTMLButtonElement {\n const btn = document.createElement('button');\n btn.type = 'button';\n btn.title = title;\n btn.style.cssText = `\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: ${color};\n border-radius: 4px;\n padding: 4px 8px;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n `;\n const icon = document.createElement('i');\n icon.className = `fa-solid ${iconClass}`;\n btn.appendChild(icon);\n return btn;\n}\n","<div class=\"template-params-grid\">\n <div class=\"params-header\">\n <h3><i class=\"fa-solid fa-sliders\"></i> Template Parameters</h3>\n <p class=\"params-description\">\n Define the parameters that can be used within this template. Parameters allow dynamic content injection at runtime.\n </p>\n </div>\n\n @if (editMode) {\n <div class=\"params-toolbar\">\n <button mjButton variant=\"primary\" (click)=\"addNewParam()\">\n <i class=\"fa-solid fa-plus\"></i> Add Parameter\n </button>\n </div>\n }\n\n <ag-grid-angular\n class=\"params-ag-grid\"\n [theme]=\"GridTheme\"\n [rowData]=\"templateParams\"\n [columnDefs]=\"ColumnDefs\"\n [defaultColDef]=\"DefaultColDef\"\n [editType]=\"'fullRow'\"\n [getRowId]=\"getRowId\"\n [suppressClickEdit]=\"true\"\n [overlayNoRowsTemplate]=\"noRowsTemplate\"\n (gridReady)=\"onGridReady($event)\"\n (rowEditingStopped)=\"onRowEditingStopped($event)\"\n style=\"width: 100%; height: 400px;\">\n </ag-grid-angular>\n\n <!-- Help Section -->\n @if (editMode) {\n <div class=\"params-help\">\n <h4><i class=\"fa-solid fa-question-circle\"></i> Parameter Types</h4>\n <ul>\n <li><strong>Scalar:</strong> Single value like text, number, or boolean</li>\n <li><strong>Array:</strong> List of values</li>\n <li><strong>Object:</strong> JSON object with multiple properties</li>\n <li><strong>Record:</strong> Single record from a MemberJunction entity</li>\n <li><strong>Entity:</strong> Multiple records from a MemberJunction entity (can be filtered)</li>\n </ul>\n <p class=\"help-note\">\n <i class=\"fa-solid fa-lightbulb\"></i>\n Use parameters in your template with the syntax: <code>{{ '{{' }} parameterName {{ '}}' }}</code>\n </p>\n </div>\n }\n</div>\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure (Angular-free) helpers for rendering an MJ Test Run's per-check results.
|
|
3
|
+
*
|
|
4
|
+
* The engine persists `TestRun.ResultDetails` as a BARE array of `OracleResult`
|
|
5
|
+
* objects ({ oracleType, passed, score, message, details }) — one element per
|
|
6
|
+
* check (see TestEngine.updateTestRun, which writes `JSON.stringify(oracleResults)`).
|
|
7
|
+
* The custom Test Run form renders these via the `CheckResult` view shape below.
|
|
8
|
+
*
|
|
9
|
+
* Kept Angular-free (like bridge-provider-features.ts) so the mapping can be unit
|
|
10
|
+
* tested without bootstrapping the component / Angular DI.
|
|
11
|
+
*/
|
|
12
|
+
/** The per-check shape the Test Run form template binds to. */
|
|
13
|
+
export interface CheckResult {
|
|
14
|
+
name: string;
|
|
15
|
+
passed: boolean;
|
|
16
|
+
message?: string;
|
|
17
|
+
weight?: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Map the engine's persisted `ResultDetails` payload into `CheckResult[]`.
|
|
21
|
+
*
|
|
22
|
+
* `ResultDetails` is a bare `OracleResult[]` array; each element's `oracleType`
|
|
23
|
+
* becomes the check's display name. Anything that is not an array (null, an
|
|
24
|
+
* object, a malformed value) yields an empty list so the form renders nothing
|
|
25
|
+
* rather than throwing.
|
|
26
|
+
*/
|
|
27
|
+
export declare function parseCheckResults(resultDetails: unknown): CheckResult[];
|
|
28
|
+
//# sourceMappingURL=test-run-checks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-run-checks.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/Tests/test-run-checks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,+DAA+D;AAC/D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,OAAO,GAAG,WAAW,EAAE,CAUvE"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure (Angular-free) helpers for rendering an MJ Test Run's per-check results.
|
|
3
|
+
*
|
|
4
|
+
* The engine persists `TestRun.ResultDetails` as a BARE array of `OracleResult`
|
|
5
|
+
* objects ({ oracleType, passed, score, message, details }) — one element per
|
|
6
|
+
* check (see TestEngine.updateTestRun, which writes `JSON.stringify(oracleResults)`).
|
|
7
|
+
* The custom Test Run form renders these via the `CheckResult` view shape below.
|
|
8
|
+
*
|
|
9
|
+
* Kept Angular-free (like bridge-provider-features.ts) so the mapping can be unit
|
|
10
|
+
* tested without bootstrapping the component / Angular DI.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Map the engine's persisted `ResultDetails` payload into `CheckResult[]`.
|
|
14
|
+
*
|
|
15
|
+
* `ResultDetails` is a bare `OracleResult[]` array; each element's `oracleType`
|
|
16
|
+
* becomes the check's display name. Anything that is not an array (null, an
|
|
17
|
+
* object, a malformed value) yields an empty list so the form renders nothing
|
|
18
|
+
* rather than throwing.
|
|
19
|
+
*/
|
|
20
|
+
export function parseCheckResults(resultDetails) {
|
|
21
|
+
if (!Array.isArray(resultDetails)) {
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
return resultDetails.map(r => ({
|
|
25
|
+
name: r?.['oracleType'] ?? '',
|
|
26
|
+
passed: r?.['passed'] === true,
|
|
27
|
+
message: r?.['message']
|
|
28
|
+
// OracleResult has no `weight`; CheckResult.weight stays undefined.
|
|
29
|
+
}));
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=test-run-checks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-run-checks.js","sourceRoot":"","sources":["../../../../src/lib/custom/Tests/test-run-checks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAUH;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,aAAsB;IACtD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAQ,aAAgD,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjE,IAAI,EAAG,CAAC,EAAE,CAAC,YAAY,CAAY,IAAI,EAAE;QACzC,MAAM,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,IAAI;QAC9B,OAAO,EAAE,CAAC,EAAE,CAAC,SAAS,CAAuB;QAC7C,oEAAoE;KACrE,CAAC,CAAC,CAAC;AACN,CAAC","sourcesContent":["/**\n * Pure (Angular-free) helpers for rendering an MJ Test Run's per-check results.\n *\n * The engine persists `TestRun.ResultDetails` as a BARE array of `OracleResult`\n * objects ({ oracleType, passed, score, message, details }) — one element per\n * check (see TestEngine.updateTestRun, which writes `JSON.stringify(oracleResults)`).\n * The custom Test Run form renders these via the `CheckResult` view shape below.\n *\n * Kept Angular-free (like bridge-provider-features.ts) so the mapping can be unit\n * tested without bootstrapping the component / Angular DI.\n */\n\n/** The per-check shape the Test Run form template binds to. */\nexport interface CheckResult {\n name: string;\n passed: boolean;\n message?: string;\n weight?: number;\n}\n\n/**\n * Map the engine's persisted `ResultDetails` payload into `CheckResult[]`.\n *\n * `ResultDetails` is a bare `OracleResult[]` array; each element's `oracleType`\n * becomes the check's display name. Anything that is not an array (null, an\n * object, a malformed value) yields an empty list so the form renders nothing\n * rather than throwing.\n */\nexport function parseCheckResults(resultDetails: unknown): CheckResult[] {\n if (!Array.isArray(resultDetails)) {\n return [];\n }\n return (resultDetails as Array<Record<string, unknown>>).map(r => ({\n name: (r?.['oracleType'] as string) ?? '',\n passed: r?.['passed'] === true,\n message: r?.['message'] as string | undefined\n // OracleResult has no `weight`; CheckResult.weight stays undefined.\n }));\n}\n"]}
|
|
@@ -2,18 +2,13 @@ import { OnInit, OnDestroy } from '@angular/core';
|
|
|
2
2
|
import { MJTestRunEntity, MJTestEntity, MJTestSuiteRunEntity, MJAIAgentRunEntity, MJAIPromptRunEntity, MJTestRunFeedbackEntity } from '@memberjunction/core-entities';
|
|
3
3
|
import { MJTestRunFormComponent } from '../../generated/Entities/MJTestRun/mjtestrun.form.component';
|
|
4
4
|
import { ToolbarConfig } from '@memberjunction/ng-code-editor';
|
|
5
|
+
import { CheckResult } from './test-run-checks';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
interface ParsedData {
|
|
7
8
|
input?: Record<string, unknown>;
|
|
8
9
|
expected?: Record<string, unknown>;
|
|
9
10
|
actual?: Record<string, unknown>;
|
|
10
|
-
resultDetails?:
|
|
11
|
-
}
|
|
12
|
-
interface CheckResult {
|
|
13
|
-
name: string;
|
|
14
|
-
passed: boolean;
|
|
15
|
-
message?: string;
|
|
16
|
-
weight?: number;
|
|
11
|
+
resultDetails?: unknown;
|
|
17
12
|
}
|
|
18
13
|
export declare class MJTestRunFormComponentExtended extends MJTestRunFormComponent implements OnInit, OnDestroy {
|
|
19
14
|
record: MJTestRunEntity;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-run-form.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/Tests/test-run-form.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAmE,MAAM,eAAe,CAAC;AAI9H,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAKtK,OAAO,EAAE,sBAAsB,EAAE,MAAM,6DAA6D,CAAC;AAErG,OAAO,EAAyB,aAAa,EAAE,MAAM,gCAAgC,CAAC;;
|
|
1
|
+
{"version":3,"file":"test-run-form.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/Tests/test-run-form.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,7 @@ import { ApplicationManager } from '@memberjunction/ng-base-application';
|
|
|
15
15
|
import { MJTestRunFormComponent } from '../../generated/Entities/MJTestRun/mjtestrun.form.component';
|
|
16
16
|
import { TestingDialogService, TagsHelper } from '@memberjunction/ng-testing';
|
|
17
17
|
import { createCopyOnlyToolbar } from '@memberjunction/ng-code-editor';
|
|
18
|
+
import { parseCheckResults } from './test-run-checks';
|
|
18
19
|
import * as i0 from "@angular/core";
|
|
19
20
|
import * as i1 from "@angular/common";
|
|
20
21
|
import * as i2 from "@angular/forms";
|
|
@@ -1253,10 +1254,7 @@ let MJTestRunFormComponentExtended = class MJTestRunFormComponentExtended extend
|
|
|
1253
1254
|
return data ? JSON.stringify(data, null, 2) : '// No data available';
|
|
1254
1255
|
}
|
|
1255
1256
|
getCheckResults() {
|
|
1256
|
-
|
|
1257
|
-
if (!details?.checkResults)
|
|
1258
|
-
return [];
|
|
1259
|
-
return details.checkResults;
|
|
1257
|
+
return parseCheckResults(this.parsedData.resultDetails);
|
|
1260
1258
|
}
|
|
1261
1259
|
getPassRate() {
|
|
1262
1260
|
const total = this.record.TotalChecks || 0;
|
|
@@ -1564,5 +1562,5 @@ export { MJTestRunFormComponentExtended };
|
|
|
1564
1562
|
type: HostListener,
|
|
1565
1563
|
args: ['document:keydown', ['$event']]
|
|
1566
1564
|
}] }); })();
|
|
1567
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJTestRunFormComponentExtended, { className: "MJTestRunFormComponentExtended", filePath: "src/lib/custom/Tests/test-run-form.component.ts", lineNumber:
|
|
1565
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJTestRunFormComponentExtended, { className: "MJTestRunFormComponentExtended", filePath: "src/lib/custom/Tests/test-run-form.component.ts", lineNumber: 32 }); })();
|
|
1568
1566
|
//# sourceMappingURL=test-run-form.component.js.map
|