@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.
Files changed (144) hide show
  1. package/dist/Console.css +44 -0
  2. package/dist/Console.css.map +1 -0
  3. package/dist/Console.js +875 -0
  4. package/dist/Console.js.map +1 -0
  5. package/dist/ConsoleInput.css +42 -0
  6. package/dist/ConsoleInput.css.map +1 -0
  7. package/dist/ConsoleInput.js +442 -0
  8. package/dist/ConsoleInput.js.map +1 -0
  9. package/dist/ConsoleMenu.css +25 -0
  10. package/dist/ConsoleMenu.css.map +1 -0
  11. package/dist/ConsoleMenu.js +192 -0
  12. package/dist/ConsoleMenu.js.map +1 -0
  13. package/dist/ConsolePropTypes.js +10 -0
  14. package/dist/ConsolePropTypes.js.map +1 -0
  15. package/dist/ConsoleShortcuts.js +85 -0
  16. package/dist/ConsoleShortcuts.js.map +1 -0
  17. package/dist/ConsoleStatusBar.css +52 -0
  18. package/dist/ConsoleStatusBar.css.map +1 -0
  19. package/dist/ConsoleStatusBar.js +105 -0
  20. package/dist/ConsoleStatusBar.js.map +1 -0
  21. package/dist/HeapUsage.css +61 -0
  22. package/dist/HeapUsage.css.map +1 -0
  23. package/dist/HeapUsage.js +168 -0
  24. package/dist/HeapUsage.js.map +1 -0
  25. package/dist/StoragePropTypes.js +16 -0
  26. package/dist/StoragePropTypes.js.map +1 -0
  27. package/dist/command-history/CommandHistory.css +41 -0
  28. package/dist/command-history/CommandHistory.css.map +1 -0
  29. package/dist/command-history/CommandHistory.js +381 -0
  30. package/dist/command-history/CommandHistory.js.map +1 -0
  31. package/dist/command-history/CommandHistoryActions.css +10 -0
  32. package/dist/command-history/CommandHistoryActions.css.map +1 -0
  33. package/dist/command-history/CommandHistoryActions.js +47 -0
  34. package/dist/command-history/CommandHistoryActions.js.map +1 -0
  35. package/dist/command-history/CommandHistoryItem.css +61 -0
  36. package/dist/command-history/CommandHistoryItem.css.map +1 -0
  37. package/dist/command-history/CommandHistoryItem.js +50 -0
  38. package/dist/command-history/CommandHistoryItem.js.map +1 -0
  39. package/dist/command-history/CommandHistoryItemTooltip.css +37 -0
  40. package/dist/command-history/CommandHistoryItemTooltip.css.map +1 -0
  41. package/dist/command-history/CommandHistoryItemTooltip.js +159 -0
  42. package/dist/command-history/CommandHistoryItemTooltip.js.map +1 -0
  43. package/dist/command-history/CommandHistoryStorage.js +2 -0
  44. package/dist/command-history/CommandHistoryStorage.js.map +1 -0
  45. package/dist/command-history/CommandHistoryTypes.js +2 -0
  46. package/dist/command-history/CommandHistoryTypes.js.map +1 -0
  47. package/dist/command-history/CommandHistoryViewportUpdater.js +57 -0
  48. package/dist/command-history/CommandHistoryViewportUpdater.js.map +1 -0
  49. package/dist/command-history/index.js +7 -0
  50. package/dist/command-history/index.js.map +1 -0
  51. package/dist/common/Code.js +45 -0
  52. package/dist/common/Code.js.map +1 -0
  53. package/dist/common/ConsoleConstants.js +10 -0
  54. package/dist/common/ConsoleConstants.js.map +1 -0
  55. package/dist/common/ConsoleUtils.js +62 -0
  56. package/dist/common/ConsoleUtils.js.map +1 -0
  57. package/dist/common/ObjectIcon.js +33 -0
  58. package/dist/common/ObjectIcon.js.map +1 -0
  59. package/dist/common/index.js +5 -0
  60. package/dist/common/index.js.map +1 -0
  61. package/dist/console-history/ConsoleHistory.css +42 -0
  62. package/dist/console-history/ConsoleHistory.css.map +1 -0
  63. package/dist/console-history/ConsoleHistory.js +42 -0
  64. package/dist/console-history/ConsoleHistory.js.map +1 -0
  65. package/dist/console-history/ConsoleHistoryItem.css +87 -0
  66. package/dist/console-history/ConsoleHistoryItem.css.map +1 -0
  67. package/dist/console-history/ConsoleHistoryItem.js +139 -0
  68. package/dist/console-history/ConsoleHistoryItem.js.map +1 -0
  69. package/dist/console-history/ConsoleHistoryItemResult.js +22 -0
  70. package/dist/console-history/ConsoleHistoryItemResult.js.map +1 -0
  71. package/dist/console-history/ConsoleHistoryResultErrorMessage.js +142 -0
  72. package/dist/console-history/ConsoleHistoryResultErrorMessage.js.map +1 -0
  73. package/dist/console-history/ConsoleHistoryResultInProgress.css +27 -0
  74. package/dist/console-history/ConsoleHistoryResultInProgress.css.map +1 -0
  75. package/dist/console-history/ConsoleHistoryResultInProgress.js +66 -0
  76. package/dist/console-history/ConsoleHistoryResultInProgress.js.map +1 -0
  77. package/dist/console-history/ConsoleHistoryTypes.js +2 -0
  78. package/dist/console-history/ConsoleHistoryTypes.js.map +1 -0
  79. package/dist/console-history/index.js +6 -0
  80. package/dist/console-history/index.js.map +1 -0
  81. package/dist/csv/CsvFormats.js +134 -0
  82. package/dist/csv/CsvFormats.js.map +1 -0
  83. package/dist/csv/CsvInputBar.css +36 -0
  84. package/dist/csv/CsvInputBar.css.map +1 -0
  85. package/dist/csv/CsvInputBar.js +342 -0
  86. package/dist/csv/CsvInputBar.js.map +1 -0
  87. package/dist/csv/CsvOverlay.css +57 -0
  88. package/dist/csv/CsvOverlay.css.map +1 -0
  89. package/dist/csv/CsvOverlay.js +244 -0
  90. package/dist/csv/CsvOverlay.js.map +1 -0
  91. package/dist/csv/CsvParser.js +268 -0
  92. package/dist/csv/CsvParser.js.map +1 -0
  93. package/dist/csv/CsvTypeParser.js +235 -0
  94. package/dist/csv/CsvTypeParser.js.map +1 -0
  95. package/dist/csv/NewTableColumnTypes.js +16 -0
  96. package/dist/csv/NewTableColumnTypes.js.map +1 -0
  97. package/dist/declaration.d.js +2 -0
  98. package/dist/declaration.d.js.map +1 -0
  99. package/dist/index.js +18 -0
  100. package/dist/index.js.map +1 -0
  101. package/dist/log/LogLevel.js +11 -0
  102. package/dist/log/LogLevel.js.map +1 -0
  103. package/dist/log/LogLevelMenuItem.css +38 -0
  104. package/dist/log/LogLevelMenuItem.css.map +1 -0
  105. package/dist/log/LogLevelMenuItem.js +32 -0
  106. package/dist/log/LogLevelMenuItem.js.map +1 -0
  107. package/dist/log/LogView.css +65 -0
  108. package/dist/log/LogView.css.map +1 -0
  109. package/dist/log/LogView.js +487 -0
  110. package/dist/log/LogView.js.map +1 -0
  111. package/dist/monaco/MonacoProviders.js +314 -0
  112. package/dist/monaco/MonacoProviders.js.map +1 -0
  113. package/dist/monaco/MonacoTheme.module.css +54 -0
  114. package/dist/monaco/MonacoTheme.module.css.map +1 -0
  115. package/dist/monaco/MonacoUtils.js +423 -0
  116. package/dist/monaco/MonacoUtils.js.map +1 -0
  117. package/dist/monaco/index.js +4 -0
  118. package/dist/monaco/index.js.map +1 -0
  119. package/dist/monaco/lang/Language.js +2 -0
  120. package/dist/monaco/lang/Language.js.map +1 -0
  121. package/dist/monaco/lang/db.js +152 -0
  122. package/dist/monaco/lang/db.js.map +1 -0
  123. package/dist/monaco/lang/groovy.js +229 -0
  124. package/dist/monaco/lang/groovy.js.map +1 -0
  125. package/dist/monaco/lang/log.js +64 -0
  126. package/dist/monaco/lang/log.js.map +1 -0
  127. package/dist/monaco/lang/python.js +234 -0
  128. package/dist/monaco/lang/python.js.map +1 -0
  129. package/dist/monaco/lang/scala.js +264 -0
  130. package/dist/monaco/lang/scala.js.map +1 -0
  131. package/dist/notebook/Editor.css +6 -0
  132. package/dist/notebook/Editor.css.map +1 -0
  133. package/dist/notebook/Editor.js +130 -0
  134. package/dist/notebook/Editor.js.map +1 -0
  135. package/dist/notebook/ScriptEditor.css +8 -0
  136. package/dist/notebook/ScriptEditor.css.map +1 -0
  137. package/dist/notebook/ScriptEditor.d.ts.map +1 -1
  138. package/dist/notebook/ScriptEditor.js +311 -0
  139. package/dist/notebook/ScriptEditor.js.map +1 -0
  140. package/dist/notebook/ScriptEditorUtils.d.ts +7 -0
  141. package/dist/notebook/ScriptEditorUtils.d.ts.map +1 -1
  142. package/dist/notebook/ScriptEditorUtils.js +52 -0
  143. package/dist/notebook/ScriptEditorUtils.js.map +1 -0
  144. 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"]}