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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/lib/query-data-grid/models/query-grid-types.d.ts +10 -0
  2. package/dist/lib/query-data-grid/models/query-grid-types.d.ts.map +1 -1
  3. package/dist/lib/query-data-grid/models/query-grid-types.js +26 -6
  4. package/dist/lib/query-data-grid/models/query-grid-types.js.map +1 -1
  5. package/dist/lib/query-data-grid/query-data-grid.component.d.ts.map +1 -1
  6. package/dist/lib/query-data-grid/query-data-grid.component.js +19 -11
  7. package/dist/lib/query-data-grid/query-data-grid.component.js.map +1 -1
  8. package/dist/lib/query-pivot/query-pivot.component.d.ts +144 -0
  9. package/dist/lib/query-pivot/query-pivot.component.d.ts.map +1 -0
  10. package/dist/lib/query-pivot/query-pivot.component.js +434 -0
  11. package/dist/lib/query-pivot/query-pivot.component.js.map +1 -0
  12. package/dist/lib/query-pivot/query-pivot.compute.d.ts +36 -0
  13. package/dist/lib/query-pivot/query-pivot.compute.d.ts.map +1 -0
  14. package/dist/lib/query-pivot/query-pivot.compute.js +324 -0
  15. package/dist/lib/query-pivot/query-pivot.compute.js.map +1 -0
  16. package/dist/lib/query-pivot/query-pivot.types.d.ts +74 -0
  17. package/dist/lib/query-pivot/query-pivot.types.d.ts.map +1 -0
  18. package/dist/lib/query-pivot/query-pivot.types.js +2 -0
  19. package/dist/lib/query-pivot/query-pivot.types.js.map +1 -0
  20. package/dist/lib/query-row-detail/query-row-detail.component.d.ts +26 -0
  21. package/dist/lib/query-row-detail/query-row-detail.component.d.ts.map +1 -1
  22. package/dist/lib/query-row-detail/query-row-detail.component.js +79 -23
  23. package/dist/lib/query-row-detail/query-row-detail.component.js.map +1 -1
  24. package/dist/lib/query-viewer/query-viewer.component.js +5 -5
  25. package/dist/lib/query-viewer/query-viewer.component.js.map +1 -1
  26. package/dist/lib/query-viewer.module.d.ts +11 -10
  27. package/dist/lib/query-viewer.module.d.ts.map +1 -1
  28. package/dist/lib/query-viewer.module.js +9 -4
  29. package/dist/lib/query-viewer.module.js.map +1 -1
  30. package/dist/public-api.d.ts +3 -0
  31. package/dist/public-api.d.ts.map +1 -1
  32. package/dist/public-api.js +4 -1
  33. package/dist/public-api.js.map +1 -1
  34. package/package.json +14 -14
@@ -249,22 +249,32 @@ export interface TargetEntityInfo {
249
249
  * - If the source field is a foreign key, target is the related entity
250
250
  * Also retrieves the target entity's icon for display in column headers.
251
251
  */
252
+ export declare function ResolveTargetEntity(sourceEntityName: string | undefined, sourceFieldName: string | undefined, md: IMetadataProvider): TargetEntityInfo;
253
+ /** @deprecated Use {@link ResolveTargetEntity}. */
252
254
  export declare function resolveTargetEntity(sourceEntityName: string | undefined, sourceFieldName: string | undefined, md: IMetadataProvider): TargetEntityInfo;
253
255
  /**
254
256
  * Builds column configs from QueryFieldInfo metadata
255
257
  */
258
+ export declare function BuildColumnsFromQueryFields(fields: MJQueryFieldEntity[], provider?: IMetadataProvider): QueryGridColumnConfig[];
259
+ /** @deprecated Use {@link BuildColumnsFromQueryFields}. */
256
260
  export declare function buildColumnsFromQueryFields(fields: MJQueryFieldEntity[], provider?: IMetadataProvider): QueryGridColumnConfig[];
257
261
  /**
258
262
  * Gets the User Settings key for query grid state
259
263
  */
264
+ export declare function GetQueryGridStateKey(queryId: string): string;
265
+ /** @deprecated Use {@link GetQueryGridStateKey}. */
260
266
  export declare function getQueryGridStateKey(queryId: string): string;
261
267
  /**
262
268
  * Gets the User Settings key for query parameters
263
269
  */
270
+ export declare function GetQueryParamsKey(queryId: string): string;
271
+ /** @deprecated Use {@link GetQueryParamsKey}. */
264
272
  export declare function getQueryParamsKey(queryId: string): string;
265
273
  /**
266
274
  * Infers column configuration from actual data when query has no field metadata.
267
275
  * Examines the first row to determine column names and types.
268
276
  */
277
+ export declare function BuildColumnsFromData(data: Record<string, unknown>[]): QueryGridColumnConfig[];
278
+ /** @deprecated Use {@link BuildColumnsFromData}. */
269
279
  export declare function buildColumnsFromData(data: Record<string, unknown>[]): QueryGridColumnConfig[];
270
280
  //# sourceMappingURL=query-grid-types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"query-grid-types.d.ts","sourceRoot":"","sources":["../../../../src/lib/query-data-grid/models/query-grid-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query-grid-types.d.ts","sourceRoot":"","sources":["../../../../src/lib/query-data-grid/models/query-grid-types.ts"],"names":[],"mappings":"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"}
@@ -40,7 +40,7 @@ export const DEFAULT_QUERY_VISUAL_CONFIG = {
40
40
  * - If the source field is a foreign key, target is the related entity
41
41
  * Also retrieves the target entity's icon for display in column headers.
42
42
  */
43
- export function resolveTargetEntity(sourceEntityName, sourceFieldName, md) {
43
+ export function ResolveTargetEntity(sourceEntityName, sourceFieldName, md) {
44
44
  if (!sourceEntityName || !sourceFieldName) {
45
45
  return { isPrimaryKey: false, isForeignKey: false };
46
46
  }
@@ -77,17 +77,21 @@ export function resolveTargetEntity(sourceEntityName, sourceFieldName, md) {
77
77
  }
78
78
  return { isPrimaryKey: false, isForeignKey: false };
79
79
  }
80
+ /** @deprecated Use {@link ResolveTargetEntity}. */
81
+ export function resolveTargetEntity(sourceEntityName, sourceFieldName, md) {
82
+ return ResolveTargetEntity(sourceEntityName, sourceFieldName, md);
83
+ }
80
84
  /**
81
85
  * Builds column configs from QueryFieldInfo metadata
82
86
  */
83
- export function buildColumnsFromQueryFields(fields, provider) {
87
+ export function BuildColumnsFromQueryFields(fields, provider) {
84
88
  // Metadata.Provider IS the global IMetadataProvider — no cast needed, and it names the fallback.
85
89
  const md = provider ?? Metadata.Provider;
86
90
  return fields
87
91
  .sort((a, b) => (a.Sequence || 0) - (b.Sequence || 0))
88
92
  .map((field, index) => {
89
93
  // Resolve the target entity using metadata
90
- const targetInfo = resolveTargetEntity(field.SourceEntity ?? undefined, field.SourceFieldName ?? undefined, md);
94
+ const targetInfo = ResolveTargetEntity(field.SourceEntity ?? undefined, field.SourceFieldName ?? undefined, md);
91
95
  // Determine if this is an entity link
92
96
  // It's linkable if we have a valid target entity (either PK or FK)
93
97
  const isEntityLink = !!(targetInfo.targetEntityName && (targetInfo.isPrimaryKey || targetInfo.isForeignKey));
@@ -129,23 +133,35 @@ export function buildColumnsFromQueryFields(fields, provider) {
129
133
  };
130
134
  });
131
135
  }
136
+ /** @deprecated Use {@link BuildColumnsFromQueryFields}. */
137
+ export function buildColumnsFromQueryFields(fields, provider) {
138
+ return BuildColumnsFromQueryFields(fields, provider);
139
+ }
132
140
  /**
133
141
  * Gets the User Settings key for query grid state
134
142
  */
135
- export function getQueryGridStateKey(queryId) {
143
+ export function GetQueryGridStateKey(queryId) {
136
144
  return `QueryViewer_${queryId}_GridState`;
137
145
  }
146
+ /** @deprecated Use {@link GetQueryGridStateKey}. */
147
+ export function getQueryGridStateKey(queryId) {
148
+ return GetQueryGridStateKey(queryId);
149
+ }
138
150
  /**
139
151
  * Gets the User Settings key for query parameters
140
152
  */
141
- export function getQueryParamsKey(queryId) {
153
+ export function GetQueryParamsKey(queryId) {
142
154
  return `QueryViewer_${queryId}_LastParams`;
143
155
  }
156
+ /** @deprecated Use {@link GetQueryParamsKey}. */
157
+ export function getQueryParamsKey(queryId) {
158
+ return GetQueryParamsKey(queryId);
159
+ }
144
160
  /**
145
161
  * Infers column configuration from actual data when query has no field metadata.
146
162
  * Examines the first row to determine column names and types.
147
163
  */
148
- export function buildColumnsFromData(data) {
164
+ export function BuildColumnsFromData(data) {
149
165
  if (!data || data.length === 0) {
150
166
  return [];
151
167
  }
@@ -204,4 +220,8 @@ export function buildColumnsFromData(data) {
204
220
  };
205
221
  });
206
222
  }
223
+ /** @deprecated Use {@link BuildColumnsFromData}. */
224
+ export function buildColumnsFromData(data) {
225
+ return BuildColumnsFromData(data);
226
+ }
207
227
  //# sourceMappingURL=query-grid-types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"query-grid-types.js","sourceRoot":"","sources":["../../../../src/lib/query-data-grid/models/query-grid-types.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Types and interfaces for the Query Data Grid component.\n * These are tailored for query results which differ from entity data:\n * - Read-only (no CRUD operations)\n * - Client-side sorting only (query SQL defines ORDER BY)\n * - No smart filter (parameters only)\n * - Support for entity linking via SourceEntityID\n */\n\nimport { IMetadataProvider, Metadata } from '@memberjunction/core';\nimport { MJQueryFieldEntity } from '@memberjunction/core-entities';\n\n// ========================================\n// Selection Mode\n// ========================================\n\n/**\n * Selection mode for the query grid\n * - 'none': No selection allowed\n * - 'single': Only one row can be selected at a time\n * - 'multiple': Multiple rows can be selected (click to toggle)\n * - 'checkbox': Checkbox column for selection\n */\nexport type QueryGridSelectionMode = 'none' | 'single' | 'multiple' | 'checkbox';\n\n// ========================================\n// Column Configuration\n// ========================================\n\n/**\n * Configuration for a query grid column\n * Derived from QueryFieldInfo metadata\n */\nexport interface QueryGridColumnConfig {\n /** Field name from query results */\n field: string;\n\n /** Display title (defaults to field name) */\n title: string;\n\n /** Description/tooltip for the column header */\n description?: string;\n\n /** Column width in pixels */\n width?: number;\n\n /** Minimum width for resizing */\n minWidth?: number;\n\n /** Maximum width for resizing */\n maxWidth?: number;\n\n /** Column is visible */\n visible: boolean;\n\n /** Column is sortable (client-side) */\n sortable: boolean;\n\n /** Column is resizable */\n resizable: boolean;\n\n /** Column is reorderable */\n reorderable: boolean;\n\n /** SQL base type for formatting */\n sqlBaseType: string;\n\n /** SQL full type for display */\n sqlFullType: string;\n\n /** Text alignment */\n align?: 'left' | 'center' | 'right';\n\n /** Order/sequence of this column */\n order: number;\n\n /** Source entity ID if this column references an entity */\n sourceEntityId?: string;\n\n /** Source entity name if this column references an entity */\n sourceEntityName?: string;\n\n /** Source field name in the entity (e.g., 'ID' for primary key) */\n sourceFieldName?: string;\n\n /** Whether this column contains linkable entity IDs */\n isEntityLink: boolean;\n\n /**\n * The entity name to navigate to when clicking the link.\n * - For primary keys: this is the source entity itself\n * - For foreign keys: this is the related entity the FK points to\n */\n targetEntityName?: string;\n\n /**\n * The entity ID to navigate to when clicking the link.\n */\n targetEntityId?: string;\n\n /**\n * Whether this field is a primary key of the source entity\n */\n isPrimaryKey?: boolean;\n\n /**\n * Whether this field is a foreign key to another entity\n */\n isForeignKey?: boolean;\n\n /**\n * Icon class for the target entity (from EntityInfo.Icon)\n * Used to display the entity's icon in the column header\n */\n targetEntityIcon?: string;\n\n /** Column pinning position */\n pinned?: 'left' | 'right' | null;\n\n /** Flex grow factor for auto-sizing */\n flex?: number;\n}\n\n// ========================================\n// Sort State\n// ========================================\n\n/**\n * Sort state for a column (client-side sorting)\n */\nexport interface QueryGridSortState {\n /** Field name being sorted */\n field: string;\n /** Sort direction */\n direction: 'asc' | 'desc';\n /** Index for multi-sort ordering */\n index: number;\n}\n\n// ========================================\n// Grid State (for persistence)\n// ========================================\n\n/**\n * Complete grid state for persistence to User Settings\n */\nexport interface QueryGridState {\n /** Column states */\n columns: Array<{\n field: string;\n width?: number;\n visible: boolean;\n order: number;\n pinned?: 'left' | 'right' | null;\n }>;\n /** Sort state (client-side) */\n sort: QueryGridSortState[];\n}\n\n// ========================================\n// Parameter State (for persistence)\n// ========================================\n\n/**\n * Parameter values for a query execution\n */\nexport interface QueryParameterValues {\n [parameterName: string]: string | number | boolean | Date | string[] | null;\n}\n\n// ========================================\n// Visual Configuration\n// ========================================\n\n/**\n * Header style preset options\n */\nexport type QueryGridHeaderStyle = 'flat' | 'elevated' | 'gradient' | 'bold';\n\n/**\n * Configuration for query grid visual appearance\n */\nexport interface QueryGridVisualConfig {\n /** Header style preset */\n headerStyle?: QueryGridHeaderStyle;\n /** Custom header background color */\n headerBackground?: string;\n /** Custom header text color */\n headerTextColor?: string;\n /** Show bottom shadow/border on header */\n headerShadow?: boolean;\n /** Enable alternating row colors (zebra striping) */\n alternateRows?: boolean;\n /** Contrast level for alternating rows */\n alternateRowContrast?: 'subtle' | 'medium' | 'strong';\n /** Enable smooth hover transitions */\n hoverTransitions?: boolean;\n /** Right-align numeric columns automatically */\n rightAlignNumbers?: boolean;\n /** Format dates with a friendly format */\n friendlyDates?: boolean;\n /** Render email cells as clickable mailto links */\n clickableEmails?: boolean;\n /** Render boolean cells as checkmark/x icons */\n booleanIcons?: boolean;\n /** Render URL cells as clickable links */\n clickableUrls?: boolean;\n /** Selection indicator color */\n selectionIndicatorColor?: string;\n /** Selection indicator width */\n selectionIndicatorWidth?: number;\n /** Selection background color */\n selectionBackground?: string;\n /** Checkbox style */\n checkboxStyle?: 'default' | 'rounded' | 'filled';\n /** Checkbox accent color */\n checkboxColor?: string;\n /** Show skeleton loading rows */\n skeletonLoading?: boolean;\n /** Number of skeleton rows */\n skeletonRowCount?: number;\n /** Border radius for container */\n borderRadius?: number;\n /** Cell padding preset */\n cellPadding?: 'compact' | 'normal' | 'comfortable';\n /** Primary accent color */\n accentColor?: string;\n}\n\n/**\n * Default visual configuration for query grid\n */\nexport const DEFAULT_QUERY_VISUAL_CONFIG: Required<QueryGridVisualConfig> = {\n headerStyle: 'elevated',\n headerBackground: '',\n headerTextColor: '',\n headerShadow: true,\n alternateRows: true,\n alternateRowContrast: 'medium',\n hoverTransitions: true,\n rightAlignNumbers: true,\n friendlyDates: true,\n clickableEmails: true,\n booleanIcons: true,\n clickableUrls: true,\n selectionIndicatorColor: '#f9a825',\n selectionIndicatorWidth: 3,\n selectionBackground: '#fff9e6',\n checkboxStyle: 'rounded',\n checkboxColor: '#2196F3',\n skeletonLoading: true,\n skeletonRowCount: 8,\n borderRadius: 0,\n cellPadding: 'normal',\n accentColor: '#2196F3'\n};\n\n// ========================================\n// Export Options\n// ========================================\n\n/**\n * Export options for query results\n */\nexport interface QueryExportOptions {\n /** Export only visible columns */\n visibleColumnsOnly?: boolean;\n /** Export only selected rows */\n selectedRowsOnly?: boolean;\n /** Include headers */\n includeHeaders?: boolean;\n /** Custom column mapping */\n columnMapping?: Record<string, string>;\n}\n\n// ========================================\n// Events\n// ========================================\n\n/**\n * Event fired when a row is clicked\n */\nexport interface QueryRowClickEvent {\n /** The row data */\n rowData: Record<string, unknown>;\n /** Row index */\n rowIndex: number;\n /** Column that was clicked */\n column?: QueryGridColumnConfig;\n /** Cell value */\n cellValue?: unknown;\n /** Original mouse event */\n mouseEvent: MouseEvent;\n}\n\n/**\n * Event fired when an entity link is clicked\n */\nexport interface QueryEntityLinkClickEvent {\n /** Entity name */\n entityName: string;\n /** Record ID (primary key value) */\n recordId: string;\n /** The column config (null if clicked from row detail panel) */\n column: QueryGridColumnConfig | null;\n /** The row data */\n rowData: Record<string, unknown>;\n}\n\n/**\n * Event fired when grid state changes\n */\nexport interface QueryGridStateChangedEvent {\n /** The new grid state */\n state: QueryGridState;\n /** What changed */\n changeType: 'column-resize' | 'column-move' | 'column-visibility' | 'sort';\n}\n\n/**\n * Event fired when selection changes\n */\nexport interface QuerySelectionChangedEvent {\n /** Selected row indices */\n selectedIndices: number[];\n /** Selected row data */\n selectedRows: Record<string, unknown>[];\n}\n\n// ========================================\n// Utility Functions\n// ========================================\n\n/**\n * Result of resolving the target entity for navigation\n */\nexport interface TargetEntityInfo {\n targetEntityName?: string;\n targetEntityId?: string;\n targetEntityIcon?: string;\n isPrimaryKey: boolean;\n isForeignKey: boolean;\n}\n\n/**\n * Determines the target entity for navigation based on source entity field metadata.\n * - If the source field is a primary key, target is the source entity itself\n * - If the source field is a foreign key, target is the related entity\n * Also retrieves the target entity's icon for display in column headers.\n */\nexport function resolveTargetEntity(\n sourceEntityName: string | undefined,\n sourceFieldName: string | undefined,\n md: IMetadataProvider\n): TargetEntityInfo {\n if (!sourceEntityName || !sourceFieldName) {\n return { isPrimaryKey: false, isForeignKey: false };\n }\n\n // Look up the source entity\n const sourceEntity = md.EntityByName(sourceEntityName);\n if (!sourceEntity) {\n return { isPrimaryKey: false, isForeignKey: false };\n }\n\n // Find the field in the source entity\n const entityField = sourceEntity.Fields.find(f => f.Name === sourceFieldName);\n if (!entityField) {\n return { isPrimaryKey: false, isForeignKey: false };\n }\n\n // Check if it's a primary key\n if (entityField.IsPrimaryKey) {\n return {\n targetEntityName: sourceEntityName,\n targetEntityId: sourceEntity.ID,\n targetEntityIcon: sourceEntity.Icon || undefined,\n isPrimaryKey: true,\n isForeignKey: false\n };\n }\n\n // Check if it's a foreign key (has RelatedEntity)\n if (entityField.RelatedEntity && entityField.RelatedEntity.trim().length > 0) {\n const relatedEntity = md.EntityByName(entityField.RelatedEntity);\n return {\n targetEntityName: entityField.RelatedEntity,\n targetEntityId: relatedEntity?.ID,\n targetEntityIcon: relatedEntity?.Icon || undefined,\n isPrimaryKey: false,\n isForeignKey: true\n };\n }\n\n return { isPrimaryKey: false, isForeignKey: false };\n}\n\n/**\n * Builds column configs from QueryFieldInfo metadata\n */\nexport function buildColumnsFromQueryFields(fields: MJQueryFieldEntity[], provider?: IMetadataProvider): QueryGridColumnConfig[] {\n // Metadata.Provider IS the global IMetadataProvider — no cast needed, and it names the fallback.\n const md = provider ?? Metadata.Provider;\n\n return fields\n .sort((a, b) => (a.Sequence || 0) - (b.Sequence || 0))\n .map((field, index) => {\n // Resolve the target entity using metadata\n const targetInfo = resolveTargetEntity(field.SourceEntity ?? undefined, field.SourceFieldName ?? undefined, md);\n\n // Determine if this is an entity link\n // It's linkable if we have a valid target entity (either PK or FK)\n const isEntityLink = !!(targetInfo.targetEntityName && (targetInfo.isPrimaryKey || targetInfo.isForeignKey));\n\n // Determine alignment based on type\n let align: 'left' | 'center' | 'right' = 'left';\n const baseType = (field.SQLBaseType || '').toLowerCase();\n if (['int', 'bigint', 'decimal', 'numeric', 'float', 'money', 'smallmoney', 'real'].includes(baseType)) {\n align = 'right';\n } else if (['bit'].includes(baseType)) {\n align = 'center';\n }\n\n return {\n field: field.Name,\n title: field.Name, // Could be enhanced to parse CamelCase\n description: field.Description || undefined,\n width: undefined,\n minWidth: 80,\n maxWidth: undefined, // No max width limit - let users resize freely\n visible: true,\n sortable: true,\n resizable: true,\n reorderable: true,\n sqlBaseType: field.SQLBaseType || 'nvarchar',\n sqlFullType: field.SQLFullType || 'nvarchar(max)',\n align,\n order: index,\n sourceEntityId: field.SourceEntityID || undefined,\n sourceEntityName: field.SourceEntity || undefined,\n sourceFieldName: field.SourceFieldName || undefined,\n isEntityLink,\n targetEntityName: targetInfo.targetEntityName,\n targetEntityId: targetInfo.targetEntityId,\n isPrimaryKey: targetInfo.isPrimaryKey,\n isForeignKey: targetInfo.isForeignKey,\n targetEntityIcon: targetInfo.targetEntityIcon,\n pinned: null,\n flex: undefined\n };\n });\n}\n\n/**\n * Gets the User Settings key for query grid state\n */\nexport function getQueryGridStateKey(queryId: string): string {\n return `QueryViewer_${queryId}_GridState`;\n}\n\n/**\n * Gets the User Settings key for query parameters\n */\nexport function getQueryParamsKey(queryId: string): string {\n return `QueryViewer_${queryId}_LastParams`;\n}\n\n/**\n * Infers column configuration from actual data when query has no field metadata.\n * Examines the first row to determine column names and types.\n */\nexport function buildColumnsFromData(data: Record<string, unknown>[]): QueryGridColumnConfig[] {\n if (!data || data.length === 0) {\n return [];\n }\n\n // Get column names from first row\n const firstRow = data[0];\n const columnNames = Object.keys(firstRow);\n\n return columnNames.map((name, index) => {\n // Infer type from value\n const value = firstRow[name];\n let sqlBaseType = 'nvarchar';\n let align: 'left' | 'center' | 'right' = 'left';\n\n if (typeof value === 'number') {\n sqlBaseType = Number.isInteger(value) ? 'int' : 'decimal';\n align = 'right';\n } else if (typeof value === 'boolean') {\n sqlBaseType = 'bit';\n align = 'center';\n } else if (value instanceof Date) {\n sqlBaseType = 'datetime';\n } else if (typeof value === 'string') {\n // Check if it looks like a date\n const datePattern = /^\\d{4}-\\d{2}-\\d{2}/;\n if (datePattern.test(value)) {\n sqlBaseType = 'datetime';\n }\n }\n\n return {\n field: name,\n title: name,\n description: undefined,\n width: undefined,\n minWidth: 80,\n maxWidth: undefined,\n visible: true,\n sortable: true,\n resizable: true,\n reorderable: true,\n sqlBaseType,\n sqlFullType: sqlBaseType,\n align,\n order: index,\n sourceEntityId: undefined,\n sourceEntityName: undefined,\n sourceFieldName: undefined,\n isEntityLink: false,\n targetEntityName: undefined,\n targetEntityId: undefined,\n isPrimaryKey: false,\n isForeignKey: false,\n targetEntityIcon: undefined,\n pinned: null,\n flex: undefined\n };\n });\n}\n"]}
1
+ {"version":3,"file":"query-grid-types.js","sourceRoot":"","sources":["../../../../src/lib/query-data-grid/models/query-grid-types.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Types and interfaces for the Query Data Grid component.\n * These are tailored for query results which differ from entity data:\n * - Read-only (no CRUD operations)\n * - Client-side sorting only (query SQL defines ORDER BY)\n * - No smart filter (parameters only)\n * - Support for entity linking via SourceEntityID\n */\n\nimport { IMetadataProvider, Metadata } from '@memberjunction/core';\nimport { MJQueryFieldEntity } from '@memberjunction/core-entities';\n\n// ========================================\n// Selection Mode\n// ========================================\n\n/**\n * Selection mode for the query grid\n * - 'none': No selection allowed\n * - 'single': Only one row can be selected at a time\n * - 'multiple': Multiple rows can be selected (click to toggle)\n * - 'checkbox': Checkbox column for selection\n */\nexport type QueryGridSelectionMode = 'none' | 'single' | 'multiple' | 'checkbox';\n\n// ========================================\n// Column Configuration\n// ========================================\n\n/**\n * Configuration for a query grid column\n * Derived from QueryFieldInfo metadata\n */\nexport interface QueryGridColumnConfig {\n /** Field name from query results */\n field: string;\n\n /** Display title (defaults to field name) */\n title: string;\n\n /** Description/tooltip for the column header */\n description?: string;\n\n /** Column width in pixels */\n width?: number;\n\n /** Minimum width for resizing */\n minWidth?: number;\n\n /** Maximum width for resizing */\n maxWidth?: number;\n\n /** Column is visible */\n visible: boolean;\n\n /** Column is sortable (client-side) */\n sortable: boolean;\n\n /** Column is resizable */\n resizable: boolean;\n\n /** Column is reorderable */\n reorderable: boolean;\n\n /** SQL base type for formatting */\n sqlBaseType: string;\n\n /** SQL full type for display */\n sqlFullType: string;\n\n /** Text alignment */\n align?: 'left' | 'center' | 'right';\n\n /** Order/sequence of this column */\n order: number;\n\n /** Source entity ID if this column references an entity */\n sourceEntityId?: string;\n\n /** Source entity name if this column references an entity */\n sourceEntityName?: string;\n\n /** Source field name in the entity (e.g., 'ID' for primary key) */\n sourceFieldName?: string;\n\n /** Whether this column contains linkable entity IDs */\n isEntityLink: boolean;\n\n /**\n * The entity name to navigate to when clicking the link.\n * - For primary keys: this is the source entity itself\n * - For foreign keys: this is the related entity the FK points to\n */\n targetEntityName?: string;\n\n /**\n * The entity ID to navigate to when clicking the link.\n */\n targetEntityId?: string;\n\n /**\n * Whether this field is a primary key of the source entity\n */\n isPrimaryKey?: boolean;\n\n /**\n * Whether this field is a foreign key to another entity\n */\n isForeignKey?: boolean;\n\n /**\n * Icon class for the target entity (from EntityInfo.Icon)\n * Used to display the entity's icon in the column header\n */\n targetEntityIcon?: string;\n\n /** Column pinning position */\n pinned?: 'left' | 'right' | null;\n\n /** Flex grow factor for auto-sizing */\n flex?: number;\n}\n\n// ========================================\n// Sort State\n// ========================================\n\n/**\n * Sort state for a column (client-side sorting)\n */\nexport interface QueryGridSortState {\n /** Field name being sorted */\n field: string;\n /** Sort direction */\n direction: 'asc' | 'desc';\n /** Index for multi-sort ordering */\n index: number;\n}\n\n// ========================================\n// Grid State (for persistence)\n// ========================================\n\n/**\n * Complete grid state for persistence to User Settings\n */\nexport interface QueryGridState {\n /** Column states */\n columns: Array<{\n field: string;\n width?: number;\n visible: boolean;\n order: number;\n pinned?: 'left' | 'right' | null;\n }>;\n /** Sort state (client-side) */\n sort: QueryGridSortState[];\n}\n\n// ========================================\n// Parameter State (for persistence)\n// ========================================\n\n/**\n * Parameter values for a query execution\n */\nexport interface QueryParameterValues {\n [parameterName: string]: string | number | boolean | Date | string[] | null;\n}\n\n// ========================================\n// Visual Configuration\n// ========================================\n\n/**\n * Header style preset options\n */\nexport type QueryGridHeaderStyle = 'flat' | 'elevated' | 'gradient' | 'bold';\n\n/**\n * Configuration for query grid visual appearance\n */\nexport interface QueryGridVisualConfig {\n /** Header style preset */\n headerStyle?: QueryGridHeaderStyle;\n /** Custom header background color */\n headerBackground?: string;\n /** Custom header text color */\n headerTextColor?: string;\n /** Show bottom shadow/border on header */\n headerShadow?: boolean;\n /** Enable alternating row colors (zebra striping) */\n alternateRows?: boolean;\n /** Contrast level for alternating rows */\n alternateRowContrast?: 'subtle' | 'medium' | 'strong';\n /** Enable smooth hover transitions */\n hoverTransitions?: boolean;\n /** Right-align numeric columns automatically */\n rightAlignNumbers?: boolean;\n /** Format dates with a friendly format */\n friendlyDates?: boolean;\n /** Render email cells as clickable mailto links */\n clickableEmails?: boolean;\n /** Render boolean cells as checkmark/x icons */\n booleanIcons?: boolean;\n /** Render URL cells as clickable links */\n clickableUrls?: boolean;\n /** Selection indicator color */\n selectionIndicatorColor?: string;\n /** Selection indicator width */\n selectionIndicatorWidth?: number;\n /** Selection background color */\n selectionBackground?: string;\n /** Checkbox style */\n checkboxStyle?: 'default' | 'rounded' | 'filled';\n /** Checkbox accent color */\n checkboxColor?: string;\n /** Show skeleton loading rows */\n skeletonLoading?: boolean;\n /** Number of skeleton rows */\n skeletonRowCount?: number;\n /** Border radius for container */\n borderRadius?: number;\n /** Cell padding preset */\n cellPadding?: 'compact' | 'normal' | 'comfortable';\n /** Primary accent color */\n accentColor?: string;\n}\n\n/**\n * Default visual configuration for query grid\n */\nexport const DEFAULT_QUERY_VISUAL_CONFIG: Required<QueryGridVisualConfig> = {\n headerStyle: 'elevated',\n headerBackground: '',\n headerTextColor: '',\n headerShadow: true,\n alternateRows: true,\n alternateRowContrast: 'medium',\n hoverTransitions: true,\n rightAlignNumbers: true,\n friendlyDates: true,\n clickableEmails: true,\n booleanIcons: true,\n clickableUrls: true,\n selectionIndicatorColor: '#f9a825',\n selectionIndicatorWidth: 3,\n selectionBackground: '#fff9e6',\n checkboxStyle: 'rounded',\n checkboxColor: '#2196F3',\n skeletonLoading: true,\n skeletonRowCount: 8,\n borderRadius: 0,\n cellPadding: 'normal',\n accentColor: '#2196F3'\n};\n\n// ========================================\n// Export Options\n// ========================================\n\n/**\n * Export options for query results\n */\nexport interface QueryExportOptions {\n /** Export only visible columns */\n visibleColumnsOnly?: boolean;\n /** Export only selected rows */\n selectedRowsOnly?: boolean;\n /** Include headers */\n includeHeaders?: boolean;\n /** Custom column mapping */\n columnMapping?: Record<string, string>;\n}\n\n// ========================================\n// Events\n// ========================================\n\n/**\n * Event fired when a row is clicked\n */\nexport interface QueryRowClickEvent {\n /** The row data */\n rowData: Record<string, unknown>;\n /** Row index */\n rowIndex: number;\n /** Column that was clicked */\n column?: QueryGridColumnConfig;\n /** Cell value */\n cellValue?: unknown;\n /** Original mouse event */\n mouseEvent: MouseEvent;\n}\n\n/**\n * Event fired when an entity link is clicked\n */\nexport interface QueryEntityLinkClickEvent {\n /** Entity name */\n entityName: string;\n /** Record ID (primary key value) */\n recordId: string;\n /** The column config (null if clicked from row detail panel) */\n column: QueryGridColumnConfig | null;\n /** The row data */\n rowData: Record<string, unknown>;\n}\n\n/**\n * Event fired when grid state changes\n */\nexport interface QueryGridStateChangedEvent {\n /** The new grid state */\n state: QueryGridState;\n /** What changed */\n changeType: 'column-resize' | 'column-move' | 'column-visibility' | 'sort';\n}\n\n/**\n * Event fired when selection changes\n */\nexport interface QuerySelectionChangedEvent {\n /** Selected row indices */\n selectedIndices: number[];\n /** Selected row data */\n selectedRows: Record<string, unknown>[];\n}\n\n// ========================================\n// Utility Functions\n// ========================================\n\n/**\n * Result of resolving the target entity for navigation\n */\nexport interface TargetEntityInfo {\n targetEntityName?: string;\n targetEntityId?: string;\n targetEntityIcon?: string;\n isPrimaryKey: boolean;\n isForeignKey: boolean;\n}\n\n/**\n * Determines the target entity for navigation based on source entity field metadata.\n * - If the source field is a primary key, target is the source entity itself\n * - If the source field is a foreign key, target is the related entity\n * Also retrieves the target entity's icon for display in column headers.\n */\nexport function ResolveTargetEntity(\n sourceEntityName: string | undefined,\n sourceFieldName: string | undefined,\n md: IMetadataProvider\n): TargetEntityInfo {\n if (!sourceEntityName || !sourceFieldName) {\n return { isPrimaryKey: false, isForeignKey: false };\n }\n\n // Look up the source entity\n const sourceEntity = md.EntityByName(sourceEntityName);\n if (!sourceEntity) {\n return { isPrimaryKey: false, isForeignKey: false };\n }\n\n // Find the field in the source entity\n const entityField = sourceEntity.Fields.find(f => f.Name === sourceFieldName);\n if (!entityField) {\n return { isPrimaryKey: false, isForeignKey: false };\n }\n\n // Check if it's a primary key\n if (entityField.IsPrimaryKey) {\n return {\n targetEntityName: sourceEntityName,\n targetEntityId: sourceEntity.ID,\n targetEntityIcon: sourceEntity.Icon || undefined,\n isPrimaryKey: true,\n isForeignKey: false\n };\n }\n\n // Check if it's a foreign key (has RelatedEntity)\n if (entityField.RelatedEntity && entityField.RelatedEntity.trim().length > 0) {\n const relatedEntity = md.EntityByName(entityField.RelatedEntity);\n return {\n targetEntityName: entityField.RelatedEntity,\n targetEntityId: relatedEntity?.ID,\n targetEntityIcon: relatedEntity?.Icon || undefined,\n isPrimaryKey: false,\n isForeignKey: true\n };\n }\n\n return { isPrimaryKey: false, isForeignKey: false };\n}\n\n/** @deprecated Use {@link ResolveTargetEntity}. */\nexport function resolveTargetEntity(\n sourceEntityName: string | undefined,\n sourceFieldName: string | undefined,\n md: IMetadataProvider\n): TargetEntityInfo {\n return ResolveTargetEntity(sourceEntityName, sourceFieldName, md);\n}\n\n/**\n * Builds column configs from QueryFieldInfo metadata\n */\nexport function BuildColumnsFromQueryFields(fields: MJQueryFieldEntity[], provider?: IMetadataProvider): QueryGridColumnConfig[] {\n // Metadata.Provider IS the global IMetadataProvider — no cast needed, and it names the fallback.\n const md = provider ?? Metadata.Provider;\n\n return fields\n .sort((a, b) => (a.Sequence || 0) - (b.Sequence || 0))\n .map((field, index) => {\n // Resolve the target entity using metadata\n const targetInfo = ResolveTargetEntity(field.SourceEntity ?? undefined, field.SourceFieldName ?? undefined, md);\n\n // Determine if this is an entity link\n // It's linkable if we have a valid target entity (either PK or FK)\n const isEntityLink = !!(targetInfo.targetEntityName && (targetInfo.isPrimaryKey || targetInfo.isForeignKey));\n\n // Determine alignment based on type\n let align: 'left' | 'center' | 'right' = 'left';\n const baseType = (field.SQLBaseType || '').toLowerCase();\n if (['int', 'bigint', 'decimal', 'numeric', 'float', 'money', 'smallmoney', 'real'].includes(baseType)) {\n align = 'right';\n } else if (['bit'].includes(baseType)) {\n align = 'center';\n }\n\n return {\n field: field.Name,\n title: field.Name, // Could be enhanced to parse CamelCase\n description: field.Description || undefined,\n width: undefined,\n minWidth: 80,\n maxWidth: undefined, // No max width limit - let users resize freely\n visible: true,\n sortable: true,\n resizable: true,\n reorderable: true,\n sqlBaseType: field.SQLBaseType || 'nvarchar',\n sqlFullType: field.SQLFullType || 'nvarchar(max)',\n align,\n order: index,\n sourceEntityId: field.SourceEntityID || undefined,\n sourceEntityName: field.SourceEntity || undefined,\n sourceFieldName: field.SourceFieldName || undefined,\n isEntityLink,\n targetEntityName: targetInfo.targetEntityName,\n targetEntityId: targetInfo.targetEntityId,\n isPrimaryKey: targetInfo.isPrimaryKey,\n isForeignKey: targetInfo.isForeignKey,\n targetEntityIcon: targetInfo.targetEntityIcon,\n pinned: null,\n flex: undefined\n };\n });\n}\n\n/** @deprecated Use {@link BuildColumnsFromQueryFields}. */\nexport function buildColumnsFromQueryFields(fields: MJQueryFieldEntity[], provider?: IMetadataProvider): QueryGridColumnConfig[] {\n return BuildColumnsFromQueryFields(fields, provider);\n}\n\n/**\n * Gets the User Settings key for query grid state\n */\nexport function GetQueryGridStateKey(queryId: string): string {\n return `QueryViewer_${queryId}_GridState`;\n}\n\n/** @deprecated Use {@link GetQueryGridStateKey}. */\nexport function getQueryGridStateKey(queryId: string): string {\n return GetQueryGridStateKey(queryId);\n}\n\n/**\n * Gets the User Settings key for query parameters\n */\nexport function GetQueryParamsKey(queryId: string): string {\n return `QueryViewer_${queryId}_LastParams`;\n}\n\n/** @deprecated Use {@link GetQueryParamsKey}. */\nexport function getQueryParamsKey(queryId: string): string {\n return GetQueryParamsKey(queryId);\n}\n\n/**\n * Infers column configuration from actual data when query has no field metadata.\n * Examines the first row to determine column names and types.\n */\nexport function BuildColumnsFromData(data: Record<string, unknown>[]): QueryGridColumnConfig[] {\n if (!data || data.length === 0) {\n return [];\n }\n\n // Get column names from first row\n const firstRow = data[0];\n const columnNames = Object.keys(firstRow);\n\n return columnNames.map((name, index) => {\n // Infer type from value\n const value = firstRow[name];\n let sqlBaseType = 'nvarchar';\n let align: 'left' | 'center' | 'right' = 'left';\n\n if (typeof value === 'number') {\n sqlBaseType = Number.isInteger(value) ? 'int' : 'decimal';\n align = 'right';\n } else if (typeof value === 'boolean') {\n sqlBaseType = 'bit';\n align = 'center';\n } else if (value instanceof Date) {\n sqlBaseType = 'datetime';\n } else if (typeof value === 'string') {\n // Check if it looks like a date\n const datePattern = /^\\d{4}-\\d{2}-\\d{2}/;\n if (datePattern.test(value)) {\n sqlBaseType = 'datetime';\n }\n }\n\n return {\n field: name,\n title: name,\n description: undefined,\n width: undefined,\n minWidth: 80,\n maxWidth: undefined,\n visible: true,\n sortable: true,\n resizable: true,\n reorderable: true,\n sqlBaseType,\n sqlFullType: sqlBaseType,\n align,\n order: index,\n sourceEntityId: undefined,\n sourceEntityName: undefined,\n sourceFieldName: undefined,\n isEntityLink: false,\n targetEntityName: undefined,\n targetEntityId: undefined,\n isPrimaryKey: false,\n isForeignKey: false,\n targetEntityIcon: undefined,\n pinned: null,\n flex: undefined\n };\n });\n}\n\n/** @deprecated Use {@link BuildColumnsFromData}. */\nexport function buildColumnsFromData(data: Record<string, unknown>[]): QueryGridColumnConfig[] {\n return BuildColumnsFromData(data);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"query-data-grid.component.d.ts","sourceRoot":"","sources":["../../../src/lib/query-data-grid/query-data-grid.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query-data-grid.component.d.ts","sourceRoot":"","sources":["../../../src/lib/query-data-grid/query-data-grid.component.ts"],"names":[],"mappings":"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"}
@@ -2,9 +2,10 @@ import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from
2
2
  import { trigger, transition, style, animate } from '@angular/animations';
3
3
  import { Subject } from 'rxjs';
4
4
  import { debounceTime, takeUntil } from 'rxjs/operators';
5
+ import { FormatDateOnly, IsDateOnlySQLType } from '@memberjunction/core';
5
6
  import { UserInfoEngine } from '@memberjunction/core-entities';
6
7
  import { ModuleRegistry, AllCommunityModule, themeAlpine } from 'ag-grid-community';
7
- import { DEFAULT_QUERY_VISUAL_CONFIG, buildColumnsFromQueryFields, buildColumnsFromData, getQueryGridStateKey } from './models/query-grid-types';
8
+ import { DEFAULT_QUERY_VISUAL_CONFIG, BuildColumnsFromQueryFields, BuildColumnsFromData, GetQueryGridStateKey } from './models/query-grid-types';
8
9
  import * as i0 from "@angular/core";
9
10
  import * as i1 from "@memberjunction/ng-export-service";
10
11
  import * as i2 from "@angular/common";
@@ -210,7 +211,7 @@ export class QueryDataGridComponent {
210
211
  }
211
212
  // If we have data but no columns from metadata or explicit configs, build from data
212
213
  if (this._data.length > 0 && this.Columns.length === 0 && !this._columnConfigs) {
213
- this.Columns = buildColumnsFromData(this._data);
214
+ this.Columns = BuildColumnsFromData(this._data);
214
215
  this.buildColumnDefs();
215
216
  }
216
217
  if (this.GridApi) {
@@ -433,7 +434,7 @@ export class QueryDataGridComponent {
433
434
  return;
434
435
  }
435
436
  // Build columns from query fields
436
- this.Columns = buildColumnsFromQueryFields(this._queryInfo.QueryFields);
437
+ this.Columns = BuildColumnsFromQueryFields(this._queryInfo.QueryFields);
437
438
  // Apply initial state if provided via prop (takes precedence)
438
439
  if (this.InitialGridState) {
439
440
  this.applyColumnStateFromGridState(this.InitialGridState);
@@ -570,10 +571,14 @@ export class QueryDataGridComponent {
570
571
  const date = new Date(value);
571
572
  if (isNaN(date.getTime()))
572
573
  return String(value);
574
+ // A SQL `date` is a calendar day delivered as UTC midnight: format it in UTC, or a
575
+ // reader west of Greenwich sees the day before.
576
+ if (IsDateOnlySQLType(baseType)) {
577
+ return this._mergedVisualConfig.friendlyDates
578
+ ? FormatDateOnly(date, { year: 'numeric', month: 'short', day: 'numeric' }, 'en-US')
579
+ : date.toISOString().slice(0, 10);
580
+ }
573
581
  if (this._mergedVisualConfig.friendlyDates) {
574
- if (baseType === 'date') {
575
- return date.toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' });
576
- }
577
582
  return date.toLocaleString('en-US', {
578
583
  year: 'numeric', month: 'short', day: 'numeric',
579
584
  hour: 'numeric', minute: '2-digit'
@@ -791,7 +796,7 @@ export class QueryDataGridComponent {
791
796
  return;
792
797
  }
793
798
  try {
794
- const settingKey = getQueryGridStateKey(this._queryInfo.ID);
799
+ const settingKey = GetQueryGridStateKey(this._queryInfo.ID);
795
800
  const savedState = UserInfoEngine.Instance.GetSetting(settingKey);
796
801
  if (savedState) {
797
802
  const state = JSON.parse(savedState);
@@ -852,7 +857,7 @@ export class QueryDataGridComponent {
852
857
  return;
853
858
  }
854
859
  try {
855
- const settingKey = getQueryGridStateKey(this._queryInfo.ID);
860
+ const settingKey = GetQueryGridStateKey(this._queryInfo.ID);
856
861
  await UserInfoEngine.Instance.SetSetting(settingKey, JSON.stringify(state));
857
862
  }
858
863
  catch (error) {
@@ -1004,7 +1009,7 @@ export class QueryDataGridComponent {
1004
1009
  .map(c => ({
1005
1010
  name: c.field,
1006
1011
  displayName: c.title,
1007
- type: this.mapSqlTypeToExportType(c.sqlBaseType)
1012
+ dataType: this.mapSqlTypeToExportType(c.sqlBaseType)
1008
1013
  }));
1009
1014
  }
1010
1015
  mapSqlTypeToExportType(sqlType) {
@@ -1015,7 +1020,10 @@ export class QueryDataGridComponent {
1015
1020
  if (['bit'].includes(baseType)) {
1016
1021
  return 'boolean';
1017
1022
  }
1018
- if (['date', 'datetime', 'datetime2', 'smalldatetime', 'datetimeoffset'].includes(baseType)) {
1023
+ if (IsDateOnlySQLType(baseType)) {
1024
+ return 'dateonly';
1025
+ }
1026
+ if (['datetime', 'datetime2', 'smalldatetime', 'datetimeoffset'].includes(baseType)) {
1019
1027
  return 'date';
1020
1028
  }
1021
1029
  return 'string';
@@ -1261,5 +1269,5 @@ export class QueryDataGridComponent {
1261
1269
  }], PageChange: [{
1262
1270
  type: Output
1263
1271
  }] }); })();
1264
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(QueryDataGridComponent, { className: "QueryDataGridComponent", filePath: "src/lib/query-data-grid/query-data-grid.component.ts", lineNumber: 108 }); })();
1272
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(QueryDataGridComponent, { className: "QueryDataGridComponent", filePath: "src/lib/query-data-grid/query-data-grid.component.ts", lineNumber: 109 }); })();
1265
1273
  //# sourceMappingURL=query-data-grid.component.js.map