@deephaven/console 0.43.0 → 0.44.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/Console.css +44 -0
- package/dist/Console.css.map +1 -0
- package/dist/Console.js +875 -0
- package/dist/Console.js.map +1 -0
- package/dist/ConsoleInput.css +42 -0
- package/dist/ConsoleInput.css.map +1 -0
- package/dist/ConsoleInput.js +442 -0
- package/dist/ConsoleInput.js.map +1 -0
- package/dist/ConsoleMenu.css +25 -0
- package/dist/ConsoleMenu.css.map +1 -0
- package/dist/ConsoleMenu.js +192 -0
- package/dist/ConsoleMenu.js.map +1 -0
- package/dist/ConsolePropTypes.js +10 -0
- package/dist/ConsolePropTypes.js.map +1 -0
- package/dist/ConsoleShortcuts.js +85 -0
- package/dist/ConsoleShortcuts.js.map +1 -0
- package/dist/ConsoleStatusBar.css +52 -0
- package/dist/ConsoleStatusBar.css.map +1 -0
- package/dist/ConsoleStatusBar.js +105 -0
- package/dist/ConsoleStatusBar.js.map +1 -0
- package/dist/HeapUsage.css +61 -0
- package/dist/HeapUsage.css.map +1 -0
- package/dist/HeapUsage.js +168 -0
- package/dist/HeapUsage.js.map +1 -0
- package/dist/StoragePropTypes.js +16 -0
- package/dist/StoragePropTypes.js.map +1 -0
- package/dist/command-history/CommandHistory.css +41 -0
- package/dist/command-history/CommandHistory.css.map +1 -0
- package/dist/command-history/CommandHistory.js +381 -0
- package/dist/command-history/CommandHistory.js.map +1 -0
- package/dist/command-history/CommandHistoryActions.css +10 -0
- package/dist/command-history/CommandHistoryActions.css.map +1 -0
- package/dist/command-history/CommandHistoryActions.js +47 -0
- package/dist/command-history/CommandHistoryActions.js.map +1 -0
- package/dist/command-history/CommandHistoryItem.css +61 -0
- package/dist/command-history/CommandHistoryItem.css.map +1 -0
- package/dist/command-history/CommandHistoryItem.js +50 -0
- package/dist/command-history/CommandHistoryItem.js.map +1 -0
- package/dist/command-history/CommandHistoryItemTooltip.css +37 -0
- package/dist/command-history/CommandHistoryItemTooltip.css.map +1 -0
- package/dist/command-history/CommandHistoryItemTooltip.js +159 -0
- package/dist/command-history/CommandHistoryItemTooltip.js.map +1 -0
- package/dist/command-history/CommandHistoryStorage.js +2 -0
- package/dist/command-history/CommandHistoryStorage.js.map +1 -0
- package/dist/command-history/CommandHistoryTypes.js +2 -0
- package/dist/command-history/CommandHistoryTypes.js.map +1 -0
- package/dist/command-history/CommandHistoryViewportUpdater.js +57 -0
- package/dist/command-history/CommandHistoryViewportUpdater.js.map +1 -0
- package/dist/command-history/index.js +7 -0
- package/dist/command-history/index.js.map +1 -0
- package/dist/common/Code.js +45 -0
- package/dist/common/Code.js.map +1 -0
- package/dist/common/ConsoleConstants.js +10 -0
- package/dist/common/ConsoleConstants.js.map +1 -0
- package/dist/common/ConsoleUtils.js +62 -0
- package/dist/common/ConsoleUtils.js.map +1 -0
- package/dist/common/ObjectIcon.js +33 -0
- package/dist/common/ObjectIcon.js.map +1 -0
- package/dist/common/index.js +5 -0
- package/dist/common/index.js.map +1 -0
- package/dist/console-history/ConsoleHistory.css +42 -0
- package/dist/console-history/ConsoleHistory.css.map +1 -0
- package/dist/console-history/ConsoleHistory.js +42 -0
- package/dist/console-history/ConsoleHistory.js.map +1 -0
- package/dist/console-history/ConsoleHistoryItem.css +87 -0
- package/dist/console-history/ConsoleHistoryItem.css.map +1 -0
- package/dist/console-history/ConsoleHistoryItem.js +139 -0
- package/dist/console-history/ConsoleHistoryItem.js.map +1 -0
- package/dist/console-history/ConsoleHistoryItemResult.js +22 -0
- package/dist/console-history/ConsoleHistoryItemResult.js.map +1 -0
- package/dist/console-history/ConsoleHistoryResultErrorMessage.js +142 -0
- package/dist/console-history/ConsoleHistoryResultErrorMessage.js.map +1 -0
- package/dist/console-history/ConsoleHistoryResultInProgress.css +27 -0
- package/dist/console-history/ConsoleHistoryResultInProgress.css.map +1 -0
- package/dist/console-history/ConsoleHistoryResultInProgress.js +66 -0
- package/dist/console-history/ConsoleHistoryResultInProgress.js.map +1 -0
- package/dist/console-history/ConsoleHistoryTypes.js +2 -0
- package/dist/console-history/ConsoleHistoryTypes.js.map +1 -0
- package/dist/console-history/index.js +6 -0
- package/dist/console-history/index.js.map +1 -0
- package/dist/csv/CsvFormats.js +134 -0
- package/dist/csv/CsvFormats.js.map +1 -0
- package/dist/csv/CsvInputBar.css +36 -0
- package/dist/csv/CsvInputBar.css.map +1 -0
- package/dist/csv/CsvInputBar.js +342 -0
- package/dist/csv/CsvInputBar.js.map +1 -0
- package/dist/csv/CsvOverlay.css +57 -0
- package/dist/csv/CsvOverlay.css.map +1 -0
- package/dist/csv/CsvOverlay.js +244 -0
- package/dist/csv/CsvOverlay.js.map +1 -0
- package/dist/csv/CsvParser.js +268 -0
- package/dist/csv/CsvParser.js.map +1 -0
- package/dist/csv/CsvTypeParser.js +235 -0
- package/dist/csv/CsvTypeParser.js.map +1 -0
- package/dist/csv/NewTableColumnTypes.js +16 -0
- package/dist/csv/NewTableColumnTypes.js.map +1 -0
- package/dist/declaration.d.js +2 -0
- package/dist/declaration.d.js.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/log/LogLevel.js +11 -0
- package/dist/log/LogLevel.js.map +1 -0
- package/dist/log/LogLevelMenuItem.css +38 -0
- package/dist/log/LogLevelMenuItem.css.map +1 -0
- package/dist/log/LogLevelMenuItem.js +32 -0
- package/dist/log/LogLevelMenuItem.js.map +1 -0
- package/dist/log/LogView.css +65 -0
- package/dist/log/LogView.css.map +1 -0
- package/dist/log/LogView.js +487 -0
- package/dist/log/LogView.js.map +1 -0
- package/dist/monaco/MonacoProviders.js +314 -0
- package/dist/monaco/MonacoProviders.js.map +1 -0
- package/dist/monaco/MonacoTheme.module.css +54 -0
- package/dist/monaco/MonacoTheme.module.css.map +1 -0
- package/dist/monaco/MonacoUtils.js +423 -0
- package/dist/monaco/MonacoUtils.js.map +1 -0
- package/dist/monaco/index.js +4 -0
- package/dist/monaco/index.js.map +1 -0
- package/dist/monaco/lang/Language.js +2 -0
- package/dist/monaco/lang/Language.js.map +1 -0
- package/dist/monaco/lang/db.js +152 -0
- package/dist/monaco/lang/db.js.map +1 -0
- package/dist/monaco/lang/groovy.js +229 -0
- package/dist/monaco/lang/groovy.js.map +1 -0
- package/dist/monaco/lang/log.js +64 -0
- package/dist/monaco/lang/log.js.map +1 -0
- package/dist/monaco/lang/python.js +234 -0
- package/dist/monaco/lang/python.js.map +1 -0
- package/dist/monaco/lang/scala.js +264 -0
- package/dist/monaco/lang/scala.js.map +1 -0
- package/dist/notebook/Editor.css +6 -0
- package/dist/notebook/Editor.css.map +1 -0
- package/dist/notebook/Editor.js +130 -0
- package/dist/notebook/Editor.js.map +1 -0
- package/dist/notebook/ScriptEditor.css +8 -0
- package/dist/notebook/ScriptEditor.css.map +1 -0
- package/dist/notebook/ScriptEditor.d.ts.map +1 -1
- package/dist/notebook/ScriptEditor.js +311 -0
- package/dist/notebook/ScriptEditor.js.map +1 -0
- package/dist/notebook/ScriptEditorUtils.d.ts +7 -0
- package/dist/notebook/ScriptEditorUtils.d.ts.map +1 -1
- package/dist/notebook/ScriptEditorUtils.js +52 -0
- package/dist/notebook/ScriptEditorUtils.js.map +1 -0
- package/package.json +12 -12
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
3
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
4
|
+
import React, { Component } from 'react';
|
|
5
|
+
import classNames from 'classnames';
|
|
6
|
+
import { Button, Checkbox } from '@deephaven/components';
|
|
7
|
+
import Log from '@deephaven/log';
|
|
8
|
+
import { DbNameValidator } from '@deephaven/utils';
|
|
9
|
+
import CsvOverlay from "./CsvOverlay.js";
|
|
10
|
+
import CsvParser from "./CsvParser.js";
|
|
11
|
+
import CsvFormats from "./CsvFormats.js";
|
|
12
|
+
import "./CsvInputBar.css";
|
|
13
|
+
var log = Log.module('CsvInputBar');
|
|
14
|
+
var TYPE_OPTIONS = Object.entries(CsvFormats.TYPES).map(_ref => {
|
|
15
|
+
var [key, value] = _ref;
|
|
16
|
+
return /*#__PURE__*/React.createElement("option", {
|
|
17
|
+
key: key,
|
|
18
|
+
value: key
|
|
19
|
+
}, value.name);
|
|
20
|
+
});
|
|
21
|
+
/**
|
|
22
|
+
* Input controls for CSV upload.
|
|
23
|
+
*/
|
|
24
|
+
class CsvInputBar extends Component {
|
|
25
|
+
constructor(props) {
|
|
26
|
+
super(props);
|
|
27
|
+
_defineProperty(this, "inputRef", void 0);
|
|
28
|
+
this.handleUpload = this.handleUpload.bind(this);
|
|
29
|
+
this.handleCancel = this.handleCancel.bind(this);
|
|
30
|
+
this.handleError = this.handleError.bind(this);
|
|
31
|
+
this.handleTableName = this.handleTableName.bind(this);
|
|
32
|
+
this.toggleFirstRowHeaders = this.toggleFirstRowHeaders.bind(this);
|
|
33
|
+
this.handleProgress = this.handleProgress.bind(this);
|
|
34
|
+
this.handleCancelInProgress = this.handleCancelInProgress.bind(this);
|
|
35
|
+
this.handleQueryTypeChange = this.handleQueryTypeChange.bind(this);
|
|
36
|
+
this.inputRef = /*#__PURE__*/React.createRef();
|
|
37
|
+
this.state = {
|
|
38
|
+
tableName: '',
|
|
39
|
+
tableNameSet: false,
|
|
40
|
+
isFirstRowHeaders: true,
|
|
41
|
+
showProgress: false,
|
|
42
|
+
progressValue: 0,
|
|
43
|
+
type: CsvFormats.DEFAULT_TYPE,
|
|
44
|
+
parser: null
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// React documentation says it is fine to update state inside an if statment
|
|
49
|
+
/* eslint-disable react/no-did-update-set-state */
|
|
50
|
+
componentDidUpdate(prevProps) {
|
|
51
|
+
var {
|
|
52
|
+
file,
|
|
53
|
+
paste
|
|
54
|
+
} = this.props;
|
|
55
|
+
var {
|
|
56
|
+
tableName,
|
|
57
|
+
tableNameSet
|
|
58
|
+
} = this.state;
|
|
59
|
+
// Set the table name from a file
|
|
60
|
+
if (!tableNameSet && file != null && !tableName) {
|
|
61
|
+
var _this$inputRef$curren;
|
|
62
|
+
var dotIndex = file.name.lastIndexOf('.');
|
|
63
|
+
var fileTableName = DbNameValidator.legalizeTableName(file.name.substring(0, dotIndex));
|
|
64
|
+
this.setState({
|
|
65
|
+
tableName: fileTableName,
|
|
66
|
+
tableNameSet: true
|
|
67
|
+
});
|
|
68
|
+
(_this$inputRef$curren = this.inputRef.current) === null || _this$inputRef$curren === void 0 ? void 0 : _this$inputRef$curren.focus();
|
|
69
|
+
} else if (file == null && prevProps.file != null || paste == null && prevProps.paste != null) {
|
|
70
|
+
// The file or paste was unstaged
|
|
71
|
+
this.setState({
|
|
72
|
+
tableName: '',
|
|
73
|
+
tableNameSet: false
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Focus the name input field on paste
|
|
78
|
+
if (paste != null && paste !== '' && !tableName && this.inputRef.current) {
|
|
79
|
+
this.inputRef.current.focus();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Determine parser type by file extension
|
|
83
|
+
if (file != null && file !== prevProps.file) {
|
|
84
|
+
this.setState({
|
|
85
|
+
type: CsvFormats.fromExtension(file.name)
|
|
86
|
+
});
|
|
87
|
+
} else if (paste != null && paste !== '' && (prevProps.paste === undefined || prevProps.paste === '')) {
|
|
88
|
+
this.setState({
|
|
89
|
+
type: CsvFormats.AUTO
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
componentWillUnmount() {
|
|
94
|
+
var {
|
|
95
|
+
parser
|
|
96
|
+
} = this.state;
|
|
97
|
+
if (parser) {
|
|
98
|
+
parser.cancel();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
handleCancel() {
|
|
102
|
+
var {
|
|
103
|
+
onClose
|
|
104
|
+
} = this.props;
|
|
105
|
+
onClose();
|
|
106
|
+
}
|
|
107
|
+
handleError(e) {
|
|
108
|
+
var {
|
|
109
|
+
onClose,
|
|
110
|
+
onError
|
|
111
|
+
} = this.props;
|
|
112
|
+
log.error(e);
|
|
113
|
+
onError(e);
|
|
114
|
+
onClose();
|
|
115
|
+
}
|
|
116
|
+
handleTableName(event) {
|
|
117
|
+
this.setState({
|
|
118
|
+
tableName: event.target.value,
|
|
119
|
+
tableNameSet: true
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
toggleFirstRowHeaders() {
|
|
123
|
+
var {
|
|
124
|
+
isFirstRowHeaders
|
|
125
|
+
} = this.state;
|
|
126
|
+
this.setState({
|
|
127
|
+
isFirstRowHeaders: !isFirstRowHeaders
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
handleUpload(event) {
|
|
131
|
+
event.stopPropagation();
|
|
132
|
+
event.preventDefault();
|
|
133
|
+
var {
|
|
134
|
+
file,
|
|
135
|
+
paste
|
|
136
|
+
} = this.props;
|
|
137
|
+
if (file != null) {
|
|
138
|
+
if (file.name.endsWith('.zip')) {
|
|
139
|
+
this.handleZipFile(file);
|
|
140
|
+
} else {
|
|
141
|
+
this.handleFile(file);
|
|
142
|
+
}
|
|
143
|
+
} else if (paste !== undefined && paste !== '') {
|
|
144
|
+
this.handleFile(new Blob([paste], {
|
|
145
|
+
type: 'text/plain'
|
|
146
|
+
}));
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
handleFile(file) {
|
|
150
|
+
var isZip = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
151
|
+
log.info("Starting CSV parser for ".concat(file instanceof File ? file.name : 'pasted values', " ").concat(isZip ? '' : file.size, " bytes"));
|
|
152
|
+
var {
|
|
153
|
+
session,
|
|
154
|
+
timeZone,
|
|
155
|
+
onInProgress
|
|
156
|
+
} = this.props;
|
|
157
|
+
var {
|
|
158
|
+
tableName,
|
|
159
|
+
isFirstRowHeaders,
|
|
160
|
+
type
|
|
161
|
+
} = this.state;
|
|
162
|
+
var handleParseDone = tables => {
|
|
163
|
+
// Do not bother merging just one table
|
|
164
|
+
if (tables.length === 1) {
|
|
165
|
+
session.bindTableToVariable(tables[0], tableName).then(() => this.openTable()).catch(e => this.handleError(e));
|
|
166
|
+
} else {
|
|
167
|
+
session.mergeTables(tables).then(table => {
|
|
168
|
+
session.bindTableToVariable(table, tableName).then(() => this.openTable()).catch(e => this.handleError(e));
|
|
169
|
+
tables.forEach(t => t.close());
|
|
170
|
+
}).catch(e => this.handleError(e));
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
var parser = new CsvParser({
|
|
174
|
+
onFileCompleted: handleParseDone,
|
|
175
|
+
session,
|
|
176
|
+
file,
|
|
177
|
+
type: CsvFormats.TYPES[type],
|
|
178
|
+
readHeaders: isFirstRowHeaders,
|
|
179
|
+
onProgress: this.handleProgress,
|
|
180
|
+
onError: this.handleError,
|
|
181
|
+
timeZone,
|
|
182
|
+
isZip
|
|
183
|
+
});
|
|
184
|
+
parser.parse();
|
|
185
|
+
this.setState({
|
|
186
|
+
showProgress: true,
|
|
187
|
+
parser
|
|
188
|
+
});
|
|
189
|
+
// Note that calling onClose will set in progress to false
|
|
190
|
+
onInProgress(true);
|
|
191
|
+
}
|
|
192
|
+
handleZipFile(zipFile) {
|
|
193
|
+
var {
|
|
194
|
+
onUpdate,
|
|
195
|
+
unzip
|
|
196
|
+
} = this.props;
|
|
197
|
+
if (unzip == null) {
|
|
198
|
+
this.handleError(new Error('No support for zip files available.'));
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
unzip(zipFile).then(files => {
|
|
202
|
+
var csvFound = false;
|
|
203
|
+
// Find the first Csv file in the zip and use that
|
|
204
|
+
for (var i = 0; i < files.length; i += 1) {
|
|
205
|
+
var f = files[i];
|
|
206
|
+
if (CsvOverlay.isValidExtension(f.name)) {
|
|
207
|
+
onUpdate("Loading ".concat(f.name, " as csv from ").concat(zipFile.name));
|
|
208
|
+
csvFound = true;
|
|
209
|
+
this.handleFile(f, true);
|
|
210
|
+
break;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
if (!csvFound) {
|
|
214
|
+
throw new Error("No csv file found in ".concat(zipFile.name));
|
|
215
|
+
}
|
|
216
|
+
}).catch(e => this.handleError(e));
|
|
217
|
+
}
|
|
218
|
+
handleProgress(progressValue) {
|
|
219
|
+
var {
|
|
220
|
+
showProgress
|
|
221
|
+
} = this.state;
|
|
222
|
+
if (showProgress) {
|
|
223
|
+
this.setState({
|
|
224
|
+
progressValue
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
// Indicates to the caller that the upload has been cancelled
|
|
228
|
+
return !showProgress;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// Cancels an in progress upload
|
|
232
|
+
handleCancelInProgress() {
|
|
233
|
+
var {
|
|
234
|
+
onInProgress
|
|
235
|
+
} = this.props;
|
|
236
|
+
var {
|
|
237
|
+
parser
|
|
238
|
+
} = this.state;
|
|
239
|
+
if (parser) {
|
|
240
|
+
parser.cancel();
|
|
241
|
+
}
|
|
242
|
+
this.setState({
|
|
243
|
+
showProgress: false,
|
|
244
|
+
progressValue: 0
|
|
245
|
+
});
|
|
246
|
+
onInProgress(false);
|
|
247
|
+
}
|
|
248
|
+
openTable() {
|
|
249
|
+
var {
|
|
250
|
+
onOpenTable,
|
|
251
|
+
onClose
|
|
252
|
+
} = this.props;
|
|
253
|
+
var {
|
|
254
|
+
tableName
|
|
255
|
+
} = this.state;
|
|
256
|
+
onOpenTable(tableName);
|
|
257
|
+
onClose();
|
|
258
|
+
}
|
|
259
|
+
handleQueryTypeChange(event) {
|
|
260
|
+
this.setState({
|
|
261
|
+
type: event.target.value
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
render() {
|
|
265
|
+
var {
|
|
266
|
+
file,
|
|
267
|
+
paste
|
|
268
|
+
} = this.props;
|
|
269
|
+
var {
|
|
270
|
+
tableName,
|
|
271
|
+
isFirstRowHeaders,
|
|
272
|
+
showProgress,
|
|
273
|
+
progressValue,
|
|
274
|
+
type
|
|
275
|
+
} = this.state;
|
|
276
|
+
// A blank table name is invalid for pasted values
|
|
277
|
+
var isNameInvalid = Boolean(paste) && !tableName;
|
|
278
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
279
|
+
className: "csv-input-bar"
|
|
280
|
+
}, !showProgress && /*#__PURE__*/React.createElement("form", {
|
|
281
|
+
onSubmit: this.handleUpload,
|
|
282
|
+
className: "csv-input-bar-container form-inline"
|
|
283
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
284
|
+
className: "form-group"
|
|
285
|
+
}, /*#__PURE__*/React.createElement("label", {
|
|
286
|
+
htmlFor: "tableNameInput"
|
|
287
|
+
}, "Table name"), /*#__PURE__*/React.createElement("input", {
|
|
288
|
+
ref: this.inputRef,
|
|
289
|
+
id: "tableNameInput",
|
|
290
|
+
type: "text",
|
|
291
|
+
className: classNames('form-control', {
|
|
292
|
+
'is-invalid': isNameInvalid
|
|
293
|
+
}),
|
|
294
|
+
value: tableName,
|
|
295
|
+
onChange: this.handleTableName
|
|
296
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
297
|
+
className: "form-group"
|
|
298
|
+
}, /*#__PURE__*/React.createElement("label", {
|
|
299
|
+
htmlFor: "formatSelect"
|
|
300
|
+
}, "File format"), /*#__PURE__*/React.createElement("select", {
|
|
301
|
+
id: "formatSelect",
|
|
302
|
+
className: "custom-select",
|
|
303
|
+
value: type,
|
|
304
|
+
onChange: this.handleQueryTypeChange
|
|
305
|
+
}, TYPE_OPTIONS)), /*#__PURE__*/React.createElement(Checkbox, {
|
|
306
|
+
className: "firstRowHeaders",
|
|
307
|
+
checked: isFirstRowHeaders,
|
|
308
|
+
onChange: this.toggleFirstRowHeaders
|
|
309
|
+
}, "First row is column headers"), /*#__PURE__*/React.createElement("div", {
|
|
310
|
+
className: "csv-input-buttons form-group"
|
|
311
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
312
|
+
kind: "secondary",
|
|
313
|
+
onClick: this.handleCancel
|
|
314
|
+
}, "Cancel"), /*#__PURE__*/React.createElement(Button, {
|
|
315
|
+
kind: "primary",
|
|
316
|
+
type: "submit",
|
|
317
|
+
disabled: !(file !== null || paste !== undefined && paste !== '') || !tableName
|
|
318
|
+
}, "Upload"))), showProgress && /*#__PURE__*/React.createElement("div", {
|
|
319
|
+
className: "csv-progress-container"
|
|
320
|
+
}, /*#__PURE__*/React.createElement("label", null, "Uploading Table"), /*#__PURE__*/React.createElement("div", {
|
|
321
|
+
className: "progress"
|
|
322
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
323
|
+
className: "progress-bar bg-primary",
|
|
324
|
+
style: {
|
|
325
|
+
width: "".concat(progressValue, "%")
|
|
326
|
+
},
|
|
327
|
+
"aria-valuenow": progressValue,
|
|
328
|
+
"aria-valuemin": 0,
|
|
329
|
+
"aria-valuemax": 100
|
|
330
|
+
})), /*#__PURE__*/React.createElement("label", null, progressValue, "%"), /*#__PURE__*/React.createElement(Button, {
|
|
331
|
+
kind: "primary",
|
|
332
|
+
onClick: this.handleCancelInProgress
|
|
333
|
+
}, "Cancel")));
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
_defineProperty(CsvInputBar, "defaultProps", {
|
|
337
|
+
file: null,
|
|
338
|
+
paste: null,
|
|
339
|
+
unzip: null
|
|
340
|
+
});
|
|
341
|
+
export default CsvInputBar;
|
|
342
|
+
//# sourceMappingURL=CsvInputBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CsvInputBar.js","names":["React","Component","classNames","Button","Checkbox","Log","DbNameValidator","CsvOverlay","CsvParser","CsvFormats","log","module","TYPE_OPTIONS","Object","entries","TYPES","map","key","value","name","CsvInputBar","constructor","props","handleUpload","bind","handleCancel","handleError","handleTableName","toggleFirstRowHeaders","handleProgress","handleCancelInProgress","handleQueryTypeChange","inputRef","createRef","state","tableName","tableNameSet","isFirstRowHeaders","showProgress","progressValue","type","DEFAULT_TYPE","parser","componentDidUpdate","prevProps","file","paste","dotIndex","lastIndexOf","fileTableName","legalizeTableName","substring","setState","current","focus","fromExtension","undefined","AUTO","componentWillUnmount","cancel","onClose","e","onError","error","event","target","stopPropagation","preventDefault","endsWith","handleZipFile","handleFile","Blob","isZip","info","File","size","session","timeZone","onInProgress","handleParseDone","tables","length","bindTableToVariable","then","openTable","catch","mergeTables","table","forEach","t","close","onFileCompleted","readHeaders","onProgress","parse","zipFile","onUpdate","unzip","Error","files","csvFound","i","f","isValidExtension","onOpenTable","render","isNameInvalid","Boolean","width"],"sources":["../../src/csv/CsvInputBar.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n Component,\n FormEvent,\n ReactElement,\n RefObject,\n} from 'react';\nimport classNames from 'classnames';\nimport type { JSZipObject } from 'jszip';\nimport { Button, Checkbox } from '@deephaven/components';\nimport type { IdeSession, Table } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { DbNameValidator } from '@deephaven/utils';\nimport CsvOverlay from './CsvOverlay';\nimport CsvParser from './CsvParser';\nimport CsvFormats from './CsvFormats';\nimport './CsvInputBar.scss';\n\nconst log = Log.module('CsvInputBar');\n\nconst TYPE_OPTIONS = Object.entries(CsvFormats.TYPES).map(([key, value]) => (\n <option key={key} value={key}>\n {value.name}\n </option>\n));\n\ninterface CsvInputBarProps {\n session: IdeSession;\n onOpenTable: (name: string) => void;\n onClose: () => void;\n onUpdate: (update: string) => void;\n onError: (e: unknown) => void;\n file: File;\n paste?: string;\n onInProgress: (boolean: boolean) => void;\n timeZone: string;\n unzip?: (zipFile: File) => Promise<JSZipObject[]>;\n}\n\ninterface CsvInputBarState {\n tableName: string;\n tableNameSet: boolean;\n isFirstRowHeaders: boolean;\n showProgress: boolean;\n progressValue: number;\n type: keyof typeof CsvFormats.TYPES;\n parser: CsvParser | null;\n}\n/**\n * Input controls for CSV upload.\n */\nclass CsvInputBar extends Component<CsvInputBarProps, CsvInputBarState> {\n static defaultProps = {\n file: null,\n paste: null,\n unzip: null,\n };\n\n constructor(props: CsvInputBarProps) {\n super(props);\n\n this.handleUpload = this.handleUpload.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleTableName = this.handleTableName.bind(this);\n this.toggleFirstRowHeaders = this.toggleFirstRowHeaders.bind(this);\n this.handleProgress = this.handleProgress.bind(this);\n this.handleCancelInProgress = this.handleCancelInProgress.bind(this);\n this.handleQueryTypeChange = this.handleQueryTypeChange.bind(this);\n\n this.inputRef = React.createRef();\n\n this.state = {\n tableName: '',\n tableNameSet: false,\n isFirstRowHeaders: true,\n showProgress: false,\n progressValue: 0,\n type: CsvFormats.DEFAULT_TYPE,\n parser: null,\n };\n }\n\n // React documentation says it is fine to update state inside an if statment\n /* eslint-disable react/no-did-update-set-state */\n componentDidUpdate(prevProps: CsvInputBarProps): void {\n const { file, paste } = this.props;\n const { tableName, tableNameSet } = this.state;\n // Set the table name from a file\n if (!tableNameSet && file != null && !tableName) {\n const dotIndex = file.name.lastIndexOf('.');\n const fileTableName = DbNameValidator.legalizeTableName(\n file.name.substring(0, dotIndex)\n );\n this.setState({\n tableName: fileTableName,\n tableNameSet: true,\n });\n this.inputRef.current?.focus();\n } else if (\n (file == null && prevProps.file != null) ||\n (paste == null && prevProps.paste != null)\n ) {\n // The file or paste was unstaged\n this.setState({\n tableName: '',\n tableNameSet: false,\n });\n }\n\n // Focus the name input field on paste\n if (paste != null && paste !== '' && !tableName && this.inputRef.current) {\n this.inputRef.current.focus();\n }\n\n // Determine parser type by file extension\n if (file != null && file !== prevProps.file) {\n this.setState({\n type: CsvFormats.fromExtension(file.name),\n });\n } else if (\n paste != null &&\n paste !== '' &&\n (prevProps.paste === undefined || prevProps.paste === '')\n ) {\n this.setState({\n type: CsvFormats.AUTO,\n });\n }\n }\n\n componentWillUnmount(): void {\n const { parser } = this.state;\n if (parser) {\n parser.cancel();\n }\n }\n\n inputRef: RefObject<HTMLInputElement>;\n\n handleCancel(): void {\n const { onClose } = this.props;\n onClose();\n }\n\n handleError(e: unknown): void {\n const { onClose, onError } = this.props;\n log.error(e);\n onError(e);\n onClose();\n }\n\n handleTableName(event: ChangeEvent<HTMLInputElement>): void {\n this.setState({ tableName: event.target.value, tableNameSet: true });\n }\n\n toggleFirstRowHeaders(): void {\n const { isFirstRowHeaders } = this.state;\n this.setState({ isFirstRowHeaders: !isFirstRowHeaders });\n }\n\n handleUpload(event: FormEvent<HTMLFormElement>): void {\n event.stopPropagation();\n event.preventDefault();\n const { file, paste } = this.props;\n if (file != null) {\n if (file.name.endsWith('.zip')) {\n this.handleZipFile(file);\n } else {\n this.handleFile(file);\n }\n } else if (paste !== undefined && paste !== '') {\n this.handleFile(\n new Blob([paste], {\n type: 'text/plain',\n })\n );\n }\n }\n\n handleFile(file: Blob | JSZipObject, isZip = false): void {\n log.info(\n `Starting CSV parser for ${\n file instanceof File ? file.name : 'pasted values'\n } ${isZip ? '' : (file as Blob).size} bytes`\n );\n const { session, timeZone, onInProgress } = this.props;\n const { tableName, isFirstRowHeaders, type } = this.state;\n const handleParseDone = (tables: Table[]) => {\n // Do not bother merging just one table\n if (tables.length === 1) {\n session\n .bindTableToVariable(tables[0], tableName)\n .then(() => this.openTable())\n .catch(e => this.handleError(e));\n } else {\n session\n .mergeTables(tables)\n .then(table => {\n session\n .bindTableToVariable(table, tableName)\n .then(() => this.openTable())\n .catch(e => this.handleError(e));\n tables.forEach(t => t.close());\n })\n .catch(e => this.handleError(e));\n }\n };\n const parser = new CsvParser({\n onFileCompleted: handleParseDone,\n session,\n file,\n type: CsvFormats.TYPES[type],\n readHeaders: isFirstRowHeaders,\n onProgress: this.handleProgress,\n onError: this.handleError,\n timeZone,\n isZip,\n });\n parser.parse();\n this.setState({\n showProgress: true,\n parser,\n });\n // Note that calling onClose will set in progress to false\n onInProgress(true);\n }\n\n handleZipFile(zipFile: File): void {\n const { onUpdate, unzip } = this.props;\n if (unzip == null) {\n this.handleError(new Error('No support for zip files available.'));\n return;\n }\n\n unzip(zipFile)\n .then(files => {\n let csvFound = false;\n // Find the first Csv file in the zip and use that\n for (let i = 0; i < files.length; i += 1) {\n const f = files[i];\n if (CsvOverlay.isValidExtension(f.name)) {\n onUpdate(`Loading ${f.name} as csv from ${zipFile.name}`);\n csvFound = true;\n this.handleFile(f, true);\n break;\n }\n }\n if (!csvFound) {\n throw new Error(`No csv file found in ${zipFile.name}`);\n }\n })\n .catch(e => this.handleError(e));\n }\n\n handleProgress(progressValue: number): boolean {\n const { showProgress } = this.state;\n if (showProgress) {\n this.setState({\n progressValue,\n });\n }\n // Indicates to the caller that the upload has been cancelled\n return !showProgress;\n }\n\n // Cancels an in progress upload\n handleCancelInProgress(): void {\n const { onInProgress } = this.props;\n const { parser } = this.state;\n if (parser) {\n parser.cancel();\n }\n this.setState({\n showProgress: false,\n progressValue: 0,\n });\n onInProgress(false);\n }\n\n openTable(): void {\n const { onOpenTable, onClose } = this.props;\n const { tableName } = this.state;\n onOpenTable(tableName);\n onClose();\n }\n\n handleQueryTypeChange(event: ChangeEvent<HTMLSelectElement>): void {\n this.setState({\n type: event.target.value as keyof typeof CsvFormats.TYPES,\n });\n }\n\n render(): ReactElement {\n const { file, paste } = this.props;\n const {\n tableName,\n isFirstRowHeaders,\n showProgress,\n progressValue,\n type,\n } = this.state;\n // A blank table name is invalid for pasted values\n const isNameInvalid = Boolean(paste) && !tableName;\n return (\n <div className=\"csv-input-bar\">\n {!showProgress && (\n <form\n onSubmit={this.handleUpload}\n className=\"csv-input-bar-container form-inline\"\n >\n <div className=\"form-group\">\n <label htmlFor=\"tableNameInput\">Table name</label>\n <input\n ref={this.inputRef}\n id=\"tableNameInput\"\n type=\"text\"\n className={classNames('form-control', {\n 'is-invalid': isNameInvalid,\n })}\n value={tableName}\n onChange={this.handleTableName}\n />\n </div>\n <div className=\"form-group\">\n <label htmlFor=\"formatSelect\">File format</label>\n <select\n id=\"formatSelect\"\n className=\"custom-select\"\n value={type}\n onChange={this.handleQueryTypeChange}\n >\n {TYPE_OPTIONS}\n </select>\n </div>\n <Checkbox\n className=\"firstRowHeaders\"\n checked={isFirstRowHeaders}\n onChange={this.toggleFirstRowHeaders}\n >\n First row is column headers\n </Checkbox>\n <div className=\"csv-input-buttons form-group\">\n <Button kind=\"secondary\" onClick={this.handleCancel}>\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n type=\"submit\"\n disabled={\n !(file !== null || (paste !== undefined && paste !== '')) ||\n !tableName\n }\n >\n Upload\n </Button>\n </div>\n </form>\n )}\n {showProgress && (\n <div className=\"csv-progress-container\">\n <label>Uploading Table</label>\n <div className=\"progress\">\n <div\n className=\"progress-bar bg-primary\"\n style={{ width: `${progressValue}%` }}\n aria-valuenow={progressValue}\n aria-valuemin={0}\n aria-valuemax={100}\n />\n </div>\n <label>{progressValue}%</label>\n <Button kind=\"primary\" onClick={this.handleCancelInProgress}>\n Cancel\n </Button>\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default CsvInputBar;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/* stylelint-disable scss/at-import-no-partial-leading-underscore */
|
|
2
|
+
.csv-overlay {
|
|
3
|
+
margin: 0.5rem;
|
|
4
|
+
background: rgba(45, 42, 46, 0.7);
|
|
5
|
+
text-align: center;
|
|
6
|
+
display: flex;
|
|
7
|
+
flex-direction: column;
|
|
8
|
+
justify-content: center;
|
|
9
|
+
white-space: pre-line;
|
|
10
|
+
outline: none;
|
|
11
|
+
background-image: linear-gradient(to right, #1a171a 50%, #f0f0ee 50%), linear-gradient(to right, #1a171a 50%, #f0f0ee 50%), linear-gradient(to bottom, #1a171a 50%, #f0f0ee 50%), linear-gradient(to bottom, #1a171a 50%, #f0f0ee 50%);
|
|
12
|
+
background-size: 8px 1px, 8px 1px, 1px 8px, 1px 8px;
|
|
13
|
+
background-position: 0 top, 0 bottom, left 0, right 0;
|
|
14
|
+
background-repeat: repeat-x, repeat-x, repeat-y, repeat-y;
|
|
15
|
+
animation: march 0.5s;
|
|
16
|
+
animation-timing-function: linear;
|
|
17
|
+
animation-iteration-count: infinite;
|
|
18
|
+
}
|
|
19
|
+
.csv-overlay .message-content {
|
|
20
|
+
font-size: 1.2rem;
|
|
21
|
+
}
|
|
22
|
+
.csv-overlay .message-content .message-icon {
|
|
23
|
+
font-size: 80px;
|
|
24
|
+
}
|
|
25
|
+
.csv-overlay .message-content .message-icon .svg-inline--fa {
|
|
26
|
+
font-size: inherit;
|
|
27
|
+
}
|
|
28
|
+
.csv-overlay .message-content .message-small {
|
|
29
|
+
font-size: 0.8rem;
|
|
30
|
+
}
|
|
31
|
+
.csv-overlay .message-content .btn {
|
|
32
|
+
align-self: center;
|
|
33
|
+
max-width: 10rem;
|
|
34
|
+
}
|
|
35
|
+
.csv-overlay .selected-content {
|
|
36
|
+
display: flex;
|
|
37
|
+
flex-direction: row;
|
|
38
|
+
align-self: center;
|
|
39
|
+
}
|
|
40
|
+
.csv-overlay .selected-content .selected-icon {
|
|
41
|
+
font-size: 64px;
|
|
42
|
+
}
|
|
43
|
+
.csv-overlay .selected-content .selected-icon .svg-inline--fa {
|
|
44
|
+
font-size: inherit;
|
|
45
|
+
}
|
|
46
|
+
.csv-overlay .selected-content .selected-text {
|
|
47
|
+
display: flex;
|
|
48
|
+
flex-direction: column;
|
|
49
|
+
align-items: flex-start;
|
|
50
|
+
margin: 15px;
|
|
51
|
+
font-size: 1rem;
|
|
52
|
+
}
|
|
53
|
+
.csv-overlay .selected-content .selected-name {
|
|
54
|
+
font-size: 1.2rem;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/*# sourceMappingURL=CsvOverlay.css.map */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../../../../node_modules/@deephaven/components/scss/custom.scss","../../src/csv/CsvOverlay.scss","../../../../node_modules/@deephaven/components/scss/new_variables.scss"],"names":[],"mappings":"AAAA;ACEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ECQA;EAIA;EAEA;EACA;EACA;EACA;EACA;;ADhBA;EACE;;AACA;EACE;;AACA;EACE;;AAGJ;EACE;;AAEF;EACE;EACA;;AAIJ;EACE;EACA;EACA;;AACA;EACE;;AACA;EACE;;AAGJ;EACE;EACA;EACA;EACA;EACA;;AAEF;EACE","file":"CsvOverlay.css","sourcesContent":["/* stylelint-disable scss/at-import-no-partial-leading-underscore */\n// Consumers should be able to resolve bootstrap/ to node_modules/bootstrap\n\n//Make bootstrap functions available for use in overrides\n@import 'bootstrap/scss/_functions.scss';\n@import './bootstrap_overrides.scss';\n\n//_variable imports come after bootstrap default overrides,\n// makes all other variables and mixins from bootstrap available\n/// with just importing customer.scss\n@import 'bootstrap/scss/_variables.scss';\n@import 'bootstrap/scss/_mixins.scss';\n\n//New variables come after imports\n@import './new_variables.scss';\n","@import '@deephaven/components/scss/custom.scss';\n\n.csv-overlay {\n margin: $spacer-2;\n background: rgba($content-bg, 0.7);\n text-align: center;\n display: flex;\n flex-direction: column;\n justify-content: center;\n white-space: pre-line;\n outline: none;\n\n .message-content {\n font-size: 1.2rem;\n .message-icon {\n font-size: 80px;\n .svg-inline--fa {\n font-size: inherit;\n }\n }\n .message-small {\n font-size: 0.8rem;\n }\n .btn {\n align-self: center;\n max-width: 10rem;\n }\n }\n\n .selected-content {\n display: flex;\n flex-direction: row;\n align-self: center;\n .selected-icon {\n font-size: 64px;\n .svg-inline--fa {\n font-size: inherit;\n }\n }\n .selected-text {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n margin: 15px;\n font-size: 1rem;\n }\n .selected-name {\n font-size: 1.2rem;\n }\n }\n\n @include ants-base($foreground, $background);\n}\n","//Set of spacer variables from the spacer map\n$spacer-0: map-get($spacers, 0); //0\n$spacer-1: map-get($spacers, 1);\n$spacer-2: map-get($spacers, 2);\n$spacer-3: map-get($spacers, 3);\n$spacer-4: map-get($spacers, 4);\n$spacer-5: map-get($spacers, 5);\n\n//Marching Ants for golden layout dropzone and drag and drop\n//top bottom, left right.\n//create 4 background images that are 50% color 1, 50% color 2 using graidents, two veritical, two horizontal\n//size them to ant-size and thickness\n//position those images along the egdes and make top/bottom repeat-x and left/right repeat-y\n//then offest each of those background positions by ant-size in animation to make them march.\n$ant-size: 8px;\n$ant-thickness: 1px;\n\n@mixin ants-base($color-1: black, $color-2: white) {\n background-image: linear-gradient(to right, $color-2 50%, $color-1 50%),\n linear-gradient(to right, $color-2 50%, $color-1 50%),\n linear-gradient(to bottom, $color-2 50%, $color-1 50%),\n linear-gradient(to bottom, $color-2 50%, $color-1 50%);\n background-size: $ant-size $ant-thickness, $ant-size $ant-thickness,\n $ant-thickness $ant-size, $ant-thickness $ant-size;\n background-position: 0 top, 0 bottom, left 0, right 0;\n background-repeat: repeat-x, repeat-x, repeat-y, repeat-y;\n animation: march 0.5s;\n animation-timing-function: linear;\n animation-iteration-count: infinite;\n}\n\n@mixin drag-stack($pseudo-element) {\n &::#{$pseudo-element} {\n content: ' ';\n background: $primary;\n box-shadow: $box-shadow;\n border-radius: $border-radius;\n position: absolute;\n height: 100%;\n width: 100%;\n @content;\n }\n}\n\n$focus-bg-transparency: 0.12;\n$hover-bg-transparency: 0.14;\n$active-bg-transparency: 0.28;\n$exception-transparency: 0.13;\n"]}
|