@memberjunction/ng-core-entity-forms 5.21.0 → 5.23.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/AIAgents/add-action-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js +55 -59
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js +0 -1
- package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +54 -71
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +1053 -1096
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts +2 -3
- package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-management.service.js +39 -82
- package/dist/lib/custom/AIAgents/ai-agent-management.service.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +28 -31
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +15 -14
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts +4 -7
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +77 -124
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts +2 -2
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.js +10 -11
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.js.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +18 -18
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +59 -80
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +23 -24
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +862 -906
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +4 -5
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +448 -499
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts +2 -2
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js +6 -11
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js.map +1 -1
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +16 -15
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.js +160 -166
- package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.js +93 -94
- package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.js +2 -2
- package/dist/lib/custom/Lists/list-form.component.js +61 -63
- package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-category-dialog.component.js +33 -59
- package/dist/lib/custom/Queries/query-category-dialog.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +354 -360
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.js +62 -71
- package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-param-dialog.component.js +128 -124
- package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.d.ts +45 -22
- package/dist/lib/custom/Templates/template-params-grid.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.js +380 -384
- package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.js +34 -36
- package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.js +9 -10
- package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-feedback-form.component.js +4 -4
- package/dist/lib/custom/Tests/test-run-feedback-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.js +8 -8
- package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.js +7 -8
- package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.js +7 -8
- package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +381 -409
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +74 -63
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js +10 -10
- package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +352 -332
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +22 -27
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +51 -81
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +4 -5
- package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.js +59 -66
- package/dist/lib/custom/shared/entity-selector-dialog.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 +176 -156
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.js +65 -0
- package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.js +89 -0
- package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +80 -44
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJContentItemTag/mjcontentitemtag.form.component.js +11 -8
- package/dist/lib/generated/Entities/MJContentItemTag/mjcontentitemtag.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js +39 -24
- package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js +35 -17
- package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJDuplicateRunDetail/mjduplicaterundetail.form.component.js +15 -13
- package/dist/lib/generated/Entities/MJDuplicateRunDetail/mjduplicaterundetail.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js +7 -9
- package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js +28 -24
- package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js +21 -9
- package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJVectorDatabase/mjvectordatabase.form.component.js +19 -17
- package/dist/lib/generated/Entities/MJVectorDatabase/mjvectordatabase.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js +82 -14
- package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +280 -279
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +102 -142
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/lib/shared/components/template-editor.component.js +14 -15
- package/dist/lib/shared/components/template-editor.component.js.map +1 -1
- package/package.json +34 -41
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-action-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/add-action-dialog.component.ts","../../../../src/lib/custom/AIAgents/add-action-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { DialogRef, WindowRef } from '@progress/kendo-angular-dialog';\nimport { Subject, BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, takeUntil, startWith } from 'rxjs';\nimport { RunView, Metadata } from '@memberjunction/core';\nimport { MJActionEntity, MJActionCategoryEntity } from '@memberjunction/core-entities';\nimport { UUIDsEqual } from '@memberjunction/global';\n\nexport interface CategoryTreeNode {\n id: string;\n name: string;\n count: number;\n icon: string;\n children?: CategoryTreeNode[];\n expanded?: boolean;\n}\n\nexport interface ActionDisplayItem extends MJActionEntity {\n selected: boolean;\n categoryName?: string;\n}\n\n/**\n * Modern, clean dialog for selecting actions to add to an AI Agent.\n * Features searchable action list, category filtering, and multi-select capability.\n */\n@Component({\n standalone: false,\n selector: 'mj-add-action-dialog',\n templateUrl: './add-action-dialog.component.html',\n styleUrls: ['./add-action-dialog.component.css']\n})\nexport class AddActionDialogComponent implements OnInit, OnDestroy {\n \n // Input properties set by service\n agentId: string = '';\n agentName: string = '';\n existingActionIds: string[] = [];\n\n // Reactive state management\n private destroy$ = new Subject<void>();\n public result = new Subject<MJActionEntity[]>();\n \n // Data streams\n allActions$ = new BehaviorSubject<ActionDisplayItem[]>([]);\n categories$ = new BehaviorSubject<MJActionCategoryEntity[]>([]);\n filteredActions$ = new BehaviorSubject<ActionDisplayItem[]>([]);\n categoryTree$ = new BehaviorSubject<CategoryTreeNode[]>([]);\n selectedActions$ = new BehaviorSubject<Set<string>>(new Set());\n isLoading$ = new BehaviorSubject<boolean>(false);\n \n // UI state\n searchControl = new FormControl('');\n selectedCategoryId$ = new BehaviorSubject<string>('all');\n viewMode$ = new BehaviorSubject<'grid' | 'list'>('grid');\n expandedCategories = new Set<string>();\n\n // Computed values\n get selectedCount(): number {\n return this.selectedActions$.value.size;\n }\n\n get totalActionCount(): number {\n return this.allActions$.value.length;\n }\n\n get filteredCount(): number {\n return this.filteredActions$.value.length;\n }\n\n constructor(\n private dialogRef: WindowRef,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit() {\n this.initializeData();\n this.setupFiltering();\n this.preselectExistingActions();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private async initializeData() {\n this.isLoading$.next(true);\n \n try {\n await this.loadActionsAndCategories();\n this.buildCategoryTree();\n } catch (error) {\n console.error('Error loading dialog data:', error);\n } finally {\n this.isLoading$.next(false);\n }\n }\n\n private async loadActionsAndCategories() {\n const rv = new RunView();\n \n const [actionsResult, categoriesResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Actions',\n ExtraFilter: 'Status = \\'Active\\'',\n OrderBy: 'Category, Name',\n ResultType: 'entity_object',\n MaxRows: 5000\n },\n {\n EntityName: 'MJ: Action Categories',\n ExtraFilter: 'Status = \\'Active\\'',\n OrderBy: 'Name',\n ResultType: 'entity_object',\n MaxRows: 1000\n }\n ]);\n\n if (actionsResult.Success) {\n const actions = (actionsResult.Results as MJActionEntity[] || []).map(action => ({\n ...action.GetAll(),\n selected: false,\n categoryName: action.Category || 'Uncategorized'\n } as ActionDisplayItem));\n \n this.allActions$.next(actions);\n }\n\n if (categoriesResult.Success) {\n this.categories$.next(categoriesResult.Results as MJActionCategoryEntity[] || []);\n }\n }\n\n private buildCategoryTree() {\n const actions = this.allActions$.value;\n const categories = this.categories$.value;\n \n // Count actions per category\n const categoryCounts = new Map<string, number>();\n actions.forEach(action => {\n const categoryName = action.categoryName || 'Uncategorized';\n categoryCounts.set(categoryName, (categoryCounts.get(categoryName) || 0) + 1);\n });\n\n // Build tree nodes\n const treeNodes: CategoryTreeNode[] = [\n {\n id: 'all',\n name: 'All Actions',\n count: actions.length,\n icon: 'fa-th'\n }\n ];\n\n // Add category nodes\n categories.forEach(category => {\n const count = categoryCounts.get(category.Name) || 0;\n if (count > 0) {\n treeNodes.push({\n id: category.ID,\n name: category.Name,\n count,\n icon: this.getCategoryIcon(category.Name)\n });\n }\n });\n\n // Add uncategorized if needed\n const uncategorizedCount = categoryCounts.get('Uncategorized') || 0;\n if (uncategorizedCount > 0) {\n treeNodes.push({\n id: 'uncategorized',\n name: 'Uncategorized',\n count: uncategorizedCount,\n icon: 'fa-question-circle'\n });\n }\n\n this.categoryTree$.next(treeNodes);\n }\n\n private getCategoryIcon(categoryName: string): string {\n const iconMap: { [key: string]: string } = {\n 'Data': 'fa-database',\n 'Communication': 'fa-envelope',\n 'Integration': 'fa-plug',\n 'Security': 'fa-shield-alt',\n 'Workflow': 'fa-project-diagram',\n 'AI': 'fa-brain',\n 'Files': 'fa-file-alt',\n 'Utilities': 'fa-tools',\n 'System': 'fa-cog',\n 'Analytics': 'fa-chart-line'\n };\n return iconMap[categoryName] || 'fa-folder';\n }\n\n private setupFiltering() {\n combineLatest([\n this.allActions$,\n this.searchControl.valueChanges.pipe(\n debounceTime(300),\n distinctUntilChanged(),\n startWith('') // Emit initial empty value\n ),\n this.selectedCategoryId$\n ]).pipe(\n takeUntil(this.destroy$)\n ).subscribe(([actions, searchTerm, categoryId]) => {\n this.filterActions(actions, searchTerm || '', categoryId);\n });\n }\n\n private filterActions(actions: ActionDisplayItem[], searchTerm: string, categoryId: string) {\n let filtered = [...actions];\n\n // Category filter\n if (categoryId !== 'all') {\n if (categoryId === 'uncategorized') {\n filtered = filtered.filter(action => !action.Category);\n } else {\n const categoryName = this.getCategoryNameById(categoryId);\n filtered = filtered.filter(action => action.categoryName === categoryName);\n }\n }\n\n // Search filter\n if (searchTerm) {\n const term = searchTerm.toLowerCase();\n filtered = filtered.filter(action =>\n action.Name.toLowerCase().includes(term) ||\n (action.Description && action.Description.toLowerCase().includes(term)) ||\n (action.categoryName && action.categoryName.toLowerCase().includes(term))\n );\n }\n\n this.filteredActions$.next(filtered);\n }\n\n private getCategoryNameById(categoryId: string): string {\n const category = this.categories$.value.find(c => UUIDsEqual(c.ID, categoryId));\n return category?.Name || '';\n }\n\n private preselectExistingActions() {\n if (this.existingActionIds.length > 0) {\n const selected = new Set(this.existingActionIds);\n this.selectedActions$.next(selected);\n \n // Update action selection state\n const actions = this.allActions$.value;\n actions.forEach(action => {\n action.selected = selected.has(action.ID);\n });\n this.allActions$.next(actions);\n }\n }\n\n // === UI Event Handlers ===\n\n selectCategory(categoryId: string) {\n this.selectedCategoryId$.next(categoryId);\n }\n\n toggleViewMode() {\n const currentMode = this.viewMode$.value;\n this.viewMode$.next(currentMode === 'grid' ? 'list' : 'grid');\n }\n\n toggleActionSelection(action: ActionDisplayItem) {\n const selected = this.selectedActions$.value;\n const actions = this.allActions$.value;\n \n // Find the action and toggle its selection\n const actionToUpdate = actions.find(a => UUIDsEqual(a.ID, action.ID));\n if (actionToUpdate) {\n actionToUpdate.selected = !actionToUpdate.selected;\n \n if (actionToUpdate.selected) {\n selected.add(action.ID);\n } else {\n selected.delete(action.ID);\n }\n \n this.selectedActions$.next(new Set(selected));\n this.allActions$.next(actions);\n \n // Update filtered actions to reflect selection state\n const filtered = this.filteredActions$.value;\n const filteredAction = filtered.find(a => UUIDsEqual(a.ID, action.ID));\n if (filteredAction) {\n filteredAction.selected = actionToUpdate.selected;\n this.filteredActions$.next(filtered);\n }\n }\n }\n\n clearSearch() {\n this.searchControl.reset();\n }\n\n getActionIcon(action: ActionDisplayItem): string {\n // Return custom icon if set\n if (action.IconClass) {\n return action.IconClass;\n }\n\n // Fallback icon mapping based on action name/type\n const name = action.Name.toLowerCase();\n if (name.includes('create') || name.includes('add')) return 'fa-plus-circle';\n if (name.includes('update') || name.includes('edit')) return 'fa-edit';\n if (name.includes('delete') || name.includes('remove')) return 'fa-trash';\n if (name.includes('email') || name.includes('send')) return 'fa-envelope';\n if (name.includes('export')) return 'fa-file-export';\n if (name.includes('import')) return 'fa-file-import';\n if (name.includes('report')) return 'fa-file-alt';\n if (name.includes('api')) return 'fa-plug';\n \n return 'fa-bolt'; // Default action icon\n }\n\n // === Dialog Actions ===\n\n cancel() {\n this.result.next([]);\n this.dialogRef.close();\n }\n\n addSelectedActions() {\n const selectedIds = this.selectedActions$.value;\n const allActions = this.allActions$.value;\n \n // Get the selected action display items (excluding existing ones)\n const selectedDisplayItems = allActions\n .filter(action => selectedIds.has(action.ID) && !this.existingActionIds.some(id => UUIDsEqual(id, action.ID)));\n \n // Convert ActionDisplayItem to MJActionEntity by casting (they have the same structure)\n const selectedActions: MJActionEntity[] = selectedDisplayItems.map(item => item as MJActionEntity);\n \n this.result.next(selectedActions);\n this.dialogRef.close();\n }\n}","<!-- Add Action Dialog -->\n<div class=\"add-action-dialog\">\n \n <!-- Dialog Header -->\n <div class=\"dialog-header\">\n <div class=\"search-section\">\n <kendo-textbox \n [formControl]=\"searchControl\" \n placeholder=\"Search actions by name, description, or category...\"\n class=\"search-input\"\n [clearButton]=\"true\">\n <ng-template kendoTextBoxPrefixTemplate>\n <i class=\"fa-solid fa-search\"></i>\n </ng-template>\n </kendo-textbox>\n </div>\n \n <div class=\"header-actions\">\n <!-- View Toggle -->\n <button kendoButton \n [toggleable]=\"true\" \n [selected]=\"(viewMode$ | async) === 'grid'\"\n (click)=\"toggleViewMode()\"\n size=\"small\"\n kendoTooltip\n [title]=\"(viewMode$ | async) === 'grid' ? 'Switch to list view' : 'Switch to grid view'\">\n <i class=\"fa-solid\" \n [class.fa-th]=\"(viewMode$ | async) === 'grid'\" \n [class.fa-list]=\"(viewMode$ | async) === 'list'\"></i>\n </button>\n \n <!-- Stats -->\n <div class=\"stats\">\n <span class=\"stat-item\">\n <i class=\"fa-solid fa-bolt\"></i>\n {{ filteredCount }} of {{ totalActionCount }} actions\n </span>\n </div>\n </div>\n </div>\n\n <!-- Main Content -->\n <div class=\"dialog-content\">\n \n <!-- Category Sidebar -->\n <div class=\"category-sidebar\">\n <div class=\"sidebar-header\">\n <h4><i class=\"fa-solid fa-folder-tree\"></i> Categories</h4>\n </div>\n \n <div class=\"category-list\">\n @for (category of categoryTree$ | async; track category.id) {\n <div class=\"category-item\" \n [class.selected]=\"(selectedCategoryId$ | async) === category.id\"\n (click)=\"selectCategory(category.id)\">\n <i class=\"fa-solid {{ category.icon }} category-icon\"></i>\n <span class=\"category-name\">{{ category.name }}</span>\n <span class=\"category-count\">{{ category.count }}</span>\n </div>\n }\n </div>\n </div>\n\n <!-- Actions Display -->\n <div class=\"actions-container\">\n \n <!-- Loading State -->\n @if (isLoading$ | async) {\n <div class=\"loading-state\">\n <div class=\"loading-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin fa-2x\"></i>\n </div>\n <p>Loading actions...</p>\n </div>\n }\n\n <!-- Empty State -->\n @if (!(isLoading$ | async) && filteredCount === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-search-minus\"></i>\n <h3>No actions found</h3>\n <p>Try adjusting your search criteria or selecting a different category</p>\n <button kendoButton (click)=\"clearSearch()\">Clear Search</button>\n </div>\n }\n\n <!-- Grid View -->\n @if (!(isLoading$ | async) && (viewMode$ | async) === 'grid' && filteredCount > 0) {\n <div class=\"actions-grid\">\n @for (action of filteredActions$ | async; track action.ID) {\n <div class=\"action-card\" \n [class.selected]=\"action.selected\"\n [class.existing]=\"existingActionIds.includes(action.ID)\"\n (click)=\"toggleActionSelection(action)\">\n \n <!-- Selection Indicator -->\n <div class=\"selection-indicator\">\n <i class=\"fa-solid\" \n [class.fa-check-circle]=\"action.selected\" \n [class.fa-circle]=\"!action.selected\"></i>\n </div>\n \n <!-- Card Content -->\n <div class=\"card-header\">\n <div class=\"action-icon\">\n <i class=\"fa-solid {{ getActionIcon(action) }}\"></i>\n </div>\n <h3 class=\"action-name\">{{ action.Name }}</h3>\n </div>\n \n <div class=\"card-body\">\n <p class=\"action-description\">{{ action.Description || 'No description available' }}</p>\n \n @if (action.categoryName) {\n <div class=\"category-badge\">\n <i class=\"fa-solid fa-folder\"></i>\n {{ action.categoryName }}\n </div>\n }\n \n @if (action.Type) {\n <div class=\"type-badge\">\n <i class=\"fa-solid fa-tag\"></i>\n {{ action.Type }}\n </div>\n }\n </div>\n \n <!-- Existing Action Overlay -->\n @if (existingActionIds.includes(action.ID)) {\n <div class=\"existing-overlay\">\n <i class=\"fa-solid fa-check\"></i>\n <span>Already Added</span>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- List View -->\n @if (!(isLoading$ | async) && (viewMode$ | async) === 'list' && filteredCount > 0) {\n <div class=\"actions-list\">\n \n <!-- List Header -->\n <div class=\"list-header\">\n <span class=\"col-select\"></span>\n <span class=\"col-name\">Name</span>\n <span class=\"col-category\">Category</span>\n <span class=\"col-type\">Type</span>\n <span class=\"col-description\">Description</span>\n <span class=\"col-status\">Status</span>\n </div>\n \n <!-- List Items -->\n @for (action of filteredActions$ | async; track action.ID) {\n <div class=\"list-item\" \n [class.selected]=\"action.selected\"\n [class.existing]=\"existingActionIds.includes(action.ID)\"\n (click)=\"toggleActionSelection(action)\">\n \n <span class=\"col-select\">\n <i class=\"fa-solid\" \n [class.fa-check-circle]=\"action.selected\" \n [class.fa-circle]=\"!action.selected\"></i>\n </span>\n \n <span class=\"col-name\">\n <i class=\"fa-solid {{ getActionIcon(action) }} action-icon\"></i>\n {{ action.Name }}\n </span>\n \n <span class=\"col-category\">{{ action.categoryName || '-' }}</span>\n <span class=\"col-type\">{{ action.Type || '-' }}</span>\n <span class=\"col-description\">{{ action.Description || '-' }}</span>\n \n <span class=\"col-status\">\n @if (existingActionIds.includes(action.ID)) {\n <span class=\"status-badge existing\">\n <i class=\"fa-solid fa-check\"></i>\n Added\n </span>\n } @else {\n <span class=\"status-badge available\">\n <i class=\"fa-solid fa-plus\"></i>\n Available\n </span>\n }\n </span>\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Selected Actions Summary -->\n @if (selectedCount > 0) {\n <div class=\"selection-summary\">\n <div class=\"summary-content\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <span>{{ selectedCount }} action{{ selectedCount === 1 ? '' : 's' }} selected</span>\n </div>\n </div>\n }\n\n <!-- Dialog Footer -->\n <div class=\"dialog-footer\">\n <button kendoButton \n look=\"flat\" \n (click)=\"cancel()\">\n Cancel\n </button>\n \n <button kendoButton \n themeColor=\"primary\" \n [disabled]=\"selectedCount === 0\"\n (click)=\"addSelectedActions()\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Selected ({{ selectedCount }})\n </button>\n </div>\n</div>"]}
|
|
1
|
+
{"version":3,"file":"add-action-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/add-action-dialog.component.ts","../../../../src/lib/custom/AIAgents/add-action-dialog.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAwC,MAAM,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACtG,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,oBAAoB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACzH,OAAO,EAAE,OAAO,EAAY,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;;;;;;;;;IC0C1C,+BAE2C;;IAAtC,gNAAS,qCAA2B,KAAC;IACxC,oBAA0D;IAC1D,gCAA4B;IAAA,YAAmB;IAAA,iBAAO;IACtD,gCAA6B;IAAA,YAAoB;IACnD,AADmD,iBAAO,EACpD;;;;IALD,+FAAgE;IAEhE,eAAkD;IAAlD,cAAA,kEAAkD,CAAA;IACzB,eAAmB;IAAnB,sCAAmB;IAClB,eAAoB;IAApB,uCAAoB;;;IAYnD,AADF,+BAA2B,cACI;IAC3B,wBAAiD;IACnD,iBAAM;IACN,yBAAG;IAAA,kCAAkB;IACvB,AADuB,iBAAI,EACrB;;;;IAKN,+BAAyB;IACvB,wBAAwC;IACxC,0BAAI;IAAA,gCAAgB;IAAA,iBAAK;IACzB,yBAAG;IAAA,oFAAoE;IAAA,iBAAI;IAC3E,kCAAyC;IAAxB,6LAAS,oBAAa,KAAC;IAAC,4BAAY;IACvD,AADuD,iBAAS,EAC1D;;;IA+BI,+BAA4B;IAC1B,wBAAkC;IAClC,YACF;IAAA,iBAAM;;;IADJ,eACF;IADE,uDACF;;;IAIA,+BAAwB;IACtB,wBAA+B;IAC/B,YACF;IAAA,iBAAM;;;IADJ,eACF;IADE,+CACF;;;IAMF,+BAA8B;IAC5B,wBAAiC;IACjC,4BAAM;IAAA,6BAAa;IACrB,AADqB,iBAAO,EACtB;;;;IA3CV,+BAG6C;IAAxC,6NAAS,uCAA6B,KAAC;IAG1C,+BAAiC;IAC/B,uBAE4C;IAC9C,iBAAM;IAIJ,AADF,+BAAyB,cACE;IACvB,oBAAoD;IACtD,iBAAM;IACN,8BAAwB;IAAA,YAAiB;IAC3C,AAD2C,iBAAK,EAC1C;IAGJ,AADF,+BAAuB,YACS;IAAA,aAAsD;IAAA,iBAAI;IAExF,kHAA2B;IAO3B,kHAAmB;IAMrB,iBAAM;IAGN,kHAA6C;IAM/C,iBAAM;;;;IA3CD,AADA,8CAAkC,6DACsB;IAMtD,eAAyC;IACzC,AADA,qDAAyC,kCACL;IAMlC,eAA4C;IAA5C,cAAA,+DAA4C,CAAA;IAEzB,eAAiB;IAAjB,oCAAiB;IAIX,eAAsD;IAAtD,yEAAsD;IAEpF,cAKC;IALD,kDAKC;IAED,cAKC;IALD,0CAKC;IAIH,cAKC;IALD,2EAKC;;;IA9CP,+BAA0B;IACxB,6GA+CC;;IACH,iBAAM;;;IAhDJ,cA+CC;IA/CD,4DA+CC;;;IA0CO,gCAAoC;IAClC,wBAAiC;IACjC,uBACF;IAAA,iBAAO;;;IAEP,gCAAqC;IACnC,wBAAgC;IAChC,2BACF;IAAA,iBAAO;;;;IA9Bb,+BAG6C;IAAxC,8NAAS,uCAA6B,KAAC;IAE1C,gCAAyB;IACvB,uBAE4C;IAC9C,iBAAO;IAEP,gCAAuB;IACrB,oBAAgE;IAChE,YACF;IAAA,iBAAO;IAEP,gCAA2B;IAAA,YAAgC;IAAA,iBAAO;IAClE,gCAAuB;IAAA,YAAwB;IAAA,iBAAO;IACtD,iCAA8B;IAAA,aAA+B;IAAA,iBAAO;IAEpE,iCAAyB;IAMrB,AALF,oHAA6C,8FAKpC;IAOb,AADE,iBAAO,EACH;;;;IA/BD,AADA,8CAAkC,6DACsB;IAKtD,eAAyC;IACzC,AADA,qDAAyC,kCACL;IAIpC,eAAwD;IAAxD,cAAA,+EAAwD,CAAA;IAC3D,cACF;IADE,+CACF;IAE2B,eAAgC;IAAhC,mDAAgC;IACpC,eAAwB;IAAxB,2CAAwB;IACjB,eAA+B;IAA/B,kDAA+B;IAG3D,eAUC;IAVD,2EAUC;;;IA1CP,AAHF,+BAA0B,cAGC;IACvB,2BAAgC;IAChC,gCAAuB;IAAA,oBAAI;IAAA,iBAAO;IAClC,gCAA2B;IAAA,wBAAQ;IAAA,iBAAO;IAC1C,gCAAuB;IAAA,oBAAI;IAAA,iBAAO;IAClC,gCAA8B;IAAA,4BAAW;IAAA,iBAAO;IAChD,iCAAyB;IAAA,uBAAM;IACjC,AADiC,iBAAO,EAClC;IAGN,+GAmCC;;IACH,iBAAM;;;IApCJ,gBAmCC;IAnCD,6DAmCC;;;IASL,AADF,+BAA+B,cACA;IAC3B,wBAAwC;IACxC,4BAAM;IAAA,YAAuE;IAEjF,AADE,AAD+E,iBAAO,EAChF,EACF;;;IAFI,eAAuE;IAAvE,8GAAuE;;AD/KrF;;;GAGG;AAOH,MAAM,OAAO,wBAAwB;IAyBnC,kBAAkB;IAClB,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;IAC1C,CAAC;IAED,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;IACvC,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC;IAC5C,CAAC;IAID,YACU,GAAsB;QAAtB,QAAG,GAAH,GAAG,CAAmB;QAvChC,kCAAkC;QAClC,YAAO,GAAW,EAAE,CAAC;QACrB,cAAS,GAAW,EAAE,CAAC;QACvB,sBAAiB,GAAa,EAAE,CAAC;QAEjC,4BAA4B;QACpB,aAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;QAChC,WAAM,GAAG,IAAI,OAAO,EAAoB,CAAC;QAEhD,eAAe;QACf,gBAAW,GAAG,IAAI,eAAe,CAAsB,EAAE,CAAC,CAAC;QAC3D,gBAAW,GAAG,IAAI,eAAe,CAA2B,EAAE,CAAC,CAAC;QAChE,qBAAgB,GAAG,IAAI,eAAe,CAAsB,EAAE,CAAC,CAAC;QAChE,kBAAa,GAAG,IAAI,eAAe,CAAqB,EAAE,CAAC,CAAC;QAC5D,qBAAgB,GAAG,IAAI,eAAe,CAAc,IAAI,GAAG,EAAE,CAAC,CAAC;QAC/D,eAAU,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;QAEjD,WAAW;QACX,kBAAa,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;QACpC,wBAAmB,GAAG,IAAI,eAAe,CAAS,KAAK,CAAC,CAAC;QACzD,cAAS,GAAG,IAAI,eAAe,CAAkB,MAAM,CAAC,CAAC;QACzD,uBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;QAe7B,gBAAW,GAAG,IAAI,YAAY,EAAQ,CAAC;IAI9C,CAAC;IAEJ,QAAQ;QACN,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,wBAAwB,EAAE,CAAC;IAClC,CAAC;IAED,WAAW;QACT,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAEO,KAAK,CAAC,cAAc;QAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE3B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC;YACtC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QACrD,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,wBAAwB;QACpC,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;QAEzB,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC;YAC1D;gBACE,UAAU,EAAE,aAAa;gBACzB,WAAW,EAAE,qBAAqB;gBAClC,OAAO,EAAE,gBAAgB;gBACzB,UAAU,EAAE,eAAe;gBAC3B,OAAO,EAAE,IAAI;aACd;YACD;gBACE,UAAU,EAAE,uBAAuB;gBACnC,WAAW,EAAE,qBAAqB;gBAClC,OAAO,EAAE,MAAM;gBACf,UAAU,EAAE,eAAe;gBAC3B,OAAO,EAAE,IAAI;aACd;SACF,CAAC,CAAC;QAEH,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,CAAC,aAAa,CAAC,OAA2B,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC/E,GAAG,MAAM,CAAC,MAAM,EAAE;gBAClB,QAAQ,EAAE,KAAK;gBACf,YAAY,EAAE,MAAM,CAAC,QAAQ,IAAI,eAAe;aAC3B,CAAA,CAAC,CAAC;YAEzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAmC,IAAI,EAAE,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAEO,iBAAiB;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QAE1C,6BAA6B;QAC7B,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;QACjD,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACvB,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,eAAe,CAAC;YAC5D,cAAc,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;QAEH,mBAAmB;QACnB,MAAM,SAAS,GAAuB;YACpC;gBACE,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,OAAO,CAAC,MAAM;gBACrB,IAAI,EAAE,OAAO;aACd;SACF,CAAC;QAEF,qBAAqB;QACrB,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAC5B,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACd,SAAS,CAAC,IAAI,CAAC;oBACb,EAAE,EAAE,QAAQ,CAAC,EAAE;oBACf,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,KAAK;oBACL,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC;iBAC1C,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,8BAA8B;QAC9B,MAAM,kBAAkB,GAAG,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACpE,IAAI,kBAAkB,GAAG,CAAC,EAAE,CAAC;YAC3B,SAAS,CAAC,IAAI,CAAC;gBACb,EAAE,EAAE,eAAe;gBACnB,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,kBAAkB;gBACzB,IAAI,EAAE,oBAAoB;aAC3B,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAEO,eAAe,CAAC,YAAoB;QAC1C,MAAM,OAAO,GAA8B;YACzC,MAAM,EAAE,aAAa;YACrB,eAAe,EAAE,aAAa;YAC9B,aAAa,EAAE,SAAS;YACxB,UAAU,EAAE,eAAe;YAC3B,UAAU,EAAE,oBAAoB;YAChC,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,aAAa;YACtB,WAAW,EAAE,UAAU;YACvB,QAAQ,EAAE,QAAQ;YAClB,WAAW,EAAE,eAAe;SAC7B,CAAC;QACF,OAAO,OAAO,CAAC,YAAY,CAAC,IAAI,WAAW,CAAC;IAC9C,CAAC;IAEO,cAAc;QACpB,aAAa,CAAC;YACZ,IAAI,CAAC,WAAW;YAChB,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAClC,YAAY,CAAC,GAAG,CAAC,EACjB,oBAAoB,EAAE,EACtB,SAAS,CAAC,EAAE,CAAC,CAAE,2BAA2B;aAC3C;YACD,IAAI,CAAC,mBAAmB;SACzB,CAAC,CAAC,IAAI,CACL,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACzB,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE;YAChD,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,OAA4B,EAAE,UAAkB,EAAE,UAAkB;QACxF,IAAI,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;QAE5B,kBAAkB;QAClB,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;YACzB,IAAI,UAAU,KAAK,eAAe,EAAE,CAAC;gBACnC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;gBAC1D,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,KAAK,YAAY,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;QAED,gBAAgB;QAChB,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;YACtC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAClC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACxC,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACvE,CAAC,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAC1E,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAEO,mBAAmB,CAAC,UAAkB;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;QAChF,OAAO,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;IAC9B,CAAC;IAEO,wBAAwB;QAC9B,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACjD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAErC,gCAAgC;YAChC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACvC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBACvB,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5C,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,4BAA4B;IAE5B,cAAc,CAAC,UAAkB;QAC/B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IAED,cAAc;QACZ,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACzC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAChE,CAAC;IAED,qBAAqB,CAAC,MAAyB;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QAEvC,2CAA2C;QAC3C,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACtE,IAAI,cAAc,EAAE,CAAC;YACnB,cAAc,CAAC,QAAQ,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC;YAEnD,IAAI,cAAc,CAAC,QAAQ,EAAE,CAAC;gBAC5B,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,CAAC;YAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAE/B,qDAAqD;YACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;YAC7C,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YACvE,IAAI,cAAc,EAAE,CAAC;gBACnB,cAAc,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC;gBAClD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;IACH,CAAC;IAED,WAAW;QACT,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED,aAAa,CAAC,MAAyB;QACrC,4BAA4B;QAC5B,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,OAAO,MAAM,CAAC,SAAS,CAAC;QAC1B,CAAC;QAED,kDAAkD;QAClD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,gBAAgB,CAAC;QAC7E,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,SAAS,CAAC;QACvE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,UAAU,CAAC;QAC1E,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,aAAa,CAAC;QAC1E,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,gBAAgB,CAAC;QACrD,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,gBAAgB,CAAC;QACrD,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,aAAa,CAAC;QAClD,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAE3C,OAAO,SAAS,CAAC,CAAC,sBAAsB;IAC1C,CAAC;IAED,yBAAyB;IAEzB,MAAM;QACJ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,kBAAkB;QAChB,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;QAChD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QAE1C,kEAAkE;QAClE,MAAM,oBAAoB,GAAG,UAAU;aACpC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEjH,wFAAwF;QACxF,MAAM,eAAe,GAAqB,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAsB,CAAC,CAAC;QAEnG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAClC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;yHAvTU,wBAAwB;oEAAxB,wBAAwB;YCzB/B,AADF,AADF,AAHF,8BAA+B,aAGF,aACG,aACQ;YAEhC,AADA,uBAAqD,eAIe;YAExE,AADE,iBAAM,EACF;YAIJ,AAFF,8BAA4B,gBAKuE;;YADzF,qGAAS,oBAAgB,IAAC;YAEhC,uBAEwD;;;YAC1D,iBAAS;YAIP,AADF,+BAAmB,gBACO;YACtB,yBAAgC;YAChC,aACF;YAGN,AADE,AADE,AADE,iBAAO,EACH,EACF,EACF;YAQA,AADF,AADF,AAHF,gCAA4B,eAGI,eACA,UACtB;YAAA,yBAAuC;YAAC,4BAAU;YACxD,AADwD,iBAAK,EACvD;YAEN,gCAA2B;YACzB,8FAQC;;YAEL,AADE,iBAAM,EACF;YAGN,gCAA+B;YAG7B,6FAA0B;;YAU1B,6FAAoD;;YAUpD,6FAAoF;;;YAsDpF,8FAAoF;;;YAqDxF,AADE,iBAAM,EACF;YAGN,6FAAyB;YAWvB,AADF,gCAA2B,kBAGE;YAAnB,sGAAS,YAAQ,IAAC;YACxB,yBACF;YAAA,iBAAS;YAET,mCAGuC;YAA/B,sGAAS,wBAAoB,IAAC;YACpC,yBAAgC;YAChC,aACF;YAEJ,AADE,AADE,iBAAS,EACL,EACF;;YA/MI,eAA6B;YAA7B,+CAA6B;YAUzB,eAAwF;YAAxF,uHAAwF;YAE3F,eAA8C;YAC9C,AADA,yEAA8C,6DACE;YAOjD,eACF;YADE,wFACF;YAeA,eAQC;YARD,wDAQC;YAQH,eAOC;YAPD,kEAOC;YAGD,eAOC;YAPD,8FAOC;YAGD,eAmDC;YAnDD,gJAmDC;YAGD,eAmDC;YAnDD,gJAmDC;YAKL,eAOC;YAPD,iDAOC;YAYS,eAAgC;YAAhC,kDAAgC;YAGtC,eACF;YADE,iEACF;;;iFDxLS,wBAAwB;cANpC,SAAS;6BACI,KAAK,YACP,sBAAsB;;kBA0C/B,MAAM;;kFAtCI,wBAAwB","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef, Output, EventEmitter } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { Subject, BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, takeUntil, startWith } from 'rxjs';\nimport { RunView, Metadata } from '@memberjunction/core';\nimport { MJActionEntity, MJActionCategoryEntity } from '@memberjunction/core-entities';\nimport { UUIDsEqual } from '@memberjunction/global';\n\nexport interface CategoryTreeNode {\n id: string;\n name: string;\n count: number;\n icon: string;\n children?: CategoryTreeNode[];\n expanded?: boolean;\n}\n\nexport interface ActionDisplayItem extends MJActionEntity {\n selected: boolean;\n categoryName?: string;\n}\n\n/**\n * Modern, clean dialog for selecting actions to add to an AI Agent.\n * Features searchable action list, category filtering, and multi-select capability.\n */\n@Component({\n standalone: false,\n selector: 'mj-add-action-dialog',\n templateUrl: './add-action-dialog.component.html',\n styleUrls: ['./add-action-dialog.component.css']\n})\nexport class AddActionDialogComponent implements OnInit, OnDestroy {\n \n // Input properties set by service\n agentId: string = '';\n agentName: string = '';\n existingActionIds: string[] = [];\n\n // Reactive state management\n private destroy$ = new Subject<void>();\n public result = new Subject<MJActionEntity[]>();\n \n // Data streams\n allActions$ = new BehaviorSubject<ActionDisplayItem[]>([]);\n categories$ = new BehaviorSubject<MJActionCategoryEntity[]>([]);\n filteredActions$ = new BehaviorSubject<ActionDisplayItem[]>([]);\n categoryTree$ = new BehaviorSubject<CategoryTreeNode[]>([]);\n selectedActions$ = new BehaviorSubject<Set<string>>(new Set());\n isLoading$ = new BehaviorSubject<boolean>(false);\n \n // UI state\n searchControl = new FormControl('');\n selectedCategoryId$ = new BehaviorSubject<string>('all');\n viewMode$ = new BehaviorSubject<'grid' | 'list'>('grid');\n expandedCategories = new Set<string>();\n\n // Computed values\n get selectedCount(): number {\n return this.selectedActions$.value.size;\n }\n\n get totalActionCount(): number {\n return this.allActions$.value.length;\n }\n\n get filteredCount(): number {\n return this.filteredActions$.value.length;\n }\n\n @Output() DialogClose = new EventEmitter<void>();\n\n constructor(\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit() {\n this.initializeData();\n this.setupFiltering();\n this.preselectExistingActions();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private async initializeData() {\n this.isLoading$.next(true);\n \n try {\n await this.loadActionsAndCategories();\n this.buildCategoryTree();\n } catch (error) {\n console.error('Error loading dialog data:', error);\n } finally {\n this.isLoading$.next(false);\n }\n }\n\n private async loadActionsAndCategories() {\n const rv = new RunView();\n \n const [actionsResult, categoriesResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Actions',\n ExtraFilter: 'Status = \\'Active\\'',\n OrderBy: 'Category, Name',\n ResultType: 'entity_object',\n MaxRows: 5000\n },\n {\n EntityName: 'MJ: Action Categories',\n ExtraFilter: 'Status = \\'Active\\'',\n OrderBy: 'Name',\n ResultType: 'entity_object',\n MaxRows: 1000\n }\n ]);\n\n if (actionsResult.Success) {\n const actions = (actionsResult.Results as MJActionEntity[] || []).map(action => ({\n ...action.GetAll(),\n selected: false,\n categoryName: action.Category || 'Uncategorized'\n } as ActionDisplayItem));\n \n this.allActions$.next(actions);\n }\n\n if (categoriesResult.Success) {\n this.categories$.next(categoriesResult.Results as MJActionCategoryEntity[] || []);\n }\n }\n\n private buildCategoryTree() {\n const actions = this.allActions$.value;\n const categories = this.categories$.value;\n \n // Count actions per category\n const categoryCounts = new Map<string, number>();\n actions.forEach(action => {\n const categoryName = action.categoryName || 'Uncategorized';\n categoryCounts.set(categoryName, (categoryCounts.get(categoryName) || 0) + 1);\n });\n\n // Build tree nodes\n const treeNodes: CategoryTreeNode[] = [\n {\n id: 'all',\n name: 'All Actions',\n count: actions.length,\n icon: 'fa-th'\n }\n ];\n\n // Add category nodes\n categories.forEach(category => {\n const count = categoryCounts.get(category.Name) || 0;\n if (count > 0) {\n treeNodes.push({\n id: category.ID,\n name: category.Name,\n count,\n icon: this.getCategoryIcon(category.Name)\n });\n }\n });\n\n // Add uncategorized if needed\n const uncategorizedCount = categoryCounts.get('Uncategorized') || 0;\n if (uncategorizedCount > 0) {\n treeNodes.push({\n id: 'uncategorized',\n name: 'Uncategorized',\n count: uncategorizedCount,\n icon: 'fa-question-circle'\n });\n }\n\n this.categoryTree$.next(treeNodes);\n }\n\n private getCategoryIcon(categoryName: string): string {\n const iconMap: { [key: string]: string } = {\n 'Data': 'fa-database',\n 'Communication': 'fa-envelope',\n 'Integration': 'fa-plug',\n 'Security': 'fa-shield-alt',\n 'Workflow': 'fa-project-diagram',\n 'AI': 'fa-brain',\n 'Files': 'fa-file-alt',\n 'Utilities': 'fa-tools',\n 'System': 'fa-cog',\n 'Analytics': 'fa-chart-line'\n };\n return iconMap[categoryName] || 'fa-folder';\n }\n\n private setupFiltering() {\n combineLatest([\n this.allActions$,\n this.searchControl.valueChanges.pipe(\n debounceTime(300),\n distinctUntilChanged(),\n startWith('') // Emit initial empty value\n ),\n this.selectedCategoryId$\n ]).pipe(\n takeUntil(this.destroy$)\n ).subscribe(([actions, searchTerm, categoryId]) => {\n this.filterActions(actions, searchTerm || '', categoryId);\n });\n }\n\n private filterActions(actions: ActionDisplayItem[], searchTerm: string, categoryId: string) {\n let filtered = [...actions];\n\n // Category filter\n if (categoryId !== 'all') {\n if (categoryId === 'uncategorized') {\n filtered = filtered.filter(action => !action.Category);\n } else {\n const categoryName = this.getCategoryNameById(categoryId);\n filtered = filtered.filter(action => action.categoryName === categoryName);\n }\n }\n\n // Search filter\n if (searchTerm) {\n const term = searchTerm.toLowerCase();\n filtered = filtered.filter(action =>\n action.Name.toLowerCase().includes(term) ||\n (action.Description && action.Description.toLowerCase().includes(term)) ||\n (action.categoryName && action.categoryName.toLowerCase().includes(term))\n );\n }\n\n this.filteredActions$.next(filtered);\n }\n\n private getCategoryNameById(categoryId: string): string {\n const category = this.categories$.value.find(c => UUIDsEqual(c.ID, categoryId));\n return category?.Name || '';\n }\n\n private preselectExistingActions() {\n if (this.existingActionIds.length > 0) {\n const selected = new Set(this.existingActionIds);\n this.selectedActions$.next(selected);\n \n // Update action selection state\n const actions = this.allActions$.value;\n actions.forEach(action => {\n action.selected = selected.has(action.ID);\n });\n this.allActions$.next(actions);\n }\n }\n\n // === UI Event Handlers ===\n\n selectCategory(categoryId: string) {\n this.selectedCategoryId$.next(categoryId);\n }\n\n toggleViewMode() {\n const currentMode = this.viewMode$.value;\n this.viewMode$.next(currentMode === 'grid' ? 'list' : 'grid');\n }\n\n toggleActionSelection(action: ActionDisplayItem) {\n const selected = this.selectedActions$.value;\n const actions = this.allActions$.value;\n \n // Find the action and toggle its selection\n const actionToUpdate = actions.find(a => UUIDsEqual(a.ID, action.ID));\n if (actionToUpdate) {\n actionToUpdate.selected = !actionToUpdate.selected;\n \n if (actionToUpdate.selected) {\n selected.add(action.ID);\n } else {\n selected.delete(action.ID);\n }\n \n this.selectedActions$.next(new Set(selected));\n this.allActions$.next(actions);\n \n // Update filtered actions to reflect selection state\n const filtered = this.filteredActions$.value;\n const filteredAction = filtered.find(a => UUIDsEqual(a.ID, action.ID));\n if (filteredAction) {\n filteredAction.selected = actionToUpdate.selected;\n this.filteredActions$.next(filtered);\n }\n }\n }\n\n clearSearch() {\n this.searchControl.reset();\n }\n\n getActionIcon(action: ActionDisplayItem): string {\n // Return custom icon if set\n if (action.IconClass) {\n return action.IconClass;\n }\n\n // Fallback icon mapping based on action name/type\n const name = action.Name.toLowerCase();\n if (name.includes('create') || name.includes('add')) return 'fa-plus-circle';\n if (name.includes('update') || name.includes('edit')) return 'fa-edit';\n if (name.includes('delete') || name.includes('remove')) return 'fa-trash';\n if (name.includes('email') || name.includes('send')) return 'fa-envelope';\n if (name.includes('export')) return 'fa-file-export';\n if (name.includes('import')) return 'fa-file-import';\n if (name.includes('report')) return 'fa-file-alt';\n if (name.includes('api')) return 'fa-plug';\n \n return 'fa-bolt'; // Default action icon\n }\n\n // === Dialog Actions ===\n\n cancel() {\n this.result.next([]);\n this.DialogClose.emit();\n }\n\n addSelectedActions() {\n const selectedIds = this.selectedActions$.value;\n const allActions = this.allActions$.value;\n\n // Get the selected action display items (excluding existing ones)\n const selectedDisplayItems = allActions\n .filter(action => selectedIds.has(action.ID) && !this.existingActionIds.some(id => UUIDsEqual(id, action.ID)));\n\n // Convert ActionDisplayItem to MJActionEntity by casting (they have the same structure)\n const selectedActions: MJActionEntity[] = selectedDisplayItems.map(item => item as MJActionEntity);\n\n this.result.next(selectedActions);\n this.DialogClose.emit();\n }\n}","<!-- Add Action Dialog -->\n<div class=\"add-action-dialog\">\n \n <!-- Dialog Header -->\n <div class=\"dialog-header\">\n <div class=\"search-section\">\n <div class=\"search-input-wrapper\">\n <i class=\"fa-solid fa-search search-prefix-icon\"></i>\n <input\n class=\"mj-input search-input\"\n [formControl]=\"searchControl\"\n placeholder=\"Search actions by name, description, or category...\">\n </div>\n </div>\n \n <div class=\"header-actions\">\n <!-- View Toggle -->\n <button mjButton\n variant=\"flat\"\n (click)=\"toggleViewMode()\"\n [title]=\"(viewMode$ | async) === 'grid' ? 'Switch to list view' : 'Switch to grid view'\">\n <i class=\"fa-solid\"\n [class.fa-th]=\"(viewMode$ | async) === 'grid'\"\n [class.fa-list]=\"(viewMode$ | async) === 'list'\"></i>\n </button>\n \n <!-- Stats -->\n <div class=\"stats\">\n <span class=\"stat-item\">\n <i class=\"fa-solid fa-bolt\"></i>\n {{ filteredCount }} of {{ totalActionCount }} actions\n </span>\n </div>\n </div>\n </div>\n\n <!-- Main Content -->\n <div class=\"dialog-content\">\n \n <!-- Category Sidebar -->\n <div class=\"category-sidebar\">\n <div class=\"sidebar-header\">\n <h4><i class=\"fa-solid fa-folder-tree\"></i> Categories</h4>\n </div>\n \n <div class=\"category-list\">\n @for (category of categoryTree$ | async; track category.id) {\n <div class=\"category-item\" \n [class.selected]=\"(selectedCategoryId$ | async) === category.id\"\n (click)=\"selectCategory(category.id)\">\n <i class=\"fa-solid {{ category.icon }} category-icon\"></i>\n <span class=\"category-name\">{{ category.name }}</span>\n <span class=\"category-count\">{{ category.count }}</span>\n </div>\n }\n </div>\n </div>\n\n <!-- Actions Display -->\n <div class=\"actions-container\">\n \n <!-- Loading State -->\n @if (isLoading$ | async) {\n <div class=\"loading-state\">\n <div class=\"loading-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin fa-2x\"></i>\n </div>\n <p>Loading actions...</p>\n </div>\n }\n\n <!-- Empty State -->\n @if (!(isLoading$ | async) && filteredCount === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-search-minus\"></i>\n <h3>No actions found</h3>\n <p>Try adjusting your search criteria or selecting a different category</p>\n <button mjButton (click)=\"clearSearch()\">Clear Search</button>\n </div>\n }\n\n <!-- Grid View -->\n @if (!(isLoading$ | async) && (viewMode$ | async) === 'grid' && filteredCount > 0) {\n <div class=\"actions-grid\">\n @for (action of filteredActions$ | async; track action.ID) {\n <div class=\"action-card\" \n [class.selected]=\"action.selected\"\n [class.existing]=\"existingActionIds.includes(action.ID)\"\n (click)=\"toggleActionSelection(action)\">\n \n <!-- Selection Indicator -->\n <div class=\"selection-indicator\">\n <i class=\"fa-solid\" \n [class.fa-check-circle]=\"action.selected\" \n [class.fa-circle]=\"!action.selected\"></i>\n </div>\n \n <!-- Card Content -->\n <div class=\"card-header\">\n <div class=\"action-icon\">\n <i class=\"fa-solid {{ getActionIcon(action) }}\"></i>\n </div>\n <h3 class=\"action-name\">{{ action.Name }}</h3>\n </div>\n \n <div class=\"card-body\">\n <p class=\"action-description\">{{ action.Description || 'No description available' }}</p>\n \n @if (action.categoryName) {\n <div class=\"category-badge\">\n <i class=\"fa-solid fa-folder\"></i>\n {{ action.categoryName }}\n </div>\n }\n \n @if (action.Type) {\n <div class=\"type-badge\">\n <i class=\"fa-solid fa-tag\"></i>\n {{ action.Type }}\n </div>\n }\n </div>\n \n <!-- Existing Action Overlay -->\n @if (existingActionIds.includes(action.ID)) {\n <div class=\"existing-overlay\">\n <i class=\"fa-solid fa-check\"></i>\n <span>Already Added</span>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- List View -->\n @if (!(isLoading$ | async) && (viewMode$ | async) === 'list' && filteredCount > 0) {\n <div class=\"actions-list\">\n \n <!-- List Header -->\n <div class=\"list-header\">\n <span class=\"col-select\"></span>\n <span class=\"col-name\">Name</span>\n <span class=\"col-category\">Category</span>\n <span class=\"col-type\">Type</span>\n <span class=\"col-description\">Description</span>\n <span class=\"col-status\">Status</span>\n </div>\n \n <!-- List Items -->\n @for (action of filteredActions$ | async; track action.ID) {\n <div class=\"list-item\" \n [class.selected]=\"action.selected\"\n [class.existing]=\"existingActionIds.includes(action.ID)\"\n (click)=\"toggleActionSelection(action)\">\n \n <span class=\"col-select\">\n <i class=\"fa-solid\" \n [class.fa-check-circle]=\"action.selected\" \n [class.fa-circle]=\"!action.selected\"></i>\n </span>\n \n <span class=\"col-name\">\n <i class=\"fa-solid {{ getActionIcon(action) }} action-icon\"></i>\n {{ action.Name }}\n </span>\n \n <span class=\"col-category\">{{ action.categoryName || '-' }}</span>\n <span class=\"col-type\">{{ action.Type || '-' }}</span>\n <span class=\"col-description\">{{ action.Description || '-' }}</span>\n \n <span class=\"col-status\">\n @if (existingActionIds.includes(action.ID)) {\n <span class=\"status-badge existing\">\n <i class=\"fa-solid fa-check\"></i>\n Added\n </span>\n } @else {\n <span class=\"status-badge available\">\n <i class=\"fa-solid fa-plus\"></i>\n Available\n </span>\n }\n </span>\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Selected Actions Summary -->\n @if (selectedCount > 0) {\n <div class=\"selection-summary\">\n <div class=\"summary-content\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <span>{{ selectedCount }} action{{ selectedCount === 1 ? '' : 's' }} selected</span>\n </div>\n </div>\n }\n\n <!-- Dialog Footer -->\n <div class=\"dialog-footer\">\n <button mjButton\n variant=\"flat\"\n (click)=\"cancel()\">\n Cancel\n </button>\n\n <button mjButton\n variant=\"primary\"\n [disabled]=\"selectedCount === 0\"\n (click)=\"addSelectedActions()\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Selected ({{ selectedCount }})\n </button>\n </div>\n</div>"]}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// import { Component, OnInit, OnDestroy, ChangeDetectorRef, ViewContainerRef } from '@angular/core';
|
|
3
3
|
// import { FormGroup, FormBuilder, Validators } from '@angular/forms';
|
|
4
|
-
// import { DialogRef } from '@progress/kendo-angular-dialog';
|
|
5
4
|
// import { Subject, BehaviorSubject, takeUntil } from 'rxjs';
|
|
6
5
|
// import { RunView, Metadata } from '@memberjunction/core';
|
|
7
6
|
// import { MJAIAgentEntityExtended, MJAIAgentTypeEntity, MJAIPromptEntityExtended } from '@memberjunction/core-entities';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-advanced-settings-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/agent-advanced-settings-dialog.component.ts"],"names":[],"mappings":";AAAA,qGAAqG;AACrG,uEAAuE;AACvE,8DAA8D;AAC9D,8DAA8D;AAC9D,4DAA4D;AAC5D,0HAA0H;AAC1H,4EAA4E;AAC5E,4CAA4C;AAC5C,4EAA4E;AAE5E,8CAA8C;AAC9C,2BAA2B;AAC3B,4BAA4B;AAC5B,8BAA8B;AAC9B,gCAAgC;AAEhC,8BAA8B;AAC9B,6BAA6B;AAC7B,2BAA2B;AAC3B,2BAA2B;AAE3B,2BAA2B;AAC3B,uCAAuC;AACvC,uDAAuD;AACvD,+CAA+C;AAC/C,4DAA4D;AAE5D,uBAAuB;AACvB,oCAAoC;AACpC,kCAAkC;AAClC,yCAAyC;AACzC,0CAA0C;AAC1C,IAAI;AAEJ,MAAM;AACN,6CAA6C;AAC7C,yFAAyF;AACzF,MAAM;AACN,eAAe;AACf,uBAAuB;AACvB,mDAAmD;AACnD,oEAAoE;AACpE,kEAAkE;AAClE,KAAK;AACL,mFAAmF;AAEnF,uCAAuC;AACvC,qCAAqC;AAErC,iCAAiC;AACjC,4CAA4C;AAC5C,oEAAoE;AAEpE,qBAAqB;AACrB,8BAA8B;AAC9B,sDAAsD;AACtD,qDAAqD;AAErD,qBAAqB;AACrB,kEAAkE;AAElE,mCAAmC;AACnC,uEAAuE;AAEvE,yBAAyB;AACzB,sBAAsB;AACtB,2CAA2C;AAC3C,+CAA+C;AAC/C,4CAA4C;AAC5C,OAAO;AAEP,iBAAiB;AACjB,oCAAoC;AACpC,+BAA+B;AAC/B,sCAAsC;AACtC,8BAA8B;AAC9B,gEAAgE;AAChE,iDAAiD;AACjD,SAAS;AAET,iBAAiB;AACjB,6BAA6B;AAC7B,+BAA+B;AAC/B,4CAA4C;AAC5C,MAAM;AAEN,oBAAoB;AACpB,4BAA4B;AAC5B,gCAAgC;AAChC,MAAM;AAEN,+BAA+B;AAC/B,0CAA0C;AAC1C,+BAA+B;AAC/B,uCAAuC;AACvC,2CAA2C;AAC3C,+CAA+C;AAE/C,gCAAgC;AAChC,qDAAqD;AACrD,qCAAqC;AACrC,qCAAqC;AAErC,+BAA+B;AAC/B,yEAAyE;AACzE,kHAAkH;AAClH,6EAA6E;AAC7E,4HAA4H;AAE5H,2BAA2B;AAC3B,4FAA4F;AAC5F,wFAAwF;AACxF,iEAAiE;AACjE,kEAAkE;AAClE,UAAU;AAEV,wCAAwC;AACxC,mCAAmC;AACnC,MAAM;AAEN,qCAAqC;AACrC,wCAAwC;AACxC,0FAA0F;AAC1F,4FAA4F;AAC5F,iFAAiF;AACjF,iGAAiG;AAEjG,mDAAmD;AACnD,iCAAiC;AACjC,+BAA+B;AAC/B,uBAAuB;AACvB,qFAAqF;AACrF,+DAA+D;AAC/D,qFAAqF;AACrF,iBAAiB;AACjB,qEAAqE;AACrE,+CAA+C;AAC/C,4CAA4C;AAC5C,+CAA+C;AAE/C,wCAAwC;AACxC,4CAA4C;AAC5C,yCAAyC;AACzC,4CAA4C;AAE5C,2DAA2D;AAC3D,iDAAiD;AACjD,UAAU;AACV,oDAAoD;AACpD,iDAAiD;AACjD,oDAAoD;AACpD,UAAU;AAEV,8FAA8F;AAC9F,MAAM;AAEN,uCAAuC;AACvC,kCAAkC;AAElC,YAAY;AACZ,kCAAkC;AAElC,yEAAyE;AACzE,4CAA4C;AAC5C,uCAAuC;AACvC,2BAA2B;AAC3B,uCAAuC;AACvC,wBAAwB;AACxB,YAAY;AAEZ,wCAAwC;AACxC,iEAAiE;AACjE,UAAU;AAEV,wBAAwB;AACxB,8DAA8D;AAC9D,iEAAiE;AACjE,wDAAwD;AACxD,mBAAmB;AACnB,eAAe;AACf,WAAW;AACX,kBAAkB;AAClB,qCAAqC;AACrC,QAAQ;AACR,MAAM;AAEN,oDAAoD;AACpD,mDAAmD;AACnD,cAAc;AACd,oCAAoC;AACpC,sEAAsE;AACtE,0CAA0C;AAC1C,4EAA4E;AAC5E,yCAAyC;AACzC,uBAAuB;AACvB,cAAc;AAEd,+EAA+E;AAC/E,gEAAgE;AAChE,YAAY;AACZ,0BAA0B;AAC1B,qEAAqE;AACrE,UAAU;AACV,QAAQ;AACR,MAAM;AAEN,kCAAkC;AAElC,iDAAiD;AACjD,sDAAsD;AACtD,2EAA2E;AAC3E,MAAM;AAEN,+CAA+C;AAC/C,sDAAsD;AACtD,2BAA2B;AAC3B,uEAAuE;AACvE,uFAAuF;AACvF,QAAQ;AACR,iBAAiB;AACjB,MAAM;AAEN,4BAA4B;AAE5B,0CAA0C;AAC1C,YAAY;AACZ,2BAA2B;AAC3B,qBAAqB;AACrB,gBAAgB;AAChB,sBAAsB;AACtB,QAAQ;AACR,MAAM;AAEN,oCAAoC;AACpC,wDAAwD;AACxD,4BAA4B;AAC5B,cAAc;AACd,oDAAoD;AACpD,6DAA6D;AAC7D,uCAAuC;AACvC,kBAAkB;AAClB,uCAAuC;AACvC,UAAU;AACV,QAAQ;AACR,MAAM;AAEN,wCAAwC;AACxC,wDAAwD;AACxD,4FAA4F;AAC5F,oCAAoC;AACpC,eAAe;AACf,iCAAiC;AACjC,QAAQ;AACR,MAAM;AAEN,gCAAgC;AAChC,yEAAyE;AACzE,6DAA6D;AAC7D,gDAAgD;AAChD,uCAAuC;AACvC,8BAA8B;AAC9B,2DAA2D;AAC3D,4FAA4F;AAC5F,UAAU;AACV,UAAU;AACV,MAAM;AAEN,+BAA+B;AAC/B,6CAA6C;AAC7C,2EAA2E;AAC3E,MAAM;AAEN,qCAAqC;AACrC,gDAAgD;AAChD,0CAA0C;AAC1C,8FAA8F;AAC9F,QAAQ;AACR,MAAM;AAEN,8BAA8B;AAE9B,eAAe;AACf,8BAA8B;AAC9B,8BAA8B;AAC9B,MAAM;AAEN,mBAAmB;AACnB,uCAAuC;AACvC,gEAAgE;AAChE,iEAAiE;AACjE,uDAAuD;AACvD,YAAY;AACZ,gBAAgB;AAChB,QAAQ;AAER,iCAAiC;AAEjC,YAAY;AACZ,4EAA4E;AAE5E,gCAAgC;AAChC,gIAAgI;AAChI,0CAA0C;AAC1C,2EAA2E;AAC3E,gFAAgF;AAChF,qEAAqE;AACrE,mFAAmF;AACnF,uBAAuB;AACvB,mBAAmB;AACnB,eAAe;AACf,wCAAwC;AACxC,oBAAoB;AACpB,YAAY;AACZ,UAAU;AAEV,oCAAoC;AACpC,gCAAgC;AAEhC,wBAAwB;AACxB,iEAAiE;AACjE,iEAAiE;AACjE,sDAAsD;AACtD,mBAAmB;AACnB,eAAe;AACf,WAAW;AACX,kBAAkB;AAClB,oCAAoC;AACpC,QAAQ;AACR,MAAM;AACN,IAAI","sourcesContent":["// import { Component, OnInit, OnDestroy, ChangeDetectorRef, ViewContainerRef } from '@angular/core';\n// import { FormGroup, FormBuilder, Validators } from '@angular/forms';\n// import { DialogRef } from '@progress/kendo-angular-dialog';\n// import { Subject, BehaviorSubject, takeUntil } from 'rxjs';\n// import { RunView, Metadata } from '@memberjunction/core';\n// import { MJAIAgentEntityExtended, MJAIAgentTypeEntity, MJAIPromptEntityExtended } from '@memberjunction/core-entities';\n// import { MJNotificationService } from '@memberjunction/ng-notifications';\n// import { Router } from '@angular/router';\n// import { AIAgentManagementService } from './ai-agent-management.service';\n\n// export interface AdvancedSettingsFormData {\n// // Identity & Behavior\n// logoURL: string | null;\n// iconClass: string | null;\n// driverClass: string | null;\n \n// // System Configuration \n// exposeAsAction: boolean;\n// typeID: string | null;\n// status: string | null;\n \n// // Context Compression\n// enableContextCompression: boolean;\n// contextCompressionMessageThreshold: number | null;\n// contextCompressionPromptID: string | null;\n// contextCompressionMessageRetentionCount: number | null;\n \n// // Payload Control\n// payloadDownstreamPaths: string;\n// payloadUpstreamPaths: string;\n// payloadSelfReadPaths: string | null;\n// payloadSelfWritePaths: string | null;\n// }\n\n// /**\n// * Advanced Settings dialog for AI Agents.\n// * Provides access to all advanced configuration options not available in the main UI.\n// */\n// @Component({\n// standalone: false,\n// selector: 'mj-agent-advanced-settings-dialog',\n// templateUrl: './agent-advanced-settings-dialog.component.html',\n// styleUrls: ['./agent-advanced-settings-dialog.component.css']\n// })\n// export class AgentAdvancedSettingsDialogComponent implements OnInit, OnDestroy {\n \n// // Input properties set by service\n// agent!: MJAIAgentEntityExtended;\n \n// // Reactive state management\n// private destroy$ = new Subject<void>();\n// public result = new Subject<AdvancedSettingsFormData | null>();\n \n// // Form and data\n// advancedForm!: FormGroup;\n// isLoading$ = new BehaviorSubject<boolean>(false);\n// isSaving$ = new BehaviorSubject<boolean>(false);\n \n// // Dropdown data\n// agentTypes$ = new BehaviorSubject<MJAIAgentTypeEntity[]>([]);\n \n// // Selected compression prompt\n// selectedCompressionPrompt: MJAIPromptEntityExtended | null = null;\n \n// // Available options\n// statusOptions = [\n// { text: 'Active', value: 'Active' },\n// { text: 'Disabled', value: 'Disabled' },\n// { text: 'Pending', value: 'Pending' }\n// ];\n\n// constructor(\n// private dialogRef: DialogRef,\n// private fb: FormBuilder,\n// private cdr: ChangeDetectorRef,\n// private router: Router,\n// private agentManagementService: AIAgentManagementService,\n// private viewContainerRef: ViewContainerRef\n// ) {}\n\n// ngOnInit() {\n// this.initializeForm();\n// this.loadDropdownData();\n// this.loadSelectedCompressionPrompt();\n// }\n\n// ngOnDestroy() {\n// this.destroy$.next();\n// this.destroy$.complete();\n// }\n\n// private initializeForm() {\n// this.advancedForm = this.fb.group({\n// // Identity & Behavior\n// logoURL: [this.agent.LogoURL],\n// iconClass: [this.agent.IconClass],\n// driverClass: [this.agent.DriverClass],\n \n// // System Configuration\n// exposeAsAction: [this.agent.ExposeAsAction],\n// typeID: [this.agent.TypeID],\n// status: [this.agent.Status],\n \n// // Context Compression\n// enableContextCompression: [this.agent.EnableContextCompression],\n// contextCompressionMessageThreshold: [this.agent.ContextCompressionMessageThreshold, [Validators.min(1)]],\n// contextCompressionPromptID: [this.agent.ContextCompressionPromptID],\n// contextCompressionMessageRetentionCount: [this.agent.ContextCompressionMessageRetentionCount, [Validators.min(1)]],\n \n// // Payload Control\n// payloadDownstreamPaths: [this.agent.PayloadDownstreamPaths, [Validators.required]],\n// payloadUpstreamPaths: [this.agent.PayloadUpstreamPaths, [Validators.required]],\n// payloadSelfReadPaths: [this.agent.PayloadSelfReadPaths],\n// payloadSelfWritePaths: [this.agent.PayloadSelfWritePaths]\n// });\n\n// // Set up validation dependencies\n// this.setupValidationLogic();\n// }\n\n// private setupValidationLogic() {\n// // Context compression validation\n// const enableCompressionControl = this.advancedForm.get('enableContextCompression');\n// const thresholdControl = this.advancedForm.get('contextCompressionMessageThreshold');\n// const promptControl = this.advancedForm.get('contextCompressionPromptID');\n// const retentionControl = this.advancedForm.get('contextCompressionMessageRetentionCount');\n\n// enableCompressionControl?.valueChanges.pipe(\n// takeUntil(this.destroy$)\n// ).subscribe(enabled => {\n// if (enabled) {\n// thresholdControl?.setValidators([Validators.required, Validators.min(1)]);\n// promptControl?.setValidators([Validators.required]);\n// retentionControl?.setValidators([Validators.required, Validators.min(1)]);\n// } else {\n// // Clear validators and reset values to null when disabled\n// thresholdControl?.clearValidators();\n// promptControl?.clearValidators();\n// retentionControl?.clearValidators();\n \n// // Reset field values to null\n// thresholdControl?.setValue(null);\n// promptControl?.setValue(null);\n// retentionControl?.setValue(null);\n \n// // Clear the selected compression prompt display\n// this.selectedCompressionPrompt = null;\n// }\n// thresholdControl?.updateValueAndValidity();\n// promptControl?.updateValueAndValidity();\n// retentionControl?.updateValueAndValidity();\n// });\n\n// // Note: ParentID vs ExposeAsAction validation is now handled in the sub-agents section\n// }\n\n// private async loadDropdownData() {\n// this.isLoading$.next(true);\n \n// try {\n// const rv = new RunView();\n \n// const agentTypesResult = await rv.RunView<MJAIAgentTypeEntity>({\n// EntityName: 'MJ: AI Agent Types',\n// ExtraFilter: 'IsActive = 1',\n// OrderBy: 'Name',\n// ResultType: 'entity_object',\n// MaxRows: 1000\n// });\n\n// if (agentTypesResult.Success) {\n// this.agentTypes$.next(agentTypesResult.Results || []);\n// }\n\n// } catch (error) {\n// console.error('Error loading dropdown data:', error);\n// MJNotificationService.Instance.CreateSimpleNotification(\n// 'Error loading form data. Please try again.',\n// 'error',\n// 3000\n// );\n// } finally {\n// this.isLoading$.next(false);\n// }\n// }\n\n// private async loadSelectedCompressionPrompt() {\n// if (this.agent.ContextCompressionPromptID) {\n// try {\n// const rv = new RunView();\n// const result = await rv.RunView<MJAIPromptEntityExtended>({\n// EntityName: 'MJ: AI Prompts',\n// ExtraFilter: `ID = '${this.agent.ContextCompressionPromptID}'`,\n// ResultType: 'entity_object',\n// MaxRows: 1\n// });\n\n// if (result.Success && result.Results && result.Results.length > 0) {\n// this.selectedCompressionPrompt = result.Results[0];\n// }\n// } catch (error) {\n// console.error('Error loading compression prompt:', error);\n// }\n// }\n// }\n\n// // === Validation Helpers ===\n\n// isFieldInvalid(fieldName: string): boolean {\n// const field = this.advancedForm.get(fieldName);\n// return !!(field && field.invalid && (field.dirty || field.touched));\n// }\n\n// getFieldError(fieldName: string): string {\n// const field = this.advancedForm.get(fieldName);\n// if (field?.errors) {\n// if (field.errors['required']) return 'This field is required';\n// if (field.errors['min']) return `Minimum value is ${field.errors['min'].min}`;\n// }\n// return '';\n// }\n\n// // === JSON Helpers ===\n\n// isValidJSON(value: string): boolean {\n// try {\n// JSON.parse(value);\n// return true;\n// } catch {\n// return false;\n// }\n// }\n\n// formatJSON(fieldName: string) {\n// const control = this.advancedForm.get(fieldName);\n// if (control?.value) {\n// try {\n// const parsed = JSON.parse(control.value);\n// const formatted = JSON.stringify(parsed, null, 2);\n// control.setValue(formatted);\n// } catch {\n// // Invalid JSON, leave as is\n// }\n// }\n// }\n\n// resetToDefault(fieldName: string) {\n// const control = this.advancedForm.get(fieldName);\n// if (fieldName === 'payloadDownstreamPaths' || fieldName === 'payloadUpstreamPaths') {\n// control?.setValue('[\"*\"]');\n// } else {\n// control?.setValue(null);\n// }\n// }\n\n// selectCompressionPrompt() {\n// this.agentManagementService.openContextCompressionPromptSelector({\n// currentPromptId: this.selectedCompressionPrompt?.ID,\n// viewContainerRef: this.viewContainerRef\n// }).subscribe(selectedPrompt => {\n// if (selectedPrompt) {\n// this.selectedCompressionPrompt = selectedPrompt;\n// this.advancedForm.get('contextCompressionPromptID')?.setValue(selectedPrompt.ID);\n// }\n// });\n// }\n\n// clearCompressionPrompt() {\n// this.selectedCompressionPrompt = null;\n// this.advancedForm.get('contextCompressionPromptID')?.setValue(null);\n// }\n\n// viewContextCompressionPrompt() {\n// if (this.selectedCompressionPrompt?.ID) {\n// // Navigate to the AI Prompt form\n// this.router.navigate(['/form', 'MJ: AI Prompts', this.selectedCompressionPrompt.ID]);\n// }\n// }\n\n// // === Dialog Actions ===\n\n// cancel() {\n// this.result.next(null);\n// this.dialogRef.close();\n// }\n\n// async save() {\n// if (this.advancedForm.invalid) {\n// // Mark all fields as touched to show validation errors\n// Object.keys(this.advancedForm.controls).forEach(key => {\n// this.advancedForm.get(key)?.markAsTouched();\n// });\n// return;\n// }\n\n// this.isSaving$.next(true);\n \n// try {\n// const formData: AdvancedSettingsFormData = this.advancedForm.value;\n \n// // Validate JSON fields\n// const jsonFields = ['payloadDownstreamPaths', 'payloadUpstreamPaths', 'payloadSelfReadPaths', 'payloadSelfWritePaths'];\n// for (const field of jsonFields) {\n// const value = formData[field as keyof AdvancedSettingsFormData];\n// if (value && typeof value === 'string' && !this.isValidJSON(value)) {\n// MJNotificationService.Instance.CreateSimpleNotification(\n// `Invalid JSON in ${field.replace(/([A-Z])/g, ' $1').toLowerCase()}`,\n// 'error',\n// 3000\n// );\n// this.isSaving$.next(false);\n// return;\n// }\n// }\n\n// this.result.next(formData);\n// this.dialogRef.close();\n \n// } catch (error) {\n// console.error('Error saving advanced settings:', error);\n// MJNotificationService.Instance.CreateSimpleNotification(\n// 'Error saving settings. Please try again.',\n// 'error',\n// 3000\n// );\n// } finally {\n// this.isSaving$.next(false);\n// }\n// }\n// }"]}
|
|
1
|
+
{"version":3,"file":"agent-advanced-settings-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/agent-advanced-settings-dialog.component.ts"],"names":[],"mappings":"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","sourcesContent":["// import { Component, OnInit, OnDestroy, ChangeDetectorRef, ViewContainerRef } from '@angular/core';\n// import { FormGroup, FormBuilder, Validators } from '@angular/forms';\n// import { Subject, BehaviorSubject, takeUntil } from 'rxjs';\n// import { RunView, Metadata } from '@memberjunction/core';\n// import { MJAIAgentEntityExtended, MJAIAgentTypeEntity, MJAIPromptEntityExtended } from '@memberjunction/core-entities';\n// import { MJNotificationService } from '@memberjunction/ng-notifications';\n// import { Router } from '@angular/router';\n// import { AIAgentManagementService } from './ai-agent-management.service';\n\n// export interface AdvancedSettingsFormData {\n// // Identity & Behavior\n// logoURL: string | null;\n// iconClass: string | null;\n// driverClass: string | null;\n \n// // System Configuration \n// exposeAsAction: boolean;\n// typeID: string | null;\n// status: string | null;\n \n// // Context Compression\n// enableContextCompression: boolean;\n// contextCompressionMessageThreshold: number | null;\n// contextCompressionPromptID: string | null;\n// contextCompressionMessageRetentionCount: number | null;\n \n// // Payload Control\n// payloadDownstreamPaths: string;\n// payloadUpstreamPaths: string;\n// payloadSelfReadPaths: string | null;\n// payloadSelfWritePaths: string | null;\n// }\n\n// /**\n// * Advanced Settings dialog for AI Agents.\n// * Provides access to all advanced configuration options not available in the main UI.\n// */\n// @Component({\n// standalone: false,\n// selector: 'mj-agent-advanced-settings-dialog',\n// templateUrl: './agent-advanced-settings-dialog.component.html',\n// styleUrls: ['./agent-advanced-settings-dialog.component.css']\n// })\n// export class AgentAdvancedSettingsDialogComponent implements OnInit, OnDestroy {\n \n// // Input properties set by service\n// agent!: MJAIAgentEntityExtended;\n \n// // Reactive state management\n// private destroy$ = new Subject<void>();\n// public result = new Subject<AdvancedSettingsFormData | null>();\n \n// // Form and data\n// advancedForm!: FormGroup;\n// isLoading$ = new BehaviorSubject<boolean>(false);\n// isSaving$ = new BehaviorSubject<boolean>(false);\n \n// // Dropdown data\n// agentTypes$ = new BehaviorSubject<MJAIAgentTypeEntity[]>([]);\n \n// // Selected compression prompt\n// selectedCompressionPrompt: MJAIPromptEntityExtended | null = null;\n \n// // Available options\n// statusOptions = [\n// { text: 'Active', value: 'Active' },\n// { text: 'Disabled', value: 'Disabled' },\n// { text: 'Pending', value: 'Pending' }\n// ];\n\n// constructor(\n// private dialogRef: DialogRef,\n// private fb: FormBuilder,\n// private cdr: ChangeDetectorRef,\n// private router: Router,\n// private agentManagementService: AIAgentManagementService,\n// private viewContainerRef: ViewContainerRef\n// ) {}\n\n// ngOnInit() {\n// this.initializeForm();\n// this.loadDropdownData();\n// this.loadSelectedCompressionPrompt();\n// }\n\n// ngOnDestroy() {\n// this.destroy$.next();\n// this.destroy$.complete();\n// }\n\n// private initializeForm() {\n// this.advancedForm = this.fb.group({\n// // Identity & Behavior\n// logoURL: [this.agent.LogoURL],\n// iconClass: [this.agent.IconClass],\n// driverClass: [this.agent.DriverClass],\n \n// // System Configuration\n// exposeAsAction: [this.agent.ExposeAsAction],\n// typeID: [this.agent.TypeID],\n// status: [this.agent.Status],\n \n// // Context Compression\n// enableContextCompression: [this.agent.EnableContextCompression],\n// contextCompressionMessageThreshold: [this.agent.ContextCompressionMessageThreshold, [Validators.min(1)]],\n// contextCompressionPromptID: [this.agent.ContextCompressionPromptID],\n// contextCompressionMessageRetentionCount: [this.agent.ContextCompressionMessageRetentionCount, [Validators.min(1)]],\n \n// // Payload Control\n// payloadDownstreamPaths: [this.agent.PayloadDownstreamPaths, [Validators.required]],\n// payloadUpstreamPaths: [this.agent.PayloadUpstreamPaths, [Validators.required]],\n// payloadSelfReadPaths: [this.agent.PayloadSelfReadPaths],\n// payloadSelfWritePaths: [this.agent.PayloadSelfWritePaths]\n// });\n\n// // Set up validation dependencies\n// this.setupValidationLogic();\n// }\n\n// private setupValidationLogic() {\n// // Context compression validation\n// const enableCompressionControl = this.advancedForm.get('enableContextCompression');\n// const thresholdControl = this.advancedForm.get('contextCompressionMessageThreshold');\n// const promptControl = this.advancedForm.get('contextCompressionPromptID');\n// const retentionControl = this.advancedForm.get('contextCompressionMessageRetentionCount');\n\n// enableCompressionControl?.valueChanges.pipe(\n// takeUntil(this.destroy$)\n// ).subscribe(enabled => {\n// if (enabled) {\n// thresholdControl?.setValidators([Validators.required, Validators.min(1)]);\n// promptControl?.setValidators([Validators.required]);\n// retentionControl?.setValidators([Validators.required, Validators.min(1)]);\n// } else {\n// // Clear validators and reset values to null when disabled\n// thresholdControl?.clearValidators();\n// promptControl?.clearValidators();\n// retentionControl?.clearValidators();\n \n// // Reset field values to null\n// thresholdControl?.setValue(null);\n// promptControl?.setValue(null);\n// retentionControl?.setValue(null);\n \n// // Clear the selected compression prompt display\n// this.selectedCompressionPrompt = null;\n// }\n// thresholdControl?.updateValueAndValidity();\n// promptControl?.updateValueAndValidity();\n// retentionControl?.updateValueAndValidity();\n// });\n\n// // Note: ParentID vs ExposeAsAction validation is now handled in the sub-agents section\n// }\n\n// private async loadDropdownData() {\n// this.isLoading$.next(true);\n \n// try {\n// const rv = new RunView();\n \n// const agentTypesResult = await rv.RunView<MJAIAgentTypeEntity>({\n// EntityName: 'MJ: AI Agent Types',\n// ExtraFilter: 'IsActive = 1',\n// OrderBy: 'Name',\n// ResultType: 'entity_object',\n// MaxRows: 1000\n// });\n\n// if (agentTypesResult.Success) {\n// this.agentTypes$.next(agentTypesResult.Results || []);\n// }\n\n// } catch (error) {\n// console.error('Error loading dropdown data:', error);\n// MJNotificationService.Instance.CreateSimpleNotification(\n// 'Error loading form data. Please try again.',\n// 'error',\n// 3000\n// );\n// } finally {\n// this.isLoading$.next(false);\n// }\n// }\n\n// private async loadSelectedCompressionPrompt() {\n// if (this.agent.ContextCompressionPromptID) {\n// try {\n// const rv = new RunView();\n// const result = await rv.RunView<MJAIPromptEntityExtended>({\n// EntityName: 'MJ: AI Prompts',\n// ExtraFilter: `ID = '${this.agent.ContextCompressionPromptID}'`,\n// ResultType: 'entity_object',\n// MaxRows: 1\n// });\n\n// if (result.Success && result.Results && result.Results.length > 0) {\n// this.selectedCompressionPrompt = result.Results[0];\n// }\n// } catch (error) {\n// console.error('Error loading compression prompt:', error);\n// }\n// }\n// }\n\n// // === Validation Helpers ===\n\n// isFieldInvalid(fieldName: string): boolean {\n// const field = this.advancedForm.get(fieldName);\n// return !!(field && field.invalid && (field.dirty || field.touched));\n// }\n\n// getFieldError(fieldName: string): string {\n// const field = this.advancedForm.get(fieldName);\n// if (field?.errors) {\n// if (field.errors['required']) return 'This field is required';\n// if (field.errors['min']) return `Minimum value is ${field.errors['min'].min}`;\n// }\n// return '';\n// }\n\n// // === JSON Helpers ===\n\n// isValidJSON(value: string): boolean {\n// try {\n// JSON.parse(value);\n// return true;\n// } catch {\n// return false;\n// }\n// }\n\n// formatJSON(fieldName: string) {\n// const control = this.advancedForm.get(fieldName);\n// if (control?.value) {\n// try {\n// const parsed = JSON.parse(control.value);\n// const formatted = JSON.stringify(parsed, null, 2);\n// control.setValue(formatted);\n// } catch {\n// // Invalid JSON, leave as is\n// }\n// }\n// }\n\n// resetToDefault(fieldName: string) {\n// const control = this.advancedForm.get(fieldName);\n// if (fieldName === 'payloadDownstreamPaths' || fieldName === 'payloadUpstreamPaths') {\n// control?.setValue('[\"*\"]');\n// } else {\n// control?.setValue(null);\n// }\n// }\n\n// selectCompressionPrompt() {\n// this.agentManagementService.openContextCompressionPromptSelector({\n// currentPromptId: this.selectedCompressionPrompt?.ID,\n// viewContainerRef: this.viewContainerRef\n// }).subscribe(selectedPrompt => {\n// if (selectedPrompt) {\n// this.selectedCompressionPrompt = selectedPrompt;\n// this.advancedForm.get('contextCompressionPromptID')?.setValue(selectedPrompt.ID);\n// }\n// });\n// }\n\n// clearCompressionPrompt() {\n// this.selectedCompressionPrompt = null;\n// this.advancedForm.get('contextCompressionPromptID')?.setValue(null);\n// }\n\n// viewContextCompressionPrompt() {\n// if (this.selectedCompressionPrompt?.ID) {\n// // Navigate to the AI Prompt form\n// this.router.navigate(['/form', 'MJ: AI Prompts', this.selectedCompressionPrompt.ID]);\n// }\n// }\n\n// // === Dialog Actions ===\n\n// cancel() {\n// this.result.next(null);\n// this.dialogRef.close();\n// }\n\n// async save() {\n// if (this.advancedForm.invalid) {\n// // Mark all fields as touched to show validation errors\n// Object.keys(this.advancedForm.controls).forEach(key => {\n// this.advancedForm.get(key)?.markAsTouched();\n// });\n// return;\n// }\n\n// this.isSaving$.next(true);\n \n// try {\n// const formData: AdvancedSettingsFormData = this.advancedForm.value;\n \n// // Validate JSON fields\n// const jsonFields = ['payloadDownstreamPaths', 'payloadUpstreamPaths', 'payloadSelfReadPaths', 'payloadSelfWritePaths'];\n// for (const field of jsonFields) {\n// const value = formData[field as keyof AdvancedSettingsFormData];\n// if (value && typeof value === 'string' && !this.isValidJSON(value)) {\n// MJNotificationService.Instance.CreateSimpleNotification(\n// `Invalid JSON in ${field.replace(/([A-Z])/g, ' $1').toLowerCase()}`,\n// 'error',\n// 3000\n// );\n// this.isSaving$.next(false);\n// return;\n// }\n// }\n\n// this.result.next(formData);\n// this.dialogRef.close();\n \n// } catch (error) {\n// console.error('Error saving advanced settings:', error);\n// MJNotificationService.Instance.CreateSimpleNotification(\n// 'Error saving settings. Please try again.',\n// 'error',\n// 3000\n// );\n// } finally {\n// this.isSaving$.next(false);\n// }\n// }\n// }"]}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';
|
|
1
|
+
import { OnInit, OnDestroy, ChangeDetectorRef, EventEmitter } from '@angular/core';
|
|
2
2
|
import { FormGroup, FormBuilder } from '@angular/forms';
|
|
3
|
-
import { WindowRef } from '@progress/kendo-angular-dialog';
|
|
4
3
|
import { Subject, BehaviorSubject } from 'rxjs';
|
|
5
4
|
import { MJAIAgentPromptEntity, MJAIConfigurationEntity } from '@memberjunction/core-entities';
|
|
6
5
|
import * as i0 from "@angular/core";
|
|
@@ -17,7 +16,6 @@ export interface AgentPromptAdvancedSettingsFormData {
|
|
|
17
16
|
* Manages execution order, context behavior, and other advanced prompt configurations.
|
|
18
17
|
*/
|
|
19
18
|
export declare class AgentPromptAdvancedSettingsDialogComponent implements OnInit, OnDestroy {
|
|
20
|
-
private dialogRef;
|
|
21
19
|
private fb;
|
|
22
20
|
private cdr;
|
|
23
21
|
agentPrompt: MJAIAgentPromptEntity;
|
|
@@ -38,7 +36,8 @@ export declare class AgentPromptAdvancedSettingsDialogComponent implements OnIni
|
|
|
38
36
|
value: string;
|
|
39
37
|
}[];
|
|
40
38
|
executionOrderError: string | null;
|
|
41
|
-
|
|
39
|
+
DialogClose: EventEmitter<void>;
|
|
40
|
+
constructor(fb: FormBuilder, cdr: ChangeDetectorRef);
|
|
42
41
|
ngOnInit(): void;
|
|
43
42
|
ngOnDestroy(): void;
|
|
44
43
|
private initializeForm;
|
|
@@ -53,6 +52,6 @@ export declare class AgentPromptAdvancedSettingsDialogComponent implements OnIni
|
|
|
53
52
|
cancel(): void;
|
|
54
53
|
save(): Promise<void>;
|
|
55
54
|
static ɵfac: i0.ɵɵFactoryDeclaration<AgentPromptAdvancedSettingsDialogComponent, never>;
|
|
56
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AgentPromptAdvancedSettingsDialogComponent, "mj-agent-prompt-advanced-settings-dialog", never, {}, {}, never, never, false, never>;
|
|
55
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AgentPromptAdvancedSettingsDialogComponent, "mj-agent-prompt-advanced-settings-dialog", never, {}, { "DialogClose": "DialogClose"; }, never, never, false, never>;
|
|
57
56
|
}
|
|
58
57
|
//# sourceMappingURL=agent-prompt-advanced-settings-dialog.component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-prompt-advanced-settings-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-prompt-advanced-settings-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAU,YAAY,EAAE,MAAM,eAAe,CAAC;AACtG,OAAO,EAAE,SAAS,EAAE,WAAW,EAAc,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAa,MAAM,MAAM,CAAC;AAE3D,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;;AAI/F,MAAM,WAAW,mCAAmC;IAClD,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,QAAQ,CAAC;IACjG,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,YAAY,GAAG,SAAS,CAAC;CAC1D;AAED;;;GAGG;AACH,qBAMa,0CAA2C,YAAW,MAAM,EAAE,SAAS;IAyChF,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,GAAG;IAvCb,WAAW,EAAG,qBAAqB,CAAC;IACpC,eAAe,EAAE,qBAAqB,EAAE,CAAM;IAG9C,OAAO,CAAC,QAAQ,CAAuB;IAChC,MAAM,sDAA6D;IAG1E,YAAY,EAAG,SAAS,CAAC;IACzB,UAAU,2BAAuC;IACjD,SAAS,2BAAuC;IAGhD,eAAe,6CAAsD;IAGrE,sBAAsB;;;;QAOpB;IAEF,aAAa;;;QAKX;IAGF,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEhC,WAAW,qBAA4B;gBAGvC,EAAE,EAAE,WAAW,EACf,GAAG,EAAE,iBAAiB;IAGhC,QAAQ;IAKR,WAAW;IAKX,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,oBAAoB;IA4B5B,OAAO,CAAC,sBAAsB;YAqBhB,gBAAgB;IAiC9B,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAK1C,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IASxC,sBAAsB,IAAI,OAAO;IAMjC,oBAAoB,IAAI,OAAO;IAK/B,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAOpD,MAAM;IAKA,IAAI;yCA3LC,0CAA0C;2CAA1C,0CAA0C;CAgOtD"}
|