@memberjunction/ng-query-viewer 5.10.1 → 5.11.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.
@@ -214,6 +214,10 @@ export class QueryViewerComponent {
214
214
  * Fired when user wants to open the full query record
215
215
  */
216
216
  OpenQueryRecord = new EventEmitter();
217
+ /**
218
+ * Fired when a composition token ({{query:"..."}}) is clicked in the SQL info panel
219
+ */
220
+ CompositionTokenClick = new EventEmitter();
217
221
  // ========================================
218
222
  // View Children
219
223
  // ========================================
@@ -458,6 +462,9 @@ export class QueryViewerComponent {
458
462
  OnOpenQueryRecord(event) {
459
463
  this.OpenQueryRecord.emit(event);
460
464
  }
465
+ OnCompositionTokenClick(event) {
466
+ this.CompositionTokenClick.emit(event);
467
+ }
461
468
  Refresh() {
462
469
  this.OnRefreshRequest();
463
470
  }
@@ -470,7 +477,7 @@ export class QueryViewerComponent {
470
477
  } if (rf & 2) {
471
478
  let _t;
472
479
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.DataGrid = _t.first);
473
- } }, inputs: { QueryId: "QueryId", AutoRun: "AutoRun", SelectionMode: "SelectionMode", ShowToolbar: "ShowToolbar", VisualConfig: "VisualConfig", PersistState: "PersistState", PersistParameters: "PersistParameters" }, outputs: { EntityLinkClick: "EntityLinkClick", RowDoubleClick: "RowDoubleClick", SelectionChange: "SelectionChange", QueryStart: "QueryStart", QueryComplete: "QueryComplete", QueryError: "QueryError", OpenQueryRecord: "OpenQueryRecord" }, standalone: false, decls: 10, vars: 11, consts: [[1, "query-viewer-container"], [1, "query-header"], [1, "query-content"], [1, "no-query-state"], [1, "error-state"], [1, "query-description"], [1, "execution-error"], [3, "QueryInfo", "Data", "SelectionMode", "ShowToolbar", "VisualConfig", "IsLoading"], [3, "ParametersSubmit", "Close", "QueryInfo", "InitialValues", "IsOpen"], [3, "Close", "OpenRecord", "QueryInfo", "Visible"], [1, "query-info"], [1, "query-name"], [1, "query-category"], [1, "query-actions"], ["title", "Query information", 1, "btn", "btn-secondary", 3, "click", "disabled"], [1, "fa-solid", "fa-info-circle"], ["title", "Edit parameters", 1, "btn", "btn-secondary", 3, "disabled"], [1, "execution-stats"], [1, "fa-solid", "fa-folder"], ["title", "Edit parameters", 1, "btn", "btn-secondary", 3, "click", "disabled"], [1, "fa-solid", "fa-sliders"], [1, "fa-solid", "fa-clock"], [1, "fa-solid", "fa-database", "state-icon"], [1, "state-message"], [1, "fa-solid", "fa-exclamation-triangle", "state-icon", "error"], [1, "fa-solid", "fa-exclamation-circle"], [1, "btn", "btn-secondary", 3, "click"], [3, "EntityLinkClick", "RowDoubleClick", "SelectionChange", "GridStateChange", "RefreshRequest", "QueryInfo", "Data", "SelectionMode", "ShowToolbar", "VisualConfig", "IsLoading"]], template: function QueryViewerComponent_Template(rf, ctx) { if (rf & 1) {
480
+ } }, inputs: { QueryId: "QueryId", AutoRun: "AutoRun", SelectionMode: "SelectionMode", ShowToolbar: "ShowToolbar", VisualConfig: "VisualConfig", PersistState: "PersistState", PersistParameters: "PersistParameters" }, outputs: { EntityLinkClick: "EntityLinkClick", RowDoubleClick: "RowDoubleClick", SelectionChange: "SelectionChange", QueryStart: "QueryStart", QueryComplete: "QueryComplete", QueryError: "QueryError", OpenQueryRecord: "OpenQueryRecord", CompositionTokenClick: "CompositionTokenClick" }, standalone: false, decls: 10, vars: 11, consts: [[1, "query-viewer-container"], [1, "query-header"], [1, "query-content"], [1, "no-query-state"], [1, "error-state"], [1, "query-description"], [1, "execution-error"], [3, "QueryInfo", "Data", "SelectionMode", "ShowToolbar", "VisualConfig", "IsLoading"], [3, "ParametersSubmit", "Close", "QueryInfo", "InitialValues", "IsOpen"], [3, "Close", "OpenRecord", "CompositionTokenClick", "QueryInfo", "Visible"], [1, "query-info"], [1, "query-name"], [1, "query-category"], [1, "query-actions"], ["title", "Query information", 1, "btn", "btn-secondary", 3, "click", "disabled"], [1, "fa-solid", "fa-info-circle"], ["title", "Edit parameters", 1, "btn", "btn-secondary", 3, "disabled"], [1, "execution-stats"], [1, "fa-solid", "fa-folder"], ["title", "Edit parameters", 1, "btn", "btn-secondary", 3, "click", "disabled"], [1, "fa-solid", "fa-sliders"], [1, "fa-solid", "fa-clock"], [1, "fa-solid", "fa-database", "state-icon"], [1, "state-message"], [1, "fa-solid", "fa-exclamation-triangle", "state-icon", "error"], [1, "fa-solid", "fa-exclamation-circle"], [1, "btn", "btn-secondary", 3, "click"], [3, "EntityLinkClick", "RowDoubleClick", "SelectionChange", "GridStateChange", "RefreshRequest", "QueryInfo", "Data", "SelectionMode", "ShowToolbar", "VisualConfig", "IsLoading"]], template: function QueryViewerComponent_Template(rf, ctx) { if (rf & 1) {
474
481
  i0.ɵɵelementStart(0, "div", 0);
475
482
  i0.ɵɵconditionalCreate(1, QueryViewerComponent_Conditional_1_Template, 11, 5, "div", 1);
476
483
  i0.ɵɵelementStart(2, "div", 2);
@@ -484,7 +491,7 @@ export class QueryViewerComponent {
484
491
  i0.ɵɵlistener("ParametersSubmit", function QueryViewerComponent_Template_mj_query_parameter_form_ParametersSubmit_8_listener($event) { return ctx.OnParametersSubmit($event); })("Close", function QueryViewerComponent_Template_mj_query_parameter_form_Close_8_listener() { return ctx.OnParamsPanelClose(); });
485
492
  i0.ɵɵelementEnd();
486
493
  i0.ɵɵelementStart(9, "mj-query-info-panel", 9);
487
- i0.ɵɵlistener("Close", function QueryViewerComponent_Template_mj_query_info_panel_Close_9_listener() { return ctx.CloseInfoPanel(); })("OpenRecord", function QueryViewerComponent_Template_mj_query_info_panel_OpenRecord_9_listener($event) { return ctx.OnOpenQueryRecord($event); });
494
+ i0.ɵɵlistener("Close", function QueryViewerComponent_Template_mj_query_info_panel_Close_9_listener() { return ctx.CloseInfoPanel(); })("OpenRecord", function QueryViewerComponent_Template_mj_query_info_panel_OpenRecord_9_listener($event) { return ctx.OnOpenQueryRecord($event); })("CompositionTokenClick", function QueryViewerComponent_Template_mj_query_info_panel_CompositionTokenClick_9_listener($event) { return ctx.OnCompositionTokenClick($event); });
488
495
  i0.ɵɵelementEnd()();
489
496
  } if (rf & 2) {
490
497
  i0.ɵɵadvance();
@@ -507,7 +514,7 @@ export class QueryViewerComponent {
507
514
  }
508
515
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(QueryViewerComponent, [{
509
516
  type: Component,
510
- args: [{ standalone: false, selector: 'mj-query-viewer', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- Query Viewer Component -->\n<div class=\"query-viewer-container\">\n <!-- Header bar when query is loaded -->\n @if (QueryInfo) {\n <div class=\"query-header\">\n <div class=\"query-info\">\n <h3 class=\"query-name\">{{ QueryInfo.Name }}</h3>\n @if (QueryInfo.Category) {\n <span class=\"query-category\">\n <i class=\"fa-solid fa-folder\"></i>\n {{ QueryInfo.Category }}\n </span>\n }\n </div>\n <div class=\"query-actions\">\n <!-- Info button -->\n <button (click)=\"OpenInfoPanel()\"\n [disabled]=\"IsLoading\"\n class=\"btn btn-secondary\"\n title=\"Query information\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Info\n </button>\n <!-- Parameters button -->\n @if (HasParameters) {\n <button\n (click)=\"OpenParametersPanel()\"\n [disabled]=\"IsLoading\"\n class=\"btn btn-secondary\"\n title=\"Edit parameters\">\n <i class=\"fa-solid fa-sliders\"></i>\n Parameters\n </button>\n }\n <!-- Execution stats -->\n @if (ExecutionTimeMs !== null) {\n <span class=\"execution-stats\">\n <i class=\"fa-solid fa-clock\"></i>\n {{ ExecutionTimeMs }}ms\n </span>\n }\n </div>\n </div>\n }\n\n <!-- Main content area -->\n <div class=\"query-content\">\n <!-- No query selected state -->\n @if (!QueryId) {\n <div class=\"no-query-state\">\n <i class=\"fa-solid fa-database state-icon\"></i>\n <p class=\"state-message\">Select a query to view results</p>\n </div>\n }\n\n <!-- Query not found error -->\n @if (QueryId && !QueryInfo && LastError) {\n <div class=\"error-state\">\n <i class=\"fa-solid fa-exclamation-triangle state-icon error\"></i>\n <p class=\"state-message\">{{ LastError }}</p>\n </div>\n }\n\n <!-- Query description -->\n @if (QueryInfo?.Description && !HasRun) {\n <div class=\"query-description\">\n <i class=\"fa-solid fa-info-circle\"></i>\n {{ QueryInfo?.Description }}\n </div>\n }\n\n <!-- Query execution error -->\n @if (LastError && HasRun) {\n <div class=\"execution-error\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n <span>{{ LastError }}</span>\n <button class=\"btn btn-secondary\" (click)=\"Refresh()\">Try Again</button>\n </div>\n }\n\n <!-- Grid -->\n @if (QueryInfo) {\n <mj-query-data-grid\n [QueryInfo]=\"QueryInfo\"\n [Data]=\"QueryData\"\n [SelectionMode]=\"SelectionMode\"\n [ShowToolbar]=\"ShowToolbar\"\n [VisualConfig]=\"VisualConfig\"\n [IsLoading]=\"IsLoading\"\n (EntityLinkClick)=\"OnEntityLinkClick($event)\"\n (RowDoubleClick)=\"OnRowDoubleClick($event)\"\n (SelectionChange)=\"OnSelectionChange($event)\"\n (GridStateChange)=\"OnGridStateChange($event)\"\n (RefreshRequest)=\"OnRefreshRequest()\">\n </mj-query-data-grid>\n }\n </div>\n\n <!-- Parameter form panel -->\n <mj-query-parameter-form\n [QueryInfo]=\"QueryInfo\"\n [InitialValues]=\"SavedParams\"\n [IsOpen]=\"ShowParamsPanel\"\n (ParametersSubmit)=\"OnParametersSubmit($event)\"\n (Close)=\"OnParamsPanelClose()\">\n </mj-query-parameter-form>\n\n <!-- Query info panel -->\n <mj-query-info-panel\n [QueryInfo]=\"QueryInfo\"\n [Visible]=\"ShowInfoPanel\"\n (Close)=\"CloseInfoPanel()\"\n (OpenRecord)=\"OnOpenQueryRecord($event)\">\n </mj-query-info-panel>\n</div>\n", styles: ["/* Query Viewer Component Styles */\n\n:host {\n display: block;\n height: 100%;\n}\n\n.query-viewer-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #fff;\n position: relative;\n overflow: hidden;\n}\n\n/* Header */\n.query-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: #f8f9fa;\n border-bottom: 1px solid #e0e0e0;\n flex-shrink: 0;\n}\n\n.query-info {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.query-name {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n}\n\n.query-category {\n font-size: 12px;\n color: #666;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.query-category i {\n font-size: 10px;\n color: #888;\n}\n\n.query-actions {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.query-actions button i {\n margin-right: 6px;\n}\n\n.execution-stats {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: #888;\n padding: 4px 8px;\n background: #f0f0f0;\n border-radius: 4px;\n}\n\n.execution-stats i {\n font-size: 10px;\n}\n\n/* Content area */\n.query-content {\n flex: 1;\n min-height: 0;\n position: relative;\n display: flex;\n flex-direction: column;\n}\n\n/* State displays */\n.no-query-state,\n.error-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 40px;\n text-align: center;\n}\n\n.state-icon {\n font-size: 64px;\n color: #ccc;\n margin-bottom: 20px;\n}\n\n.state-icon.error {\n color: #f44336;\n}\n\n.state-message {\n font-size: 16px;\n color: #666;\n margin: 0;\n}\n\n/* Query description */\n.query-description {\n padding: 12px 16px;\n background: #e3f2fd;\n border-bottom: 1px solid #bbdefb;\n font-size: 13px;\n color: #1565c0;\n display: flex;\n align-items: flex-start;\n gap: 8px;\n}\n\n.query-description i {\n margin-top: 2px;\n flex-shrink: 0;\n}\n\n/* Execution error */\n.execution-error {\n padding: 12px 16px;\n background: #ffebee;\n border-bottom: 1px solid #ffcdd2;\n font-size: 13px;\n color: #c62828;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-error i {\n flex-shrink: 0;\n}\n\n.execution-error span {\n flex: 1;\n}\n\n/* Grid takes remaining space */\nmj-query-data-grid {\n flex: 1;\n min-height: 0;\n}\n\n/* Buttons */\n.btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n padding: 6px 12px;\n font-size: 13px;\n font-weight: 500;\n border: 1px solid transparent;\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.btn i {\n font-size: 11px;\n}\n\n.btn-secondary {\n background: #fff;\n color: #333;\n border-color: #ccc;\n}\n\n.btn-secondary:hover:not(:disabled) {\n background: #f5f5f5;\n border-color: #bbb;\n}\n\n/* Responsive */\n@media (max-width: 768px) {\n .query-header {\n flex-direction: column;\n align-items: flex-start;\n gap: 12px;\n }\n\n .query-actions {\n width: 100%;\n justify-content: flex-end;\n }\n}\n"] }]
517
+ args: [{ standalone: false, selector: 'mj-query-viewer', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- Query Viewer Component -->\n<div class=\"query-viewer-container\">\n <!-- Header bar when query is loaded -->\n @if (QueryInfo) {\n <div class=\"query-header\">\n <div class=\"query-info\">\n <h3 class=\"query-name\">{{ QueryInfo.Name }}</h3>\n @if (QueryInfo.Category) {\n <span class=\"query-category\">\n <i class=\"fa-solid fa-folder\"></i>\n {{ QueryInfo.Category }}\n </span>\n }\n </div>\n <div class=\"query-actions\">\n <!-- Info button -->\n <button (click)=\"OpenInfoPanel()\"\n [disabled]=\"IsLoading\"\n class=\"btn btn-secondary\"\n title=\"Query information\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Info\n </button>\n <!-- Parameters button -->\n @if (HasParameters) {\n <button\n (click)=\"OpenParametersPanel()\"\n [disabled]=\"IsLoading\"\n class=\"btn btn-secondary\"\n title=\"Edit parameters\">\n <i class=\"fa-solid fa-sliders\"></i>\n Parameters\n </button>\n }\n <!-- Execution stats -->\n @if (ExecutionTimeMs !== null) {\n <span class=\"execution-stats\">\n <i class=\"fa-solid fa-clock\"></i>\n {{ ExecutionTimeMs }}ms\n </span>\n }\n </div>\n </div>\n }\n\n <!-- Main content area -->\n <div class=\"query-content\">\n <!-- No query selected state -->\n @if (!QueryId) {\n <div class=\"no-query-state\">\n <i class=\"fa-solid fa-database state-icon\"></i>\n <p class=\"state-message\">Select a query to view results</p>\n </div>\n }\n\n <!-- Query not found error -->\n @if (QueryId && !QueryInfo && LastError) {\n <div class=\"error-state\">\n <i class=\"fa-solid fa-exclamation-triangle state-icon error\"></i>\n <p class=\"state-message\">{{ LastError }}</p>\n </div>\n }\n\n <!-- Query description -->\n @if (QueryInfo?.Description && !HasRun) {\n <div class=\"query-description\">\n <i class=\"fa-solid fa-info-circle\"></i>\n {{ QueryInfo?.Description }}\n </div>\n }\n\n <!-- Query execution error -->\n @if (LastError && HasRun) {\n <div class=\"execution-error\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n <span>{{ LastError }}</span>\n <button class=\"btn btn-secondary\" (click)=\"Refresh()\">Try Again</button>\n </div>\n }\n\n <!-- Grid -->\n @if (QueryInfo) {\n <mj-query-data-grid\n [QueryInfo]=\"QueryInfo\"\n [Data]=\"QueryData\"\n [SelectionMode]=\"SelectionMode\"\n [ShowToolbar]=\"ShowToolbar\"\n [VisualConfig]=\"VisualConfig\"\n [IsLoading]=\"IsLoading\"\n (EntityLinkClick)=\"OnEntityLinkClick($event)\"\n (RowDoubleClick)=\"OnRowDoubleClick($event)\"\n (SelectionChange)=\"OnSelectionChange($event)\"\n (GridStateChange)=\"OnGridStateChange($event)\"\n (RefreshRequest)=\"OnRefreshRequest()\">\n </mj-query-data-grid>\n }\n </div>\n\n <!-- Parameter form panel -->\n <mj-query-parameter-form\n [QueryInfo]=\"QueryInfo\"\n [InitialValues]=\"SavedParams\"\n [IsOpen]=\"ShowParamsPanel\"\n (ParametersSubmit)=\"OnParametersSubmit($event)\"\n (Close)=\"OnParamsPanelClose()\">\n </mj-query-parameter-form>\n\n <!-- Query info panel -->\n <mj-query-info-panel\n [QueryInfo]=\"QueryInfo\"\n [Visible]=\"ShowInfoPanel\"\n (Close)=\"CloseInfoPanel()\"\n (OpenRecord)=\"OnOpenQueryRecord($event)\"\n (CompositionTokenClick)=\"OnCompositionTokenClick($event)\">\n </mj-query-info-panel>\n</div>\n", styles: ["/* Query Viewer Component Styles */\n\n:host {\n display: block;\n height: 100%;\n}\n\n.query-viewer-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #fff;\n position: relative;\n overflow: hidden;\n}\n\n/* Header */\n.query-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: #f8f9fa;\n border-bottom: 1px solid #e0e0e0;\n flex-shrink: 0;\n}\n\n.query-info {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.query-name {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n}\n\n.query-category {\n font-size: 12px;\n color: #666;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.query-category i {\n font-size: 10px;\n color: #888;\n}\n\n.query-actions {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.query-actions button i {\n margin-right: 6px;\n}\n\n.execution-stats {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: #888;\n padding: 4px 8px;\n background: #f0f0f0;\n border-radius: 4px;\n}\n\n.execution-stats i {\n font-size: 10px;\n}\n\n/* Content area */\n.query-content {\n flex: 1;\n min-height: 0;\n position: relative;\n display: flex;\n flex-direction: column;\n}\n\n/* State displays */\n.no-query-state,\n.error-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 40px;\n text-align: center;\n}\n\n.state-icon {\n font-size: 64px;\n color: #ccc;\n margin-bottom: 20px;\n}\n\n.state-icon.error {\n color: #f44336;\n}\n\n.state-message {\n font-size: 16px;\n color: #666;\n margin: 0;\n}\n\n/* Query description */\n.query-description {\n padding: 12px 16px;\n background: #e3f2fd;\n border-bottom: 1px solid #bbdefb;\n font-size: 13px;\n color: #1565c0;\n display: flex;\n align-items: flex-start;\n gap: 8px;\n}\n\n.query-description i {\n margin-top: 2px;\n flex-shrink: 0;\n}\n\n/* Execution error */\n.execution-error {\n padding: 12px 16px;\n background: #ffebee;\n border-bottom: 1px solid #ffcdd2;\n font-size: 13px;\n color: #c62828;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-error i {\n flex-shrink: 0;\n}\n\n.execution-error span {\n flex: 1;\n}\n\n/* Grid takes remaining space */\nmj-query-data-grid {\n flex: 1;\n min-height: 0;\n}\n\n/* Buttons */\n.btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n padding: 6px 12px;\n font-size: 13px;\n font-weight: 500;\n border: 1px solid transparent;\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.btn i {\n font-size: 11px;\n}\n\n.btn-secondary {\n background: #fff;\n color: #333;\n border-color: #ccc;\n}\n\n.btn-secondary:hover:not(:disabled) {\n background: #f5f5f5;\n border-color: #bbb;\n}\n\n/* Responsive */\n@media (max-width: 768px) {\n .query-header {\n flex-direction: column;\n align-items: flex-start;\n gap: 12px;\n }\n\n .query-actions {\n width: 100%;\n justify-content: flex-end;\n }\n}\n"] }]
511
518
  }], () => [{ type: i0.ChangeDetectorRef }], { QueryId: [{
512
519
  type: Input
513
520
  }], AutoRun: [{
@@ -536,9 +543,11 @@ export class QueryViewerComponent {
536
543
  type: Output
537
544
  }], OpenQueryRecord: [{
538
545
  type: Output
546
+ }], CompositionTokenClick: [{
547
+ type: Output
539
548
  }], DataGrid: [{
540
549
  type: ViewChild,
541
550
  args: [QueryDataGridComponent]
542
551
  }] }); })();
543
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(QueryViewerComponent, { className: "QueryViewerComponent", filePath: "src/lib/query-viewer/query-viewer.component.ts", lineNumber: 58 }); })();
552
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(QueryViewerComponent, { className: "QueryViewerComponent", filePath: "src/lib/query-viewer/query-viewer.component.ts", lineNumber: 59 }); })();
544
553
  //# sourceMappingURL=query-viewer.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"query-viewer.component.js","sourceRoot":"","sources":["../../../src/lib/query-viewer/query-viewer.component.ts","../../../src/lib/query-viewer/query-viewer.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 ViewChild\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { RunQuery, RunQueryParams, Metadata, QueryInfo } from '@memberjunction/core';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { RunQueryResult } from '@memberjunction/core';\nimport { UserInfoEngine } from '@memberjunction/core-entities';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { QueryDataGridComponent } from '../query-data-grid/query-data-grid.component';\nimport {\n QueryGridSelectionMode,\n QueryGridState,\n QueryGridVisualConfig,\n QueryParameterValues,\n QueryEntityLinkClickEvent,\n QueryGridStateChangedEvent,\n QuerySelectionChangedEvent,\n QueryRowClickEvent,\n getQueryGridStateKey,\n getQueryParamsKey\n} from '../query-data-grid/models/query-grid-types';\n\n/**\n * A composite component that provides a complete query viewing experience.\n * Features:\n * - Automatic parameter form display when query has parameters\n * - Grid state persistence to User Settings\n * - Parameter persistence to User Settings\n * - Entity linking for clickable record IDs\n * - Auto-run capability when all required params have saved values\n *\n * @example\n * ```html\n * <mj-query-viewer\n * [QueryId]=\"selectedQueryId\"\n * [AutoRun]=\"true\"\n * (EntityLinkClick)=\"openRecord($event)\">\n * </mj-query-viewer>\n * ```\n */\n@Component({\n standalone: false,\n selector: 'mj-query-viewer',\n templateUrl: './query-viewer.component.html',\n styleUrls: ['./query-viewer.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class QueryViewerComponent implements OnInit, OnDestroy {\n // ========================================\n // Inputs\n // ========================================\n\n private _queryId: string | null = null;\n /**\n * The ID of the query to display\n */\n @Input()\n set QueryId(value: string | null) {\n const previous = this._queryId;\n this._queryId = value;\n if (value !== previous) {\n this.onQueryIdChanged();\n }\n }\n get QueryId(): string | null {\n return this._queryId;\n }\n\n /**\n * Whether to auto-run the query when all required params have saved values\n */\n @Input() AutoRun: boolean = true;\n\n /**\n * Selection mode for the grid\n */\n @Input() SelectionMode: QueryGridSelectionMode = 'single';\n\n /**\n * Whether to show the toolbar\n */\n @Input() ShowToolbar: boolean = true;\n\n /**\n * Visual configuration for the grid\n */\n @Input() VisualConfig: QueryGridVisualConfig = {};\n\n /**\n * Whether to persist grid state\n */\n @Input() PersistState: boolean = true;\n\n /**\n * Whether to persist parameter values\n */\n @Input() PersistParameters: boolean = true;\n\n // ========================================\n // Outputs\n // ========================================\n\n /**\n * Fired when an entity link is clicked in the grid\n */\n @Output() EntityLinkClick = new EventEmitter<QueryEntityLinkClickEvent>();\n\n /**\n * Fired when a row is double-clicked\n */\n @Output() RowDoubleClick = new EventEmitter<QueryRowClickEvent>();\n\n /**\n * Fired when selection changes\n */\n @Output() SelectionChange = new EventEmitter<QuerySelectionChangedEvent>();\n\n /**\n * Fired when query execution starts\n */\n @Output() QueryStart = new EventEmitter<void>();\n\n /**\n * Fired when query execution completes\n */\n @Output() QueryComplete = new EventEmitter<RunQueryResult>();\n\n /**\n * Fired when query execution fails\n */\n @Output() QueryError = new EventEmitter<Error>();\n\n /**\n * Fired when user wants to open the full query record\n */\n @Output() OpenQueryRecord = new EventEmitter<{ queryId: string; queryName: string }>();\n\n // ========================================\n // View Children\n // ========================================\n\n @ViewChild(QueryDataGridComponent) DataGrid!: QueryDataGridComponent;\n\n // ========================================\n // Internal State\n // ========================================\n\n public QueryInfo: QueryInfo | null = null;\n public QueryData: Record<string, unknown>[] = [];\n public IsLoading: boolean = false;\n public ShowParamsPanel: boolean = false;\n public ShowInfoPanel: boolean = false;\n public HasRun: boolean = false;\n public LastError: string | null = null;\n public ExecutionTimeMs: number | null = null;\n\n public SavedGridState: QueryGridState | null = null;\n public SavedParams: QueryParameterValues = {};\n\n private metadata = new Metadata();\n private destroy$ = new Subject<void>();\n private userInfoEngine = UserInfoEngine.Instance;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // ========================================\n // Query Loading\n // ========================================\n\n private async onQueryIdChanged(): Promise<void> {\n // Reset state\n this.QueryInfo = null;\n this.QueryData = [];\n this.HasRun = false;\n this.LastError = null;\n this.ExecutionTimeMs = null;\n this.SavedGridState = null;\n this.SavedParams = {};\n this.ShowParamsPanel = false;\n this.cdr.markForCheck();\n\n if (!this._queryId) {\n return;\n }\n\n // Load query info from metadata\n this.QueryInfo = this.metadata.Queries.find(q => UUIDsEqual(q.ID, this._queryId)) || null;\n\n if (!this.QueryInfo) {\n this.LastError = `Query with ID ${this._queryId} not found`;\n this.cdr.markForCheck();\n return;\n }\n\n // Load saved state from User Settings\n await this.loadSavedState();\n\n // Determine if we should show params or auto-run\n const hasParams = this.QueryInfo.Parameters && this.QueryInfo.Parameters.length > 0;\n const hasRequiredParams = hasParams && this.QueryInfo.Parameters.some(p => p.IsRequired);\n\n if (hasParams) {\n // Check if all required params have saved values\n const canAutoRun = this.AutoRun && this.canAutoRunWithSavedParams();\n\n if (canAutoRun) {\n // Auto-run with saved parameters\n await this.RunQuery(this.SavedParams);\n } else {\n // Show parameter panel\n this.ShowParamsPanel = true;\n }\n } else {\n // No parameters - auto-run immediately\n await this.RunQuery({});\n }\n\n this.cdr.markForCheck();\n }\n\n private canAutoRunWithSavedParams(): boolean {\n if (!this.QueryInfo) return false;\n\n const requiredParams = this.QueryInfo.Parameters?.filter(p => p.IsRequired) || [];\n\n for (const param of requiredParams) {\n const savedValue = this.SavedParams[param.Name];\n if (savedValue === null || savedValue === undefined || savedValue === '') {\n return false;\n }\n if (param.Type === 'array' && Array.isArray(savedValue) && savedValue.length === 0) {\n return false;\n }\n }\n\n return true;\n }\n\n // ========================================\n // State Persistence\n // ========================================\n\n private async loadSavedState(): Promise<void> {\n if (!this._queryId) return;\n\n try {\n // Load grid state\n if (this.PersistState) {\n const gridStateKey = getQueryGridStateKey(this._queryId);\n const gridStateSetting = await this.getUserSetting(gridStateKey);\n if (gridStateSetting) {\n this.SavedGridState = JSON.parse(gridStateSetting) as QueryGridState;\n }\n }\n\n // Load saved parameters\n if (this.PersistParameters) {\n const paramsKey = getQueryParamsKey(this._queryId);\n const paramsSetting = await this.getUserSetting(paramsKey);\n if (paramsSetting) {\n this.SavedParams = JSON.parse(paramsSetting) as QueryParameterValues;\n }\n }\n } catch (error) {\n console.warn('Error loading saved query state:', error);\n }\n }\n\n private async saveGridState(state: QueryGridState): Promise<void> {\n if (!this._queryId || !this.PersistState) return;\n\n try {\n const key = getQueryGridStateKey(this._queryId);\n await this.setUserSetting(key, JSON.stringify(state));\n } catch (error) {\n console.warn('Error saving grid state:', error);\n }\n }\n\n private async saveParameters(params: QueryParameterValues): Promise<void> {\n if (!this._queryId || !this.PersistParameters) return;\n\n try {\n const key = getQueryParamsKey(this._queryId);\n await this.setUserSetting(key, JSON.stringify(params));\n } catch (error) {\n console.warn('Error saving parameters:', error);\n }\n }\n\n private async getUserSetting(key: string): Promise<string | undefined> {\n return this.userInfoEngine.GetSetting(key);\n }\n\n private async setUserSetting(key: string, value: string): Promise<void> {\n await this.userInfoEngine.SetSetting(key, value);\n }\n\n // ========================================\n // Query Execution\n // ========================================\n\n public async RunQuery(params: QueryParameterValues): Promise<void> {\n if (!this.QueryInfo || !this._queryId) return;\n\n this.IsLoading = true;\n this.LastError = null;\n this.QueryStart.emit();\n this.cdr.markForCheck();\n\n // Save parameters for next time\n this.SavedParams = params;\n await this.saveParameters(params);\n\n const startTime = performance.now();\n\n try {\n const runQuery = new RunQuery();\n const runParams: RunQueryParams = {\n QueryID: this._queryId,\n Parameters: params as Record<string, unknown>\n };\n\n const result = await runQuery.RunQuery(runParams);\n\n this.ExecutionTimeMs = Math.round(performance.now() - startTime);\n\n if (result.Success) {\n this.QueryData = result.Results || [];\n this.HasRun = true;\n this.ShowParamsPanel = false;\n this.QueryComplete.emit(result);\n } else {\n this.LastError = result.ErrorMessage || 'Query execution failed';\n this.QueryError.emit(new Error(this.LastError));\n MJNotificationService.Instance.CreateSimpleNotification(\n this.LastError,\n 'error',\n 5000\n );\n }\n } catch (error) {\n this.ExecutionTimeMs = Math.round(performance.now() - startTime);\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n this.LastError = errorMessage;\n this.QueryError.emit(error instanceof Error ? error : new Error(errorMessage));\n MJNotificationService.Instance.CreateSimpleNotification(\n `Error running query: ${errorMessage}`,\n 'error',\n 5000\n );\n } finally {\n this.IsLoading = false;\n this.cdr.markForCheck();\n }\n }\n\n // ========================================\n // Event Handlers\n // ========================================\n\n public OnParametersSubmit(params: QueryParameterValues): void {\n this.RunQuery(params);\n }\n\n public OnParamsPanelClose(): void {\n this.ShowParamsPanel = false;\n this.cdr.markForCheck();\n }\n\n public OnGridStateChange(event: QueryGridStateChangedEvent): void {\n this.saveGridState(event.state);\n }\n\n public OnEntityLinkClick(event: QueryEntityLinkClickEvent): void {\n this.EntityLinkClick.emit(event);\n }\n\n public OnRowDoubleClick(event: QueryRowClickEvent): void {\n this.RowDoubleClick.emit(event);\n }\n\n public OnSelectionChange(event: QuerySelectionChangedEvent): void {\n this.SelectionChange.emit(event);\n }\n\n public OnRefreshRequest(): void {\n if (this.HasRun) {\n this.RunQuery(this.SavedParams);\n } else if (this.QueryInfo?.Parameters?.length) {\n this.ShowParamsPanel = true;\n this.cdr.markForCheck();\n } else {\n this.RunQuery({});\n }\n }\n\n // ========================================\n // Public API\n // ========================================\n\n public OpenParametersPanel(): void {\n this.ShowParamsPanel = true;\n this.cdr.markForCheck();\n }\n\n public OpenInfoPanel(): void {\n this.ShowInfoPanel = true;\n this.cdr.markForCheck();\n }\n\n public CloseInfoPanel(): void {\n this.ShowInfoPanel = false;\n this.cdr.markForCheck();\n }\n\n public OnOpenQueryRecord(event: { queryId: string; queryName: string }): void {\n this.OpenQueryRecord.emit(event);\n }\n\n public Refresh(): void {\n this.OnRefreshRequest();\n }\n\n public get HasParameters(): boolean {\n return (this.QueryInfo?.Parameters?.length || 0) > 0;\n }\n}\n","<!-- Query Viewer Component -->\n<div class=\"query-viewer-container\">\n <!-- Header bar when query is loaded -->\n @if (QueryInfo) {\n <div class=\"query-header\">\n <div class=\"query-info\">\n <h3 class=\"query-name\">{{ QueryInfo.Name }}</h3>\n @if (QueryInfo.Category) {\n <span class=\"query-category\">\n <i class=\"fa-solid fa-folder\"></i>\n {{ QueryInfo.Category }}\n </span>\n }\n </div>\n <div class=\"query-actions\">\n <!-- Info button -->\n <button (click)=\"OpenInfoPanel()\"\n [disabled]=\"IsLoading\"\n class=\"btn btn-secondary\"\n title=\"Query information\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Info\n </button>\n <!-- Parameters button -->\n @if (HasParameters) {\n <button\n (click)=\"OpenParametersPanel()\"\n [disabled]=\"IsLoading\"\n class=\"btn btn-secondary\"\n title=\"Edit parameters\">\n <i class=\"fa-solid fa-sliders\"></i>\n Parameters\n </button>\n }\n <!-- Execution stats -->\n @if (ExecutionTimeMs !== null) {\n <span class=\"execution-stats\">\n <i class=\"fa-solid fa-clock\"></i>\n {{ ExecutionTimeMs }}ms\n </span>\n }\n </div>\n </div>\n }\n\n <!-- Main content area -->\n <div class=\"query-content\">\n <!-- No query selected state -->\n @if (!QueryId) {\n <div class=\"no-query-state\">\n <i class=\"fa-solid fa-database state-icon\"></i>\n <p class=\"state-message\">Select a query to view results</p>\n </div>\n }\n\n <!-- Query not found error -->\n @if (QueryId && !QueryInfo && LastError) {\n <div class=\"error-state\">\n <i class=\"fa-solid fa-exclamation-triangle state-icon error\"></i>\n <p class=\"state-message\">{{ LastError }}</p>\n </div>\n }\n\n <!-- Query description -->\n @if (QueryInfo?.Description && !HasRun) {\n <div class=\"query-description\">\n <i class=\"fa-solid fa-info-circle\"></i>\n {{ QueryInfo?.Description }}\n </div>\n }\n\n <!-- Query execution error -->\n @if (LastError && HasRun) {\n <div class=\"execution-error\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n <span>{{ LastError }}</span>\n <button class=\"btn btn-secondary\" (click)=\"Refresh()\">Try Again</button>\n </div>\n }\n\n <!-- Grid -->\n @if (QueryInfo) {\n <mj-query-data-grid\n [QueryInfo]=\"QueryInfo\"\n [Data]=\"QueryData\"\n [SelectionMode]=\"SelectionMode\"\n [ShowToolbar]=\"ShowToolbar\"\n [VisualConfig]=\"VisualConfig\"\n [IsLoading]=\"IsLoading\"\n (EntityLinkClick)=\"OnEntityLinkClick($event)\"\n (RowDoubleClick)=\"OnRowDoubleClick($event)\"\n (SelectionChange)=\"OnSelectionChange($event)\"\n (GridStateChange)=\"OnGridStateChange($event)\"\n (RefreshRequest)=\"OnRefreshRequest()\">\n </mj-query-data-grid>\n }\n </div>\n\n <!-- Parameter form panel -->\n <mj-query-parameter-form\n [QueryInfo]=\"QueryInfo\"\n [InitialValues]=\"SavedParams\"\n [IsOpen]=\"ShowParamsPanel\"\n (ParametersSubmit)=\"OnParametersSubmit($event)\"\n (Close)=\"OnParamsPanelClose()\">\n </mj-query-parameter-form>\n\n <!-- Query info panel -->\n <mj-query-info-panel\n [QueryInfo]=\"QueryInfo\"\n [Visible]=\"ShowInfoPanel\"\n (Close)=\"CloseInfoPanel()\"\n (OpenRecord)=\"OnOpenQueryRecord($event)\">\n </mj-query-info-panel>\n</div>\n"]}
1
+ {"version":3,"file":"query-viewer.component.js","sourceRoot":"","sources":["../../../src/lib/query-viewer/query-viewer.component.ts","../../../src/lib/query-viewer/query-viewer.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 ViewChild\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { RunQuery, RunQueryParams, Metadata, QueryInfo } from '@memberjunction/core';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { RunQueryResult } from '@memberjunction/core';\nimport { UserInfoEngine } from '@memberjunction/core-entities';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { CompositionTokenClickEvent } from '@memberjunction/ng-code-editor';\nimport { QueryDataGridComponent } from '../query-data-grid/query-data-grid.component';\nimport {\n QueryGridSelectionMode,\n QueryGridState,\n QueryGridVisualConfig,\n QueryParameterValues,\n QueryEntityLinkClickEvent,\n QueryGridStateChangedEvent,\n QuerySelectionChangedEvent,\n QueryRowClickEvent,\n getQueryGridStateKey,\n getQueryParamsKey\n} from '../query-data-grid/models/query-grid-types';\n\n/**\n * A composite component that provides a complete query viewing experience.\n * Features:\n * - Automatic parameter form display when query has parameters\n * - Grid state persistence to User Settings\n * - Parameter persistence to User Settings\n * - Entity linking for clickable record IDs\n * - Auto-run capability when all required params have saved values\n *\n * @example\n * ```html\n * <mj-query-viewer\n * [QueryId]=\"selectedQueryId\"\n * [AutoRun]=\"true\"\n * (EntityLinkClick)=\"openRecord($event)\">\n * </mj-query-viewer>\n * ```\n */\n@Component({\n standalone: false,\n selector: 'mj-query-viewer',\n templateUrl: './query-viewer.component.html',\n styleUrls: ['./query-viewer.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class QueryViewerComponent implements OnInit, OnDestroy {\n // ========================================\n // Inputs\n // ========================================\n\n private _queryId: string | null = null;\n /**\n * The ID of the query to display\n */\n @Input()\n set QueryId(value: string | null) {\n const previous = this._queryId;\n this._queryId = value;\n if (value !== previous) {\n this.onQueryIdChanged();\n }\n }\n get QueryId(): string | null {\n return this._queryId;\n }\n\n /**\n * Whether to auto-run the query when all required params have saved values\n */\n @Input() AutoRun: boolean = true;\n\n /**\n * Selection mode for the grid\n */\n @Input() SelectionMode: QueryGridSelectionMode = 'single';\n\n /**\n * Whether to show the toolbar\n */\n @Input() ShowToolbar: boolean = true;\n\n /**\n * Visual configuration for the grid\n */\n @Input() VisualConfig: QueryGridVisualConfig = {};\n\n /**\n * Whether to persist grid state\n */\n @Input() PersistState: boolean = true;\n\n /**\n * Whether to persist parameter values\n */\n @Input() PersistParameters: boolean = true;\n\n // ========================================\n // Outputs\n // ========================================\n\n /**\n * Fired when an entity link is clicked in the grid\n */\n @Output() EntityLinkClick = new EventEmitter<QueryEntityLinkClickEvent>();\n\n /**\n * Fired when a row is double-clicked\n */\n @Output() RowDoubleClick = new EventEmitter<QueryRowClickEvent>();\n\n /**\n * Fired when selection changes\n */\n @Output() SelectionChange = new EventEmitter<QuerySelectionChangedEvent>();\n\n /**\n * Fired when query execution starts\n */\n @Output() QueryStart = new EventEmitter<void>();\n\n /**\n * Fired when query execution completes\n */\n @Output() QueryComplete = new EventEmitter<RunQueryResult>();\n\n /**\n * Fired when query execution fails\n */\n @Output() QueryError = new EventEmitter<Error>();\n\n /**\n * Fired when user wants to open the full query record\n */\n @Output() OpenQueryRecord = new EventEmitter<{ queryId: string; queryName: string }>();\n\n /**\n * Fired when a composition token ({{query:\"...\"}}) is clicked in the SQL info panel\n */\n @Output() CompositionTokenClick = new EventEmitter<CompositionTokenClickEvent>();\n\n // ========================================\n // View Children\n // ========================================\n\n @ViewChild(QueryDataGridComponent) DataGrid!: QueryDataGridComponent;\n\n // ========================================\n // Internal State\n // ========================================\n\n public QueryInfo: QueryInfo | null = null;\n public QueryData: Record<string, unknown>[] = [];\n public IsLoading: boolean = false;\n public ShowParamsPanel: boolean = false;\n public ShowInfoPanel: boolean = false;\n public HasRun: boolean = false;\n public LastError: string | null = null;\n public ExecutionTimeMs: number | null = null;\n\n public SavedGridState: QueryGridState | null = null;\n public SavedParams: QueryParameterValues = {};\n\n private metadata = new Metadata();\n private destroy$ = new Subject<void>();\n private userInfoEngine = UserInfoEngine.Instance;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // ========================================\n // Query Loading\n // ========================================\n\n private async onQueryIdChanged(): Promise<void> {\n // Reset state\n this.QueryInfo = null;\n this.QueryData = [];\n this.HasRun = false;\n this.LastError = null;\n this.ExecutionTimeMs = null;\n this.SavedGridState = null;\n this.SavedParams = {};\n this.ShowParamsPanel = false;\n this.cdr.markForCheck();\n\n if (!this._queryId) {\n return;\n }\n\n // Load query info from metadata\n this.QueryInfo = this.metadata.Queries.find(q => UUIDsEqual(q.ID, this._queryId)) || null;\n\n if (!this.QueryInfo) {\n this.LastError = `Query with ID ${this._queryId} not found`;\n this.cdr.markForCheck();\n return;\n }\n\n // Load saved state from User Settings\n await this.loadSavedState();\n\n // Determine if we should show params or auto-run\n const hasParams = this.QueryInfo.Parameters && this.QueryInfo.Parameters.length > 0;\n const hasRequiredParams = hasParams && this.QueryInfo.Parameters.some(p => p.IsRequired);\n\n if (hasParams) {\n // Check if all required params have saved values\n const canAutoRun = this.AutoRun && this.canAutoRunWithSavedParams();\n\n if (canAutoRun) {\n // Auto-run with saved parameters\n await this.RunQuery(this.SavedParams);\n } else {\n // Show parameter panel\n this.ShowParamsPanel = true;\n }\n } else {\n // No parameters - auto-run immediately\n await this.RunQuery({});\n }\n\n this.cdr.markForCheck();\n }\n\n private canAutoRunWithSavedParams(): boolean {\n if (!this.QueryInfo) return false;\n\n const requiredParams = this.QueryInfo.Parameters?.filter(p => p.IsRequired) || [];\n\n for (const param of requiredParams) {\n const savedValue = this.SavedParams[param.Name];\n if (savedValue === null || savedValue === undefined || savedValue === '') {\n return false;\n }\n if (param.Type === 'array' && Array.isArray(savedValue) && savedValue.length === 0) {\n return false;\n }\n }\n\n return true;\n }\n\n // ========================================\n // State Persistence\n // ========================================\n\n private async loadSavedState(): Promise<void> {\n if (!this._queryId) return;\n\n try {\n // Load grid state\n if (this.PersistState) {\n const gridStateKey = getQueryGridStateKey(this._queryId);\n const gridStateSetting = await this.getUserSetting(gridStateKey);\n if (gridStateSetting) {\n this.SavedGridState = JSON.parse(gridStateSetting) as QueryGridState;\n }\n }\n\n // Load saved parameters\n if (this.PersistParameters) {\n const paramsKey = getQueryParamsKey(this._queryId);\n const paramsSetting = await this.getUserSetting(paramsKey);\n if (paramsSetting) {\n this.SavedParams = JSON.parse(paramsSetting) as QueryParameterValues;\n }\n }\n } catch (error) {\n console.warn('Error loading saved query state:', error);\n }\n }\n\n private async saveGridState(state: QueryGridState): Promise<void> {\n if (!this._queryId || !this.PersistState) return;\n\n try {\n const key = getQueryGridStateKey(this._queryId);\n await this.setUserSetting(key, JSON.stringify(state));\n } catch (error) {\n console.warn('Error saving grid state:', error);\n }\n }\n\n private async saveParameters(params: QueryParameterValues): Promise<void> {\n if (!this._queryId || !this.PersistParameters) return;\n\n try {\n const key = getQueryParamsKey(this._queryId);\n await this.setUserSetting(key, JSON.stringify(params));\n } catch (error) {\n console.warn('Error saving parameters:', error);\n }\n }\n\n private async getUserSetting(key: string): Promise<string | undefined> {\n return this.userInfoEngine.GetSetting(key);\n }\n\n private async setUserSetting(key: string, value: string): Promise<void> {\n await this.userInfoEngine.SetSetting(key, value);\n }\n\n // ========================================\n // Query Execution\n // ========================================\n\n public async RunQuery(params: QueryParameterValues): Promise<void> {\n if (!this.QueryInfo || !this._queryId) return;\n\n this.IsLoading = true;\n this.LastError = null;\n this.QueryStart.emit();\n this.cdr.markForCheck();\n\n // Save parameters for next time\n this.SavedParams = params;\n await this.saveParameters(params);\n\n const startTime = performance.now();\n\n try {\n const runQuery = new RunQuery();\n const runParams: RunQueryParams = {\n QueryID: this._queryId,\n Parameters: params as Record<string, unknown>\n };\n\n const result = await runQuery.RunQuery(runParams);\n\n this.ExecutionTimeMs = Math.round(performance.now() - startTime);\n\n if (result.Success) {\n this.QueryData = result.Results || [];\n this.HasRun = true;\n this.ShowParamsPanel = false;\n this.QueryComplete.emit(result);\n } else {\n this.LastError = result.ErrorMessage || 'Query execution failed';\n this.QueryError.emit(new Error(this.LastError));\n MJNotificationService.Instance.CreateSimpleNotification(\n this.LastError,\n 'error',\n 5000\n );\n }\n } catch (error) {\n this.ExecutionTimeMs = Math.round(performance.now() - startTime);\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n this.LastError = errorMessage;\n this.QueryError.emit(error instanceof Error ? error : new Error(errorMessage));\n MJNotificationService.Instance.CreateSimpleNotification(\n `Error running query: ${errorMessage}`,\n 'error',\n 5000\n );\n } finally {\n this.IsLoading = false;\n this.cdr.markForCheck();\n }\n }\n\n // ========================================\n // Event Handlers\n // ========================================\n\n public OnParametersSubmit(params: QueryParameterValues): void {\n this.RunQuery(params);\n }\n\n public OnParamsPanelClose(): void {\n this.ShowParamsPanel = false;\n this.cdr.markForCheck();\n }\n\n public OnGridStateChange(event: QueryGridStateChangedEvent): void {\n this.saveGridState(event.state);\n }\n\n public OnEntityLinkClick(event: QueryEntityLinkClickEvent): void {\n this.EntityLinkClick.emit(event);\n }\n\n public OnRowDoubleClick(event: QueryRowClickEvent): void {\n this.RowDoubleClick.emit(event);\n }\n\n public OnSelectionChange(event: QuerySelectionChangedEvent): void {\n this.SelectionChange.emit(event);\n }\n\n public OnRefreshRequest(): void {\n if (this.HasRun) {\n this.RunQuery(this.SavedParams);\n } else if (this.QueryInfo?.Parameters?.length) {\n this.ShowParamsPanel = true;\n this.cdr.markForCheck();\n } else {\n this.RunQuery({});\n }\n }\n\n // ========================================\n // Public API\n // ========================================\n\n public OpenParametersPanel(): void {\n this.ShowParamsPanel = true;\n this.cdr.markForCheck();\n }\n\n public OpenInfoPanel(): void {\n this.ShowInfoPanel = true;\n this.cdr.markForCheck();\n }\n\n public CloseInfoPanel(): void {\n this.ShowInfoPanel = false;\n this.cdr.markForCheck();\n }\n\n public OnOpenQueryRecord(event: { queryId: string; queryName: string }): void {\n this.OpenQueryRecord.emit(event);\n }\n\n public OnCompositionTokenClick(event: CompositionTokenClickEvent): void {\n this.CompositionTokenClick.emit(event);\n }\n\n public Refresh(): void {\n this.OnRefreshRequest();\n }\n\n public get HasParameters(): boolean {\n return (this.QueryInfo?.Parameters?.length || 0) > 0;\n }\n}\n","<!-- Query Viewer Component -->\n<div class=\"query-viewer-container\">\n <!-- Header bar when query is loaded -->\n @if (QueryInfo) {\n <div class=\"query-header\">\n <div class=\"query-info\">\n <h3 class=\"query-name\">{{ QueryInfo.Name }}</h3>\n @if (QueryInfo.Category) {\n <span class=\"query-category\">\n <i class=\"fa-solid fa-folder\"></i>\n {{ QueryInfo.Category }}\n </span>\n }\n </div>\n <div class=\"query-actions\">\n <!-- Info button -->\n <button (click)=\"OpenInfoPanel()\"\n [disabled]=\"IsLoading\"\n class=\"btn btn-secondary\"\n title=\"Query information\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Info\n </button>\n <!-- Parameters button -->\n @if (HasParameters) {\n <button\n (click)=\"OpenParametersPanel()\"\n [disabled]=\"IsLoading\"\n class=\"btn btn-secondary\"\n title=\"Edit parameters\">\n <i class=\"fa-solid fa-sliders\"></i>\n Parameters\n </button>\n }\n <!-- Execution stats -->\n @if (ExecutionTimeMs !== null) {\n <span class=\"execution-stats\">\n <i class=\"fa-solid fa-clock\"></i>\n {{ ExecutionTimeMs }}ms\n </span>\n }\n </div>\n </div>\n }\n\n <!-- Main content area -->\n <div class=\"query-content\">\n <!-- No query selected state -->\n @if (!QueryId) {\n <div class=\"no-query-state\">\n <i class=\"fa-solid fa-database state-icon\"></i>\n <p class=\"state-message\">Select a query to view results</p>\n </div>\n }\n\n <!-- Query not found error -->\n @if (QueryId && !QueryInfo && LastError) {\n <div class=\"error-state\">\n <i class=\"fa-solid fa-exclamation-triangle state-icon error\"></i>\n <p class=\"state-message\">{{ LastError }}</p>\n </div>\n }\n\n <!-- Query description -->\n @if (QueryInfo?.Description && !HasRun) {\n <div class=\"query-description\">\n <i class=\"fa-solid fa-info-circle\"></i>\n {{ QueryInfo?.Description }}\n </div>\n }\n\n <!-- Query execution error -->\n @if (LastError && HasRun) {\n <div class=\"execution-error\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n <span>{{ LastError }}</span>\n <button class=\"btn btn-secondary\" (click)=\"Refresh()\">Try Again</button>\n </div>\n }\n\n <!-- Grid -->\n @if (QueryInfo) {\n <mj-query-data-grid\n [QueryInfo]=\"QueryInfo\"\n [Data]=\"QueryData\"\n [SelectionMode]=\"SelectionMode\"\n [ShowToolbar]=\"ShowToolbar\"\n [VisualConfig]=\"VisualConfig\"\n [IsLoading]=\"IsLoading\"\n (EntityLinkClick)=\"OnEntityLinkClick($event)\"\n (RowDoubleClick)=\"OnRowDoubleClick($event)\"\n (SelectionChange)=\"OnSelectionChange($event)\"\n (GridStateChange)=\"OnGridStateChange($event)\"\n (RefreshRequest)=\"OnRefreshRequest()\">\n </mj-query-data-grid>\n }\n </div>\n\n <!-- Parameter form panel -->\n <mj-query-parameter-form\n [QueryInfo]=\"QueryInfo\"\n [InitialValues]=\"SavedParams\"\n [IsOpen]=\"ShowParamsPanel\"\n (ParametersSubmit)=\"OnParametersSubmit($event)\"\n (Close)=\"OnParamsPanelClose()\">\n </mj-query-parameter-form>\n\n <!-- Query info panel -->\n <mj-query-info-panel\n [QueryInfo]=\"QueryInfo\"\n [Visible]=\"ShowInfoPanel\"\n (Close)=\"CloseInfoPanel()\"\n (OpenRecord)=\"OnOpenQueryRecord($event)\"\n (CompositionTokenClick)=\"OnCompositionTokenClick($event)\">\n </mj-query-info-panel>\n</div>\n"]}
@@ -10,9 +10,10 @@ import * as i8 from "ag-grid-angular";
10
10
  import * as i9 from "@memberjunction/ng-shared-generic";
11
11
  import * as i10 from "@memberjunction/ng-export-service";
12
12
  import * as i11 from "@memberjunction/ng-markdown";
13
+ import * as i12 from "@memberjunction/ng-code-editor";
13
14
  export declare class QueryViewerModule {
14
15
  static ɵfac: i0.ɵɵFactoryDeclaration<QueryViewerModule, never>;
15
- static ɵmod: i0.ɵɵNgModuleDeclaration<QueryViewerModule, [typeof i1.QueryDataGridComponent, typeof i2.QueryParameterFormComponent, typeof i3.QueryViewerComponent, typeof i4.QueryRowDetailComponent, typeof i5.QueryInfoPanelComponent], [typeof i6.CommonModule, typeof i7.FormsModule, typeof i8.AgGridModule, typeof i9.SharedGenericModule, typeof i10.ExportServiceModule, typeof i11.MarkdownModule], [typeof i1.QueryDataGridComponent, typeof i2.QueryParameterFormComponent, typeof i3.QueryViewerComponent, typeof i4.QueryRowDetailComponent, typeof i5.QueryInfoPanelComponent]>;
16
+ static ɵmod: i0.ɵɵNgModuleDeclaration<QueryViewerModule, [typeof i1.QueryDataGridComponent, typeof i2.QueryParameterFormComponent, typeof i3.QueryViewerComponent, typeof i4.QueryRowDetailComponent, typeof i5.QueryInfoPanelComponent], [typeof i6.CommonModule, typeof i7.FormsModule, typeof i8.AgGridModule, typeof i9.SharedGenericModule, typeof i10.ExportServiceModule, typeof i11.MarkdownModule, typeof i12.CodeEditorModule], [typeof i1.QueryDataGridComponent, typeof i2.QueryParameterFormComponent, typeof i3.QueryViewerComponent, typeof i4.QueryRowDetailComponent, typeof i5.QueryInfoPanelComponent]>;
16
17
  static ɵinj: i0.ɵɵInjectorDeclaration<QueryViewerModule>;
17
18
  }
18
19
  //# sourceMappingURL=query-viewer.module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"query-viewer.module.d.ts","sourceRoot":"","sources":["../../src/lib/query-viewer.module.ts"],"names":[],"mappings":";;;;;;;;;;;;AAmBA,qBAwBa,iBAAiB;yCAAjB,iBAAiB;0CAAjB,iBAAiB;0CAAjB,iBAAiB;CAAI"}
1
+ {"version":3,"file":"query-viewer.module.d.ts","sourceRoot":"","sources":["../../src/lib/query-viewer.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAoBA,qBAyBa,iBAAiB;yCAAjB,iBAAiB;0CAAjB,iBAAiB;0CAAjB,iBAAiB;CAAI"}
@@ -7,6 +7,7 @@ import { AgGridModule } from 'ag-grid-angular';
7
7
  import { SharedGenericModule } from '@memberjunction/ng-shared-generic';
8
8
  import { ExportServiceModule } from '@memberjunction/ng-export-service';
9
9
  import { MarkdownModule } from '@memberjunction/ng-markdown';
10
+ import { CodeEditorModule } from '@memberjunction/ng-code-editor';
10
11
  // Query Viewer Components
11
12
  import { QueryDataGridComponent } from './query-data-grid/query-data-grid.component';
12
13
  import { QueryParameterFormComponent } from './query-parameter-form/query-parameter-form.component';
@@ -22,7 +23,8 @@ export class QueryViewerModule {
22
23
  AgGridModule,
23
24
  SharedGenericModule,
24
25
  ExportServiceModule,
25
- MarkdownModule] });
26
+ MarkdownModule,
27
+ CodeEditorModule] });
26
28
  }
27
29
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(QueryViewerModule, [{
28
30
  type: NgModule,
@@ -40,7 +42,8 @@ export class QueryViewerModule {
40
42
  AgGridModule,
41
43
  SharedGenericModule,
42
44
  ExportServiceModule,
43
- MarkdownModule
45
+ MarkdownModule,
46
+ CodeEditorModule
44
47
  ],
45
48
  exports: [
46
49
  QueryDataGridComponent,
@@ -60,7 +63,8 @@ export class QueryViewerModule {
60
63
  AgGridModule,
61
64
  SharedGenericModule,
62
65
  ExportServiceModule,
63
- MarkdownModule], exports: [QueryDataGridComponent,
66
+ MarkdownModule,
67
+ CodeEditorModule], exports: [QueryDataGridComponent,
64
68
  QueryParameterFormComponent,
65
69
  QueryViewerComponent,
66
70
  QueryRowDetailComponent,
@@ -1 +1 @@
1
- {"version":3,"file":"query-viewer.module.js","sourceRoot":"","sources":["../../src/lib/query-viewer.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,UAAU;AACV,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,gBAAgB;AAChB,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,0BAA0B;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,2BAA2B,EAAE,MAAM,uDAAuD,CAAC;AACpG,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,+CAA+C,CAAC;AACxF,OAAO,EAAE,uBAAuB,EAAE,MAAM,+CAA+C,CAAC;;AA0BxF,MAAM,OAAO,iBAAiB;2GAAjB,iBAAiB;4DAAjB,iBAAiB;gEAftB,YAAY;YACZ,WAAW;YACX,YAAY;YACZ,mBAAmB;YACnB,mBAAmB;YACnB,cAAc;;iFAUT,iBAAiB;cAxB7B,QAAQ;eAAC;gBACN,YAAY,EAAE;oBACV,sBAAsB;oBACtB,2BAA2B;oBAC3B,oBAAoB;oBACpB,uBAAuB;oBACvB,uBAAuB;iBAC1B;gBACD,OAAO,EAAE;oBACL,YAAY;oBACZ,WAAW;oBACX,YAAY;oBACZ,mBAAmB;oBACnB,mBAAmB;oBACnB,cAAc;iBACjB;gBACD,OAAO,EAAE;oBACL,sBAAsB;oBACtB,2BAA2B;oBAC3B,oBAAoB;oBACpB,uBAAuB;oBACvB,uBAAuB;iBAC1B;aACJ;;wFACY,iBAAiB,mBAtBtB,sBAAsB;QACtB,2BAA2B;QAC3B,oBAAoB;QACpB,uBAAuB;QACvB,uBAAuB,aAGvB,YAAY;QACZ,WAAW;QACX,YAAY;QACZ,mBAAmB;QACnB,mBAAmB;QACnB,cAAc,aAGd,sBAAsB;QACtB,2BAA2B;QAC3B,oBAAoB;QACpB,uBAAuB;QACvB,uBAAuB","sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\n// AG Grid\nimport { AgGridModule } from 'ag-grid-angular';\n\n// MJ Components\nimport { SharedGenericModule } from '@memberjunction/ng-shared-generic';\nimport { ExportServiceModule } from '@memberjunction/ng-export-service';\nimport { MarkdownModule } from '@memberjunction/ng-markdown';\n\n// Query Viewer Components\nimport { QueryDataGridComponent } from './query-data-grid/query-data-grid.component';\nimport { QueryParameterFormComponent } from './query-parameter-form/query-parameter-form.component';\nimport { QueryViewerComponent } from './query-viewer/query-viewer.component';\nimport { QueryRowDetailComponent } from './query-row-detail/query-row-detail.component';\nimport { QueryInfoPanelComponent } from './query-info-panel/query-info-panel.component';\n\n@NgModule({\n declarations: [\n QueryDataGridComponent,\n QueryParameterFormComponent,\n QueryViewerComponent,\n QueryRowDetailComponent,\n QueryInfoPanelComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n AgGridModule,\n SharedGenericModule,\n ExportServiceModule,\n MarkdownModule\n ],\n exports: [\n QueryDataGridComponent,\n QueryParameterFormComponent,\n QueryViewerComponent,\n QueryRowDetailComponent,\n QueryInfoPanelComponent\n ]\n})\nexport class QueryViewerModule { }\n"]}
1
+ {"version":3,"file":"query-viewer.module.js","sourceRoot":"","sources":["../../src/lib/query-viewer.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,UAAU;AACV,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,gBAAgB;AAChB,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,0BAA0B;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,2BAA2B,EAAE,MAAM,uDAAuD,CAAC;AACpG,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,+CAA+C,CAAC;AACxF,OAAO,EAAE,uBAAuB,EAAE,MAAM,+CAA+C,CAAC;;AA2BxF,MAAM,OAAO,iBAAiB;2GAAjB,iBAAiB;4DAAjB,iBAAiB;gEAhBtB,YAAY;YACZ,WAAW;YACX,YAAY;YACZ,mBAAmB;YACnB,mBAAmB;YACnB,cAAc;YACd,gBAAgB;;iFAUX,iBAAiB;cAzB7B,QAAQ;eAAC;gBACN,YAAY,EAAE;oBACV,sBAAsB;oBACtB,2BAA2B;oBAC3B,oBAAoB;oBACpB,uBAAuB;oBACvB,uBAAuB;iBAC1B;gBACD,OAAO,EAAE;oBACL,YAAY;oBACZ,WAAW;oBACX,YAAY;oBACZ,mBAAmB;oBACnB,mBAAmB;oBACnB,cAAc;oBACd,gBAAgB;iBACnB;gBACD,OAAO,EAAE;oBACL,sBAAsB;oBACtB,2BAA2B;oBAC3B,oBAAoB;oBACpB,uBAAuB;oBACvB,uBAAuB;iBAC1B;aACJ;;wFACY,iBAAiB,mBAvBtB,sBAAsB;QACtB,2BAA2B;QAC3B,oBAAoB;QACpB,uBAAuB;QACvB,uBAAuB,aAGvB,YAAY;QACZ,WAAW;QACX,YAAY;QACZ,mBAAmB;QACnB,mBAAmB;QACnB,cAAc;QACd,gBAAgB,aAGhB,sBAAsB;QACtB,2BAA2B;QAC3B,oBAAoB;QACpB,uBAAuB;QACvB,uBAAuB","sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\n// AG Grid\nimport { AgGridModule } from 'ag-grid-angular';\n\n// MJ Components\nimport { SharedGenericModule } from '@memberjunction/ng-shared-generic';\nimport { ExportServiceModule } from '@memberjunction/ng-export-service';\nimport { MarkdownModule } from '@memberjunction/ng-markdown';\nimport { CodeEditorModule } from '@memberjunction/ng-code-editor';\n\n// Query Viewer Components\nimport { QueryDataGridComponent } from './query-data-grid/query-data-grid.component';\nimport { QueryParameterFormComponent } from './query-parameter-form/query-parameter-form.component';\nimport { QueryViewerComponent } from './query-viewer/query-viewer.component';\nimport { QueryRowDetailComponent } from './query-row-detail/query-row-detail.component';\nimport { QueryInfoPanelComponent } from './query-info-panel/query-info-panel.component';\n\n@NgModule({\n declarations: [\n QueryDataGridComponent,\n QueryParameterFormComponent,\n QueryViewerComponent,\n QueryRowDetailComponent,\n QueryInfoPanelComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n AgGridModule,\n SharedGenericModule,\n ExportServiceModule,\n MarkdownModule,\n CodeEditorModule\n ],\n exports: [\n QueryDataGridComponent,\n QueryParameterFormComponent,\n QueryViewerComponent,\n QueryRowDetailComponent,\n QueryInfoPanelComponent\n ]\n})\nexport class QueryViewerModule { }\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memberjunction/ng-query-viewer",
3
- "version": "5.10.1",
3
+ "version": "5.11.0",
4
4
  "description": "MemberJunction: Angular components for viewing and executing stored queries with parameter input, interactive results grid, and entity linking",
5
5
  "main": "./dist/public-api.js",
6
6
  "typings": "./dist/public-api.d.ts",
@@ -37,14 +37,15 @@
37
37
  "ag-grid-community": "^35.0.1"
38
38
  },
39
39
  "dependencies": {
40
- "@memberjunction/core-entities": "5.10.1",
41
- "@memberjunction/export-engine": "5.10.1",
42
- "@memberjunction/global": "5.10.1",
43
- "@memberjunction/core": "5.10.1",
44
- "@memberjunction/ng-shared-generic": "5.10.1",
45
- "@memberjunction/ng-export-service": "5.10.1",
46
- "@memberjunction/ng-markdown": "5.10.1",
47
- "@memberjunction/ng-notifications": "5.10.1",
40
+ "@memberjunction/core-entities": "5.11.0",
41
+ "@memberjunction/export-engine": "5.11.0",
42
+ "@memberjunction/global": "5.11.0",
43
+ "@memberjunction/core": "5.11.0",
44
+ "@memberjunction/ng-shared-generic": "5.11.0",
45
+ "@memberjunction/ng-export-service": "5.11.0",
46
+ "@memberjunction/ng-markdown": "5.11.0",
47
+ "@memberjunction/ng-code-editor": "5.11.0",
48
+ "@memberjunction/ng-notifications": "5.11.0",
48
49
  "rxjs": "^7.8.2",
49
50
  "tslib": "^2.8.1"
50
51
  },