@memberjunction/ng-entity-viewer 6.2.0-edge.0 → 6.2.0-edge.2

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.
Files changed (79) hide show
  1. package/dist/lib/aggregate-setup-dialog/aggregate-setup-dialog.component.d.ts +22 -0
  2. package/dist/lib/aggregate-setup-dialog/aggregate-setup-dialog.component.d.ts.map +1 -1
  3. package/dist/lib/aggregate-setup-dialog/aggregate-setup-dialog.component.js +57 -13
  4. package/dist/lib/aggregate-setup-dialog/aggregate-setup-dialog.component.js.map +1 -1
  5. package/dist/lib/entity-cards/entity-cards.component.d.ts +67 -5
  6. package/dist/lib/entity-cards/entity-cards.component.d.ts.map +1 -1
  7. package/dist/lib/entity-cards/entity-cards.component.js +202 -71
  8. package/dist/lib/entity-cards/entity-cards.component.js.map +1 -1
  9. package/dist/lib/entity-data-grid/entity-data-grid.component.d.ts +159 -20
  10. package/dist/lib/entity-data-grid/entity-data-grid.component.d.ts.map +1 -1
  11. package/dist/lib/entity-data-grid/entity-data-grid.component.js +446 -167
  12. package/dist/lib/entity-data-grid/entity-data-grid.component.js.map +1 -1
  13. package/dist/lib/entity-data-grid/events/grid-events.js +67 -67
  14. package/dist/lib/entity-data-grid/events/grid-events.js.map +1 -1
  15. package/dist/lib/entity-record-detail-panel/entity-record-detail-panel.component.d.ts +112 -8
  16. package/dist/lib/entity-record-detail-panel/entity-record-detail-panel.component.d.ts.map +1 -1
  17. package/dist/lib/entity-record-detail-panel/entity-record-detail-panel.component.js +245 -61
  18. package/dist/lib/entity-record-detail-panel/entity-record-detail-panel.component.js.map +1 -1
  19. package/dist/lib/entity-viewer/entity-viewer.component.d.ts +13 -0
  20. package/dist/lib/entity-viewer/entity-viewer.component.d.ts.map +1 -1
  21. package/dist/lib/entity-viewer/entity-viewer.component.js +53 -10
  22. package/dist/lib/entity-viewer/entity-viewer.component.js.map +1 -1
  23. package/dist/lib/pill/pill.component.d.ts +13 -3
  24. package/dist/lib/pill/pill.component.d.ts.map +1 -1
  25. package/dist/lib/pill/pill.component.js +34 -10
  26. package/dist/lib/pill/pill.component.js.map +1 -1
  27. package/dist/lib/quick-save-dialog/quick-save-dialog.component.d.ts +29 -3
  28. package/dist/lib/quick-save-dialog/quick-save-dialog.component.d.ts.map +1 -1
  29. package/dist/lib/quick-save-dialog/quick-save-dialog.component.js +173 -114
  30. package/dist/lib/quick-save-dialog/quick-save-dialog.component.js.map +1 -1
  31. package/dist/lib/recycle-bin/recycle-bin.component.d.ts +4 -0
  32. package/dist/lib/recycle-bin/recycle-bin.component.d.ts.map +1 -1
  33. package/dist/lib/recycle-bin/recycle-bin.component.js +10 -2
  34. package/dist/lib/recycle-bin/recycle-bin.component.js.map +1 -1
  35. package/dist/lib/utils/export-column.util.d.ts +14 -0
  36. package/dist/lib/utils/export-column.util.d.ts.map +1 -0
  37. package/dist/lib/utils/export-column.util.js +34 -0
  38. package/dist/lib/utils/export-column.util.js.map +1 -0
  39. package/dist/lib/utils/highlight.util.d.ts +6 -0
  40. package/dist/lib/utils/highlight.util.d.ts.map +1 -1
  41. package/dist/lib/utils/highlight.util.js +23 -11
  42. package/dist/lib/utils/highlight.util.js.map +1 -1
  43. package/dist/lib/utils/record.util.d.ts +10 -0
  44. package/dist/lib/utils/record.util.d.ts.map +1 -1
  45. package/dist/lib/utils/record.util.js +20 -4
  46. package/dist/lib/utils/record.util.js.map +1 -1
  47. package/dist/lib/view-config-panel/view-config-panel.component.d.ts +17 -1
  48. package/dist/lib/view-config-panel/view-config-panel.component.d.ts.map +1 -1
  49. package/dist/lib/view-config-panel/view-config-panel.component.js +39 -6
  50. package/dist/lib/view-config-panel/view-config-panel.component.js.map +1 -1
  51. package/dist/lib/view-selector/view-selector.component.js +2 -2
  52. package/dist/lib/view-types/renderers/cards-view-renderer.component.d.ts +15 -3
  53. package/dist/lib/view-types/renderers/cards-view-renderer.component.d.ts.map +1 -1
  54. package/dist/lib/view-types/renderers/cards-view-renderer.component.js +33 -5
  55. package/dist/lib/view-types/renderers/cards-view-renderer.component.js.map +1 -1
  56. package/dist/lib/view-types/renderers/grid-view-renderer.component.d.ts +70 -2
  57. package/dist/lib/view-types/renderers/grid-view-renderer.component.d.ts.map +1 -1
  58. package/dist/lib/view-types/renderers/grid-view-renderer.component.js +155 -33
  59. package/dist/lib/view-types/renderers/grid-view-renderer.component.js.map +1 -1
  60. package/dist/lib/view-types/renderers/map-view-renderer.component.d.ts +16 -2
  61. package/dist/lib/view-types/renderers/map-view-renderer.component.d.ts.map +1 -1
  62. package/dist/lib/view-types/renderers/map-view-renderer.component.js +37 -9
  63. package/dist/lib/view-types/renderers/map-view-renderer.component.js.map +1 -1
  64. package/dist/lib/view-types/renderers/timeline-view-renderer.component.d.ts +2 -0
  65. package/dist/lib/view-types/renderers/timeline-view-renderer.component.d.ts.map +1 -1
  66. package/dist/lib/view-types/renderers/timeline-view-renderer.component.js +11 -2
  67. package/dist/lib/view-types/renderers/timeline-view-renderer.component.js.map +1 -1
  68. package/dist/lib/view-types/view-type.contracts.d.ts +8 -0
  69. package/dist/lib/view-types/view-type.contracts.d.ts.map +1 -1
  70. package/dist/lib/view-types/view-type.contracts.js.map +1 -1
  71. package/dist/lib/view-workspace/view-workspace.component.d.ts +244 -25
  72. package/dist/lib/view-workspace/view-workspace.component.d.ts.map +1 -1
  73. package/dist/lib/view-workspace/view-workspace.component.js +639 -182
  74. package/dist/lib/view-workspace/view-workspace.component.js.map +1 -1
  75. package/dist/public-api.d.ts +1 -0
  76. package/dist/public-api.d.ts.map +1 -1
  77. package/dist/public-api.js +1 -0
  78. package/dist/public-api.js.map +1 -1
  79. package/package.json +21 -20
@@ -1 +1 @@
1
- {"version":3,"file":"entity-record-detail-panel.component.js","sourceRoot":"","sources":["../../../src/lib/entity-record-detail-panel/entity-record-detail-panel.component.ts","../../../src/lib/entity-record-detail-panel/entity-record-detail-panel.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectorRef, NgZone } from '@angular/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { EntityInfo, EntityRelationshipInfo, EntityOrganicKeyInfo, EntityOrganicKeyRelatedEntityInfo, RunView, Metadata, RunViewParams, EntityFieldValueListType, EntityFieldInfo, CompositeKey, IsDateOnlySQLType, FormatDateOnly } from '@memberjunction/core';\nimport { buildCompositeKey, buildPkString } from '../utils/record.util';\n\ninterface RelatedEntityData {\n relationship: EntityRelationshipInfo;\n relatedEntityName: string;\n count: number;\n isExpanded: boolean;\n records: Record<string, unknown>[];\n isLoadingRecords: boolean;\n}\n\ninterface OrganicKeyMatchData {\n organicKey: EntityOrganicKeyInfo;\n relatedEntity: EntityOrganicKeyRelatedEntityInfo;\n relatedEntityName: string;\n count: number;\n isExpanded: boolean;\n records: Record<string, unknown>[];\n isLoadingRecords: boolean;\n}\n\n/**\n * Field display types for categorizing how to render each field\n */\ntype FieldDisplayType = 'primary-key' | 'foreign-key' | 'enum' | 'regular';\n\n/**\n * Enhanced field display info with type categorization\n */\ninterface FieldDisplay {\n type: FieldDisplayType;\n name: string;\n label: string;\n value: string;\n // For FK fields - the display name from the virtual/mapped field\n displayValue?: string;\n // For FK fields - related entity info for navigation\n relatedEntityName?: string;\n relatedRecordId?: string;\n}\n\n/**\n * Event emitted when navigating to a related entity\n */\nexport interface NavigateToRelatedEvent {\n entityName: string;\n filter: string;\n}\n\n/**\n * Event emitted when opening a related record\n */\nexport interface OpenRelatedRecordEvent {\n entityName: string;\n record: Record<string, unknown>;\n}\n\n/**\n * Event emitted when opening a foreign key record\n */\nexport interface OpenForeignKeyRecordEvent {\n entityName: string;\n recordId: string;\n}\n\n/**\n * EntityRecordDetailPanelComponent - A reusable panel for displaying entity record details\n *\n * This component provides a detail panel view for entity records with:\n * - Primary key display with copy functionality\n * - Foreign key fields showing friendly names with navigation\n * - Enum fields displayed as pills\n * - Related entities with expandable record lists\n * - Configurable sections for details and relationships\n *\n * @example\n * ```html\n * <mj-entity-record-detail-panel\n * [entity]=\"selectedEntity\"\n * [record]=\"selectedRecord\"\n * (close)=\"onClosePanel()\"\n * (openRecord)=\"onOpenRecord($event)\"\n * (navigateToRelated)=\"onNavigateToRelated($event)\">\n * </mj-entity-record-detail-panel>\n * ```\n */\n@Component({\n standalone: false,\n selector: 'mj-entity-record-detail-panel',\n templateUrl: './entity-record-detail-panel.component.html',\n styleUrls: ['./entity-record-detail-panel.component.css']\n})\nexport class EntityRecordDetailPanelComponent extends BaseAngularComponent implements OnChanges {\n @Input() entity: EntityInfo | null = null;\n @Input() record: Record<string, unknown> | null = null;\n\n @Output() close = new EventEmitter<void>();\n @Output() openRecord = new EventEmitter<Record<string, unknown>>();\n @Output() navigateToRelated = new EventEmitter<NavigateToRelatedEvent>();\n @Output() openRelatedRecord = new EventEmitter<OpenRelatedRecordEvent>();\n @Output() openForeignKeyRecord = new EventEmitter<OpenForeignKeyRecordEvent>();\n\n // Related entity counts\n public relatedEntities: RelatedEntityData[] = [];\n public isLoadingRelationships = false;\n\n // Organic key match counts\n public organicKeyMatches: OrganicKeyMatchData[] = [];\n public isLoadingOrganicKeys = false;\n\n private metadata = this.ProviderToUse;\n\n // Sections expanded state\n public detailsSectionExpanded = true;\n public relationshipsSectionExpanded = true;\n public organicKeysSectionExpanded = true;\n\n constructor(private cdr: ChangeDetectorRef, private ngZone: NgZone) {\n super();}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['record'] && this.record && this.entity) {\n this.loadRelationshipCounts();\n this.loadOrganicKeyCounts();\n }\n }\n\n /**\n * Load counts for related entities using batch RunViews call\n */\n private async loadRelationshipCounts(): Promise<void> {\n if (!this.entity || !this.record) return;\n\n this.isLoadingRelationships = true;\n this.relatedEntities = [];\n\n // Get relationships where this entity is the related entity (foreign keys pointing TO this record)\n const relationships = this.entity.RelatedEntities;\n\n if (relationships.length === 0) {\n this.isLoadingRelationships = false;\n return;\n }\n\n // Build a CompositeKey for the current record\n const compositeKey = buildCompositeKey(this.record, this.entity);\n\n // Get the first PK value for the join field filter\n const pkValue = compositeKey.KeyValuePairs[0]?.Value;\n if (!pkValue) {\n this.isLoadingRelationships = false;\n return;\n }\n\n // Build batch query params for all relationships\n const viewParams: RunViewParams[] = relationships.map(rel => ({\n EntityName: rel.RelatedEntity,\n ExtraFilter: `${rel.RelatedEntityJoinField}='${pkValue}'`,\n ResultType: 'count_only'\n }));\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const results = await rv.RunViews(viewParams);\n\n // Map results back to relationship data\n this.relatedEntities = relationships.map((rel, index) => {\n const result = results[index];\n return {\n relationship: rel,\n relatedEntityName: rel.RelatedEntity,\n count: result.Success ? result.TotalRowCount : 0,\n isExpanded: false,\n records: [],\n isLoadingRecords: false\n };\n });\n } catch (error) {\n console.warn('Failed to load relationship counts:', error);\n // Initialize with zero counts on error\n this.relatedEntities = relationships.map(rel => ({\n relationship: rel,\n relatedEntityName: rel.RelatedEntity,\n count: 0,\n isExpanded: false,\n records: [],\n isLoadingRecords: false\n }));\n } finally {\n this.ngZone.run(() => {\n this.isLoadingRelationships = false;\n this.cdr.detectChanges();\n });\n }\n }\n\n /**\n * Load counts for organic key matches using batch RunViews call.\n * Builds query filters using EntityInfo.BuildOrganicKeyViewParams for each related entity.\n */\n private async loadOrganicKeyCounts(): Promise<void> {\n if (!this.entity || !this.record) return;\n\n const organicKeys = this.entity.OrganicKeys;\n if (!organicKeys || organicKeys.length === 0) {\n this.organicKeyMatches = [];\n return;\n }\n\n // Flatten all organic key related entities\n const allPairs: { organicKey: EntityOrganicKeyInfo; relatedEntity: EntityOrganicKeyRelatedEntityInfo }[] = [];\n for (const ok of organicKeys) {\n for (const re of ok.RelatedEntities) {\n allPairs.push({ organicKey: ok, relatedEntity: re });\n }\n }\n\n if (allPairs.length === 0) {\n this.organicKeyMatches = [];\n return;\n }\n\n this.isLoadingOrganicKeys = true;\n this.organicKeyMatches = [];\n\n // Build a mock BaseEntity-like object for BuildOrganicKeyViewParams\n // The static method only calls record.Get(fieldName), so we can duck-type it\n const mockRecord = {\n Get: (fieldName: string) => this.record ? this.record[fieldName] ?? null : null,\n EntityInfo: this.entity,\n };\n\n // Build batch query params\n const viewParams: RunViewParams[] = allPairs.map(pair => {\n const params = EntityInfo.BuildOrganicKeyViewParams(\n mockRecord as never,\n pair.relatedEntity,\n pair.organicKey,\n );\n params.ResultType = 'count_only';\n return params;\n });\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const results = await rv.RunViews(viewParams);\n\n this.organicKeyMatches = allPairs.map((pair, index) => {\n const result = results[index];\n return {\n organicKey: pair.organicKey,\n relatedEntity: pair.relatedEntity,\n relatedEntityName: pair.relatedEntity.DisplayName || pair.relatedEntity.RelatedEntity,\n count: result.Success ? result.TotalRowCount : 0,\n isExpanded: false,\n records: [],\n isLoadingRecords: false,\n };\n });\n } catch (error) {\n console.warn('Failed to load organic key counts:', error);\n this.organicKeyMatches = allPairs.map(pair => ({\n organicKey: pair.organicKey,\n relatedEntity: pair.relatedEntity,\n relatedEntityName: pair.relatedEntity.DisplayName || pair.relatedEntity.RelatedEntity,\n count: 0,\n isExpanded: false,\n records: [],\n isLoadingRecords: false,\n }));\n } finally {\n this.ngZone.run(() => {\n this.isLoadingOrganicKeys = false;\n this.cdr.detectChanges();\n });\n }\n }\n\n /**\n * Get only organic key matches that have records (count > 0)\n */\n get organicKeyMatchesWithRecords(): OrganicKeyMatchData[] {\n return this.organicKeyMatches.filter(m => m.count > 0);\n }\n\n /**\n * Toggle expansion of an organic key match section and load records if needed\n */\n async toggleOrganicKeyExpansion(match: OrganicKeyMatchData, event: Event): Promise<void> {\n event.stopPropagation();\n if (match.count === 0) return;\n\n match.isExpanded = !match.isExpanded;\n\n if (match.isExpanded && match.records.length === 0 && !match.isLoadingRecords) {\n await this.loadOrganicKeyRecords(match);\n }\n }\n\n /**\n * Load actual records for an organic key match\n */\n private async loadOrganicKeyRecords(match: OrganicKeyMatchData): Promise<void> {\n if (!this.record || !this.entity) return;\n\n match.isLoadingRecords = true;\n this.cdr.detectChanges();\n\n const mockRecord = {\n Get: (fieldName: string) => this.record ? this.record[fieldName] ?? null : null,\n EntityInfo: this.entity,\n };\n\n try {\n const params = EntityInfo.BuildOrganicKeyViewParams(\n mockRecord as never,\n match.relatedEntity,\n match.organicKey,\n );\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const relatedEntityInfo = this.metadata.Entities.find(e => e.Name === match.relatedEntity.RelatedEntity);\n const fields = relatedEntityInfo\n ? [...relatedEntityInfo.PrimaryKeys.map(pk => pk.Name),\n ...(relatedEntityInfo.NameField ? [relatedEntityInfo.NameField.Name] : []),\n ...relatedEntityInfo.Fields.filter(f => f.DefaultInView).map(f => f.Name)]\n : undefined;\n\n const result = await rv.RunView<Record<string, unknown>>({\n ...params,\n ResultType: 'simple',\n ...(fields ? { Fields: fields } : {}),\n MaxRows: 10,\n });\n\n if (result.Success) {\n match.records = result.Results;\n }\n } catch (error) {\n console.warn(`Failed to load organic key records for ${match.relatedEntityName}:`, error);\n } finally {\n this.ngZone.run(() => {\n match.isLoadingRecords = false;\n this.cdr.detectChanges();\n });\n }\n }\n\n /**\n * Handle click on an organic key record\n */\n onOrganicKeyRecordClick(match: OrganicKeyMatchData, record: Record<string, unknown>, event: Event): void {\n event.stopPropagation();\n this.openRelatedRecord.emit({\n entityName: match.relatedEntity.RelatedEntity,\n record,\n });\n }\n\n /**\n * Navigate to view all organic key matched records\n */\n onViewAllOrganicKey(match: OrganicKeyMatchData, event: Event): void {\n event.stopPropagation();\n if (!this.record || !this.entity) return;\n\n const mockRecord = {\n Get: (fieldName: string) => this.record ? this.record[fieldName] ?? null : null,\n EntityInfo: this.entity,\n };\n const params = EntityInfo.BuildOrganicKeyViewParams(\n mockRecord as never,\n match.relatedEntity,\n match.organicKey,\n );\n\n this.navigateToRelated.emit({\n entityName: match.relatedEntity.RelatedEntity,\n filter: String(params.ExtraFilter || ''),\n });\n }\n\n /**\n * Get display name for an organic key record\n */\n getOrganicKeyRecordDisplayName(match: OrganicKeyMatchData, record: Record<string, unknown>): string {\n const entityInfo = this.metadata.Entities.find(e => e.Name === match.relatedEntity.RelatedEntity);\n if (entityInfo?.NameField) {\n const name = record[entityInfo.NameField.Name];\n if (name) return String(name);\n }\n if (entityInfo) {\n return buildPkString(record, entityInfo);\n }\n return 'Record';\n }\n\n /**\n * Get subtitle for an organic key record\n */\n getOrganicKeyRecordSubtitle(match: OrganicKeyMatchData, record: Record<string, unknown>): string {\n const entityInfo = this.metadata.Entities.find(e => e.Name === match.relatedEntity.RelatedEntity);\n if (!entityInfo) return '';\n\n const subtitleFieldNames = ['Description', 'Status', 'Type', 'Email', 'Date', 'Amount', 'Total'];\n for (const fieldName of subtitleFieldNames) {\n const field = entityInfo.Fields.find(f =>\n f.Name.includes(fieldName) && f.Name !== entityInfo.NameField?.Name\n );\n if (field) {\n const value = record[field.Name];\n if (value !== null && value !== undefined) {\n return this.formatFieldValue(value, field);\n }\n }\n }\n return '';\n }\n\n /**\n * Get icon for an organic key matched entity\n */\n getOrganicKeyEntityIcon(match: OrganicKeyMatchData): string {\n const entityInfo = this.metadata.Entities.find(e => e.Name === match.relatedEntity.RelatedEntity);\n if (entityInfo?.Icon) {\n return this.formatEntityIcon(entityInfo.Icon);\n }\n return 'fa-solid fa-link';\n }\n\n /**\n * Get key fields to display in details section, categorized by type\n */\n get displayFields(): FieldDisplay[] {\n if (!this.entity || !this.record) return [];\n\n const fields: FieldDisplay[] = [];\n const excludePatterns = ['__mj_', 'password', 'secret', 'token'];\n\n for (const field of this.entity.Fields) {\n // Skip system fields and sensitive fields\n if (excludePatterns.some(p => field.Name.toLowerCase().includes(p))) continue;\n // Skip very long text fields (but not FK fields which are usually GUIDs)\n if (field.Length && field.Length > 500 && !field.RelatedEntityID) continue;\n\n const value = this.record[field.Name];\n\n // Handle Primary Key fields specially\n if (field.IsPrimaryKey) {\n fields.push({\n type: 'primary-key',\n name: field.Name,\n label: this.formatFieldLabel(field),\n value: value !== null && value !== undefined ? String(value) : ''\n });\n continue;\n }\n\n // Handle Foreign Key fields - show the related record name instead of ID\n if (field.RelatedEntityID && field.RelatedEntityID.length > 0) {\n const fkDisplay = this.buildForeignKeyDisplay(field, value);\n if (fkDisplay) {\n fields.push(fkDisplay);\n }\n continue;\n }\n\n // Skip empty values for regular fields\n if (value === null || value === undefined || String(value).trim() === '') continue;\n\n // Limit regular fields to reasonable number\n if (fields.filter(f => f.type === 'regular' || f.type === 'enum').length >= 10) continue;\n\n // Check if this field has enumerated values\n const isEnum = field.ValueListTypeEnum !== EntityFieldValueListType.None &&\n field.EntityFieldValues.length > 0;\n\n fields.push({\n type: isEnum ? 'enum' : 'regular',\n name: field.Name,\n label: this.formatFieldLabel(field),\n value: this.formatFieldValue(value, field)\n });\n }\n\n return fields;\n }\n\n /**\n * Build display info for a foreign key field\n * Uses RelatedEntityNameFieldMap to get the human-readable name\n * Label comes from the virtual field's DisplayNameOrName (e.g., \"Template\" not \"Template ID\")\n */\n private buildForeignKeyDisplay(field: EntityFieldInfo, value: unknown): FieldDisplay | null {\n if (value === null || value === undefined || String(value).trim() === '') {\n return null;\n }\n\n const fkValue = String(value);\n let displayValue = fkValue;\n let label = field.DisplayNameOrName; // Fallback to FK field's label\n\n // Try to get the display name from the mapped field\n // RelatedEntityNameFieldMap tells us which field contains the name of the related record\n if (field.RelatedEntityNameFieldMap && field.RelatedEntityNameFieldMap.trim().length > 0) {\n const mappedValue = this.record![field.RelatedEntityNameFieldMap];\n if (mappedValue !== null && mappedValue !== undefined && String(mappedValue).trim() !== '') {\n displayValue = String(mappedValue);\n }\n // Use the mapped field's DisplayNameOrName for the label\n const mappedField = this.entity!.Fields.find(f => f.Name === field.RelatedEntityNameFieldMap);\n if (mappedField) {\n label = mappedField.DisplayNameOrName;\n }\n } else {\n // Fallback: try to find a virtual field with the same name minus \"ID\" suffix\n // e.g., for \"TemplateID\", look for \"Template\" field\n const baseName = field.Name.replace(/ID$/i, '');\n if (baseName !== field.Name) {\n const virtualField = this.entity!.Fields.find(f =>\n f.Name.toLowerCase() === baseName.toLowerCase() && f.IsVirtual\n );\n if (virtualField) {\n const virtualValue = this.record![virtualField.Name];\n if (virtualValue !== null && virtualValue !== undefined && String(virtualValue).trim() !== '') {\n displayValue = String(virtualValue);\n }\n // Use the virtual field's DisplayNameOrName for the label\n label = virtualField.DisplayNameOrName;\n }\n }\n }\n\n return {\n type: 'foreign-key',\n name: field.Name,\n label: label,\n value: fkValue,\n displayValue: displayValue,\n relatedEntityName: field.RelatedEntity || undefined,\n relatedRecordId: fkValue\n };\n }\n\n /**\n * Format field name to display label using EntityFieldInfo's built-in property\n */\n private formatFieldLabel(field: EntityFieldInfo): string {\n return field.DisplayNameOrName;\n }\n\n /**\n * Format field value for display\n */\n private formatFieldValue(value: unknown, field: EntityFieldInfo): string {\n if (value === null || value === undefined) return '-';\n\n // Handle dates. A `date` column is a calendar day that arrives as UTC midnight; a local-zone\n // formatter would land on the previous day for every reader west of Greenwich (MJ#4210).\n // A timestamp names an instant and stays in local time.\n if (value instanceof Date) {\n return IsDateOnlySQLType(field.Type) ? FormatDateOnly(value) : value.toLocaleDateString();\n }\n\n // Handle booleans\n if (typeof value === 'boolean') {\n return value ? 'Yes' : 'No';\n }\n\n // Handle numbers that look like currency\n if (typeof value === 'number') {\n const nameLower = field.Name.toLowerCase();\n if (nameLower.includes('amount') ||\n nameLower.includes('price') ||\n nameLower.includes('cost') ||\n nameLower.includes('total') ||\n nameLower.includes('value')) {\n return `$${value.toLocaleString()}`;\n }\n return value.toLocaleString();\n }\n\n const strValue = String(value);\n\n // Truncate long strings\n if (strValue.length > 100) {\n return strValue.substring(0, 100) + '...';\n }\n\n return strValue;\n }\n\n /**\n * Get record title\n */\n get recordTitle(): string {\n if (!this.entity || !this.record) return 'Record';\n\n if (this.entity.NameField) {\n const name = this.record[this.entity.NameField.Name];\n if (name) return String(name);\n }\n\n return buildPkString(this.record, this.entity);\n }\n\n /**\n * Handle close button click\n */\n onClose(): void {\n this.close.emit();\n }\n\n /**\n * Handle open record button click\n */\n onOpenRecord(): void {\n if (this.record) {\n this.openRecord.emit(this.record);\n }\n }\n\n /**\n * Copy primary key value to clipboard\n */\n copyToClipboard(value: string, event: Event): void {\n event.stopPropagation();\n navigator.clipboard.writeText(value).then(() => {\n // Could add a toast notification here\n console.log('Copied to clipboard:', value);\n }).catch(err => {\n console.error('Failed to copy:', err);\n });\n }\n\n /**\n * Open a foreign key record (FK link click)\n * Emits openForeignKeyRecord event for parent to handle opening the record\n */\n onForeignKeyClick(field: FieldDisplay, event: Event): void {\n event.stopPropagation();\n if (field.relatedEntityName && field.relatedRecordId) {\n this.openForeignKeyRecord.emit({\n entityName: field.relatedEntityName,\n recordId: field.relatedRecordId\n });\n }\n }\n\n /**\n * Check if a FK display value is different from the raw ID (i.e., we have a name to show)\n */\n hasFriendlyName(field: FieldDisplay): boolean {\n return field.type === 'foreign-key' &&\n field.displayValue !== undefined &&\n field.displayValue !== field.value;\n }\n\n /**\n * Toggle expansion of related entity section and load records if needed\n */\n async toggleRelatedEntityExpansion(relEntity: RelatedEntityData, event: Event): Promise<void> {\n event.stopPropagation();\n\n if (relEntity.count === 0) return;\n\n relEntity.isExpanded = !relEntity.isExpanded;\n\n // Load records on first expansion\n if (relEntity.isExpanded && relEntity.records.length === 0 && !relEntity.isLoadingRecords) {\n await this.loadRelatedRecords(relEntity);\n }\n }\n\n /**\n * Load actual records for a related entity\n */\n private async loadRelatedRecords(relEntity: RelatedEntityData): Promise<void> {\n if (!this.record || !this.entity) return;\n\n const compositeKey = buildCompositeKey(this.record, this.entity);\n const pkValue = compositeKey.KeyValuePairs[0]?.Value;\n if (!pkValue) return;\n\n relEntity.isLoadingRecords = true;\n this.cdr.detectChanges();\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n // Look up related entity info to compute fields\n const relatedEntityInfo = this.metadata.Entities.find(e => e.Name === relEntity.relationship.RelatedEntity);\n const fields = relatedEntityInfo\n ? [...relatedEntityInfo.PrimaryKeys.map(pk => pk.Name),\n ...(relatedEntityInfo.NameField ? [relatedEntityInfo.NameField.Name] : []),\n ...relatedEntityInfo.Fields.filter(f => f.DefaultInView).map(f => f.Name)]\n : undefined;\n const result = await rv.RunView<Record<string, unknown>>({\n EntityName: relEntity.relationship.RelatedEntity,\n ExtraFilter: `${relEntity.relationship.RelatedEntityJoinField}='${pkValue}'`,\n ResultType: 'simple',\n ...(fields ? { Fields: fields } : {}),\n MaxRows: 10 // Limit inline display to 10 records\n });\n\n if (result.Success) {\n relEntity.records = result.Results;\n }\n } catch (error) {\n console.warn(`Failed to load records for ${relEntity.relatedEntityName}:`, error);\n } finally {\n this.ngZone.run(() => {\n relEntity.isLoadingRecords = false;\n this.cdr.detectChanges();\n });\n }\n }\n\n /**\n * Handle click on individual related record - opens in new tab\n */\n onRelatedRecordClick(relEntity: RelatedEntityData, record: Record<string, unknown>, event: Event): void {\n event.stopPropagation();\n this.openRelatedRecord.emit({\n entityName: relEntity.relatedEntityName,\n record\n });\n }\n\n /**\n * Navigate to view all related records (when count > 10)\n */\n onViewAllRelated(relEntity: RelatedEntityData, event: Event): void {\n event.stopPropagation();\n\n if (!this.record || !this.entity) return;\n\n const compositeKey = buildCompositeKey(this.record, this.entity);\n const pkValue = compositeKey.KeyValuePairs[0]?.Value;\n if (!pkValue) return;\n\n this.navigateToRelated.emit({\n entityName: relEntity.relatedEntityName,\n filter: `${relEntity.relationship.RelatedEntityJoinField}='${pkValue}'`\n });\n }\n\n /**\n * Get display name for a related record\n */\n getRelatedRecordDisplayName(relEntity: RelatedEntityData, record: Record<string, unknown>): string {\n const entityInfo = this.metadata.Entities.find(e => e.Name === relEntity.relatedEntityName);\n if (entityInfo?.NameField) {\n const name = record[entityInfo.NameField.Name];\n if (name) return String(name);\n }\n if (entityInfo) {\n return buildPkString(record, entityInfo);\n }\n return 'Record';\n }\n\n /**\n * Get subtitle/secondary info for a related record\n */\n getRelatedRecordSubtitle(relEntity: RelatedEntityData, record: Record<string, unknown>): string {\n const entityInfo = this.metadata.Entities.find(e => e.Name === relEntity.relatedEntityName);\n if (!entityInfo) return '';\n\n // Look for common subtitle fields\n const subtitleFieldNames = ['Description', 'Status', 'Type', 'Email', 'Date', 'Amount', 'Total'];\n for (const fieldName of subtitleFieldNames) {\n const field = entityInfo.Fields.find(f =>\n f.Name.includes(fieldName) && f.Name !== entityInfo.NameField?.Name\n );\n if (field) {\n const value = record[field.Name];\n if (value !== null && value !== undefined) {\n return this.formatFieldValue(value, field);\n }\n }\n }\n return '';\n }\n\n /**\n * Get only related entities that have records (count > 0)\n */\n get relatedEntitiesWithRecords(): RelatedEntityData[] {\n return this.relatedEntities.filter(r => r.count > 0);\n }\n\n /**\n * Get icon for related entity by looking up EntityInfo from Metadata\n */\n getRelatedEntityIcon(relEntity: RelatedEntityData): string {\n const entityInfo = this.metadata.Entities.find(e => e.Name === relEntity.relatedEntityName);\n if (entityInfo?.Icon) {\n return this.formatEntityIcon(entityInfo.Icon);\n }\n return 'fa-solid fa-table';\n }\n\n /**\n * Get the icon class for the current entity\n */\n getEntityIconClass(): string {\n if (!this.entity?.Icon) {\n return 'fa-solid fa-table';\n }\n return this.formatEntityIcon(this.entity.Icon);\n }\n\n /**\n * Format entity icon to ensure proper Font Awesome class format\n */\n private formatEntityIcon(icon: string): string {\n if (!icon) {\n return 'fa-solid fa-table';\n }\n // If icon already has fa- prefix, use it as-is\n if (icon.startsWith('fa-') || icon.startsWith('fa ')) {\n // Ensure it has a style prefix (fa-solid, fa-regular, etc.)\n if (icon.startsWith('fa-solid') || icon.startsWith('fa-regular') ||\n icon.startsWith('fa-light') || icon.startsWith('fa-brands') ||\n icon.startsWith('fa ')) {\n return icon;\n }\n // It's just \"fa-something\", add fa-solid prefix\n return `fa-solid ${icon}`;\n }\n // Check if it's just an icon name like \"table\" or \"users\"\n return `fa-solid fa-${icon}`;\n }\n}\n","<div class=\"entity-record-card-container\">\n <!-- Header -->\n <div class=\"panel-header\">\n <div class=\"panel-title-row\">\n @if (entity?.Icon) {\n <i [class]=\"getEntityIconClass()\" class=\"entity-icon\"></i>\n }\n <h3 class=\"panel-title\">{{ recordTitle }}</h3>\n </div>\n <button class=\"close-btn\" (click)=\"onClose()\" title=\"Close\" aria-label=\"Close panel\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"panel-content\">\n <!-- Details Section -->\n <mj-accordion-panel [(Expanded)]=\"detailsSectionExpanded\" [TitleIconMuted]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-info-circle\"></i>\n <span>Details</span>\n </ng-template>\n\n @for (field of displayFields; track field.name) {\n <!-- Primary Key Field - Compact with copy button -->\n @if (field.type === 'primary-key') {\n <div class=\"field-row field-row-pk\">\n <div class=\"pk-row\">\n <i class=\"fa-solid fa-key pk-icon\"></i>\n <span class=\"field-label\">{{ field.label }}</span>\n <button class=\"copy-btn\" (click)=\"copyToClipboard(field.value, $event)\" title=\"Copy ID\">\n <i class=\"fa-solid fa-copy\"></i>\n </button>\n </div>\n </div>\n }\n <!-- Foreign Key Field - Show friendly name with open button -->\n @else if (field.type === 'foreign-key') {\n <div class=\"field-row field-row-fk\">\n <span class=\"field-label\">{{ field.label }}</span>\n <div class=\"fk-value-row\" [class.fk-id-only]=\"!hasFriendlyName(field)\">\n @if (hasFriendlyName(field)) {\n <span class=\"field-value fk-display-value\">{{ field.displayValue }}</span>\n } @else {\n <!-- No friendly name available, show ID in muted style -->\n <span class=\"field-value fk-id-value\">{{ field.value }}</span>\n }\n <!-- Always show open button for FK fields that have a related entity -->\n @if (field.relatedEntityName) {\n <button class=\"fk-link-btn\" (click)=\"onForeignKeyClick(field, $event)\" title=\"Open {{ field.relatedEntityName }} record\">\n <i class=\"fa-solid fa-external-link-alt\"></i>\n </button>\n }\n </div>\n </div>\n }\n <!-- Enum Field - Show as pill -->\n @else if (field.type === 'enum') {\n <div class=\"field-row\">\n <span class=\"field-label\">{{ field.label }}</span>\n <mj-pill [value]=\"field.value\"></mj-pill>\n </div>\n }\n <!-- Regular Field -->\n @else {\n <div class=\"field-row\">\n <span class=\"field-label\">{{ field.label }}</span>\n <span class=\"field-value\">{{ field.value }}</span>\n </div>\n }\n }\n\n @if (displayFields.length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"No details available\" />\n }\n </mj-accordion-panel>\n\n <!-- Relationships Section -->\n <mj-accordion-panel [(Expanded)]=\"relationshipsSectionExpanded\" [TitleIconMuted]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-project-diagram\"></i>\n <span>Related Records</span>\n </ng-template>\n\n @if (isLoadingRelationships) {\n <div class=\"relationships-loading\">\n <mj-loading text=\"Loading related records...\" size=\"small\"></mj-loading>\n </div>\n } @else if (relatedEntitiesWithRecords.length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-diagram-project\"\n Title=\"No related records\" />\n } @else {\n @for (relEntity of relatedEntitiesWithRecords; track relEntity.relatedEntityName) {\n <div class=\"related-entity-group\" [class.expanded]=\"relEntity.isExpanded\">\n <!-- Header row - click to expand -->\n <div\n class=\"related-entity-header\"\n [class.clickable]=\"relEntity.count > 0\"\n (click)=\"toggleRelatedEntityExpansion(relEntity, $event)\">\n <i class=\"fa-solid expand-chevron\"\n [class.fa-chevron-down]=\"relEntity.isExpanded\"\n [class.fa-chevron-right]=\"!relEntity.isExpanded\"></i>\n <i [class]=\"getRelatedEntityIcon(relEntity)\"></i>\n <span class=\"related-entity-name\">{{ relEntity.relatedEntityName }}</span>\n <span class=\"related-entity-count\">{{ relEntity.count }}</span>\n </div>\n\n <!-- Expanded records list -->\n @if (relEntity.isExpanded) {\n <div class=\"related-records-list\">\n @if (relEntity.isLoadingRecords) {\n <div class=\"records-loading\">\n <mj-loading text=\"Loading...\" size=\"small\"></mj-loading>\n </div>\n } @else {\n @for (rec of relEntity.records; track $index) {\n <div class=\"related-record-item\" (click)=\"onRelatedRecordClick(relEntity, rec, $event)\">\n <div class=\"record-info\">\n <span class=\"record-name\">{{ getRelatedRecordDisplayName(relEntity, rec) }}</span>\n @if (getRelatedRecordSubtitle(relEntity, rec); as subtitle) {\n <span class=\"record-subtitle\">{{ subtitle }}</span>\n }\n </div>\n <i class=\"fa-solid fa-external-link-alt record-open-icon\"></i>\n </div>\n }\n\n <!-- View All link if there are more records -->\n @if (relEntity.count > 10) {\n <div class=\"view-all-link\" (click)=\"onViewAllRelated(relEntity, $event)\">\n <span>View all {{ relEntity.count }} records</span>\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n }\n }\n </div>\n }\n </div>\n }\n }\n </mj-accordion-panel>\n\n <!-- Organic Key Matches Section -->\n @if (organicKeyMatches.length > 0 || isLoadingOrganicKeys) {\n <mj-accordion-panel [(Expanded)]=\"organicKeysSectionExpanded\" [TitleIconMuted]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-link\"></i>\n <span>Organic Key Matches</span>\n </ng-template>\n\n @if (isLoadingOrganicKeys) {\n <div class=\"relationships-loading\">\n <mj-loading text=\"Loading organic key matches...\" size=\"small\"></mj-loading>\n </div>\n } @else if (organicKeyMatchesWithRecords.length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-link\"\n Title=\"No organic key matches\" />\n } @else {\n @for (match of organicKeyMatchesWithRecords; track match.relatedEntityName) {\n <div class=\"related-entity-group\" [class.expanded]=\"match.isExpanded\">\n <div\n class=\"related-entity-header\"\n [class.clickable]=\"match.count > 0\"\n (click)=\"toggleOrganicKeyExpansion(match, $event)\">\n <i class=\"fa-solid expand-chevron\"\n [class.fa-chevron-down]=\"match.isExpanded\"\n [class.fa-chevron-right]=\"!match.isExpanded\"></i>\n <i [class]=\"getOrganicKeyEntityIcon(match)\"></i>\n <span class=\"related-entity-name\">{{ match.relatedEntityName }}</span>\n <span class=\"related-entity-count\">{{ match.count }}</span>\n </div>\n\n @if (match.isExpanded) {\n <div class=\"related-records-list\">\n @if (match.isLoadingRecords) {\n <div class=\"records-loading\">\n <mj-loading text=\"Loading...\" size=\"small\"></mj-loading>\n </div>\n } @else {\n @for (rec of match.records; track $index) {\n <div class=\"related-record-item\" (click)=\"onOrganicKeyRecordClick(match, rec, $event)\">\n <div class=\"record-info\">\n <span class=\"record-name\">{{ getOrganicKeyRecordDisplayName(match, rec) }}</span>\n @if (getOrganicKeyRecordSubtitle(match, rec); as subtitle) {\n <span class=\"record-subtitle\">{{ subtitle }}</span>\n }\n </div>\n <i class=\"fa-solid fa-external-link-alt record-open-icon\"></i>\n </div>\n }\n\n @if (match.count > 10) {\n <div class=\"view-all-link\" (click)=\"onViewAllOrganicKey(match, $event)\">\n <span>View all {{ match.count }} records</span>\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n }\n }\n </div>\n }\n </div>\n }\n }\n </mj-accordion-panel>\n }\n </div>\n\n <!-- Footer -->\n <div class=\"panel-footer\">\n <button class=\"open-record-btn\" (click)=\"onOpenRecord()\">\n <i class=\"fa-solid fa-external-link-alt\"></i>\n Open Full Record\n </button>\n </div>\n</div>\n"]}
1
+ {"version":3,"file":"entity-record-detail-panel.component.js","sourceRoot":"","sources":["../../../src/lib/entity-record-detail-panel/entity-record-detail-panel.component.ts","../../../src/lib/entity-record-detail-panel/entity-record-detail-panel.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectorRef, NgZone } from '@angular/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { EntityInfo, EntityRelationshipInfo, EntityOrganicKeyInfo, EntityOrganicKeyRelatedEntityInfo, RunView, Metadata, RunViewParams, EntityFieldValueListType, EntityFieldInfo, CompositeKey, IsDateOnlySQLType, FormatDateOnly } from '@memberjunction/core';\nimport { BuildCompositeKey, BuildPkString } from '../utils/record.util';\n\ninterface RelatedEntityData {\n relationship: EntityRelationshipInfo;\n relatedEntityName: string;\n count: number;\n isExpanded: boolean;\n records: Record<string, unknown>[];\n isLoadingRecords: boolean;\n}\n\ninterface OrganicKeyMatchData {\n organicKey: EntityOrganicKeyInfo;\n relatedEntity: EntityOrganicKeyRelatedEntityInfo;\n relatedEntityName: string;\n count: number;\n isExpanded: boolean;\n records: Record<string, unknown>[];\n isLoadingRecords: boolean;\n}\n\n/**\n * Field display types for categorizing how to render each field\n */\ntype FieldDisplayType = 'primary-key' | 'foreign-key' | 'enum' | 'regular';\n\n/**\n * Enhanced field display info with type categorization\n */\ninterface FieldDisplay {\n type: FieldDisplayType;\n name: string;\n label: string;\n value: string;\n // For FK fields - the display name from the virtual/mapped field\n displayValue?: string;\n // For FK fields - related entity info for navigation\n relatedEntityName?: string;\n relatedRecordId?: string;\n}\n\n/**\n * Event emitted when navigating to a related entity\n */\nexport interface NavigateToRelatedEvent {\n entityName: string;\n filter: string;\n}\n\n/**\n * Event emitted when opening a related record\n */\nexport interface OpenRelatedRecordEvent {\n entityName: string;\n record: Record<string, unknown>;\n}\n\n/**\n * Event emitted when opening a foreign key record\n */\nexport interface OpenForeignKeyRecordEvent {\n entityName: string;\n recordId: string;\n}\n\n/**\n * EntityRecordDetailPanelComponent - A reusable panel for displaying entity record details\n *\n * This component provides a detail panel view for entity records with:\n * - Primary key display with copy functionality\n * - Foreign key fields showing friendly names with navigation\n * - Enum fields displayed as pills\n * - Related entities with expandable record lists\n * - Configurable sections for details and relationships\n *\n * @example\n * ```html\n * <mj-entity-record-detail-panel\n * [entity]=\"selectedEntity\"\n * [record]=\"selectedRecord\"\n * (close)=\"onClosePanel()\"\n * (openRecord)=\"onOpenRecord($event)\"\n * (navigateToRelated)=\"onNavigateToRelated($event)\">\n * </mj-entity-record-detail-panel>\n * ```\n */\n@Component({\n standalone: false,\n selector: 'mj-entity-record-detail-panel',\n templateUrl: './entity-record-detail-panel.component.html',\n styleUrls: ['./entity-record-detail-panel.component.css']\n})\nexport class EntityRecordDetailPanelComponent extends BaseAngularComponent implements OnChanges {\n @Input() entity: EntityInfo | null = null;\n @Input() record: Record<string, unknown> | null = null;\n\n @Output() close = new EventEmitter<void>();\n @Output() OpenRecord = new EventEmitter<Record<string, unknown>>();\n\n /**\n * @deprecated Use {@link OpenRecord}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (openRecord) keeps working. Must stay AFTER OpenRecord: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() openRecord = this.OpenRecord;\n @Output() NavigateToRelated = new EventEmitter<NavigateToRelatedEvent>();\n\n /**\n * @deprecated Use {@link NavigateToRelated}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (navigateToRelated) keeps working. Must stay AFTER NavigateToRelated: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() navigateToRelated = this.NavigateToRelated;\n @Output() OpenRelatedRecord = new EventEmitter<OpenRelatedRecordEvent>();\n\n /**\n * @deprecated Use {@link OpenRelatedRecord}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (openRelatedRecord) keeps working. Must stay AFTER OpenRelatedRecord: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() openRelatedRecord = this.OpenRelatedRecord;\n @Output() OpenForeignKeyRecord = new EventEmitter<OpenForeignKeyRecordEvent>();\n\n /**\n * @deprecated Use {@link OpenForeignKeyRecord}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (openForeignKeyRecord) keeps working. Must stay AFTER OpenForeignKeyRecord: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() openForeignKeyRecord = this.OpenForeignKeyRecord;\n\n // Related entity counts\n public RelatedEntities: RelatedEntityData[] = [];\n\n /** @deprecated Use {@link RelatedEntities}. */\n public get relatedEntities(): RelatedEntityData[] {\n return this.RelatedEntities;\n }\n /** @deprecated Use {@link RelatedEntities}. */\n public set relatedEntities(value: RelatedEntityData[]) {\n this.RelatedEntities = value;\n }\n public IsLoadingRelationships = false;\n\n /** @deprecated Use {@link IsLoadingRelationships}. */\n public get isLoadingRelationships() {\n return this.IsLoadingRelationships;\n }\n /** @deprecated Use {@link IsLoadingRelationships}. */\n public set isLoadingRelationships(value) {\n this.IsLoadingRelationships = value;\n }\n\n // Organic key match counts\n public OrganicKeyMatches: OrganicKeyMatchData[] = [];\n\n /** @deprecated Use {@link OrganicKeyMatches}. */\n public get organicKeyMatches(): OrganicKeyMatchData[] {\n return this.OrganicKeyMatches;\n }\n /** @deprecated Use {@link OrganicKeyMatches}. */\n public set organicKeyMatches(value: OrganicKeyMatchData[]) {\n this.OrganicKeyMatches = value;\n }\n public IsLoadingOrganicKeys = false;\n\n /** @deprecated Use {@link IsLoadingOrganicKeys}. */\n public get isLoadingOrganicKeys() {\n return this.IsLoadingOrganicKeys;\n }\n /** @deprecated Use {@link IsLoadingOrganicKeys}. */\n public set isLoadingOrganicKeys(value) {\n this.IsLoadingOrganicKeys = value;\n }\n\n private metadata = this.ProviderToUse;\n\n // Sections expanded state\n public DetailsSectionExpanded = true;\n\n /** @deprecated Use {@link DetailsSectionExpanded}. */\n public get detailsSectionExpanded() {\n return this.DetailsSectionExpanded;\n }\n /** @deprecated Use {@link DetailsSectionExpanded}. */\n public set detailsSectionExpanded(value) {\n this.DetailsSectionExpanded = value;\n }\n public RelationshipsSectionExpanded = true;\n\n /** @deprecated Use {@link RelationshipsSectionExpanded}. */\n public get relationshipsSectionExpanded() {\n return this.RelationshipsSectionExpanded;\n }\n /** @deprecated Use {@link RelationshipsSectionExpanded}. */\n public set relationshipsSectionExpanded(value) {\n this.RelationshipsSectionExpanded = value;\n }\n public OrganicKeysSectionExpanded = true;\n\n /** @deprecated Use {@link OrganicKeysSectionExpanded}. */\n public get organicKeysSectionExpanded() {\n return this.OrganicKeysSectionExpanded;\n }\n /** @deprecated Use {@link OrganicKeysSectionExpanded}. */\n public set organicKeysSectionExpanded(value) {\n this.OrganicKeysSectionExpanded = value;\n }\n\n constructor(private cdr: ChangeDetectorRef, private ngZone: NgZone) {\n super();}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['record'] && this.record && this.entity) {\n this.loadRelationshipCounts();\n this.loadOrganicKeyCounts();\n }\n }\n\n /**\n * Load counts for related entities using batch RunViews call\n */\n private async loadRelationshipCounts(): Promise<void> {\n if (!this.entity || !this.record) return;\n\n this.IsLoadingRelationships = true;\n this.RelatedEntities = [];\n\n // Get relationships where this entity is the related entity (foreign keys pointing TO this record)\n const relationships = this.entity.RelatedEntities;\n\n if (relationships.length === 0) {\n this.IsLoadingRelationships = false;\n return;\n }\n\n // Build a CompositeKey for the current record\n const compositeKey = BuildCompositeKey(this.record, this.entity);\n\n // Get the first PK value for the join field filter\n const pkValue = compositeKey.KeyValuePairs[0]?.Value;\n if (!pkValue) {\n this.IsLoadingRelationships = false;\n return;\n }\n\n // Build batch query params for all relationships\n const viewParams: RunViewParams[] = relationships.map(rel => ({\n EntityName: rel.RelatedEntity,\n ExtraFilter: `${rel.RelatedEntityJoinField}='${pkValue}'`,\n ResultType: 'count_only'\n }));\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const results = await rv.RunViews(viewParams);\n\n // Map results back to relationship data\n this.RelatedEntities = relationships.map((rel, index) => {\n const result = results[index];\n return {\n relationship: rel,\n relatedEntityName: rel.RelatedEntity,\n count: result.Success ? result.TotalRowCount : 0,\n isExpanded: false,\n records: [],\n isLoadingRecords: false\n };\n });\n } catch (error) {\n console.warn('Failed to load relationship counts:', error);\n // Initialize with zero counts on error\n this.RelatedEntities = relationships.map(rel => ({\n relationship: rel,\n relatedEntityName: rel.RelatedEntity,\n count: 0,\n isExpanded: false,\n records: [],\n isLoadingRecords: false\n }));\n } finally {\n this.ngZone.run(() => {\n this.IsLoadingRelationships = false;\n this.cdr.detectChanges();\n });\n }\n }\n\n /**\n * Load counts for organic key matches using batch RunViews call.\n * Builds query filters using EntityInfo.BuildOrganicKeyViewParams for each related entity.\n */\n private async loadOrganicKeyCounts(): Promise<void> {\n if (!this.entity || !this.record) return;\n\n const organicKeys = this.entity.OrganicKeys;\n if (!organicKeys || organicKeys.length === 0) {\n this.OrganicKeyMatches = [];\n return;\n }\n\n // Flatten all organic key related entities\n const allPairs: { organicKey: EntityOrganicKeyInfo; relatedEntity: EntityOrganicKeyRelatedEntityInfo }[] = [];\n for (const ok of organicKeys) {\n for (const re of ok.RelatedEntities) {\n allPairs.push({ organicKey: ok, relatedEntity: re });\n }\n }\n\n if (allPairs.length === 0) {\n this.OrganicKeyMatches = [];\n return;\n }\n\n this.IsLoadingOrganicKeys = true;\n this.OrganicKeyMatches = [];\n\n // Build a mock BaseEntity-like object for BuildOrganicKeyViewParams\n // The static method only calls record.Get(fieldName), so we can duck-type it\n const mockRecord = {\n Get: (fieldName: string) => this.record ? this.record[fieldName] ?? null : null,\n EntityInfo: this.entity,\n };\n\n // Build batch query params\n const viewParams: RunViewParams[] = allPairs.map(pair => {\n const params = EntityInfo.BuildOrganicKeyViewParams(\n mockRecord as never,\n pair.relatedEntity,\n pair.organicKey,\n );\n params.ResultType = 'count_only';\n return params;\n });\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const results = await rv.RunViews(viewParams);\n\n this.OrganicKeyMatches = allPairs.map((pair, index) => {\n const result = results[index];\n return {\n organicKey: pair.organicKey,\n relatedEntity: pair.relatedEntity,\n relatedEntityName: pair.relatedEntity.DisplayName || pair.relatedEntity.RelatedEntity,\n count: result.Success ? result.TotalRowCount : 0,\n isExpanded: false,\n records: [],\n isLoadingRecords: false,\n };\n });\n } catch (error) {\n console.warn('Failed to load organic key counts:', error);\n this.OrganicKeyMatches = allPairs.map(pair => ({\n organicKey: pair.organicKey,\n relatedEntity: pair.relatedEntity,\n relatedEntityName: pair.relatedEntity.DisplayName || pair.relatedEntity.RelatedEntity,\n count: 0,\n isExpanded: false,\n records: [],\n isLoadingRecords: false,\n }));\n } finally {\n this.ngZone.run(() => {\n this.IsLoadingOrganicKeys = false;\n this.cdr.detectChanges();\n });\n }\n }\n\n /**\n * Get only organic key matches that have records (count > 0)\n */\n get OrganicKeyMatchesWithRecords(): OrganicKeyMatchData[] {\n return this.OrganicKeyMatches.filter(m => m.count > 0);\n }\n\n /** @deprecated Use {@link OrganicKeyMatchesWithRecords}. */\n get organicKeyMatchesWithRecords(): OrganicKeyMatchData[] {\n return this.OrganicKeyMatchesWithRecords;\n }\n\n /**\n * Toggle expansion of an organic key match section and load records if needed\n */\n async ToggleOrganicKeyExpansion(match: OrganicKeyMatchData, event: Event): Promise<void> {\n event.stopPropagation();\n if (match.count === 0) return;\n\n match.isExpanded = !match.isExpanded;\n\n if (match.isExpanded && match.records.length === 0 && !match.isLoadingRecords) {\n await this.loadOrganicKeyRecords(match);\n }\n }\n\n /** @deprecated Use {@link ToggleOrganicKeyExpansion}. */\n async toggleOrganicKeyExpansion(match: OrganicKeyMatchData, event: Event): Promise<void> {\n return this.ToggleOrganicKeyExpansion(match, event);\n }\n\n /**\n * Load actual records for an organic key match\n */\n private async loadOrganicKeyRecords(match: OrganicKeyMatchData): Promise<void> {\n if (!this.record || !this.entity) return;\n\n match.isLoadingRecords = true;\n this.cdr.detectChanges();\n\n const mockRecord = {\n Get: (fieldName: string) => this.record ? this.record[fieldName] ?? null : null,\n EntityInfo: this.entity,\n };\n\n try {\n const params = EntityInfo.BuildOrganicKeyViewParams(\n mockRecord as never,\n match.relatedEntity,\n match.organicKey,\n );\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const relatedEntityInfo = this.metadata.Entities.find(e => e.Name === match.relatedEntity.RelatedEntity);\n const fields = relatedEntityInfo\n ? [...relatedEntityInfo.PrimaryKeys.map(pk => pk.Name),\n ...(relatedEntityInfo.NameField ? [relatedEntityInfo.NameField.Name] : []),\n ...relatedEntityInfo.Fields.filter(f => f.DefaultInView).map(f => f.Name)]\n : undefined;\n\n const result = await rv.RunView<Record<string, unknown>>({\n ...params,\n ResultType: 'simple',\n ...(fields ? { Fields: fields } : {}),\n MaxRows: 10,\n });\n\n if (result.Success) {\n match.records = result.Results;\n }\n } catch (error) {\n console.warn(`Failed to load organic key records for ${match.relatedEntityName}:`, error);\n } finally {\n this.ngZone.run(() => {\n match.isLoadingRecords = false;\n this.cdr.detectChanges();\n });\n }\n }\n\n /**\n * Handle click on an organic key record\n */\n OnOrganicKeyRecordClick(match: OrganicKeyMatchData, record: Record<string, unknown>, event: Event): void {\n event.stopPropagation();\n this.OpenRelatedRecord.emit({\n entityName: match.relatedEntity.RelatedEntity,\n record,\n });\n }\n\n /** @deprecated Use {@link OnOrganicKeyRecordClick}. */\n onOrganicKeyRecordClick(match: OrganicKeyMatchData, record: Record<string, unknown>, event: Event): void {\n return this.OnOrganicKeyRecordClick(match, record, event);\n }\n\n /**\n * Navigate to view all organic key matched records\n */\n OnViewAllOrganicKey(match: OrganicKeyMatchData, event: Event): void {\n event.stopPropagation();\n if (!this.record || !this.entity) return;\n\n const mockRecord = {\n Get: (fieldName: string) => this.record ? this.record[fieldName] ?? null : null,\n EntityInfo: this.entity,\n };\n const params = EntityInfo.BuildOrganicKeyViewParams(\n mockRecord as never,\n match.relatedEntity,\n match.organicKey,\n );\n\n this.NavigateToRelated.emit({\n entityName: match.relatedEntity.RelatedEntity,\n filter: String(params.ExtraFilter || ''),\n });\n }\n\n /** @deprecated Use {@link OnViewAllOrganicKey}. */\n onViewAllOrganicKey(match: OrganicKeyMatchData, event: Event): void {\n return this.OnViewAllOrganicKey(match, event);\n }\n\n /**\n * Get display name for an organic key record\n */\n GetOrganicKeyRecordDisplayName(match: OrganicKeyMatchData, record: Record<string, unknown>): string {\n const entityInfo = this.metadata.Entities.find(e => e.Name === match.relatedEntity.RelatedEntity);\n if (entityInfo?.NameField) {\n const name = record[entityInfo.NameField.Name];\n if (name) return String(name);\n }\n if (entityInfo) {\n return BuildPkString(record, entityInfo);\n }\n return 'Record';\n }\n\n /** @deprecated Use {@link GetOrganicKeyRecordDisplayName}. */\n getOrganicKeyRecordDisplayName(match: OrganicKeyMatchData, record: Record<string, unknown>): string {\n return this.GetOrganicKeyRecordDisplayName(match, record);\n }\n\n /**\n * Get subtitle for an organic key record\n */\n GetOrganicKeyRecordSubtitle(match: OrganicKeyMatchData, record: Record<string, unknown>): string {\n const entityInfo = this.metadata.Entities.find(e => e.Name === match.relatedEntity.RelatedEntity);\n if (!entityInfo) return '';\n\n const subtitleFieldNames = ['Description', 'Status', 'Type', 'Email', 'Date', 'Amount', 'Total'];\n for (const fieldName of subtitleFieldNames) {\n const field = entityInfo.Fields.find(f =>\n f.Name.includes(fieldName) && f.Name !== entityInfo.NameField?.Name\n );\n if (field) {\n const value = record[field.Name];\n if (value !== null && value !== undefined) {\n return this.formatFieldValue(value, field);\n }\n }\n }\n return '';\n }\n\n /** @deprecated Use {@link GetOrganicKeyRecordSubtitle}. */\n getOrganicKeyRecordSubtitle(match: OrganicKeyMatchData, record: Record<string, unknown>): string {\n return this.GetOrganicKeyRecordSubtitle(match, record);\n }\n\n /**\n * Get icon for an organic key matched entity\n */\n GetOrganicKeyEntityIcon(match: OrganicKeyMatchData): string {\n const entityInfo = this.metadata.Entities.find(e => e.Name === match.relatedEntity.RelatedEntity);\n if (entityInfo?.Icon) {\n return this.formatEntityIcon(entityInfo.Icon);\n }\n return 'fa-solid fa-link';\n }\n\n /** @deprecated Use {@link GetOrganicKeyEntityIcon}. */\n getOrganicKeyEntityIcon(match: OrganicKeyMatchData): string {\n return this.GetOrganicKeyEntityIcon(match);\n }\n\n /**\n * Get key fields to display in details section, categorized by type\n */\n get DisplayFields(): FieldDisplay[] {\n if (!this.entity || !this.record) return [];\n\n const fields: FieldDisplay[] = [];\n const excludePatterns = ['__mj_', 'password', 'secret', 'token'];\n\n for (const field of this.entity.Fields) {\n // Skip system fields and sensitive fields\n if (excludePatterns.some(p => field.Name.toLowerCase().includes(p))) continue;\n // Skip very long text fields (but not FK fields which are usually GUIDs)\n if (field.Length && field.Length > 500 && !field.RelatedEntityID) continue;\n\n const value = this.record[field.Name];\n\n // Handle Primary Key fields specially\n if (field.IsPrimaryKey) {\n fields.push({\n type: 'primary-key',\n name: field.Name,\n label: this.formatFieldLabel(field),\n value: value !== null && value !== undefined ? String(value) : ''\n });\n continue;\n }\n\n // Handle Foreign Key fields - show the related record name instead of ID\n if (field.RelatedEntityID && field.RelatedEntityID.length > 0) {\n const fkDisplay = this.buildForeignKeyDisplay(field, value);\n if (fkDisplay) {\n fields.push(fkDisplay);\n }\n continue;\n }\n\n // Skip empty values for regular fields\n if (value === null || value === undefined || String(value).trim() === '') continue;\n\n // Limit regular fields to reasonable number\n if (fields.filter(f => f.type === 'regular' || f.type === 'enum').length >= 10) continue;\n\n // Check if this field has enumerated values\n const isEnum = field.ValueListTypeEnum !== EntityFieldValueListType.None &&\n field.EntityFieldValues.length > 0;\n\n fields.push({\n type: isEnum ? 'enum' : 'regular',\n name: field.Name,\n label: this.formatFieldLabel(field),\n value: this.formatFieldValue(value, field)\n });\n }\n\n return fields;\n }\n\n /** @deprecated Use {@link DisplayFields}. */\n get displayFields(): FieldDisplay[] {\n return this.DisplayFields;\n }\n\n /**\n * Build display info for a foreign key field\n * Uses RelatedEntityNameFieldMap to get the human-readable name\n * Label comes from the virtual field's DisplayNameOrName (e.g., \"Template\" not \"Template ID\")\n */\n private buildForeignKeyDisplay(field: EntityFieldInfo, value: unknown): FieldDisplay | null {\n if (value === null || value === undefined || String(value).trim() === '') {\n return null;\n }\n\n const fkValue = String(value);\n let displayValue = fkValue;\n let label = field.DisplayNameOrName; // Fallback to FK field's label\n\n // Try to get the display name from the mapped field\n // RelatedEntityNameFieldMap tells us which field contains the name of the related record\n if (field.RelatedEntityNameFieldMap && field.RelatedEntityNameFieldMap.trim().length > 0) {\n const mappedValue = this.record![field.RelatedEntityNameFieldMap];\n if (mappedValue !== null && mappedValue !== undefined && String(mappedValue).trim() !== '') {\n displayValue = String(mappedValue);\n }\n // Use the mapped field's DisplayNameOrName for the label\n const mappedField = this.entity!.Fields.find(f => f.Name === field.RelatedEntityNameFieldMap);\n if (mappedField) {\n label = mappedField.DisplayNameOrName;\n }\n } else {\n // Fallback: try to find a virtual field with the same name minus \"ID\" suffix\n // e.g., for \"TemplateID\", look for \"Template\" field\n const baseName = field.Name.replace(/ID$/i, '');\n if (baseName !== field.Name) {\n const virtualField = this.entity!.Fields.find(f =>\n f.Name.toLowerCase() === baseName.toLowerCase() && f.IsVirtual\n );\n if (virtualField) {\n const virtualValue = this.record![virtualField.Name];\n if (virtualValue !== null && virtualValue !== undefined && String(virtualValue).trim() !== '') {\n displayValue = String(virtualValue);\n }\n // Use the virtual field's DisplayNameOrName for the label\n label = virtualField.DisplayNameOrName;\n }\n }\n }\n\n return {\n type: 'foreign-key',\n name: field.Name,\n label: label,\n value: fkValue,\n displayValue: displayValue,\n relatedEntityName: field.RelatedEntity || undefined,\n relatedRecordId: fkValue\n };\n }\n\n /**\n * Format field name to display label using EntityFieldInfo's built-in property\n */\n private formatFieldLabel(field: EntityFieldInfo): string {\n return field.DisplayNameOrName;\n }\n\n /**\n * Format field value for display\n */\n private formatFieldValue(value: unknown, field: EntityFieldInfo): string {\n if (value === null || value === undefined) return '-';\n\n // Handle dates. A `date` column is a calendar day that arrives as UTC midnight; a local-zone\n // formatter would land on the previous day for every reader west of Greenwich (MJ#4210).\n // A timestamp names an instant and stays in local time.\n if (value instanceof Date) {\n return IsDateOnlySQLType(field.Type) ? FormatDateOnly(value) : value.toLocaleDateString();\n }\n\n // Handle booleans\n if (typeof value === 'boolean') {\n return value ? 'Yes' : 'No';\n }\n\n // Handle numbers that look like currency\n if (typeof value === 'number') {\n const nameLower = field.Name.toLowerCase();\n if (nameLower.includes('amount') ||\n nameLower.includes('price') ||\n nameLower.includes('cost') ||\n nameLower.includes('total') ||\n nameLower.includes('value')) {\n return `$${value.toLocaleString()}`;\n }\n return value.toLocaleString();\n }\n\n const strValue = String(value);\n\n // Truncate long strings\n if (strValue.length > 100) {\n return strValue.substring(0, 100) + '...';\n }\n\n return strValue;\n }\n\n /**\n * Get record title\n */\n get RecordTitle(): string {\n if (!this.entity || !this.record) return 'Record';\n\n if (this.entity.NameField) {\n const name = this.record[this.entity.NameField.Name];\n if (name) return String(name);\n }\n\n return BuildPkString(this.record, this.entity);\n }\n\n /** @deprecated Use {@link RecordTitle}. */\n get recordTitle(): string {\n return this.RecordTitle;\n }\n\n /**\n * Handle close button click\n */\n OnClose(): void {\n this.close.emit();\n }\n\n /** @deprecated Use {@link OnClose}. */\n onClose(): void {\n return this.OnClose();\n }\n\n /**\n * Handle open record button click\n */\n OnOpenRecord(): void {\n if (this.record) {\n this.OpenRecord.emit(this.record);\n }\n }\n\n /** @deprecated Use {@link OnOpenRecord}. */\n onOpenRecord(): void {\n return this.OnOpenRecord();\n }\n\n /**\n * Copy primary key value to clipboard\n */\n CopyToClipboard(value: string, event: Event): void {\n event.stopPropagation();\n navigator.clipboard.writeText(value).then(() => {\n // Could add a toast notification here\n console.log('Copied to clipboard:', value);\n }).catch(err => {\n console.error('Failed to copy:', err);\n });\n }\n\n /** @deprecated Use {@link CopyToClipboard}. */\n copyToClipboard(value: string, event: Event): void {\n return this.CopyToClipboard(value, event);\n }\n\n /**\n * Open a foreign key record (FK link click)\n * Emits openForeignKeyRecord event for parent to handle opening the record\n */\n OnForeignKeyClick(field: FieldDisplay, event: Event): void {\n event.stopPropagation();\n if (field.relatedEntityName && field.relatedRecordId) {\n this.OpenForeignKeyRecord.emit({\n entityName: field.relatedEntityName,\n recordId: field.relatedRecordId\n });\n }\n }\n\n /** @deprecated Use {@link OnForeignKeyClick}. */\n onForeignKeyClick(field: FieldDisplay, event: Event): void {\n return this.OnForeignKeyClick(field, event);\n }\n\n /**\n * Check if a FK display value is different from the raw ID (i.e., we have a name to show)\n */\n HasFriendlyName(field: FieldDisplay): boolean {\n return field.type === 'foreign-key' &&\n field.displayValue !== undefined &&\n field.displayValue !== field.value;\n }\n\n /** @deprecated Use {@link HasFriendlyName}. */\n hasFriendlyName(field: FieldDisplay): boolean {\n return this.HasFriendlyName(field);\n }\n\n /**\n * Toggle expansion of related entity section and load records if needed\n */\n async ToggleRelatedEntityExpansion(relEntity: RelatedEntityData, event: Event): Promise<void> {\n event.stopPropagation();\n\n if (relEntity.count === 0) return;\n\n relEntity.isExpanded = !relEntity.isExpanded;\n\n // Load records on first expansion\n if (relEntity.isExpanded && relEntity.records.length === 0 && !relEntity.isLoadingRecords) {\n await this.loadRelatedRecords(relEntity);\n }\n }\n\n /** @deprecated Use {@link ToggleRelatedEntityExpansion}. */\n async toggleRelatedEntityExpansion(relEntity: RelatedEntityData, event: Event): Promise<void> {\n return this.ToggleRelatedEntityExpansion(relEntity, event);\n }\n\n /**\n * Load actual records for a related entity\n */\n private async loadRelatedRecords(relEntity: RelatedEntityData): Promise<void> {\n if (!this.record || !this.entity) return;\n\n const compositeKey = BuildCompositeKey(this.record, this.entity);\n const pkValue = compositeKey.KeyValuePairs[0]?.Value;\n if (!pkValue) return;\n\n relEntity.isLoadingRecords = true;\n this.cdr.detectChanges();\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n // Look up related entity info to compute fields\n const relatedEntityInfo = this.metadata.Entities.find(e => e.Name === relEntity.relationship.RelatedEntity);\n const fields = relatedEntityInfo\n ? [...relatedEntityInfo.PrimaryKeys.map(pk => pk.Name),\n ...(relatedEntityInfo.NameField ? [relatedEntityInfo.NameField.Name] : []),\n ...relatedEntityInfo.Fields.filter(f => f.DefaultInView).map(f => f.Name)]\n : undefined;\n const result = await rv.RunView<Record<string, unknown>>({\n EntityName: relEntity.relationship.RelatedEntity,\n ExtraFilter: `${relEntity.relationship.RelatedEntityJoinField}='${pkValue}'`,\n ResultType: 'simple',\n ...(fields ? { Fields: fields } : {}),\n MaxRows: 10 // Limit inline display to 10 records\n });\n\n if (result.Success) {\n relEntity.records = result.Results;\n }\n } catch (error) {\n console.warn(`Failed to load records for ${relEntity.relatedEntityName}:`, error);\n } finally {\n this.ngZone.run(() => {\n relEntity.isLoadingRecords = false;\n this.cdr.detectChanges();\n });\n }\n }\n\n /**\n * Handle click on individual related record - opens in new tab\n */\n OnRelatedRecordClick(relEntity: RelatedEntityData, record: Record<string, unknown>, event: Event): void {\n event.stopPropagation();\n this.OpenRelatedRecord.emit({\n entityName: relEntity.relatedEntityName,\n record\n });\n }\n\n /** @deprecated Use {@link OnRelatedRecordClick}. */\n onRelatedRecordClick(relEntity: RelatedEntityData, record: Record<string, unknown>, event: Event): void {\n return this.OnRelatedRecordClick(relEntity, record, event);\n }\n\n /**\n * Navigate to view all related records (when count > 10)\n */\n OnViewAllRelated(relEntity: RelatedEntityData, event: Event): void {\n event.stopPropagation();\n\n if (!this.record || !this.entity) return;\n\n const compositeKey = BuildCompositeKey(this.record, this.entity);\n const pkValue = compositeKey.KeyValuePairs[0]?.Value;\n if (!pkValue) return;\n\n this.NavigateToRelated.emit({\n entityName: relEntity.relatedEntityName,\n filter: `${relEntity.relationship.RelatedEntityJoinField}='${pkValue}'`\n });\n }\n\n /** @deprecated Use {@link OnViewAllRelated}. */\n onViewAllRelated(relEntity: RelatedEntityData, event: Event): void {\n return this.OnViewAllRelated(relEntity, event);\n }\n\n /**\n * Get display name for a related record\n */\n GetRelatedRecordDisplayName(relEntity: RelatedEntityData, record: Record<string, unknown>): string {\n const entityInfo = this.metadata.Entities.find(e => e.Name === relEntity.relatedEntityName);\n if (entityInfo?.NameField) {\n const name = record[entityInfo.NameField.Name];\n if (name) return String(name);\n }\n if (entityInfo) {\n return BuildPkString(record, entityInfo);\n }\n return 'Record';\n }\n\n /** @deprecated Use {@link GetRelatedRecordDisplayName}. */\n getRelatedRecordDisplayName(relEntity: RelatedEntityData, record: Record<string, unknown>): string {\n return this.GetRelatedRecordDisplayName(relEntity, record);\n }\n\n /**\n * Get subtitle/secondary info for a related record\n */\n GetRelatedRecordSubtitle(relEntity: RelatedEntityData, record: Record<string, unknown>): string {\n const entityInfo = this.metadata.Entities.find(e => e.Name === relEntity.relatedEntityName);\n if (!entityInfo) return '';\n\n // Look for common subtitle fields\n const subtitleFieldNames = ['Description', 'Status', 'Type', 'Email', 'Date', 'Amount', 'Total'];\n for (const fieldName of subtitleFieldNames) {\n const field = entityInfo.Fields.find(f =>\n f.Name.includes(fieldName) && f.Name !== entityInfo.NameField?.Name\n );\n if (field) {\n const value = record[field.Name];\n if (value !== null && value !== undefined) {\n return this.formatFieldValue(value, field);\n }\n }\n }\n return '';\n }\n\n /** @deprecated Use {@link GetRelatedRecordSubtitle}. */\n getRelatedRecordSubtitle(relEntity: RelatedEntityData, record: Record<string, unknown>): string {\n return this.GetRelatedRecordSubtitle(relEntity, record);\n }\n\n /**\n * Get only related entities that have records (count > 0)\n */\n get RelatedEntitiesWithRecords(): RelatedEntityData[] {\n return this.RelatedEntities.filter(r => r.count > 0);\n }\n\n /** @deprecated Use {@link RelatedEntitiesWithRecords}. */\n get relatedEntitiesWithRecords(): RelatedEntityData[] {\n return this.RelatedEntitiesWithRecords;\n }\n\n /**\n * Get icon for related entity by looking up EntityInfo from Metadata\n */\n GetRelatedEntityIcon(relEntity: RelatedEntityData): string {\n const entityInfo = this.metadata.Entities.find(e => e.Name === relEntity.relatedEntityName);\n if (entityInfo?.Icon) {\n return this.formatEntityIcon(entityInfo.Icon);\n }\n return 'fa-solid fa-table';\n }\n\n /** @deprecated Use {@link GetRelatedEntityIcon}. */\n getRelatedEntityIcon(relEntity: RelatedEntityData): string {\n return this.GetRelatedEntityIcon(relEntity);\n }\n\n /**\n * Get the icon class for the current entity\n */\n GetEntityIconClass(): string {\n if (!this.entity?.Icon) {\n return 'fa-solid fa-table';\n }\n return this.formatEntityIcon(this.entity.Icon);\n }\n\n /** @deprecated Use {@link GetEntityIconClass}. */\n getEntityIconClass(): string {\n return this.GetEntityIconClass();\n }\n\n /**\n * Format entity icon to ensure proper Font Awesome class format\n */\n private formatEntityIcon(icon: string): string {\n if (!icon) {\n return 'fa-solid fa-table';\n }\n // If icon already has fa- prefix, use it as-is\n if (icon.startsWith('fa-') || icon.startsWith('fa ')) {\n // Ensure it has a style prefix (fa-solid, fa-regular, etc.)\n if (icon.startsWith('fa-solid') || icon.startsWith('fa-regular') ||\n icon.startsWith('fa-light') || icon.startsWith('fa-brands') ||\n icon.startsWith('fa ')) {\n return icon;\n }\n // It's just \"fa-something\", add fa-solid prefix\n return `fa-solid ${icon}`;\n }\n // Check if it's just an icon name like \"table\" or \"users\"\n return `fa-solid fa-${icon}`;\n }\n}\n","<div class=\"entity-record-card-container\">\n <!-- Header -->\n <div class=\"panel-header\">\n <div class=\"panel-title-row\">\n @if (entity?.Icon) {\n <i [class]=\"getEntityIconClass()\" class=\"entity-icon\"></i>\n }\n <h3 class=\"panel-title\">{{ recordTitle }}</h3>\n </div>\n <button class=\"close-btn\" (click)=\"onClose()\" title=\"Close\" aria-label=\"Close panel\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"panel-content\">\n <!-- Details Section -->\n <mj-accordion-panel [(Expanded)]=\"detailsSectionExpanded\" [TitleIconMuted]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-info-circle\"></i>\n <span>Details</span>\n </ng-template>\n\n @for (field of displayFields; track field.name) {\n <!-- Primary Key Field - Compact with copy button -->\n @if (field.type === 'primary-key') {\n <div class=\"field-row field-row-pk\">\n <div class=\"pk-row\">\n <i class=\"fa-solid fa-key pk-icon\"></i>\n <span class=\"field-label\">{{ field.label }}</span>\n <button class=\"copy-btn\" (click)=\"copyToClipboard(field.value, $event)\" title=\"Copy ID\">\n <i class=\"fa-solid fa-copy\"></i>\n </button>\n </div>\n </div>\n }\n <!-- Foreign Key Field - Show friendly name with open button -->\n @else if (field.type === 'foreign-key') {\n <div class=\"field-row field-row-fk\">\n <span class=\"field-label\">{{ field.label }}</span>\n <div class=\"fk-value-row\" [class.fk-id-only]=\"!hasFriendlyName(field)\">\n @if (hasFriendlyName(field)) {\n <span class=\"field-value fk-display-value\">{{ field.displayValue }}</span>\n } @else {\n <!-- No friendly name available, show ID in muted style -->\n <span class=\"field-value fk-id-value\">{{ field.value }}</span>\n }\n <!-- Always show open button for FK fields that have a related entity -->\n @if (field.relatedEntityName) {\n <button class=\"fk-link-btn\" (click)=\"onForeignKeyClick(field, $event)\" title=\"Open {{ field.relatedEntityName }} record\">\n <i class=\"fa-solid fa-external-link-alt\"></i>\n </button>\n }\n </div>\n </div>\n }\n <!-- Enum Field - Show as pill -->\n @else if (field.type === 'enum') {\n <div class=\"field-row\">\n <span class=\"field-label\">{{ field.label }}</span>\n <mj-pill [value]=\"field.value\"></mj-pill>\n </div>\n }\n <!-- Regular Field -->\n @else {\n <div class=\"field-row\">\n <span class=\"field-label\">{{ field.label }}</span>\n <span class=\"field-value\">{{ field.value }}</span>\n </div>\n }\n }\n\n @if (displayFields.length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"No details available\" />\n }\n </mj-accordion-panel>\n\n <!-- Relationships Section -->\n <mj-accordion-panel [(Expanded)]=\"relationshipsSectionExpanded\" [TitleIconMuted]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-project-diagram\"></i>\n <span>Related Records</span>\n </ng-template>\n\n @if (isLoadingRelationships) {\n <div class=\"relationships-loading\">\n <mj-loading text=\"Loading related records...\" size=\"small\"></mj-loading>\n </div>\n } @else if (relatedEntitiesWithRecords.length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-diagram-project\"\n Title=\"No related records\" />\n } @else {\n @for (relEntity of relatedEntitiesWithRecords; track relEntity.relatedEntityName) {\n <div class=\"related-entity-group\" [class.expanded]=\"relEntity.isExpanded\">\n <!-- Header row - click to expand -->\n <div\n class=\"related-entity-header\"\n [class.clickable]=\"relEntity.count > 0\"\n (click)=\"toggleRelatedEntityExpansion(relEntity, $event)\">\n <i class=\"fa-solid expand-chevron\"\n [class.fa-chevron-down]=\"relEntity.isExpanded\"\n [class.fa-chevron-right]=\"!relEntity.isExpanded\"></i>\n <i [class]=\"getRelatedEntityIcon(relEntity)\"></i>\n <span class=\"related-entity-name\">{{ relEntity.relatedEntityName }}</span>\n <span class=\"related-entity-count\">{{ relEntity.count }}</span>\n </div>\n\n <!-- Expanded records list -->\n @if (relEntity.isExpanded) {\n <div class=\"related-records-list\">\n @if (relEntity.isLoadingRecords) {\n <div class=\"records-loading\">\n <mj-loading text=\"Loading...\" size=\"small\"></mj-loading>\n </div>\n } @else {\n @for (rec of relEntity.records; track $index) {\n <div class=\"related-record-item\" (click)=\"onRelatedRecordClick(relEntity, rec, $event)\">\n <div class=\"record-info\">\n <span class=\"record-name\">{{ getRelatedRecordDisplayName(relEntity, rec) }}</span>\n @if (getRelatedRecordSubtitle(relEntity, rec); as subtitle) {\n <span class=\"record-subtitle\">{{ subtitle }}</span>\n }\n </div>\n <i class=\"fa-solid fa-external-link-alt record-open-icon\"></i>\n </div>\n }\n\n <!-- View All link if there are more records -->\n @if (relEntity.count > 10) {\n <div class=\"view-all-link\" (click)=\"onViewAllRelated(relEntity, $event)\">\n <span>View all {{ relEntity.count }} records</span>\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n }\n }\n </div>\n }\n </div>\n }\n }\n </mj-accordion-panel>\n\n <!-- Organic Key Matches Section -->\n @if (organicKeyMatches.length > 0 || isLoadingOrganicKeys) {\n <mj-accordion-panel [(Expanded)]=\"organicKeysSectionExpanded\" [TitleIconMuted]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-link\"></i>\n <span>Organic Key Matches</span>\n </ng-template>\n\n @if (isLoadingOrganicKeys) {\n <div class=\"relationships-loading\">\n <mj-loading text=\"Loading organic key matches...\" size=\"small\"></mj-loading>\n </div>\n } @else if (organicKeyMatchesWithRecords.length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-link\"\n Title=\"No organic key matches\" />\n } @else {\n @for (match of organicKeyMatchesWithRecords; track match.relatedEntityName) {\n <div class=\"related-entity-group\" [class.expanded]=\"match.isExpanded\">\n <div\n class=\"related-entity-header\"\n [class.clickable]=\"match.count > 0\"\n (click)=\"toggleOrganicKeyExpansion(match, $event)\">\n <i class=\"fa-solid expand-chevron\"\n [class.fa-chevron-down]=\"match.isExpanded\"\n [class.fa-chevron-right]=\"!match.isExpanded\"></i>\n <i [class]=\"getOrganicKeyEntityIcon(match)\"></i>\n <span class=\"related-entity-name\">{{ match.relatedEntityName }}</span>\n <span class=\"related-entity-count\">{{ match.count }}</span>\n </div>\n\n @if (match.isExpanded) {\n <div class=\"related-records-list\">\n @if (match.isLoadingRecords) {\n <div class=\"records-loading\">\n <mj-loading text=\"Loading...\" size=\"small\"></mj-loading>\n </div>\n } @else {\n @for (rec of match.records; track $index) {\n <div class=\"related-record-item\" (click)=\"onOrganicKeyRecordClick(match, rec, $event)\">\n <div class=\"record-info\">\n <span class=\"record-name\">{{ getOrganicKeyRecordDisplayName(match, rec) }}</span>\n @if (getOrganicKeyRecordSubtitle(match, rec); as subtitle) {\n <span class=\"record-subtitle\">{{ subtitle }}</span>\n }\n </div>\n <i class=\"fa-solid fa-external-link-alt record-open-icon\"></i>\n </div>\n }\n\n @if (match.count > 10) {\n <div class=\"view-all-link\" (click)=\"onViewAllOrganicKey(match, $event)\">\n <span>View all {{ match.count }} records</span>\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n }\n }\n </div>\n }\n </div>\n }\n }\n </mj-accordion-panel>\n }\n </div>\n\n <!-- Footer -->\n <div class=\"panel-footer\">\n <button class=\"open-record-btn\" (click)=\"onOpenRecord()\">\n <i class=\"fa-solid fa-external-link-alt\"></i>\n Open Full Record\n </button>\n </div>\n</div>\n"]}
@@ -1,6 +1,7 @@
1
1
  import { EventEmitter, OnInit, OnDestroy, AfterViewInit, ChangeDetectorRef, ElementRef, NgZone } from '@angular/core';
2
2
  import { BaseAngularComponent } from '@memberjunction/ng-base-types';
3
3
  import { EntityInfo } from '@memberjunction/core';
4
+ import { ExportColumn } from '@memberjunction/export-engine';
4
5
  import { MJUserViewEntityExtended } from '@memberjunction/core-entities';
5
6
  import { PageChangeEvent } from '@memberjunction/ng-pagination';
6
7
  import { EntityViewerConfig, RecordSelectedEvent, RecordOpenedEvent, DataLoadedEvent, FilteredCountChangedEvent, SortState, SortDirection, PaginationState, ViewGridState } from '../types';
@@ -479,6 +480,7 @@ export declare class EntityViewerComponent extends BaseAngularComponent implemen
479
480
  private resetPaginationState;
480
481
  private _loadSequence;
481
482
  private _pendingReload;
483
+ private _pendingReloadKeepsPage;
482
484
  /**
483
485
  * Fetches the FULL result set for the current entity/view (up to {@link EXPORT_MAX_RECORDS}),
484
486
  * honoring the active sort, business filter (WhereClause) and user search — used by the grid's
@@ -501,6 +503,12 @@ export declare class EntityViewerComponent extends BaseAngularComponent implemen
501
503
  * Keeps existing records visible during refresh for better UX
502
504
  */
503
505
  Refresh(): void;
506
+ /**
507
+ * Re-loads the page the user is on, with the same sort and filters, keeping the rows visible
508
+ * meanwhile. For refreshes the user didn't ask for (another tab or the server changed rows):
509
+ * unlike {@link Refresh}, it doesn't send them back to page 1.
510
+ */
511
+ RefreshInPlace(): void;
504
512
  /** Current (1-based) page number the grid is showing. Internally stored 0-based. */
505
513
  get CurrentPageNumber(): number;
506
514
  /** Number of records loaded per page. */
@@ -549,6 +557,11 @@ export declare class EntityViewerComponent extends BaseAngularComponent implemen
549
557
  * the file itself; this is the no-UI entry point for an external driver (the AI agent).
550
558
  */
551
559
  ExportRecords(format?: 'csv' | 'excel' | 'json'): Promise<boolean>;
560
+ /**
561
+ * The active renderer's on-screen columns ({@link IViewRenderer.GetExportColumns}), or an empty
562
+ * array when no renderer is mounted or the active view type has no column layout.
563
+ */
564
+ GetExportColumns(): ExportColumn[];
552
565
  /**
553
566
  * Whether the ACTIVE view type provides its own export UI. Today only the Grid does (it has an
554
567
  * in-toolbar Export button); Cards, Map and Timeline do not. Hosts use this to decide whether to
@@ -1 +1 @@
1
- {"version":3,"file":"entity-viewer.component.d.ts","sourceRoot":"","sources":["../../../src/lib/entity-viewer/entity-viewer.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entity-viewer.component.d.ts","sourceRoot":"","sources":["../../../src/lib/entity-viewer/entity-viewer.component.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ import { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators';
5
5
  import { RunView, LogError } from '@memberjunction/core';
6
6
  import { UUIDsEqual } from '@memberjunction/global';
7
7
  import { UserInfoEngine } from '@memberjunction/core-entities';
8
- import { buildCompositeKey, buildPkString } from '../utils/record.util';
8
+ import { BuildCompositeKey, BuildPkString } from '../utils/record.util';
9
9
  import { MJNotificationService } from '@memberjunction/ng-notifications';
10
10
  import { ResolveViewerConfig } from '../types';
11
11
  import { ViewTypeEngine } from '../view-types';
@@ -687,7 +687,15 @@ export class EntityViewerComponent extends BaseAngularComponent {
687
687
  }
688
688
  /** Title shown in the "no records" empty state — varies with the active filter. */
689
689
  get NoRecordsTitle() {
690
- return this.DebouncedFilterText ? 'No matching records' : 'No records found';
690
+ if (this.DebouncedFilterText) {
691
+ return 'No matching records';
692
+ }
693
+ // Prefer the entity's business-friendly plural ("No Contacts to display") over the generic
694
+ // "No records found" so the empty state speaks the user's own domain language. Same wording
695
+ // as the grid and cards plug-ins so the copy does not shift between view types.
696
+ // Falls back to "records" when no entity is in scope.
697
+ const plural = this.EffectiveEntity?.DisplayNamePlural;
698
+ return plural ? `No ${plural} to display` : 'No records found';
691
699
  }
692
700
  /** True when the "no records" empty state is the result of an active filter. */
693
701
  get IsNoRecordsFiltered() {
@@ -767,7 +775,7 @@ export class EntityViewerComponent extends BaseAngularComponent {
767
775
  return records.filter(record => {
768
776
  const matchResult = this.recordMatchesFilter(record, filterText, visibleFields);
769
777
  if (matchResult.matches && matchResult.matchedField && !matchResult.matchedInVisibleField) {
770
- const recordKey = buildPkString(record, this.Entity);
778
+ const recordKey = BuildPkString(record, this.Entity);
771
779
  this.HiddenFieldMatches.set(recordKey, matchResult.matchedField);
772
780
  }
773
781
  return matchResult.matches;
@@ -856,7 +864,7 @@ export class EntityViewerComponent extends BaseAngularComponent {
856
864
  HasHiddenFieldMatch(record) {
857
865
  if (!this.DebouncedFilterText || !this.Entity)
858
866
  return false;
859
- return this.HiddenFieldMatches.has(buildPkString(record, this.Entity));
867
+ return this.HiddenFieldMatches.has(BuildPkString(record, this.Entity));
860
868
  }
861
869
  /**
862
870
  * Get the name of the hidden field that matched for display
@@ -864,7 +872,7 @@ export class EntityViewerComponent extends BaseAngularComponent {
864
872
  GetHiddenMatchFieldName(record) {
865
873
  if (!this.Entity)
866
874
  return '';
867
- const fieldName = this.HiddenFieldMatches.get(buildPkString(record, this.Entity));
875
+ const fieldName = this.HiddenFieldMatches.get(BuildPkString(record, this.Entity));
868
876
  if (!fieldName || !this.Entity)
869
877
  return '';
870
878
  const field = this.Entity.Fields.find(f => f.Name === fieldName);
@@ -1085,6 +1093,9 @@ export class EntityViewerComponent extends BaseAngularComponent {
1085
1093
  _loadSequence = 0;
1086
1094
  // Flag: a reload was requested while a load was already in progress
1087
1095
  _pendingReload = false;
1096
+ // Whether that pending reload keeps the user's page: only when every request behind it was
1097
+ // RefreshInPlace (a change made elsewhere); any other reload starts again at page 1.
1098
+ _pendingReloadKeepsPage = false;
1088
1099
  /**
1089
1100
  * Fetches the FULL result set for the current entity/view (up to {@link EXPORT_MAX_RECORDS}),
1090
1101
  * honoring the active sort, business filter (WhereClause) and user search — used by the grid's
@@ -1161,6 +1172,7 @@ export class EntityViewerComponent extends BaseAngularComponent {
1161
1172
  // fire while isLoading is still true, causing an infinite loop.
1162
1173
  if (this.IsLoading) {
1163
1174
  this._pendingReload = true;
1175
+ this._pendingReloadKeepsPage = false;
1164
1176
  return;
1165
1177
  }
1166
1178
  this.IsLoading = true;
@@ -1275,8 +1287,11 @@ export class EntityViewerComponent extends BaseAngularComponent {
1275
1287
  // If a reload was requested while we were loading, trigger it now.
1276
1288
  // isLoading is false at this point so loadData() won't re-enter the pending path.
1277
1289
  if (this._pendingReload) {
1290
+ const keepPage = this._pendingReloadKeepsPage;
1278
1291
  this._pendingReload = false;
1279
- this.resetPaginationState();
1292
+ this._pendingReloadKeepsPage = false;
1293
+ if (!keepPage)
1294
+ this.resetPaginationState();
1280
1295
  this.LoadData();
1281
1296
  }
1282
1297
  }
@@ -1299,6 +1314,23 @@ export class EntityViewerComponent extends BaseAngularComponent {
1299
1314
  this.LoadData();
1300
1315
  }
1301
1316
  }
1317
+ /**
1318
+ * Re-loads the page the user is on, with the same sort and filters, keeping the rows visible
1319
+ * meanwhile. For refreshes the user didn't ask for (another tab or the server changed rows):
1320
+ * unlike {@link Refresh}, it doesn't send them back to page 1.
1321
+ */
1322
+ RefreshInPlace() {
1323
+ if (this.Records)
1324
+ return;
1325
+ if (this.IsLoading) {
1326
+ // Reload when the current load finishes, still on this page (unless another reload also waits).
1327
+ if (!this._pendingReload)
1328
+ this._pendingReloadKeepsPage = true;
1329
+ this._pendingReload = true;
1330
+ return;
1331
+ }
1332
+ this.LoadData();
1333
+ }
1302
1334
  // ========================================
1303
1335
  // PROGRAMMATIC GRID CONTROL (agent / external driver)
1304
1336
  // ========================================
@@ -1392,7 +1424,7 @@ export class EntityViewerComponent extends BaseAngularComponent {
1392
1424
  if (!entity || !record) {
1393
1425
  return false;
1394
1426
  }
1395
- const compositeKey = buildCompositeKey(record, entity);
1427
+ const compositeKey = BuildCompositeKey(record, entity);
1396
1428
  // Drive the highlight through the same input the user-click path uses.
1397
1429
  this.SelectedRecordID = compositeKey.ToConcatenatedString();
1398
1430
  this.RecordSelected.emit({ record, entity, compositeKey });
@@ -1411,6 +1443,17 @@ export class EntityViewerComponent extends BaseAngularComponent {
1411
1443
  }
1412
1444
  return renderer.exportRecords(format);
1413
1445
  }
1446
+ /**
1447
+ * The active renderer's on-screen columns ({@link IViewRenderer.GetExportColumns}), or an empty
1448
+ * array when no renderer is mounted or the active view type has no column layout.
1449
+ */
1450
+ GetExportColumns() {
1451
+ const renderer = this.dynamicRendererRef?.instance;
1452
+ if (!renderer || typeof renderer.GetExportColumns !== 'function') {
1453
+ return [];
1454
+ }
1455
+ return renderer.GetExportColumns();
1456
+ }
1414
1457
  /**
1415
1458
  * Whether the ACTIVE view type provides its own export UI. Today only the Grid does (it has an
1416
1459
  * in-toolbar Export button); Cards, Map and Timeline do not. Hosts use this to decide whether to
@@ -1966,14 +2009,14 @@ export class EntityViewerComponent extends BaseAngularComponent {
1966
2009
  const entity = this.EffectiveEntity;
1967
2010
  if (entity && record) {
1968
2011
  const row = record;
1969
- this.RecordSelected.emit({ record: row, entity, compositeKey: buildCompositeKey(row, entity) });
2012
+ this.RecordSelected.emit({ record: row, entity, compositeKey: BuildCompositeKey(row, entity) });
1970
2013
  }
1971
2014
  }
1972
2015
  onDynamicRecordOpened(record) {
1973
2016
  const entity = this.EffectiveEntity;
1974
2017
  if (entity && record) {
1975
2018
  const row = record;
1976
- this.RecordOpened.emit({ record: row, entity, compositeKey: buildCompositeKey(row, entity) });
2019
+ this.RecordOpened.emit({ record: row, entity, compositeKey: BuildCompositeKey(row, entity) });
1977
2020
  }
1978
2021
  }
1979
2022
  onDynamicConfigChanged(viewTypeId, config) {
@@ -2175,5 +2218,5 @@ export class EntityViewerComponent extends BaseAngularComponent {
2175
2218
  type: ViewChild,
2176
2219
  args: ['dynamicViewHost', { read: ViewContainerRef }]
2177
2220
  }] }); })();
2178
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EntityViewerComponent, { className: "EntityViewerComponent", filePath: "src/lib/entity-viewer/entity-viewer.component.ts", lineNumber: 135 }); })();
2221
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EntityViewerComponent, { className: "EntityViewerComponent", filePath: "src/lib/entity-viewer/entity-viewer.component.ts", lineNumber: 136 }); })();
2179
2222
  //# sourceMappingURL=entity-viewer.component.js.map