@memberjunction/ng-dashboards 5.4.1 → 5.5.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/AI/components/agents/agent-configuration.component.js +4 -4
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.js +5 -4
- package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.js +3 -3
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +8 -7
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +3 -3
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +4 -4
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.js +3 -2
- package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +2 -2
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.js +4 -3
- package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +3 -3
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/categories-list-view.component.js +3 -2
- package/dist/Actions/components/categories-list-view.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +2 -2
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +2 -2
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-action-panel.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/new-action-panel.component.js +3 -2
- package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.js +3 -2
- package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +2 -2
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +6 -0
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js +19 -6
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +4 -0
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +13 -4
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts +2 -0
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +13 -9
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +11 -11
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts +2 -0
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +13 -9
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +11 -11
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js +4 -3
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.js +4 -3
- package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +6 -6
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.js +4 -1
- package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
- package/dist/DataExplorer/services/explorer-state.service.d.ts.map +1 -1
- package/dist/DataExplorer/services/explorer-state.service.js +9 -8
- package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +2 -2
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/home-application.js +2 -2
- package/dist/Home/home-application.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +3 -3
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.d.ts +1 -0
- package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +17 -14
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +2 -2
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts +1 -0
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +15 -12
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.js +3 -2
- package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
- package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-test-tool-dialog.component.js +8 -7
- package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +22 -22
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts +2 -0
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +14 -10
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.js +2 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +1 -0
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +22 -18
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/components/testing-review.component.d.ts +1 -0
- package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review.component.js +14 -10
- package/dist/Testing/components/testing-review.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +6 -6
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.js +2 -2
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.js +3 -3
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/package.json +38 -38
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"labels-resource.component.js","sourceRoot":"","sources":["../../../src/VersionHistory/components/labels-resource.component.ts","../../../src/VersionHistory/components/labels-resource.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent, NavigationService } from '@memberjunction/ng-shared';\nimport { RunView, Metadata } from '@memberjunction/core';\nimport { ResourceData, MJVersionLabelEntityType, MJVersionLabelItemEntityType, UserInfoEngine } from '@memberjunction/core-entities';\nimport { EntityLinkClickEvent } from '@memberjunction/ng-versions';\ninterface ScopeStat {\n Scope: string;\n Count: number;\n Icon: string;\n Color: string;\n}\n\ninterface StatusStat {\n Status: string;\n Count: number;\n Color: string;\n}\n\ninterface VersionLabelPreferences {\n ViewMode: 'card' | 'list';\n ActiveScopeFilter: string;\n ActiveStatusFilter: string;\n DefaultDetailTab: string;\n SortField: string;\n SortDirection: 'asc' | 'desc';\n}\n\ntype SortField = 'Name' | 'Scope' | 'Status' | 'Items' | 'Date';\n\n@RegisterClass(BaseResourceComponent, 'VersionHistoryLabelsResource')\n@Component({\n standalone: false,\n selector: 'mj-version-history-labels-resource',\n templateUrl: './labels-resource.component.html',\n styleUrls: ['./labels-resource.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class VersionHistoryLabelsResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n private static readonly PREFS_KEY = 'VersionHistory.Labels.UserPreferences';\n\n public IsLoading = true;\n\n // View mode\n public ViewMode: 'card' | 'list' = 'card';\n\n // Detail panel\n public SelectedLabel: MJVersionLabelEntityType | null = null;\n public ShowDetailPanel = false;\n\n // Stats\n public TotalLabels = 0;\n public ActiveLabels = 0;\n public ArchivedLabels = 0;\n public RestoredLabels = 0;\n\n // Grouped data\n public ScopeStats: ScopeStat[] = [];\n public StatusStats: StatusStat[] = [];\n public Labels: MJVersionLabelEntityType[] = [];\n public FilteredLabels: MJVersionLabelEntityType[] = [];\n public ItemCountMap = new Map<string, number>();\n\n // Filters\n public ScopeFilter = '';\n public StatusFilter = '';\n public SearchText = '';\n\n // Sorting\n public SortField: SortField = 'Date';\n public SortDirection: 'asc' | 'desc' = 'desc';\n\n // User preferences\n private preferencesLoaded = false;\n\n // Create Label Wizard\n public ShowCreateWizard = false;\n\n private metadata = new Metadata();\n private destroy$ = new Subject<void>();\n\n constructor(private cdr: ChangeDetectorRef, private navigationService: NavigationService) {\n super();\n }\n\n ngOnInit(): void {\n this.loadUserPreferences();\n this.LoadData();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Labels';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-tags';\n }\n\n // =======================================================================\n // Data loading\n // =======================================================================\n\n public async LoadData(): Promise<void> {\n try {\n this.IsLoading = true;\n this.cdr.markForCheck();\n\n const rv = new RunView();\n\n const [labelsResult, itemsResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Version Labels',\n OrderBy: '__mj_CreatedAt DESC',\n MaxRows: 500,\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: Version Label Items',\n Fields: ['VersionLabelID'],\n ResultType: 'simple'\n }\n ]);\n\n if (labelsResult.Success) {\n this.Labels = labelsResult.Results as MJVersionLabelEntityType[];\n const items = itemsResult.Success\n ? itemsResult.Results as MJVersionLabelItemEntityType[]\n : [];\n this.ItemCountMap = this.buildItemCountMap(items);\n this.computeStats();\n this.applyFilters();\n }\n } catch (error) {\n console.error('Error loading version labels:', error);\n } finally {\n this.IsLoading = false;\n this.NotifyLoadComplete();\n this.cdr.markForCheck();\n }\n }\n\n private buildItemCountMap(items: MJVersionLabelItemEntityType[]): Map<string, number> {\n const counts = new Map<string, number>();\n for (const item of items) {\n const labelId = item.VersionLabelID ?? '';\n counts.set(labelId, (counts.get(labelId) ?? 0) + 1);\n }\n return counts;\n }\n\n public GetItemCount(labelId: string | undefined): number {\n return this.ItemCountMap.get(labelId ?? '') ?? 0;\n }\n\n public ResolveEntityName(entityId: string | undefined): string {\n if (!entityId) return '';\n const entity = this.metadata.Entities.find(e => e.ID === entityId);\n return entity ? entity.Name : '';\n }\n\n // =======================================================================\n // Stats\n // =======================================================================\n\n private computeStats(): void {\n // Only count root-level labels (exclude children) for stats\n const rootLabels = this.Labels.filter(l => !l.ParentID);\n this.TotalLabels = rootLabels.length;\n this.ActiveLabels = rootLabels.filter(l => l.Status === 'Active').length;\n this.ArchivedLabels = rootLabels.filter(l => l.Status === 'Archived').length;\n this.RestoredLabels = rootLabels.filter(l => l.Status === 'Restored').length;\n\n this.ScopeStats = this.computeScopeStats();\n this.StatusStats = this.computeStatusStats();\n }\n\n private computeScopeStats(): ScopeStat[] {\n const scopeMap = new Map<string, number>();\n for (const label of this.Labels) {\n const scope = label.Scope ?? 'Record';\n scopeMap.set(scope, (scopeMap.get(scope) ?? 0) + 1);\n }\n\n const scopeConfig: Record<string, { Icon: string; Color: string }> = {\n 'System': { Icon: 'fa-solid fa-globe', Color: '#6366f1' },\n 'Entity': { Icon: 'fa-solid fa-table', Color: '#3b82f6' },\n 'Record': { Icon: 'fa-solid fa-file', Color: '#10b981' }\n };\n\n return Array.from(scopeMap.entries()).map(([scope, count]) => ({\n Scope: scope,\n Count: count,\n Icon: scopeConfig[scope]?.Icon ?? 'fa-solid fa-tag',\n Color: scopeConfig[scope]?.Color ?? '#64748b'\n }));\n }\n\n private computeStatusStats(): StatusStat[] {\n const statusMap = new Map<string, number>();\n for (const label of this.Labels) {\n const status = label.Status ?? 'Active';\n statusMap.set(status, (statusMap.get(status) ?? 0) + 1);\n }\n\n const statusColors: Record<string, string> = {\n 'Active': '#10b981',\n 'Archived': '#6b7280',\n 'Restored': '#f59e0b'\n };\n\n return Array.from(statusMap.entries()).map(([status, count]) => ({\n Status: status,\n Count: count,\n Color: statusColors[status] ?? '#64748b'\n }));\n }\n\n // =======================================================================\n // Filters\n // =======================================================================\n\n public applyFilters(): void {\n // First: exclude child labels (those with ParentID) from top-level list\n let result = this.Labels.filter(l => !l.ParentID);\n\n // Apply scope filter\n if (this.ScopeFilter) {\n result = result.filter(l => l.Scope === this.ScopeFilter);\n }\n\n // Apply status filter\n if (this.StatusFilter) {\n result = result.filter(l => l.Status === this.StatusFilter);\n }\n\n // Apply search\n if (this.SearchText) {\n const search = this.SearchText.toLowerCase();\n result = result.filter(l => {\n const name = (l.Name ?? '').toLowerCase();\n const desc = (l.Description ?? '').toLowerCase();\n const entityName = (l.Entity ?? this.ResolveEntityName(l.EntityID)).toLowerCase();\n return name.includes(search) || desc.includes(search) || entityName.includes(search);\n });\n }\n\n // Apply sorting\n result = this.sortLabels(result);\n\n this.FilteredLabels = result;\n this.cdr.markForCheck();\n }\n\n private sortLabels(labels: MJVersionLabelEntityType[]): MJVersionLabelEntityType[] {\n const dir = this.SortDirection === 'asc' ? 1 : -1;\n return [...labels].sort((a, b) => {\n switch (this.SortField) {\n case 'Name':\n return dir * (a.Name ?? '').localeCompare(b.Name ?? '');\n case 'Scope':\n return dir * (a.Scope ?? '').localeCompare(b.Scope ?? '');\n case 'Status':\n return dir * (a.Status ?? '').localeCompare(b.Status ?? '');\n case 'Items': {\n const aCount = this.GetItemCount(a.ID);\n const bCount = this.GetItemCount(b.ID);\n return dir * (aCount - bCount);\n }\n case 'Date':\n default: {\n const aDate = (a as Record<string, unknown>)['__mj_CreatedAt'] ?? '';\n const bDate = (b as Record<string, unknown>)['__mj_CreatedAt'] ?? '';\n return dir * String(aDate).localeCompare(String(bDate));\n }\n }\n });\n }\n\n public OnSortChange(field: SortField): void {\n if (this.SortField === field) {\n this.SortDirection = this.SortDirection === 'asc' ? 'desc' : 'asc';\n } else {\n this.SortField = field;\n this.SortDirection = field === 'Date' ? 'desc' : 'asc';\n }\n this.applyFilters();\n this.persistPreferences();\n }\n\n public GetSortIcon(field: SortField): string {\n if (this.SortField !== field) return 'fa-solid fa-sort';\n return this.SortDirection === 'asc' ? 'fa-solid fa-sort-up' : 'fa-solid fa-sort-down';\n }\n\n public OnScopeFilterChange(scope: string): void {\n this.ScopeFilter = this.ScopeFilter === scope ? '' : scope;\n this.applyFilters();\n this.persistPreferences();\n }\n\n public OnStatusFilterChange(status: string): void {\n this.StatusFilter = this.StatusFilter === status ? '' : status;\n this.applyFilters();\n this.persistPreferences();\n }\n\n public OnSearchChange(text: string): void {\n this.SearchText = text;\n this.applyFilters();\n }\n\n public Refresh(): void {\n this.LoadData();\n }\n\n // =======================================================================\n // View mode and detail panel\n // =======================================================================\n\n public ToggleViewMode(): void {\n this.ViewMode = this.ViewMode === 'card' ? 'list' : 'card';\n this.persistPreferences();\n this.cdr.markForCheck();\n }\n\n public SetViewMode(mode: 'card' | 'list'): void {\n if (this.ViewMode !== mode) {\n this.ViewMode = mode;\n this.persistPreferences();\n this.cdr.markForCheck();\n }\n }\n\n public OnLabelClick(label: MJVersionLabelEntityType): void {\n this.SelectedLabel = label;\n this.ShowDetailPanel = true;\n this.cdr.markForCheck();\n }\n\n public OnDetailPanelClose(): void {\n this.ShowDetailPanel = false;\n this.SelectedLabel = null;\n this.cdr.markForCheck();\n }\n\n public OnLabelUpdated(): void {\n this.LoadData();\n }\n\n public OnEntityLinkClick(event: EntityLinkClickEvent): void {\n this.navigationService.OpenEntityRecord(event.EntityName, event.CompositeKey);\n }\n\n // =======================================================================\n // User preferences\n // =======================================================================\n\n private loadUserPreferences(): void {\n try {\n const json = UserInfoEngine.Instance.GetSetting(VersionHistoryLabelsResourceComponent.PREFS_KEY);\n if (json) {\n const prefs = JSON.parse(json) as VersionLabelPreferences;\n this.ViewMode = prefs.ViewMode ?? 'card';\n this.ScopeFilter = prefs.ActiveScopeFilter ?? '';\n this.StatusFilter = prefs.ActiveStatusFilter ?? '';\n if (prefs.SortField) this.SortField = prefs.SortField as SortField;\n if (prefs.SortDirection) this.SortDirection = prefs.SortDirection;\n }\n } catch (e) {\n console.warn('[VersionLabels] Failed to load user preferences:', e);\n } finally {\n this.preferencesLoaded = true;\n }\n }\n\n private persistPreferences(): void {\n if (!this.preferencesLoaded) return;\n\n const prefs: VersionLabelPreferences = {\n ViewMode: this.ViewMode,\n ActiveScopeFilter: this.ScopeFilter,\n ActiveStatusFilter: this.StatusFilter,\n DefaultDetailTab: 'overview',\n SortField: this.SortField,\n SortDirection: this.SortDirection,\n };\n\n UserInfoEngine.Instance.SetSettingDebounced(\n VersionHistoryLabelsResourceComponent.PREFS_KEY,\n JSON.stringify(prefs)\n );\n }\n\n // =======================================================================\n // Create Label Wizard\n // =======================================================================\n\n public OpenCreateDialog(): void {\n this.ShowCreateWizard = true;\n this.cdr.markForCheck();\n }\n\n public OnLabelCreated(_event: { LabelCount: number; ItemCount: number }): void {\n this.ShowCreateWizard = false;\n this.cdr.markForCheck();\n this.LoadData();\n }\n\n public OnCreateWizardCancel(): void {\n this.ShowCreateWizard = false;\n this.cdr.markForCheck();\n }\n\n // =======================================================================\n // Display helpers\n // =======================================================================\n\n public GetScopeIcon(scope: string | undefined): string {\n const icons: Record<string, string> = {\n 'System': 'fa-solid fa-globe',\n 'Entity': 'fa-solid fa-table',\n 'Record': 'fa-solid fa-file'\n };\n return icons[scope ?? ''] ?? 'fa-solid fa-tag';\n }\n\n public GetStatusClass(status: string | undefined): string {\n const classes: Record<string, string> = {\n 'Active': 'status-active',\n 'Archived': 'status-archived',\n 'Restored': 'status-restored'\n };\n return classes[status ?? ''] ?? '';\n }\n\n public FormatDate(date: Date | string | undefined): string {\n if (!date) return '';\n const d = date instanceof Date ? date : new Date(date);\n const now = new Date();\n const diffMs = now.getTime() - d.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMs / 3600000);\n const diffDays = Math.floor(diffMs / 86400000);\n\n if (diffMins < 1) return 'Just now';\n if (diffMins < 60) return `${diffMins}m ago`;\n if (diffHours < 24) return `${diffHours}h ago`;\n if (diffDays < 7) return `${diffDays}d ago`;\n\n return d.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric'\n });\n }\n\n public FormatNumber(num: number): string {\n if (num >= 1000) return (num / 1000).toFixed(1) + 'k';\n return num.toString();\n }\n\n public FormatDuration(ms: number | undefined): string {\n if (!ms) return '';\n if (ms < 1000) return `${ms}ms`;\n return `${(ms / 1000).toFixed(1)}s`;\n }\n\n public IsGroupParent(label: MJVersionLabelEntityType): boolean {\n return !label.RecordID && !label.ParentID && !!label.EntityID;\n }\n\n public GetChildLabels(parentId: string | undefined): MJVersionLabelEntityType[] {\n if (!parentId) return [];\n return this.Labels.filter(l => l.ParentID === parentId);\n }\n}\n","<div class=\"labels-container\">\n @if (IsLoading) {\n <mj-loading text=\"Loading version labels...\"></mj-loading>\n }\n\n @if (!IsLoading) {\n <!-- Header -->\n <div class=\"page-header\">\n <div class=\"header-left\">\n <h2 class=\"page-title\">Version Labels</h2>\n <p class=\"page-subtitle\">Manage versioning snapshots across your system</p>\n </div>\n <div class=\"header-actions\">\n <div class=\"view-toggle\">\n <button class=\"toggle-btn\" [class.active]=\"ViewMode === 'card'\" (click)=\"SetViewMode('card')\" title=\"Card view\">\n <i class=\"fa-solid fa-grip\"></i>\n </button>\n <button class=\"toggle-btn\" [class.active]=\"ViewMode === 'list'\" (click)=\"SetViewMode('list')\" title=\"List view\">\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n <button class=\"btn-primary\" (click)=\"OpenCreateDialog()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>Create Label</span>\n </button>\n <button class=\"btn-icon\" (click)=\"Refresh()\" title=\"Refresh\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n <!-- KPI Cards -->\n <div class=\"kpi-row\">\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: rgba(99, 102, 241, 0.1); color: #6366f1;\">\n <i class=\"fa-solid fa-tags\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{FormatNumber(TotalLabels)}}</div>\n <div class=\"kpi-label\">Total Labels</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: rgba(16, 185, 129, 0.1); color: #10b981;\">\n <i class=\"fa-solid fa-circle-check\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{FormatNumber(ActiveLabels)}}</div>\n <div class=\"kpi-label\">Active</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: rgba(107, 114, 128, 0.1); color: #6b7280;\">\n <i class=\"fa-solid fa-box-archive\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{FormatNumber(ArchivedLabels)}}</div>\n <div class=\"kpi-label\">Archived</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: rgba(245, 158, 11, 0.1); color: #f59e0b;\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{FormatNumber(RestoredLabels)}}</div>\n <div class=\"kpi-label\">Restored</div>\n </div>\n </div>\n </div>\n <!-- Scope breakdown -->\n <div class=\"scope-chips\">\n @for (stat of ScopeStats; track stat) {\n <button class=\"scope-chip\"\n [class.active]=\"ScopeFilter === stat.Scope\"\n (click)=\"OnScopeFilterChange(stat.Scope)\">\n <i [class]=\"stat.Icon\"></i>\n <span>{{stat.Scope}}</span>\n <span class=\"chip-count\">{{stat.Count}}</span>\n </button>\n }\n @for (stat of StatusStats; track stat) {\n <button class=\"scope-chip\"\n [class.active]=\"StatusFilter === stat.Status\"\n [ngClass]=\"GetStatusClass(stat.Status)\"\n (click)=\"OnStatusFilterChange(stat.Status)\">\n <span>{{stat.Status}}</span>\n <span class=\"chip-count\">{{stat.Count}}</span>\n </button>\n }\n </div>\n <!-- Search -->\n <div class=\"search-bar\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input type=\"text\"\n class=\"search-input\"\n placeholder=\"Search labels by name, description, or entity...\"\n [ngModel]=\"SearchText\"\n (ngModelChange)=\"OnSearchChange($event)\" />\n @if (SearchText) {\n <button class=\"btn-clear\" (click)=\"OnSearchChange('')\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n <!-- Labels Card View -->\n @if (FilteredLabels.length > 0 && ViewMode === 'card') {\n <div class=\"labels-list\">\n @for (label of FilteredLabels; track label) {\n <div class=\"label-card clickable\"\n [class.group-parent]=\"IsGroupParent(label)\"\n (click)=\"OnLabelClick(label)\">\n <div class=\"label-header\">\n <div class=\"label-title-row\">\n <i [class]=\"GetScopeIcon(label.Scope)\" class=\"label-scope-icon\"></i>\n <h3 class=\"label-name\">{{label.Name}}</h3>\n @if (IsGroupParent(label)) {\n <span class=\"group-badge\">\n <i class=\"fa-solid fa-layer-group\"></i>\n {{GetChildLabels(label.ID).length}} records\n </span>\n }\n <span class=\"label-status\" [ngClass]=\"GetStatusClass(label.Status)\">\n {{label.Status}}\n </span>\n </div>\n <div class=\"label-meta\">\n <span class=\"meta-item\" title=\"Scope\">\n <i class=\"fa-solid fa-layer-group\"></i> {{label.Scope}}\n </span>\n @if (label.Entity || label.EntityID) {\n <span class=\"meta-item\" title=\"Entity\">\n <i class=\"fa-solid fa-table\"></i> {{label.Entity ?? ResolveEntityName(label.EntityID)}}\n </span>\n }\n @if (label.RecordID) {\n <span class=\"meta-item\" title=\"Record ID\">\n <i class=\"fa-solid fa-fingerprint\"></i> {{label.RecordID | slice:0:12}}...\n </span>\n }\n @if (label.ItemCount) {\n <span class=\"meta-item\" title=\"Items captured\">\n <i class=\"fa-solid fa-camera\"></i> {{label.ItemCount}} items\n </span>\n }\n @if (!label.ItemCount) {\n <span class=\"meta-item\" title=\"Items captured\">\n <i class=\"fa-solid fa-camera\"></i> {{GetItemCount(label.ID)}} items\n </span>\n }\n @if (label.CreationDurationMS) {\n <span class=\"meta-item\" title=\"Creation time\">\n <i class=\"fa-solid fa-stopwatch\"></i> {{FormatDuration(label.CreationDurationMS)}}\n </span>\n }\n @if (label.CreatedByUser) {\n <span class=\"meta-item\" title=\"Created by\">\n <i class=\"fa-solid fa-user\"></i> {{label.CreatedByUser}}\n </span>\n }\n <span class=\"meta-item\" title=\"Created\">\n <i class=\"fa-regular fa-clock\"></i> {{FormatDate(label.__mj_CreatedAt)}}\n </span>\n </div>\n </div>\n @if (label.Description) {\n <p class=\"label-description\">{{label.Description}}</p>\n }\n <!-- Child labels for group parents -->\n @if (IsGroupParent(label) && GetChildLabels(label.ID).length > 0) {\n <div class=\"child-labels\">\n @for (child of GetChildLabels(label.ID); track child) {\n <div class=\"child-label\">\n <i class=\"fa-solid fa-tag child-icon\"></i>\n <span class=\"child-name\">{{child.Name}}</span>\n @if (child.RecordID) {\n <span class=\"child-record\">{{child.RecordID | slice:0:12}}...</span>\n }\n @if (child.ItemCount) {\n <span class=\"child-items\">{{child.ItemCount}} items</span>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n <!-- Labels List View -->\n @if (FilteredLabels.length > 0 && ViewMode === 'list') {\n <div class=\"labels-table\">\n <div class=\"list-header-row\">\n <span class=\"list-col-icon\"></span>\n <span class=\"list-col-name sortable-header\" (click)=\"OnSortChange('Name')\">\n Name <i [class]=\"GetSortIcon('Name')\" class=\"sort-icon\"></i>\n </span>\n <span class=\"list-col-entity\">Entity</span>\n <span class=\"list-col-status sortable-header\" (click)=\"OnSortChange('Status')\">\n Status <i [class]=\"GetSortIcon('Status')\" class=\"sort-icon\"></i>\n </span>\n <span class=\"list-col-items sortable-header\" (click)=\"OnSortChange('Items')\">\n Items <i [class]=\"GetSortIcon('Items')\" class=\"sort-icon\"></i>\n </span>\n <span class=\"list-col-date sortable-header\" (click)=\"OnSortChange('Date')\">\n Created <i [class]=\"GetSortIcon('Date')\" class=\"sort-icon\"></i>\n </span>\n <span class=\"list-col-arrow\"></span>\n </div>\n @for (label of FilteredLabels; track label) {\n <div class=\"list-row clickable\"\n (click)=\"OnLabelClick(label)\">\n <span class=\"list-col-icon\">\n <i [class]=\"GetScopeIcon(label.Scope)\" class=\"list-scope-icon\"></i>\n </span>\n <span class=\"list-col-name\">\n <span class=\"list-label-name\">{{label.Name}}</span>\n @if (IsGroupParent(label)) {\n <span class=\"list-group-badge\">\n <i class=\"fa-solid fa-layer-group\"></i> {{GetChildLabels(label.ID).length}}\n </span>\n }\n </span>\n <span class=\"list-col-entity\">{{label.Entity ?? ResolveEntityName(label.EntityID)}}</span>\n <span class=\"list-col-status\">\n <span class=\"label-status small\" [ngClass]=\"GetStatusClass(label.Status)\">{{label.Status}}</span>\n </span>\n <span class=\"list-col-items\">{{label.ItemCount || GetItemCount(label.ID)}}</span>\n <span class=\"list-col-date\">{{FormatDate(label.__mj_CreatedAt)}}</span>\n <span class=\"list-col-arrow\">\n <i class=\"fa-solid fa-chevron-right list-arrow\"></i>\n </span>\n </div>\n }\n </div>\n }\n <!-- Empty state -->\n @if (FilteredLabels.length === 0 && !IsLoading) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-tags empty-icon\"></i>\n <h3>No labels found</h3>\n @if (SearchText || ScopeFilter || StatusFilter) {\n <p>\n Try adjusting your filters or search criteria.\n </p>\n }\n @if (!SearchText && !ScopeFilter && !StatusFilter) {\n <p>\n No version labels have been created yet.\n </p>\n }\n @if (!SearchText && !ScopeFilter && !StatusFilter) {\n <button class=\"btn-primary empty-cta\"\n (click)=\"OpenCreateDialog()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>Create Your First Label</span>\n </button>\n }\n </div>\n }\n }\n\n <!-- Create Label Wizard -->\n @if (ShowCreateWizard) {\n <div class=\"create-wizard-overlay\" (click)=\"OnCreateWizardCancel()\">\n <div class=\"create-wizard-container\" (click)=\"$event.stopPropagation()\">\n <div class=\"create-wizard-header\">\n <h3 class=\"create-wizard-title\">\n <i class=\"fa-solid fa-tag\"></i>\n Create Version Label\n </h3>\n <button class=\"create-wizard-close\" (click)=\"OnCreateWizardCancel()\" title=\"Close\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div class=\"create-wizard-body\">\n <mj-label-create\n (Created)=\"OnLabelCreated($event)\"\n (Cancel)=\"OnCreateWizardCancel()\">\n </mj-label-create>\n </div>\n </div>\n </div>\n }\n\n <!-- Detail panel -->\n @if (ShowDetailPanel && SelectedLabel) {\n <mj-label-detail-panel\n [Label]=\"SelectedLabel\"\n [AllLabels]=\"Labels\"\n [ItemCountMap]=\"ItemCountMap\"\n (Close)=\"OnDetailPanelClose()\"\n (LabelUpdated)=\"OnLabelUpdated()\"\n (EntityLinkClick)=\"OnEntityLinkClick($event)\">\n </mj-label-detail-panel>\n }\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"labels-resource.component.js","sourceRoot":"","sources":["../../../src/VersionHistory/components/labels-resource.component.ts","../../../src/VersionHistory/components/labels-resource.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseResourceComponent, NavigationService } from '@memberjunction/ng-shared';\nimport { RunView, Metadata } from '@memberjunction/core';\nimport { ResourceData, MJVersionLabelEntityType, MJVersionLabelItemEntityType, UserInfoEngine } from '@memberjunction/core-entities';\nimport { EntityLinkClickEvent } from '@memberjunction/ng-versions';\ninterface ScopeStat {\n Scope: string;\n Count: number;\n Icon: string;\n Color: string;\n}\n\ninterface StatusStat {\n Status: string;\n Count: number;\n Color: string;\n}\n\ninterface VersionLabelPreferences {\n ViewMode: 'card' | 'list';\n ActiveScopeFilter: string;\n ActiveStatusFilter: string;\n DefaultDetailTab: string;\n SortField: string;\n SortDirection: 'asc' | 'desc';\n}\n\ntype SortField = 'Name' | 'Scope' | 'Status' | 'Items' | 'Date';\n\n@RegisterClass(BaseResourceComponent, 'VersionHistoryLabelsResource')\n@Component({\n standalone: false,\n selector: 'mj-version-history-labels-resource',\n templateUrl: './labels-resource.component.html',\n styleUrls: ['./labels-resource.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class VersionHistoryLabelsResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n private static readonly PREFS_KEY = 'VersionHistory.Labels.UserPreferences';\n\n public IsLoading = true;\n\n // View mode\n public ViewMode: 'card' | 'list' = 'card';\n\n // Detail panel\n public SelectedLabel: MJVersionLabelEntityType | null = null;\n public ShowDetailPanel = false;\n\n // Stats\n public TotalLabels = 0;\n public ActiveLabels = 0;\n public ArchivedLabels = 0;\n public RestoredLabels = 0;\n\n // Grouped data\n public ScopeStats: ScopeStat[] = [];\n public StatusStats: StatusStat[] = [];\n public Labels: MJVersionLabelEntityType[] = [];\n public FilteredLabels: MJVersionLabelEntityType[] = [];\n public ItemCountMap = new Map<string, number>();\n\n // Filters\n public ScopeFilter = '';\n public StatusFilter = '';\n public SearchText = '';\n\n // Sorting\n public SortField: SortField = 'Date';\n public SortDirection: 'asc' | 'desc' = 'desc';\n\n // User preferences\n private preferencesLoaded = false;\n\n // Create Label Wizard\n public ShowCreateWizard = false;\n\n private metadata = new Metadata();\n private destroy$ = new Subject<void>();\n\n constructor(private cdr: ChangeDetectorRef, private navigationService: NavigationService) {\n super();\n }\n\n ngOnInit(): void {\n this.loadUserPreferences();\n this.LoadData();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Labels';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-tags';\n }\n\n // =======================================================================\n // Data loading\n // =======================================================================\n\n public async LoadData(): Promise<void> {\n try {\n this.IsLoading = true;\n this.cdr.markForCheck();\n\n const rv = new RunView();\n\n const [labelsResult, itemsResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Version Labels',\n OrderBy: '__mj_CreatedAt DESC',\n MaxRows: 500,\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: Version Label Items',\n Fields: ['VersionLabelID'],\n ResultType: 'simple'\n }\n ]);\n\n if (labelsResult.Success) {\n this.Labels = labelsResult.Results as MJVersionLabelEntityType[];\n const items = itemsResult.Success\n ? itemsResult.Results as MJVersionLabelItemEntityType[]\n : [];\n this.ItemCountMap = this.buildItemCountMap(items);\n this.computeStats();\n this.applyFilters();\n }\n } catch (error) {\n console.error('Error loading version labels:', error);\n } finally {\n this.IsLoading = false;\n this.NotifyLoadComplete();\n this.cdr.markForCheck();\n }\n }\n\n private buildItemCountMap(items: MJVersionLabelItemEntityType[]): Map<string, number> {\n const counts = new Map<string, number>();\n for (const item of items) {\n const labelId = item.VersionLabelID ?? '';\n counts.set(labelId, (counts.get(labelId) ?? 0) + 1);\n }\n return counts;\n }\n\n public GetItemCount(labelId: string | undefined): number {\n return this.ItemCountMap.get(labelId ?? '') ?? 0;\n }\n\n public ResolveEntityName(entityId: string | undefined): string {\n if (!entityId) return '';\n const entity = this.metadata.Entities.find(e => UUIDsEqual(e.ID, entityId));\n return entity ? entity.Name : '';\n }\n\n // =======================================================================\n // Stats\n // =======================================================================\n\n private computeStats(): void {\n // Only count root-level labels (exclude children) for stats\n const rootLabels = this.Labels.filter(l => !l.ParentID);\n this.TotalLabels = rootLabels.length;\n this.ActiveLabels = rootLabels.filter(l => l.Status === 'Active').length;\n this.ArchivedLabels = rootLabels.filter(l => l.Status === 'Archived').length;\n this.RestoredLabels = rootLabels.filter(l => l.Status === 'Restored').length;\n\n this.ScopeStats = this.computeScopeStats();\n this.StatusStats = this.computeStatusStats();\n }\n\n private computeScopeStats(): ScopeStat[] {\n const scopeMap = new Map<string, number>();\n for (const label of this.Labels) {\n const scope = label.Scope ?? 'Record';\n scopeMap.set(scope, (scopeMap.get(scope) ?? 0) + 1);\n }\n\n const scopeConfig: Record<string, { Icon: string; Color: string }> = {\n 'System': { Icon: 'fa-solid fa-globe', Color: '#6366f1' },\n 'Entity': { Icon: 'fa-solid fa-table', Color: '#3b82f6' },\n 'Record': { Icon: 'fa-solid fa-file', Color: '#10b981' }\n };\n\n return Array.from(scopeMap.entries()).map(([scope, count]) => ({\n Scope: scope,\n Count: count,\n Icon: scopeConfig[scope]?.Icon ?? 'fa-solid fa-tag',\n Color: scopeConfig[scope]?.Color ?? '#64748b'\n }));\n }\n\n private computeStatusStats(): StatusStat[] {\n const statusMap = new Map<string, number>();\n for (const label of this.Labels) {\n const status = label.Status ?? 'Active';\n statusMap.set(status, (statusMap.get(status) ?? 0) + 1);\n }\n\n const statusColors: Record<string, string> = {\n 'Active': '#10b981',\n 'Archived': '#6b7280',\n 'Restored': '#f59e0b'\n };\n\n return Array.from(statusMap.entries()).map(([status, count]) => ({\n Status: status,\n Count: count,\n Color: statusColors[status] ?? '#64748b'\n }));\n }\n\n // =======================================================================\n // Filters\n // =======================================================================\n\n public applyFilters(): void {\n // First: exclude child labels (those with ParentID) from top-level list\n let result = this.Labels.filter(l => !l.ParentID);\n\n // Apply scope filter\n if (this.ScopeFilter) {\n result = result.filter(l => l.Scope === this.ScopeFilter);\n }\n\n // Apply status filter\n if (this.StatusFilter) {\n result = result.filter(l => l.Status === this.StatusFilter);\n }\n\n // Apply search\n if (this.SearchText) {\n const search = this.SearchText.toLowerCase();\n result = result.filter(l => {\n const name = (l.Name ?? '').toLowerCase();\n const desc = (l.Description ?? '').toLowerCase();\n const entityName = (l.Entity ?? this.ResolveEntityName(l.EntityID)).toLowerCase();\n return name.includes(search) || desc.includes(search) || entityName.includes(search);\n });\n }\n\n // Apply sorting\n result = this.sortLabels(result);\n\n this.FilteredLabels = result;\n this.cdr.markForCheck();\n }\n\n private sortLabels(labels: MJVersionLabelEntityType[]): MJVersionLabelEntityType[] {\n const dir = this.SortDirection === 'asc' ? 1 : -1;\n return [...labels].sort((a, b) => {\n switch (this.SortField) {\n case 'Name':\n return dir * (a.Name ?? '').localeCompare(b.Name ?? '');\n case 'Scope':\n return dir * (a.Scope ?? '').localeCompare(b.Scope ?? '');\n case 'Status':\n return dir * (a.Status ?? '').localeCompare(b.Status ?? '');\n case 'Items': {\n const aCount = this.GetItemCount(a.ID);\n const bCount = this.GetItemCount(b.ID);\n return dir * (aCount - bCount);\n }\n case 'Date':\n default: {\n const aDate = (a as Record<string, unknown>)['__mj_CreatedAt'] ?? '';\n const bDate = (b as Record<string, unknown>)['__mj_CreatedAt'] ?? '';\n return dir * String(aDate).localeCompare(String(bDate));\n }\n }\n });\n }\n\n public OnSortChange(field: SortField): void {\n if (this.SortField === field) {\n this.SortDirection = this.SortDirection === 'asc' ? 'desc' : 'asc';\n } else {\n this.SortField = field;\n this.SortDirection = field === 'Date' ? 'desc' : 'asc';\n }\n this.applyFilters();\n this.persistPreferences();\n }\n\n public GetSortIcon(field: SortField): string {\n if (this.SortField !== field) return 'fa-solid fa-sort';\n return this.SortDirection === 'asc' ? 'fa-solid fa-sort-up' : 'fa-solid fa-sort-down';\n }\n\n public OnScopeFilterChange(scope: string): void {\n this.ScopeFilter = this.ScopeFilter === scope ? '' : scope;\n this.applyFilters();\n this.persistPreferences();\n }\n\n public OnStatusFilterChange(status: string): void {\n this.StatusFilter = this.StatusFilter === status ? '' : status;\n this.applyFilters();\n this.persistPreferences();\n }\n\n public OnSearchChange(text: string): void {\n this.SearchText = text;\n this.applyFilters();\n }\n\n public Refresh(): void {\n this.LoadData();\n }\n\n // =======================================================================\n // View mode and detail panel\n // =======================================================================\n\n public ToggleViewMode(): void {\n this.ViewMode = this.ViewMode === 'card' ? 'list' : 'card';\n this.persistPreferences();\n this.cdr.markForCheck();\n }\n\n public SetViewMode(mode: 'card' | 'list'): void {\n if (this.ViewMode !== mode) {\n this.ViewMode = mode;\n this.persistPreferences();\n this.cdr.markForCheck();\n }\n }\n\n public OnLabelClick(label: MJVersionLabelEntityType): void {\n this.SelectedLabel = label;\n this.ShowDetailPanel = true;\n this.cdr.markForCheck();\n }\n\n public OnDetailPanelClose(): void {\n this.ShowDetailPanel = false;\n this.SelectedLabel = null;\n this.cdr.markForCheck();\n }\n\n public OnLabelUpdated(): void {\n this.LoadData();\n }\n\n public OnEntityLinkClick(event: EntityLinkClickEvent): void {\n this.navigationService.OpenEntityRecord(event.EntityName, event.CompositeKey);\n }\n\n // =======================================================================\n // User preferences\n // =======================================================================\n\n private loadUserPreferences(): void {\n try {\n const json = UserInfoEngine.Instance.GetSetting(VersionHistoryLabelsResourceComponent.PREFS_KEY);\n if (json) {\n const prefs = JSON.parse(json) as VersionLabelPreferences;\n this.ViewMode = prefs.ViewMode ?? 'card';\n this.ScopeFilter = prefs.ActiveScopeFilter ?? '';\n this.StatusFilter = prefs.ActiveStatusFilter ?? '';\n if (prefs.SortField) this.SortField = prefs.SortField as SortField;\n if (prefs.SortDirection) this.SortDirection = prefs.SortDirection;\n }\n } catch (e) {\n console.warn('[VersionLabels] Failed to load user preferences:', e);\n } finally {\n this.preferencesLoaded = true;\n }\n }\n\n private persistPreferences(): void {\n if (!this.preferencesLoaded) return;\n\n const prefs: VersionLabelPreferences = {\n ViewMode: this.ViewMode,\n ActiveScopeFilter: this.ScopeFilter,\n ActiveStatusFilter: this.StatusFilter,\n DefaultDetailTab: 'overview',\n SortField: this.SortField,\n SortDirection: this.SortDirection,\n };\n\n UserInfoEngine.Instance.SetSettingDebounced(\n VersionHistoryLabelsResourceComponent.PREFS_KEY,\n JSON.stringify(prefs)\n );\n }\n\n // =======================================================================\n // Create Label Wizard\n // =======================================================================\n\n public OpenCreateDialog(): void {\n this.ShowCreateWizard = true;\n this.cdr.markForCheck();\n }\n\n public OnLabelCreated(_event: { LabelCount: number; ItemCount: number }): void {\n this.ShowCreateWizard = false;\n this.cdr.markForCheck();\n this.LoadData();\n }\n\n public OnCreateWizardCancel(): void {\n this.ShowCreateWizard = false;\n this.cdr.markForCheck();\n }\n\n // =======================================================================\n // Display helpers\n // =======================================================================\n\n public GetScopeIcon(scope: string | undefined): string {\n const icons: Record<string, string> = {\n 'System': 'fa-solid fa-globe',\n 'Entity': 'fa-solid fa-table',\n 'Record': 'fa-solid fa-file'\n };\n return icons[scope ?? ''] ?? 'fa-solid fa-tag';\n }\n\n public GetStatusClass(status: string | undefined): string {\n const classes: Record<string, string> = {\n 'Active': 'status-active',\n 'Archived': 'status-archived',\n 'Restored': 'status-restored'\n };\n return classes[status ?? ''] ?? '';\n }\n\n public FormatDate(date: Date | string | undefined): string {\n if (!date) return '';\n const d = date instanceof Date ? date : new Date(date);\n const now = new Date();\n const diffMs = now.getTime() - d.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMs / 3600000);\n const diffDays = Math.floor(diffMs / 86400000);\n\n if (diffMins < 1) return 'Just now';\n if (diffMins < 60) return `${diffMins}m ago`;\n if (diffHours < 24) return `${diffHours}h ago`;\n if (diffDays < 7) return `${diffDays}d ago`;\n\n return d.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric'\n });\n }\n\n public FormatNumber(num: number): string {\n if (num >= 1000) return (num / 1000).toFixed(1) + 'k';\n return num.toString();\n }\n\n public FormatDuration(ms: number | undefined): string {\n if (!ms) return '';\n if (ms < 1000) return `${ms}ms`;\n return `${(ms / 1000).toFixed(1)}s`;\n }\n\n public IsGroupParent(label: MJVersionLabelEntityType): boolean {\n return !label.RecordID && !label.ParentID && !!label.EntityID;\n }\n\n public GetChildLabels(parentId: string | undefined): MJVersionLabelEntityType[] {\n if (!parentId) return [];\n return this.Labels.filter(l => UUIDsEqual(l.ParentID, parentId));\n }\n}\n","<div class=\"labels-container\">\n @if (IsLoading) {\n <mj-loading text=\"Loading version labels...\"></mj-loading>\n }\n\n @if (!IsLoading) {\n <!-- Header -->\n <div class=\"page-header\">\n <div class=\"header-left\">\n <h2 class=\"page-title\">Version Labels</h2>\n <p class=\"page-subtitle\">Manage versioning snapshots across your system</p>\n </div>\n <div class=\"header-actions\">\n <div class=\"view-toggle\">\n <button class=\"toggle-btn\" [class.active]=\"ViewMode === 'card'\" (click)=\"SetViewMode('card')\" title=\"Card view\">\n <i class=\"fa-solid fa-grip\"></i>\n </button>\n <button class=\"toggle-btn\" [class.active]=\"ViewMode === 'list'\" (click)=\"SetViewMode('list')\" title=\"List view\">\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n <button class=\"btn-primary\" (click)=\"OpenCreateDialog()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>Create Label</span>\n </button>\n <button class=\"btn-icon\" (click)=\"Refresh()\" title=\"Refresh\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n <!-- KPI Cards -->\n <div class=\"kpi-row\">\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: rgba(99, 102, 241, 0.1); color: #6366f1;\">\n <i class=\"fa-solid fa-tags\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{FormatNumber(TotalLabels)}}</div>\n <div class=\"kpi-label\">Total Labels</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: rgba(16, 185, 129, 0.1); color: #10b981;\">\n <i class=\"fa-solid fa-circle-check\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{FormatNumber(ActiveLabels)}}</div>\n <div class=\"kpi-label\">Active</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: rgba(107, 114, 128, 0.1); color: #6b7280;\">\n <i class=\"fa-solid fa-box-archive\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{FormatNumber(ArchivedLabels)}}</div>\n <div class=\"kpi-label\">Archived</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: rgba(245, 158, 11, 0.1); color: #f59e0b;\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{FormatNumber(RestoredLabels)}}</div>\n <div class=\"kpi-label\">Restored</div>\n </div>\n </div>\n </div>\n <!-- Scope breakdown -->\n <div class=\"scope-chips\">\n @for (stat of ScopeStats; track stat) {\n <button class=\"scope-chip\"\n [class.active]=\"ScopeFilter === stat.Scope\"\n (click)=\"OnScopeFilterChange(stat.Scope)\">\n <i [class]=\"stat.Icon\"></i>\n <span>{{stat.Scope}}</span>\n <span class=\"chip-count\">{{stat.Count}}</span>\n </button>\n }\n @for (stat of StatusStats; track stat) {\n <button class=\"scope-chip\"\n [class.active]=\"StatusFilter === stat.Status\"\n [ngClass]=\"GetStatusClass(stat.Status)\"\n (click)=\"OnStatusFilterChange(stat.Status)\">\n <span>{{stat.Status}}</span>\n <span class=\"chip-count\">{{stat.Count}}</span>\n </button>\n }\n </div>\n <!-- Search -->\n <div class=\"search-bar\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input type=\"text\"\n class=\"search-input\"\n placeholder=\"Search labels by name, description, or entity...\"\n [ngModel]=\"SearchText\"\n (ngModelChange)=\"OnSearchChange($event)\" />\n @if (SearchText) {\n <button class=\"btn-clear\" (click)=\"OnSearchChange('')\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n <!-- Labels Card View -->\n @if (FilteredLabels.length > 0 && ViewMode === 'card') {\n <div class=\"labels-list\">\n @for (label of FilteredLabels; track label) {\n <div class=\"label-card clickable\"\n [class.group-parent]=\"IsGroupParent(label)\"\n (click)=\"OnLabelClick(label)\">\n <div class=\"label-header\">\n <div class=\"label-title-row\">\n <i [class]=\"GetScopeIcon(label.Scope)\" class=\"label-scope-icon\"></i>\n <h3 class=\"label-name\">{{label.Name}}</h3>\n @if (IsGroupParent(label)) {\n <span class=\"group-badge\">\n <i class=\"fa-solid fa-layer-group\"></i>\n {{GetChildLabels(label.ID).length}} records\n </span>\n }\n <span class=\"label-status\" [ngClass]=\"GetStatusClass(label.Status)\">\n {{label.Status}}\n </span>\n </div>\n <div class=\"label-meta\">\n <span class=\"meta-item\" title=\"Scope\">\n <i class=\"fa-solid fa-layer-group\"></i> {{label.Scope}}\n </span>\n @if (label.Entity || label.EntityID) {\n <span class=\"meta-item\" title=\"Entity\">\n <i class=\"fa-solid fa-table\"></i> {{label.Entity ?? ResolveEntityName(label.EntityID)}}\n </span>\n }\n @if (label.RecordID) {\n <span class=\"meta-item\" title=\"Record ID\">\n <i class=\"fa-solid fa-fingerprint\"></i> {{label.RecordID | slice:0:12}}...\n </span>\n }\n @if (label.ItemCount) {\n <span class=\"meta-item\" title=\"Items captured\">\n <i class=\"fa-solid fa-camera\"></i> {{label.ItemCount}} items\n </span>\n }\n @if (!label.ItemCount) {\n <span class=\"meta-item\" title=\"Items captured\">\n <i class=\"fa-solid fa-camera\"></i> {{GetItemCount(label.ID)}} items\n </span>\n }\n @if (label.CreationDurationMS) {\n <span class=\"meta-item\" title=\"Creation time\">\n <i class=\"fa-solid fa-stopwatch\"></i> {{FormatDuration(label.CreationDurationMS)}}\n </span>\n }\n @if (label.CreatedByUser) {\n <span class=\"meta-item\" title=\"Created by\">\n <i class=\"fa-solid fa-user\"></i> {{label.CreatedByUser}}\n </span>\n }\n <span class=\"meta-item\" title=\"Created\">\n <i class=\"fa-regular fa-clock\"></i> {{FormatDate(label.__mj_CreatedAt)}}\n </span>\n </div>\n </div>\n @if (label.Description) {\n <p class=\"label-description\">{{label.Description}}</p>\n }\n <!-- Child labels for group parents -->\n @if (IsGroupParent(label) && GetChildLabels(label.ID).length > 0) {\n <div class=\"child-labels\">\n @for (child of GetChildLabels(label.ID); track child) {\n <div class=\"child-label\">\n <i class=\"fa-solid fa-tag child-icon\"></i>\n <span class=\"child-name\">{{child.Name}}</span>\n @if (child.RecordID) {\n <span class=\"child-record\">{{child.RecordID | slice:0:12}}...</span>\n }\n @if (child.ItemCount) {\n <span class=\"child-items\">{{child.ItemCount}} items</span>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n <!-- Labels List View -->\n @if (FilteredLabels.length > 0 && ViewMode === 'list') {\n <div class=\"labels-table\">\n <div class=\"list-header-row\">\n <span class=\"list-col-icon\"></span>\n <span class=\"list-col-name sortable-header\" (click)=\"OnSortChange('Name')\">\n Name <i [class]=\"GetSortIcon('Name')\" class=\"sort-icon\"></i>\n </span>\n <span class=\"list-col-entity\">Entity</span>\n <span class=\"list-col-status sortable-header\" (click)=\"OnSortChange('Status')\">\n Status <i [class]=\"GetSortIcon('Status')\" class=\"sort-icon\"></i>\n </span>\n <span class=\"list-col-items sortable-header\" (click)=\"OnSortChange('Items')\">\n Items <i [class]=\"GetSortIcon('Items')\" class=\"sort-icon\"></i>\n </span>\n <span class=\"list-col-date sortable-header\" (click)=\"OnSortChange('Date')\">\n Created <i [class]=\"GetSortIcon('Date')\" class=\"sort-icon\"></i>\n </span>\n <span class=\"list-col-arrow\"></span>\n </div>\n @for (label of FilteredLabels; track label) {\n <div class=\"list-row clickable\"\n (click)=\"OnLabelClick(label)\">\n <span class=\"list-col-icon\">\n <i [class]=\"GetScopeIcon(label.Scope)\" class=\"list-scope-icon\"></i>\n </span>\n <span class=\"list-col-name\">\n <span class=\"list-label-name\">{{label.Name}}</span>\n @if (IsGroupParent(label)) {\n <span class=\"list-group-badge\">\n <i class=\"fa-solid fa-layer-group\"></i> {{GetChildLabels(label.ID).length}}\n </span>\n }\n </span>\n <span class=\"list-col-entity\">{{label.Entity ?? ResolveEntityName(label.EntityID)}}</span>\n <span class=\"list-col-status\">\n <span class=\"label-status small\" [ngClass]=\"GetStatusClass(label.Status)\">{{label.Status}}</span>\n </span>\n <span class=\"list-col-items\">{{label.ItemCount || GetItemCount(label.ID)}}</span>\n <span class=\"list-col-date\">{{FormatDate(label.__mj_CreatedAt)}}</span>\n <span class=\"list-col-arrow\">\n <i class=\"fa-solid fa-chevron-right list-arrow\"></i>\n </span>\n </div>\n }\n </div>\n }\n <!-- Empty state -->\n @if (FilteredLabels.length === 0 && !IsLoading) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-tags empty-icon\"></i>\n <h3>No labels found</h3>\n @if (SearchText || ScopeFilter || StatusFilter) {\n <p>\n Try adjusting your filters or search criteria.\n </p>\n }\n @if (!SearchText && !ScopeFilter && !StatusFilter) {\n <p>\n No version labels have been created yet.\n </p>\n }\n @if (!SearchText && !ScopeFilter && !StatusFilter) {\n <button class=\"btn-primary empty-cta\"\n (click)=\"OpenCreateDialog()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>Create Your First Label</span>\n </button>\n }\n </div>\n }\n }\n\n <!-- Create Label Wizard -->\n @if (ShowCreateWizard) {\n <div class=\"create-wizard-overlay\" (click)=\"OnCreateWizardCancel()\">\n <div class=\"create-wizard-container\" (click)=\"$event.stopPropagation()\">\n <div class=\"create-wizard-header\">\n <h3 class=\"create-wizard-title\">\n <i class=\"fa-solid fa-tag\"></i>\n Create Version Label\n </h3>\n <button class=\"create-wizard-close\" (click)=\"OnCreateWizardCancel()\" title=\"Close\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div class=\"create-wizard-body\">\n <mj-label-create\n (Created)=\"OnLabelCreated($event)\"\n (Cancel)=\"OnCreateWizardCancel()\">\n </mj-label-create>\n </div>\n </div>\n </div>\n }\n\n <!-- Detail panel -->\n @if (ShowDetailPanel && SelectedLabel) {\n <mj-label-detail-panel\n [Label]=\"SelectedLabel\"\n [AllLabels]=\"Labels\"\n [ItemCountMap]=\"ItemCountMap\"\n (Close)=\"OnDetailPanelClose()\"\n (LabelUpdated)=\"OnLabelUpdated()\"\n (EntityLinkClick)=\"OnEntityLinkClick($event)\">\n </mj-label-detail-panel>\n }\n</div>\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/ng-dashboards",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.5.0",
|
|
4
4
|
"description": "MemberJunction Dashboards",
|
|
5
5
|
"main": "./dist/public-api.js",
|
|
6
6
|
"typings": "./dist/public-api.d.ts",
|
|
@@ -33,43 +33,43 @@
|
|
|
33
33
|
"@codemirror/merge": "^6.11.2",
|
|
34
34
|
"@codemirror/state": "^6.5.4",
|
|
35
35
|
"@codemirror/view": "^6.39.12",
|
|
36
|
-
"@memberjunction/actions-base": "5.
|
|
37
|
-
"@memberjunction/ai-engine-base": "5.
|
|
38
|
-
"@memberjunction/api-keys-base": "5.
|
|
39
|
-
"@memberjunction/ai-core-plus": "5.
|
|
40
|
-
"@memberjunction/core": "5.
|
|
41
|
-
"@memberjunction/export-engine": "5.
|
|
42
|
-
"@memberjunction/ng-entity-relationship-diagram": "5.
|
|
43
|
-
"@memberjunction/core-entities": "5.
|
|
44
|
-
"@memberjunction/global": "5.
|
|
45
|
-
"@memberjunction/graphql-dataprovider": "5.
|
|
46
|
-
"@memberjunction/interactive-component-types": "5.
|
|
47
|
-
"@memberjunction/ng-action-gallery": "5.
|
|
48
|
-
"@memberjunction/ng-actions": "5.
|
|
49
|
-
"@memberjunction/ng-agents": "5.
|
|
50
|
-
"@memberjunction/ng-ai-test-harness": "5.
|
|
51
|
-
"@memberjunction/ng-base-application": "5.
|
|
52
|
-
"@memberjunction/ng-code-editor": "5.
|
|
53
|
-
"@memberjunction/ng-container-directives": "5.
|
|
54
|
-
"@memberjunction/ng-core-entity-forms": "5.
|
|
55
|
-
"@memberjunction/ng-credentials": "5.
|
|
56
|
-
"@memberjunction/ng-dashboard-viewer": "5.
|
|
57
|
-
"@memberjunction/ng-entity-viewer": "5.
|
|
58
|
-
"@memberjunction/ng-export-service": "5.
|
|
59
|
-
"@memberjunction/ng-filter-builder": "5.
|
|
60
|
-
"@memberjunction/ng-list-management": "5.
|
|
61
|
-
"@memberjunction/ng-explorer-settings": "5.
|
|
62
|
-
"@memberjunction/ng-notifications": "5.
|
|
63
|
-
"@memberjunction/ng-query-viewer": "5.
|
|
64
|
-
"@memberjunction/ng-react": "5.
|
|
65
|
-
"@memberjunction/ng-shared": "5.
|
|
66
|
-
"@memberjunction/ng-shared-generic": "5.
|
|
67
|
-
"@memberjunction/ng-versions": "5.
|
|
68
|
-
"@memberjunction/ng-testing": "5.
|
|
69
|
-
"@memberjunction/skip-types": "5.
|
|
70
|
-
"@memberjunction/templates-base-types": "5.
|
|
71
|
-
"@memberjunction/testing-engine-base": "5.
|
|
72
|
-
"@memberjunction/ng-markdown": "5.
|
|
36
|
+
"@memberjunction/actions-base": "5.5.0",
|
|
37
|
+
"@memberjunction/ai-engine-base": "5.5.0",
|
|
38
|
+
"@memberjunction/api-keys-base": "5.5.0",
|
|
39
|
+
"@memberjunction/ai-core-plus": "5.5.0",
|
|
40
|
+
"@memberjunction/core": "5.5.0",
|
|
41
|
+
"@memberjunction/export-engine": "5.5.0",
|
|
42
|
+
"@memberjunction/ng-entity-relationship-diagram": "5.5.0",
|
|
43
|
+
"@memberjunction/core-entities": "5.5.0",
|
|
44
|
+
"@memberjunction/global": "5.5.0",
|
|
45
|
+
"@memberjunction/graphql-dataprovider": "5.5.0",
|
|
46
|
+
"@memberjunction/interactive-component-types": "5.5.0",
|
|
47
|
+
"@memberjunction/ng-action-gallery": "5.5.0",
|
|
48
|
+
"@memberjunction/ng-actions": "5.5.0",
|
|
49
|
+
"@memberjunction/ng-agents": "5.5.0",
|
|
50
|
+
"@memberjunction/ng-ai-test-harness": "5.5.0",
|
|
51
|
+
"@memberjunction/ng-base-application": "5.5.0",
|
|
52
|
+
"@memberjunction/ng-code-editor": "5.5.0",
|
|
53
|
+
"@memberjunction/ng-container-directives": "5.5.0",
|
|
54
|
+
"@memberjunction/ng-core-entity-forms": "5.5.0",
|
|
55
|
+
"@memberjunction/ng-credentials": "5.5.0",
|
|
56
|
+
"@memberjunction/ng-dashboard-viewer": "5.5.0",
|
|
57
|
+
"@memberjunction/ng-entity-viewer": "5.5.0",
|
|
58
|
+
"@memberjunction/ng-export-service": "5.5.0",
|
|
59
|
+
"@memberjunction/ng-filter-builder": "5.5.0",
|
|
60
|
+
"@memberjunction/ng-list-management": "5.5.0",
|
|
61
|
+
"@memberjunction/ng-explorer-settings": "5.5.0",
|
|
62
|
+
"@memberjunction/ng-notifications": "5.5.0",
|
|
63
|
+
"@memberjunction/ng-query-viewer": "5.5.0",
|
|
64
|
+
"@memberjunction/ng-react": "5.5.0",
|
|
65
|
+
"@memberjunction/ng-shared": "5.5.0",
|
|
66
|
+
"@memberjunction/ng-shared-generic": "5.5.0",
|
|
67
|
+
"@memberjunction/ng-versions": "5.5.0",
|
|
68
|
+
"@memberjunction/ng-testing": "5.5.0",
|
|
69
|
+
"@memberjunction/skip-types": "5.5.0",
|
|
70
|
+
"@memberjunction/templates-base-types": "5.5.0",
|
|
71
|
+
"@memberjunction/testing-engine-base": "5.5.0",
|
|
72
|
+
"@memberjunction/ng-markdown": "5.5.0",
|
|
73
73
|
"@progress/kendo-angular-buttons": "22.0.1",
|
|
74
74
|
"@progress/kendo-angular-dateinputs": "22.0.1",
|
|
75
75
|
"@progress/kendo-angular-dialog": "22.0.1",
|