@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.
Files changed (55) hide show
  1. package/LICENSE +43 -43
  2. package/dist/index.es6.js +25 -13
  3. package/dist/index.es6.js.map +1 -1
  4. package/dist/index.js +25 -13
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.min.js +2 -2
  7. package/dist/index.min.js.map +1 -1
  8. package/package.json +12 -12
  9. package/src/__package__.ts +3 -3
  10. package/src/dashy.css +239 -239
  11. package/src/dashy.ts +521 -521
  12. package/src/ddl1/DDLApi.ts +229 -229
  13. package/src/ddl1/FlyoutButton.ts +120 -120
  14. package/src/ddl1/Graph.ts +93 -93
  15. package/src/ddl1/HTML.ts +77 -77
  16. package/src/ddl1/HipieDDL.ts +2437 -2437
  17. package/src/ddl1/HipieDDLMixin.ts +380 -380
  18. package/src/ddl1/Tabbed.ts +91 -91
  19. package/src/ddl1/TargetMarshaller.ts +57 -57
  20. package/src/ddl2/PopupManager.ts +89 -89
  21. package/src/ddl2/activities/activity.ts +431 -431
  22. package/src/ddl2/activities/databomb.ts +237 -237
  23. package/src/ddl2/activities/datasource.ts +52 -52
  24. package/src/ddl2/activities/dspicker.ts +106 -106
  25. package/src/ddl2/activities/filter.ts +542 -542
  26. package/src/ddl2/activities/form.ts +153 -153
  27. package/src/ddl2/activities/groupby.ts +439 -439
  28. package/src/ddl2/activities/hipiepipeline.ts +114 -114
  29. package/src/ddl2/activities/limit.ts +49 -49
  30. package/src/ddl2/activities/logicalfile.ts +62 -62
  31. package/src/ddl2/activities/nullview.ts +12 -12
  32. package/src/ddl2/activities/project.ts +764 -764
  33. package/src/ddl2/activities/rest.ts +568 -568
  34. package/src/ddl2/activities/roxie.ts +490 -490
  35. package/src/ddl2/activities/sampledata.json +16264 -16264
  36. package/src/ddl2/activities/sort.ts +176 -176
  37. package/src/ddl2/activities/wuresult.ts +395 -395
  38. package/src/ddl2/dashboard.css +13 -13
  39. package/src/ddl2/dashboard.ts +330 -330
  40. package/src/ddl2/dashboardDockPanel.ts +123 -123
  41. package/src/ddl2/dashboardGrid.ts +202 -202
  42. package/src/ddl2/ddl.ts +410 -410
  43. package/src/ddl2/ddleditor.ts +60 -60
  44. package/src/ddl2/dsTable.ts +238 -238
  45. package/src/ddl2/dvTable.ts +31 -31
  46. package/src/ddl2/graphadapter.ts +297 -297
  47. package/src/ddl2/javascriptadapter.ts +354 -354
  48. package/src/ddl2/model/element.ts +398 -398
  49. package/src/ddl2/model/visualization.ts +351 -351
  50. package/src/ddl2/model/vizChartPanel.ts +149 -149
  51. package/src/ddl2/pipelinePanel.css +4 -4
  52. package/src/ddl2/pipelinePanel.ts +465 -465
  53. package/src/index.ts +26 -26
  54. package/types/__package__.d.ts +2 -2
  55. package/types-3.4/__package__.d.ts +2 -2
@@ -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";
@@ -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
+ }
@@ -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
+ }