@memberjunction/ng-artifacts 5.1.0 → 5.3.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.
- package/dist/lib/artifacts.module.d.ts +13 -8
- package/dist/lib/artifacts.module.d.ts.map +1 -1
- package/dist/lib/artifacts.module.js +27 -6
- package/dist/lib/artifacts.module.js.map +1 -1
- package/dist/lib/components/artifact-type-plugin-viewer.component.d.ts +4 -2
- package/dist/lib/components/artifact-type-plugin-viewer.component.d.ts.map +1 -1
- package/dist/lib/components/artifact-type-plugin-viewer.component.js +19 -1
- package/dist/lib/components/artifact-type-plugin-viewer.component.js.map +1 -1
- package/dist/lib/components/artifact-viewer-panel.component.d.ts +14 -2
- package/dist/lib/components/artifact-viewer-panel.component.d.ts.map +1 -1
- package/dist/lib/components/artifact-viewer-panel.component.js +39 -3
- package/dist/lib/components/artifact-viewer-panel.component.js.map +1 -1
- package/dist/lib/components/base-artifact-viewer.component.d.ts +34 -1
- package/dist/lib/components/base-artifact-viewer.component.d.ts.map +1 -1
- package/dist/lib/components/base-artifact-viewer.component.js +16 -1
- package/dist/lib/components/base-artifact-viewer.component.js.map +1 -1
- package/dist/lib/components/plugins/component-artifact-viewer.component.d.ts +6 -0
- package/dist/lib/components/plugins/component-artifact-viewer.component.d.ts.map +1 -1
- package/dist/lib/components/plugins/component-artifact-viewer.component.js +14 -3
- package/dist/lib/components/plugins/component-artifact-viewer.component.js.map +1 -1
- package/dist/lib/components/plugins/data-artifact-viewer.component.d.ts +207 -0
- package/dist/lib/components/plugins/data-artifact-viewer.component.d.ts.map +1 -0
- package/dist/lib/components/plugins/data-artifact-viewer.component.js +826 -0
- package/dist/lib/components/plugins/data-artifact-viewer.component.js.map +1 -0
- package/dist/lib/components/plugins/save-query-dialog.component.d.ts +57 -0
- package/dist/lib/components/plugins/save-query-dialog.component.d.ts.map +1 -0
- package/dist/lib/components/plugins/save-query-dialog.component.js +563 -0
- package/dist/lib/components/plugins/save-query-dialog.component.js.map +1 -0
- package/dist/public-api.d.ts +1 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +1 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +18 -12
|
@@ -55,7 +55,7 @@ function ComponentArtifactViewerComponent_Conditional_2_Template(rf, ctx) { if (
|
|
|
55
55
|
function ComponentArtifactViewerComponent_Conditional_3_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
56
56
|
const _r2 = i0.ɵɵgetCurrentView();
|
|
57
57
|
i0.ɵɵelementStart(0, "mj-react-component", 9, 0);
|
|
58
|
-
i0.ɵɵlistener("componentEvent", function ComponentArtifactViewerComponent_Conditional_3_Conditional_0_Template_mj_react_component_componentEvent_0_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onComponentEvent($event)); })("openEntityRecord", function ComponentArtifactViewerComponent_Conditional_3_Conditional_0_Template_mj_react_component_openEntityRecord_0_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onOpenEntityRecord($event)); });
|
|
58
|
+
i0.ɵɵlistener("componentEvent", function ComponentArtifactViewerComponent_Conditional_3_Conditional_0_Template_mj_react_component_componentEvent_0_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onComponentEvent($event)); })("openEntityRecord", function ComponentArtifactViewerComponent_Conditional_3_Conditional_0_Template_mj_react_component_openEntityRecord_0_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onOpenEntityRecord($event)); })("initialized", function ComponentArtifactViewerComponent_Conditional_3_Conditional_0_Template_mj_react_component_initialized_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onReactComponentInitialized()); });
|
|
59
59
|
i0.ɵɵelementEnd();
|
|
60
60
|
} if (rf & 2) {
|
|
61
61
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
@@ -256,6 +256,17 @@ let ComponentArtifactViewerComponent = class ComponentArtifactViewerComponent ex
|
|
|
256
256
|
this.componentCode = BuildComponentCompleteCode(this.resolvedComponentSpec);
|
|
257
257
|
}
|
|
258
258
|
}
|
|
259
|
+
/**
|
|
260
|
+
* Called when MJReactComponent finishes loading the full component spec from the registry.
|
|
261
|
+
* The full spec may contain Functional, Technical, and Data tabs not in the stripped spec.
|
|
262
|
+
* Emit tabsChanged so the parent panel re-evaluates allTabs and renders the new tab labels.
|
|
263
|
+
*/
|
|
264
|
+
onReactComponentInitialized() {
|
|
265
|
+
if (this.reactComponent?.resolvedComponentSpec &&
|
|
266
|
+
this.reactComponent.resolvedComponentSpec !== this.component) {
|
|
267
|
+
this.tabsChanged.emit();
|
|
268
|
+
}
|
|
269
|
+
}
|
|
259
270
|
onComponentEvent(event) {
|
|
260
271
|
console.log('Component event:', event);
|
|
261
272
|
// Handle error events from React component
|
|
@@ -283,7 +294,7 @@ let ComponentArtifactViewerComponent = class ComponentArtifactViewerComponent ex
|
|
|
283
294
|
} if (rf & 2) {
|
|
284
295
|
let _t;
|
|
285
296
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.reactComponent = _t.first);
|
|
286
|
-
} }, outputs: { tabsChanged: "tabsChanged", openEntityRecord: "openEntityRecord" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 4, vars: 2, consts: [["reactComponent", ""], [1, "component-artifact-viewer", 3, "ngClass"], [1, "component-preview"], [1, "error-state"], [1, "fa-solid", "fa-exclamation-triangle"], [2, "text-align", "left", "max-width", "500px", "color", "#6c757d", "line-height", "1.6"], [2, "margin-top", "20px"], [3, "component"], [1, "no-code-state"], [3, "componentEvent", "openEntityRecord", "component"], [1, "fa-solid", "fa-file-lines"], [1, "fa-solid", "fa-exclamation-circle"]], template: function ComponentArtifactViewerComponent_Template(rf, ctx) { if (rf & 1) {
|
|
297
|
+
} }, outputs: { tabsChanged: "tabsChanged", openEntityRecord: "openEntityRecord" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 4, vars: 2, consts: [["reactComponent", ""], [1, "component-artifact-viewer", 3, "ngClass"], [1, "component-preview"], [1, "error-state"], [1, "fa-solid", "fa-exclamation-triangle"], [2, "text-align", "left", "max-width", "500px", "color", "#6c757d", "line-height", "1.6"], [2, "margin-top", "20px"], [3, "component"], [1, "no-code-state"], [3, "componentEvent", "openEntityRecord", "initialized", "component"], [1, "fa-solid", "fa-file-lines"], [1, "fa-solid", "fa-exclamation-circle"]], template: function ComponentArtifactViewerComponent_Template(rf, ctx) { if (rf & 1) {
|
|
287
298
|
i0.ɵɵelementStart(0, "div", 1)(1, "div", 2);
|
|
288
299
|
i0.ɵɵconditionalCreate(2, ComponentArtifactViewerComponent_Conditional_2_Template, 14, 2, "div", 3)(3, ComponentArtifactViewerComponent_Conditional_3_Template, 3, 1);
|
|
289
300
|
i0.ɵɵelementEnd()();
|
|
@@ -299,7 +310,7 @@ ComponentArtifactViewerComponent = __decorate([
|
|
|
299
310
|
export { ComponentArtifactViewerComponent };
|
|
300
311
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ComponentArtifactViewerComponent, [{
|
|
301
312
|
type: Component,
|
|
302
|
-
args: [{ standalone: false, selector: 'mj-component-artifact-viewer', template: "<div class=\"component-artifact-viewer\" [ngClass]=\"cssClass\">\n <!-- Component Preview (full screen) -->\n <div class=\"component-preview\">\n @if (hasError) {\n <div class=\"error-state\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <h3>{{ errorMessage }}</h3>\n <p>This component could not be loaded. This usually happens when:</p>\n <ul style=\"text-align: left; max-width: 500px; color: #6c757d; line-height: 1.6;\">\n <li>The component registry is unavailable or unreachable</li>\n <li>The component version does not exist in the registry</li>\n <li>There was a network error during component retrieval</li>\n </ul>\n @if (errorDetails) {\n <details style=\"margin-top: 20px;\">\n <summary>Technical Details</summary>\n <pre>{{ errorDetails }}</pre>\n </details>\n }\n </div>\n } @else {\n <!-- Only render React component if there's code to execute -->\n @if (component && (component.code || component.namespace)) {\n <mj-react-component\n #reactComponent\n [component]=\"component\"\n (componentEvent)=\"onComponentEvent($event)\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\">\n </mj-react-component>\n } @else if (component) {\n <!-- Component spec exists but no code - show informational message -->\n <div class=\"no-code-state\">\n <i class=\"fa-solid fa-file-lines\"></i>\n <h3>Component Specification</h3>\n <p>This component has specifications but no executable code yet.</p>\n <p>View the Functional, Data, or Spec tabs for details.</p>\n </div>\n } @else {\n <div class=\"error-state\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n <h3>No Component Loaded</h3>\n <p>The component data is missing or invalid.</p>\n </div>\n }\n }\n </div>\n</div>\n\n", styles: [".component-artifact-viewer {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n background: white;\n}\n\n.component-preview {\n flex: 1;\n padding: 15px;\n overflow: auto;\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n\n/* Ensure React component takes full height */\n.component-preview mj-react-component {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n.error-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px;\n text-align: center;\n color: #dc3545;\n flex: 1;\n min-height: 300px;\n}\n.error-state i {\n font-size: 48px;\n margin-bottom: 16px;\n}\n.error-state h3 {\n margin: 0 0 8px 0;\n font-size: 20px;\n}\n.error-state p {\n margin: 0 0 12px 0;\n color: #6c757d;\n}\n.error-state details {\n margin-top: 16px;\n text-align: left;\n max-width: 600px;\n}\n.error-state details summary {\n cursor: pointer;\n color: #495057;\n font-weight: 500;\n margin-bottom: 8px;\n}\n.error-state details summary:hover {\n color: #212529;\n}\n.error-state details pre {\n background: #f8f9fa;\n padding: 12px;\n border-radius: 4px;\n overflow-x: auto;\n font-size: 12px;\n color: #495057;\n margin: 0;\n}\n\n/* State for component spec without executable code */\n.no-code-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px;\n text-align: center;\n color: #6c757d;\n flex: 1;\n}\n.no-code-state i {\n font-size: 48px;\n margin-bottom: 16px;\n color: #5B4FE9;\n}\n.no-code-state h3 {\n margin: 0 0 8px 0;\n font-size: 20px;\n color: #495057;\n}\n.no-code-state p {\n margin: 0 0 8px 0;\n color: #6c757d;\n}\n"] }]
|
|
313
|
+
args: [{ standalone: false, selector: 'mj-component-artifact-viewer', template: "<div class=\"component-artifact-viewer\" [ngClass]=\"cssClass\">\n <!-- Component Preview (full screen) -->\n <div class=\"component-preview\">\n @if (hasError) {\n <div class=\"error-state\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <h3>{{ errorMessage }}</h3>\n <p>This component could not be loaded. This usually happens when:</p>\n <ul style=\"text-align: left; max-width: 500px; color: #6c757d; line-height: 1.6;\">\n <li>The component registry is unavailable or unreachable</li>\n <li>The component version does not exist in the registry</li>\n <li>There was a network error during component retrieval</li>\n </ul>\n @if (errorDetails) {\n <details style=\"margin-top: 20px;\">\n <summary>Technical Details</summary>\n <pre>{{ errorDetails }}</pre>\n </details>\n }\n </div>\n } @else {\n <!-- Only render React component if there's code to execute -->\n @if (component && (component.code || component.namespace)) {\n <mj-react-component\n #reactComponent\n [component]=\"component\"\n (componentEvent)=\"onComponentEvent($event)\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n (initialized)=\"onReactComponentInitialized()\">\n </mj-react-component>\n } @else if (component) {\n <!-- Component spec exists but no code - show informational message -->\n <div class=\"no-code-state\">\n <i class=\"fa-solid fa-file-lines\"></i>\n <h3>Component Specification</h3>\n <p>This component has specifications but no executable code yet.</p>\n <p>View the Functional, Data, or Spec tabs for details.</p>\n </div>\n } @else {\n <div class=\"error-state\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n <h3>No Component Loaded</h3>\n <p>The component data is missing or invalid.</p>\n </div>\n }\n }\n </div>\n</div>\n\n", styles: [".component-artifact-viewer {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n background: white;\n}\n\n.component-preview {\n flex: 1;\n padding: 15px;\n overflow: auto;\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n\n/* Ensure React component takes full height */\n.component-preview mj-react-component {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n.error-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px;\n text-align: center;\n color: #dc3545;\n flex: 1;\n min-height: 300px;\n}\n.error-state i {\n font-size: 48px;\n margin-bottom: 16px;\n}\n.error-state h3 {\n margin: 0 0 8px 0;\n font-size: 20px;\n}\n.error-state p {\n margin: 0 0 12px 0;\n color: #6c757d;\n}\n.error-state details {\n margin-top: 16px;\n text-align: left;\n max-width: 600px;\n}\n.error-state details summary {\n cursor: pointer;\n color: #495057;\n font-weight: 500;\n margin-bottom: 8px;\n}\n.error-state details summary:hover {\n color: #212529;\n}\n.error-state details pre {\n background: #f8f9fa;\n padding: 12px;\n border-radius: 4px;\n overflow-x: auto;\n font-size: 12px;\n color: #495057;\n margin: 0;\n}\n\n/* State for component spec without executable code */\n.no-code-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px;\n text-align: center;\n color: #6c757d;\n flex: 1;\n}\n.no-code-state i {\n font-size: 48px;\n margin-bottom: 16px;\n color: #5B4FE9;\n}\n.no-code-state h3 {\n margin: 0 0 8px 0;\n font-size: 20px;\n color: #495057;\n}\n.no-code-state p {\n margin: 0 0 8px 0;\n color: #6c757d;\n}\n"] }]
|
|
303
314
|
}], () => [{ type: i1.AngularAdapterService }], { reactComponent: [{
|
|
304
315
|
type: ViewChild,
|
|
305
316
|
args: ['reactComponent']
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-artifact-viewer.component.js","sourceRoot":"","sources":["../../../../src/lib/components/plugins/component-artifact-viewer.component.ts","../../../../src/lib/components/plugins/component-artifact-viewer.component.html"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAmD,MAAM,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC5H,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,iCAAiC,EAAqB,MAAM,mCAAmC,CAAC;AAEzG,OAAO,EAAE,0BAA0B,EAAiB,MAAM,6CAA6C,CAAC;AAExG,OAAO,EAAE,+BAA+B,EAAE,MAAM,+DAA+D,CAAC;;;;;;ICSpG,AADF,kCAAmC,cACxB;IAAA,iCAAiB;IAAA,iBAAU;IACpC,2BAAK;IAAA,YAAkB;IACzB,AADyB,iBAAM,EACrB;;;IADH,eAAkB;IAAlB,yCAAkB;;;IAZ7B,8BAAyB;IACvB,uBAAgD;IAChD,0BAAI;IAAA,YAAkB;IAAA,iBAAK;IAC3B,yBAAG;IAAA,8EAA8D;IAAA,iBAAI;IAEnE,AADF,6BAAkF,SAC5E;IAAA,oEAAoD;IAAA,iBAAK;IAC7D,0BAAI;IAAA,qEAAoD;IAAA,iBAAK;IAC7D,2BAAI;IAAA,qEAAoD;IAC1D,AAD0D,iBAAK,EAC1D;IACL,sHAAoB;IAMtB,iBAAM;;;IAbA,eAAkB;IAAlB,yCAAkB;IAOtB,gBAKC;IALD,+CAKC;;;;IAKD,
|
|
1
|
+
{"version":3,"file":"component-artifact-viewer.component.js","sourceRoot":"","sources":["../../../../src/lib/components/plugins/component-artifact-viewer.component.ts","../../../../src/lib/components/plugins/component-artifact-viewer.component.html"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { OnInit, ChangeDetectorRef, EventEmitter } from '@angular/core';
|
|
2
|
+
import { CompositeKey } from '@memberjunction/core';
|
|
3
|
+
import { QueryGridColumnConfig, QueryEntityLinkClickEvent } from '@memberjunction/ng-query-viewer';
|
|
4
|
+
import { BaseArtifactViewerPluginComponent, ArtifactViewerTab, NavigationRequest } from '../base-artifact-viewer.component';
|
|
5
|
+
import { SaveQueryResult } from './save-query-dialog.component';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
/**
|
|
8
|
+
* JSON schema for Data artifact content.
|
|
9
|
+
* The agent produces this structure when emitting query/view results.
|
|
10
|
+
*/
|
|
11
|
+
interface DataArtifactSpec {
|
|
12
|
+
/** Data source type */
|
|
13
|
+
source: 'query' | 'view';
|
|
14
|
+
/** Display title for the data */
|
|
15
|
+
title?: string;
|
|
16
|
+
/** For query source: the query ID to render via mj-query-viewer */
|
|
17
|
+
queryId?: string;
|
|
18
|
+
/** For query source: parameter values to pass */
|
|
19
|
+
parameters?: Record<string, string | number | boolean>;
|
|
20
|
+
/** For view source: the entity name */
|
|
21
|
+
entityName?: string;
|
|
22
|
+
/** For view source: extra WHERE filter */
|
|
23
|
+
extraFilter?: string;
|
|
24
|
+
/** Column definitions for inline data display */
|
|
25
|
+
columns?: DataArtifactColumn[];
|
|
26
|
+
/** Inline row data (when results are embedded directly) */
|
|
27
|
+
rows?: Record<string, unknown>[];
|
|
28
|
+
/** Optional markdown plan/approach description (mermaid diagrams, explanations) */
|
|
29
|
+
plan?: string;
|
|
30
|
+
/** Query metadata */
|
|
31
|
+
metadata?: {
|
|
32
|
+
sql?: string;
|
|
33
|
+
rowCount?: number;
|
|
34
|
+
executionTimeMs?: number;
|
|
35
|
+
};
|
|
36
|
+
/** ID of saved query (set after user saves from artifact) */
|
|
37
|
+
savedQueryId?: string;
|
|
38
|
+
/** Name of saved query (for display) */
|
|
39
|
+
savedQueryName?: string;
|
|
40
|
+
/** Version number this query was saved/updated from */
|
|
41
|
+
savedAtVersionNumber?: number;
|
|
42
|
+
}
|
|
43
|
+
interface DataArtifactColumn {
|
|
44
|
+
field: string;
|
|
45
|
+
headerName?: string;
|
|
46
|
+
width?: number;
|
|
47
|
+
/** MJ entity name this column originates from (e.g., "Members") */
|
|
48
|
+
sourceEntity?: string;
|
|
49
|
+
/** Field name in that entity (e.g., "ID", "FirstName") */
|
|
50
|
+
sourceFieldName?: string;
|
|
51
|
+
/** True for calculated expressions (CASE, ROUND, CONCAT, etc.) */
|
|
52
|
+
isComputed?: boolean;
|
|
53
|
+
/** True for aggregate functions (SUM, COUNT, AVG, etc.) */
|
|
54
|
+
isSummary?: boolean;
|
|
55
|
+
/** SQL data type: int, nvarchar, uniqueidentifier, datetime, decimal, bit, money, etc. */
|
|
56
|
+
sqlBaseType?: string;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Describes the relationship between the current artifact version's SQL
|
|
60
|
+
* and the saved query record. Drives the toolbar UI.
|
|
61
|
+
*/
|
|
62
|
+
type QuerySyncState = 'no-query-latest' | 'no-query-older' | 'synced' | 'outdated-latest' | 'query-ahead' | 'query-behind';
|
|
63
|
+
/**
|
|
64
|
+
* Viewer component for Data artifacts.
|
|
65
|
+
*
|
|
66
|
+
* Displays tabular data using AG Grid via mj-query-data-grid. Supports two modes:
|
|
67
|
+
* 1. **Live data**: When metadata.sql is present, executes the query dynamically via RunQuery({ SQL })
|
|
68
|
+
* to fetch fresh data on each view. Falls back to inline rows on error.
|
|
69
|
+
* 2. **Inline data**: Rows embedded directly in the artifact JSON (backward compat with older artifacts)
|
|
70
|
+
*
|
|
71
|
+
* The Query Builder agent emits artifacts with metadata.sql for live execution.
|
|
72
|
+
*/
|
|
73
|
+
export declare class DataArtifactViewerComponent extends BaseArtifactViewerPluginComponent implements OnInit {
|
|
74
|
+
private cdr;
|
|
75
|
+
openEntityRecord: EventEmitter<{
|
|
76
|
+
entityName: string;
|
|
77
|
+
compositeKey: CompositeKey;
|
|
78
|
+
}>;
|
|
79
|
+
navigationRequest: EventEmitter<NavigationRequest>;
|
|
80
|
+
tabsChanged: EventEmitter<void>;
|
|
81
|
+
spec: DataArtifactSpec | null;
|
|
82
|
+
GridData: Record<string, unknown>[];
|
|
83
|
+
GridColumnConfigs: QueryGridColumnConfig[] | null;
|
|
84
|
+
IsLoading: boolean;
|
|
85
|
+
IsLive: boolean;
|
|
86
|
+
HasError: boolean;
|
|
87
|
+
ErrorMessage: string;
|
|
88
|
+
ShowSaveDialog: boolean;
|
|
89
|
+
ShowUpdateDropdown: boolean;
|
|
90
|
+
IsSaving: boolean;
|
|
91
|
+
SavingMessage: string;
|
|
92
|
+
/** Query sync state — drives the toolbar UI for saved query actions */
|
|
93
|
+
QuerySyncState: QuerySyncState;
|
|
94
|
+
/** Latest version number for this artifact (from cache) */
|
|
95
|
+
LatestVersionNumber: number;
|
|
96
|
+
/** Metadata from live execution (overrides spec.metadata when live) */
|
|
97
|
+
private liveRowCount;
|
|
98
|
+
private liveExecutionTime;
|
|
99
|
+
/** SQL from the saved query record (for comparison) */
|
|
100
|
+
private savedQuerySql;
|
|
101
|
+
constructor(cdr: ChangeDetectorRef);
|
|
102
|
+
get hasDisplayContent(): boolean;
|
|
103
|
+
get parentShouldShowRawContent(): boolean;
|
|
104
|
+
get HasData(): boolean;
|
|
105
|
+
get HasInlineData(): boolean;
|
|
106
|
+
get DisplayRowCount(): number | null;
|
|
107
|
+
get DisplayExecutionTime(): number | null;
|
|
108
|
+
/** Current artifact version number */
|
|
109
|
+
get CurrentVersionNumber(): number;
|
|
110
|
+
/** Whether this is the latest version of the artifact */
|
|
111
|
+
get IsLatestVersion(): boolean;
|
|
112
|
+
/**
|
|
113
|
+
* The effective version number at which the query was last saved/updated.
|
|
114
|
+
* When viewing an older version, this looks ahead through newer versions
|
|
115
|
+
* to find the most recent savedAtVersionNumber for the same query,
|
|
116
|
+
* giving the user accurate context (e.g., "Query updated at v3" instead
|
|
117
|
+
* of the stale "Saved at v1" from this version's snapshot).
|
|
118
|
+
*/
|
|
119
|
+
EffectiveSavedAtVersion: number | null;
|
|
120
|
+
/** Alias used by the template */
|
|
121
|
+
get SavedAtVersion(): number | null;
|
|
122
|
+
/** Display name for the saved query */
|
|
123
|
+
get SavedQueryDisplayName(): string;
|
|
124
|
+
ngOnInit(): Promise<void>;
|
|
125
|
+
/**
|
|
126
|
+
* Re-execute the live SQL query
|
|
127
|
+
*/
|
|
128
|
+
OnRefresh(): Promise<void>;
|
|
129
|
+
/**
|
|
130
|
+
* Handle entity link click from the grid and bubble up as openEntityRecord.
|
|
131
|
+
* Converts the grid's recordId string into a CompositeKey for the artifact viewer pipeline.
|
|
132
|
+
*/
|
|
133
|
+
OnEntityLinkClick(event: QueryEntityLinkClickEvent): void;
|
|
134
|
+
/**
|
|
135
|
+
* Execute the SQL query via RunQuery and populate the grid.
|
|
136
|
+
* Falls back to inline data on error.
|
|
137
|
+
*/
|
|
138
|
+
private LoadLiveData;
|
|
139
|
+
/**
|
|
140
|
+
* Build QueryGridColumnConfig[] from enriched artifact column metadata.
|
|
141
|
+
* Returns null if columns have no entity metadata (grid falls back to auto-inference).
|
|
142
|
+
*/
|
|
143
|
+
private BuildColumnConfigs;
|
|
144
|
+
/**
|
|
145
|
+
* Handle a query error by setting error state and falling back to inline data
|
|
146
|
+
*/
|
|
147
|
+
private HandleQueryError;
|
|
148
|
+
/**
|
|
149
|
+
* Initialize query sync state by loading cached metadata.
|
|
150
|
+
* Resolves the latest version number and compares saved query SQL.
|
|
151
|
+
*/
|
|
152
|
+
private InitQuerySyncState;
|
|
153
|
+
/**
|
|
154
|
+
* Determine the latest version number for this artifact from cache.
|
|
155
|
+
* Falls back to current version if cache miss.
|
|
156
|
+
*/
|
|
157
|
+
private resolveLatestVersionNumber;
|
|
158
|
+
/**
|
|
159
|
+
* Scan all versions of this artifact to find the most recent savedAtVersionNumber
|
|
160
|
+
* for the same savedQueryId. When viewing an older version, this tells the user
|
|
161
|
+
* where the query was *actually* last updated, not just what this version's
|
|
162
|
+
* snapshot recorded at the time.
|
|
163
|
+
*/
|
|
164
|
+
private resolveEffectiveSavedAtVersion;
|
|
165
|
+
/**
|
|
166
|
+
* Look up the saved query's SQL from QueryEngine cache for comparison.
|
|
167
|
+
* Only fetches if savedQueryId is present.
|
|
168
|
+
*/
|
|
169
|
+
private resolveSavedQuerySql;
|
|
170
|
+
/**
|
|
171
|
+
* Compute the query sync state from current spec, version, and saved query SQL.
|
|
172
|
+
* Implements the decision tree from the UX design.
|
|
173
|
+
*/
|
|
174
|
+
private computeQuerySyncState;
|
|
175
|
+
/** Normalize SQL for comparison: trim and collapse whitespace */
|
|
176
|
+
private normalizeSql;
|
|
177
|
+
/** Navigate to the saved query in the Data Explorer's Queries browser */
|
|
178
|
+
OnOpenSavedQuery(): void;
|
|
179
|
+
/** Show the save panel for creating a brand-new query */
|
|
180
|
+
OnShowSaveDialog(): void;
|
|
181
|
+
/** Toggle the update query dropdown */
|
|
182
|
+
OnToggleUpdateDropdown(): void;
|
|
183
|
+
/** Close the dropdown (e.g., on outside click) */
|
|
184
|
+
OnCloseDropdown(): void;
|
|
185
|
+
/**
|
|
186
|
+
* Update the existing saved query's SQL to match this version.
|
|
187
|
+
* Only available from the latest version (Scenario 3).
|
|
188
|
+
*/
|
|
189
|
+
OnUpdateExistingQuery(): Promise<void>;
|
|
190
|
+
/**
|
|
191
|
+
* Save as a new query (from the dropdown).
|
|
192
|
+
* Opens the save dialog which creates a fresh query record.
|
|
193
|
+
*/
|
|
194
|
+
OnSaveAsNewQuery(): void;
|
|
195
|
+
/** Handle successful save from the dialog (both initial save and "save as new") */
|
|
196
|
+
OnQuerySaved(event: SaveQueryResult): Promise<void>;
|
|
197
|
+
/** Persist updated spec back to the artifact version entity */
|
|
198
|
+
private PersistArtifactContent;
|
|
199
|
+
/**
|
|
200
|
+
* Provide Plan tab (markdown) and SQL tab (code) when available
|
|
201
|
+
*/
|
|
202
|
+
GetAdditionalTabs(): ArtifactViewerTab[];
|
|
203
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DataArtifactViewerComponent, never>;
|
|
204
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DataArtifactViewerComponent, "mj-data-artifact-viewer", never, {}, { "openEntityRecord": "openEntityRecord"; "navigationRequest": "navigationRequest"; }, never, never, false, never>;
|
|
205
|
+
}
|
|
206
|
+
export {};
|
|
207
|
+
//# sourceMappingURL=data-artifact-viewer.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-artifact-viewer.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/plugins/data-artifact-viewer.component.ts"],"names":[],"mappings":"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"}
|