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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/lib/aggregate-panel/aggregate-panel.component.d.ts +18 -2
  2. package/dist/lib/aggregate-panel/aggregate-panel.component.d.ts.map +1 -1
  3. package/dist/lib/aggregate-panel/aggregate-panel.component.js +47 -18
  4. package/dist/lib/aggregate-panel/aggregate-panel.component.js.map +1 -1
  5. package/dist/lib/entity-cards/entity-cards.component.d.ts +1 -0
  6. package/dist/lib/entity-cards/entity-cards.component.d.ts.map +1 -1
  7. package/dist/lib/entity-cards/entity-cards.component.js +11 -2
  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 +18 -0
  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 +71 -25
  12. package/dist/lib/entity-data-grid/entity-data-grid.component.js.map +1 -1
  13. package/dist/lib/entity-record-detail-panel/entity-record-detail-panel.component.d.ts.map +1 -1
  14. package/dist/lib/entity-record-detail-panel/entity-record-detail-panel.component.js +10 -8
  15. package/dist/lib/entity-record-detail-panel/entity-record-detail-panel.component.js.map +1 -1
  16. package/dist/lib/entity-viewer/entity-viewer.component.d.ts +11 -0
  17. package/dist/lib/entity-viewer/entity-viewer.component.d.ts.map +1 -1
  18. package/dist/lib/entity-viewer/entity-viewer.component.js +29 -0
  19. package/dist/lib/entity-viewer/entity-viewer.component.js.map +1 -1
  20. package/dist/lib/utils/aggregate-field.util.d.ts +21 -0
  21. package/dist/lib/utils/aggregate-field.util.d.ts.map +1 -0
  22. package/dist/lib/utils/aggregate-field.util.js +40 -0
  23. package/dist/lib/utils/aggregate-field.util.js.map +1 -0
  24. package/dist/lib/view-config-panel/view-config-panel.component.d.ts +5 -1
  25. package/dist/lib/view-config-panel/view-config-panel.component.d.ts.map +1 -1
  26. package/dist/lib/view-config-panel/view-config-panel.component.js +15 -8
  27. package/dist/lib/view-config-panel/view-config-panel.component.js.map +1 -1
  28. package/dist/lib/view-types/renderers/grid-view-renderer.component.d.ts +93 -3
  29. package/dist/lib/view-types/renderers/grid-view-renderer.component.d.ts.map +1 -1
  30. package/dist/lib/view-types/renderers/grid-view-renderer.component.js +432 -10
  31. package/dist/lib/view-types/renderers/grid-view-renderer.component.js.map +1 -1
  32. package/dist/module.d.ts +5 -4
  33. package/dist/module.d.ts.map +1 -1
  34. package/dist/module.js +8 -1
  35. package/dist/module.js.map +1 -1
  36. package/dist/public-api.d.ts +1 -0
  37. package/dist/public-api.d.ts.map +1 -1
  38. package/dist/public-api.js +1 -0
  39. package/dist/public-api.js.map +1 -1
  40. package/package.json +20 -19
@@ -1 +1 @@
1
- {"version":3,"file":"entity-record-detail-panel.component.d.ts","sourceRoot":"","sources":["../../../src/lib/entity-record-detail-panel/entity-record-detail-panel.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entity-record-detail-panel.component.d.ts","sourceRoot":"","sources":["../../../src/lib/entity-record-detail-panel/entity-record-detail-panel.component.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Component, Input, Output, EventEmitter } from '@angular/core';
2
2
  import { BaseAngularComponent } from '@memberjunction/ng-base-types';
3
- import { EntityInfo, RunView, EntityFieldValueListType } from '@memberjunction/core';
3
+ import { EntityInfo, RunView, EntityFieldValueListType, IsDateOnlySQLType, FormatDateOnly } from '@memberjunction/core';
4
4
  import { buildCompositeKey, buildPkString } from '../utils/record.util';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "@memberjunction/ng-shared-generic";
@@ -668,7 +668,7 @@ export class EntityRecordDetailPanelComponent extends BaseAngularComponent {
668
668
  if (field) {
669
669
  const value = record[field.Name];
670
670
  if (value !== null && value !== undefined) {
671
- return this.formatFieldValue(value, field.Name);
671
+ return this.formatFieldValue(value, field);
672
672
  }
673
673
  }
674
674
  }
@@ -731,7 +731,7 @@ export class EntityRecordDetailPanelComponent extends BaseAngularComponent {
731
731
  type: isEnum ? 'enum' : 'regular',
732
732
  name: field.Name,
733
733
  label: this.formatFieldLabel(field),
734
- value: this.formatFieldValue(value, field.Name)
734
+ value: this.formatFieldValue(value, field)
735
735
  });
736
736
  }
737
737
  return fields;
@@ -796,12 +796,14 @@ export class EntityRecordDetailPanelComponent extends BaseAngularComponent {
796
796
  /**
797
797
  * Format field value for display
798
798
  */
799
- formatFieldValue(value, fieldName) {
799
+ formatFieldValue(value, field) {
800
800
  if (value === null || value === undefined)
801
801
  return '-';
802
- // Handle dates
802
+ // Handle dates. A `date` column is a calendar day that arrives as UTC midnight; a local-zone
803
+ // formatter would land on the previous day for every reader west of Greenwich (MJ#4210).
804
+ // A timestamp names an instant and stays in local time.
803
805
  if (value instanceof Date) {
804
- return value.toLocaleDateString();
806
+ return IsDateOnlySQLType(field.Type) ? FormatDateOnly(value) : value.toLocaleDateString();
805
807
  }
806
808
  // Handle booleans
807
809
  if (typeof value === 'boolean') {
@@ -809,7 +811,7 @@ export class EntityRecordDetailPanelComponent extends BaseAngularComponent {
809
811
  }
810
812
  // Handle numbers that look like currency
811
813
  if (typeof value === 'number') {
812
- const nameLower = fieldName.toLowerCase();
814
+ const nameLower = field.Name.toLowerCase();
813
815
  if (nameLower.includes('amount') ||
814
816
  nameLower.includes('price') ||
815
817
  nameLower.includes('cost') ||
@@ -996,7 +998,7 @@ export class EntityRecordDetailPanelComponent extends BaseAngularComponent {
996
998
  if (field) {
997
999
  const value = record[field.Name];
998
1000
  if (value !== null && value !== undefined) {
999
- return this.formatFieldValue(value, field.Name);
1001
+ return this.formatFieldValue(value, field);
1000
1002
  }
1001
1003
  }
1002
1004
  }
@@ -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 } 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.Name);\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.Name)\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, fieldName: string): string {\n if (value === null || value === undefined) return '-';\n\n // Handle dates\n if (value instanceof Date) {\n return 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 = fieldName.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.Name);\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 @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"]}
@@ -193,6 +193,17 @@ export declare class EntityViewerComponent extends BaseAngularComponent implemen
193
193
  get ViewEntity(): MJUserViewEntityExtended | null;
194
194
  set ViewEntity(value: MJUserViewEntityExtended | null);
195
195
  private _gridState;
196
+ /**
197
+ * True when {@link _gridState} was CAPTURED FROM THE RENDERER (the user resized, reordered or
198
+ * hid a column and the grid handed its state back), rather than supplied by the host through
199
+ * {@link GridState}.
200
+ *
201
+ * The distinction decides one thing only: whether an entity change may throw the state away.
202
+ * A captured state describes the entity that was on screen when it was captured, so it is
203
+ * meaningless — and actively harmful — against a different entity. A host-supplied one is the
204
+ * host's instruction about the view it is binding, and is never discarded on our own initiative.
205
+ */
206
+ private _gridStateFromRenderer;
196
207
  /**
197
208
  * Canonical grid state for the current view — the single, framework-wide source of truth for a
198
209
  * view's columns (visibility / order / width / formatting), sort, filter and aggregates. It is
@@ -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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"}
@@ -204,6 +204,20 @@ export class EntityViewerComponent extends BaseAngularComponent {
204
204
  }
205
205
  this.viewTypeConfigById.clear();
206
206
  this.InternalSortState = null;
207
+ // The canonical grid state, when WE captured it from the renderer. It was the other entity's
208
+ // column list, and `resolveCanonicalGridState()` prefers this field over the new entity's own
209
+ // saved view — so leaving it set applies the old entity's columnSettings to the new one and
210
+ // only the fields common to both survive. That is the same "no/too-few columns" symptom the
211
+ // lines above already guard against; this field was simply missed when the canonical store
212
+ // was introduced (MemberJunction/MJ#4244). Clearing it lets the new entity's saved view, or
213
+ // its metadata, supply the columns.
214
+ //
215
+ // A host-supplied `[GridState]` is deliberately NOT cleared: it is the host's instruction
216
+ // about the view it is binding, and a host that rebinds the entity rebinds that too.
217
+ if (this._gridStateFromRenderer) {
218
+ this._gridState = null;
219
+ this._gridStateFromRenderer = false;
220
+ }
207
221
  // Throw out the cached plug-in instances — they belong to the previous entity. The next
208
222
  // selection rebuilds them fresh for the new entity (correct columns / date fields / geo).
209
223
  this.clearDynamicRendererCache();
@@ -414,6 +428,17 @@ export class EntityViewerComponent extends BaseAngularComponent {
414
428
  }
415
429
  }
416
430
  _gridState = null;
431
+ /**
432
+ * True when {@link _gridState} was CAPTURED FROM THE RENDERER (the user resized, reordered or
433
+ * hid a column and the grid handed its state back), rather than supplied by the host through
434
+ * {@link GridState}.
435
+ *
436
+ * The distinction decides one thing only: whether an entity change may throw the state away.
437
+ * A captured state describes the entity that was on screen when it was captured, so it is
438
+ * meaningless — and actively harmful — against a different entity. A host-supplied one is the
439
+ * host's instruction about the view it is binding, and is never discarded on our own initiative.
440
+ */
441
+ _gridStateFromRenderer = false;
417
442
  /**
418
443
  * Canonical grid state for the current view — the single, framework-wide source of truth for a
419
444
  * view's columns (visibility / order / width / formatting), sort, filter and aggregates. It is
@@ -428,6 +453,8 @@ export class EntityViewerComponent extends BaseAngularComponent {
428
453
  set GridState(value) {
429
454
  const previous = this._gridState;
430
455
  this._gridState = value;
456
+ // Host-supplied, so it is no longer ours to discard on an entity change.
457
+ this._gridStateFromRenderer = false;
431
458
  if (this._initialized && value !== previous) {
432
459
  this.refreshCanonicalGridStateRenderer();
433
460
  }
@@ -1968,6 +1995,8 @@ export class EntityViewerComponent extends BaseAngularComponent {
1968
1995
  const newGridState = config['gridState'];
1969
1996
  if (newGridState) {
1970
1997
  this._gridState = newGridState;
1998
+ // Captured from the renderer, so it belongs to the CURRENT entity and must not outlive it.
1999
+ this._gridStateFromRenderer = true;
1971
2000
  }
1972
2001
  if (this.AutoSaveView && this.persistenceTarget() === 'record') {
1973
2002
  void this.persistCanonicalGridState(newGridState);