@memberjunction/ng-skip-chat 2.47.0 → 2.49.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/README.md +1 -1
- package/dist/lib/artifacts/skip-artifact-viewer.component.js +254 -270
- package/dist/lib/artifacts/skip-artifact-viewer.component.js.map +1 -1
- package/dist/lib/artifacts/skip-artifacts-counter.component.js +82 -90
- package/dist/lib/artifacts/skip-artifacts-counter.component.js.map +1 -1
- package/dist/lib/drill-down-info.js +4 -3
- package/dist/lib/drill-down-info.js.map +1 -1
- package/dist/lib/dynamic-report/base-report.js +147 -164
- package/dist/lib/dynamic-report/base-report.js.map +1 -1
- package/dist/lib/dynamic-report/dynamic-chart.js +77 -86
- package/dist/lib/dynamic-report/dynamic-chart.js.map +1 -1
- package/dist/lib/dynamic-report/dynamic-grid.js +80 -93
- package/dist/lib/dynamic-report/dynamic-grid.js.map +1 -1
- package/dist/lib/dynamic-report/{dynamic-html-report.d.ts → dynamic-ui-component.d.ts} +64 -8
- package/dist/lib/dynamic-report/dynamic-ui-component.d.ts.map +1 -0
- package/dist/lib/dynamic-report/dynamic-ui-component.js +1756 -0
- package/dist/lib/dynamic-report/dynamic-ui-component.js.map +1 -0
- package/dist/lib/dynamic-report/linear-report.js +21 -31
- package/dist/lib/dynamic-report/linear-report.js.map +1 -1
- package/dist/lib/dynamic-report/skip-dynamic-report-wrapper.js +28 -28
- package/dist/lib/dynamic-report/skip-dynamic-report-wrapper.js.map +1 -1
- package/dist/lib/dynamic-report/skip-react-component-host.js +203 -212
- package/dist/lib/dynamic-report/skip-react-component-host.js.map +1 -1
- package/dist/lib/module.d.ts +4 -3
- package/dist/lib/module.d.ts.map +1 -1
- package/dist/lib/module.js +31 -27
- package/dist/lib/module.js.map +1 -1
- package/dist/lib/report-cache.js +2 -5
- package/dist/lib/report-cache.js.map +1 -1
- package/dist/lib/skip-chat/skip-chat.component.js +1052 -1087
- package/dist/lib/skip-chat/skip-chat.component.js.map +1 -1
- package/dist/lib/skip-single-message/skip-single-message.component.js +251 -259
- package/dist/lib/skip-single-message/skip-single-message.component.js.map +1 -1
- package/dist/lib/split-panel/skip-split-panel.component.js +52 -51
- package/dist/lib/split-panel/skip-split-panel.component.js.map +1 -1
- package/dist/public-api.d.ts +1 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +1 -1
- package/dist/public-api.js.map +1 -1
- package/package.json +14 -12
- package/dist/lib/dynamic-report/dynamic-html-report.d.ts.map +0 -1
- package/dist/lib/dynamic-report/dynamic-html-report.js +0 -1104
- package/dist/lib/dynamic-report/dynamic-html-report.js.map +0 -1
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
11
2
|
import { GetEntityNameFromSchemaAndViewString } from '@memberjunction/core';
|
|
12
3
|
import * as Plotly from 'plotly.js-dist-min';
|
|
@@ -28,13 +19,19 @@ function SkipDynamicChartComponent_button_0_Template(rf, ctx) { if (rf & 1) {
|
|
|
28
19
|
i0.ɵɵelementEnd();
|
|
29
20
|
} }
|
|
30
21
|
export class SkipDynamicChartComponent {
|
|
22
|
+
el;
|
|
23
|
+
plotData;
|
|
24
|
+
plotLayout;
|
|
25
|
+
defaultPlotHeight = 550;
|
|
26
|
+
ShowSaveAsImage = true;
|
|
27
|
+
AllowDrillDown = true;
|
|
28
|
+
AutoResizeChart = false;
|
|
29
|
+
DrillDownEvent = new EventEmitter();
|
|
30
|
+
plotlyPlot;
|
|
31
|
+
plotContainer;
|
|
32
|
+
resizeObserver;
|
|
31
33
|
constructor(el) {
|
|
32
34
|
this.el = el;
|
|
33
|
-
this.defaultPlotHeight = 550;
|
|
34
|
-
this.ShowSaveAsImage = true;
|
|
35
|
-
this.AllowDrillDown = true;
|
|
36
|
-
this.AutoResizeChart = false;
|
|
37
|
-
this.DrillDownEvent = new EventEmitter();
|
|
38
35
|
}
|
|
39
36
|
ngOnInit() {
|
|
40
37
|
if (this.AutoResizeChart)
|
|
@@ -45,60 +42,54 @@ export class SkipDynamicChartComponent {
|
|
|
45
42
|
this.resizeObserver.disconnect();
|
|
46
43
|
}
|
|
47
44
|
}
|
|
48
|
-
SaveChartAsImage() {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
// Remove the <a> element after download
|
|
69
|
-
document.body.removeChild(downloadLink);
|
|
70
|
-
}
|
|
45
|
+
async SaveChartAsImage() {
|
|
46
|
+
if (this.plotlyPlot) {
|
|
47
|
+
const el = this.plotContainer.nativeElement.querySelector('.js-plotly-plot');
|
|
48
|
+
const image = await Plotly.toImage(el, { format: 'png' });
|
|
49
|
+
if (image) {
|
|
50
|
+
// Create an <a> element
|
|
51
|
+
const downloadLink = document.createElement('a');
|
|
52
|
+
// Set the download attribute with a default file name
|
|
53
|
+
// reportTitle is the legacy name, title is the new name, so favor title if available
|
|
54
|
+
// otherwise use the plotLayout title, and finally default to 'chart'
|
|
55
|
+
const title = this.SkipData?.title || this.SkipData?.reportTitle || this.plotLayout?.title || 'chart';
|
|
56
|
+
downloadLink.download = `${title}.png`;
|
|
57
|
+
// Set the href to the data URL
|
|
58
|
+
downloadLink.href = image;
|
|
59
|
+
// Append the <a> element to the body (required for Firefox)
|
|
60
|
+
document.body.appendChild(downloadLink);
|
|
61
|
+
// Programmatically trigger a click on the <a> element
|
|
62
|
+
downloadLink.click();
|
|
63
|
+
// Remove the <a> element after download
|
|
64
|
+
document.body.removeChild(downloadLink);
|
|
71
65
|
}
|
|
72
|
-
}
|
|
66
|
+
}
|
|
73
67
|
}
|
|
74
|
-
handleChartClick(chartClickEvent) {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}).join(' AND ');
|
|
94
|
-
this.DrillDownEvent.emit(new DrillDownInfo(entityName, filterSQL));
|
|
95
|
-
}
|
|
68
|
+
async handleChartClick(chartClickEvent) {
|
|
69
|
+
try {
|
|
70
|
+
if (!this.AllowDrillDown)
|
|
71
|
+
return;
|
|
72
|
+
const drillDownValue = chartClickEvent.points[0].label;
|
|
73
|
+
const drillDown = this.SkipData?.drillDown;
|
|
74
|
+
if (drillDown && drillDownValue && drillDownValue.length > 0) {
|
|
75
|
+
// we have a valid situation to drill down where we have the configuration and we have a drill down value.
|
|
76
|
+
// we can navigate to the drill down view
|
|
77
|
+
const entityName = GetEntityNameFromSchemaAndViewString(drillDown.viewName);
|
|
78
|
+
if (entityName) {
|
|
79
|
+
const filterSQL = drillDown.filters.map(f => {
|
|
80
|
+
const isDateValue = drillDownValue instanceof Date;
|
|
81
|
+
const isNumberValue = !isNaN(parseFloat(drillDownValue));
|
|
82
|
+
const needsQuotes = isDateValue ? true : (isNumberValue ? false : true);
|
|
83
|
+
const quotes = needsQuotes ? "'" : '';
|
|
84
|
+
return `${f.viewFieldName} = ${quotes}${drillDownValue}${quotes}`;
|
|
85
|
+
}).join(' AND ');
|
|
86
|
+
this.DrillDownEvent.emit(new DrillDownInfo(entityName, filterSQL));
|
|
96
87
|
}
|
|
97
88
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
89
|
+
}
|
|
90
|
+
catch (e) {
|
|
91
|
+
console.warn('Error handling chart click', e);
|
|
92
|
+
}
|
|
102
93
|
}
|
|
103
94
|
setupResizeObserver() {
|
|
104
95
|
// Invoke manual resize to ensure the chart is sized correctly
|
|
@@ -126,41 +117,41 @@ export class SkipDynamicChartComponent {
|
|
|
126
117
|
this.plotLayout.width = newWidth;
|
|
127
118
|
}
|
|
128
119
|
}
|
|
120
|
+
_skipData;
|
|
129
121
|
get SkipData() {
|
|
130
122
|
return this._skipData ? this._skipData : undefined;
|
|
131
123
|
}
|
|
132
124
|
set SkipData(d) {
|
|
133
|
-
var _a, _b, _c, _d;
|
|
134
125
|
this._skipData = d;
|
|
135
126
|
if (d) {
|
|
136
|
-
this.plotData =
|
|
137
|
-
this.plotLayout =
|
|
127
|
+
this.plotData = d.executionResults?.plotData?.data;
|
|
128
|
+
this.plotLayout = d.executionResults?.plotData?.layout;
|
|
138
129
|
if (this.plotLayout) {
|
|
139
130
|
if (this.plotLayout.height === undefined || this.plotLayout.height === null || this.plotLayout.height === 0)
|
|
140
131
|
this.plotLayout.height = this.defaultPlotHeight;
|
|
141
132
|
}
|
|
142
133
|
}
|
|
143
134
|
}
|
|
135
|
+
static ɵfac = function SkipDynamicChartComponent_Factory(t) { return new (t || SkipDynamicChartComponent)(i0.ɵɵdirectiveInject(i0.ElementRef)); };
|
|
136
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SkipDynamicChartComponent, selectors: [["skip-dynamic-chart"]], viewQuery: function SkipDynamicChartComponent_Query(rf, ctx) { if (rf & 1) {
|
|
137
|
+
i0.ɵɵviewQuery(_c0, 5);
|
|
138
|
+
i0.ɵɵviewQuery(_c1, 5);
|
|
139
|
+
} if (rf & 2) {
|
|
140
|
+
let _t;
|
|
141
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.plotlyPlot = _t.first);
|
|
142
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.plotContainer = _t.first);
|
|
143
|
+
} }, inputs: { plotData: "plotData", plotLayout: "plotLayout", defaultPlotHeight: "defaultPlotHeight", ShowSaveAsImage: "ShowSaveAsImage", AllowDrillDown: "AllowDrillDown", AutoResizeChart: "AutoResizeChart", SkipData: "SkipData" }, outputs: { DrillDownEvent: "DrillDownEvent" }, decls: 5, vars: 4, consts: [["plotContainer", ""], ["plotlyPlot", ""], ["kendoButton", "", 3, "click", 4, "ngIf"], ["mjFillContainer", ""], ["mjFillContainer", "", 3, "plotlyClick", "data", "layout", "useResizeHandler"], ["kendoButton", "", 3, "click"], [1, "fa-regular", "fa-image"]], template: function SkipDynamicChartComponent_Template(rf, ctx) { if (rf & 1) {
|
|
144
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
145
|
+
i0.ɵɵtemplate(0, SkipDynamicChartComponent_button_0_Template, 3, 0, "button", 2);
|
|
146
|
+
i0.ɵɵelementStart(1, "div", 3, 0)(3, "plotly-plot", 4, 1);
|
|
147
|
+
i0.ɵɵlistener("plotlyClick", function SkipDynamicChartComponent_Template_plotly_plot_plotlyClick_3_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.handleChartClick($event)); });
|
|
148
|
+
i0.ɵɵelementEnd()();
|
|
149
|
+
} if (rf & 2) {
|
|
150
|
+
i0.ɵɵproperty("ngIf", ctx.ShowSaveAsImage);
|
|
151
|
+
i0.ɵɵadvance(3);
|
|
152
|
+
i0.ɵɵproperty("data", ctx.plotData)("layout", ctx.plotLayout)("useResizeHandler", true);
|
|
153
|
+
} }, dependencies: [i1.NgIf, i2.FillContainer, i3.ButtonComponent, i4.PlotlyComponent], styles: ["button[_ngcontent-%COMP%] { margin-top: 5px; margin-bottom: 5px;}"] });
|
|
144
154
|
}
|
|
145
|
-
SkipDynamicChartComponent.ɵfac = function SkipDynamicChartComponent_Factory(t) { return new (t || SkipDynamicChartComponent)(i0.ɵɵdirectiveInject(i0.ElementRef)); };
|
|
146
|
-
SkipDynamicChartComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SkipDynamicChartComponent, selectors: [["skip-dynamic-chart"]], viewQuery: function SkipDynamicChartComponent_Query(rf, ctx) { if (rf & 1) {
|
|
147
|
-
i0.ɵɵviewQuery(_c0, 5);
|
|
148
|
-
i0.ɵɵviewQuery(_c1, 5);
|
|
149
|
-
} if (rf & 2) {
|
|
150
|
-
let _t;
|
|
151
|
-
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.plotlyPlot = _t.first);
|
|
152
|
-
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.plotContainer = _t.first);
|
|
153
|
-
} }, inputs: { plotData: "plotData", plotLayout: "plotLayout", defaultPlotHeight: "defaultPlotHeight", ShowSaveAsImage: "ShowSaveAsImage", AllowDrillDown: "AllowDrillDown", AutoResizeChart: "AutoResizeChart", SkipData: "SkipData" }, outputs: { DrillDownEvent: "DrillDownEvent" }, decls: 5, vars: 4, consts: [["plotContainer", ""], ["plotlyPlot", ""], ["kendoButton", "", 3, "click", 4, "ngIf"], ["mjFillContainer", ""], ["mjFillContainer", "", 3, "plotlyClick", "data", "layout", "useResizeHandler"], ["kendoButton", "", 3, "click"], [1, "fa-regular", "fa-image"]], template: function SkipDynamicChartComponent_Template(rf, ctx) { if (rf & 1) {
|
|
154
|
-
const _r1 = i0.ɵɵgetCurrentView();
|
|
155
|
-
i0.ɵɵtemplate(0, SkipDynamicChartComponent_button_0_Template, 3, 0, "button", 2);
|
|
156
|
-
i0.ɵɵelementStart(1, "div", 3, 0)(3, "plotly-plot", 4, 1);
|
|
157
|
-
i0.ɵɵlistener("plotlyClick", function SkipDynamicChartComponent_Template_plotly_plot_plotlyClick_3_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.handleChartClick($event)); });
|
|
158
|
-
i0.ɵɵelementEnd()();
|
|
159
|
-
} if (rf & 2) {
|
|
160
|
-
i0.ɵɵproperty("ngIf", ctx.ShowSaveAsImage);
|
|
161
|
-
i0.ɵɵadvance(3);
|
|
162
|
-
i0.ɵɵproperty("data", ctx.plotData)("layout", ctx.plotLayout)("useResizeHandler", true);
|
|
163
|
-
} }, dependencies: [i1.NgIf, i2.FillContainer, i3.ButtonComponent, i4.PlotlyComponent], styles: ["button[_ngcontent-%COMP%] { margin-top: 5px; margin-bottom: 5px;}"] });
|
|
164
155
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SkipDynamicChartComponent, [{
|
|
165
156
|
type: Component,
|
|
166
157
|
args: [{ selector: 'skip-dynamic-chart', template: `
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-chart.js","sourceRoot":"","sources":["../../../src/lib/dynamic-report/dynamic-chart.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dynamic-chart.js","sourceRoot":"","sources":["../../../src/lib/dynamic-report/dynamic-chart.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
11
2
|
import { SkipColumnInfo } from '@memberjunction/skip-types';
|
|
12
3
|
import { DecimalPipe, DatePipe } from '@angular/common';
|
|
@@ -128,11 +119,22 @@ function SkipDynamicGridComponent_kendo_grid_1_Template(rf, ctx) { if (rf & 1) {
|
|
|
128
119
|
i0.ɵɵproperty("ngForOf", ctx_r1.columns);
|
|
129
120
|
} }
|
|
130
121
|
export class SkipDynamicGridComponent {
|
|
122
|
+
decimalPipe;
|
|
123
|
+
datePipe;
|
|
124
|
+
notificationService;
|
|
125
|
+
data = [];
|
|
126
|
+
columns = [];
|
|
127
|
+
pageSize = 30;
|
|
128
|
+
startingRow = 0;
|
|
129
|
+
GridHeight = null;
|
|
130
|
+
ShowRefreshButton = false;
|
|
131
|
+
AllowDrillDown = true;
|
|
132
|
+
DrillDownEvent = new EventEmitter();
|
|
133
|
+
_skipData;
|
|
131
134
|
get SkipData() {
|
|
132
135
|
return this._skipData ? this._skipData : undefined;
|
|
133
136
|
}
|
|
134
137
|
set SkipData(d) {
|
|
135
|
-
var _a, _b, _c, _d;
|
|
136
138
|
this._skipData = d;
|
|
137
139
|
if (d) {
|
|
138
140
|
// check to see if the tableDataColumns is NOT provided, in that case we need to check to see if we
|
|
@@ -140,7 +142,7 @@ export class SkipDynamicGridComponent {
|
|
|
140
142
|
// we don't have things like 2022 as a column name which is not valid in JavaScript
|
|
141
143
|
if (!d.tableDataColumns || d.tableDataColumns.length === 0) {
|
|
142
144
|
// no columns provided, so we check here to make sure the column names are valid
|
|
143
|
-
this.data =
|
|
145
|
+
this.data = d.executionResults?.tableData ? d.executionResults?.tableData : [];
|
|
144
146
|
// now loop through the data and fix up the column names if needed
|
|
145
147
|
for (let i = 0; i < this.data.length; i++) {
|
|
146
148
|
const row = this.data[i];
|
|
@@ -166,27 +168,18 @@ export class SkipDynamicGridComponent {
|
|
|
166
168
|
else {
|
|
167
169
|
// we have table data columns provided, so use that info!
|
|
168
170
|
this.columns = d.tableDataColumns;
|
|
169
|
-
this.data =
|
|
171
|
+
this.data = d.executionResults?.tableData ? d.executionResults?.tableData : [];
|
|
170
172
|
}
|
|
171
173
|
this.loadGridView();
|
|
172
174
|
}
|
|
173
175
|
}
|
|
176
|
+
gridView;
|
|
174
177
|
constructor(decimalPipe, datePipe, notificationService) {
|
|
175
178
|
this.decimalPipe = decimalPipe;
|
|
176
179
|
this.datePipe = datePipe;
|
|
177
180
|
this.notificationService = notificationService;
|
|
178
|
-
this.data = [];
|
|
179
|
-
this.columns = [];
|
|
180
|
-
this.pageSize = 30;
|
|
181
|
-
this.startingRow = 0;
|
|
182
|
-
this.GridHeight = null;
|
|
183
|
-
this.ShowRefreshButton = false;
|
|
184
|
-
this.AllowDrillDown = true;
|
|
185
|
-
this.DrillDownEvent = new EventEmitter();
|
|
186
|
-
this.kendoExcelExport = null;
|
|
187
|
-
// Export Functionality
|
|
188
|
-
this.exportData = [];
|
|
189
181
|
}
|
|
182
|
+
kendoExcelExport = null;
|
|
190
183
|
formatData(dataType, data) {
|
|
191
184
|
switch (dataType) {
|
|
192
185
|
case 'bigint':
|
|
@@ -226,82 +219,76 @@ export class SkipDynamicGridComponent {
|
|
|
226
219
|
};
|
|
227
220
|
});
|
|
228
221
|
}
|
|
229
|
-
cellClick(event) {
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
const
|
|
241
|
-
|
|
242
|
-
const
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
}).join(' AND ');
|
|
250
|
-
this.DrillDownEvent.emit(new DrillDownInfo(entityName, filterSQL));
|
|
251
|
-
}
|
|
222
|
+
async cellClick(event) {
|
|
223
|
+
try {
|
|
224
|
+
if (!this.AllowDrillDown)
|
|
225
|
+
return;
|
|
226
|
+
const rowSelected = event.dataItem;
|
|
227
|
+
const drillDown = this.SkipData?.drillDown;
|
|
228
|
+
if (drillDown && rowSelected) {
|
|
229
|
+
// we have a valid situation to drill down where we have the configuration and we have a drill down value.
|
|
230
|
+
// we can navigate to the drill down view
|
|
231
|
+
const entityName = GetEntityNameFromSchemaAndViewString(drillDown.viewName);
|
|
232
|
+
if (entityName) {
|
|
233
|
+
const filterSQL = drillDown.filters.map(f => {
|
|
234
|
+
const val = rowSelected[f.componentFieldName];
|
|
235
|
+
const isDateValue = val instanceof Date;
|
|
236
|
+
const isNumberValue = !isNaN(parseFloat(val));
|
|
237
|
+
const needsQuotes = isDateValue ? true : (isNumberValue ? false : true);
|
|
238
|
+
const quotes = needsQuotes ? "'" : '';
|
|
239
|
+
return `${f.viewFieldName} = ${quotes}${val}${quotes}`;
|
|
240
|
+
}).join(' AND ');
|
|
241
|
+
this.DrillDownEvent.emit(new DrillDownInfo(entityName, filterSQL));
|
|
252
242
|
}
|
|
253
243
|
}
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
}
|
|
244
|
+
}
|
|
245
|
+
catch (e) {
|
|
246
|
+
console.warn('Error handling grid row click', e);
|
|
247
|
+
}
|
|
258
248
|
}
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
});
|
|
249
|
+
// Export Functionality
|
|
250
|
+
exportData = [];
|
|
251
|
+
async doExcelExport() {
|
|
252
|
+
if (this.kendoExcelExport === null)
|
|
253
|
+
throw new Error("kendoExcelExport is null, cannot export data");
|
|
254
|
+
try {
|
|
255
|
+
this.exportData = await this.getExportData();
|
|
256
|
+
// next show an initial notification, but only if a lot of data
|
|
257
|
+
if (this.exportData.length > 5000)
|
|
258
|
+
this.notificationService.CreateSimpleNotification("Working on the export, will notify you when it is complete...", 'info', 2000);
|
|
259
|
+
// before we call the save, we need to let Angular do its thing that will result in the kendoExcelExport component binding properly to
|
|
260
|
+
// the exportColumns and exportData arrays. So we wait for the next tick before we call save()
|
|
261
|
+
setTimeout(() => {
|
|
262
|
+
// support the legacy report title as old conversation details had a reportTitle property
|
|
263
|
+
// but the new SkipData object has a title property, so favor the title property
|
|
264
|
+
const title = this.SkipData?.title || this.SkipData?.reportTitle || 'Report_Grid_Export';
|
|
265
|
+
this.kendoExcelExport.fileName = `${title}.xlsx`;
|
|
266
|
+
this.kendoExcelExport.save();
|
|
267
|
+
this.notificationService.CreateSimpleNotification("Excel Export Complete", 'success', 2000);
|
|
268
|
+
}, 100);
|
|
269
|
+
}
|
|
270
|
+
catch (e) {
|
|
271
|
+
this.notificationService.CreateSimpleNotification("Error exporting data", 'error', 5000);
|
|
272
|
+
LogError(e);
|
|
273
|
+
}
|
|
285
274
|
}
|
|
286
|
-
getExportData() {
|
|
287
|
-
return
|
|
288
|
-
return this.data;
|
|
289
|
-
});
|
|
275
|
+
async getExportData() {
|
|
276
|
+
return this.data;
|
|
290
277
|
}
|
|
278
|
+
static ɵfac = function SkipDynamicGridComponent_Factory(t) { return new (t || SkipDynamicGridComponent)(i0.ɵɵdirectiveInject(i1.DecimalPipe), i0.ɵɵdirectiveInject(i1.DatePipe), i0.ɵɵdirectiveInject(i2.MJNotificationService)); };
|
|
279
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SkipDynamicGridComponent, selectors: [["skip-dynamic-grid"]], viewQuery: function SkipDynamicGridComponent_Query(rf, ctx) { if (rf & 1) {
|
|
280
|
+
i0.ɵɵviewQuery(_c0, 5, ExcelExportComponent);
|
|
281
|
+
} if (rf & 2) {
|
|
282
|
+
let _t;
|
|
283
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.kendoExcelExport = _t.first);
|
|
284
|
+
} }, inputs: { data: "data", columns: "columns", pageSize: "pageSize", startingRow: "startingRow", GridHeight: "GridHeight", ShowRefreshButton: "ShowRefreshButton", AllowDrillDown: "AllowDrillDown", SkipData: "SkipData" }, outputs: { DrillDownEvent: "DrillDownEvent" }, features: [i0.ɵɵProvidersFeature([DecimalPipe, DatePipe])], decls: 2, vars: 2, consts: [["excelExport", ""], ["scrollable", "virtual", 3, "height", "data", "skip", "pageSize", "rowHeight", "reorderable", "resizable", "navigable", "pageChange", "cellClick", 4, "ngIf"], ["scrollable", "virtual", 3, "data", "skip", "pageSize", "rowHeight", "reorderable", "resizable", "navigable", "pageChange", "cellClick", 4, "ngIf"], ["scrollable", "virtual", 3, "pageChange", "cellClick", "height", "data", "skip", "pageSize", "rowHeight", "reorderable", "resizable", "navigable"], [4, "ngFor", "ngForOf"], ["kendoGridToolbarTemplate", ""], [3, "data", "fileName"], [3, "field", "title", 4, "ngFor", "ngForOf"], [3, "field", "title", "headerStyle"], ["kendoGridCellTemplate", ""], ["kendoButton", "", 3, "click"], [1, "fa-solid", "fa-file-excel"], [3, "field", "title"], ["scrollable", "virtual", 3, "pageChange", "cellClick", "data", "skip", "pageSize", "rowHeight", "reorderable", "resizable", "navigable"]], template: function SkipDynamicGridComponent_Template(rf, ctx) { if (rf & 1) {
|
|
285
|
+
i0.ɵɵtemplate(0, SkipDynamicGridComponent_kendo_grid_0_Template, 6, 12, "kendo-grid", 1)(1, SkipDynamicGridComponent_kendo_grid_1_Template, 6, 11, "kendo-grid", 2);
|
|
286
|
+
} if (rf & 2) {
|
|
287
|
+
i0.ɵɵproperty("ngIf", ctx.GridHeight !== null);
|
|
288
|
+
i0.ɵɵadvance();
|
|
289
|
+
i0.ɵɵproperty("ngIf", ctx.GridHeight === null);
|
|
290
|
+
} }, dependencies: [i1.NgForOf, i1.NgIf, i3.GridComponent, i3.ToolbarTemplateDirective, i3.ColumnComponent, i3.CellTemplateDirective, i4.ButtonComponent, i5.ExcelExportComponent, i5.ColumnComponent], encapsulation: 2 });
|
|
291
291
|
}
|
|
292
|
-
SkipDynamicGridComponent.ɵfac = function SkipDynamicGridComponent_Factory(t) { return new (t || SkipDynamicGridComponent)(i0.ɵɵdirectiveInject(i1.DecimalPipe), i0.ɵɵdirectiveInject(i1.DatePipe), i0.ɵɵdirectiveInject(i2.MJNotificationService)); };
|
|
293
|
-
SkipDynamicGridComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SkipDynamicGridComponent, selectors: [["skip-dynamic-grid"]], viewQuery: function SkipDynamicGridComponent_Query(rf, ctx) { if (rf & 1) {
|
|
294
|
-
i0.ɵɵviewQuery(_c0, 5, ExcelExportComponent);
|
|
295
|
-
} if (rf & 2) {
|
|
296
|
-
let _t;
|
|
297
|
-
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.kendoExcelExport = _t.first);
|
|
298
|
-
} }, inputs: { data: "data", columns: "columns", pageSize: "pageSize", startingRow: "startingRow", GridHeight: "GridHeight", ShowRefreshButton: "ShowRefreshButton", AllowDrillDown: "AllowDrillDown", SkipData: "SkipData" }, outputs: { DrillDownEvent: "DrillDownEvent" }, features: [i0.ɵɵProvidersFeature([DecimalPipe, DatePipe])], decls: 2, vars: 2, consts: [["excelExport", ""], ["scrollable", "virtual", 3, "height", "data", "skip", "pageSize", "rowHeight", "reorderable", "resizable", "navigable", "pageChange", "cellClick", 4, "ngIf"], ["scrollable", "virtual", 3, "data", "skip", "pageSize", "rowHeight", "reorderable", "resizable", "navigable", "pageChange", "cellClick", 4, "ngIf"], ["scrollable", "virtual", 3, "pageChange", "cellClick", "height", "data", "skip", "pageSize", "rowHeight", "reorderable", "resizable", "navigable"], [4, "ngFor", "ngForOf"], ["kendoGridToolbarTemplate", ""], [3, "data", "fileName"], [3, "field", "title", 4, "ngFor", "ngForOf"], [3, "field", "title", "headerStyle"], ["kendoGridCellTemplate", ""], ["kendoButton", "", 3, "click"], [1, "fa-solid", "fa-file-excel"], [3, "field", "title"], ["scrollable", "virtual", 3, "pageChange", "cellClick", "data", "skip", "pageSize", "rowHeight", "reorderable", "resizable", "navigable"]], template: function SkipDynamicGridComponent_Template(rf, ctx) { if (rf & 1) {
|
|
299
|
-
i0.ɵɵtemplate(0, SkipDynamicGridComponent_kendo_grid_0_Template, 6, 12, "kendo-grid", 1)(1, SkipDynamicGridComponent_kendo_grid_1_Template, 6, 11, "kendo-grid", 2);
|
|
300
|
-
} if (rf & 2) {
|
|
301
|
-
i0.ɵɵproperty("ngIf", ctx.GridHeight !== null);
|
|
302
|
-
i0.ɵɵadvance();
|
|
303
|
-
i0.ɵɵproperty("ngIf", ctx.GridHeight === null);
|
|
304
|
-
} }, dependencies: [i1.NgForOf, i1.NgIf, i3.GridComponent, i3.ToolbarTemplateDirective, i3.ColumnComponent, i3.CellTemplateDirective, i4.ButtonComponent, i5.ExcelExportComponent, i5.ColumnComponent], encapsulation: 2 });
|
|
305
292
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SkipDynamicGridComponent, [{
|
|
306
293
|
type: Component,
|
|
307
294
|
args: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-grid.js","sourceRoot":"","sources":["../../../src/lib/dynamic-report/dynamic-grid.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dynamic-grid.js","sourceRoot":"","sources":["../../../src/lib/dynamic-report/dynamic-grid.ts"],"names":[],"mappings":"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"}
|