@memberjunction/ng-entity-viewer 6.1.4 → 6.1.5

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 -4
  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 +55 -45
  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/utils/aggregate-field.util.d.ts +21 -0
  17. package/dist/lib/utils/aggregate-field.util.d.ts.map +1 -0
  18. package/dist/lib/utils/aggregate-field.util.js +40 -0
  19. package/dist/lib/utils/aggregate-field.util.js.map +1 -0
  20. package/dist/lib/utils/export-column.util.d.ts +14 -0
  21. package/dist/lib/utils/export-column.util.d.ts.map +1 -0
  22. package/dist/lib/utils/export-column.util.js +34 -0
  23. package/dist/lib/utils/export-column.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/timeline-view-renderer.component.d.ts +2 -0
  29. package/dist/lib/view-types/renderers/timeline-view-renderer.component.d.ts.map +1 -1
  30. package/dist/lib/view-types/renderers/timeline-view-renderer.component.js +11 -2
  31. package/dist/lib/view-types/renderers/timeline-view-renderer.component.js.map +1 -1
  32. package/dist/lib/view-workspace/view-workspace.component.d.ts +2 -1
  33. package/dist/lib/view-workspace/view-workspace.component.d.ts.map +1 -1
  34. package/dist/lib/view-workspace/view-workspace.component.js +10 -4
  35. package/dist/lib/view-workspace/view-workspace.component.js.map +1 -1
  36. package/dist/public-api.d.ts +2 -0
  37. package/dist/public-api.d.ts.map +1 -1
  38. package/dist/public-api.js +2 -0
  39. package/dist/public-api.js.map +1 -1
  40. package/package.json +20 -20
@@ -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"]}
@@ -0,0 +1,21 @@
1
+ import type { EntityInfo, EntityFieldInfo } from '@memberjunction/core';
2
+ import type { MJUserViewEntity_IGridAggregate as ViewGridAggregate } from '@memberjunction/core-entities';
3
+ /**
4
+ * The one column an aggregate summarises, or null when it summarises anything more complex.
5
+ *
6
+ * An aggregate carries an expression and a value, never field metadata, so the column has to be
7
+ * read out of the expression: `MIN(IntakeDate)` and `MAX([Intake Date])` name one column, while
8
+ * `COUNT(*)`, `SUM(Amount) + 1` and `MIN(YEAR(IntakeDate))` do not. When the expression gives
9
+ * nothing, the column the aggregate is pinned under is the fallback.
10
+ *
11
+ * Parsed positionally rather than with a pattern: a regular expression over user-authored text is
12
+ * where backtracking blow-ups live (CodeQL js/polynomial-redos).
13
+ */
14
+ export declare function AggregateFieldName(agg: Pick<ViewGridAggregate, 'expression' | 'column'>): string | null;
15
+ /**
16
+ * The entity field an aggregate summarises, or null when it cannot be resolved. Resolving the
17
+ * field is what lets a display path tell a `date` column (a calendar day) from a timestamp (an
18
+ * instant) and render each in the right zone.
19
+ */
20
+ export declare function AggregateField(agg: Pick<ViewGridAggregate, 'expression' | 'column'>, entity: EntityInfo | null | undefined): EntityFieldInfo | null;
21
+ //# sourceMappingURL=aggregate-field.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregate-field.util.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/aggregate-field.util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,KAAK,EAAE,+BAA+B,IAAI,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAE1G;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,iBAAiB,EAAE,YAAY,GAAG,QAAQ,CAAC,GAAG,MAAM,GAAG,IAAI,CAEvG;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,iBAAiB,EAAE,YAAY,GAAG,QAAQ,CAAC,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,GAAG,eAAe,GAAG,IAAI,CAInJ"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * The one column an aggregate summarises, or null when it summarises anything more complex.
3
+ *
4
+ * An aggregate carries an expression and a value, never field metadata, so the column has to be
5
+ * read out of the expression: `MIN(IntakeDate)` and `MAX([Intake Date])` name one column, while
6
+ * `COUNT(*)`, `SUM(Amount) + 1` and `MIN(YEAR(IntakeDate))` do not. When the expression gives
7
+ * nothing, the column the aggregate is pinned under is the fallback.
8
+ *
9
+ * Parsed positionally rather than with a pattern: a regular expression over user-authored text is
10
+ * where backtracking blow-ups live (CodeQL js/polynomial-redos).
11
+ */
12
+ export function AggregateFieldName(agg) {
13
+ return singleFieldOfExpression(agg.expression) ?? agg.column ?? null;
14
+ }
15
+ /**
16
+ * The entity field an aggregate summarises, or null when it cannot be resolved. Resolving the
17
+ * field is what lets a display path tell a `date` column (a calendar day) from a timestamp (an
18
+ * instant) and render each in the right zone.
19
+ */
20
+ export function AggregateField(agg, entity) {
21
+ const name = AggregateFieldName(agg);
22
+ if (!name || !entity)
23
+ return null;
24
+ return entity.Fields.find(f => f.Name === name) ?? null;
25
+ }
26
+ function singleFieldOfExpression(expression) {
27
+ const text = (expression ?? '').trim();
28
+ const open = text.indexOf('(');
29
+ if (open <= 0 || !text.endsWith(')') || text.indexOf(')') !== text.length - 1)
30
+ return null;
31
+ if (!/^\w+$/.test(text.substring(0, open).trim()))
32
+ return null;
33
+ let inner = text.substring(open + 1, text.length - 1).trim();
34
+ if (inner.startsWith('[') && inner.endsWith(']'))
35
+ inner = inner.substring(1, inner.length - 1).trim();
36
+ if (inner.length === 0 || inner === '*' || inner.includes('(') || inner.includes(','))
37
+ return null;
38
+ return inner;
39
+ }
40
+ //# sourceMappingURL=aggregate-field.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregate-field.util.js","sourceRoot":"","sources":["../../../src/lib/utils/aggregate-field.util.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAqD;IACpF,OAAO,uBAAuB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC;AACzE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,GAAqD,EAAE,MAAqC;IACvH,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC;AAC5D,CAAC;AAED,SAAS,uBAAuB,CAAC,UAA8B;IAC3D,MAAM,IAAI,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3F,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/D,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7D,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACtG,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACnG,OAAO,KAAK,CAAC;AACjB,CAAC","sourcesContent":["import type { EntityInfo, EntityFieldInfo } from '@memberjunction/core';\nimport type { MJUserViewEntity_IGridAggregate as ViewGridAggregate } from '@memberjunction/core-entities';\n\n/**\n * The one column an aggregate summarises, or null when it summarises anything more complex.\n *\n * An aggregate carries an expression and a value, never field metadata, so the column has to be\n * read out of the expression: `MIN(IntakeDate)` and `MAX([Intake Date])` name one column, while\n * `COUNT(*)`, `SUM(Amount) + 1` and `MIN(YEAR(IntakeDate))` do not. When the expression gives\n * nothing, the column the aggregate is pinned under is the fallback.\n *\n * Parsed positionally rather than with a pattern: a regular expression over user-authored text is\n * where backtracking blow-ups live (CodeQL js/polynomial-redos).\n */\nexport function AggregateFieldName(agg: Pick<ViewGridAggregate, 'expression' | 'column'>): string | null {\n return singleFieldOfExpression(agg.expression) ?? agg.column ?? null;\n}\n\n/**\n * The entity field an aggregate summarises, or null when it cannot be resolved. Resolving the\n * field is what lets a display path tell a `date` column (a calendar day) from a timestamp (an\n * instant) and render each in the right zone.\n */\nexport function AggregateField(agg: Pick<ViewGridAggregate, 'expression' | 'column'>, entity: EntityInfo | null | undefined): EntityFieldInfo | null {\n const name = AggregateFieldName(agg);\n if (!name || !entity) return null;\n return entity.Fields.find(f => f.Name === name) ?? null;\n}\n\nfunction singleFieldOfExpression(expression: string | undefined): string | null {\n const text = (expression ?? '').trim();\n const open = text.indexOf('(');\n if (open <= 0 || !text.endsWith(')') || text.indexOf(')') !== text.length - 1) return null;\n if (!/^\\w+$/.test(text.substring(0, open).trim())) return null;\n let inner = text.substring(open + 1, text.length - 1).trim();\n if (inner.startsWith('[') && inner.endsWith(']')) inner = inner.substring(1, inner.length - 1).trim();\n if (inner.length === 0 || inner === '*' || inner.includes('(') || inner.includes(',')) return null;\n return inner;\n}\n"]}
@@ -0,0 +1,14 @@
1
+ import type { ColumnDataType } from '@memberjunction/export-engine';
2
+ /**
3
+ * The export column type for a field's SQL type: how the export engine formats that column.
4
+ *
5
+ * Shared by the grid's export and every host's fallback export (the view workspace, Explorer's view
6
+ * resource), so a view exports the same column the same way whichever view type is showing. A SQL
7
+ * `date` is a calendar day (`dateonly`: `YYYY-MM-DD` in CSV and JSON, a date cell on the stored day in
8
+ * Excel), as distinct from a timestamp (`date`: an instant). Untyped, a calendar day exported as a full
9
+ * ISO timestamp from Cards, Map and Timeline while the grid exported the day.
10
+ *
11
+ * @param sqlType The field's SQL type (`EntityFieldInfo.Type`); absent maps to `string`
12
+ */
13
+ export declare function ExportColumnTypeForSQLType(sqlType?: string | null): ColumnDataType;
14
+ //# sourceMappingURL=export-column.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-column.util.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/export-column.util.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,cAAc,CAoBlF"}
@@ -0,0 +1,34 @@
1
+ import { IsDateOnlySQLType } from '@memberjunction/core';
2
+ /**
3
+ * The export column type for a field's SQL type: how the export engine formats that column.
4
+ *
5
+ * Shared by the grid's export and every host's fallback export (the view workspace, Explorer's view
6
+ * resource), so a view exports the same column the same way whichever view type is showing. A SQL
7
+ * `date` is a calendar day (`dateonly`: `YYYY-MM-DD` in CSV and JSON, a date cell on the stored day in
8
+ * Excel), as distinct from a timestamp (`date`: an instant). Untyped, a calendar day exported as a full
9
+ * ISO timestamp from Cards, Map and Timeline while the grid exported the day.
10
+ *
11
+ * @param sqlType The field's SQL type (`EntityFieldInfo.Type`); absent maps to `string`
12
+ */
13
+ export function ExportColumnTypeForSQLType(sqlType) {
14
+ if (!sqlType)
15
+ return 'string';
16
+ const type = sqlType.toLowerCase();
17
+ if (type.includes('int') || type.includes('decimal') || type.includes('float') || type.includes('numeric')) {
18
+ return 'number';
19
+ }
20
+ if (IsDateOnlySQLType(type)) {
21
+ return 'dateonly';
22
+ }
23
+ if (type.includes('date') || type.includes('time')) {
24
+ return 'date';
25
+ }
26
+ if (type.includes('bit') || type.includes('bool')) {
27
+ return 'boolean';
28
+ }
29
+ if (type.includes('money') || type.includes('currency')) {
30
+ return 'currency';
31
+ }
32
+ return 'string';
33
+ }
34
+ //# sourceMappingURL=export-column.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-column.util.js","sourceRoot":"","sources":["../../../src/lib/utils/export-column.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAuB;IAChE,IAAI,CAAC,OAAO;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACnC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3G,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACxD,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC","sourcesContent":["import { IsDateOnlySQLType } from '@memberjunction/core';\nimport type { ColumnDataType } from '@memberjunction/export-engine';\n\n/**\n * The export column type for a field's SQL type: how the export engine formats that column.\n *\n * Shared by the grid's export and every host's fallback export (the view workspace, Explorer's view\n * resource), so a view exports the same column the same way whichever view type is showing. A SQL\n * `date` is a calendar day (`dateonly`: `YYYY-MM-DD` in CSV and JSON, a date cell on the stored day in\n * Excel), as distinct from a timestamp (`date`: an instant). Untyped, a calendar day exported as a full\n * ISO timestamp from Cards, Map and Timeline while the grid exported the day.\n *\n * @param sqlType The field's SQL type (`EntityFieldInfo.Type`); absent maps to `string`\n */\nexport function ExportColumnTypeForSQLType(sqlType?: string | null): ColumnDataType {\n if (!sqlType) return 'string';\n\n const type = sqlType.toLowerCase();\n if (type.includes('int') || type.includes('decimal') || type.includes('float') || type.includes('numeric')) {\n return 'number';\n }\n if (IsDateOnlySQLType(type)) {\n return 'dateonly';\n }\n if (type.includes('date') || type.includes('time')) {\n return 'date';\n }\n if (type.includes('bit') || type.includes('bool')) {\n return 'boolean';\n }\n if (type.includes('money') || type.includes('currency')) {\n return 'currency';\n }\n return 'string';\n}\n"]}
@@ -435,7 +435,11 @@ export declare class ViewConfigPanelComponent extends BaseAngularComponent imple
435
435
  /**
436
436
  * Format a value for preview display
437
437
  */
438
- FormatPreviewValue(value: unknown, format: ColumnFormat | undefined): string;
438
+ /**
439
+ * @param field The column's field, so a SQL `date` previews as its stored calendar day rather
440
+ * than shifting into the reader's zone (MJ#4210).
441
+ */
442
+ FormatPreviewValue(value: unknown, format: ColumnFormat | undefined, field?: EntityFieldInfo): string;
439
443
  private formatNumber;
440
444
  private formatCurrency;
441
445
  private formatPercent;
@@ -1 +1 @@
1
- {"version":3,"file":"view-config-panel.component.d.ts","sourceRoot":"","sources":["../../../src/lib/view-config-panel/view-config-panel.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"view-config-panel.component.d.ts","sourceRoot":"","sources":["../../../src/lib/view-config-panel/view-config-panel.component.ts"],"names":[],"mappings":"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"}