@deephaven/console 1.22.1 → 1.22.2-alpha-pivot-builder.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.js +85 -141
- package/dist/Console.js.map +1 -1
- package/dist/ConsoleInput.js +23 -41
- package/dist/ConsoleInput.js.map +1 -1
- package/dist/ConsoleObjectsMenu.js +13 -8
- package/dist/ConsoleObjectsMenu.js.map +1 -1
- package/dist/ConsoleStatusBar.js +15 -10
- package/dist/ConsoleStatusBar.js.map +1 -1
- package/dist/HeapUsage.js +33 -26
- package/dist/HeapUsage.js.map +1 -1
- package/dist/command-history/CommandHistory.js +45 -76
- package/dist/command-history/CommandHistory.js.map +1 -1
- package/dist/command-history/CommandHistoryActions.js +3 -4
- package/dist/command-history/CommandHistoryActions.js.map +1 -1
- package/dist/command-history/CommandHistoryItem.js +5 -6
- package/dist/command-history/CommandHistoryItem.js.map +1 -1
- package/dist/command-history/CommandHistoryItemTooltip.js +20 -33
- package/dist/command-history/CommandHistoryItemTooltip.js.map +1 -1
- package/dist/command-history/CommandHistoryViewportUpdater.js +10 -9
- package/dist/command-history/CommandHistoryViewportUpdater.js.map +1 -1
- package/dist/common/Code.js +14 -8
- package/dist/common/Code.js.map +1 -1
- package/dist/common/ObjectIcon.js +1 -3
- package/dist/common/ObjectIcon.js.map +1 -1
- package/dist/console-history/ConsoleHistory.js +8 -9
- package/dist/console-history/ConsoleHistory.js.map +1 -1
- package/dist/console-history/ConsoleHistoryItem.js +17 -32
- package/dist/console-history/ConsoleHistoryItem.js.map +1 -1
- package/dist/console-history/ConsoleHistoryItemActions.js +3 -5
- package/dist/console-history/ConsoleHistoryItemActions.js.map +1 -1
- package/dist/console-history/ConsoleHistoryItemResult.js +1 -3
- package/dist/console-history/ConsoleHistoryItemResult.js.map +1 -1
- package/dist/console-history/ConsoleHistoryItemTooltip.js +4 -8
- package/dist/console-history/ConsoleHistoryItemTooltip.js.map +1 -1
- package/dist/console-history/ConsoleHistoryResultErrorMessage.js +4 -7
- package/dist/console-history/ConsoleHistoryResultErrorMessage.js.map +1 -1
- package/dist/console-history/ConsoleHistoryResultInProgress.js +4 -7
- package/dist/console-history/ConsoleHistoryResultInProgress.js.map +1 -1
- package/dist/csv/CsvInputBar.js +51 -67
- package/dist/csv/CsvInputBar.js.map +1 -1
- package/dist/csv/CsvOverlay.js +19 -31
- package/dist/csv/CsvOverlay.js.map +1 -1
- package/dist/csv/CsvParser.js +25 -36
- package/dist/csv/CsvParser.js.map +1 -1
- package/dist/csv/CsvTypeParser.js +4 -10
- package/dist/csv/CsvTypeParser.js.map +1 -1
- package/dist/log/LogLevelMenuItem.js +6 -8
- package/dist/log/LogLevelMenuItem.js.map +1 -1
- package/dist/log/LogView.js +9 -27
- package/dist/log/LogView.js.map +1 -1
- package/dist/monaco/MonacoProviders.js +27 -41
- package/dist/monaco/MonacoProviders.js.map +1 -1
- package/dist/monaco/MonacoThemeProvider.js +3 -6
- package/dist/monaco/MonacoThemeProvider.js.map +1 -1
- package/dist/monaco/MonacoUtils.js +17 -36
- package/dist/monaco/MonacoUtils.js.map +1 -1
- package/dist/monaco/RuffSettingsModal.js +29 -17
- package/dist/monaco/RuffSettingsModal.js.map +1 -1
- package/dist/notebook/Editor.js +4 -12
- package/dist/notebook/Editor.js.map +1 -1
- package/dist/notebook/ScriptEditor.js +34 -51
- package/dist/notebook/ScriptEditor.js.map +1 -1
- package/package.json +14 -14
package/dist/csv/CsvInputBar.js
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
2
2
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
3
3
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
4
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
5
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
6
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
7
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
8
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
9
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
4
10
|
import React, { Component } from 'react';
|
|
5
11
|
import classNames from 'classnames';
|
|
6
12
|
import { Button, Checkbox, Select } from '@deephaven/components';
|
|
@@ -13,7 +19,9 @@ import "./CsvInputBar.css";
|
|
|
13
19
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
14
20
|
var log = Log.module('CsvInputBar');
|
|
15
21
|
var TYPE_OPTIONS = Object.entries(CsvFormats.TYPES).map(_ref => {
|
|
16
|
-
var
|
|
22
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
23
|
+
key = _ref2[0],
|
|
24
|
+
value = _ref2[1];
|
|
17
25
|
return /*#__PURE__*/_jsx("option", {
|
|
18
26
|
value: key,
|
|
19
27
|
children: value.name
|
|
@@ -49,14 +57,12 @@ class CsvInputBar extends Component {
|
|
|
49
57
|
// React documentation says it is fine to update state inside an if statment
|
|
50
58
|
/* eslint-disable react/no-did-update-set-state */
|
|
51
59
|
componentDidUpdate(prevProps) {
|
|
52
|
-
var
|
|
53
|
-
file,
|
|
54
|
-
paste
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
tableNameSet
|
|
59
|
-
} = this.state;
|
|
60
|
+
var _this$props = this.props,
|
|
61
|
+
file = _this$props.file,
|
|
62
|
+
paste = _this$props.paste;
|
|
63
|
+
var _this$state = this.state,
|
|
64
|
+
tableName = _this$state.tableName,
|
|
65
|
+
tableNameSet = _this$state.tableNameSet;
|
|
60
66
|
// Set the table name from a file
|
|
61
67
|
if (!tableNameSet && file != null && !tableName) {
|
|
62
68
|
var _this$inputRef$curren;
|
|
@@ -92,24 +98,19 @@ class CsvInputBar extends Component {
|
|
|
92
98
|
}
|
|
93
99
|
}
|
|
94
100
|
componentWillUnmount() {
|
|
95
|
-
var
|
|
96
|
-
parser
|
|
97
|
-
} = this.state;
|
|
101
|
+
var parser = this.state.parser;
|
|
98
102
|
if (parser) {
|
|
99
103
|
parser.cancel();
|
|
100
104
|
}
|
|
101
105
|
}
|
|
102
106
|
handleCancel() {
|
|
103
|
-
var
|
|
104
|
-
onClose
|
|
105
|
-
} = this.props;
|
|
107
|
+
var onClose = this.props.onClose;
|
|
106
108
|
onClose();
|
|
107
109
|
}
|
|
108
110
|
handleError(e) {
|
|
109
|
-
var
|
|
110
|
-
onClose,
|
|
111
|
-
onError
|
|
112
|
-
} = this.props;
|
|
111
|
+
var _this$props2 = this.props,
|
|
112
|
+
onClose = _this$props2.onClose,
|
|
113
|
+
onError = _this$props2.onError;
|
|
113
114
|
log.error(e);
|
|
114
115
|
onError(e);
|
|
115
116
|
onClose();
|
|
@@ -121,9 +122,7 @@ class CsvInputBar extends Component {
|
|
|
121
122
|
});
|
|
122
123
|
}
|
|
123
124
|
toggleFirstRowHeaders() {
|
|
124
|
-
var
|
|
125
|
-
isFirstRowHeaders
|
|
126
|
-
} = this.state;
|
|
125
|
+
var isFirstRowHeaders = this.state.isFirstRowHeaders;
|
|
127
126
|
this.setState({
|
|
128
127
|
isFirstRowHeaders: !isFirstRowHeaders
|
|
129
128
|
});
|
|
@@ -131,10 +130,9 @@ class CsvInputBar extends Component {
|
|
|
131
130
|
handleUpload(event) {
|
|
132
131
|
event.stopPropagation();
|
|
133
132
|
event.preventDefault();
|
|
134
|
-
var
|
|
135
|
-
file,
|
|
136
|
-
paste
|
|
137
|
-
} = this.props;
|
|
133
|
+
var _this$props3 = this.props,
|
|
134
|
+
file = _this$props3.file,
|
|
135
|
+
paste = _this$props3.paste;
|
|
138
136
|
if (file != null) {
|
|
139
137
|
if (file.name.endsWith('.zip')) {
|
|
140
138
|
this.handleZipFile(file);
|
|
@@ -150,16 +148,14 @@ class CsvInputBar extends Component {
|
|
|
150
148
|
handleFile(file) {
|
|
151
149
|
var isZip = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
152
150
|
log.info("Starting CSV parser for ".concat(file instanceof File ? file.name : 'pasted values', " ").concat(isZip ? '' : file.size, " bytes"));
|
|
153
|
-
var
|
|
154
|
-
session,
|
|
155
|
-
timeZone,
|
|
156
|
-
onInProgress
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
type
|
|
162
|
-
} = this.state;
|
|
151
|
+
var _this$props4 = this.props,
|
|
152
|
+
session = _this$props4.session,
|
|
153
|
+
timeZone = _this$props4.timeZone,
|
|
154
|
+
onInProgress = _this$props4.onInProgress;
|
|
155
|
+
var _this$state2 = this.state,
|
|
156
|
+
tableName = _this$state2.tableName,
|
|
157
|
+
isFirstRowHeaders = _this$state2.isFirstRowHeaders,
|
|
158
|
+
type = _this$state2.type;
|
|
163
159
|
var handleParseDone = tables => {
|
|
164
160
|
// Do not bother merging just one table
|
|
165
161
|
if (tables.length === 1) {
|
|
@@ -191,10 +187,9 @@ class CsvInputBar extends Component {
|
|
|
191
187
|
onInProgress(true);
|
|
192
188
|
}
|
|
193
189
|
handleZipFile(zipFile) {
|
|
194
|
-
var
|
|
195
|
-
onUpdate,
|
|
196
|
-
unzip
|
|
197
|
-
} = this.props;
|
|
190
|
+
var _this$props5 = this.props,
|
|
191
|
+
onUpdate = _this$props5.onUpdate,
|
|
192
|
+
unzip = _this$props5.unzip;
|
|
198
193
|
if (unzip == null) {
|
|
199
194
|
this.handleError(new Error('No support for zip files available.'));
|
|
200
195
|
return;
|
|
@@ -217,9 +212,7 @@ class CsvInputBar extends Component {
|
|
|
217
212
|
}).catch(e => this.handleError(e));
|
|
218
213
|
}
|
|
219
214
|
handleProgress(progressValue) {
|
|
220
|
-
var
|
|
221
|
-
showProgress
|
|
222
|
-
} = this.state;
|
|
215
|
+
var showProgress = this.state.showProgress;
|
|
223
216
|
if (showProgress) {
|
|
224
217
|
this.setState({
|
|
225
218
|
progressValue
|
|
@@ -231,12 +224,8 @@ class CsvInputBar extends Component {
|
|
|
231
224
|
|
|
232
225
|
// Cancels an in progress upload
|
|
233
226
|
handleCancelInProgress() {
|
|
234
|
-
var
|
|
235
|
-
|
|
236
|
-
} = this.props;
|
|
237
|
-
var {
|
|
238
|
-
parser
|
|
239
|
-
} = this.state;
|
|
227
|
+
var onInProgress = this.props.onInProgress;
|
|
228
|
+
var parser = this.state.parser;
|
|
240
229
|
if (parser) {
|
|
241
230
|
parser.cancel();
|
|
242
231
|
}
|
|
@@ -247,13 +236,10 @@ class CsvInputBar extends Component {
|
|
|
247
236
|
onInProgress(false);
|
|
248
237
|
}
|
|
249
238
|
openTable() {
|
|
250
|
-
var
|
|
251
|
-
onOpenTable,
|
|
252
|
-
onClose
|
|
253
|
-
|
|
254
|
-
var {
|
|
255
|
-
tableName
|
|
256
|
-
} = this.state;
|
|
239
|
+
var _this$props6 = this.props,
|
|
240
|
+
onOpenTable = _this$props6.onOpenTable,
|
|
241
|
+
onClose = _this$props6.onClose;
|
|
242
|
+
var tableName = this.state.tableName;
|
|
257
243
|
onOpenTable(tableName);
|
|
258
244
|
onClose();
|
|
259
245
|
}
|
|
@@ -263,17 +249,15 @@ class CsvInputBar extends Component {
|
|
|
263
249
|
});
|
|
264
250
|
}
|
|
265
251
|
render() {
|
|
266
|
-
var
|
|
267
|
-
file,
|
|
268
|
-
paste
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
type
|
|
276
|
-
} = this.state;
|
|
252
|
+
var _this$props7 = this.props,
|
|
253
|
+
file = _this$props7.file,
|
|
254
|
+
paste = _this$props7.paste;
|
|
255
|
+
var _this$state3 = this.state,
|
|
256
|
+
tableName = _this$state3.tableName,
|
|
257
|
+
isFirstRowHeaders = _this$state3.isFirstRowHeaders,
|
|
258
|
+
showProgress = _this$state3.showProgress,
|
|
259
|
+
progressValue = _this$state3.progressValue,
|
|
260
|
+
type = _this$state3.type;
|
|
277
261
|
// A blank table name is invalid for pasted values
|
|
278
262
|
var isNameInvalid = Boolean(paste) && !tableName;
|
|
279
263
|
return /*#__PURE__*/_jsxs("div", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CsvInputBar.js","names":["React","Component","classNames","Button","Checkbox","Select","Log","DbNameValidator","CsvOverlay","CsvParser","CsvFormats","jsx","_jsx","jsxs","_jsxs","log","module","TYPE_OPTIONS","Object","entries","TYPES","map","_ref","key","value","children","name","CsvInputBar","constructor","props","_defineProperty","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","_this$inputRef$curren","dotIndex","lastIndexOf","fileTableName","makeVariableName","substring","setState","current","focus","fromExtension","undefined","AUTO","componentWillUnmount","cancel","onClose","e","onError","error","event","target","stopPropagation","preventDefault","endsWith","handleZipFile","handleFile","Blob","isZip","arguments","length","info","concat","File","size","session","timeZone","onInProgress","handleParseDone","tables","bindTableToVariable","then","openTable","catch","mergeTables","table","forEach","t","close","onFileCompleted","readHeaders","onProgress","parse","zipFile","onUpdate","unzip","Error","files","csvFound","i","f","isValidExtension","onOpenTable","eventTargetValue","render","isNameInvalid","Boolean","className","onSubmit","htmlFor","ref","id","onChange","checked","kind","onClick","disabled","style","width"],"sources":["../../src/csv/CsvInputBar.tsx"],"sourcesContent":["import React, {\n type ChangeEvent,\n Component,\n type FormEvent,\n type ReactElement,\n type RefObject,\n} from 'react';\nimport classNames from 'classnames';\nimport type { JSZipObject } from 'jszip';\nimport { Button, Checkbox, Select } from '@deephaven/components';\nimport type { dh } 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: dh.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.makeVariableName(\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: 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: dh.Table[]): void => {\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(eventTargetValue: string): void {\n this.setState({\n type: eventTargetValue as keyof typeof CsvFormats.TYPES,\n });\n }\n\n render(): ReactElement {\n const { file, paste } = this.props;\n const { tableName, isFirstRowHeaders, showProgress, progressValue, 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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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"CsvInputBar.js","names":["React","Component","classNames","Button","Checkbox","Select","Log","DbNameValidator","CsvOverlay","CsvParser","CsvFormats","jsx","_jsx","jsxs","_jsxs","log","module","TYPE_OPTIONS","Object","entries","TYPES","map","_ref","_ref2","_slicedToArray","key","value","children","name","CsvInputBar","constructor","props","_defineProperty","handleUpload","bind","handleCancel","handleError","handleTableName","toggleFirstRowHeaders","handleProgress","handleCancelInProgress","handleQueryTypeChange","inputRef","createRef","state","tableName","tableNameSet","isFirstRowHeaders","showProgress","progressValue","type","DEFAULT_TYPE","parser","componentDidUpdate","prevProps","_this$props","file","paste","_this$state","_this$inputRef$curren","dotIndex","lastIndexOf","fileTableName","makeVariableName","substring","setState","current","focus","fromExtension","undefined","AUTO","componentWillUnmount","cancel","onClose","e","_this$props2","onError","error","event","target","stopPropagation","preventDefault","_this$props3","endsWith","handleZipFile","handleFile","Blob","isZip","arguments","length","info","concat","File","size","_this$props4","session","timeZone","onInProgress","_this$state2","handleParseDone","tables","bindTableToVariable","then","openTable","catch","mergeTables","table","forEach","t","close","onFileCompleted","readHeaders","onProgress","parse","zipFile","_this$props5","onUpdate","unzip","Error","files","csvFound","i","f","isValidExtension","_this$props6","onOpenTable","eventTargetValue","render","_this$props7","_this$state3","isNameInvalid","Boolean","className","onSubmit","htmlFor","ref","id","onChange","checked","kind","onClick","disabled","style","width"],"sources":["../../src/csv/CsvInputBar.tsx"],"sourcesContent":["import React, {\n type ChangeEvent,\n Component,\n type FormEvent,\n type ReactElement,\n type RefObject,\n} from 'react';\nimport classNames from 'classnames';\nimport type { JSZipObject } from 'jszip';\nimport { Button, Checkbox, Select } from '@deephaven/components';\nimport type { dh } 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: dh.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.makeVariableName(\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: 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: dh.Table[]): void => {\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(eventTargetValue: string): void {\n this.setState({\n type: eventTargetValue as keyof typeof CsvFormats.TYPES,\n });\n }\n\n render(): ReactElement {\n const { file, paste } = this.props;\n const { tableName, isFirstRowHeaders, showProgress, progressValue, 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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","ignoreList":[]}
|
package/dist/csv/CsvOverlay.js
CHANGED
|
@@ -79,19 +79,16 @@ class CsvOverlay extends Component {
|
|
|
79
79
|
handleFiles(event) {
|
|
80
80
|
event.stopPropagation();
|
|
81
81
|
event.preventDefault();
|
|
82
|
-
var
|
|
83
|
-
files
|
|
84
|
-
} = event.target;
|
|
82
|
+
var files = event.target.files;
|
|
85
83
|
if (files != null) {
|
|
86
84
|
this.handleFile(files[0]);
|
|
87
85
|
}
|
|
88
86
|
}
|
|
89
87
|
handleDrop(e) {
|
|
90
|
-
var
|
|
91
|
-
allowZip,
|
|
92
|
-
clearDragError,
|
|
93
|
-
dragError
|
|
94
|
-
} = this.props;
|
|
88
|
+
var _this$props = this.props,
|
|
89
|
+
allowZip = _this$props.allowZip,
|
|
90
|
+
clearDragError = _this$props.clearDragError,
|
|
91
|
+
dragError = _this$props.dragError;
|
|
95
92
|
e.preventDefault();
|
|
96
93
|
e.stopPropagation();
|
|
97
94
|
if (dragError != null) {
|
|
@@ -112,9 +109,7 @@ class CsvOverlay extends Component {
|
|
|
112
109
|
}
|
|
113
110
|
}
|
|
114
111
|
unstageFile(event) {
|
|
115
|
-
var
|
|
116
|
-
onCancel
|
|
117
|
-
} = this.props;
|
|
112
|
+
var onCancel = this.props.onCancel;
|
|
118
113
|
event.stopPropagation();
|
|
119
114
|
event.preventDefault();
|
|
120
115
|
onCancel();
|
|
@@ -124,9 +119,7 @@ class CsvOverlay extends Component {
|
|
|
124
119
|
});
|
|
125
120
|
}
|
|
126
121
|
handleFile(file) {
|
|
127
|
-
var
|
|
128
|
-
onFileOpened
|
|
129
|
-
} = this.props;
|
|
122
|
+
var onFileOpened = this.props.onFileOpened;
|
|
130
123
|
onFileOpened(file);
|
|
131
124
|
this.setState({
|
|
132
125
|
selectedFileName: file.name,
|
|
@@ -134,11 +127,10 @@ class CsvOverlay extends Component {
|
|
|
134
127
|
});
|
|
135
128
|
}
|
|
136
129
|
handleMenuPaste() {
|
|
137
|
-
var
|
|
138
|
-
onPaste,
|
|
139
|
-
onError,
|
|
140
|
-
uploadInProgress
|
|
141
|
-
} = this.props;
|
|
130
|
+
var _this$props2 = this.props,
|
|
131
|
+
onPaste = _this$props2.onPaste,
|
|
132
|
+
onError = _this$props2.onError,
|
|
133
|
+
uploadInProgress = _this$props2.uploadInProgress;
|
|
142
134
|
if (uploadInProgress) {
|
|
143
135
|
return;
|
|
144
136
|
}
|
|
@@ -156,9 +148,7 @@ class CsvOverlay extends Component {
|
|
|
156
148
|
this.handleMenuPaste();
|
|
157
149
|
}
|
|
158
150
|
makeContextMenuItems() {
|
|
159
|
-
var
|
|
160
|
-
uploadInProgress
|
|
161
|
-
} = this.props;
|
|
151
|
+
var uploadInProgress = this.props.uploadInProgress;
|
|
162
152
|
return [{
|
|
163
153
|
title: 'Paste',
|
|
164
154
|
icon: vsClippy,
|
|
@@ -168,15 +158,13 @@ class CsvOverlay extends Component {
|
|
|
168
158
|
}];
|
|
169
159
|
}
|
|
170
160
|
render() {
|
|
171
|
-
var
|
|
172
|
-
allowZip,
|
|
173
|
-
dragError,
|
|
174
|
-
uploadInProgress
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
dropError
|
|
179
|
-
} = this.state;
|
|
161
|
+
var _this$props3 = this.props,
|
|
162
|
+
allowZip = _this$props3.allowZip,
|
|
163
|
+
dragError = _this$props3.dragError,
|
|
164
|
+
uploadInProgress = _this$props3.uploadInProgress;
|
|
165
|
+
var _this$state = this.state,
|
|
166
|
+
selectedFileName = _this$state.selectedFileName,
|
|
167
|
+
dropError = _this$state.dropError;
|
|
180
168
|
var error = dragError !== null && dragError !== void 0 ? dragError : dropError;
|
|
181
169
|
var contextActions = this.makeContextMenuItems();
|
|
182
170
|
return /*#__PURE__*/_jsxs("div", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CsvOverlay.js","names":["React","Component","memoize","FontAwesomeIcon","Button","ContextActions","GLOBAL_SHORTCUTS","dhFileCsv","dhFileDownload","dhFileSpreadsheet","vsClippy","vsFileZip","vsTrash","vsWarning","assertNotNull","TextUtils","jsx","_jsx","jsxs","_jsxs","PASTED_VALUES","INVALID_MIME_TYPES","VALID_EXTENSIONS","ZIP_EXTENSIONS","CsvOverlay","isValidDropItem","item","kind","find","invalid","test","type","isValidExtension","name","allowZip","arguments","length","undefined","some","ext","endsWith","handleDragOver","e","preventDefault","stopPropagation","getIcon","fileName","constructor","props","_defineProperty","getValidExtensions","join","handleSelectFile","bind","handleFiles","handleDrop","unstageFile","handleMenuPaste","handlePasteEvent","fileElem","createRef","divElem","state","selectedFileName","componentDidMount","_this$divElem$current","_this$divElem$current2","current","addEventListener","focus","componentWillUnmount","_this$divElem$current3","removeEventListener","_this$fileElem$curren","value","click","event","files","target","handleFile","clearDragError","dragError","dataTransfer","items","file","getAsFile","setState","dropError","FILE_TYPE_ERROR","onCancel","onFileOpened","onPaste","onError","uploadInProgress","navigator","clipboard","readText","then","clipText","catch","makeContextMenuItems","title","icon","action","shortcut","PASTE","disabled","render","error","contextActions","ref","className","onDragOver","onDrop","tabIndex","children","actions","id","accept","getAcceptString","style","display","onChange","onClick","tooltip","Boolean","getFileTypeErrorString"],"sources":["../../src/csv/CsvOverlay.tsx"],"sourcesContent":["import React, {\n type ChangeEvent,\n Component,\n type DragEvent,\n type MouseEvent,\n type ReactElement,\n type RefObject,\n} from 'react';\nimport memoize from 'memoize-one';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Button,\n type ContextAction,\n ContextActions,\n GLOBAL_SHORTCUTS,\n} from '@deephaven/components';\nimport {\n dhFileCsv,\n dhFileDownload,\n dhFileSpreadsheet,\n type IconDefinition,\n vsClippy,\n vsFileZip,\n vsTrash,\n vsWarning,\n} from '@deephaven/icons';\nimport './CsvOverlay.scss';\nimport { assertNotNull, TextUtils } from '@deephaven/utils';\n\ninterface CsvOverlayProps {\n allowZip: boolean;\n onFileOpened: (file: File) => void;\n onCancel: () => void;\n onPaste: (clipText: string) => void;\n clearDragError: () => void;\n dragError: string | null;\n onError: (e: unknown) => void;\n uploadInProgress: boolean;\n}\n\ninterface CsvOverlayState {\n selectedFileName: string;\n dropError?: string;\n}\n\nconst PASTED_VALUES = 'pasted values';\n\nconst INVALID_MIME_TYPES = [/^audio.*/, /^font.*/, /^image.*/, /^video.*/];\n\nconst VALID_EXTENSIONS = ['.csv', '.tsv', '.tab', '.psv', '.dsv', '.txt'];\n\nconst ZIP_EXTENSIONS = ['.zip'];\n\n/**\n * Overlay that is displayed when uploading a CSV file.\n */\nclass CsvOverlay extends Component<CsvOverlayProps, CsvOverlayState> {\n static defaultProps = {\n allowZip: false,\n dragError: null,\n };\n\n static MULTIPLE_FILE_ERROR = 'Please select only one file';\n\n static FILE_TYPE_ERROR = 'Filetype not supported.';\n\n static isValidDropItem(item: DataTransferItem): boolean {\n return (\n item != null &&\n item.kind === 'file' &&\n !INVALID_MIME_TYPES.find(invalid => invalid.test(item.type))\n );\n }\n\n static isValidExtension(name: string, allowZip = false): boolean {\n return (\n VALID_EXTENSIONS.some(ext => name.endsWith(ext)) ||\n (allowZip && ZIP_EXTENSIONS.some(ext => name.endsWith(ext)))\n );\n }\n\n static handleDragOver(e: DragEvent): void {\n e.preventDefault();\n e.stopPropagation();\n }\n\n static getIcon(fileName: string): IconDefinition {\n if (fileName === PASTED_VALUES) {\n return vsClippy;\n }\n if (fileName.endsWith('.csv')) {\n return dhFileCsv;\n }\n if (fileName.endsWith('.zip')) {\n return vsFileZip;\n }\n return dhFileSpreadsheet;\n }\n\n constructor(props: CsvOverlayProps) {\n super(props);\n\n this.handleSelectFile = this.handleSelectFile.bind(this);\n this.handleFiles = this.handleFiles.bind(this);\n this.handleDrop = this.handleDrop.bind(this);\n this.unstageFile = this.unstageFile.bind(this);\n this.handleMenuPaste = this.handleMenuPaste.bind(this);\n this.handlePasteEvent = this.handlePasteEvent.bind(this);\n\n this.fileElem = React.createRef();\n this.divElem = React.createRef();\n\n this.state = {\n selectedFileName: '',\n };\n }\n\n componentDidMount(): void {\n this.divElem.current?.addEventListener('paste', this.handlePasteEvent);\n this.divElem.current?.focus();\n }\n\n componentWillUnmount(): void {\n this.divElem.current?.removeEventListener('paste', this.handlePasteEvent);\n }\n\n fileElem: RefObject<HTMLInputElement>;\n\n divElem: RefObject<HTMLDivElement>;\n\n handleSelectFile(): void {\n if (this.fileElem.current) {\n this.fileElem.current.value = '';\n this.fileElem.current?.click();\n }\n }\n\n handleFiles(event: ChangeEvent<HTMLInputElement>): void {\n event.stopPropagation();\n event.preventDefault();\n const { files } = event.target;\n if (files != null) {\n this.handleFile(files[0]);\n }\n }\n\n handleDrop(e: DragEvent<HTMLDivElement>): void {\n const { allowZip, clearDragError, dragError } = this.props;\n e.preventDefault();\n e.stopPropagation();\n\n if (dragError != null) {\n clearDragError();\n return;\n }\n\n if (\n e.dataTransfer == null ||\n e.dataTransfer.items == null ||\n e.dataTransfer.items.length === 0\n ) {\n return;\n }\n\n const file = e.dataTransfer.items[0].getAsFile();\n assertNotNull(file);\n if (CsvOverlay.isValidExtension(file.name, allowZip)) {\n this.handleFile(file);\n } else {\n this.setState({\n dropError: CsvOverlay.FILE_TYPE_ERROR,\n });\n }\n }\n\n unstageFile(event: MouseEvent<HTMLButtonElement>): void {\n const { onCancel } = this.props;\n event.stopPropagation();\n event.preventDefault();\n onCancel();\n this.setState({\n selectedFileName: '',\n dropError: undefined,\n });\n }\n\n handleFile(file: File): void {\n const { onFileOpened } = this.props;\n onFileOpened(file);\n this.setState({\n selectedFileName: file.name,\n dropError: undefined,\n });\n }\n\n handleMenuPaste(): void {\n const { onPaste, onError, uploadInProgress } = this.props;\n if (uploadInProgress) {\n return;\n }\n navigator.clipboard\n .readText()\n .then(clipText => {\n onPaste(clipText);\n this.setState({\n selectedFileName: PASTED_VALUES,\n dropError: undefined,\n });\n })\n .catch((e: unknown) => onError(e));\n }\n\n handlePasteEvent(event: ClipboardEvent): void {\n event.stopPropagation();\n event.preventDefault();\n this.handleMenuPaste();\n }\n\n makeContextMenuItems(): ContextAction[] {\n const { uploadInProgress } = this.props;\n return [\n {\n title: 'Paste',\n icon: vsClippy,\n action: this.handleMenuPaste,\n shortcut: GLOBAL_SHORTCUTS.PASTE,\n disabled: uploadInProgress,\n },\n ];\n }\n\n getValidExtensions = memoize((allowZip: boolean) =>\n allowZip ? [...VALID_EXTENSIONS, ...ZIP_EXTENSIONS] : [...VALID_EXTENSIONS]\n );\n\n getAcceptString = memoize((allowZip: boolean) =>\n this.getValidExtensions(allowZip).join(', ')\n );\n\n getFileTypeErrorString = memoize((allowZip: boolean) =>\n TextUtils.join(this.getValidExtensions(allowZip), 'or')\n );\n\n render(): ReactElement {\n const { allowZip, dragError, uploadInProgress } = this.props;\n const { selectedFileName, dropError } = this.state;\n const error = dragError ?? dropError;\n const contextActions = this.makeContextMenuItems();\n return (\n <div\n ref={this.divElem}\n className=\"csv-overlay fill-parent-absolute\"\n onDragOver={CsvOverlay.handleDragOver}\n onDrop={this.handleDrop}\n tabIndex={-1}\n >\n <ContextActions actions={contextActions} />\n <input\n ref={this.fileElem}\n type=\"file\"\n id=\"fileElem\"\n accept={this.getAcceptString(allowZip)}\n style={{ display: 'none' }}\n onChange={this.handleFiles}\n data-testid=\"fileElem\"\n />\n {!selectedFileName && (error === undefined || error === '') && (\n <div className=\"message-content\">\n <div className=\"message-icon\">\n <FontAwesomeIcon icon={dhFileDownload} />\n </div>\n <label>Drop file (or paste values) here to import</label>\n <div className=\"message-small\">\n <label>or</label>\n </div>\n <Button kind=\"primary\" onClick={this.handleSelectFile}>\n Select File...\n </Button>\n </div>\n )}\n {selectedFileName && (error === undefined || error === '') && (\n <div className=\"selected-content\">\n <div className=\"selected-icon\">\n <FontAwesomeIcon icon={CsvOverlay.getIcon(selectedFileName)} />\n </div>\n <div className=\"selected-text\">\n <label>Selected File</label>\n <label className=\"selected-name\">\n {selectedFileName}\n {!uploadInProgress && (\n <Button\n kind=\"ghost\"\n className=\"ml-2\"\n onClick={this.unstageFile}\n icon={vsTrash}\n tooltip=\"Remove\"\n />\n )}\n </label>\n </div>\n </div>\n )}\n {Boolean(error) && (\n <div className=\"message-content\">\n <div className=\"message-icon\">\n <FontAwesomeIcon icon={vsWarning} />\n </div>\n <label>{error}</label>\n {error === CsvOverlay.FILE_TYPE_ERROR && (\n <div className=\"message-small\">\n <label>{this.getFileTypeErrorString(allowZip)}</label>\n </div>\n )}\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default CsvOverlay;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"CsvOverlay.js","names":["React","Component","memoize","FontAwesomeIcon","Button","ContextActions","GLOBAL_SHORTCUTS","dhFileCsv","dhFileDownload","dhFileSpreadsheet","vsClippy","vsFileZip","vsTrash","vsWarning","assertNotNull","TextUtils","jsx","_jsx","jsxs","_jsxs","PASTED_VALUES","INVALID_MIME_TYPES","VALID_EXTENSIONS","ZIP_EXTENSIONS","CsvOverlay","isValidDropItem","item","kind","find","invalid","test","type","isValidExtension","name","allowZip","arguments","length","undefined","some","ext","endsWith","handleDragOver","e","preventDefault","stopPropagation","getIcon","fileName","constructor","props","_defineProperty","getValidExtensions","join","handleSelectFile","bind","handleFiles","handleDrop","unstageFile","handleMenuPaste","handlePasteEvent","fileElem","createRef","divElem","state","selectedFileName","componentDidMount","_this$divElem$current","_this$divElem$current2","current","addEventListener","focus","componentWillUnmount","_this$divElem$current3","removeEventListener","_this$fileElem$curren","value","click","event","files","target","handleFile","_this$props","clearDragError","dragError","dataTransfer","items","file","getAsFile","setState","dropError","FILE_TYPE_ERROR","onCancel","onFileOpened","_this$props2","onPaste","onError","uploadInProgress","navigator","clipboard","readText","then","clipText","catch","makeContextMenuItems","title","icon","action","shortcut","PASTE","disabled","render","_this$props3","_this$state","error","contextActions","ref","className","onDragOver","onDrop","tabIndex","children","actions","id","accept","getAcceptString","style","display","onChange","onClick","tooltip","Boolean","getFileTypeErrorString"],"sources":["../../src/csv/CsvOverlay.tsx"],"sourcesContent":["import React, {\n type ChangeEvent,\n Component,\n type DragEvent,\n type MouseEvent,\n type ReactElement,\n type RefObject,\n} from 'react';\nimport memoize from 'memoize-one';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Button,\n type ContextAction,\n ContextActions,\n GLOBAL_SHORTCUTS,\n} from '@deephaven/components';\nimport {\n dhFileCsv,\n dhFileDownload,\n dhFileSpreadsheet,\n type IconDefinition,\n vsClippy,\n vsFileZip,\n vsTrash,\n vsWarning,\n} from '@deephaven/icons';\nimport './CsvOverlay.scss';\nimport { assertNotNull, TextUtils } from '@deephaven/utils';\n\ninterface CsvOverlayProps {\n allowZip: boolean;\n onFileOpened: (file: File) => void;\n onCancel: () => void;\n onPaste: (clipText: string) => void;\n clearDragError: () => void;\n dragError: string | null;\n onError: (e: unknown) => void;\n uploadInProgress: boolean;\n}\n\ninterface CsvOverlayState {\n selectedFileName: string;\n dropError?: string;\n}\n\nconst PASTED_VALUES = 'pasted values';\n\nconst INVALID_MIME_TYPES = [/^audio.*/, /^font.*/, /^image.*/, /^video.*/];\n\nconst VALID_EXTENSIONS = ['.csv', '.tsv', '.tab', '.psv', '.dsv', '.txt'];\n\nconst ZIP_EXTENSIONS = ['.zip'];\n\n/**\n * Overlay that is displayed when uploading a CSV file.\n */\nclass CsvOverlay extends Component<CsvOverlayProps, CsvOverlayState> {\n static defaultProps = {\n allowZip: false,\n dragError: null,\n };\n\n static MULTIPLE_FILE_ERROR = 'Please select only one file';\n\n static FILE_TYPE_ERROR = 'Filetype not supported.';\n\n static isValidDropItem(item: DataTransferItem): boolean {\n return (\n item != null &&\n item.kind === 'file' &&\n !INVALID_MIME_TYPES.find(invalid => invalid.test(item.type))\n );\n }\n\n static isValidExtension(name: string, allowZip = false): boolean {\n return (\n VALID_EXTENSIONS.some(ext => name.endsWith(ext)) ||\n (allowZip && ZIP_EXTENSIONS.some(ext => name.endsWith(ext)))\n );\n }\n\n static handleDragOver(e: DragEvent): void {\n e.preventDefault();\n e.stopPropagation();\n }\n\n static getIcon(fileName: string): IconDefinition {\n if (fileName === PASTED_VALUES) {\n return vsClippy;\n }\n if (fileName.endsWith('.csv')) {\n return dhFileCsv;\n }\n if (fileName.endsWith('.zip')) {\n return vsFileZip;\n }\n return dhFileSpreadsheet;\n }\n\n constructor(props: CsvOverlayProps) {\n super(props);\n\n this.handleSelectFile = this.handleSelectFile.bind(this);\n this.handleFiles = this.handleFiles.bind(this);\n this.handleDrop = this.handleDrop.bind(this);\n this.unstageFile = this.unstageFile.bind(this);\n this.handleMenuPaste = this.handleMenuPaste.bind(this);\n this.handlePasteEvent = this.handlePasteEvent.bind(this);\n\n this.fileElem = React.createRef();\n this.divElem = React.createRef();\n\n this.state = {\n selectedFileName: '',\n };\n }\n\n componentDidMount(): void {\n this.divElem.current?.addEventListener('paste', this.handlePasteEvent);\n this.divElem.current?.focus();\n }\n\n componentWillUnmount(): void {\n this.divElem.current?.removeEventListener('paste', this.handlePasteEvent);\n }\n\n fileElem: RefObject<HTMLInputElement>;\n\n divElem: RefObject<HTMLDivElement>;\n\n handleSelectFile(): void {\n if (this.fileElem.current) {\n this.fileElem.current.value = '';\n this.fileElem.current?.click();\n }\n }\n\n handleFiles(event: ChangeEvent<HTMLInputElement>): void {\n event.stopPropagation();\n event.preventDefault();\n const { files } = event.target;\n if (files != null) {\n this.handleFile(files[0]);\n }\n }\n\n handleDrop(e: DragEvent<HTMLDivElement>): void {\n const { allowZip, clearDragError, dragError } = this.props;\n e.preventDefault();\n e.stopPropagation();\n\n if (dragError != null) {\n clearDragError();\n return;\n }\n\n if (\n e.dataTransfer == null ||\n e.dataTransfer.items == null ||\n e.dataTransfer.items.length === 0\n ) {\n return;\n }\n\n const file = e.dataTransfer.items[0].getAsFile();\n assertNotNull(file);\n if (CsvOverlay.isValidExtension(file.name, allowZip)) {\n this.handleFile(file);\n } else {\n this.setState({\n dropError: CsvOverlay.FILE_TYPE_ERROR,\n });\n }\n }\n\n unstageFile(event: MouseEvent<HTMLButtonElement>): void {\n const { onCancel } = this.props;\n event.stopPropagation();\n event.preventDefault();\n onCancel();\n this.setState({\n selectedFileName: '',\n dropError: undefined,\n });\n }\n\n handleFile(file: File): void {\n const { onFileOpened } = this.props;\n onFileOpened(file);\n this.setState({\n selectedFileName: file.name,\n dropError: undefined,\n });\n }\n\n handleMenuPaste(): void {\n const { onPaste, onError, uploadInProgress } = this.props;\n if (uploadInProgress) {\n return;\n }\n navigator.clipboard\n .readText()\n .then(clipText => {\n onPaste(clipText);\n this.setState({\n selectedFileName: PASTED_VALUES,\n dropError: undefined,\n });\n })\n .catch((e: unknown) => onError(e));\n }\n\n handlePasteEvent(event: ClipboardEvent): void {\n event.stopPropagation();\n event.preventDefault();\n this.handleMenuPaste();\n }\n\n makeContextMenuItems(): ContextAction[] {\n const { uploadInProgress } = this.props;\n return [\n {\n title: 'Paste',\n icon: vsClippy,\n action: this.handleMenuPaste,\n shortcut: GLOBAL_SHORTCUTS.PASTE,\n disabled: uploadInProgress,\n },\n ];\n }\n\n getValidExtensions = memoize((allowZip: boolean) =>\n allowZip ? [...VALID_EXTENSIONS, ...ZIP_EXTENSIONS] : [...VALID_EXTENSIONS]\n );\n\n getAcceptString = memoize((allowZip: boolean) =>\n this.getValidExtensions(allowZip).join(', ')\n );\n\n getFileTypeErrorString = memoize((allowZip: boolean) =>\n TextUtils.join(this.getValidExtensions(allowZip), 'or')\n );\n\n render(): ReactElement {\n const { allowZip, dragError, uploadInProgress } = this.props;\n const { selectedFileName, dropError } = this.state;\n const error = dragError ?? dropError;\n const contextActions = this.makeContextMenuItems();\n return (\n <div\n ref={this.divElem}\n className=\"csv-overlay fill-parent-absolute\"\n onDragOver={CsvOverlay.handleDragOver}\n onDrop={this.handleDrop}\n tabIndex={-1}\n >\n <ContextActions actions={contextActions} />\n <input\n ref={this.fileElem}\n type=\"file\"\n id=\"fileElem\"\n accept={this.getAcceptString(allowZip)}\n style={{ display: 'none' }}\n onChange={this.handleFiles}\n data-testid=\"fileElem\"\n />\n {!selectedFileName && (error === undefined || error === '') && (\n <div className=\"message-content\">\n <div className=\"message-icon\">\n <FontAwesomeIcon icon={dhFileDownload} />\n </div>\n <label>Drop file (or paste values) here to import</label>\n <div className=\"message-small\">\n <label>or</label>\n </div>\n <Button kind=\"primary\" onClick={this.handleSelectFile}>\n Select File...\n </Button>\n </div>\n )}\n {selectedFileName && (error === undefined || error === '') && (\n <div className=\"selected-content\">\n <div className=\"selected-icon\">\n <FontAwesomeIcon icon={CsvOverlay.getIcon(selectedFileName)} />\n </div>\n <div className=\"selected-text\">\n <label>Selected File</label>\n <label className=\"selected-name\">\n {selectedFileName}\n {!uploadInProgress && (\n <Button\n kind=\"ghost\"\n className=\"ml-2\"\n onClick={this.unstageFile}\n icon={vsTrash}\n tooltip=\"Remove\"\n />\n )}\n </label>\n </div>\n </div>\n )}\n {Boolean(error) && (\n <div className=\"message-content\">\n <div className=\"message-icon\">\n <FontAwesomeIcon icon={vsWarning} />\n </div>\n <label>{error}</label>\n {error === CsvOverlay.FILE_TYPE_ERROR && (\n <div className=\"message-small\">\n <label>{this.getFileTypeErrorString(allowZip)}</label>\n </div>\n )}\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default CsvOverlay;\n"],"mappings":"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","ignoreList":[]}
|
package/dist/csv/CsvParser.js
CHANGED
|
@@ -26,17 +26,16 @@ class CsvParser {
|
|
|
26
26
|
return header.concat(String.fromCharCode(65 + char));
|
|
27
27
|
}
|
|
28
28
|
constructor(_ref) {
|
|
29
|
-
var
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
readHeaders = true,
|
|
35
|
-
onProgress,
|
|
36
|
-
onError,
|
|
37
|
-
timeZone,
|
|
38
|
-
isZip
|
|
39
|
-
} = _ref;
|
|
29
|
+
var onFileCompleted = _ref.onFileCompleted,
|
|
30
|
+
session = _ref.session,
|
|
31
|
+
file = _ref.file,
|
|
32
|
+
type = _ref.type,
|
|
33
|
+
_ref$readHeaders = _ref.readHeaders,
|
|
34
|
+
readHeaders = _ref$readHeaders === void 0 ? true : _ref$readHeaders,
|
|
35
|
+
onProgress = _ref.onProgress,
|
|
36
|
+
onError = _ref.onError,
|
|
37
|
+
timeZone = _ref.timeZone,
|
|
38
|
+
isZip = _ref.isZip;
|
|
40
39
|
_defineProperty(this, "onFileCompleted", void 0);
|
|
41
40
|
_defineProperty(this, "session", void 0);
|
|
42
41
|
_defineProperty(this, "file", void 0);
|
|
@@ -134,22 +133,18 @@ class CsvParser {
|
|
|
134
133
|
typeParser.parse();
|
|
135
134
|
}
|
|
136
135
|
handleChunk(result, parser) {
|
|
137
|
-
var
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
tables
|
|
143
|
-
} = this;
|
|
136
|
+
var readHeaders = this.readHeaders,
|
|
137
|
+
onError = this.onError,
|
|
138
|
+
handleCreateTable = this.handleCreateTable,
|
|
139
|
+
isZip = this.isZip,
|
|
140
|
+
tables = this.tables;
|
|
144
141
|
if (this.isCancelled) {
|
|
145
142
|
log.debug2('CSV parser cancelled.');
|
|
146
143
|
parser.abort();
|
|
147
144
|
tables.forEach(t => t.close());
|
|
148
145
|
return;
|
|
149
146
|
}
|
|
150
|
-
var
|
|
151
|
-
data
|
|
152
|
-
} = result;
|
|
147
|
+
var data = result.data;
|
|
153
148
|
if (!this.headers) {
|
|
154
149
|
if (readHeaders) {
|
|
155
150
|
this.headers = DbNameValidator.legalizeColumnNames(data[0]);
|
|
@@ -188,9 +183,7 @@ class CsvParser {
|
|
|
188
183
|
}
|
|
189
184
|
uploadConsolidatedChunks(parser) {
|
|
190
185
|
var _this$consolidatedChu;
|
|
191
|
-
var
|
|
192
|
-
handleCreateTable
|
|
193
|
-
} = this;
|
|
186
|
+
var handleCreateTable = this.handleCreateTable;
|
|
194
187
|
var index = this.chunks;
|
|
195
188
|
this.chunks += 1;
|
|
196
189
|
var toUpload = (_this$consolidatedChu = this.consolidatedChunks) === null || _this$consolidatedChu === void 0 ? void 0 : _this$consolidatedChu.slice();
|
|
@@ -200,15 +193,13 @@ class CsvParser {
|
|
|
200
193
|
handleCreateTable(index, toUpload, parser);
|
|
201
194
|
}
|
|
202
195
|
handleCreateTable(index, columns, parser) {
|
|
203
|
-
var
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
onError
|
|
211
|
-
} = this;
|
|
196
|
+
var session = this.session,
|
|
197
|
+
tables = this.tables,
|
|
198
|
+
onFileCompleted = this.onFileCompleted,
|
|
199
|
+
totalChunks = this.totalChunks,
|
|
200
|
+
types = this.types,
|
|
201
|
+
onProgress = this.onProgress,
|
|
202
|
+
onError = this.onError;
|
|
212
203
|
if (parser) {
|
|
213
204
|
parser.pause();
|
|
214
205
|
}
|
|
@@ -261,9 +252,7 @@ class CsvParser {
|
|
|
261
252
|
}
|
|
262
253
|
}
|
|
263
254
|
handleError(error) {
|
|
264
|
-
var
|
|
265
|
-
onError
|
|
266
|
-
} = this;
|
|
255
|
+
var onError = this.onError;
|
|
267
256
|
onError(error);
|
|
268
257
|
}
|
|
269
258
|
handleNodeUpdate(metadata) {
|