@memberjunction/ng-query-viewer 5.37.0 → 5.39.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/README.md +2 -3
  2. package/dist/lib/query-data-grid/models/query-grid-types.d.ts +3 -2
  3. package/dist/lib/query-data-grid/models/query-grid-types.d.ts.map +1 -1
  4. package/dist/lib/query-data-grid/models/query-grid-types.js +1 -1
  5. package/dist/lib/query-data-grid/models/query-grid-types.js.map +1 -1
  6. package/dist/lib/query-data-grid/query-data-grid.component.d.ts +3 -3
  7. package/dist/lib/query-data-grid/query-data-grid.component.d.ts.map +1 -1
  8. package/dist/lib/query-data-grid/query-data-grid.component.js +2 -2
  9. package/dist/lib/query-data-grid/query-data-grid.component.js.map +1 -1
  10. package/dist/lib/query-info-panel/query-info-panel.component.d.ts +7 -7
  11. package/dist/lib/query-info-panel/query-info-panel.component.d.ts.map +1 -1
  12. package/dist/lib/query-info-panel/query-info-panel.component.js +15 -13
  13. package/dist/lib/query-info-panel/query-info-panel.component.js.map +1 -1
  14. package/dist/lib/query-parameter-form/query-parameter-form.component.d.ts +6 -6
  15. package/dist/lib/query-parameter-form/query-parameter-form.component.d.ts.map +1 -1
  16. package/dist/lib/query-parameter-form/query-parameter-form.component.js +2 -2
  17. package/dist/lib/query-parameter-form/query-parameter-form.component.js.map +1 -1
  18. package/dist/lib/query-row-detail/query-row-detail.component.d.ts +2 -2
  19. package/dist/lib/query-row-detail/query-row-detail.component.d.ts.map +1 -1
  20. package/dist/lib/query-row-detail/query-row-detail.component.js.map +1 -1
  21. package/dist/lib/query-viewer/query-viewer.component.d.ts +3 -2
  22. package/dist/lib/query-viewer/query-viewer.component.d.ts.map +1 -1
  23. package/dist/lib/query-viewer/query-viewer.component.js +10 -9
  24. package/dist/lib/query-viewer/query-viewer.component.js.map +1 -1
  25. package/package.json +12 -12
@@ -1 +1 @@
1
- {"version":3,"file":"query-parameter-form.component.js","sourceRoot":"","sources":["../../../src/lib/query-parameter-form/query-parameter-form.component.ts","../../../src/lib/query-parameter-form/query-parameter-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnDestroy,\n OnChanges,\n SimpleChanges,\n ChangeDetectorRef,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { trigger, transition, style, animate } from '@angular/animations';\nimport { QueryInfo, QueryParameterInfo } from '@memberjunction/core';\nimport { QueryParameterValues } from '../query-data-grid/models/query-grid-types';\n\n/**\n * A single parameter field in the form\n */\ninterface ParameterField {\n info: QueryParameterInfo;\n value: string | number | boolean | Date | string[] | null;\n error: string | null;\n touched: boolean;\n}\n\n/**\n * A slide-in form for entering query parameters before execution.\n * Features:\n * - Dynamic form generation from QueryParameterInfo metadata\n * - Type-appropriate input controls (text, number, date, checkbox, multi-select)\n * - Validation with helpful error messages\n * - Sample values as placeholders\n * - Description tooltips\n *\n * @example\n * ```html\n * <mj-query-parameter-form\n * [QueryInfo]=\"query\"\n * [InitialValues]=\"savedParams\"\n * [IsOpen]=\"showParams\"\n * (ParametersSubmit)=\"onRunQuery($event)\"\n * (Close)=\"showParams = false\">\n * </mj-query-parameter-form>\n * ```\n */\n@Component({\n standalone: false,\n selector: 'mj-query-parameter-form',\n templateUrl: './query-parameter-form.component.html',\n styleUrls: ['./query-parameter-form.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('slideIn', [\n transition(':enter', [\n style({ transform: 'translateX(100%)', opacity: 0 }),\n animate('250ms ease-out', style({ transform: 'translateX(0)', opacity: 1 }))\n ]),\n transition(':leave', [\n animate('200ms ease-in', style({ transform: 'translateX(100%)', opacity: 0 }))\n ])\n ]),\n trigger('fadeIn', [\n transition(':enter', [\n style({ opacity: 0 }),\n animate('150ms ease-out', style({ opacity: 1 }))\n ]),\n transition(':leave', [\n animate('100ms ease-in', style({ opacity: 0 }))\n ])\n ])\n ]\n})\nexport class QueryParameterFormComponent implements OnInit, OnChanges, OnDestroy {\n // ========================================\n // Inputs\n // ========================================\n\n /**\n * The query metadata containing parameter definitions\n */\n @Input() QueryInfo: QueryInfo | null = null;\n\n /**\n * Initial values to populate the form (e.g., from saved state)\n */\n @Input() InitialValues: QueryParameterValues = {};\n\n /**\n * Whether the panel is open/visible\n */\n @Input() IsOpen: boolean = false;\n\n /**\n * Panel width in pixels\n */\n @Input() PanelWidth: number = 400;\n\n /**\n * Whether to show the overlay backdrop\n */\n @Input() ShowOverlay: boolean = true;\n\n // ========================================\n // Outputs\n // ========================================\n\n /**\n * Fired when user submits the form with valid parameters\n */\n @Output() ParametersSubmit = new EventEmitter<QueryParameterValues>();\n\n /**\n * Fired when panel is closed\n */\n @Output() Close = new EventEmitter<void>();\n\n // ========================================\n // Internal State\n // ========================================\n\n public Fields: ParameterField[] = [];\n public HasRequiredParams: boolean = false;\n public AllRequiredFilled: boolean = false;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n this.buildForm();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['QueryInfo'] || changes['InitialValues']) {\n this.buildForm();\n }\n }\n\n ngOnDestroy(): void {}\n\n // ========================================\n // Form Building\n // ========================================\n\n private buildForm(): void {\n if (!this.QueryInfo) {\n this.Fields = [];\n this.HasRequiredParams = false;\n return;\n }\n\n const parameters = this.QueryInfo.Parameters || [];\n\n this.Fields = parameters.map(param => {\n const initialValue = this.getInitialValue(param);\n\n return {\n info: param,\n value: initialValue,\n error: null,\n touched: false\n };\n });\n\n this.HasRequiredParams = this.Fields.some(f => f.info.IsRequired);\n this.validateAllFields();\n this.cdr.markForCheck();\n }\n\n private getInitialValue(param: QueryParameterInfo): string | number | boolean | Date | string[] | null {\n // Check initial values first\n if (this.InitialValues && this.InitialValues[param.Name] !== undefined) {\n return this.InitialValues[param.Name];\n }\n\n // Fall back to default value\n if (param.DefaultValue !== null && param.DefaultValue !== undefined) {\n return this.parseDefaultValue(param);\n }\n\n // Type-specific defaults\n switch (param.Type) {\n case 'boolean':\n return false;\n case 'array':\n return [];\n default:\n return null;\n }\n }\n\n private parseDefaultValue(param: QueryParameterInfo): string | number | boolean | Date | string[] | null {\n const defaultValue = param.DefaultValue;\n if (defaultValue === null || defaultValue === undefined) return null;\n\n try {\n switch (param.Type) {\n case 'number':\n return Number(defaultValue);\n case 'boolean':\n return defaultValue.toLowerCase() === 'true' || defaultValue === '1';\n case 'date':\n return new Date(defaultValue);\n case 'array':\n return JSON.parse(defaultValue);\n default:\n return defaultValue;\n }\n } catch {\n return defaultValue;\n }\n }\n\n // ========================================\n // Value Handling\n // ========================================\n\n public OnValueChange(field: ParameterField, value: unknown): void {\n field.value = value as ParameterField['value'];\n field.touched = true;\n this.validateField(field);\n this.updateAllRequiredFilled();\n this.cdr.markForCheck();\n }\n\n public OnDateChange(field: ParameterField, value: Date | null): void {\n field.value = value;\n field.touched = true;\n this.validateField(field);\n this.updateAllRequiredFilled();\n this.cdr.markForCheck();\n }\n\n public OnCheckboxChange(field: ParameterField, event: Event): void {\n const input = event.target as HTMLInputElement;\n field.value = input.checked;\n field.touched = true;\n this.validateField(field);\n this.updateAllRequiredFilled();\n this.cdr.markForCheck();\n }\n\n // ========================================\n // Validation\n // ========================================\n\n private validateField(field: ParameterField): void {\n field.error = null;\n\n const value = field.value;\n const param = field.info;\n\n // Required check\n if (param.IsRequired) {\n if (value === null || value === undefined || value === '') {\n field.error = 'This field is required';\n return;\n }\n if (param.Type === 'array' && Array.isArray(value) && value.length === 0) {\n field.error = 'At least one value is required';\n return;\n }\n }\n\n // Type validation\n if (value !== null && value !== undefined && value !== '') {\n switch (param.Type) {\n case 'number':\n if (isNaN(Number(value))) {\n field.error = 'Must be a valid number';\n }\n break;\n case 'date':\n if (value instanceof Date && isNaN(value.getTime())) {\n field.error = 'Must be a valid date';\n }\n break;\n }\n }\n }\n\n private validateAllFields(): void {\n for (const field of this.Fields) {\n this.validateField(field);\n }\n this.updateAllRequiredFilled();\n }\n\n private updateAllRequiredFilled(): void {\n this.AllRequiredFilled = this.Fields\n .filter(f => f.info.IsRequired)\n .every(f => {\n const value = f.value;\n if (value === null || value === undefined || value === '') return false;\n if (f.info.Type === 'array' && Array.isArray(value) && value.length === 0) return false;\n return f.error === null;\n });\n }\n\n public get HasErrors(): boolean {\n return this.Fields.some(f => f.error !== null);\n }\n\n public get CanSubmit(): boolean {\n return !this.HasErrors && this.AllRequiredFilled;\n }\n\n // ========================================\n // Form Submission\n // ========================================\n\n public Submit(): void {\n // Mark all fields as touched\n for (const field of this.Fields) {\n field.touched = true;\n }\n this.validateAllFields();\n\n if (!this.CanSubmit) {\n this.cdr.markForCheck();\n return;\n }\n\n // Build parameter values object, normalizing array fields through\n // the same parse logic used by OnArrayInputChange so that saved\n // state from before the JSON-array fix is cleaned up on re-submit.\n const values: QueryParameterValues = {};\n for (const field of this.Fields) {\n if (field.value !== null && field.value !== undefined) {\n if (field.info.Type === 'array') {\n const display = this.GetArrayDisplayValue(field.value);\n values[field.info.Name] = display ? this.parseArrayInput(display) : [];\n } else {\n values[field.info.Name] = field.value;\n }\n }\n }\n\n this.ParametersSubmit.emit(values);\n }\n\n public Cancel(): void {\n this.Close.emit();\n }\n\n public Reset(): void {\n this.buildForm();\n }\n\n // ========================================\n // UI Helpers\n // ========================================\n\n public GetInputType(param: QueryParameterInfo): string {\n switch (param.Type) {\n case 'number':\n return 'number';\n case 'boolean':\n return 'checkbox';\n case 'date':\n return 'date';\n default:\n return 'text';\n }\n }\n\n public GetPlaceholder(param: QueryParameterInfo): string {\n if (param.SampleValue) {\n return `e.g., ${param.SampleValue}`;\n }\n return param.Description || '';\n }\n\n public TrackByField(index: number, field: ParameterField): string {\n return field.info.Name;\n }\n\n // ========================================\n // Type-Safe Value Getters for Template\n // ========================================\n\n public GetStringValue(value: ParameterField['value']): string {\n if (value === null || value === undefined) return '';\n if (typeof value === 'string') return value;\n return String(value);\n }\n\n public GetNumberValue(value: ParameterField['value']): number | null {\n if (value === null || value === undefined) return null;\n if (typeof value === 'number') return value;\n const num = Number(value);\n return isNaN(num) ? null : num;\n }\n\n public GetDateValue(value: ParameterField['value']): string {\n if (value === null || value === undefined) return '';\n if (value instanceof Date) {\n // Format as YYYY-MM-DD for HTML date input\n return value.toISOString().split('T')[0];\n }\n if (typeof value === 'string') {\n // Try to parse and format\n const date = new Date(value);\n if (!isNaN(date.getTime())) {\n return date.toISOString().split('T')[0];\n }\n }\n return '';\n }\n\n public GetBooleanValue(value: ParameterField['value']): boolean {\n if (value === null || value === undefined) return false;\n return Boolean(value);\n }\n\n public GetArrayDisplayValue(value: ParameterField['value']): string {\n if (value === null || value === undefined) return '';\n if (Array.isArray(value)) {\n return value.join(', ');\n }\n return String(value);\n }\n\n // ========================================\n // Input Event Handlers\n // ========================================\n\n public OnInputChange(field: ParameterField, event: Event): void {\n const input = event.target as HTMLInputElement;\n this.OnValueChange(field, input.value);\n }\n\n public OnNumberInputChange(field: ParameterField, event: Event): void {\n const input = event.target as HTMLInputElement;\n const value = input.value === '' ? null : Number(input.value);\n this.OnValueChange(field, value);\n }\n\n public OnDateInputChange(field: ParameterField, event: Event): void {\n const input = event.target as HTMLInputElement;\n const value = input.value ? new Date(input.value) : null;\n this.OnDateChange(field, value);\n }\n\n public OnArrayInputChange(field: ParameterField, event: Event): void {\n const input = event.target as HTMLInputElement;\n const raw = input.value?.trim();\n const value = raw ? this.parseArrayInput(raw) : [];\n this.OnValueChange(field, value);\n }\n\n /**\n * Parses array parameter input, supporting both JSON array syntax\n * (`[\"A\",\"B\",\"C\"]`) and plain comma-separated values (`A, B, C`).\n */\n private parseArrayInput(raw: string): string[] {\n if (raw.startsWith('[')) {\n try {\n const parsed = JSON.parse(raw);\n if (Array.isArray(parsed)) {\n return parsed.map(v => String(v).trim()).filter(s => s);\n }\n } catch {\n // Not valid JSON — fall through to comma-split\n }\n }\n return raw.split(',').map(s => s.trim()).filter(s => s);\n }\n}\n","<!-- Query Parameter Form - Slide-in Panel -->\n@if (IsOpen && ShowOverlay) {\n <div class=\"param-form-overlay\"\n @fadeIn\n (click)=\"Cancel()\">\n </div>\n}\n\n@if (IsOpen) {\n <div class=\"param-form-panel\"\n @slideIn\n [style.width.px]=\"PanelWidth\">\n <!-- Header -->\n <div class=\"panel-header\">\n <div class=\"header-content\">\n <i class=\"fa-solid fa-sliders header-icon\"></i>\n <div class=\"header-text\">\n <h3 class=\"header-title\">Query Parameters</h3>\n @if (QueryInfo) {\n <span class=\"header-subtitle\">{{ QueryInfo.Name }}</span>\n }\n </div>\n </div>\n <button class=\"close-btn\" (click)=\"Cancel()\" title=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <!-- Form Content -->\n <div class=\"panel-content\">\n <!-- No parameters message -->\n @if (Fields.length === 0) {\n <div class=\"no-params\">\n <i class=\"fa-solid fa-check-circle no-params-icon\"></i>\n <p>This query has no parameters</p>\n <button class=\"btn btn-primary\" (click)=\"Submit()\">\n Run Query\n </button>\n </div>\n }\n <!-- Parameter fields -->\n @if (Fields.length > 0) {\n <div class=\"param-fields\">\n @for (field of Fields; track TrackByField($index, field)) {\n <div class=\"param-field\"\n [class.has-error]=\"field.error && field.touched\"\n [class.required]=\"field.info.IsRequired\">\n <!-- Label -->\n <label class=\"field-label\" [for]=\"'param-' + field.info.Name\">\n {{ field.info.Name }}\n @if (field.info.IsRequired) {\n <span class=\"required-indicator\">*</span>\n }\n <span class=\"field-type\">({{ field.info.Type }})</span>\n </label>\n <!-- Description -->\n @if (field.info.Description) {\n <p class=\"field-description\">\n {{ field.info.Description }}\n </p>\n }\n <!-- String input -->\n @if (field.info.Type === 'string') {\n <input type=\"text\"\n class=\"form-input\"\n [id]=\"'param-' + field.info.Name\"\n [value]=\"GetStringValue(field.value)\"\n [placeholder]=\"GetPlaceholder(field.info)\"\n (input)=\"OnInputChange(field, $event)\">\n }\n <!-- Number input -->\n @if (field.info.Type === 'number') {\n <input type=\"number\"\n class=\"form-input\"\n [id]=\"'param-' + field.info.Name\"\n [value]=\"GetNumberValue(field.value)\"\n [placeholder]=\"GetPlaceholder(field.info)\"\n (input)=\"OnNumberInputChange(field, $event)\">\n }\n <!-- Date input -->\n @if (field.info.Type === 'date') {\n <input type=\"date\"\n class=\"form-input\"\n [id]=\"'param-' + field.info.Name\"\n [value]=\"GetDateValue(field.value)\"\n (input)=\"OnDateInputChange(field, $event)\">\n }\n <!-- Boolean input -->\n @if (field.info.Type === 'boolean') {\n <div class=\"checkbox-wrapper\">\n <input type=\"checkbox\"\n [id]=\"'param-' + field.info.Name\"\n [checked]=\"GetBooleanValue(field.value)\"\n (change)=\"OnCheckboxChange(field, $event)\">\n <label [for]=\"'param-' + field.info.Name\" class=\"checkbox-label\">\n {{ GetBooleanValue(field.value) ? 'Yes' : 'No' }}\n </label>\n </div>\n }\n <!-- Array input (comma-separated) -->\n @if (field.info.Type === 'array') {\n <input type=\"text\"\n class=\"form-input\"\n [id]=\"'param-' + field.info.Name\"\n [value]=\"GetArrayDisplayValue(field.value)\"\n [placeholder]=\"GetPlaceholder(field.info) || 'Enter values separated by commas'\"\n (input)=\"OnArrayInputChange(field, $event)\">\n <span class=\"field-hint\">Enter multiple values separated by commas</span>\n }\n <!-- Error message -->\n @if (field.error && field.touched) {\n <span class=\"field-error\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n {{ field.error }}\n </span>\n }\n <!-- Sample value hint -->\n @if (field.info.SampleValue && !field.error) {\n <span class=\"field-sample\">\n Example: {{ field.info.SampleValue }}\n </span>\n }\n </div>\n }\n </div>\n }\n </div>\n <!-- Footer -->\n @if (Fields.length > 0) {\n <div class=\"panel-footer\">\n <button class=\"btn btn-secondary\" (click)=\"Reset()\" title=\"Reset to defaults\">\n <i class=\"fa-solid fa-undo\"></i>\n Reset\n </button>\n <div class=\"footer-right\">\n <button class=\"btn btn-secondary\" (click)=\"Cancel()\">\n Cancel\n </button>\n <button class=\"btn btn-primary\"\n [disabled]=\"!CanSubmit\"\n (click)=\"Submit()\">\n <i class=\"fa-solid fa-play\"></i>\n Run Query\n </button>\n </div>\n </div>\n }\n </div>\n}\n"]}
1
+ {"version":3,"file":"query-parameter-form.component.js","sourceRoot":"","sources":["../../../src/lib/query-parameter-form/query-parameter-form.component.ts","../../../src/lib/query-parameter-form/query-parameter-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnDestroy,\n OnChanges,\n SimpleChanges,\n ChangeDetectorRef,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { trigger, transition, style, animate } from '@angular/animations';\nimport { MJQueryEntityExtended, MJQueryParameterEntity } from '@memberjunction/core-entities';\nimport { QueryParameterValues } from '../query-data-grid/models/query-grid-types';\n\n/**\n * A single parameter field in the form\n */\ninterface ParameterField {\n info: MJQueryParameterEntity;\n value: string | number | boolean | Date | string[] | null;\n error: string | null;\n touched: boolean;\n}\n\n/**\n * A slide-in form for entering query parameters before execution.\n * Features:\n * - Dynamic form generation from MJQueryParameterEntity metadata\n * - Type-appropriate input controls (text, number, date, checkbox, multi-select)\n * - Validation with helpful error messages\n * - Sample values as placeholders\n * - Description tooltips\n *\n * @example\n * ```html\n * <mj-query-parameter-form\n * [QueryInfo]=\"query\"\n * [InitialValues]=\"savedParams\"\n * [IsOpen]=\"showParams\"\n * (ParametersSubmit)=\"onRunQuery($event)\"\n * (Close)=\"showParams = false\">\n * </mj-query-parameter-form>\n * ```\n */\n@Component({\n standalone: false,\n selector: 'mj-query-parameter-form',\n templateUrl: './query-parameter-form.component.html',\n styleUrls: ['./query-parameter-form.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('slideIn', [\n transition(':enter', [\n style({ transform: 'translateX(100%)', opacity: 0 }),\n animate('250ms ease-out', style({ transform: 'translateX(0)', opacity: 1 }))\n ]),\n transition(':leave', [\n animate('200ms ease-in', style({ transform: 'translateX(100%)', opacity: 0 }))\n ])\n ]),\n trigger('fadeIn', [\n transition(':enter', [\n style({ opacity: 0 }),\n animate('150ms ease-out', style({ opacity: 1 }))\n ]),\n transition(':leave', [\n animate('100ms ease-in', style({ opacity: 0 }))\n ])\n ])\n ]\n})\nexport class QueryParameterFormComponent implements OnInit, OnChanges, OnDestroy {\n // ========================================\n // Inputs\n // ========================================\n\n /**\n * The query metadata containing parameter definitions\n */\n @Input() QueryInfo: MJQueryEntityExtended | null = null;\n\n /**\n * Initial values to populate the form (e.g., from saved state)\n */\n @Input() InitialValues: QueryParameterValues = {};\n\n /**\n * Whether the panel is open/visible\n */\n @Input() IsOpen: boolean = false;\n\n /**\n * Panel width in pixels\n */\n @Input() PanelWidth: number = 400;\n\n /**\n * Whether to show the overlay backdrop\n */\n @Input() ShowOverlay: boolean = true;\n\n // ========================================\n // Outputs\n // ========================================\n\n /**\n * Fired when user submits the form with valid parameters\n */\n @Output() ParametersSubmit = new EventEmitter<QueryParameterValues>();\n\n /**\n * Fired when panel is closed\n */\n @Output() Close = new EventEmitter<void>();\n\n // ========================================\n // Internal State\n // ========================================\n\n public Fields: ParameterField[] = [];\n public HasRequiredParams: boolean = false;\n public AllRequiredFilled: boolean = false;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n this.buildForm();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['QueryInfo'] || changes['InitialValues']) {\n this.buildForm();\n }\n }\n\n ngOnDestroy(): void {}\n\n // ========================================\n // Form Building\n // ========================================\n\n private buildForm(): void {\n if (!this.QueryInfo) {\n this.Fields = [];\n this.HasRequiredParams = false;\n return;\n }\n\n const parameters = this.QueryInfo.QueryParameters || [];\n\n this.Fields = parameters.map(param => {\n const initialValue = this.getInitialValue(param);\n\n return {\n info: param,\n value: initialValue,\n error: null,\n touched: false\n };\n });\n\n this.HasRequiredParams = this.Fields.some(f => f.info.IsRequired);\n this.validateAllFields();\n this.cdr.markForCheck();\n }\n\n private getInitialValue(param: MJQueryParameterEntity): string | number | boolean | Date | string[] | null {\n // Check initial values first\n if (this.InitialValues && this.InitialValues[param.Name] !== undefined) {\n return this.InitialValues[param.Name];\n }\n\n // Fall back to default value\n if (param.DefaultValue !== null && param.DefaultValue !== undefined) {\n return this.parseDefaultValue(param);\n }\n\n // Type-specific defaults\n switch (param.Type) {\n case 'boolean':\n return false;\n case 'array':\n return [];\n default:\n return null;\n }\n }\n\n private parseDefaultValue(param: MJQueryParameterEntity): string | number | boolean | Date | string[] | null {\n const defaultValue = param.DefaultValue;\n if (defaultValue === null || defaultValue === undefined) return null;\n\n try {\n switch (param.Type) {\n case 'number':\n return Number(defaultValue);\n case 'boolean':\n return defaultValue.toLowerCase() === 'true' || defaultValue === '1';\n case 'date':\n return new Date(defaultValue);\n case 'array':\n return JSON.parse(defaultValue);\n default:\n return defaultValue;\n }\n } catch {\n return defaultValue;\n }\n }\n\n // ========================================\n // Value Handling\n // ========================================\n\n public OnValueChange(field: ParameterField, value: unknown): void {\n field.value = value as ParameterField['value'];\n field.touched = true;\n this.validateField(field);\n this.updateAllRequiredFilled();\n this.cdr.markForCheck();\n }\n\n public OnDateChange(field: ParameterField, value: Date | null): void {\n field.value = value;\n field.touched = true;\n this.validateField(field);\n this.updateAllRequiredFilled();\n this.cdr.markForCheck();\n }\n\n public OnCheckboxChange(field: ParameterField, event: Event): void {\n const input = event.target as HTMLInputElement;\n field.value = input.checked;\n field.touched = true;\n this.validateField(field);\n this.updateAllRequiredFilled();\n this.cdr.markForCheck();\n }\n\n // ========================================\n // Validation\n // ========================================\n\n private validateField(field: ParameterField): void {\n field.error = null;\n\n const value = field.value;\n const param = field.info;\n\n // Required check\n if (param.IsRequired) {\n if (value === null || value === undefined || value === '') {\n field.error = 'This field is required';\n return;\n }\n if (param.Type === 'array' && Array.isArray(value) && value.length === 0) {\n field.error = 'At least one value is required';\n return;\n }\n }\n\n // Type validation\n if (value !== null && value !== undefined && value !== '') {\n switch (param.Type) {\n case 'number':\n if (isNaN(Number(value))) {\n field.error = 'Must be a valid number';\n }\n break;\n case 'date':\n if (value instanceof Date && isNaN(value.getTime())) {\n field.error = 'Must be a valid date';\n }\n break;\n }\n }\n }\n\n private validateAllFields(): void {\n for (const field of this.Fields) {\n this.validateField(field);\n }\n this.updateAllRequiredFilled();\n }\n\n private updateAllRequiredFilled(): void {\n this.AllRequiredFilled = this.Fields\n .filter(f => f.info.IsRequired)\n .every(f => {\n const value = f.value;\n if (value === null || value === undefined || value === '') return false;\n if (f.info.Type === 'array' && Array.isArray(value) && value.length === 0) return false;\n return f.error === null;\n });\n }\n\n public get HasErrors(): boolean {\n return this.Fields.some(f => f.error !== null);\n }\n\n public get CanSubmit(): boolean {\n return !this.HasErrors && this.AllRequiredFilled;\n }\n\n // ========================================\n // Form Submission\n // ========================================\n\n public Submit(): void {\n // Mark all fields as touched\n for (const field of this.Fields) {\n field.touched = true;\n }\n this.validateAllFields();\n\n if (!this.CanSubmit) {\n this.cdr.markForCheck();\n return;\n }\n\n // Build parameter values object, normalizing array fields through\n // the same parse logic used by OnArrayInputChange so that saved\n // state from before the JSON-array fix is cleaned up on re-submit.\n const values: QueryParameterValues = {};\n for (const field of this.Fields) {\n if (field.value !== null && field.value !== undefined) {\n if (field.info.Type === 'array') {\n const display = this.GetArrayDisplayValue(field.value);\n values[field.info.Name] = display ? this.parseArrayInput(display) : [];\n } else {\n values[field.info.Name] = field.value;\n }\n }\n }\n\n this.ParametersSubmit.emit(values);\n }\n\n public Cancel(): void {\n this.Close.emit();\n }\n\n public Reset(): void {\n this.buildForm();\n }\n\n // ========================================\n // UI Helpers\n // ========================================\n\n public GetInputType(param: MJQueryParameterEntity): string {\n switch (param.Type) {\n case 'number':\n return 'number';\n case 'boolean':\n return 'checkbox';\n case 'date':\n return 'date';\n default:\n return 'text';\n }\n }\n\n public GetPlaceholder(param: MJQueryParameterEntity): string {\n if (param.SampleValue) {\n return `e.g., ${param.SampleValue}`;\n }\n return param.Description || '';\n }\n\n public TrackByField(index: number, field: ParameterField): string {\n return field.info.Name;\n }\n\n // ========================================\n // Type-Safe Value Getters for Template\n // ========================================\n\n public GetStringValue(value: ParameterField['value']): string {\n if (value === null || value === undefined) return '';\n if (typeof value === 'string') return value;\n return String(value);\n }\n\n public GetNumberValue(value: ParameterField['value']): number | null {\n if (value === null || value === undefined) return null;\n if (typeof value === 'number') return value;\n const num = Number(value);\n return isNaN(num) ? null : num;\n }\n\n public GetDateValue(value: ParameterField['value']): string {\n if (value === null || value === undefined) return '';\n if (value instanceof Date) {\n // Format as YYYY-MM-DD for HTML date input\n return value.toISOString().split('T')[0];\n }\n if (typeof value === 'string') {\n // Try to parse and format\n const date = new Date(value);\n if (!isNaN(date.getTime())) {\n return date.toISOString().split('T')[0];\n }\n }\n return '';\n }\n\n public GetBooleanValue(value: ParameterField['value']): boolean {\n if (value === null || value === undefined) return false;\n return Boolean(value);\n }\n\n public GetArrayDisplayValue(value: ParameterField['value']): string {\n if (value === null || value === undefined) return '';\n if (Array.isArray(value)) {\n return value.join(', ');\n }\n return String(value);\n }\n\n // ========================================\n // Input Event Handlers\n // ========================================\n\n public OnInputChange(field: ParameterField, event: Event): void {\n const input = event.target as HTMLInputElement;\n this.OnValueChange(field, input.value);\n }\n\n public OnNumberInputChange(field: ParameterField, event: Event): void {\n const input = event.target as HTMLInputElement;\n const value = input.value === '' ? null : Number(input.value);\n this.OnValueChange(field, value);\n }\n\n public OnDateInputChange(field: ParameterField, event: Event): void {\n const input = event.target as HTMLInputElement;\n const value = input.value ? new Date(input.value) : null;\n this.OnDateChange(field, value);\n }\n\n public OnArrayInputChange(field: ParameterField, event: Event): void {\n const input = event.target as HTMLInputElement;\n const raw = input.value?.trim();\n const value = raw ? this.parseArrayInput(raw) : [];\n this.OnValueChange(field, value);\n }\n\n /**\n * Parses array parameter input, supporting both JSON array syntax\n * (`[\"A\",\"B\",\"C\"]`) and plain comma-separated values (`A, B, C`).\n */\n private parseArrayInput(raw: string): string[] {\n if (raw.startsWith('[')) {\n try {\n const parsed = JSON.parse(raw);\n if (Array.isArray(parsed)) {\n return parsed.map(v => String(v).trim()).filter(s => s);\n }\n } catch {\n // Not valid JSON — fall through to comma-split\n }\n }\n return raw.split(',').map(s => s.trim()).filter(s => s);\n }\n}\n","<!-- Query Parameter Form - Slide-in Panel -->\n@if (IsOpen && ShowOverlay) {\n <div class=\"param-form-overlay\"\n @fadeIn\n (click)=\"Cancel()\">\n </div>\n}\n\n@if (IsOpen) {\n <div class=\"param-form-panel\"\n @slideIn\n [style.width.px]=\"PanelWidth\">\n <!-- Header -->\n <div class=\"panel-header\">\n <div class=\"header-content\">\n <i class=\"fa-solid fa-sliders header-icon\"></i>\n <div class=\"header-text\">\n <h3 class=\"header-title\">Query Parameters</h3>\n @if (QueryInfo) {\n <span class=\"header-subtitle\">{{ QueryInfo.Name }}</span>\n }\n </div>\n </div>\n <button class=\"close-btn\" (click)=\"Cancel()\" title=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <!-- Form Content -->\n <div class=\"panel-content\">\n <!-- No parameters message -->\n @if (Fields.length === 0) {\n <div class=\"no-params\">\n <i class=\"fa-solid fa-check-circle no-params-icon\"></i>\n <p>This query has no parameters</p>\n <button class=\"btn btn-primary\" (click)=\"Submit()\">\n Run Query\n </button>\n </div>\n }\n <!-- Parameter fields -->\n @if (Fields.length > 0) {\n <div class=\"param-fields\">\n @for (field of Fields; track TrackByField($index, field)) {\n <div class=\"param-field\"\n [class.has-error]=\"field.error && field.touched\"\n [class.required]=\"field.info.IsRequired\">\n <!-- Label -->\n <label class=\"field-label\" [for]=\"'param-' + field.info.Name\">\n {{ field.info.Name }}\n @if (field.info.IsRequired) {\n <span class=\"required-indicator\">*</span>\n }\n <span class=\"field-type\">({{ field.info.Type }})</span>\n </label>\n <!-- Description -->\n @if (field.info.Description) {\n <p class=\"field-description\">\n {{ field.info.Description }}\n </p>\n }\n <!-- String input -->\n @if (field.info.Type === 'string') {\n <input type=\"text\"\n class=\"form-input\"\n [id]=\"'param-' + field.info.Name\"\n [value]=\"GetStringValue(field.value)\"\n [placeholder]=\"GetPlaceholder(field.info)\"\n (input)=\"OnInputChange(field, $event)\">\n }\n <!-- Number input -->\n @if (field.info.Type === 'number') {\n <input type=\"number\"\n class=\"form-input\"\n [id]=\"'param-' + field.info.Name\"\n [value]=\"GetNumberValue(field.value)\"\n [placeholder]=\"GetPlaceholder(field.info)\"\n (input)=\"OnNumberInputChange(field, $event)\">\n }\n <!-- Date input -->\n @if (field.info.Type === 'date') {\n <input type=\"date\"\n class=\"form-input\"\n [id]=\"'param-' + field.info.Name\"\n [value]=\"GetDateValue(field.value)\"\n (input)=\"OnDateInputChange(field, $event)\">\n }\n <!-- Boolean input -->\n @if (field.info.Type === 'boolean') {\n <div class=\"checkbox-wrapper\">\n <input type=\"checkbox\"\n [id]=\"'param-' + field.info.Name\"\n [checked]=\"GetBooleanValue(field.value)\"\n (change)=\"OnCheckboxChange(field, $event)\">\n <label [for]=\"'param-' + field.info.Name\" class=\"checkbox-label\">\n {{ GetBooleanValue(field.value) ? 'Yes' : 'No' }}\n </label>\n </div>\n }\n <!-- Array input (comma-separated) -->\n @if (field.info.Type === 'array') {\n <input type=\"text\"\n class=\"form-input\"\n [id]=\"'param-' + field.info.Name\"\n [value]=\"GetArrayDisplayValue(field.value)\"\n [placeholder]=\"GetPlaceholder(field.info) || 'Enter values separated by commas'\"\n (input)=\"OnArrayInputChange(field, $event)\">\n <span class=\"field-hint\">Enter multiple values separated by commas</span>\n }\n <!-- Error message -->\n @if (field.error && field.touched) {\n <span class=\"field-error\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n {{ field.error }}\n </span>\n }\n <!-- Sample value hint -->\n @if (field.info.SampleValue && !field.error) {\n <span class=\"field-sample\">\n Example: {{ field.info.SampleValue }}\n </span>\n }\n </div>\n }\n </div>\n }\n </div>\n <!-- Footer -->\n @if (Fields.length > 0) {\n <div class=\"panel-footer\">\n <button class=\"btn btn-secondary\" (click)=\"Reset()\" title=\"Reset to defaults\">\n <i class=\"fa-solid fa-undo\"></i>\n Reset\n </button>\n <div class=\"footer-right\">\n <button class=\"btn btn-secondary\" (click)=\"Cancel()\">\n Cancel\n </button>\n <button class=\"btn btn-primary\"\n [disabled]=\"!CanSubmit\"\n (click)=\"Submit()\">\n <i class=\"fa-solid fa-play\"></i>\n Run Query\n </button>\n </div>\n </div>\n }\n </div>\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { EventEmitter, OnInit, OnDestroy, ChangeDetectorRef, ElementRef } from '@angular/core';
2
- import { QueryInfo } from '@memberjunction/core';
2
+ import { MJQueryEntityExtended } from '@memberjunction/core-entities';
3
3
  import { QueryGridColumnConfig } from '../query-data-grid/models/query-grid-types';
4
4
  import * as i0 from "@angular/core";
5
5
  /**
@@ -40,7 +40,7 @@ export declare class QueryRowDetailComponent implements OnInit, OnDestroy {
40
40
  private _columns;
41
41
  set Columns(value: QueryGridColumnConfig[]);
42
42
  get Columns(): QueryGridColumnConfig[];
43
- QueryInfo: QueryInfo | null;
43
+ QueryInfo: MJQueryEntityExtended | null;
44
44
  Visible: boolean;
45
45
  RowIndex: number;
46
46
  TotalRows: number;
@@ -1 +1 @@
1
- {"version":3,"file":"query-row-detail.component.d.ts","sourceRoot":"","sources":["../../../src/lib/query-row-detail/query-row-detail.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query-row-detail.component.d.ts","sourceRoot":"","sources":["../../../src/lib/query-row-detail/query-row-detail.component.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"query-row-detail.component.js","sourceRoot":"","sources":["../../../src/lib/query-row-detail/query-row-detail.component.ts","../../../src/lib/query-row-detail/query-row-detail.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnDestroy,\n ChangeDetectorRef,\n ChangeDetectionStrategy,\n ElementRef,\n HostListener\n} from '@angular/core';\nimport { trigger, transition, style, animate } from '@angular/animations';\nimport { Subject } from 'rxjs';\nimport { takeUntil, debounceTime } from 'rxjs/operators';\nimport { QueryInfo, QueryFieldInfo, EntityInfo } from '@memberjunction/core';\nimport { UserInfoEngine } from '@memberjunction/core-entities';\nimport { QueryGridColumnConfig } from '../query-data-grid/models/query-grid-types';\n\n/**\n * Event emitted when navigating to a linked entity record\n */\nexport interface RowDetailEntityLinkEvent {\n entityName: string;\n recordId: string;\n fieldName: string;\n}\n\n/**\n * Field display configuration for the detail panel\n */\ninterface DetailField {\n name: string;\n displayName: string;\n value: unknown;\n formattedValue: string;\n sqlType: string;\n isPrimaryKey: boolean;\n isForeignKey: boolean;\n targetEntityName?: string;\n targetEntityIcon?: string;\n sourceEntityName?: string;\n isLongText: boolean;\n isExpanded: boolean;\n}\n\n/**\n * Settings key for panel width persistence\n */\nconst PANEL_WIDTH_SETTING_KEY = 'QueryViewer_RowDetailPanel_Width';\n\n/**\n * Settings key for hide empty fields preference\n */\nconst HIDE_EMPTY_FIELDS_KEY = 'QueryViewer_RowDetailPanel_HideEmptyFields';\n\n/**\n * Row detail slide-in panel component.\n * Displays a single row's data in a formatted, grouped view with entity links.\n */\n@Component({\n standalone: false,\n selector: 'mj-query-row-detail',\n templateUrl: './query-row-detail.component.html',\n styleUrls: ['./query-row-detail.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('slideIn', [\n transition(':enter', [\n style({ transform: 'translateX(100%)', opacity: 0 }),\n animate('200ms ease-out', style({ transform: 'translateX(0)', opacity: 1 }))\n ]),\n transition(':leave', [\n animate('150ms ease-in', style({ transform: 'translateX(100%)', opacity: 0 }))\n ])\n ])\n ]\n})\nexport class QueryRowDetailComponent implements OnInit, OnDestroy {\n // ========================================\n // Inputs\n // ========================================\n\n private _rowData: Record<string, unknown> | null = null;\n @Input()\n set RowData(value: Record<string, unknown> | null) {\n this._rowData = value;\n if (value) {\n this.buildDetailFields();\n }\n }\n get RowData(): Record<string, unknown> | null {\n return this._rowData;\n }\n\n private _columns: QueryGridColumnConfig[] = [];\n @Input()\n set Columns(value: QueryGridColumnConfig[]) {\n this._columns = value || [];\n if (this._rowData) {\n this.buildDetailFields();\n }\n }\n get Columns(): QueryGridColumnConfig[] {\n return this._columns;\n }\n\n @Input() QueryInfo: QueryInfo | null = null;\n @Input() Visible: boolean = false;\n @Input() RowIndex: number = 0;\n @Input() TotalRows: number = 0;\n\n // ========================================\n // Outputs\n // ========================================\n\n @Output() Close = new EventEmitter<void>();\n @Output() EntityLinkClick = new EventEmitter<RowDetailEntityLinkEvent>();\n @Output() NavigateRow = new EventEmitter<'prev' | 'next'>();\n\n // ========================================\n // Internal State\n // ========================================\n\n public PrimaryKeyFields: DetailField[] = [];\n public ForeignKeyFields: DetailField[] = [];\n public RegularFields: DetailField[] = [];\n public PanelWidth: number = 400;\n public IsResizing: boolean = false;\n public HideEmptyFields: boolean = true;\n\n private destroy$ = new Subject<void>();\n private widthPersistSubject = new Subject<number>();\n private minWidth = 300;\n private maxWidth = 800;\n\n constructor(\n private cdr: ChangeDetectorRef,\n private elementRef: ElementRef\n ) {\n // Debounce width persistence\n this.widthPersistSubject.pipe(\n debounceTime(500),\n takeUntil(this.destroy$)\n ).subscribe(width => {\n this.persistPanelWidth(width);\n });\n }\n\n ngOnInit(): void {\n this.loadPersistedWidth();\n this.loadHideEmptyFieldsPreference();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // ========================================\n // Field Building\n // ========================================\n\n private buildDetailFields(): void {\n if (!this._rowData || !this._columns.length) {\n this.PrimaryKeyFields = [];\n this.ForeignKeyFields = [];\n this.RegularFields = [];\n return;\n }\n\n const primaryKeys: DetailField[] = [];\n const foreignKeys: DetailField[] = [];\n const regular: DetailField[] = [];\n\n for (const col of this._columns) {\n const value = this._rowData[col.field];\n const field = this.buildDetailField(col, value);\n\n if (field.isPrimaryKey) {\n primaryKeys.push(field);\n } else if (field.isForeignKey) {\n foreignKeys.push(field);\n } else {\n regular.push(field);\n }\n }\n\n this.PrimaryKeyFields = primaryKeys;\n this.ForeignKeyFields = foreignKeys;\n this.RegularFields = regular;\n this.cdr.markForCheck();\n }\n\n private buildDetailField(col: QueryGridColumnConfig, value: unknown): DetailField {\n const formattedValue = this.formatValue(value, col);\n const isLongText = typeof value === 'string' && value.length > 200;\n\n return {\n name: col.field,\n displayName: col.title,\n value,\n formattedValue,\n sqlType: col.sqlBaseType,\n isPrimaryKey: col.isPrimaryKey || false,\n isForeignKey: col.isForeignKey || false,\n targetEntityName: col.targetEntityName,\n targetEntityIcon: col.targetEntityIcon,\n sourceEntityName: col.sourceEntityName,\n isLongText,\n isExpanded: false\n };\n }\n\n private formatValue(value: unknown, col: QueryGridColumnConfig): string {\n if (value === null || value === undefined) {\n return '(empty)';\n }\n\n const baseType = col.sqlBaseType.toLowerCase();\n\n // Boolean\n if (baseType === 'bit') {\n return value ? 'Yes' : 'No';\n }\n\n // Date/Time\n if (['date', 'datetime', 'datetime2', 'smalldatetime', 'datetimeoffset'].includes(baseType)) {\n const date = new Date(value as string);\n if (isNaN(date.getTime())) return String(value);\n\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffHours = Math.floor(diffMs / (1000 * 60 * 60));\n const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));\n\n let relativeTime = '';\n if (diffHours < 1) {\n relativeTime = 'just now';\n } else if (diffHours < 24) {\n relativeTime = `${diffHours} hour${diffHours === 1 ? '' : 's'} ago`;\n } else if (diffDays < 7) {\n relativeTime = `${diffDays} day${diffDays === 1 ? '' : 's'} ago`;\n }\n\n const formatted = baseType === 'date'\n ? date.toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' })\n : date.toLocaleString('en-US', {\n year: 'numeric', month: 'short', day: 'numeric',\n hour: 'numeric', minute: '2-digit'\n });\n\n return relativeTime ? `${formatted} • ${relativeTime}` : formatted;\n }\n\n // Numbers\n if (['int', 'bigint', 'smallint', 'tinyint'].includes(baseType)) {\n const num = Number(value);\n if (isNaN(num)) return String(value);\n return num.toLocaleString();\n }\n\n if (['decimal', 'numeric', 'float', 'real'].includes(baseType)) {\n const num = Number(value);\n if (isNaN(num)) return String(value);\n return num.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 4 });\n }\n\n if (['money', 'smallmoney'].includes(baseType)) {\n const num = Number(value);\n if (isNaN(num)) return String(value);\n return new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(num);\n }\n\n // JSON detection\n const strValue = String(value);\n if (strValue.startsWith('{') || strValue.startsWith('[')) {\n try {\n JSON.parse(strValue);\n return strValue; // Will be formatted as JSON in template\n } catch {\n // Not valid JSON, continue\n }\n }\n\n return strValue;\n }\n\n // ========================================\n // User Actions\n // ========================================\n\n public onClose(): void {\n this.Close.emit();\n }\n\n public onEntityLinkClick(field: DetailField): void {\n if (field.targetEntityName && field.value != null) {\n this.EntityLinkClick.emit({\n entityName: field.targetEntityName,\n recordId: String(field.value),\n fieldName: field.name\n });\n }\n }\n\n public onNavigatePrev(): void {\n this.NavigateRow.emit('prev');\n }\n\n public onNavigateNext(): void {\n this.NavigateRow.emit('next');\n }\n\n public toggleFieldExpand(field: DetailField): void {\n field.isExpanded = !field.isExpanded;\n this.cdr.markForCheck();\n }\n\n public copyValue(field: DetailField): void {\n const textToCopy = field.value != null ? String(field.value) : '';\n navigator.clipboard.writeText(textToCopy);\n }\n\n public copyRowAsJson(): void {\n if (this._rowData) {\n const json = JSON.stringify(this._rowData, null, 2);\n navigator.clipboard.writeText(json);\n }\n }\n\n public isJson(value: string): boolean {\n if (!value || typeof value !== 'string') return false;\n const trimmed = value.trim();\n return (trimmed.startsWith('{') && trimmed.endsWith('}')) ||\n (trimmed.startsWith('[') && trimmed.endsWith(']'));\n }\n\n public formatJson(value: string): string {\n try {\n return JSON.stringify(JSON.parse(value), null, 2);\n } catch {\n return value;\n }\n }\n\n // ========================================\n // Resize Handling\n // ========================================\n\n public onResizeStart(event: MouseEvent): void {\n event.preventDefault();\n this.IsResizing = true;\n document.body.style.cursor = 'ew-resize';\n document.body.style.userSelect = 'none';\n }\n\n @HostListener('document:mousemove', ['$event'])\n onMouseMove(event: MouseEvent): void {\n if (!this.IsResizing) return;\n\n const containerRect = this.elementRef.nativeElement.parentElement?.getBoundingClientRect();\n if (!containerRect) return;\n\n const newWidth = containerRect.right - event.clientX;\n this.PanelWidth = Math.min(Math.max(newWidth, this.minWidth), this.maxWidth);\n this.cdr.markForCheck();\n }\n\n @HostListener('document:mouseup')\n onMouseUp(): void {\n if (this.IsResizing) {\n this.IsResizing = false;\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n this.widthPersistSubject.next(this.PanelWidth);\n }\n }\n\n // ========================================\n // Persistence\n // ========================================\n\n private loadPersistedWidth(): void {\n try {\n const savedWidth = UserInfoEngine.Instance.GetSetting(PANEL_WIDTH_SETTING_KEY);\n if (savedWidth) {\n const width = parseInt(savedWidth, 10);\n if (!isNaN(width) && width >= this.minWidth && width <= this.maxWidth) {\n this.PanelWidth = width;\n }\n }\n } catch (error) {\n console.error('[query-row-detail] Failed to load persisted width:', error);\n }\n }\n\n private async persistPanelWidth(width: number): Promise<void> {\n try {\n await UserInfoEngine.Instance.SetSetting(PANEL_WIDTH_SETTING_KEY, String(width));\n } catch (error) {\n console.error('[query-row-detail] Failed to persist panel width:', error);\n }\n }\n\n private loadHideEmptyFieldsPreference(): void {\n try {\n const saved = UserInfoEngine.Instance.GetSetting(HIDE_EMPTY_FIELDS_KEY);\n if (saved !== undefined) {\n this.HideEmptyFields = saved === 'true';\n }\n } catch (error) {\n console.error('[query-row-detail] Failed to load hide empty fields preference:', error);\n }\n }\n\n private async persistHideEmptyFieldsPreference(): Promise<void> {\n try {\n await UserInfoEngine.Instance.SetSetting(HIDE_EMPTY_FIELDS_KEY, String(this.HideEmptyFields));\n } catch (error) {\n console.error('[query-row-detail] Failed to persist hide empty fields preference:', error);\n }\n }\n\n public toggleHideEmptyFields(): void {\n this.HideEmptyFields = !this.HideEmptyFields;\n this.persistHideEmptyFieldsPreference();\n this.cdr.markForCheck();\n }\n\n /**\n * Returns visible fields based on HideEmptyFields setting\n */\n public getVisibleFields(fields: DetailField[]): DetailField[] {\n if (!this.HideEmptyFields) {\n return fields;\n }\n return fields.filter(f => f.value !== null && f.value !== undefined && f.value !== '');\n }\n\n /**\n * Returns count of empty fields for display\n */\n public getEmptyFieldCount(fields: DetailField[]): number {\n return fields.filter(f => f.value === null || f.value === undefined || f.value === '').length;\n }\n\n // ========================================\n // Keyboard Navigation\n // ========================================\n\n @HostListener('document:keydown', ['$event'])\n onKeyDown(event: KeyboardEvent): void {\n if (!this.Visible) return;\n\n if (event.key === 'Escape') {\n this.onClose();\n } else if (event.key === 'ArrowUp' || event.key === 'k') {\n if (this.RowIndex > 0) {\n this.onNavigatePrev();\n }\n } else if (event.key === 'ArrowDown' || event.key === 'j') {\n if (this.RowIndex < this.TotalRows - 1) {\n this.onNavigateNext();\n }\n }\n }\n}\n","<!-- Row Detail Slide-in Panel -->\n@if (Visible) {\n <div class=\"row-detail-panel\"\n @slideIn\n [style.width.px]=\"PanelWidth\">\n <!-- Resize handle -->\n <div class=\"resize-handle\"\n (mousedown)=\"onResizeStart($event)\"\n [class.resizing]=\"IsResizing\">\n </div>\n <!-- Header -->\n <div class=\"panel-header\">\n <div class=\"header-left\">\n <i class=\"fa-solid fa-table-cells-large header-icon\"></i>\n <h3 class=\"panel-title\">Row Details</h3>\n </div>\n <div class=\"header-right\">\n <!-- Row navigation -->\n @if (TotalRows > 1) {\n <div class=\"row-nav\">\n <button class=\"nav-btn\"\n [disabled]=\"RowIndex === 0\"\n (click)=\"onNavigatePrev()\"\n title=\"Previous row (↑ or K)\">\n <i class=\"fa-solid fa-chevron-up\"></i>\n </button>\n <span class=\"row-indicator\">{{ RowIndex + 1 }} / {{ TotalRows }}</span>\n <button class=\"nav-btn\"\n [disabled]=\"RowIndex >= TotalRows - 1\"\n (click)=\"onNavigateNext()\"\n title=\"Next row (↓ or J)\">\n <i class=\"fa-solid fa-chevron-down\"></i>\n </button>\n </div>\n }\n <!-- Toggle empty fields -->\n <button class=\"action-btn\"\n (click)=\"toggleHideEmptyFields()\"\n [class.active]=\"HideEmptyFields\"\n [title]=\"HideEmptyFields ? 'Show empty fields' : 'Hide empty fields'\">\n <i class=\"fa-solid\" [class.fa-eye]=\"!HideEmptyFields\" [class.fa-eye-slash]=\"HideEmptyFields\"></i>\n </button>\n <!-- Copy JSON button -->\n <button class=\"action-btn\" (click)=\"copyRowAsJson()\" title=\"Copy row as JSON\">\n <i class=\"fa-solid fa-copy\"></i>\n </button>\n <!-- Close button -->\n <button class=\"close-btn\" (click)=\"onClose()\" title=\"Close (Esc)\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n </div>\n <!-- Content -->\n <div class=\"panel-content\">\n <!-- Primary Keys Section -->\n @if (getVisibleFields(PrimaryKeyFields).length > 0) {\n <div class=\"field-section\">\n <h4 class=\"section-title\">\n <i class=\"fa-solid fa-key section-icon pk-icon\"></i>\n Primary Key\n </h4>\n <div class=\"field-list\">\n @for (field of getVisibleFields(PrimaryKeyFields); track field) {\n <div class=\"field-item\">\n <div class=\"field-header\">\n <span class=\"field-name\">{{ field.displayName }}</span>\n <button class=\"copy-btn\" (click)=\"copyValue(field)\" title=\"Copy value\">\n <i class=\"fa-solid fa-copy\"></i>\n </button>\n </div>\n <div class=\"field-value\"\n [class.clickable]=\"field.targetEntityName\"\n (click)=\"field.targetEntityName && onEntityLinkClick(field)\">\n @if (field.targetEntityIcon) {\n <i\n [class]=\"field.targetEntityIcon\"\n class=\"entity-icon\"></i>\n }\n <span class=\"value-text monospace\">{{ field.formattedValue }}</span>\n @if (field.targetEntityName) {\n <i\n class=\"fa-solid fa-arrow-up-right-from-square link-icon\"></i>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n <!-- Foreign Keys Section -->\n @if (getVisibleFields(ForeignKeyFields).length > 0) {\n <div class=\"field-section\">\n <h4 class=\"section-title\">\n <i class=\"fa-solid fa-link section-icon fk-icon\"></i>\n Related Records\n </h4>\n <div class=\"field-list\">\n @for (field of getVisibleFields(ForeignKeyFields); track field) {\n <div class=\"field-item\">\n <div class=\"field-header\">\n <span class=\"field-name\">{{ field.displayName }}</span>\n @if (field.targetEntityName) {\n <span class=\"target-entity\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n {{ field.targetEntityName }}\n </span>\n }\n <button class=\"copy-btn\" (click)=\"copyValue(field)\" title=\"Copy value\">\n <i class=\"fa-solid fa-copy\"></i>\n </button>\n </div>\n @if (field.value != null) {\n <div class=\"field-value clickable\"\n (click)=\"onEntityLinkClick(field)\">\n @if (field.targetEntityIcon) {\n <i\n [class]=\"field.targetEntityIcon\"\n class=\"entity-icon\"></i>\n }\n <span class=\"value-text monospace\">{{ field.formattedValue }}</span>\n <i class=\"fa-solid fa-arrow-up-right-from-square link-icon\"></i>\n </div>\n }\n @if (field.value == null) {\n <div class=\"field-value empty\">\n <span class=\"value-text\">(empty)</span>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n <!-- Regular Fields Section -->\n @if (getVisibleFields(RegularFields).length > 0) {\n <div class=\"field-section\">\n <h4 class=\"section-title\">\n <i class=\"fa-solid fa-list section-icon\"></i>\n Fields\n @if (HideEmptyFields && getEmptyFieldCount(RegularFields) > 0) {\n <span class=\"hidden-count\">\n ({{ getEmptyFieldCount(RegularFields) }} empty hidden)\n </span>\n }\n </h4>\n <div class=\"field-list\">\n @for (field of getVisibleFields(RegularFields); track field) {\n <div class=\"field-item\">\n <div class=\"field-header\">\n <span class=\"field-name\">{{ field.displayName }}</span>\n <span class=\"field-type\">{{ field.sqlType }}</span>\n <button class=\"copy-btn\" (click)=\"copyValue(field)\" title=\"Copy value\">\n <i class=\"fa-solid fa-copy\"></i>\n </button>\n </div>\n <!-- JSON value -->\n @if (isJson(field.formattedValue)) {\n <div class=\"field-value json-value\"\n [class.expanded]=\"field.isExpanded\">\n <pre class=\"json-content\">{{ formatJson(field.formattedValue) }}</pre>\n <button class=\"expand-btn\" (click)=\"toggleFieldExpand(field)\">\n {{ field.isExpanded ? 'Collapse' : 'Expand' }}\n </button>\n </div>\n }\n <!-- Long text value -->\n @if (!isJson(field.formattedValue) && field.isLongText) {\n <div class=\"field-value long-text\"\n [class.expanded]=\"field.isExpanded\">\n <span class=\"value-text\">{{ field.formattedValue }}</span>\n <button class=\"expand-btn\" (click)=\"toggleFieldExpand(field)\">\n {{ field.isExpanded ? 'Show less' : 'Show more' }}\n </button>\n </div>\n }\n <!-- Boolean value -->\n @if (field.sqlType.toLowerCase() === 'bit' && !isJson(field.formattedValue)) {\n <div class=\"field-value boolean-value\"\n >\n <i [class]=\"field.value ? 'fa-solid fa-check-circle bool-true' : 'fa-solid fa-times-circle bool-false'\"></i>\n <span class=\"value-text\">{{ field.formattedValue }}</span>\n </div>\n }\n <!-- Empty value -->\n @if (field.value == null && !isJson(field.formattedValue)) {\n <div class=\"field-value empty\"\n >\n <span class=\"value-text\">(empty)</span>\n </div>\n }\n <!-- Regular value -->\n @if (field.value != null && !isJson(field.formattedValue) && !field.isLongText && field.sqlType.toLowerCase() !== 'bit') {\n <div class=\"field-value\"\n >\n <span class=\"value-text\"\n [class.monospace]=\"field.sqlType.toLowerCase().includes('uniqueidentifier') || field.name.toLowerCase().includes('id')\">\n {{ field.formattedValue }}\n </span>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n}\n\n<!-- Backdrop -->\n@if (Visible) {\n <div class=\"panel-backdrop\"\n (click)=\"onClose()\">\n </div>\n}\n"]}
1
+ {"version":3,"file":"query-row-detail.component.js","sourceRoot":"","sources":["../../../src/lib/query-row-detail/query-row-detail.component.ts","../../../src/lib/query-row-detail/query-row-detail.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnDestroy,\n ChangeDetectorRef,\n ChangeDetectionStrategy,\n ElementRef,\n HostListener\n} from '@angular/core';\nimport { trigger, transition, style, animate } from '@angular/animations';\nimport { Subject } from 'rxjs';\nimport { takeUntil, debounceTime } from 'rxjs/operators';\nimport { MJQueryEntityExtended } from '@memberjunction/core-entities';\nimport { UserInfoEngine } from '@memberjunction/core-entities';\nimport { QueryGridColumnConfig } from '../query-data-grid/models/query-grid-types';\n\n/**\n * Event emitted when navigating to a linked entity record\n */\nexport interface RowDetailEntityLinkEvent {\n entityName: string;\n recordId: string;\n fieldName: string;\n}\n\n/**\n * Field display configuration for the detail panel\n */\ninterface DetailField {\n name: string;\n displayName: string;\n value: unknown;\n formattedValue: string;\n sqlType: string;\n isPrimaryKey: boolean;\n isForeignKey: boolean;\n targetEntityName?: string;\n targetEntityIcon?: string;\n sourceEntityName?: string;\n isLongText: boolean;\n isExpanded: boolean;\n}\n\n/**\n * Settings key for panel width persistence\n */\nconst PANEL_WIDTH_SETTING_KEY = 'QueryViewer_RowDetailPanel_Width';\n\n/**\n * Settings key for hide empty fields preference\n */\nconst HIDE_EMPTY_FIELDS_KEY = 'QueryViewer_RowDetailPanel_HideEmptyFields';\n\n/**\n * Row detail slide-in panel component.\n * Displays a single row's data in a formatted, grouped view with entity links.\n */\n@Component({\n standalone: false,\n selector: 'mj-query-row-detail',\n templateUrl: './query-row-detail.component.html',\n styleUrls: ['./query-row-detail.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('slideIn', [\n transition(':enter', [\n style({ transform: 'translateX(100%)', opacity: 0 }),\n animate('200ms ease-out', style({ transform: 'translateX(0)', opacity: 1 }))\n ]),\n transition(':leave', [\n animate('150ms ease-in', style({ transform: 'translateX(100%)', opacity: 0 }))\n ])\n ])\n ]\n})\nexport class QueryRowDetailComponent implements OnInit, OnDestroy {\n // ========================================\n // Inputs\n // ========================================\n\n private _rowData: Record<string, unknown> | null = null;\n @Input()\n set RowData(value: Record<string, unknown> | null) {\n this._rowData = value;\n if (value) {\n this.buildDetailFields();\n }\n }\n get RowData(): Record<string, unknown> | null {\n return this._rowData;\n }\n\n private _columns: QueryGridColumnConfig[] = [];\n @Input()\n set Columns(value: QueryGridColumnConfig[]) {\n this._columns = value || [];\n if (this._rowData) {\n this.buildDetailFields();\n }\n }\n get Columns(): QueryGridColumnConfig[] {\n return this._columns;\n }\n\n @Input() QueryInfo: MJQueryEntityExtended | null = null;\n @Input() Visible: boolean = false;\n @Input() RowIndex: number = 0;\n @Input() TotalRows: number = 0;\n\n // ========================================\n // Outputs\n // ========================================\n\n @Output() Close = new EventEmitter<void>();\n @Output() EntityLinkClick = new EventEmitter<RowDetailEntityLinkEvent>();\n @Output() NavigateRow = new EventEmitter<'prev' | 'next'>();\n\n // ========================================\n // Internal State\n // ========================================\n\n public PrimaryKeyFields: DetailField[] = [];\n public ForeignKeyFields: DetailField[] = [];\n public RegularFields: DetailField[] = [];\n public PanelWidth: number = 400;\n public IsResizing: boolean = false;\n public HideEmptyFields: boolean = true;\n\n private destroy$ = new Subject<void>();\n private widthPersistSubject = new Subject<number>();\n private minWidth = 300;\n private maxWidth = 800;\n\n constructor(\n private cdr: ChangeDetectorRef,\n private elementRef: ElementRef\n ) {\n // Debounce width persistence\n this.widthPersistSubject.pipe(\n debounceTime(500),\n takeUntil(this.destroy$)\n ).subscribe(width => {\n this.persistPanelWidth(width);\n });\n }\n\n ngOnInit(): void {\n this.loadPersistedWidth();\n this.loadHideEmptyFieldsPreference();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // ========================================\n // Field Building\n // ========================================\n\n private buildDetailFields(): void {\n if (!this._rowData || !this._columns.length) {\n this.PrimaryKeyFields = [];\n this.ForeignKeyFields = [];\n this.RegularFields = [];\n return;\n }\n\n const primaryKeys: DetailField[] = [];\n const foreignKeys: DetailField[] = [];\n const regular: DetailField[] = [];\n\n for (const col of this._columns) {\n const value = this._rowData[col.field];\n const field = this.buildDetailField(col, value);\n\n if (field.isPrimaryKey) {\n primaryKeys.push(field);\n } else if (field.isForeignKey) {\n foreignKeys.push(field);\n } else {\n regular.push(field);\n }\n }\n\n this.PrimaryKeyFields = primaryKeys;\n this.ForeignKeyFields = foreignKeys;\n this.RegularFields = regular;\n this.cdr.markForCheck();\n }\n\n private buildDetailField(col: QueryGridColumnConfig, value: unknown): DetailField {\n const formattedValue = this.formatValue(value, col);\n const isLongText = typeof value === 'string' && value.length > 200;\n\n return {\n name: col.field,\n displayName: col.title,\n value,\n formattedValue,\n sqlType: col.sqlBaseType,\n isPrimaryKey: col.isPrimaryKey || false,\n isForeignKey: col.isForeignKey || false,\n targetEntityName: col.targetEntityName,\n targetEntityIcon: col.targetEntityIcon,\n sourceEntityName: col.sourceEntityName,\n isLongText,\n isExpanded: false\n };\n }\n\n private formatValue(value: unknown, col: QueryGridColumnConfig): string {\n if (value === null || value === undefined) {\n return '(empty)';\n }\n\n const baseType = col.sqlBaseType.toLowerCase();\n\n // Boolean\n if (baseType === 'bit') {\n return value ? 'Yes' : 'No';\n }\n\n // Date/Time\n if (['date', 'datetime', 'datetime2', 'smalldatetime', 'datetimeoffset'].includes(baseType)) {\n const date = new Date(value as string);\n if (isNaN(date.getTime())) return String(value);\n\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffHours = Math.floor(diffMs / (1000 * 60 * 60));\n const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));\n\n let relativeTime = '';\n if (diffHours < 1) {\n relativeTime = 'just now';\n } else if (diffHours < 24) {\n relativeTime = `${diffHours} hour${diffHours === 1 ? '' : 's'} ago`;\n } else if (diffDays < 7) {\n relativeTime = `${diffDays} day${diffDays === 1 ? '' : 's'} ago`;\n }\n\n const formatted = baseType === 'date'\n ? date.toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' })\n : date.toLocaleString('en-US', {\n year: 'numeric', month: 'short', day: 'numeric',\n hour: 'numeric', minute: '2-digit'\n });\n\n return relativeTime ? `${formatted} • ${relativeTime}` : formatted;\n }\n\n // Numbers\n if (['int', 'bigint', 'smallint', 'tinyint'].includes(baseType)) {\n const num = Number(value);\n if (isNaN(num)) return String(value);\n return num.toLocaleString();\n }\n\n if (['decimal', 'numeric', 'float', 'real'].includes(baseType)) {\n const num = Number(value);\n if (isNaN(num)) return String(value);\n return num.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 4 });\n }\n\n if (['money', 'smallmoney'].includes(baseType)) {\n const num = Number(value);\n if (isNaN(num)) return String(value);\n return new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(num);\n }\n\n // JSON detection\n const strValue = String(value);\n if (strValue.startsWith('{') || strValue.startsWith('[')) {\n try {\n JSON.parse(strValue);\n return strValue; // Will be formatted as JSON in template\n } catch {\n // Not valid JSON, continue\n }\n }\n\n return strValue;\n }\n\n // ========================================\n // User Actions\n // ========================================\n\n public onClose(): void {\n this.Close.emit();\n }\n\n public onEntityLinkClick(field: DetailField): void {\n if (field.targetEntityName && field.value != null) {\n this.EntityLinkClick.emit({\n entityName: field.targetEntityName,\n recordId: String(field.value),\n fieldName: field.name\n });\n }\n }\n\n public onNavigatePrev(): void {\n this.NavigateRow.emit('prev');\n }\n\n public onNavigateNext(): void {\n this.NavigateRow.emit('next');\n }\n\n public toggleFieldExpand(field: DetailField): void {\n field.isExpanded = !field.isExpanded;\n this.cdr.markForCheck();\n }\n\n public copyValue(field: DetailField): void {\n const textToCopy = field.value != null ? String(field.value) : '';\n navigator.clipboard.writeText(textToCopy);\n }\n\n public copyRowAsJson(): void {\n if (this._rowData) {\n const json = JSON.stringify(this._rowData, null, 2);\n navigator.clipboard.writeText(json);\n }\n }\n\n public isJson(value: string): boolean {\n if (!value || typeof value !== 'string') return false;\n const trimmed = value.trim();\n return (trimmed.startsWith('{') && trimmed.endsWith('}')) ||\n (trimmed.startsWith('[') && trimmed.endsWith(']'));\n }\n\n public formatJson(value: string): string {\n try {\n return JSON.stringify(JSON.parse(value), null, 2);\n } catch {\n return value;\n }\n }\n\n // ========================================\n // Resize Handling\n // ========================================\n\n public onResizeStart(event: MouseEvent): void {\n event.preventDefault();\n this.IsResizing = true;\n document.body.style.cursor = 'ew-resize';\n document.body.style.userSelect = 'none';\n }\n\n @HostListener('document:mousemove', ['$event'])\n onMouseMove(event: MouseEvent): void {\n if (!this.IsResizing) return;\n\n const containerRect = this.elementRef.nativeElement.parentElement?.getBoundingClientRect();\n if (!containerRect) return;\n\n const newWidth = containerRect.right - event.clientX;\n this.PanelWidth = Math.min(Math.max(newWidth, this.minWidth), this.maxWidth);\n this.cdr.markForCheck();\n }\n\n @HostListener('document:mouseup')\n onMouseUp(): void {\n if (this.IsResizing) {\n this.IsResizing = false;\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n this.widthPersistSubject.next(this.PanelWidth);\n }\n }\n\n // ========================================\n // Persistence\n // ========================================\n\n private loadPersistedWidth(): void {\n try {\n const savedWidth = UserInfoEngine.Instance.GetSetting(PANEL_WIDTH_SETTING_KEY);\n if (savedWidth) {\n const width = parseInt(savedWidth, 10);\n if (!isNaN(width) && width >= this.minWidth && width <= this.maxWidth) {\n this.PanelWidth = width;\n }\n }\n } catch (error) {\n console.error('[query-row-detail] Failed to load persisted width:', error);\n }\n }\n\n private async persistPanelWidth(width: number): Promise<void> {\n try {\n await UserInfoEngine.Instance.SetSetting(PANEL_WIDTH_SETTING_KEY, String(width));\n } catch (error) {\n console.error('[query-row-detail] Failed to persist panel width:', error);\n }\n }\n\n private loadHideEmptyFieldsPreference(): void {\n try {\n const saved = UserInfoEngine.Instance.GetSetting(HIDE_EMPTY_FIELDS_KEY);\n if (saved !== undefined) {\n this.HideEmptyFields = saved === 'true';\n }\n } catch (error) {\n console.error('[query-row-detail] Failed to load hide empty fields preference:', error);\n }\n }\n\n private async persistHideEmptyFieldsPreference(): Promise<void> {\n try {\n await UserInfoEngine.Instance.SetSetting(HIDE_EMPTY_FIELDS_KEY, String(this.HideEmptyFields));\n } catch (error) {\n console.error('[query-row-detail] Failed to persist hide empty fields preference:', error);\n }\n }\n\n public toggleHideEmptyFields(): void {\n this.HideEmptyFields = !this.HideEmptyFields;\n this.persistHideEmptyFieldsPreference();\n this.cdr.markForCheck();\n }\n\n /**\n * Returns visible fields based on HideEmptyFields setting\n */\n public getVisibleFields(fields: DetailField[]): DetailField[] {\n if (!this.HideEmptyFields) {\n return fields;\n }\n return fields.filter(f => f.value !== null && f.value !== undefined && f.value !== '');\n }\n\n /**\n * Returns count of empty fields for display\n */\n public getEmptyFieldCount(fields: DetailField[]): number {\n return fields.filter(f => f.value === null || f.value === undefined || f.value === '').length;\n }\n\n // ========================================\n // Keyboard Navigation\n // ========================================\n\n @HostListener('document:keydown', ['$event'])\n onKeyDown(event: KeyboardEvent): void {\n if (!this.Visible) return;\n\n if (event.key === 'Escape') {\n this.onClose();\n } else if (event.key === 'ArrowUp' || event.key === 'k') {\n if (this.RowIndex > 0) {\n this.onNavigatePrev();\n }\n } else if (event.key === 'ArrowDown' || event.key === 'j') {\n if (this.RowIndex < this.TotalRows - 1) {\n this.onNavigateNext();\n }\n }\n }\n}\n","<!-- Row Detail Slide-in Panel -->\n@if (Visible) {\n <div class=\"row-detail-panel\"\n @slideIn\n [style.width.px]=\"PanelWidth\">\n <!-- Resize handle -->\n <div class=\"resize-handle\"\n (mousedown)=\"onResizeStart($event)\"\n [class.resizing]=\"IsResizing\">\n </div>\n <!-- Header -->\n <div class=\"panel-header\">\n <div class=\"header-left\">\n <i class=\"fa-solid fa-table-cells-large header-icon\"></i>\n <h3 class=\"panel-title\">Row Details</h3>\n </div>\n <div class=\"header-right\">\n <!-- Row navigation -->\n @if (TotalRows > 1) {\n <div class=\"row-nav\">\n <button class=\"nav-btn\"\n [disabled]=\"RowIndex === 0\"\n (click)=\"onNavigatePrev()\"\n title=\"Previous row (↑ or K)\">\n <i class=\"fa-solid fa-chevron-up\"></i>\n </button>\n <span class=\"row-indicator\">{{ RowIndex + 1 }} / {{ TotalRows }}</span>\n <button class=\"nav-btn\"\n [disabled]=\"RowIndex >= TotalRows - 1\"\n (click)=\"onNavigateNext()\"\n title=\"Next row (↓ or J)\">\n <i class=\"fa-solid fa-chevron-down\"></i>\n </button>\n </div>\n }\n <!-- Toggle empty fields -->\n <button class=\"action-btn\"\n (click)=\"toggleHideEmptyFields()\"\n [class.active]=\"HideEmptyFields\"\n [title]=\"HideEmptyFields ? 'Show empty fields' : 'Hide empty fields'\">\n <i class=\"fa-solid\" [class.fa-eye]=\"!HideEmptyFields\" [class.fa-eye-slash]=\"HideEmptyFields\"></i>\n </button>\n <!-- Copy JSON button -->\n <button class=\"action-btn\" (click)=\"copyRowAsJson()\" title=\"Copy row as JSON\">\n <i class=\"fa-solid fa-copy\"></i>\n </button>\n <!-- Close button -->\n <button class=\"close-btn\" (click)=\"onClose()\" title=\"Close (Esc)\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n </div>\n <!-- Content -->\n <div class=\"panel-content\">\n <!-- Primary Keys Section -->\n @if (getVisibleFields(PrimaryKeyFields).length > 0) {\n <div class=\"field-section\">\n <h4 class=\"section-title\">\n <i class=\"fa-solid fa-key section-icon pk-icon\"></i>\n Primary Key\n </h4>\n <div class=\"field-list\">\n @for (field of getVisibleFields(PrimaryKeyFields); track field) {\n <div class=\"field-item\">\n <div class=\"field-header\">\n <span class=\"field-name\">{{ field.displayName }}</span>\n <button class=\"copy-btn\" (click)=\"copyValue(field)\" title=\"Copy value\">\n <i class=\"fa-solid fa-copy\"></i>\n </button>\n </div>\n <div class=\"field-value\"\n [class.clickable]=\"field.targetEntityName\"\n (click)=\"field.targetEntityName && onEntityLinkClick(field)\">\n @if (field.targetEntityIcon) {\n <i\n [class]=\"field.targetEntityIcon\"\n class=\"entity-icon\"></i>\n }\n <span class=\"value-text monospace\">{{ field.formattedValue }}</span>\n @if (field.targetEntityName) {\n <i\n class=\"fa-solid fa-arrow-up-right-from-square link-icon\"></i>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n <!-- Foreign Keys Section -->\n @if (getVisibleFields(ForeignKeyFields).length > 0) {\n <div class=\"field-section\">\n <h4 class=\"section-title\">\n <i class=\"fa-solid fa-link section-icon fk-icon\"></i>\n Related Records\n </h4>\n <div class=\"field-list\">\n @for (field of getVisibleFields(ForeignKeyFields); track field) {\n <div class=\"field-item\">\n <div class=\"field-header\">\n <span class=\"field-name\">{{ field.displayName }}</span>\n @if (field.targetEntityName) {\n <span class=\"target-entity\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n {{ field.targetEntityName }}\n </span>\n }\n <button class=\"copy-btn\" (click)=\"copyValue(field)\" title=\"Copy value\">\n <i class=\"fa-solid fa-copy\"></i>\n </button>\n </div>\n @if (field.value != null) {\n <div class=\"field-value clickable\"\n (click)=\"onEntityLinkClick(field)\">\n @if (field.targetEntityIcon) {\n <i\n [class]=\"field.targetEntityIcon\"\n class=\"entity-icon\"></i>\n }\n <span class=\"value-text monospace\">{{ field.formattedValue }}</span>\n <i class=\"fa-solid fa-arrow-up-right-from-square link-icon\"></i>\n </div>\n }\n @if (field.value == null) {\n <div class=\"field-value empty\">\n <span class=\"value-text\">(empty)</span>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n <!-- Regular Fields Section -->\n @if (getVisibleFields(RegularFields).length > 0) {\n <div class=\"field-section\">\n <h4 class=\"section-title\">\n <i class=\"fa-solid fa-list section-icon\"></i>\n Fields\n @if (HideEmptyFields && getEmptyFieldCount(RegularFields) > 0) {\n <span class=\"hidden-count\">\n ({{ getEmptyFieldCount(RegularFields) }} empty hidden)\n </span>\n }\n </h4>\n <div class=\"field-list\">\n @for (field of getVisibleFields(RegularFields); track field) {\n <div class=\"field-item\">\n <div class=\"field-header\">\n <span class=\"field-name\">{{ field.displayName }}</span>\n <span class=\"field-type\">{{ field.sqlType }}</span>\n <button class=\"copy-btn\" (click)=\"copyValue(field)\" title=\"Copy value\">\n <i class=\"fa-solid fa-copy\"></i>\n </button>\n </div>\n <!-- JSON value -->\n @if (isJson(field.formattedValue)) {\n <div class=\"field-value json-value\"\n [class.expanded]=\"field.isExpanded\">\n <pre class=\"json-content\">{{ formatJson(field.formattedValue) }}</pre>\n <button class=\"expand-btn\" (click)=\"toggleFieldExpand(field)\">\n {{ field.isExpanded ? 'Collapse' : 'Expand' }}\n </button>\n </div>\n }\n <!-- Long text value -->\n @if (!isJson(field.formattedValue) && field.isLongText) {\n <div class=\"field-value long-text\"\n [class.expanded]=\"field.isExpanded\">\n <span class=\"value-text\">{{ field.formattedValue }}</span>\n <button class=\"expand-btn\" (click)=\"toggleFieldExpand(field)\">\n {{ field.isExpanded ? 'Show less' : 'Show more' }}\n </button>\n </div>\n }\n <!-- Boolean value -->\n @if (field.sqlType.toLowerCase() === 'bit' && !isJson(field.formattedValue)) {\n <div class=\"field-value boolean-value\"\n >\n <i [class]=\"field.value ? 'fa-solid fa-check-circle bool-true' : 'fa-solid fa-times-circle bool-false'\"></i>\n <span class=\"value-text\">{{ field.formattedValue }}</span>\n </div>\n }\n <!-- Empty value -->\n @if (field.value == null && !isJson(field.formattedValue)) {\n <div class=\"field-value empty\"\n >\n <span class=\"value-text\">(empty)</span>\n </div>\n }\n <!-- Regular value -->\n @if (field.value != null && !isJson(field.formattedValue) && !field.isLongText && field.sqlType.toLowerCase() !== 'bit') {\n <div class=\"field-value\"\n >\n <span class=\"value-text\"\n [class.monospace]=\"field.sqlType.toLowerCase().includes('uniqueidentifier') || field.name.toLowerCase().includes('id')\">\n {{ field.formattedValue }}\n </span>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n}\n\n<!-- Backdrop -->\n@if (Visible) {\n <div class=\"panel-backdrop\"\n (click)=\"onClose()\">\n </div>\n}\n"]}
@@ -1,6 +1,7 @@
1
1
  import { EventEmitter, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';
2
- import { RunQueryResult, QueryInfo } from '@memberjunction/core';
2
+ import { RunQueryResult } from '@memberjunction/core';
3
3
  import { BaseAngularComponent } from '@memberjunction/ng-base-types';
4
+ import { MJQueryEntityExtended } from '@memberjunction/core-entities';
4
5
  import { PageChangeEvent } from '@memberjunction/ng-pagination';
5
6
  import { CompositionTokenClickEvent } from '@memberjunction/ng-code-editor';
6
7
  import { QueryDataGridComponent } from '../query-data-grid/query-data-grid.component';
@@ -97,7 +98,7 @@ export declare class QueryViewerComponent extends BaseAngularComponent implement
97
98
  */
98
99
  CompositionTokenClick: EventEmitter<CompositionTokenClickEvent>;
99
100
  DataGrid: QueryDataGridComponent;
100
- QueryInfo: QueryInfo | null;
101
+ QueryInfo: MJQueryEntityExtended | null;
101
102
  QueryData: Record<string, unknown>[];
102
103
  IsLoading: boolean;
103
104
  ShowParamsPanel: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"query-viewer.component.d.ts","sourceRoot":"","sources":["../../../src/lib/query-viewer/query-viewer.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query-viewer.component.d.ts","sourceRoot":"","sources":["../../../src/lib/query-viewer/query-viewer.component.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { Subject } from 'rxjs';
3
3
  import { RunQuery } from '@memberjunction/core';
4
4
  import { BaseAngularComponent } from '@memberjunction/ng-base-types';
5
5
  import { UUIDsEqual } from '@memberjunction/global';
6
+ import { QueryEngine } from '@memberjunction/core-entities';
6
7
  import { UserInfoEngine } from '@memberjunction/core-entities';
7
8
  import { MJNotificationService } from '@memberjunction/ng-notifications';
8
9
  import { QueryDataGridComponent } from '../query-data-grid/query-data-grid.component';
@@ -275,7 +276,7 @@ export class QueryViewerComponent extends BaseAngularComponent {
275
276
  return;
276
277
  }
277
278
  // Load query info from metadata
278
- this.QueryInfo = this.ProviderToUse.Queries.find(q => UUIDsEqual(q.ID, this._queryId)) || null;
279
+ this.QueryInfo = QueryEngine.Instance.Queries.find(q => UUIDsEqual(q.ID, this._queryId)) || null;
279
280
  if (!this.QueryInfo) {
280
281
  this.LastError = `Query with ID ${this._queryId} not found`;
281
282
  this.cdr.markForCheck();
@@ -284,8 +285,8 @@ export class QueryViewerComponent extends BaseAngularComponent {
284
285
  // Load saved state from User Settings
285
286
  await this.loadSavedState();
286
287
  // Determine if we should show params or auto-run
287
- const hasParams = this.QueryInfo.Parameters && this.QueryInfo.Parameters.length > 0;
288
- const hasRequiredParams = hasParams && this.QueryInfo.Parameters.some(p => p.IsRequired);
288
+ const hasParams = this.QueryInfo.QueryParameters && this.QueryInfo.QueryParameters.length > 0;
289
+ const hasRequiredParams = hasParams && this.QueryInfo.QueryParameters.some(p => p.IsRequired);
289
290
  if (hasParams) {
290
291
  // Check if all required params have saved values
291
292
  const canAutoRun = this.AutoRun && this.canAutoRunWithSavedParams();
@@ -307,7 +308,7 @@ export class QueryViewerComponent extends BaseAngularComponent {
307
308
  canAutoRunWithSavedParams() {
308
309
  if (!this.QueryInfo)
309
310
  return false;
310
- const requiredParams = this.QueryInfo.Parameters?.filter(p => p.IsRequired) || [];
311
+ const requiredParams = this.QueryInfo.QueryParameters?.filter(p => p.IsRequired) || [];
311
312
  for (const param of requiredParams) {
312
313
  const savedValue = this.SavedParams[param.Name];
313
314
  if (savedValue === null || savedValue === undefined || savedValue === '') {
@@ -462,7 +463,7 @@ export class QueryViewerComponent extends BaseAngularComponent {
462
463
  if (this.HasRun) {
463
464
  this.RunQuery(this.SavedParams, this.CurrentPageNumber);
464
465
  }
465
- else if (this.QueryInfo?.Parameters?.length) {
466
+ else if (this.QueryInfo?.QueryParameters?.length) {
466
467
  this.ShowParamsPanel = true;
467
468
  this.cdr.markForCheck();
468
469
  }
@@ -495,7 +496,7 @@ export class QueryViewerComponent extends BaseAngularComponent {
495
496
  this.OnRefreshRequest();
496
497
  }
497
498
  get HasParameters() {
498
- return (this.QueryInfo?.Parameters?.length || 0) > 0;
499
+ return (this.QueryInfo?.QueryParameters?.length || 0) > 0;
499
500
  }
500
501
  /**
501
502
  * Normalizes array-typed parameters. Handles the case where saved state
@@ -504,10 +505,10 @@ export class QueryViewerComponent extends BaseAngularComponent {
504
505
  * array syntax, and parses cleanly.
505
506
  */
506
507
  normalizeArrayParams(params) {
507
- if (!this.QueryInfo?.Parameters?.length)
508
+ if (!this.QueryInfo?.QueryParameters?.length)
508
509
  return params;
509
510
  const result = { ...params };
510
- for (const paramDef of this.QueryInfo.Parameters) {
511
+ for (const paramDef of this.QueryInfo.QueryParameters) {
511
512
  if (paramDef.Type !== 'array' || !(paramDef.Name in result))
512
513
  continue;
513
514
  const value = result[paramDef.Name];
@@ -612,5 +613,5 @@ export class QueryViewerComponent extends BaseAngularComponent {
612
613
  type: ViewChild,
613
614
  args: [QueryDataGridComponent]
614
615
  }] }); })();
615
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(QueryViewerComponent, { className: "QueryViewerComponent", filePath: "src/lib/query-viewer/query-viewer.component.ts", lineNumber: 60 }); })();
616
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(QueryViewerComponent, { className: "QueryViewerComponent", filePath: "src/lib/query-viewer/query-viewer.component.ts", lineNumber: 61 }); })();
616
617
  //# sourceMappingURL=query-viewer.component.js.map