@memberjunction/ng-action-gallery 5.4.1 → 5.6.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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-gallery.component.d.ts","sourceRoot":"","sources":["../../src/lib/action-gallery.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAa,UAAU,EAAE,MAAM,eAAe,CAAC;AACjH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAW,eAAe,EAAgE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"action-gallery.component.d.ts","sourceRoot":"","sources":["../../src/lib/action-gallery.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAa,UAAU,EAAE,MAAM,eAAe,CAAC;AACjH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAW,eAAe,EAAgE,MAAM,MAAM,CAAC;AAG9G,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;;AAEtI,MAAM,WAAW,mBAAmB;IAClC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACnC,WAAW,CAAC,EAAE,wBAAwB,EAAE,CAAC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,qBAMa,sBAAuB,YAAW,MAAM,EAAE,SAAS;IACrD,MAAM,EAAE,mBAAmB,CASlC;IAEO,kBAAkB,EAAE,MAAM,EAAE,CAAM;IACjC,cAAc,+BAAsC;IACpD,eAAe,iCAAwC;IACvD,mBAAmB,+BAAsC;IAEtB,WAAW,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAGvF,OAAO,CAAC,QAAQ,CAAuB;IACvC,QAAQ,uCAAgD;IACxD,WAAW,4CAAqD;IAChE,gBAAgB,uCAAgD;IAChE,aAAa,kCAA2C;IACxD,iBAAiB,0BAAsC;IACvD,SAAS,mCAAgD;IACzD,UAAU,2BAAuC;IACjD,gBAAgB,+BAA+C;IAG/D,aAAa,6BAAuB;IAGpC,kBAAkB,cAAqB;IACvC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAQ;IACpC,YAAY,UAAS;IAGrB,YAAY,SAAK;IACjB,cAAc,sBAA6B;;IAI3C,QAAQ;IAgCR,WAAW;IAKL,QAAQ;IAkDd,OAAO,CAAC,iBAAiB;IA4DzB,OAAO,CAAC,eAAe;IAiBvB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM;IAQpD,OAAO,CAAC,aAAa;IA0BrB,OAAO,CAAC,eAAe;IAKvB,cAAc,CAAC,UAAU,EAAE,MAAM;IAIjC,sBAAsB,CAAC,UAAU,EAAE,MAAM;IAQzC,cAAc;IAKR,oBAAoB,CAAC,MAAM,EAAE,iBAAiB;IAS9C,iBAAiB,CAAC,MAAM,EAAE,iBAAiB;IAiCjD,qBAAqB,CAAC,MAAM,EAAE,iBAAiB;IAgC/C,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK;IAW/C,WAAW;IAOX,kBAAkB,IAAI,cAAc,EAAE;IAKtC,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;yCAzWlC,sBAAsB;2CAAtB,sBAAsB;CAiYlC"}
|
|
@@ -2,6 +2,7 @@ import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core
|
|
|
2
2
|
import { FormControl } from '@angular/forms';
|
|
3
3
|
import { Subject, BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';
|
|
4
4
|
import { RunView } from '@memberjunction/core';
|
|
5
|
+
import { UUIDsEqual } from '@memberjunction/global';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
import * as i1 from "@angular/forms";
|
|
7
8
|
import * as i2 from "@progress/kendo-angular-buttons";
|
|
@@ -516,7 +517,7 @@ export class ActionGalleryComponent {
|
|
|
516
517
|
const actionsWithDetails = actions.map(action => ({
|
|
517
518
|
...action,
|
|
518
519
|
expanded: false,
|
|
519
|
-
selected: this.preSelectedActions.
|
|
520
|
+
selected: this.preSelectedActions.some(id => UUIDsEqual(id, action.ID))
|
|
520
521
|
}));
|
|
521
522
|
this.actions$.next(actionsWithDetails);
|
|
522
523
|
this.totalActions = actions.length;
|
|
@@ -632,7 +633,7 @@ export class ActionGalleryComponent {
|
|
|
632
633
|
this.filteredActions$.next(filtered);
|
|
633
634
|
}
|
|
634
635
|
getCategoryName(categoryId) {
|
|
635
|
-
const category = this.categories$.value.find(c => c.ID
|
|
636
|
+
const category = this.categories$.value.find(c => UUIDsEqual(c.ID, categoryId));
|
|
636
637
|
return category?.Name || '';
|
|
637
638
|
}
|
|
638
639
|
selectCategory(categoryId) {
|
|
@@ -821,5 +822,5 @@ export class ActionGalleryComponent {
|
|
|
821
822
|
type: ViewChild,
|
|
822
823
|
args: ['searchInput', { static: false }]
|
|
823
824
|
}] }); })();
|
|
824
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ActionGalleryComponent, { className: "ActionGalleryComponent", filePath: "lib/action-gallery.component.ts", lineNumber:
|
|
825
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ActionGalleryComponent, { className: "ActionGalleryComponent", filePath: "lib/action-gallery.component.ts", lineNumber: 41 }); })();
|
|
825
826
|
//# sourceMappingURL=action-gallery.component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-gallery.component.js","sourceRoot":"","sources":["../../src/lib/action-gallery.component.ts","../../src/lib/action-gallery.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, ViewChild, ElementRef } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { Subject, BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\nimport { RunView } from '@memberjunction/core';\nimport { MJActionEntity, MJActionCategoryEntity, MJActionParamEntity, MJActionResultCodeEntity } from '@memberjunction/core-entities';\n\nexport interface ActionGalleryConfig {\n selectionMode?: boolean;\n multiSelect?: boolean;\n showCategories?: boolean;\n showSearch?: boolean;\n defaultView?: 'grid' | 'list';\n gridColumns?: number;\n enableQuickTest?: boolean;\n theme?: 'light' | 'dark';\n}\n\nexport interface CategoryNode {\n id: string;\n name: string;\n parent?: string;\n children?: CategoryNode[];\n count?: number;\n icon?: string;\n}\n\nexport interface ActionWithDetails extends MJActionEntity {\n parameters?: MJActionParamEntity[];\n resultCodes?: MJActionResultCodeEntity[];\n expanded?: boolean;\n selected?: boolean;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-action-gallery',\n templateUrl: './action-gallery.component.html',\n styleUrls: ['./action-gallery.component.css']\n})\nexport class ActionGalleryComponent implements OnInit, OnDestroy {\n @Input() config: ActionGalleryConfig = {\n selectionMode: false,\n multiSelect: false,\n showCategories: true,\n showSearch: true,\n defaultView: 'grid',\n gridColumns: 3,\n enableQuickTest: true,\n theme: 'light'\n };\n \n @Input() preSelectedActions: string[] = [];\n @Output() actionSelected = new EventEmitter<MJActionEntity>();\n @Output() actionsSelected = new EventEmitter<MJActionEntity[]>();\n @Output() actionTestRequested = new EventEmitter<MJActionEntity>();\n \n @ViewChild('searchInput', { static: false }) searchInput: ElementRef<HTMLInputElement>;\n \n // State management\n private destroy$ = new Subject<void>();\n actions$ = new BehaviorSubject<ActionWithDetails[]>([]);\n categories$ = new BehaviorSubject<MJActionCategoryEntity[]>([]);\n filteredActions$ = new BehaviorSubject<ActionWithDetails[]>([]);\n categoryTree$ = new BehaviorSubject<CategoryNode[]>([]);\n selectedCategory$ = new BehaviorSubject<string>('all');\n viewMode$ = new BehaviorSubject<'grid' | 'list'>('grid');\n isLoading$ = new BehaviorSubject<boolean>(false);\n selectedActions$ = new BehaviorSubject<Set<string>>(new Set());\n \n // Form controls\n searchControl = new FormControl('');\n \n // UI state\n expandedCategories = new Set<string>();\n hoveredAction: string | null = null;\n animateCards = false;\n \n // Statistics\n totalActions = 0;\n categoryCounts = new Map<string, number>();\n \n constructor() {}\n \n ngOnInit() {\n // Set initial view mode\n this.viewMode$.next(this.config.defaultView || 'grid');\n \n // Load data\n this.loadData();\n \n // Set up filtering\n combineLatest([\n this.actions$,\n this.searchControl.valueChanges.pipe(\n debounceTime(300),\n distinctUntilChanged()\n ),\n this.selectedCategory$\n ]).pipe(\n takeUntil(this.destroy$)\n ).subscribe(([actions, searchTerm, category]) => {\n this.filterActions(actions, searchTerm || '', category);\n });\n \n // Initialize with pre-selected actions\n if (this.preSelectedActions.length > 0) {\n this.selectedActions$.next(new Set(this.preSelectedActions));\n }\n \n // Enable animations after initial load\n setTimeout(() => {\n this.animateCards = true;\n }, 100);\n }\n \n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n \n async loadData() {\n this.isLoading$.next(true);\n \n try {\n const rv = new RunView();\n \n // Load actions and categories in parallel\n const [actionsResult, categoriesResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Actions',\n ResultType: 'entity_object',\n OrderBy: 'Category, Name',\n MaxRows: 5000\n },\n {\n EntityName: 'MJ: Action Categories',\n ResultType: 'entity_object',\n OrderBy: 'Name',\n MaxRows: 1000\n }\n ]);\n \n if (actionsResult.Success && categoriesResult.Success) {\n const actions = actionsResult.Results as MJActionEntity[] || [];\n const categories = categoriesResult.Results as MJActionCategoryEntity[] || [];\n \n // Process actions\n const actionsWithDetails = actions.map(action => ({\n ...action,\n expanded: false,\n selected: this.preSelectedActions.includes(action.ID)\n } as ActionWithDetails));\n \n this.actions$.next(actionsWithDetails);\n this.totalActions = actions.length;\n \n // Process categories\n this.categories$.next(categories);\n this.buildCategoryTree(categories, actions);\n \n // Initial filter\n this.filterActions(actionsWithDetails, '', 'all');\n }\n } catch (error) {\n console.error('Error loading gallery data:', error);\n } finally {\n this.isLoading$.next(false);\n }\n }\n \n private buildCategoryTree(categories: MJActionCategoryEntity[], actions: MJActionEntity[]) {\n // Count actions per category\n this.categoryCounts.clear();\n actions.forEach(action => {\n const count = this.categoryCounts.get(action.Category || 'Uncategorized') || 0;\n this.categoryCounts.set(action.Category || 'Uncategorized', count + 1);\n });\n \n // Build tree structure\n const nodeMap = new Map<string, CategoryNode>();\n const rootNodes: CategoryNode[] = [];\n \n // Create nodes\n categories.forEach(cat => {\n const node: CategoryNode = {\n id: cat.ID,\n name: cat.Name,\n parent: cat.ParentID || undefined,\n children: [],\n count: this.categoryCounts.get(cat.Name) || 0,\n icon: this.getCategoryIcon(cat.Name)\n };\n nodeMap.set(cat.ID, node);\n });\n \n // Build hierarchy\n nodeMap.forEach(node => {\n if (node.parent && nodeMap.has(node.parent)) {\n const parent = nodeMap.get(node.parent)!;\n parent.children!.push(node);\n // Accumulate counts up the tree\n parent.count = (parent.count || 0) + (node.count || 0);\n } else {\n rootNodes.push(node);\n }\n });\n \n // Add \"All\" category at the top\n const allNode: CategoryNode = {\n id: 'all',\n name: 'All Actions',\n count: this.totalActions,\n icon: 'fa-th'\n };\n \n // Add \"Uncategorized\" if needed\n const uncategorizedCount = this.categoryCounts.get('Uncategorized') || 0;\n if (uncategorizedCount > 0) {\n const uncategorizedNode: CategoryNode = {\n id: 'uncategorized',\n name: 'Uncategorized',\n count: uncategorizedCount,\n icon: 'fa-question-circle'\n };\n rootNodes.push(uncategorizedNode);\n }\n \n this.categoryTree$.next([allNode, ...rootNodes]);\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',\n 'Workflow': 'fa-project-diagram',\n 'AI': 'fa-brain',\n 'Files': 'fa-file',\n 'Utilities': 'fa-tools',\n 'System': 'fa-cog',\n 'Analytics': 'fa-chart-line'\n };\n \n return iconMap[categoryName] || 'fa-folder';\n }\n \n getCategoryIconClass(category: CategoryNode): string {\n // Ensure we have a valid icon\n if (!category.icon) {\n return 'fa-solid fa-folder category-icon';\n }\n return `fa-solid ${category.icon} category-icon`;\n }\n \n private filterActions(actions: ActionWithDetails[], searchTerm: string, category: string) {\n let filtered = [...actions];\n \n // Category filter\n if (category && category !== 'all') {\n if (category === 'uncategorized') {\n filtered = filtered.filter(a => !a.Category);\n } else {\n const categoryName = this.getCategoryName(category);\n filtered = filtered.filter(a => a.Category === 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?.toLowerCase().includes(term) ||\n action.Category?.toLowerCase().includes(term)\n );\n }\n \n this.filteredActions$.next(filtered);\n }\n \n private getCategoryName(categoryId: string): string {\n const category = this.categories$.value.find(c => c.ID === categoryId);\n return category?.Name || '';\n }\n \n selectCategory(categoryId: string) {\n this.selectedCategory$.next(categoryId);\n }\n \n toggleCategoryExpanded(categoryId: string) {\n if (this.expandedCategories.has(categoryId)) {\n this.expandedCategories.delete(categoryId);\n } else {\n this.expandedCategories.add(categoryId);\n }\n }\n \n toggleViewMode() {\n const currentMode = this.viewMode$.value;\n this.viewMode$.next(currentMode === 'grid' ? 'list' : 'grid');\n }\n \n async toggleActionExpanded(action: ActionWithDetails) {\n action.expanded = !action.expanded;\n \n // Load details if expanding and not already loaded\n if (action.expanded && !action.parameters) {\n await this.loadActionDetails(action);\n }\n }\n \n async loadActionDetails(action: ActionWithDetails) {\n const rv = new RunView();\n \n try {\n const [paramsResult, resultCodesResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Action Params',\n ExtraFilter: `ActionID='${action.ID}'`,\n OrderBy: 'Sequence',\n ResultType: 'entity_object',\n MaxRows: 100\n },\n {\n EntityName: 'MJ: Action Result Codes',\n ExtraFilter: `ActionID='${action.ID}'`,\n OrderBy: 'ResultCode',\n ResultType: 'entity_object',\n MaxRows: 100\n }\n ]);\n \n if (paramsResult.Success) {\n action.parameters = paramsResult.Results as MJActionParamEntity[] || [];\n }\n \n if (resultCodesResult.Success) {\n action.resultCodes = resultCodesResult.Results as MJActionResultCodeEntity[] || [];\n }\n } catch (error) {\n console.error('Error loading action details:', error);\n }\n }\n \n toggleActionSelection(action: ActionWithDetails) {\n if (!this.config.selectionMode) return;\n \n const selected = this.selectedActions$.value;\n \n if (!this.config.multiSelect) {\n // Single select mode\n selected.clear();\n if (!action.selected) {\n selected.add(action.ID);\n action.selected = true;\n this.actionSelected.emit(action);\n }\n } else {\n // Multi-select mode\n if (action.selected) {\n selected.delete(action.ID);\n action.selected = false;\n } else {\n selected.add(action.ID);\n action.selected = true;\n }\n }\n \n this.selectedActions$.next(new Set(selected));\n \n if (this.config.multiSelect) {\n const selectedActions = this.actions$.value.filter(a => selected.has(a.ID));\n this.actionsSelected.emit(selectedActions);\n }\n }\n \n testAction(action: MJActionEntity, event: Event) {\n event.stopPropagation();\n \n if (this.config.enableQuickTest) {\n // TODO: Implement test harness integration\n console.log('Test action:', action.Name);\n }\n \n this.actionTestRequested.emit(action);\n }\n \n clearSearch() {\n this.searchControl.reset();\n if (this.searchInput) {\n this.searchInput.nativeElement.focus();\n }\n }\n \n getSelectedActions(): MJActionEntity[] {\n const selected = this.selectedActions$.value;\n return this.actions$.value.filter(a => selected.has(a.ID));\n }\n \n getActionIcon(action: MJActionEntity): string {\n const typeIcons: { [key: string]: string } = {\n 'Create': 'fa-plus-circle',\n 'Update': 'fa-edit',\n 'Delete': 'fa-trash',\n 'Query': 'fa-search',\n 'Process': 'fa-cogs',\n 'Email': 'fa-envelope',\n 'Report': 'fa-file-alt',\n 'Export': 'fa-file-export',\n 'Import': 'fa-file-import',\n 'API': 'fa-plug',\n 'Script': 'fa-code'\n };\n \n for (const [key, icon] of Object.entries(typeIcons)) {\n if (action.Name.toLowerCase().includes(key.toLowerCase()) || \n action.Type?.toLowerCase().includes(key.toLowerCase())) {\n return icon;\n }\n }\n \n return 'fa-bolt';\n }\n}","<div class=\"action-gallery\" [class.dark-theme]=\"config.theme === 'dark'\" [class.selection-mode]=\"config.selectionMode\">\n <!-- Gallery Header -->\n @if (config.showSearch) {\n <div class=\"gallery-header\">\n <div class=\"header-content\">\n <div class=\"search-section\">\n <kendo-textbox \n #searchInput\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 <div class=\"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\" [class.fa-th]=\"(viewMode$ | async) === 'grid'\" [class.fa-list]=\"(viewMode$ | async) === 'list'\"></i>\n </button>\n </div>\n <div class=\"stats\">\n <span class=\"stat-item\">\n <i class=\"fa-solid fa-bolt\"></i>\n {{ (filteredActions$ | async)?.length }} of {{ totalActions }} actions\n </span>\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- Main Content -->\n <div class=\"gallery-content\" [class.no-categories]=\"!config.showCategories\">\n <!-- Category Sidebar -->\n @if (config.showCategories) {\n <div class=\"category-sidebar\">\n <div class=\"category-tree\">\n @for (category of categoryTree$ | async; track category.id) {\n <div class=\"category-item\" \n [class.selected]=\"(selectedCategory$ | async) === category.id\"\n [class.has-children]=\"category.children && category.children.length > 0\"\n (click)=\"selectCategory(category.id)\">\n \n <div class=\"category-header\">\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 @if (category.children && category.children.length > 0) {\n <i class=\"fa-solid fa-chevron-right expand-icon\" \n [class.expanded]=\"expandedCategories.has(category.id)\"\n (click)=\"toggleCategoryExpanded(category.id); $event.stopPropagation()\"></i>\n }\n </div>\n \n <!-- Sub-categories -->\n @if (category.children && expandedCategories.has(category.id)) {\n <div class=\"sub-categories\">\n @for (subCategory of category.children; track subCategory.id) {\n <div class=\"category-item sub-category\" \n [class.selected]=\"(selectedCategory$ | async) === subCategory.id\"\n (click)=\"selectCategory(subCategory.id); $event.stopPropagation()\">\n <div class=\"category-header\">\n <i class=\"fa-solid {{ subCategory.icon }} category-icon\"></i>\n <span class=\"category-name\">{{ subCategory.name }}</span>\n <span class=\"category-count\">{{ subCategory.count }}</span>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Actions Display -->\n <div class=\"actions-container\">\n <!-- Loading State -->\n @if (isLoading$ | async) {\n <div class=\"loading-state\">\n <mj-loading text=\"Loading actions...\" size=\"large\"></mj-loading>\n </div>\n }\n\n <!-- Empty State -->\n @if (!(isLoading$ | async) && (filteredActions$ | async)?.length === 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' && (filteredActions$ | async) && (filteredActions$ | async)!.length > 0) {\n <div class=\"actions-grid\" \n [style.grid-template-columns]=\"'repeat(' + (config.gridColumns || 3) + ', 1fr)'\">\n \n @for (action of filteredActions$ | async; track action.ID) {\n <div class=\"action-card\" \n [class.expanded]=\"action.expanded\"\n [class.selected]=\"action.selected\"\n [class.animate]=\"animateCards\"\n [class.hover]=\"hoveredAction === action.ID\"\n (mouseenter)=\"hoveredAction = action.ID\"\n (mouseleave)=\"hoveredAction = null\"\n (click)=\"toggleActionSelection(action)\">\n \n <!-- Card Header -->\n <div class=\"card-header\" (click)=\"toggleActionExpanded(action); $event.stopPropagation()\">\n <div class=\"action-icon\">\n <i class=\"fa-solid {{ getActionIcon(action) }}\"></i>\n </div>\n <div class=\"action-info\">\n <h3 class=\"action-name\">{{ action.Name }}</h3>\n <div class=\"action-meta\">\n @if (action.Category) {\n <span class=\"category-badge\">\n <i class=\"fa-solid fa-folder\"></i>\n {{ action.Category }}\n </span>\n }\n </div>\n </div>\n <div class=\"card-actions\">\n @if (config.enableQuickTest) {\n <button kendoButton \n look=\"flat\" \n size=\"small\"\n icon=\"play\"\n (click)=\"testAction(action, $event)\"\n kendoTooltip\n title=\"Test this action\">\n </button>\n }\n <i class=\"fa-solid expand-indicator\"\n [class.fa-chevron-down]=\"!action.expanded\"\n [class.fa-chevron-up]=\"action.expanded\"></i>\n </div>\n </div>\n \n <!-- Card Body -->\n <div class=\"card-body\">\n <p class=\"action-description\">{{ action.Description || 'No description available' }}</p>\n \n <!-- Quick Stats -->\n <div class=\"action-stats\">\n @if (action.parameters?.length) {\n <span class=\"stat\">\n <i class=\"fa-solid fa-sliders\"></i>\n {{ action.parameters?.length || 0 }} params\n </span>\n }\n @if (action.resultCodes?.length) {\n <span class=\"stat\">\n <i class=\"fa-solid fa-code-branch\"></i>\n {{ action.resultCodes?.length || 0 }} results\n </span>\n }\n @if (action.Type) {\n <span class=\"stat\">\n <i class=\"fa-solid fa-tag\"></i>\n {{ action.Type }}\n </span>\n }\n </div>\n </div>\n \n <!-- Expanded Details -->\n @if (action.expanded) {\n <div class=\"card-details\">\n <!-- Parameters -->\n @if (action.parameters && action.parameters.length > 0) {\n <div class=\"detail-section\">\n <h4>\n <i class=\"fa-solid fa-sliders\"></i>\n Parameters\n </h4>\n <div class=\"parameters-list\">\n @for (param of action.parameters; track param.ID) {\n <div class=\"parameter-item\">\n <span class=\"param-name\">{{ param.Name }}</span>\n <span class=\"param-type\">{{ param.Type }}</span>\n @if (param.IsRequired) {\n <span class=\"param-required\">Required</span>\n }\n </div>\n }\n </div>\n </div>\n }\n \n <!-- Result Codes -->\n @if (action.resultCodes && action.resultCodes.length > 0) {\n <div class=\"detail-section\">\n <h4>\n <i class=\"fa-solid fa-code-branch\"></i>\n Result Codes\n </h4>\n <div class=\"result-codes-list\">\n @for (code of action.resultCodes; track code.ID) {\n <div class=\"result-code-item\">\n <span class=\"code-value\">{{ code.ResultCode }}</span>\n <span class=\"code-desc\">{{ code.Description }}</span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n \n <!-- Selection Indicator -->\n @if (config.selectionMode) {\n <div class=\"selection-indicator\">\n <i class=\"fa-solid\" [class.fa-check-circle]=\"action.selected\" [class.fa-circle]=\"!action.selected\"></i>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- List View -->\n @if (!(isLoading$ | async) && (viewMode$ | async) === 'list' && (filteredActions$ | async) && (filteredActions$ | async)!.length > 0) {\n <div class=\"actions-list\">\n \n <div class=\"list-header\">\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-params\">Parameters</span>\n <span class=\"col-actions\">Actions</span>\n </div>\n \n @for (action of filteredActions$ | async; track action.ID) {\n <div class=\"list-item\" \n [class.selected]=\"action.selected\"\n (click)=\"toggleActionSelection(action)\">\n \n <span class=\"col-name\">\n <i class=\"fa-solid {{ getActionIcon(action) }} action-icon\"></i>\n {{ action.Name }}\n </span>\n <span class=\"col-category\">{{ action.Category || '-' }}</span>\n <span class=\"col-type\">{{ action.Type || '-' }}</span>\n <span class=\"col-params\">{{ action.parameters?.length || 0 }}</span>\n <span class=\"col-actions\">\n @if (config.enableQuickTest) {\n <button kendoButton \n look=\"flat\" \n size=\"small\"\n icon=\"play\"\n (click)=\"testAction(action, $event)\"\n kendoTooltip\n title=\"Test this action\">\n </button>\n }\n </span>\n \n <!-- Selection Indicator -->\n @if (config.selectionMode) {\n <div class=\"selection-indicator\">\n <i class=\"fa-solid\" [class.fa-check-circle]=\"action.selected\" [class.fa-circle]=\"!action.selected\"></i>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n</div>\n\n"]}
|
|
1
|
+
{"version":3,"file":"action-gallery.component.js","sourceRoot":"","sources":["../../src/lib/action-gallery.component.ts","../../src/lib/action-gallery.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, ViewChild, ElementRef } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { Subject, BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\nimport { RunView } from '@memberjunction/core';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { MJActionEntity, MJActionCategoryEntity, MJActionParamEntity, MJActionResultCodeEntity } from '@memberjunction/core-entities';\n\nexport interface ActionGalleryConfig {\n selectionMode?: boolean;\n multiSelect?: boolean;\n showCategories?: boolean;\n showSearch?: boolean;\n defaultView?: 'grid' | 'list';\n gridColumns?: number;\n enableQuickTest?: boolean;\n theme?: 'light' | 'dark';\n}\n\nexport interface CategoryNode {\n id: string;\n name: string;\n parent?: string;\n children?: CategoryNode[];\n count?: number;\n icon?: string;\n}\n\nexport interface ActionWithDetails extends MJActionEntity {\n parameters?: MJActionParamEntity[];\n resultCodes?: MJActionResultCodeEntity[];\n expanded?: boolean;\n selected?: boolean;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-action-gallery',\n templateUrl: './action-gallery.component.html',\n styleUrls: ['./action-gallery.component.css']\n})\nexport class ActionGalleryComponent implements OnInit, OnDestroy {\n @Input() config: ActionGalleryConfig = {\n selectionMode: false,\n multiSelect: false,\n showCategories: true,\n showSearch: true,\n defaultView: 'grid',\n gridColumns: 3,\n enableQuickTest: true,\n theme: 'light'\n };\n \n @Input() preSelectedActions: string[] = [];\n @Output() actionSelected = new EventEmitter<MJActionEntity>();\n @Output() actionsSelected = new EventEmitter<MJActionEntity[]>();\n @Output() actionTestRequested = new EventEmitter<MJActionEntity>();\n \n @ViewChild('searchInput', { static: false }) searchInput: ElementRef<HTMLInputElement>;\n \n // State management\n private destroy$ = new Subject<void>();\n actions$ = new BehaviorSubject<ActionWithDetails[]>([]);\n categories$ = new BehaviorSubject<MJActionCategoryEntity[]>([]);\n filteredActions$ = new BehaviorSubject<ActionWithDetails[]>([]);\n categoryTree$ = new BehaviorSubject<CategoryNode[]>([]);\n selectedCategory$ = new BehaviorSubject<string>('all');\n viewMode$ = new BehaviorSubject<'grid' | 'list'>('grid');\n isLoading$ = new BehaviorSubject<boolean>(false);\n selectedActions$ = new BehaviorSubject<Set<string>>(new Set());\n \n // Form controls\n searchControl = new FormControl('');\n \n // UI state\n expandedCategories = new Set<string>();\n hoveredAction: string | null = null;\n animateCards = false;\n \n // Statistics\n totalActions = 0;\n categoryCounts = new Map<string, number>();\n \n constructor() {}\n \n ngOnInit() {\n // Set initial view mode\n this.viewMode$.next(this.config.defaultView || 'grid');\n \n // Load data\n this.loadData();\n \n // Set up filtering\n combineLatest([\n this.actions$,\n this.searchControl.valueChanges.pipe(\n debounceTime(300),\n distinctUntilChanged()\n ),\n this.selectedCategory$\n ]).pipe(\n takeUntil(this.destroy$)\n ).subscribe(([actions, searchTerm, category]) => {\n this.filterActions(actions, searchTerm || '', category);\n });\n \n // Initialize with pre-selected actions\n if (this.preSelectedActions.length > 0) {\n this.selectedActions$.next(new Set(this.preSelectedActions));\n }\n \n // Enable animations after initial load\n setTimeout(() => {\n this.animateCards = true;\n }, 100);\n }\n \n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n \n async loadData() {\n this.isLoading$.next(true);\n \n try {\n const rv = new RunView();\n \n // Load actions and categories in parallel\n const [actionsResult, categoriesResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Actions',\n ResultType: 'entity_object',\n OrderBy: 'Category, Name',\n MaxRows: 5000\n },\n {\n EntityName: 'MJ: Action Categories',\n ResultType: 'entity_object',\n OrderBy: 'Name',\n MaxRows: 1000\n }\n ]);\n \n if (actionsResult.Success && categoriesResult.Success) {\n const actions = actionsResult.Results as MJActionEntity[] || [];\n const categories = categoriesResult.Results as MJActionCategoryEntity[] || [];\n \n // Process actions\n const actionsWithDetails = actions.map(action => ({\n ...action,\n expanded: false,\n selected: this.preSelectedActions.some(id => UUIDsEqual(id, action.ID))\n } as ActionWithDetails));\n \n this.actions$.next(actionsWithDetails);\n this.totalActions = actions.length;\n \n // Process categories\n this.categories$.next(categories);\n this.buildCategoryTree(categories, actions);\n \n // Initial filter\n this.filterActions(actionsWithDetails, '', 'all');\n }\n } catch (error) {\n console.error('Error loading gallery data:', error);\n } finally {\n this.isLoading$.next(false);\n }\n }\n \n private buildCategoryTree(categories: MJActionCategoryEntity[], actions: MJActionEntity[]) {\n // Count actions per category\n this.categoryCounts.clear();\n actions.forEach(action => {\n const count = this.categoryCounts.get(action.Category || 'Uncategorized') || 0;\n this.categoryCounts.set(action.Category || 'Uncategorized', count + 1);\n });\n \n // Build tree structure\n const nodeMap = new Map<string, CategoryNode>();\n const rootNodes: CategoryNode[] = [];\n \n // Create nodes\n categories.forEach(cat => {\n const node: CategoryNode = {\n id: cat.ID,\n name: cat.Name,\n parent: cat.ParentID || undefined,\n children: [],\n count: this.categoryCounts.get(cat.Name) || 0,\n icon: this.getCategoryIcon(cat.Name)\n };\n nodeMap.set(cat.ID, node);\n });\n \n // Build hierarchy\n nodeMap.forEach(node => {\n if (node.parent && nodeMap.has(node.parent)) {\n const parent = nodeMap.get(node.parent)!;\n parent.children!.push(node);\n // Accumulate counts up the tree\n parent.count = (parent.count || 0) + (node.count || 0);\n } else {\n rootNodes.push(node);\n }\n });\n \n // Add \"All\" category at the top\n const allNode: CategoryNode = {\n id: 'all',\n name: 'All Actions',\n count: this.totalActions,\n icon: 'fa-th'\n };\n \n // Add \"Uncategorized\" if needed\n const uncategorizedCount = this.categoryCounts.get('Uncategorized') || 0;\n if (uncategorizedCount > 0) {\n const uncategorizedNode: CategoryNode = {\n id: 'uncategorized',\n name: 'Uncategorized',\n count: uncategorizedCount,\n icon: 'fa-question-circle'\n };\n rootNodes.push(uncategorizedNode);\n }\n \n this.categoryTree$.next([allNode, ...rootNodes]);\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',\n 'Workflow': 'fa-project-diagram',\n 'AI': 'fa-brain',\n 'Files': 'fa-file',\n 'Utilities': 'fa-tools',\n 'System': 'fa-cog',\n 'Analytics': 'fa-chart-line'\n };\n \n return iconMap[categoryName] || 'fa-folder';\n }\n \n getCategoryIconClass(category: CategoryNode): string {\n // Ensure we have a valid icon\n if (!category.icon) {\n return 'fa-solid fa-folder category-icon';\n }\n return `fa-solid ${category.icon} category-icon`;\n }\n \n private filterActions(actions: ActionWithDetails[], searchTerm: string, category: string) {\n let filtered = [...actions];\n \n // Category filter\n if (category && category !== 'all') {\n if (category === 'uncategorized') {\n filtered = filtered.filter(a => !a.Category);\n } else {\n const categoryName = this.getCategoryName(category);\n filtered = filtered.filter(a => a.Category === 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?.toLowerCase().includes(term) ||\n action.Category?.toLowerCase().includes(term)\n );\n }\n \n this.filteredActions$.next(filtered);\n }\n \n private getCategoryName(categoryId: string): string {\n const category = this.categories$.value.find(c => UUIDsEqual(c.ID, categoryId));\n return category?.Name || '';\n }\n \n selectCategory(categoryId: string) {\n this.selectedCategory$.next(categoryId);\n }\n \n toggleCategoryExpanded(categoryId: string) {\n if (this.expandedCategories.has(categoryId)) {\n this.expandedCategories.delete(categoryId);\n } else {\n this.expandedCategories.add(categoryId);\n }\n }\n \n toggleViewMode() {\n const currentMode = this.viewMode$.value;\n this.viewMode$.next(currentMode === 'grid' ? 'list' : 'grid');\n }\n \n async toggleActionExpanded(action: ActionWithDetails) {\n action.expanded = !action.expanded;\n \n // Load details if expanding and not already loaded\n if (action.expanded && !action.parameters) {\n await this.loadActionDetails(action);\n }\n }\n \n async loadActionDetails(action: ActionWithDetails) {\n const rv = new RunView();\n \n try {\n const [paramsResult, resultCodesResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Action Params',\n ExtraFilter: `ActionID='${action.ID}'`,\n OrderBy: 'Sequence',\n ResultType: 'entity_object',\n MaxRows: 100\n },\n {\n EntityName: 'MJ: Action Result Codes',\n ExtraFilter: `ActionID='${action.ID}'`,\n OrderBy: 'ResultCode',\n ResultType: 'entity_object',\n MaxRows: 100\n }\n ]);\n \n if (paramsResult.Success) {\n action.parameters = paramsResult.Results as MJActionParamEntity[] || [];\n }\n \n if (resultCodesResult.Success) {\n action.resultCodes = resultCodesResult.Results as MJActionResultCodeEntity[] || [];\n }\n } catch (error) {\n console.error('Error loading action details:', error);\n }\n }\n \n toggleActionSelection(action: ActionWithDetails) {\n if (!this.config.selectionMode) return;\n \n const selected = this.selectedActions$.value;\n \n if (!this.config.multiSelect) {\n // Single select mode\n selected.clear();\n if (!action.selected) {\n selected.add(action.ID);\n action.selected = true;\n this.actionSelected.emit(action);\n }\n } else {\n // Multi-select mode\n if (action.selected) {\n selected.delete(action.ID);\n action.selected = false;\n } else {\n selected.add(action.ID);\n action.selected = true;\n }\n }\n \n this.selectedActions$.next(new Set(selected));\n \n if (this.config.multiSelect) {\n const selectedActions = this.actions$.value.filter(a => selected.has(a.ID));\n this.actionsSelected.emit(selectedActions);\n }\n }\n \n testAction(action: MJActionEntity, event: Event) {\n event.stopPropagation();\n \n if (this.config.enableQuickTest) {\n // TODO: Implement test harness integration\n console.log('Test action:', action.Name);\n }\n \n this.actionTestRequested.emit(action);\n }\n \n clearSearch() {\n this.searchControl.reset();\n if (this.searchInput) {\n this.searchInput.nativeElement.focus();\n }\n }\n \n getSelectedActions(): MJActionEntity[] {\n const selected = this.selectedActions$.value;\n return this.actions$.value.filter(a => selected.has(a.ID));\n }\n \n getActionIcon(action: MJActionEntity): string {\n const typeIcons: { [key: string]: string } = {\n 'Create': 'fa-plus-circle',\n 'Update': 'fa-edit',\n 'Delete': 'fa-trash',\n 'Query': 'fa-search',\n 'Process': 'fa-cogs',\n 'Email': 'fa-envelope',\n 'Report': 'fa-file-alt',\n 'Export': 'fa-file-export',\n 'Import': 'fa-file-import',\n 'API': 'fa-plug',\n 'Script': 'fa-code'\n };\n \n for (const [key, icon] of Object.entries(typeIcons)) {\n if (action.Name.toLowerCase().includes(key.toLowerCase()) || \n action.Type?.toLowerCase().includes(key.toLowerCase())) {\n return icon;\n }\n }\n \n return 'fa-bolt';\n }\n}","<div class=\"action-gallery\" [class.dark-theme]=\"config.theme === 'dark'\" [class.selection-mode]=\"config.selectionMode\">\n <!-- Gallery Header -->\n @if (config.showSearch) {\n <div class=\"gallery-header\">\n <div class=\"header-content\">\n <div class=\"search-section\">\n <kendo-textbox \n #searchInput\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 <div class=\"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\" [class.fa-th]=\"(viewMode$ | async) === 'grid'\" [class.fa-list]=\"(viewMode$ | async) === 'list'\"></i>\n </button>\n </div>\n <div class=\"stats\">\n <span class=\"stat-item\">\n <i class=\"fa-solid fa-bolt\"></i>\n {{ (filteredActions$ | async)?.length }} of {{ totalActions }} actions\n </span>\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- Main Content -->\n <div class=\"gallery-content\" [class.no-categories]=\"!config.showCategories\">\n <!-- Category Sidebar -->\n @if (config.showCategories) {\n <div class=\"category-sidebar\">\n <div class=\"category-tree\">\n @for (category of categoryTree$ | async; track category.id) {\n <div class=\"category-item\" \n [class.selected]=\"(selectedCategory$ | async) === category.id\"\n [class.has-children]=\"category.children && category.children.length > 0\"\n (click)=\"selectCategory(category.id)\">\n \n <div class=\"category-header\">\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 @if (category.children && category.children.length > 0) {\n <i class=\"fa-solid fa-chevron-right expand-icon\" \n [class.expanded]=\"expandedCategories.has(category.id)\"\n (click)=\"toggleCategoryExpanded(category.id); $event.stopPropagation()\"></i>\n }\n </div>\n \n <!-- Sub-categories -->\n @if (category.children && expandedCategories.has(category.id)) {\n <div class=\"sub-categories\">\n @for (subCategory of category.children; track subCategory.id) {\n <div class=\"category-item sub-category\" \n [class.selected]=\"(selectedCategory$ | async) === subCategory.id\"\n (click)=\"selectCategory(subCategory.id); $event.stopPropagation()\">\n <div class=\"category-header\">\n <i class=\"fa-solid {{ subCategory.icon }} category-icon\"></i>\n <span class=\"category-name\">{{ subCategory.name }}</span>\n <span class=\"category-count\">{{ subCategory.count }}</span>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Actions Display -->\n <div class=\"actions-container\">\n <!-- Loading State -->\n @if (isLoading$ | async) {\n <div class=\"loading-state\">\n <mj-loading text=\"Loading actions...\" size=\"large\"></mj-loading>\n </div>\n }\n\n <!-- Empty State -->\n @if (!(isLoading$ | async) && (filteredActions$ | async)?.length === 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' && (filteredActions$ | async) && (filteredActions$ | async)!.length > 0) {\n <div class=\"actions-grid\" \n [style.grid-template-columns]=\"'repeat(' + (config.gridColumns || 3) + ', 1fr)'\">\n \n @for (action of filteredActions$ | async; track action.ID) {\n <div class=\"action-card\" \n [class.expanded]=\"action.expanded\"\n [class.selected]=\"action.selected\"\n [class.animate]=\"animateCards\"\n [class.hover]=\"hoveredAction === action.ID\"\n (mouseenter)=\"hoveredAction = action.ID\"\n (mouseleave)=\"hoveredAction = null\"\n (click)=\"toggleActionSelection(action)\">\n \n <!-- Card Header -->\n <div class=\"card-header\" (click)=\"toggleActionExpanded(action); $event.stopPropagation()\">\n <div class=\"action-icon\">\n <i class=\"fa-solid {{ getActionIcon(action) }}\"></i>\n </div>\n <div class=\"action-info\">\n <h3 class=\"action-name\">{{ action.Name }}</h3>\n <div class=\"action-meta\">\n @if (action.Category) {\n <span class=\"category-badge\">\n <i class=\"fa-solid fa-folder\"></i>\n {{ action.Category }}\n </span>\n }\n </div>\n </div>\n <div class=\"card-actions\">\n @if (config.enableQuickTest) {\n <button kendoButton \n look=\"flat\" \n size=\"small\"\n icon=\"play\"\n (click)=\"testAction(action, $event)\"\n kendoTooltip\n title=\"Test this action\">\n </button>\n }\n <i class=\"fa-solid expand-indicator\"\n [class.fa-chevron-down]=\"!action.expanded\"\n [class.fa-chevron-up]=\"action.expanded\"></i>\n </div>\n </div>\n \n <!-- Card Body -->\n <div class=\"card-body\">\n <p class=\"action-description\">{{ action.Description || 'No description available' }}</p>\n \n <!-- Quick Stats -->\n <div class=\"action-stats\">\n @if (action.parameters?.length) {\n <span class=\"stat\">\n <i class=\"fa-solid fa-sliders\"></i>\n {{ action.parameters?.length || 0 }} params\n </span>\n }\n @if (action.resultCodes?.length) {\n <span class=\"stat\">\n <i class=\"fa-solid fa-code-branch\"></i>\n {{ action.resultCodes?.length || 0 }} results\n </span>\n }\n @if (action.Type) {\n <span class=\"stat\">\n <i class=\"fa-solid fa-tag\"></i>\n {{ action.Type }}\n </span>\n }\n </div>\n </div>\n \n <!-- Expanded Details -->\n @if (action.expanded) {\n <div class=\"card-details\">\n <!-- Parameters -->\n @if (action.parameters && action.parameters.length > 0) {\n <div class=\"detail-section\">\n <h4>\n <i class=\"fa-solid fa-sliders\"></i>\n Parameters\n </h4>\n <div class=\"parameters-list\">\n @for (param of action.parameters; track param.ID) {\n <div class=\"parameter-item\">\n <span class=\"param-name\">{{ param.Name }}</span>\n <span class=\"param-type\">{{ param.Type }}</span>\n @if (param.IsRequired) {\n <span class=\"param-required\">Required</span>\n }\n </div>\n }\n </div>\n </div>\n }\n \n <!-- Result Codes -->\n @if (action.resultCodes && action.resultCodes.length > 0) {\n <div class=\"detail-section\">\n <h4>\n <i class=\"fa-solid fa-code-branch\"></i>\n Result Codes\n </h4>\n <div class=\"result-codes-list\">\n @for (code of action.resultCodes; track code.ID) {\n <div class=\"result-code-item\">\n <span class=\"code-value\">{{ code.ResultCode }}</span>\n <span class=\"code-desc\">{{ code.Description }}</span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n \n <!-- Selection Indicator -->\n @if (config.selectionMode) {\n <div class=\"selection-indicator\">\n <i class=\"fa-solid\" [class.fa-check-circle]=\"action.selected\" [class.fa-circle]=\"!action.selected\"></i>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- List View -->\n @if (!(isLoading$ | async) && (viewMode$ | async) === 'list' && (filteredActions$ | async) && (filteredActions$ | async)!.length > 0) {\n <div class=\"actions-list\">\n \n <div class=\"list-header\">\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-params\">Parameters</span>\n <span class=\"col-actions\">Actions</span>\n </div>\n \n @for (action of filteredActions$ | async; track action.ID) {\n <div class=\"list-item\" \n [class.selected]=\"action.selected\"\n (click)=\"toggleActionSelection(action)\">\n \n <span class=\"col-name\">\n <i class=\"fa-solid {{ getActionIcon(action) }} action-icon\"></i>\n {{ action.Name }}\n </span>\n <span class=\"col-category\">{{ action.Category || '-' }}</span>\n <span class=\"col-type\">{{ action.Type || '-' }}</span>\n <span class=\"col-params\">{{ action.parameters?.length || 0 }}</span>\n <span class=\"col-actions\">\n @if (config.enableQuickTest) {\n <button kendoButton \n look=\"flat\" \n size=\"small\"\n icon=\"play\"\n (click)=\"testAction(action, $event)\"\n kendoTooltip\n title=\"Test this action\">\n </button>\n }\n </span>\n \n <!-- Selection Indicator -->\n @if (config.selectionMode) {\n <div class=\"selection-indicator\">\n <i class=\"fa-solid\" [class.fa-check-circle]=\"action.selected\" [class.fa-circle]=\"!action.selected\"></i>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n</div>\n\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/ng-action-gallery",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.6.0",
|
|
4
4
|
"description": "MemberJunction Action Gallery - A beautiful, filterable gallery component for browsing and selecting actions",
|
|
5
5
|
"main": "./dist/public-api.js",
|
|
6
6
|
"typings": "./dist/public-api.d.ts",
|
|
@@ -33,11 +33,11 @@
|
|
|
33
33
|
"@angular/animations": "21.1.3"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@memberjunction/core": "5.
|
|
37
|
-
"@memberjunction/core-entities": "5.
|
|
38
|
-
"@memberjunction/ng-ai-test-harness": "5.
|
|
39
|
-
"@memberjunction/ng-container-directives": "5.
|
|
40
|
-
"@memberjunction/ng-shared-generic": "5.
|
|
36
|
+
"@memberjunction/core": "5.6.0",
|
|
37
|
+
"@memberjunction/core-entities": "5.6.0",
|
|
38
|
+
"@memberjunction/ng-ai-test-harness": "5.6.0",
|
|
39
|
+
"@memberjunction/ng-container-directives": "5.6.0",
|
|
40
|
+
"@memberjunction/ng-shared-generic": "5.6.0",
|
|
41
41
|
"@progress/kendo-angular-buttons": "22.0.1",
|
|
42
42
|
"@progress/kendo-angular-dialog": "22.0.1",
|
|
43
43
|
"@progress/kendo-angular-dropdowns": "22.0.1",
|