@hpcc-js/marshaller 2.28.7 → 2.28.8
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/LICENSE +43 -43
- package/dist/index.es6.js +25 -13
- package/dist/index.es6.js.map +1 -1
- package/dist/index.js +25 -13
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +2 -2
- package/dist/index.min.js.map +1 -1
- package/package.json +12 -12
- package/src/__package__.ts +3 -3
- package/src/dashy.css +239 -239
- package/src/dashy.ts +521 -521
- package/src/ddl1/DDLApi.ts +229 -229
- package/src/ddl1/FlyoutButton.ts +120 -120
- package/src/ddl1/Graph.ts +93 -93
- package/src/ddl1/HTML.ts +77 -77
- package/src/ddl1/HipieDDL.ts +2437 -2437
- package/src/ddl1/HipieDDLMixin.ts +380 -380
- package/src/ddl1/Tabbed.ts +91 -91
- package/src/ddl1/TargetMarshaller.ts +57 -57
- package/src/ddl2/PopupManager.ts +89 -89
- package/src/ddl2/activities/activity.ts +431 -431
- package/src/ddl2/activities/databomb.ts +237 -237
- package/src/ddl2/activities/datasource.ts +52 -52
- package/src/ddl2/activities/dspicker.ts +106 -106
- package/src/ddl2/activities/filter.ts +542 -542
- package/src/ddl2/activities/form.ts +153 -153
- package/src/ddl2/activities/groupby.ts +439 -439
- package/src/ddl2/activities/hipiepipeline.ts +114 -114
- package/src/ddl2/activities/limit.ts +49 -49
- package/src/ddl2/activities/logicalfile.ts +62 -62
- package/src/ddl2/activities/nullview.ts +12 -12
- package/src/ddl2/activities/project.ts +764 -764
- package/src/ddl2/activities/rest.ts +568 -568
- package/src/ddl2/activities/roxie.ts +490 -490
- package/src/ddl2/activities/sampledata.json +16264 -16264
- package/src/ddl2/activities/sort.ts +176 -176
- package/src/ddl2/activities/wuresult.ts +395 -395
- package/src/ddl2/dashboard.css +13 -13
- package/src/ddl2/dashboard.ts +330 -330
- package/src/ddl2/dashboardDockPanel.ts +123 -123
- package/src/ddl2/dashboardGrid.ts +202 -202
- package/src/ddl2/ddl.ts +410 -410
- package/src/ddl2/ddleditor.ts +60 -60
- package/src/ddl2/dsTable.ts +238 -238
- package/src/ddl2/dvTable.ts +31 -31
- package/src/ddl2/graphadapter.ts +297 -297
- package/src/ddl2/javascriptadapter.ts +354 -354
- package/src/ddl2/model/element.ts +398 -398
- package/src/ddl2/model/visualization.ts +351 -351
- package/src/ddl2/model/vizChartPanel.ts +149 -149
- package/src/ddl2/pipelinePanel.css +4 -4
- package/src/ddl2/pipelinePanel.ts +465 -465
- package/src/index.ts +26 -26
- package/types/__package__.d.ts +2 -2
- package/types-3.4/__package__.d.ts +2 -2
package/src/ddl2/ddleditor.ts
CHANGED
|
@@ -1,60 +1,60 @@
|
|
|
1
|
-
import { JSONEditor } from "@hpcc-js/codemirror";
|
|
2
|
-
import { DDL2, validate2 } from "@hpcc-js/ddl-shim";
|
|
3
|
-
import { Table } from "@hpcc-js/dgrid";
|
|
4
|
-
import { SplitPanel } from "@hpcc-js/phosphor";
|
|
5
|
-
|
|
6
|
-
import "../../src/ddl2/ddleditor.css";
|
|
7
|
-
|
|
8
|
-
export class DDLEditor extends SplitPanel {
|
|
9
|
-
summary: string = "0 Errors";
|
|
10
|
-
_ddlEditor = new JSONEditor().on("changes", (changes) => {
|
|
11
|
-
this.checkSyntax();
|
|
12
|
-
});
|
|
13
|
-
_errorTable = new Table()
|
|
14
|
-
.columns(["dataPath", "keyword", "message", "params"])
|
|
15
|
-
;
|
|
16
|
-
|
|
17
|
-
ddl(): object;
|
|
18
|
-
ddl(_: object): this;
|
|
19
|
-
ddl(_?: object): object | this {
|
|
20
|
-
if (!arguments.length) return this._ddlEditor.json();
|
|
21
|
-
this._ddlEditor.json(_);
|
|
22
|
-
this.checkSyntax();
|
|
23
|
-
return this;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
checkSyntax() {
|
|
27
|
-
try {
|
|
28
|
-
const json = this.ddl();
|
|
29
|
-
try {
|
|
30
|
-
const { success, errors } = validate2(json as DDL2.Schema);
|
|
31
|
-
if (success) {
|
|
32
|
-
this._errorTable.data([]);
|
|
33
|
-
} else {
|
|
34
|
-
this._errorTable.data(errors.map(error => [error.dataPath, error.keyword, error.message, JSON.stringify(error.params)]));
|
|
35
|
-
}
|
|
36
|
-
} catch (e) {
|
|
37
|
-
this._errorTable.data([["", "Validation Failed", "", ""]]);
|
|
38
|
-
}
|
|
39
|
-
} catch (e) {
|
|
40
|
-
this._errorTable.data([["ALL", "Invalid JSON", "", ""]]);
|
|
41
|
-
}
|
|
42
|
-
if (this._renderCount) {
|
|
43
|
-
this._errorTable.lazyRender();
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
enter(domNode, element) {
|
|
48
|
-
super.enter(domNode, element);
|
|
49
|
-
this
|
|
50
|
-
.addWidget(this._ddlEditor)
|
|
51
|
-
.addWidget(this._errorTable)
|
|
52
|
-
;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
update(domNode, _element) {
|
|
56
|
-
super.update(domNode, _element);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
}
|
|
60
|
-
DDLEditor.prototype._class += " codemirror_DDLEditor";
|
|
1
|
+
import { JSONEditor } from "@hpcc-js/codemirror";
|
|
2
|
+
import { DDL2, validate2 } from "@hpcc-js/ddl-shim";
|
|
3
|
+
import { Table } from "@hpcc-js/dgrid";
|
|
4
|
+
import { SplitPanel } from "@hpcc-js/phosphor";
|
|
5
|
+
|
|
6
|
+
import "../../src/ddl2/ddleditor.css";
|
|
7
|
+
|
|
8
|
+
export class DDLEditor extends SplitPanel {
|
|
9
|
+
summary: string = "0 Errors";
|
|
10
|
+
_ddlEditor = new JSONEditor().on("changes", (changes) => {
|
|
11
|
+
this.checkSyntax();
|
|
12
|
+
});
|
|
13
|
+
_errorTable = new Table()
|
|
14
|
+
.columns(["dataPath", "keyword", "message", "params"])
|
|
15
|
+
;
|
|
16
|
+
|
|
17
|
+
ddl(): object;
|
|
18
|
+
ddl(_: object): this;
|
|
19
|
+
ddl(_?: object): object | this {
|
|
20
|
+
if (!arguments.length) return this._ddlEditor.json();
|
|
21
|
+
this._ddlEditor.json(_);
|
|
22
|
+
this.checkSyntax();
|
|
23
|
+
return this;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
checkSyntax() {
|
|
27
|
+
try {
|
|
28
|
+
const json = this.ddl();
|
|
29
|
+
try {
|
|
30
|
+
const { success, errors } = validate2(json as DDL2.Schema);
|
|
31
|
+
if (success) {
|
|
32
|
+
this._errorTable.data([]);
|
|
33
|
+
} else {
|
|
34
|
+
this._errorTable.data(errors.map(error => [error.dataPath, error.keyword, error.message, JSON.stringify(error.params)]));
|
|
35
|
+
}
|
|
36
|
+
} catch (e) {
|
|
37
|
+
this._errorTable.data([["", "Validation Failed", "", ""]]);
|
|
38
|
+
}
|
|
39
|
+
} catch (e) {
|
|
40
|
+
this._errorTable.data([["ALL", "Invalid JSON", "", ""]]);
|
|
41
|
+
}
|
|
42
|
+
if (this._renderCount) {
|
|
43
|
+
this._errorTable.lazyRender();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
enter(domNode, element) {
|
|
48
|
+
super.enter(domNode, element);
|
|
49
|
+
this
|
|
50
|
+
.addWidget(this._ddlEditor)
|
|
51
|
+
.addWidget(this._errorTable)
|
|
52
|
+
;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
update(domNode, _element) {
|
|
56
|
+
super.update(domNode, _element);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
}
|
|
60
|
+
DDLEditor.prototype._class += " codemirror_DDLEditor";
|
package/src/ddl2/dsTable.ts
CHANGED
|
@@ -1,238 +1,238 @@
|
|
|
1
|
-
import { Button, Spacer } from "@hpcc-js/common";
|
|
2
|
-
import { Table } from "@hpcc-js/dgrid";
|
|
3
|
-
import { ChartPanel } from "@hpcc-js/layout";
|
|
4
|
-
import { CommandRegistry, ContextMenu } from "@hpcc-js/phosphor";
|
|
5
|
-
import { text as d3Text } from "d3-fetch";
|
|
6
|
-
import { Databomb } from "./activities/databomb";
|
|
7
|
-
import { DatasourceRefType } from "./activities/datasource";
|
|
8
|
-
import { DSPicker } from "./activities/dspicker";
|
|
9
|
-
import { Form, FormField } from "./activities/form";
|
|
10
|
-
import { LogicalFile } from "./activities/logicalfile";
|
|
11
|
-
import { RestField, RestResult, RestService } from "./activities/rest";
|
|
12
|
-
import { RoxieResult, RoxieService } from "./activities/roxie";
|
|
13
|
-
import { WU, WUResult } from "./activities/wuresult";
|
|
14
|
-
import { ElementContainer } from "./model/element";
|
|
15
|
-
|
|
16
|
-
export class DSTable extends ChartPanel {
|
|
17
|
-
|
|
18
|
-
private _addButton = new Button().faChar("fa-plus").tooltip("Add...")
|
|
19
|
-
.on("click", () => {
|
|
20
|
-
const node = this._addButton.element().node();
|
|
21
|
-
const rect = node.getBoundingClientRect();
|
|
22
|
-
if (this._contextMenu.open({
|
|
23
|
-
target: node,
|
|
24
|
-
currentTarget: node,
|
|
25
|
-
clientX: rect.left,
|
|
26
|
-
clientY: rect.bottom
|
|
27
|
-
})) {
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
private _removeButton = new Button().faChar("fa-minus").tooltip("Remove...")
|
|
32
|
-
.enabled(false)
|
|
33
|
-
.on("click", () => {
|
|
34
|
-
this.remove();
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
private _cloneButton = new Button().faChar("fa-clone").tooltip("Clone...")
|
|
38
|
-
.enabled(false)
|
|
39
|
-
.on("click", () => {
|
|
40
|
-
if (this._selectedDS2) {
|
|
41
|
-
if (this._selectedDS2 instanceof Databomb) {
|
|
42
|
-
this.add(Databomb.fromDDL(this._selectedDS2.toDDL(), true));
|
|
43
|
-
} else if (this._selectedDS2 instanceof Form) {
|
|
44
|
-
this.add(Form.fromDDL(this._selectedDS2.toDDL(), true));
|
|
45
|
-
} else if (this._selectedDS2 instanceof LogicalFile) {
|
|
46
|
-
this.add(LogicalFile.fromDDL(this._ec, this._selectedDS2.toDDL(), true));
|
|
47
|
-
} else if (this._selectedDS2 instanceof RestResult) {
|
|
48
|
-
this.add(new RestResult(this._ec)
|
|
49
|
-
.service(RestService.fromDDL(this._ec, this._selectedDS2.service().toDDL(), true))
|
|
50
|
-
.resultName(this._selectedDS2.resultName())
|
|
51
|
-
);
|
|
52
|
-
} else if (this._selectedDS2 instanceof WUResult) {
|
|
53
|
-
this.add(new WUResult(this._ec)
|
|
54
|
-
.wu(WU.fromDDL(this._ec, this._selectedDS2.wu().toDDL(), true))
|
|
55
|
-
.resultName(this._selectedDS2.resultName())
|
|
56
|
-
);
|
|
57
|
-
} else if (this._selectedDS2 instanceof RoxieResult) {
|
|
58
|
-
this.add(new RoxieResult(this._ec)
|
|
59
|
-
.service(RoxieService.fromDDL(this._ec, this._selectedDS2.service().toDDL(), true))
|
|
60
|
-
.resultName(this._selectedDS2.resultName())
|
|
61
|
-
);
|
|
62
|
-
} else {
|
|
63
|
-
console.warn("Unknown datasoure type");
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
private _addSamples = new Button().faChar("fa-database").tooltip("Add Samples")
|
|
69
|
-
.on("click", () => {
|
|
70
|
-
d3Text("https://raw.githubusercontent.com/hpcc-systems/Visualization/trunk/utils/data/data/airports.csv").then(csv => {
|
|
71
|
-
this.add(new Databomb().format("csv").payload(csv));
|
|
72
|
-
});
|
|
73
|
-
d3Text("https://raw.githubusercontent.com/hpcc-systems/Visualization/trunk/utils/data/data/carriers.csv").then(csv => {
|
|
74
|
-
this.add(new Databomb().format("csv").payload(csv));
|
|
75
|
-
});
|
|
76
|
-
d3Text("https://raw.githubusercontent.com/hpcc-systems/Visualization/trunk/utils/data/data/stats.csv").then(csv => {
|
|
77
|
-
this.add(new Databomb().format("csv").payload(csv));
|
|
78
|
-
});
|
|
79
|
-
this.add(new RestResult(this._ec)
|
|
80
|
-
.service(new RestService(this._ec)
|
|
81
|
-
.url("https://cmsapi.pulselive.com/")
|
|
82
|
-
.action("rugby/rankings/mru")
|
|
83
|
-
.requestFields([
|
|
84
|
-
new RestField().fieldID("xxx"),
|
|
85
|
-
new RestField().fieldID("date")
|
|
86
|
-
]))
|
|
87
|
-
.resultName("entries")
|
|
88
|
-
);
|
|
89
|
-
this.add(new WUResult(this._ec)
|
|
90
|
-
.wu(new WU(this._ec).url("https://play.hpccsystems.com:18010").wuid("W20200206-140840"))
|
|
91
|
-
.resultName("Result 1")
|
|
92
|
-
);
|
|
93
|
-
this.add(new LogicalFile(this._ec)
|
|
94
|
-
.url("https://play.hpccsystems.com:18010")
|
|
95
|
-
.logicalFile("yelp::lc::clean::review")
|
|
96
|
-
);
|
|
97
|
-
const vmRoxie = new RoxieService(this._ec)
|
|
98
|
-
.url("https://play.hpccsystems.com:18002")
|
|
99
|
-
.querySet("roxie")
|
|
100
|
-
.queryID("h3testcities")
|
|
101
|
-
;
|
|
102
|
-
this.add(new RoxieResult(this._ec)
|
|
103
|
-
.service(vmRoxie)
|
|
104
|
-
.resultName("Result")
|
|
105
|
-
);
|
|
106
|
-
this.add(new Form()
|
|
107
|
-
.formFields([
|
|
108
|
-
new FormField().type("number").fieldID("id").value(8),
|
|
109
|
-
new FormField().fieldID("first_name").value("John"),
|
|
110
|
-
new FormField().fieldID("last_name").value("Doe"),
|
|
111
|
-
new FormField().fieldID("gender").default("M"),
|
|
112
|
-
new FormField().type("number").fieldID("age")
|
|
113
|
-
])
|
|
114
|
-
);
|
|
115
|
-
this.render();
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
private _dstable = new Table();
|
|
119
|
-
private _selectedDS;
|
|
120
|
-
private _selectedDS2;
|
|
121
|
-
|
|
122
|
-
private _contextMenu;
|
|
123
|
-
|
|
124
|
-
constructor(private _ec: ElementContainer) {
|
|
125
|
-
super();
|
|
126
|
-
this
|
|
127
|
-
.buttons([this._addButton, this._removeButton, new Spacer(), this._cloneButton, new Spacer(), this._addSamples])
|
|
128
|
-
.widget(this._dstable)
|
|
129
|
-
.columns(["ID", "Type", "References"])
|
|
130
|
-
.on("click", (row, col, sel) => {
|
|
131
|
-
this._selectedDS2 = row.__lparam;
|
|
132
|
-
if (sel && row.References === 0 && row.ID !== "Empty") {
|
|
133
|
-
this._selectedDS = row.__lparam;
|
|
134
|
-
} else {
|
|
135
|
-
delete this._selectedDS;
|
|
136
|
-
}
|
|
137
|
-
this._removeButton.enabled(this._selectedDS !== undefined).render();
|
|
138
|
-
this._cloneButton.enabled(this._selectedDS2 !== undefined).render();
|
|
139
|
-
})
|
|
140
|
-
;
|
|
141
|
-
|
|
142
|
-
this.initMenu();
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
initMenu() {
|
|
146
|
-
const commands = new CommandRegistry();
|
|
147
|
-
|
|
148
|
-
// Dashboard Commands ---
|
|
149
|
-
commands.addCommand("add_wu_result", {
|
|
150
|
-
label: "Workunit Result",
|
|
151
|
-
execute: () => {
|
|
152
|
-
this.add(new WUResult(this._ec));
|
|
153
|
-
}
|
|
154
|
-
});
|
|
155
|
-
|
|
156
|
-
commands.addCommand("add_logicalfile", {
|
|
157
|
-
label: "Logical File",
|
|
158
|
-
execute: () => {
|
|
159
|
-
this.add(new LogicalFile(this._ec));
|
|
160
|
-
}
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
commands.addCommand("add_roxie", {
|
|
164
|
-
label: "Roxie Service",
|
|
165
|
-
execute: () => {
|
|
166
|
-
this.add(new RoxieResult(this._ec));
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
commands.addCommand("add_rest", {
|
|
171
|
-
label: "Rest",
|
|
172
|
-
execute: () => {
|
|
173
|
-
this.add(new RestResult(this._ec));
|
|
174
|
-
}
|
|
175
|
-
});
|
|
176
|
-
|
|
177
|
-
commands.addCommand("add_databomb", {
|
|
178
|
-
label: "Databomb",
|
|
179
|
-
execute: () => {
|
|
180
|
-
this.add(new Databomb());
|
|
181
|
-
}
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
commands.addCommand("add_form", {
|
|
185
|
-
label: "Form",
|
|
186
|
-
execute: () => {
|
|
187
|
-
this.add(new Form());
|
|
188
|
-
}
|
|
189
|
-
});
|
|
190
|
-
|
|
191
|
-
this._contextMenu = new ContextMenu({ commands });
|
|
192
|
-
this._contextMenu.addItem({ command: "add_wu_result", selector: ".common_Button" });
|
|
193
|
-
this._contextMenu.addItem({ command: "add_logicalfile", selector: ".common_Button" });
|
|
194
|
-
this._contextMenu.addItem({ command: "add_roxie", selector: ".common_Button" });
|
|
195
|
-
this._contextMenu.addItem({ command: "add_rest", selector: ".common_Button" });
|
|
196
|
-
this._contextMenu.addItem({ command: "add_databomb", selector: ".common_Button" });
|
|
197
|
-
this._contextMenu.addItem({ command: "add_form", selector: ".common_Button" });
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
add(ds: DatasourceRefType) {
|
|
201
|
-
this._ec.appendDatasource(ds);
|
|
202
|
-
this.render();
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
remove() {
|
|
206
|
-
if (this._selectedDS) {
|
|
207
|
-
this._ec.removeDatasource(this._selectedDS);
|
|
208
|
-
this.render();
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
private _prevDataID;
|
|
213
|
-
render(callback?) {
|
|
214
|
-
const refs = {};
|
|
215
|
-
this._ec.elements().forEach(e => {
|
|
216
|
-
let ds = e.hipiePipeline().datasource();
|
|
217
|
-
if (ds instanceof DSPicker) {
|
|
218
|
-
ds = ds.datasource();
|
|
219
|
-
}
|
|
220
|
-
if (refs[ds.id()] === undefined) {
|
|
221
|
-
refs[ds.id()] = 0;
|
|
222
|
-
}
|
|
223
|
-
refs[ds.id()]++;
|
|
224
|
-
});
|
|
225
|
-
const data = this._ec.datasources().filter(ds => ds.id() !== "Empty").map(ds => {
|
|
226
|
-
if (refs[ds.id()] === undefined) {
|
|
227
|
-
refs[ds.id()] = 0;
|
|
228
|
-
}
|
|
229
|
-
return [ds.id(), ds.classID(), refs[ds.id()] || 0, ds];
|
|
230
|
-
});
|
|
231
|
-
const dataID = JSON.stringify(refs);
|
|
232
|
-
if (this._prevDataID !== dataID) {
|
|
233
|
-
this._prevDataID = dataID;
|
|
234
|
-
this.data(data);
|
|
235
|
-
}
|
|
236
|
-
return super.render(callback);
|
|
237
|
-
}
|
|
238
|
-
}
|
|
1
|
+
import { Button, Spacer } from "@hpcc-js/common";
|
|
2
|
+
import { Table } from "@hpcc-js/dgrid";
|
|
3
|
+
import { ChartPanel } from "@hpcc-js/layout";
|
|
4
|
+
import { CommandRegistry, ContextMenu } from "@hpcc-js/phosphor";
|
|
5
|
+
import { text as d3Text } from "d3-fetch";
|
|
6
|
+
import { Databomb } from "./activities/databomb";
|
|
7
|
+
import { DatasourceRefType } from "./activities/datasource";
|
|
8
|
+
import { DSPicker } from "./activities/dspicker";
|
|
9
|
+
import { Form, FormField } from "./activities/form";
|
|
10
|
+
import { LogicalFile } from "./activities/logicalfile";
|
|
11
|
+
import { RestField, RestResult, RestService } from "./activities/rest";
|
|
12
|
+
import { RoxieResult, RoxieService } from "./activities/roxie";
|
|
13
|
+
import { WU, WUResult } from "./activities/wuresult";
|
|
14
|
+
import { ElementContainer } from "./model/element";
|
|
15
|
+
|
|
16
|
+
export class DSTable extends ChartPanel {
|
|
17
|
+
|
|
18
|
+
private _addButton = new Button().faChar("fa-plus").tooltip("Add...")
|
|
19
|
+
.on("click", () => {
|
|
20
|
+
const node = this._addButton.element().node();
|
|
21
|
+
const rect = node.getBoundingClientRect();
|
|
22
|
+
if (this._contextMenu.open({
|
|
23
|
+
target: node,
|
|
24
|
+
currentTarget: node,
|
|
25
|
+
clientX: rect.left,
|
|
26
|
+
clientY: rect.bottom
|
|
27
|
+
})) {
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
private _removeButton = new Button().faChar("fa-minus").tooltip("Remove...")
|
|
32
|
+
.enabled(false)
|
|
33
|
+
.on("click", () => {
|
|
34
|
+
this.remove();
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
private _cloneButton = new Button().faChar("fa-clone").tooltip("Clone...")
|
|
38
|
+
.enabled(false)
|
|
39
|
+
.on("click", () => {
|
|
40
|
+
if (this._selectedDS2) {
|
|
41
|
+
if (this._selectedDS2 instanceof Databomb) {
|
|
42
|
+
this.add(Databomb.fromDDL(this._selectedDS2.toDDL(), true));
|
|
43
|
+
} else if (this._selectedDS2 instanceof Form) {
|
|
44
|
+
this.add(Form.fromDDL(this._selectedDS2.toDDL(), true));
|
|
45
|
+
} else if (this._selectedDS2 instanceof LogicalFile) {
|
|
46
|
+
this.add(LogicalFile.fromDDL(this._ec, this._selectedDS2.toDDL(), true));
|
|
47
|
+
} else if (this._selectedDS2 instanceof RestResult) {
|
|
48
|
+
this.add(new RestResult(this._ec)
|
|
49
|
+
.service(RestService.fromDDL(this._ec, this._selectedDS2.service().toDDL(), true))
|
|
50
|
+
.resultName(this._selectedDS2.resultName())
|
|
51
|
+
);
|
|
52
|
+
} else if (this._selectedDS2 instanceof WUResult) {
|
|
53
|
+
this.add(new WUResult(this._ec)
|
|
54
|
+
.wu(WU.fromDDL(this._ec, this._selectedDS2.wu().toDDL(), true))
|
|
55
|
+
.resultName(this._selectedDS2.resultName())
|
|
56
|
+
);
|
|
57
|
+
} else if (this._selectedDS2 instanceof RoxieResult) {
|
|
58
|
+
this.add(new RoxieResult(this._ec)
|
|
59
|
+
.service(RoxieService.fromDDL(this._ec, this._selectedDS2.service().toDDL(), true))
|
|
60
|
+
.resultName(this._selectedDS2.resultName())
|
|
61
|
+
);
|
|
62
|
+
} else {
|
|
63
|
+
console.warn("Unknown datasoure type");
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
private _addSamples = new Button().faChar("fa-database").tooltip("Add Samples")
|
|
69
|
+
.on("click", () => {
|
|
70
|
+
d3Text("https://raw.githubusercontent.com/hpcc-systems/Visualization/trunk/utils/data/data/airports.csv").then(csv => {
|
|
71
|
+
this.add(new Databomb().format("csv").payload(csv));
|
|
72
|
+
});
|
|
73
|
+
d3Text("https://raw.githubusercontent.com/hpcc-systems/Visualization/trunk/utils/data/data/carriers.csv").then(csv => {
|
|
74
|
+
this.add(new Databomb().format("csv").payload(csv));
|
|
75
|
+
});
|
|
76
|
+
d3Text("https://raw.githubusercontent.com/hpcc-systems/Visualization/trunk/utils/data/data/stats.csv").then(csv => {
|
|
77
|
+
this.add(new Databomb().format("csv").payload(csv));
|
|
78
|
+
});
|
|
79
|
+
this.add(new RestResult(this._ec)
|
|
80
|
+
.service(new RestService(this._ec)
|
|
81
|
+
.url("https://cmsapi.pulselive.com/")
|
|
82
|
+
.action("rugby/rankings/mru")
|
|
83
|
+
.requestFields([
|
|
84
|
+
new RestField().fieldID("xxx"),
|
|
85
|
+
new RestField().fieldID("date")
|
|
86
|
+
]))
|
|
87
|
+
.resultName("entries")
|
|
88
|
+
);
|
|
89
|
+
this.add(new WUResult(this._ec)
|
|
90
|
+
.wu(new WU(this._ec).url("https://play.hpccsystems.com:18010").wuid("W20200206-140840"))
|
|
91
|
+
.resultName("Result 1")
|
|
92
|
+
);
|
|
93
|
+
this.add(new LogicalFile(this._ec)
|
|
94
|
+
.url("https://play.hpccsystems.com:18010")
|
|
95
|
+
.logicalFile("yelp::lc::clean::review")
|
|
96
|
+
);
|
|
97
|
+
const vmRoxie = new RoxieService(this._ec)
|
|
98
|
+
.url("https://play.hpccsystems.com:18002")
|
|
99
|
+
.querySet("roxie")
|
|
100
|
+
.queryID("h3testcities")
|
|
101
|
+
;
|
|
102
|
+
this.add(new RoxieResult(this._ec)
|
|
103
|
+
.service(vmRoxie)
|
|
104
|
+
.resultName("Result")
|
|
105
|
+
);
|
|
106
|
+
this.add(new Form()
|
|
107
|
+
.formFields([
|
|
108
|
+
new FormField().type("number").fieldID("id").value(8),
|
|
109
|
+
new FormField().fieldID("first_name").value("John"),
|
|
110
|
+
new FormField().fieldID("last_name").value("Doe"),
|
|
111
|
+
new FormField().fieldID("gender").default("M"),
|
|
112
|
+
new FormField().type("number").fieldID("age")
|
|
113
|
+
])
|
|
114
|
+
);
|
|
115
|
+
this.render();
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
private _dstable = new Table();
|
|
119
|
+
private _selectedDS;
|
|
120
|
+
private _selectedDS2;
|
|
121
|
+
|
|
122
|
+
private _contextMenu;
|
|
123
|
+
|
|
124
|
+
constructor(private _ec: ElementContainer) {
|
|
125
|
+
super();
|
|
126
|
+
this
|
|
127
|
+
.buttons([this._addButton, this._removeButton, new Spacer(), this._cloneButton, new Spacer(), this._addSamples])
|
|
128
|
+
.widget(this._dstable)
|
|
129
|
+
.columns(["ID", "Type", "References"])
|
|
130
|
+
.on("click", (row, col, sel) => {
|
|
131
|
+
this._selectedDS2 = row.__lparam;
|
|
132
|
+
if (sel && row.References === 0 && row.ID !== "Empty") {
|
|
133
|
+
this._selectedDS = row.__lparam;
|
|
134
|
+
} else {
|
|
135
|
+
delete this._selectedDS;
|
|
136
|
+
}
|
|
137
|
+
this._removeButton.enabled(this._selectedDS !== undefined).render();
|
|
138
|
+
this._cloneButton.enabled(this._selectedDS2 !== undefined).render();
|
|
139
|
+
})
|
|
140
|
+
;
|
|
141
|
+
|
|
142
|
+
this.initMenu();
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
initMenu() {
|
|
146
|
+
const commands = new CommandRegistry();
|
|
147
|
+
|
|
148
|
+
// Dashboard Commands ---
|
|
149
|
+
commands.addCommand("add_wu_result", {
|
|
150
|
+
label: "Workunit Result",
|
|
151
|
+
execute: () => {
|
|
152
|
+
this.add(new WUResult(this._ec));
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
commands.addCommand("add_logicalfile", {
|
|
157
|
+
label: "Logical File",
|
|
158
|
+
execute: () => {
|
|
159
|
+
this.add(new LogicalFile(this._ec));
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
commands.addCommand("add_roxie", {
|
|
164
|
+
label: "Roxie Service",
|
|
165
|
+
execute: () => {
|
|
166
|
+
this.add(new RoxieResult(this._ec));
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
commands.addCommand("add_rest", {
|
|
171
|
+
label: "Rest",
|
|
172
|
+
execute: () => {
|
|
173
|
+
this.add(new RestResult(this._ec));
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
commands.addCommand("add_databomb", {
|
|
178
|
+
label: "Databomb",
|
|
179
|
+
execute: () => {
|
|
180
|
+
this.add(new Databomb());
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
commands.addCommand("add_form", {
|
|
185
|
+
label: "Form",
|
|
186
|
+
execute: () => {
|
|
187
|
+
this.add(new Form());
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
this._contextMenu = new ContextMenu({ commands });
|
|
192
|
+
this._contextMenu.addItem({ command: "add_wu_result", selector: ".common_Button" });
|
|
193
|
+
this._contextMenu.addItem({ command: "add_logicalfile", selector: ".common_Button" });
|
|
194
|
+
this._contextMenu.addItem({ command: "add_roxie", selector: ".common_Button" });
|
|
195
|
+
this._contextMenu.addItem({ command: "add_rest", selector: ".common_Button" });
|
|
196
|
+
this._contextMenu.addItem({ command: "add_databomb", selector: ".common_Button" });
|
|
197
|
+
this._contextMenu.addItem({ command: "add_form", selector: ".common_Button" });
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
add(ds: DatasourceRefType) {
|
|
201
|
+
this._ec.appendDatasource(ds);
|
|
202
|
+
this.render();
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
remove() {
|
|
206
|
+
if (this._selectedDS) {
|
|
207
|
+
this._ec.removeDatasource(this._selectedDS);
|
|
208
|
+
this.render();
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
private _prevDataID;
|
|
213
|
+
render(callback?) {
|
|
214
|
+
const refs = {};
|
|
215
|
+
this._ec.elements().forEach(e => {
|
|
216
|
+
let ds = e.hipiePipeline().datasource();
|
|
217
|
+
if (ds instanceof DSPicker) {
|
|
218
|
+
ds = ds.datasource();
|
|
219
|
+
}
|
|
220
|
+
if (refs[ds.id()] === undefined) {
|
|
221
|
+
refs[ds.id()] = 0;
|
|
222
|
+
}
|
|
223
|
+
refs[ds.id()]++;
|
|
224
|
+
});
|
|
225
|
+
const data = this._ec.datasources().filter(ds => ds.id() !== "Empty").map(ds => {
|
|
226
|
+
if (refs[ds.id()] === undefined) {
|
|
227
|
+
refs[ds.id()] = 0;
|
|
228
|
+
}
|
|
229
|
+
return [ds.id(), ds.classID(), refs[ds.id()] || 0, ds];
|
|
230
|
+
});
|
|
231
|
+
const dataID = JSON.stringify(refs);
|
|
232
|
+
if (this._prevDataID !== dataID) {
|
|
233
|
+
this._prevDataID = dataID;
|
|
234
|
+
this.data(data);
|
|
235
|
+
}
|
|
236
|
+
return super.render(callback);
|
|
237
|
+
}
|
|
238
|
+
}
|
package/src/ddl2/dvTable.ts
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
import { Table } from "@hpcc-js/dgrid";
|
|
2
|
-
import { ChartPanel } from "@hpcc-js/layout";
|
|
3
|
-
import { hashSum } from "@hpcc-js/util";
|
|
4
|
-
import { ElementContainer } from "./model/element";
|
|
5
|
-
|
|
6
|
-
export class DVTable extends ChartPanel {
|
|
7
|
-
|
|
8
|
-
private _dvtable = new Table();
|
|
9
|
-
|
|
10
|
-
constructor(private _ec: ElementContainer) {
|
|
11
|
-
super();
|
|
12
|
-
this
|
|
13
|
-
.titleVisible(false)
|
|
14
|
-
.widget(this._dvtable)
|
|
15
|
-
.columns(["ID", "Title"])
|
|
16
|
-
;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
private _prevDataID;
|
|
20
|
-
render(callback?) {
|
|
21
|
-
const data = this._ec.elements().map(elem => {
|
|
22
|
-
return [elem.id(), elem.visualization().title(), elem];
|
|
23
|
-
});
|
|
24
|
-
const dataID = hashSum(data.map(row => row[0]));
|
|
25
|
-
if (this._prevDataID !== dataID) {
|
|
26
|
-
this._prevDataID = dataID;
|
|
27
|
-
this.data(data);
|
|
28
|
-
}
|
|
29
|
-
return super.render(callback);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
1
|
+
import { Table } from "@hpcc-js/dgrid";
|
|
2
|
+
import { ChartPanel } from "@hpcc-js/layout";
|
|
3
|
+
import { hashSum } from "@hpcc-js/util";
|
|
4
|
+
import { ElementContainer } from "./model/element";
|
|
5
|
+
|
|
6
|
+
export class DVTable extends ChartPanel {
|
|
7
|
+
|
|
8
|
+
private _dvtable = new Table();
|
|
9
|
+
|
|
10
|
+
constructor(private _ec: ElementContainer) {
|
|
11
|
+
super();
|
|
12
|
+
this
|
|
13
|
+
.titleVisible(false)
|
|
14
|
+
.widget(this._dvtable)
|
|
15
|
+
.columns(["ID", "Title"])
|
|
16
|
+
;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
private _prevDataID;
|
|
20
|
+
render(callback?) {
|
|
21
|
+
const data = this._ec.elements().map(elem => {
|
|
22
|
+
return [elem.id(), elem.visualization().title(), elem];
|
|
23
|
+
});
|
|
24
|
+
const dataID = hashSum(data.map(row => row[0]));
|
|
25
|
+
if (this._prevDataID !== dataID) {
|
|
26
|
+
this._prevDataID = dataID;
|
|
27
|
+
this.data(data);
|
|
28
|
+
}
|
|
29
|
+
return super.render(callback);
|
|
30
|
+
}
|
|
31
|
+
}
|