@deephaven/console 0.19.2-beta.5 → 0.20.1-beta.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/ConsoleMenu.d.ts.map +1 -1
- package/dist/ConsoleMenu.js +21 -15
- package/dist/ConsoleMenu.js.map +1 -1
- package/dist/csv/CsvInputBar.d.ts.map +1 -1
- package/dist/csv/CsvInputBar.js +2 -3
- package/dist/csv/CsvInputBar.js.map +1 -1
- package/dist/csv/CsvOverlay.d.ts.map +1 -1
- package/dist/csv/CsvOverlay.js +10 -11
- package/dist/csv/CsvOverlay.js.map +1 -1
- package/dist/log/LogView.d.ts.map +1 -1
- package/dist/log/LogView.js +20 -20
- package/dist/log/LogView.js.map +1 -1
- package/package.json +11 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConsoleMenu.d.ts","sourceRoot":"","sources":["../src/ConsoleMenu.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,YAAY,EACb,MAAM,OAAO,CAAC;AAEf,OAAO,
|
|
1
|
+
{"version":3,"file":"ConsoleMenu.d.ts","sourceRoot":"","sources":["../src/ConsoleMenu.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,YAAY,EACb,MAAM,OAAO,CAAC;AAEf,OAAO,EAEL,cAAc,EAGd,WAAW,EAEZ,MAAM,uBAAuB,CAAC;AAQ/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,oBAAoB,CAAC;AAK5B,UAAU,gBAAgB;IACxB,UAAU,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACjD,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,eAAe,EAAE,cAAc,EAAE,CAAC;CACnC;AAED,UAAU,gBAAgB;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,cAAM,WAAY,SAAQ,aAAa,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACzE,MAAM,CAAC,eAAe,CACpB,OAAO,EAAE,kBAAkB,EAAE,EAC7B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,EACvC,cAAc,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,EACpD,YAAY,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,GACjD,cAAc,EAAE;gBAiCP,KAAK,EAAE,gBAAgB;IAgBnC,gBAAgB,CAAC,EAAE,WAAW,CAAC;IAE/B,iBAAiB,CAAC,EAAE,WAAW,CAAC;IAEhC,gBAAgB,YAEH,kBAAkB,EAAE,cACjB,MAAM,uBACG,kBAAkB,KAAK,IAAI,KAC/C,cAAc,EAAE,CAcnB;IAEF,iBAAiB,YAEJ,kBAAkB,EAAE,cACjB,MAAM,uBACG,kBAAkB,KAAK,IAAI,KAC/C,cAAc,EAAE,CAcnB;IAEF,uBAAuB,CAAC,CAAC,EAAE,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAK/D,qBAAqB,IAAI,IAAI;IAI7B,qBAAqB,IAAI,IAAI;IAI7B,wBAAwB,CAAC,CAAC,EAAE,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAKhE,sBAAsB,IAAI,IAAI;IAI9B,sBAAsB,IAAI,IAAI;IAI9B,MAAM,IAAI,YAAY;CAsFvB;AAED,eAAe,WAAW,CAAC"}
|
package/dist/ConsoleMenu.js
CHANGED
|
@@ -2,7 +2,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
|
|
2
2
|
|
|
3
3
|
import React, { PureComponent } from 'react';
|
|
4
4
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
5
|
-
import { DropdownMenu, SearchInput, Tooltip } from '@deephaven/components';
|
|
5
|
+
import { Button, DropdownMenu, SearchInput, Tooltip } from '@deephaven/components';
|
|
6
6
|
import { dhTable, vsGraph, vsKebabVertical, vsTriangleDown } from '@deephaven/icons';
|
|
7
7
|
import Log from '@deephaven/log';
|
|
8
8
|
import memoize from 'memoize-one';
|
|
@@ -132,10 +132,12 @@ class ConsoleMenu extends PureComponent {
|
|
|
132
132
|
};
|
|
133
133
|
return /*#__PURE__*/React.createElement("div", {
|
|
134
134
|
className: "console-pane-menu"
|
|
135
|
-
}, /*#__PURE__*/React.createElement(
|
|
136
|
-
|
|
137
|
-
className: "btn
|
|
138
|
-
disabled: tableActions.length === 0
|
|
135
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
136
|
+
kind: "ghost",
|
|
137
|
+
className: "btn-link-icon",
|
|
138
|
+
disabled: tableActions.length === 0,
|
|
139
|
+
onClick: () => {// no-op: click is handled in `DropdownMenu`
|
|
140
|
+
}
|
|
139
141
|
}, /*#__PURE__*/React.createElement("div", {
|
|
140
142
|
className: "fa-md fa-layers"
|
|
141
143
|
}, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
|
|
@@ -154,10 +156,12 @@ class ConsoleMenu extends PureComponent {
|
|
|
154
156
|
initialKeyboardIndex: 1
|
|
155
157
|
},
|
|
156
158
|
popperOptions: popperOptions
|
|
157
|
-
})), /*#__PURE__*/React.createElement(
|
|
158
|
-
|
|
159
|
-
className: "btn
|
|
160
|
-
disabled: widgetActions.length === 0
|
|
159
|
+
})), /*#__PURE__*/React.createElement(Button, {
|
|
160
|
+
kind: "ghost",
|
|
161
|
+
className: "btn-link-icon",
|
|
162
|
+
disabled: widgetActions.length === 0,
|
|
163
|
+
onClick: () => {// no-op: click is handled in `DropdownMenu'
|
|
164
|
+
}
|
|
161
165
|
}, /*#__PURE__*/React.createElement("div", {
|
|
162
166
|
className: "fa-md fa-layers"
|
|
163
167
|
}, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
|
|
@@ -176,12 +180,14 @@ class ConsoleMenu extends PureComponent {
|
|
|
176
180
|
initialKeyboardIndex: 1
|
|
177
181
|
},
|
|
178
182
|
popperOptions: popperOptions
|
|
179
|
-
})), /*#__PURE__*/React.createElement(
|
|
180
|
-
|
|
181
|
-
className: "btn
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
183
|
+
})), /*#__PURE__*/React.createElement(Button, {
|
|
184
|
+
kind: "ghost",
|
|
185
|
+
className: "btn-overflow btn-link-icon",
|
|
186
|
+
icon: vsKebabVertical,
|
|
187
|
+
tooltip: "More Actions...",
|
|
188
|
+
onClick: () => {// no-op: click is handled in `DropdownMenu`
|
|
189
|
+
}
|
|
190
|
+
}, /*#__PURE__*/React.createElement(DropdownMenu, {
|
|
185
191
|
actions: overflowActions,
|
|
186
192
|
popperOptions: popperOptions
|
|
187
193
|
})));
|
package/dist/ConsoleMenu.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConsoleMenu.js","names":["React","PureComponent","FontAwesomeIcon","DropdownMenu","SearchInput","Tooltip","dhTable","vsGraph","vsKebabVertical","vsTriangleDown","Log","memoize","ConsoleUtils","log","module","ConsoleMenu","makeItemActions","objects","filterText","refCallback","changeCallback","openCallback","length","searchAction","menuElement","filteredItems","filter","title","toLowerCase","indexOf","openActions","map","object","action","constructor","props","openObject","tables","isTableType","type","searchField","tableSearchField","handleTableFilterChange","widgets","isWidgetType","widgetSearchField","handleWidgetFilterChange","bind","handleTableMenuClosed","handleTableMenuOpened","handleWidgetMenuClosed","handleWidgetMenuOpened","state","tableFilterText","widgetFilterText","e","debug","setState","target","value","focus","render","overflowActions","tableActions","makeTableActions","widgetActions","makeWidgetActions","popperOptions","placement","initialKeyboardIndex"],"sources":["../src/ConsoleMenu.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n ChangeEventHandler,\n PureComponent,\n ReactElement,\n} from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n DropdownAction,\n DropdownMenu,\n PopperOptions,\n SearchInput,\n Tooltip,\n} from '@deephaven/components';\nimport {\n dhTable,\n vsGraph,\n vsKebabVertical,\n vsTriangleDown,\n} from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport { VariableDefinition } from '@deephaven/jsapi-shim';\nimport memoize from 'memoize-one';\nimport './ConsoleMenu.scss';\nimport ConsoleUtils from './common/ConsoleUtils';\n\nconst log = Log.module('ConsoleMenu');\n\ninterface ConsoleMenuProps {\n openObject: (object: VariableDefinition) => void;\n objects: VariableDefinition[];\n overflowActions: DropdownAction[];\n}\n\ninterface ConsoleMenuState {\n tableFilterText: string;\n widgetFilterText: string;\n}\n\nclass ConsoleMenu extends PureComponent<ConsoleMenuProps, ConsoleMenuState> {\n static makeItemActions(\n objects: VariableDefinition[],\n filterText: string,\n refCallback: (ref: SearchInput) => void,\n changeCallback: ChangeEventHandler<HTMLInputElement>,\n openCallback: (object: VariableDefinition) => void\n ): DropdownAction[] {\n if (objects.length === 0) {\n return [];\n }\n\n const searchAction = {\n menuElement: (\n <SearchInput\n value={filterText}\n onChange={changeCallback}\n className=\"console-menu\"\n ref={refCallback}\n />\n ),\n };\n let filteredItems = objects;\n if (filterText) {\n filteredItems = filteredItems.filter(\n ({ title }: { title?: string }) =>\n title != null &&\n title.toLowerCase().indexOf(filterText.toLowerCase()) >= 0\n );\n }\n const openActions = filteredItems.map(object => ({\n title: object.title,\n action: () => {\n openCallback(object);\n },\n }));\n\n return [searchAction, ...openActions];\n }\n\n constructor(props: ConsoleMenuProps) {\n super(props);\n\n this.handleTableFilterChange = this.handleTableFilterChange.bind(this);\n this.handleTableMenuClosed = this.handleTableMenuClosed.bind(this);\n this.handleTableMenuOpened = this.handleTableMenuOpened.bind(this);\n this.handleWidgetFilterChange = this.handleWidgetFilterChange.bind(this);\n this.handleWidgetMenuClosed = this.handleWidgetMenuClosed.bind(this);\n this.handleWidgetMenuOpened = this.handleWidgetMenuOpened.bind(this);\n\n this.state = {\n tableFilterText: '',\n widgetFilterText: '',\n };\n }\n\n tableSearchField?: SearchInput;\n\n widgetSearchField?: SearchInput;\n\n makeTableActions = memoize(\n (\n objects: VariableDefinition[],\n filterText: string,\n openObject: (object: VariableDefinition) => void\n ): DropdownAction[] => {\n const tables = objects.filter(object =>\n ConsoleUtils.isTableType(object.type)\n );\n return ConsoleMenu.makeItemActions(\n tables,\n filterText,\n searchField => {\n this.tableSearchField = searchField;\n },\n this.handleTableFilterChange,\n openObject\n );\n }\n );\n\n makeWidgetActions = memoize(\n (\n objects: VariableDefinition[],\n filterText: string,\n openObject: (object: VariableDefinition) => void\n ): DropdownAction[] => {\n const widgets = objects.filter(object =>\n ConsoleUtils.isWidgetType(object.type)\n );\n return ConsoleMenu.makeItemActions(\n widgets,\n filterText,\n searchField => {\n this.widgetSearchField = searchField;\n },\n this.handleWidgetFilterChange,\n openObject\n );\n }\n );\n\n handleTableFilterChange(e: ChangeEvent<HTMLInputElement>): void {\n log.debug('filtering tables...');\n this.setState({ tableFilterText: e.target.value });\n }\n\n handleTableMenuClosed(): void {\n this.setState({ tableFilterText: '' });\n }\n\n handleTableMenuOpened(): void {\n this.tableSearchField?.focus();\n }\n\n handleWidgetFilterChange(e: ChangeEvent<HTMLInputElement>): void {\n log.debug('filtering widgets...');\n this.setState({ widgetFilterText: e.target.value });\n }\n\n handleWidgetMenuClosed(): void {\n this.setState({ widgetFilterText: '' });\n }\n\n handleWidgetMenuOpened(): void {\n this.widgetSearchField?.focus();\n }\n\n render(): ReactElement {\n const { overflowActions, objects, openObject } = this.props;\n const { tableFilterText, widgetFilterText } = this.state;\n const tableActions = this.makeTableActions(\n objects,\n tableFilterText,\n openObject\n );\n const widgetActions = this.makeWidgetActions(\n objects,\n widgetFilterText,\n openObject\n );\n const popperOptions: PopperOptions = { placement: 'bottom-end' };\n\n return (\n <div className=\"console-pane-menu\">\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n disabled={tableActions.length === 0}\n >\n <div className=\"fa-md fa-layers\">\n <FontAwesomeIcon\n mask={dhTable}\n icon={vsTriangleDown}\n transform=\"right-5 down-5\"\n />\n <FontAwesomeIcon icon={vsTriangleDown} transform=\"right-8 down-6\" />\n </div>\n <Tooltip>Tables</Tooltip>\n <DropdownMenu\n key=\"table-actions \"\n actions={tableActions}\n onMenuOpened={this.handleTableMenuOpened}\n onMenuClosed={this.handleTableMenuClosed}\n options={{ initialKeyboardIndex: 1 }}\n popperOptions={popperOptions}\n />\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon\"\n disabled={widgetActions.length === 0}\n >\n <div className=\"fa-md fa-layers\">\n <FontAwesomeIcon\n mask={vsGraph}\n icon={vsTriangleDown}\n transform=\"right-5 down-5\"\n />\n <FontAwesomeIcon icon={vsTriangleDown} transform=\"right-8 down-6\" />\n </div>\n <Tooltip>Widgets</Tooltip>\n <DropdownMenu\n key=\"table-actions\"\n actions={widgetActions}\n onMenuOpened={this.handleWidgetMenuOpened}\n onMenuClosed={this.handleWidgetMenuClosed}\n options={{ initialKeyboardIndex: 1 }}\n popperOptions={popperOptions}\n />\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-overflow btn-link-icon\"\n >\n <FontAwesomeIcon icon={vsKebabVertical} />\n <Tooltip>More Actions...</Tooltip>\n <DropdownMenu\n actions={overflowActions}\n popperOptions={popperOptions}\n />\n </button>\n </div>\n );\n }\n}\n\nexport default ConsoleMenu;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ConsoleMenu.js","names":["React","PureComponent","FontAwesomeIcon","Button","DropdownMenu","SearchInput","Tooltip","dhTable","vsGraph","vsKebabVertical","vsTriangleDown","Log","memoize","ConsoleUtils","log","module","ConsoleMenu","makeItemActions","objects","filterText","refCallback","changeCallback","openCallback","length","searchAction","menuElement","filteredItems","filter","title","toLowerCase","indexOf","openActions","map","object","action","constructor","props","openObject","tables","isTableType","type","searchField","tableSearchField","handleTableFilterChange","widgets","isWidgetType","widgetSearchField","handleWidgetFilterChange","bind","handleTableMenuClosed","handleTableMenuOpened","handleWidgetMenuClosed","handleWidgetMenuOpened","state","tableFilterText","widgetFilterText","e","debug","setState","target","value","focus","render","overflowActions","tableActions","makeTableActions","widgetActions","makeWidgetActions","popperOptions","placement","initialKeyboardIndex"],"sources":["../src/ConsoleMenu.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n ChangeEventHandler,\n PureComponent,\n ReactElement,\n} from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Button,\n DropdownAction,\n DropdownMenu,\n PopperOptions,\n SearchInput,\n Tooltip,\n} from '@deephaven/components';\nimport {\n dhTable,\n vsGraph,\n vsKebabVertical,\n vsTriangleDown,\n} from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport { VariableDefinition } from '@deephaven/jsapi-shim';\nimport memoize from 'memoize-one';\nimport './ConsoleMenu.scss';\nimport ConsoleUtils from './common/ConsoleUtils';\n\nconst log = Log.module('ConsoleMenu');\n\ninterface ConsoleMenuProps {\n openObject: (object: VariableDefinition) => void;\n objects: VariableDefinition[];\n overflowActions: DropdownAction[];\n}\n\ninterface ConsoleMenuState {\n tableFilterText: string;\n widgetFilterText: string;\n}\n\nclass ConsoleMenu extends PureComponent<ConsoleMenuProps, ConsoleMenuState> {\n static makeItemActions(\n objects: VariableDefinition[],\n filterText: string,\n refCallback: (ref: SearchInput) => void,\n changeCallback: ChangeEventHandler<HTMLInputElement>,\n openCallback: (object: VariableDefinition) => void\n ): DropdownAction[] {\n if (objects.length === 0) {\n return [];\n }\n\n const searchAction = {\n menuElement: (\n <SearchInput\n value={filterText}\n onChange={changeCallback}\n className=\"console-menu\"\n ref={refCallback}\n />\n ),\n };\n let filteredItems = objects;\n if (filterText) {\n filteredItems = filteredItems.filter(\n ({ title }: { title?: string }) =>\n title != null &&\n title.toLowerCase().indexOf(filterText.toLowerCase()) >= 0\n );\n }\n const openActions = filteredItems.map(object => ({\n title: object.title,\n action: () => {\n openCallback(object);\n },\n }));\n\n return [searchAction, ...openActions];\n }\n\n constructor(props: ConsoleMenuProps) {\n super(props);\n\n this.handleTableFilterChange = this.handleTableFilterChange.bind(this);\n this.handleTableMenuClosed = this.handleTableMenuClosed.bind(this);\n this.handleTableMenuOpened = this.handleTableMenuOpened.bind(this);\n this.handleWidgetFilterChange = this.handleWidgetFilterChange.bind(this);\n this.handleWidgetMenuClosed = this.handleWidgetMenuClosed.bind(this);\n this.handleWidgetMenuOpened = this.handleWidgetMenuOpened.bind(this);\n\n this.state = {\n tableFilterText: '',\n widgetFilterText: '',\n };\n }\n\n tableSearchField?: SearchInput;\n\n widgetSearchField?: SearchInput;\n\n makeTableActions = memoize(\n (\n objects: VariableDefinition[],\n filterText: string,\n openObject: (object: VariableDefinition) => void\n ): DropdownAction[] => {\n const tables = objects.filter(object =>\n ConsoleUtils.isTableType(object.type)\n );\n return ConsoleMenu.makeItemActions(\n tables,\n filterText,\n searchField => {\n this.tableSearchField = searchField;\n },\n this.handleTableFilterChange,\n openObject\n );\n }\n );\n\n makeWidgetActions = memoize(\n (\n objects: VariableDefinition[],\n filterText: string,\n openObject: (object: VariableDefinition) => void\n ): DropdownAction[] => {\n const widgets = objects.filter(object =>\n ConsoleUtils.isWidgetType(object.type)\n );\n return ConsoleMenu.makeItemActions(\n widgets,\n filterText,\n searchField => {\n this.widgetSearchField = searchField;\n },\n this.handleWidgetFilterChange,\n openObject\n );\n }\n );\n\n handleTableFilterChange(e: ChangeEvent<HTMLInputElement>): void {\n log.debug('filtering tables...');\n this.setState({ tableFilterText: e.target.value });\n }\n\n handleTableMenuClosed(): void {\n this.setState({ tableFilterText: '' });\n }\n\n handleTableMenuOpened(): void {\n this.tableSearchField?.focus();\n }\n\n handleWidgetFilterChange(e: ChangeEvent<HTMLInputElement>): void {\n log.debug('filtering widgets...');\n this.setState({ widgetFilterText: e.target.value });\n }\n\n handleWidgetMenuClosed(): void {\n this.setState({ widgetFilterText: '' });\n }\n\n handleWidgetMenuOpened(): void {\n this.widgetSearchField?.focus();\n }\n\n render(): ReactElement {\n const { overflowActions, objects, openObject } = this.props;\n const { tableFilterText, widgetFilterText } = this.state;\n const tableActions = this.makeTableActions(\n objects,\n tableFilterText,\n openObject\n );\n const widgetActions = this.makeWidgetActions(\n objects,\n widgetFilterText,\n openObject\n );\n const popperOptions: PopperOptions = { placement: 'bottom-end' };\n\n return (\n <div className=\"console-pane-menu\">\n <Button\n kind=\"ghost\"\n className=\"btn-link-icon\"\n disabled={tableActions.length === 0}\n onClick={() => {\n // no-op: click is handled in `DropdownMenu`\n }}\n >\n <div className=\"fa-md fa-layers\">\n <FontAwesomeIcon\n mask={dhTable}\n icon={vsTriangleDown}\n transform=\"right-5 down-5\"\n />\n <FontAwesomeIcon icon={vsTriangleDown} transform=\"right-8 down-6\" />\n </div>\n <Tooltip>Tables</Tooltip>\n <DropdownMenu\n key=\"table-actions \"\n actions={tableActions}\n onMenuOpened={this.handleTableMenuOpened}\n onMenuClosed={this.handleTableMenuClosed}\n options={{ initialKeyboardIndex: 1 }}\n popperOptions={popperOptions}\n />\n </Button>\n <Button\n kind=\"ghost\"\n className=\"btn-link-icon\"\n disabled={widgetActions.length === 0}\n onClick={() => {\n // no-op: click is handled in `DropdownMenu'\n }}\n >\n <div className=\"fa-md fa-layers\">\n <FontAwesomeIcon\n mask={vsGraph}\n icon={vsTriangleDown}\n transform=\"right-5 down-5\"\n />\n <FontAwesomeIcon icon={vsTriangleDown} transform=\"right-8 down-6\" />\n </div>\n <Tooltip>Widgets</Tooltip>\n <DropdownMenu\n key=\"table-actions\"\n actions={widgetActions}\n onMenuOpened={this.handleWidgetMenuOpened}\n onMenuClosed={this.handleWidgetMenuClosed}\n options={{ initialKeyboardIndex: 1 }}\n popperOptions={popperOptions}\n />\n </Button>\n <Button\n kind=\"ghost\"\n className=\"btn-overflow btn-link-icon\"\n icon={vsKebabVertical}\n tooltip=\"More Actions...\"\n onClick={() => {\n // no-op: click is handled in `DropdownMenu`\n }}\n >\n <DropdownMenu\n actions={overflowActions}\n popperOptions={popperOptions}\n />\n </Button>\n </div>\n );\n }\n}\n\nexport default ConsoleMenu;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CsvInputBar.d.ts","sourceRoot":"","sources":["../../src/csv/CsvInputBar.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,WAAW,EACX,SAAS,EACT,SAAS,EACT,YAAY,EACZ,SAAS,EACV,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAS,MAAM,uBAAuB,CAAC;AAI1D,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,oBAAoB,CAAC;AAU5B,UAAU,gBAAgB;IACxB,OAAO,EAAE,UAAU,CAAC;IACpB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9B,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;CACnD;AAED,UAAU,gBAAgB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,OAAO,UAAU,CAAC,KAAK,CAAC;IACpC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;CAC1B;AACD;;GAEG;AACH,cAAM,WAAY,SAAQ,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACrE,MAAM,CAAC,YAAY;;;;MAIjB;gBAEU,KAAK,EAAE,gBAAgB;IA2BnC,kBAAkB,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI;IA8CrD,oBAAoB,IAAI,IAAI;IAO5B,QAAQ,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAEtC,YAAY,IAAI,IAAI;IAKpB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAO7B,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAI3D,qBAAqB,IAAI,IAAI;IAK7B,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,eAAe,CAAC,GAAG,IAAI;IAmBrD,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,EAAE,KAAK,UAAQ,GAAG,IAAI;IAgDzD,aAAa,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI;IA2BlC,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO;IAY9C,sBAAsB,IAAI,IAAI;IAa9B,SAAS,IAAI,IAAI;IAOjB,qBAAqB,CAAC,KAAK,EAAE,WAAW,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAMlE,MAAM,IAAI,YAAY;
|
|
1
|
+
{"version":3,"file":"CsvInputBar.d.ts","sourceRoot":"","sources":["../../src/csv/CsvInputBar.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,WAAW,EACX,SAAS,EACT,SAAS,EACT,YAAY,EACZ,SAAS,EACV,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAS,MAAM,uBAAuB,CAAC;AAI1D,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,oBAAoB,CAAC;AAU5B,UAAU,gBAAgB;IACxB,OAAO,EAAE,UAAU,CAAC;IACpB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9B,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;CACnD;AAED,UAAU,gBAAgB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,OAAO,UAAU,CAAC,KAAK,CAAC;IACpC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;CAC1B;AACD;;GAEG;AACH,cAAM,WAAY,SAAQ,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACrE,MAAM,CAAC,YAAY;;;;MAIjB;gBAEU,KAAK,EAAE,gBAAgB;IA2BnC,kBAAkB,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI;IA8CrD,oBAAoB,IAAI,IAAI;IAO5B,QAAQ,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAEtC,YAAY,IAAI,IAAI;IAKpB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAO7B,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAI3D,qBAAqB,IAAI,IAAI;IAK7B,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,eAAe,CAAC,GAAG,IAAI;IAmBrD,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,EAAE,KAAK,UAAQ,GAAG,IAAI;IAgDzD,aAAa,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI;IA2BlC,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO;IAY9C,sBAAsB,IAAI,IAAI;IAa9B,SAAS,IAAI,IAAI;IAOjB,qBAAqB,CAAC,KAAK,EAAE,WAAW,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAMlE,MAAM,IAAI,YAAY;CAuFvB;AAED,eAAe,WAAW,CAAC"}
|
package/dist/csv/CsvInputBar.js
CHANGED
|
@@ -355,9 +355,8 @@ class CsvInputBar extends Component {
|
|
|
355
355
|
"aria-valuenow": progressValue,
|
|
356
356
|
"aria-valuemin": 0,
|
|
357
357
|
"aria-valuemax": 100
|
|
358
|
-
})), /*#__PURE__*/React.createElement("label", null, progressValue, "%"), /*#__PURE__*/React.createElement(
|
|
359
|
-
|
|
360
|
-
className: "btn btn-primary",
|
|
358
|
+
})), /*#__PURE__*/React.createElement("label", null, progressValue, "%"), /*#__PURE__*/React.createElement(Button, {
|
|
359
|
+
kind: "primary",
|
|
361
360
|
onClick: this.handleCancelInProgress
|
|
362
361
|
}, "Cancel")));
|
|
363
362
|
}
|
|
@@ -1 +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 { IdeSession, Table } from '@deephaven/jsapi-shim';\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\n type=\"button\"\n className=\"btn btn-primary\"\n onClick={this.handleCancelInProgress}\n >\n Cancel\n </button>\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default CsvInputBar;\n"],"mappings":"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"}
|
|
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 { IdeSession, Table } from '@deephaven/jsapi-shim';\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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CsvOverlay.d.ts","sourceRoot":"","sources":["../../src/csv/CsvOverlay.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,WAAW,EACX,SAAS,EACT,SAAS,EACT,UAAU,EACV,YAAY,EACZ,SAAS,EACV,MAAM,OAAO,CAAC;AAGf,OAAO,
|
|
1
|
+
{"version":3,"file":"CsvOverlay.d.ts","sourceRoot":"","sources":["../../src/csv/CsvOverlay.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,WAAW,EACX,SAAS,EACT,SAAS,EACT,UAAU,EACV,YAAY,EACZ,SAAS,EACV,MAAM,OAAO,CAAC;AAGf,OAAO,EAEL,aAAa,EAGd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAIL,cAAc,EAKf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,mBAAmB,CAAC;AAG3B,UAAU,eAAe;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACnC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9B,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,UAAU,eAAe;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAUD;;GAEG;AACH,cAAM,UAAW,SAAQ,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAClE,MAAM,CAAC,YAAY;;;MAGjB;IAEF,MAAM,CAAC,mBAAmB,SAAiC;IAE3D,MAAM,CAAC,eAAe,SAA6B;IAEnD,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO;IAQvD,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,UAAQ,GAAG,OAAO;IAOhE,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI;IAKzC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc;gBAapC,KAAK,EAAE,eAAe;IAkBlC,iBAAiB,IAAI,IAAI;IAKzB,oBAAoB,IAAI,IAAI;IAI5B,QAAQ,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAEtC,OAAO,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IAEnC,gBAAgB,IAAI,IAAI;IAOxB,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI;IASvD,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,GAAG,IAAI;IA6B9C,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAWvD,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAS5B,eAAe,IAAI,IAAI;IAiBvB,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAM7C,oBAAoB,IAAI,aAAa,EAAE;IAavC,kBAAkB,aAAsB,OAAO,cAE7C;IAEF,eAAe,uCAEb;IAEF,sBAAsB,uCAEpB;IAEF,MAAM,IAAI,YAAY;CA2EvB;AAED,eAAe,UAAU,CAAC"}
|
package/dist/csv/CsvOverlay.js
CHANGED
|
@@ -3,7 +3,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
|
|
3
3
|
import React, { Component } from 'react';
|
|
4
4
|
import memoize from 'memoize-one';
|
|
5
5
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
6
|
-
import { ContextActions, GLOBAL_SHORTCUTS } from '@deephaven/components';
|
|
6
|
+
import { Button, ContextActions, GLOBAL_SHORTCUTS } from '@deephaven/components';
|
|
7
7
|
import { dhFileCsv, dhFileDownload, dhFileSpreadsheet, vsClippy, vsFileZip, vsTrash, vsWarning } from '@deephaven/icons';
|
|
8
8
|
import "./CsvOverlay.css";
|
|
9
9
|
import { assertNotNull, TextUtils } from '@deephaven/utils';
|
|
@@ -237,9 +237,8 @@ class CsvOverlay extends Component {
|
|
|
237
237
|
icon: dhFileDownload
|
|
238
238
|
})), /*#__PURE__*/React.createElement("label", null, "Drop file (or paste values) here to import"), /*#__PURE__*/React.createElement("div", {
|
|
239
239
|
className: "message-small"
|
|
240
|
-
}, /*#__PURE__*/React.createElement("label", null, "or")), /*#__PURE__*/React.createElement(
|
|
241
|
-
|
|
242
|
-
className: "btn btn-primary",
|
|
240
|
+
}, /*#__PURE__*/React.createElement("label", null, "or")), /*#__PURE__*/React.createElement(Button, {
|
|
241
|
+
kind: "primary",
|
|
243
242
|
onClick: this.handleSelectFile
|
|
244
243
|
}, "Select File...")), selectedFileName && (error === undefined || error === '') && /*#__PURE__*/React.createElement("div", {
|
|
245
244
|
className: "selected-content"
|
|
@@ -251,13 +250,13 @@ class CsvOverlay extends Component {
|
|
|
251
250
|
className: "selected-text"
|
|
252
251
|
}, /*#__PURE__*/React.createElement("label", null, "Selected File"), /*#__PURE__*/React.createElement("label", {
|
|
253
252
|
className: "selected-name"
|
|
254
|
-
}, selectedFileName, !uploadInProgress && /*#__PURE__*/React.createElement(
|
|
255
|
-
|
|
256
|
-
className: "
|
|
257
|
-
onClick: this.unstageFile
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
}))))
|
|
253
|
+
}, selectedFileName, !uploadInProgress && /*#__PURE__*/React.createElement(Button, {
|
|
254
|
+
kind: "ghost",
|
|
255
|
+
className: "ml-2",
|
|
256
|
+
onClick: this.unstageFile,
|
|
257
|
+
icon: vsTrash,
|
|
258
|
+
tooltip: "Remove"
|
|
259
|
+
})))), Boolean(error) && /*#__PURE__*/React.createElement("div", {
|
|
261
260
|
className: "message-content"
|
|
262
261
|
}, /*#__PURE__*/React.createElement("div", {
|
|
263
262
|
className: "message-icon"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CsvOverlay.js","names":["React","Component","memoize","FontAwesomeIcon","ContextActions","GLOBAL_SHORTCUTS","dhFileCsv","dhFileDownload","dhFileSpreadsheet","vsClippy","vsFileZip","vsTrash","vsWarning","assertNotNull","TextUtils","PASTED_VALUES","INVALID_MIME_TYPES","VALID_EXTENSIONS","ZIP_EXTENSIONS","CsvOverlay","isValidDropItem","item","kind","find","invalid","test","type","isValidExtension","name","allowZip","some","ext","endsWith","handleDragOver","e","preventDefault","stopPropagation","getIcon","fileName","constructor","props","getValidExtensions","join","handleSelectFile","bind","handleFiles","handleDrop","unstageFile","handleMenuPaste","handlePasteEvent","fileElem","createRef","divElem","state","selectedFileName","componentDidMount","current","addEventListener","focus","componentWillUnmount","removeEventListener","value","click","event","files","target","handleFile","clearDragError","dragError","dataTransfer","items","length","file","getAsFile","setState","dropError","FILE_TYPE_ERROR","onCancel","undefined","onFileOpened","onPaste","onError","uploadInProgress","navigator","clipboard","readText","then","clipText","catch","makeContextMenuItems","title","icon","action","shortcut","PASTE","disabled","render","error","contextActions","getAcceptString","display","Boolean","getFileTypeErrorString"],"sources":["../../src/csv/CsvOverlay.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n Component,\n DragEvent,\n MouseEvent,\n ReactElement,\n RefObject,\n} from 'react';\nimport memoize from 'memoize-one';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n ContextAction,\n ContextActions,\n GLOBAL_SHORTCUTS,\n} from '@deephaven/components';\nimport {\n dhFileCsv,\n dhFileDownload,\n dhFileSpreadsheet,\n 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 =>\n this.getValidExtensions(allowZip).join(', ')\n );\n\n getFileTypeErrorString = memoize(allowZip =>\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\n type=\"button\"\n className=\"btn btn-primary\"\n onClick={this.handleSelectFile}\n >\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 type=\"button\"\n className=\"btn btn-link btn-link-icon ml-2\"\n onClick={this.unstageFile}\n >\n <FontAwesomeIcon icon={vsTrash} />\n </button>\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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"}
|
|
1
|
+
{"version":3,"file":"CsvOverlay.js","names":["React","Component","memoize","FontAwesomeIcon","Button","ContextActions","GLOBAL_SHORTCUTS","dhFileCsv","dhFileDownload","dhFileSpreadsheet","vsClippy","vsFileZip","vsTrash","vsWarning","assertNotNull","TextUtils","PASTED_VALUES","INVALID_MIME_TYPES","VALID_EXTENSIONS","ZIP_EXTENSIONS","CsvOverlay","isValidDropItem","item","kind","find","invalid","test","type","isValidExtension","name","allowZip","some","ext","endsWith","handleDragOver","e","preventDefault","stopPropagation","getIcon","fileName","constructor","props","getValidExtensions","join","handleSelectFile","bind","handleFiles","handleDrop","unstageFile","handleMenuPaste","handlePasteEvent","fileElem","createRef","divElem","state","selectedFileName","componentDidMount","current","addEventListener","focus","componentWillUnmount","removeEventListener","value","click","event","files","target","handleFile","clearDragError","dragError","dataTransfer","items","length","file","getAsFile","setState","dropError","FILE_TYPE_ERROR","onCancel","undefined","onFileOpened","onPaste","onError","uploadInProgress","navigator","clipboard","readText","then","clipText","catch","makeContextMenuItems","title","icon","action","shortcut","PASTE","disabled","render","error","contextActions","getAcceptString","display","Boolean","getFileTypeErrorString"],"sources":["../../src/csv/CsvOverlay.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n Component,\n DragEvent,\n MouseEvent,\n ReactElement,\n RefObject,\n} from 'react';\nimport memoize from 'memoize-one';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Button,\n ContextAction,\n ContextActions,\n GLOBAL_SHORTCUTS,\n} from '@deephaven/components';\nimport {\n dhFileCsv,\n dhFileDownload,\n dhFileSpreadsheet,\n 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 =>\n this.getValidExtensions(allowZip).join(', ')\n );\n\n getFileTypeErrorString = memoize(allowZip =>\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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LogView.d.ts","sourceRoot":"","sources":["../../src/log/LogView.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"LogView.d.ts","sourceRoot":"","sources":["../../src/log/LogView.tsx"],"names":[],"mappings":"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"}
|
package/dist/log/LogView.js
CHANGED
|
@@ -5,8 +5,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
|
5
5
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
6
6
|
|
|
7
7
|
import React, { PureComponent } from 'react';
|
|
8
|
-
import {
|
|
9
|
-
import { DropdownMenu, Tooltip } from '@deephaven/components';
|
|
8
|
+
import { Button, DropdownMenu } from '@deephaven/components';
|
|
10
9
|
import { vsGear, dhTrashUndo } from '@deephaven/icons';
|
|
11
10
|
import { assertNotNull } from '@deephaven/utils';
|
|
12
11
|
import * as monaco from 'monaco-editor';
|
|
@@ -138,13 +137,12 @@ class LogView extends PureComponent {
|
|
|
138
137
|
order: 1000,
|
|
139
138
|
menuElement: /*#__PURE__*/React.createElement("div", {
|
|
140
139
|
className: "log-level-menu-controls"
|
|
141
|
-
}, /*#__PURE__*/React.createElement(
|
|
142
|
-
|
|
143
|
-
className: "
|
|
140
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
141
|
+
kind: "ghost",
|
|
142
|
+
className: "log-level-toggle-all",
|
|
144
143
|
onClick: this.handleToggleAllClick
|
|
145
|
-
}, "Toggle All"), /*#__PURE__*/React.createElement(
|
|
146
|
-
|
|
147
|
-
className: "btn btn-link",
|
|
144
|
+
}, "Toggle All"), /*#__PURE__*/React.createElement(Button, {
|
|
145
|
+
kind: "ghost",
|
|
148
146
|
onClick: this.handleResetClick
|
|
149
147
|
}, "Reset"))
|
|
150
148
|
});
|
|
@@ -534,18 +532,20 @@ class LogView extends PureComponent {
|
|
|
534
532
|
className: "log-pane h-100 w-100"
|
|
535
533
|
}, /*#__PURE__*/React.createElement("div", {
|
|
536
534
|
className: "log-pane-menu"
|
|
537
|
-
}, /*#__PURE__*/React.createElement(
|
|
538
|
-
|
|
539
|
-
className: "btn
|
|
540
|
-
onClick: this.handleClearClick
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
}), /*#__PURE__*/React.createElement(
|
|
544
|
-
|
|
545
|
-
className: "btn
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
535
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
536
|
+
kind: "ghost",
|
|
537
|
+
className: "btn-clear-logs",
|
|
538
|
+
onClick: this.handleClearClick,
|
|
539
|
+
icon: dhTrashUndo,
|
|
540
|
+
tooltip: "Clear log"
|
|
541
|
+
}), /*#__PURE__*/React.createElement(Button, {
|
|
542
|
+
kind: "ghost",
|
|
543
|
+
className: "btn-link-icon btn-overflow",
|
|
544
|
+
icon: vsGear,
|
|
545
|
+
tooltip: "Log Settings",
|
|
546
|
+
onClick: () => {// no-op: click is handled in `DropdownMenu'
|
|
547
|
+
}
|
|
548
|
+
}, /*#__PURE__*/React.createElement(DropdownMenu, {
|
|
549
549
|
actions: actions,
|
|
550
550
|
popperClassName: "log-level-menu-popper",
|
|
551
551
|
popperOptions: popperOptions
|
package/dist/log/LogView.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LogView.js","names":["React","PureComponent","FontAwesomeIcon","DropdownMenu","Tooltip","vsGear","dhTrashUndo","assertNotNull","monaco","ConsoleUtils","LogLevel","LogLevelMenuItem","LogView","getLogText","logItem","date","Date","micros","timestamp","formatTimestamp","logLevel","message","constructor","props","handleClearClick","bind","handleFlushTimeout","handleLogMessage","handleMenuItemClick","handleResetClick","handleResize","handleToggleAllClick","logLevelMenuItems","editorContainer","bufferedMessages","messages","state","shownLogLevels","componentDidMount","resetLogLevels","initMonaco","startListening","window","addEventListener","componentDidUpdate","prevProps","prevState","updateDimensions","refreshLogText","session","stopListening","clearLogs","componentWillUnmount","stopFlushTimer","destroyMonaco","removeEventListener","getMenuActions","actions","push","menuElement","group","order","i","AllLogLevels","on","title","element","length","isEnabled","DefaultLogLevels","indexOf","setState","cancelListener","onLogMessage","undefined","editor","create","copyWithSyntaxHighlighting","fixedOverflowWidgets","folding","fontFamily","glyphMargin","language","lineDecorationsWidth","lineNumbersMinChars","minimap","enabled","readOnly","renderLineHighlight","scrollBeyondLastLine","value","wordWrap","addCommand","KeyCode","Escape","KeyMod","Shift","position","getPosition","setPosition","dispose","triggerFindWidget","focus","trigger","toggleAll","isAllEnabled","updatedLogLevels","toggleLogLevel","updateLogLevels","appendLogText","text","model","getModel","line","getLineCount","column","getLineLength","isBottomVisible","edits","range","startLineNumber","startColumn","endLineNumber","endColumn","forceMoveMarkers","applyEdits","lineCount","revealLine","truncateLogIfNecessary","logText","charAt","trimRight","setValue","maxLogSize","splice","truncateSize","scrollToBottom","isLineVisible","visibleRanges","getVisibleRanges","isLogItemVisible","flush","queue","flushTimer","setTimeout","bufferTimeout","clearTimeout","layout","render","popperOptions","placement","STDOUT","ERROR","FATAL","STDERR","WARN","INFO","DEBUG","TRACE"],"sources":["../../src/log/LogView.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { DropdownActions, DropdownMenu, Tooltip } from '@deephaven/components';\nimport { vsGear, dhTrashUndo } from '@deephaven/icons';\nimport { assertNotNull } from '@deephaven/utils';\nimport { IdeSession, LogItem } from '@deephaven/jsapi-shim';\nimport { Placement } from 'popper.js';\nimport * as monaco from 'monaco-editor';\nimport ConsoleUtils from '../common/ConsoleUtils';\nimport LogLevel from './LogLevel';\nimport './LogView.scss';\nimport LogLevelMenuItem from './LogLevelMenuItem';\n\ninterface LogViewProps {\n session: IdeSession;\n}\n\ninterface LogViewState {\n shownLogLevels: Record<string, boolean>;\n}\n/**\n * Log view contents. Uses a monaco editor to display/search the contents of the log.\n */\nclass LogView extends PureComponent<LogViewProps, LogViewState> {\n static DefaultLogLevels = [\n LogLevel.STDOUT,\n LogLevel.ERROR,\n LogLevel.FATAL,\n LogLevel.STDERR,\n LogLevel.WARN,\n ];\n\n static AllLogLevels = [\n LogLevel.INFO,\n LogLevel.STDOUT,\n LogLevel.ERROR,\n LogLevel.FATAL,\n LogLevel.STDERR,\n LogLevel.WARN,\n LogLevel.DEBUG,\n LogLevel.TRACE,\n ];\n\n /** ms to buffer log messages before processing them */\n static bufferTimeout = 16;\n\n /** Maximum number of messages to store in the log */\n static maxLogSize = 131072;\n\n static truncateSize = 65536;\n\n static getLogText(logItem: LogItem): string {\n const date = new Date(logItem.micros / 1000);\n const timestamp = ConsoleUtils.formatTimestamp(date);\n return `${timestamp} ${logItem.logLevel} ${logItem.message}`;\n }\n\n constructor(props: LogViewProps) {\n super(props);\n\n this.handleClearClick = this.handleClearClick.bind(this);\n this.handleFlushTimeout = this.handleFlushTimeout.bind(this);\n this.handleLogMessage = this.handleLogMessage.bind(this);\n this.handleMenuItemClick = this.handleMenuItemClick.bind(this);\n this.handleResetClick = this.handleResetClick.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleToggleAllClick = this.handleToggleAllClick.bind(this);\n\n this.logLevelMenuItems = {};\n\n this.editorContainer = null;\n\n this.bufferedMessages = [];\n this.messages = [];\n\n this.state = {\n shownLogLevels: {},\n };\n }\n\n componentDidMount(): void {\n this.resetLogLevels();\n this.initMonaco();\n this.startListening();\n\n window.addEventListener('resize', this.handleResize);\n }\n\n componentDidUpdate(prevProps: LogViewProps, prevState: LogViewState): void {\n this.updateDimensions();\n\n const { shownLogLevels } = this.state;\n if (prevState.shownLogLevels !== shownLogLevels) {\n this.refreshLogText();\n }\n\n const { session } = this.props;\n if (prevProps.session !== session) {\n this.stopListening();\n this.startListening();\n // clear logs when starting a new console\n this.clearLogs();\n }\n }\n\n componentWillUnmount(): void {\n this.stopFlushTimer();\n this.stopListening();\n this.destroyMonaco();\n\n window.removeEventListener('resize', this.handleResize);\n }\n\n cancelListener?: () => void | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n editorContainer: HTMLDivElement | null;\n\n logLevelMenuItems: Record<string, LogLevelMenuItem>;\n\n flushTimer?: ReturnType<typeof setTimeout>;\n\n bufferedMessages: LogItem[];\n\n messages: LogItem[];\n\n getMenuActions(shownLogLevels: Record<string, boolean>): DropdownActions {\n const actions = [];\n\n actions.push({\n menuElement: (\n <div className=\"log-level-menu-title\">Display Log Levels</div>\n ),\n group: 1,\n order: 10,\n });\n\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n const on =\n shownLogLevels[logLevel] != null ? shownLogLevels[logLevel] : false;\n actions.push({\n title: logLevel,\n group: 1,\n order: i + 100,\n\n menuElement: (\n <LogLevelMenuItem\n logLevel={logLevel}\n on={on}\n onClick={this.handleMenuItemClick}\n ref={element => {\n if (element != null) {\n this.logLevelMenuItems[logLevel] = element;\n }\n }}\n />\n ),\n });\n }\n\n actions.push({\n group: 1,\n order: 1000,\n menuElement: (\n <div className=\"log-level-menu-controls\">\n <button\n type=\"button\"\n className=\"btn btn-link log-level-toggle-all\"\n onClick={this.handleToggleAllClick}\n >\n Toggle All\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={this.handleResetClick}\n >\n Reset\n </button>\n </div>\n ),\n });\n\n return actions;\n }\n\n resetLogLevels(): void {\n const shownLogLevels: Record<string, boolean> = {};\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n const isEnabled = LogView.DefaultLogLevels.indexOf(logLevel) >= 0;\n shownLogLevels[logLevel] = isEnabled;\n }\n\n this.setState({ shownLogLevels });\n }\n\n startListening(): void {\n const { session } = this.props;\n this.cancelListener = session.onLogMessage(this.handleLogMessage);\n }\n\n stopListening(): void {\n if (this.cancelListener != null) {\n this.cancelListener();\n this.cancelListener = undefined;\n }\n }\n\n initMonaco(): void {\n assertNotNull(this.editorContainer);\n this.editor = monaco.editor.create(this.editorContainer, {\n copyWithSyntaxHighlighting: false,\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language: 'log',\n lineDecorationsWidth: 0,\n // I commented this out since '' is not a valid parameter for line Numbers\n // lineNumbers: '',\n lineNumbersMinChars: 0,\n minimap: { enabled: false },\n readOnly: true,\n renderLineHighlight: 'none',\n scrollBeyondLastLine: false,\n value: '',\n wordWrap: 'on',\n });\n\n // When find widget is open, escape key closes it.\n // Instead, capture it and do nothing. Same for shift-escape.\n this.editor.addCommand(monaco.KeyCode.Escape, () => undefined);\n this.editor.addCommand(\n // eslint-disable-next-line no-bitwise\n monaco.KeyMod.Shift | monaco.KeyCode.Escape,\n () => undefined\n );\n\n // Restore regular escape to clear selection, when editorText has focus.\n this.editor.addCommand(\n monaco.KeyCode.Escape,\n () => {\n const position = this.editor?.getPosition();\n assertNotNull(position);\n this.editor?.setPosition(position);\n },\n 'findWidgetVisible && editorTextFocus'\n );\n\n this.editor.addCommand(\n // eslint-disable-next-line no-bitwise\n monaco.KeyMod.Shift | monaco.KeyCode.Escape,\n () => {\n const position = this.editor?.getPosition();\n assertNotNull(position);\n this.editor?.setPosition(position);\n },\n 'findWidgetVisible && editorTextFocus'\n );\n }\n\n destroyMonaco(): void {\n if (this.editor) {\n this.editor.dispose();\n this.editor = undefined;\n }\n }\n\n triggerFindWidget(): void {\n // The actions.find action can no longer be triggered when the editor is not in focus, with monaco 0.22.x.\n // As a workaround, just focus the editor before triggering the action\n // https://github.com/microsoft/monaco-editor/issues/2355\n this.editor?.focus();\n this.editor?.trigger('keyboard', 'actions.find', undefined);\n }\n\n toggleAll(): void {\n const { shownLogLevels } = this.state;\n let isAllEnabled = true;\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n if (!shownLogLevels[logLevel]) {\n isAllEnabled = false;\n break;\n }\n }\n\n if (isAllEnabled) {\n this.setState({ shownLogLevels: {} });\n } else {\n const updatedLogLevels: Record<string, boolean> = {};\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n updatedLogLevels[logLevel] = true;\n }\n this.setState({ shownLogLevels: updatedLogLevels });\n }\n }\n\n toggleLogLevel(logLevel: string): void {\n const { shownLogLevels } = this.state;\n const isEnabled = shownLogLevels[logLevel];\n const updatedLogLevels: Record<string, boolean> = {};\n updatedLogLevels[logLevel] = !isEnabled;\n this.updateLogLevels(updatedLogLevels);\n }\n\n updateLogLevels(updatedLogLevels: Record<string, boolean>): void {\n let { shownLogLevels } = this.state;\n shownLogLevels = { ...shownLogLevels, ...updatedLogLevels };\n this.setState({ shownLogLevels });\n }\n\n appendLogText(text: string): void {\n if (!this.editor) {\n return;\n }\n\n const model = this.editor.getModel();\n let line = model?.getLineCount();\n assertNotNull(line);\n let column = model?.getLineLength(line);\n assertNotNull(column);\n const isBottomVisible = this.isBottomVisible();\n\n const edits = [];\n if (column > 0) {\n edits.push({\n range: {\n startLineNumber: line,\n startColumn: column + 1,\n endLineNumber: line,\n endColumn: column + 1,\n },\n text: '\\n',\n forceMoveMarkers: true,\n });\n line += 1;\n column = 0;\n }\n\n edits.push({\n range: {\n startLineNumber: line,\n startColumn: column,\n endLineNumber: line,\n endColumn: column,\n },\n text,\n forceMoveMarkers: true,\n });\n\n model?.applyEdits(edits);\n\n if (isBottomVisible) {\n const lineCount = model?.getLineCount();\n assertNotNull(lineCount);\n this.editor.revealLine(lineCount, 1);\n }\n }\n\n /**\n * Refresh the contents of the log component with the updated filter text\n */\n refreshLogText(): void {\n if (!this.editor) {\n return;\n }\n\n this.truncateLogIfNecessary();\n\n const { shownLogLevels } = this.state;\n const isBottomVisible = this.isBottomVisible();\n\n let text = '';\n for (let i = 0; i < this.messages.length; i += 1) {\n const message = this.messages[i];\n if (shownLogLevels[message.logLevel]) {\n const logText = LogView.getLogText(message);\n if (logText.length > 0) {\n text += logText;\n if (logText.charAt(logText.length - 1) !== '\\n') {\n text += '\\n';\n }\n }\n }\n }\n text = text.trimRight();\n\n this.editor.setValue(text);\n\n if (isBottomVisible) {\n const line = this.editor.getModel()?.getLineCount();\n assertNotNull(line);\n this.editor.revealLine(line, 1);\n }\n\n this.stopFlushTimer();\n this.bufferedMessages = [];\n }\n\n truncateLogIfNecessary(): void {\n if (this.messages.length > LogView.maxLogSize) {\n this.messages = this.messages.splice(\n this.messages.length - LogView.truncateSize\n );\n }\n }\n\n scrollToBottom(): void {\n if (!this.editor) {\n return;\n }\n\n const line = this.editor?.getModel?.()?.getLineCount();\n assertNotNull(line);\n this.editor.revealLine(line, 1);\n }\n\n isBottomVisible(): boolean {\n if (!this.editor) {\n return true;\n }\n\n const model = this.editor.getModel();\n const line = model?.getLineCount();\n\n assertNotNull(line);\n return this.isLineVisible(line);\n }\n\n isLineVisible(line: number): boolean {\n const visibleRanges = this.editor?.getVisibleRanges();\n if (visibleRanges == null || visibleRanges.length === 0) {\n return false;\n }\n\n for (let i = 0; i < visibleRanges.length; i += 1) {\n const range = visibleRanges[i];\n if (range.startLineNumber <= line && line <= range.endLineNumber) {\n return true;\n }\n }\n\n return false;\n }\n\n /** Checks if the given log message is visible with the current filters */\n isLogItemVisible(message: LogItem): boolean {\n const { shownLogLevels } = this.state;\n return shownLogLevels[message.logLevel];\n }\n\n flush(): void {\n let text = '';\n for (let i = 0; i < this.bufferedMessages.length; i += 1) {\n const message = this.bufferedMessages[i];\n const logText = LogView.getLogText(message);\n text += logText;\n if (logText.charAt(logText.length - 1) !== '\\n') {\n text += '\\n';\n }\n }\n\n this.bufferedMessages = [];\n\n this.appendLogText(text);\n }\n\n queue(message: LogItem): void {\n this.bufferedMessages.push(message);\n if (this.bufferedMessages.length === 1) {\n this.flushTimer = setTimeout(\n this.handleFlushTimeout,\n LogView.bufferTimeout\n );\n }\n }\n\n stopFlushTimer(): void {\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = undefined;\n }\n }\n\n updateDimensions(): void {\n if (this.editor) {\n this.editor.layout();\n }\n }\n\n handleClearClick(): void {\n this.clearLogs();\n }\n\n clearLogs(): void {\n this.messages = [];\n this.refreshLogText();\n }\n\n handleFlushTimeout(): void {\n this.stopFlushTimer();\n this.flush();\n }\n\n handleLogMessage(message: LogItem): void {\n this.messages.push(message);\n\n if (this.editor && this.isLogItemVisible(message)) {\n this.queue(message);\n }\n }\n\n handleMenuItemClick(logLevel: string): void {\n this.toggleLogLevel(logLevel);\n }\n\n handleResetClick(): void {\n this.resetLogLevels();\n }\n\n handleResize(): void {\n this.updateDimensions();\n }\n\n handleToggleAllClick(): void {\n this.toggleAll();\n }\n\n render(): ReactElement {\n const popperOptions = { placement: 'bottom-end' as Placement };\n const { shownLogLevels } = this.state;\n const actions = this.getMenuActions(shownLogLevels);\n return (\n <div className=\"log-pane h-100 w-100\">\n <div className=\"log-pane-menu\">\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon btn-clear-logs\"\n onClick={this.handleClearClick}\n >\n <FontAwesomeIcon icon={dhTrashUndo} />\n <Tooltip>Clear log</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon btn-overflow\"\n >\n <FontAwesomeIcon icon={vsGear} />\n <Tooltip>Log Settings</Tooltip>\n <DropdownMenu\n actions={actions}\n popperClassName=\"log-level-menu-popper\"\n popperOptions={popperOptions}\n />\n </button>\n </div>\n <div\n className=\"log-pane-editor h-100 w-100\"\n ref={editorContainer => {\n this.editorContainer = editorContainer;\n }}\n />\n </div>\n );\n }\n}\n\nexport default LogView;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LogView.js","names":["React","PureComponent","Button","DropdownMenu","vsGear","dhTrashUndo","assertNotNull","monaco","ConsoleUtils","LogLevel","LogLevelMenuItem","LogView","getLogText","logItem","date","Date","micros","timestamp","formatTimestamp","logLevel","message","constructor","props","handleClearClick","bind","handleFlushTimeout","handleLogMessage","handleMenuItemClick","handleResetClick","handleResize","handleToggleAllClick","logLevelMenuItems","editorContainer","bufferedMessages","messages","state","shownLogLevels","componentDidMount","resetLogLevels","initMonaco","startListening","window","addEventListener","componentDidUpdate","prevProps","prevState","updateDimensions","refreshLogText","session","stopListening","clearLogs","componentWillUnmount","stopFlushTimer","destroyMonaco","removeEventListener","getMenuActions","actions","push","menuElement","group","order","i","AllLogLevels","on","title","element","length","isEnabled","DefaultLogLevels","indexOf","setState","cancelListener","onLogMessage","undefined","editor","create","copyWithSyntaxHighlighting","fixedOverflowWidgets","folding","fontFamily","glyphMargin","language","lineDecorationsWidth","lineNumbersMinChars","minimap","enabled","readOnly","renderLineHighlight","scrollBeyondLastLine","value","wordWrap","addCommand","KeyCode","Escape","KeyMod","Shift","position","getPosition","setPosition","dispose","triggerFindWidget","focus","trigger","toggleAll","isAllEnabled","updatedLogLevels","toggleLogLevel","updateLogLevels","appendLogText","text","model","getModel","line","getLineCount","column","getLineLength","isBottomVisible","edits","range","startLineNumber","startColumn","endLineNumber","endColumn","forceMoveMarkers","applyEdits","lineCount","revealLine","truncateLogIfNecessary","logText","charAt","trimRight","setValue","maxLogSize","splice","truncateSize","scrollToBottom","isLineVisible","visibleRanges","getVisibleRanges","isLogItemVisible","flush","queue","flushTimer","setTimeout","bufferTimeout","clearTimeout","layout","render","popperOptions","placement","STDOUT","ERROR","FATAL","STDERR","WARN","INFO","DEBUG","TRACE"],"sources":["../../src/log/LogView.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement } from 'react';\nimport { Button, DropdownActions, DropdownMenu } from '@deephaven/components';\nimport { vsGear, dhTrashUndo } from '@deephaven/icons';\nimport { assertNotNull } from '@deephaven/utils';\nimport { IdeSession, LogItem } from '@deephaven/jsapi-shim';\nimport { Placement } from 'popper.js';\nimport * as monaco from 'monaco-editor';\nimport ConsoleUtils from '../common/ConsoleUtils';\nimport LogLevel from './LogLevel';\nimport './LogView.scss';\nimport LogLevelMenuItem from './LogLevelMenuItem';\n\ninterface LogViewProps {\n session: IdeSession;\n}\n\ninterface LogViewState {\n shownLogLevels: Record<string, boolean>;\n}\n/**\n * Log view contents. Uses a monaco editor to display/search the contents of the log.\n */\nclass LogView extends PureComponent<LogViewProps, LogViewState> {\n static DefaultLogLevels = [\n LogLevel.STDOUT,\n LogLevel.ERROR,\n LogLevel.FATAL,\n LogLevel.STDERR,\n LogLevel.WARN,\n ];\n\n static AllLogLevels = [\n LogLevel.INFO,\n LogLevel.STDOUT,\n LogLevel.ERROR,\n LogLevel.FATAL,\n LogLevel.STDERR,\n LogLevel.WARN,\n LogLevel.DEBUG,\n LogLevel.TRACE,\n ];\n\n /** ms to buffer log messages before processing them */\n static bufferTimeout = 16;\n\n /** Maximum number of messages to store in the log */\n static maxLogSize = 131072;\n\n static truncateSize = 65536;\n\n static getLogText(logItem: LogItem): string {\n const date = new Date(logItem.micros / 1000);\n const timestamp = ConsoleUtils.formatTimestamp(date);\n return `${timestamp} ${logItem.logLevel} ${logItem.message}`;\n }\n\n constructor(props: LogViewProps) {\n super(props);\n\n this.handleClearClick = this.handleClearClick.bind(this);\n this.handleFlushTimeout = this.handleFlushTimeout.bind(this);\n this.handleLogMessage = this.handleLogMessage.bind(this);\n this.handleMenuItemClick = this.handleMenuItemClick.bind(this);\n this.handleResetClick = this.handleResetClick.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleToggleAllClick = this.handleToggleAllClick.bind(this);\n\n this.logLevelMenuItems = {};\n\n this.editorContainer = null;\n\n this.bufferedMessages = [];\n this.messages = [];\n\n this.state = {\n shownLogLevels: {},\n };\n }\n\n componentDidMount(): void {\n this.resetLogLevels();\n this.initMonaco();\n this.startListening();\n\n window.addEventListener('resize', this.handleResize);\n }\n\n componentDidUpdate(prevProps: LogViewProps, prevState: LogViewState): void {\n this.updateDimensions();\n\n const { shownLogLevels } = this.state;\n if (prevState.shownLogLevels !== shownLogLevels) {\n this.refreshLogText();\n }\n\n const { session } = this.props;\n if (prevProps.session !== session) {\n this.stopListening();\n this.startListening();\n // clear logs when starting a new console\n this.clearLogs();\n }\n }\n\n componentWillUnmount(): void {\n this.stopFlushTimer();\n this.stopListening();\n this.destroyMonaco();\n\n window.removeEventListener('resize', this.handleResize);\n }\n\n cancelListener?: () => void | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n editorContainer: HTMLDivElement | null;\n\n logLevelMenuItems: Record<string, LogLevelMenuItem>;\n\n flushTimer?: ReturnType<typeof setTimeout>;\n\n bufferedMessages: LogItem[];\n\n messages: LogItem[];\n\n getMenuActions(shownLogLevels: Record<string, boolean>): DropdownActions {\n const actions = [];\n\n actions.push({\n menuElement: (\n <div className=\"log-level-menu-title\">Display Log Levels</div>\n ),\n group: 1,\n order: 10,\n });\n\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n const on =\n shownLogLevels[logLevel] != null ? shownLogLevels[logLevel] : false;\n actions.push({\n title: logLevel,\n group: 1,\n order: i + 100,\n\n menuElement: (\n <LogLevelMenuItem\n logLevel={logLevel}\n on={on}\n onClick={this.handleMenuItemClick}\n ref={element => {\n if (element != null) {\n this.logLevelMenuItems[logLevel] = element;\n }\n }}\n />\n ),\n });\n }\n\n actions.push({\n group: 1,\n order: 1000,\n menuElement: (\n <div className=\"log-level-menu-controls\">\n <Button\n kind=\"ghost\"\n className=\"log-level-toggle-all\"\n onClick={this.handleToggleAllClick}\n >\n Toggle All\n </Button>\n <Button kind=\"ghost\" onClick={this.handleResetClick}>\n Reset\n </Button>\n </div>\n ),\n });\n\n return actions;\n }\n\n resetLogLevels(): void {\n const shownLogLevels: Record<string, boolean> = {};\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n const isEnabled = LogView.DefaultLogLevels.indexOf(logLevel) >= 0;\n shownLogLevels[logLevel] = isEnabled;\n }\n\n this.setState({ shownLogLevels });\n }\n\n startListening(): void {\n const { session } = this.props;\n this.cancelListener = session.onLogMessage(this.handleLogMessage);\n }\n\n stopListening(): void {\n if (this.cancelListener != null) {\n this.cancelListener();\n this.cancelListener = undefined;\n }\n }\n\n initMonaco(): void {\n assertNotNull(this.editorContainer);\n this.editor = monaco.editor.create(this.editorContainer, {\n copyWithSyntaxHighlighting: false,\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language: 'log',\n lineDecorationsWidth: 0,\n // I commented this out since '' is not a valid parameter for line Numbers\n // lineNumbers: '',\n lineNumbersMinChars: 0,\n minimap: { enabled: false },\n readOnly: true,\n renderLineHighlight: 'none',\n scrollBeyondLastLine: false,\n value: '',\n wordWrap: 'on',\n });\n\n // When find widget is open, escape key closes it.\n // Instead, capture it and do nothing. Same for shift-escape.\n this.editor.addCommand(monaco.KeyCode.Escape, () => undefined);\n this.editor.addCommand(\n // eslint-disable-next-line no-bitwise\n monaco.KeyMod.Shift | monaco.KeyCode.Escape,\n () => undefined\n );\n\n // Restore regular escape to clear selection, when editorText has focus.\n this.editor.addCommand(\n monaco.KeyCode.Escape,\n () => {\n const position = this.editor?.getPosition();\n assertNotNull(position);\n this.editor?.setPosition(position);\n },\n 'findWidgetVisible && editorTextFocus'\n );\n\n this.editor.addCommand(\n // eslint-disable-next-line no-bitwise\n monaco.KeyMod.Shift | monaco.KeyCode.Escape,\n () => {\n const position = this.editor?.getPosition();\n assertNotNull(position);\n this.editor?.setPosition(position);\n },\n 'findWidgetVisible && editorTextFocus'\n );\n }\n\n destroyMonaco(): void {\n if (this.editor) {\n this.editor.dispose();\n this.editor = undefined;\n }\n }\n\n triggerFindWidget(): void {\n // The actions.find action can no longer be triggered when the editor is not in focus, with monaco 0.22.x.\n // As a workaround, just focus the editor before triggering the action\n // https://github.com/microsoft/monaco-editor/issues/2355\n this.editor?.focus();\n this.editor?.trigger('keyboard', 'actions.find', undefined);\n }\n\n toggleAll(): void {\n const { shownLogLevels } = this.state;\n let isAllEnabled = true;\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n if (!shownLogLevels[logLevel]) {\n isAllEnabled = false;\n break;\n }\n }\n\n if (isAllEnabled) {\n this.setState({ shownLogLevels: {} });\n } else {\n const updatedLogLevels: Record<string, boolean> = {};\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n updatedLogLevels[logLevel] = true;\n }\n this.setState({ shownLogLevels: updatedLogLevels });\n }\n }\n\n toggleLogLevel(logLevel: string): void {\n const { shownLogLevels } = this.state;\n const isEnabled = shownLogLevels[logLevel];\n const updatedLogLevels: Record<string, boolean> = {};\n updatedLogLevels[logLevel] = !isEnabled;\n this.updateLogLevels(updatedLogLevels);\n }\n\n updateLogLevels(updatedLogLevels: Record<string, boolean>): void {\n let { shownLogLevels } = this.state;\n shownLogLevels = { ...shownLogLevels, ...updatedLogLevels };\n this.setState({ shownLogLevels });\n }\n\n appendLogText(text: string): void {\n if (!this.editor) {\n return;\n }\n\n const model = this.editor.getModel();\n let line = model?.getLineCount();\n assertNotNull(line);\n let column = model?.getLineLength(line);\n assertNotNull(column);\n const isBottomVisible = this.isBottomVisible();\n\n const edits = [];\n if (column > 0) {\n edits.push({\n range: {\n startLineNumber: line,\n startColumn: column + 1,\n endLineNumber: line,\n endColumn: column + 1,\n },\n text: '\\n',\n forceMoveMarkers: true,\n });\n line += 1;\n column = 0;\n }\n\n edits.push({\n range: {\n startLineNumber: line,\n startColumn: column,\n endLineNumber: line,\n endColumn: column,\n },\n text,\n forceMoveMarkers: true,\n });\n\n model?.applyEdits(edits);\n\n if (isBottomVisible) {\n const lineCount = model?.getLineCount();\n assertNotNull(lineCount);\n this.editor.revealLine(lineCount, 1);\n }\n }\n\n /**\n * Refresh the contents of the log component with the updated filter text\n */\n refreshLogText(): void {\n if (!this.editor) {\n return;\n }\n\n this.truncateLogIfNecessary();\n\n const { shownLogLevels } = this.state;\n const isBottomVisible = this.isBottomVisible();\n\n let text = '';\n for (let i = 0; i < this.messages.length; i += 1) {\n const message = this.messages[i];\n if (shownLogLevels[message.logLevel]) {\n const logText = LogView.getLogText(message);\n if (logText.length > 0) {\n text += logText;\n if (logText.charAt(logText.length - 1) !== '\\n') {\n text += '\\n';\n }\n }\n }\n }\n text = text.trimRight();\n\n this.editor.setValue(text);\n\n if (isBottomVisible) {\n const line = this.editor.getModel()?.getLineCount();\n assertNotNull(line);\n this.editor.revealLine(line, 1);\n }\n\n this.stopFlushTimer();\n this.bufferedMessages = [];\n }\n\n truncateLogIfNecessary(): void {\n if (this.messages.length > LogView.maxLogSize) {\n this.messages = this.messages.splice(\n this.messages.length - LogView.truncateSize\n );\n }\n }\n\n scrollToBottom(): void {\n if (!this.editor) {\n return;\n }\n\n const line = this.editor?.getModel?.()?.getLineCount();\n assertNotNull(line);\n this.editor.revealLine(line, 1);\n }\n\n isBottomVisible(): boolean {\n if (!this.editor) {\n return true;\n }\n\n const model = this.editor.getModel();\n const line = model?.getLineCount();\n\n assertNotNull(line);\n return this.isLineVisible(line);\n }\n\n isLineVisible(line: number): boolean {\n const visibleRanges = this.editor?.getVisibleRanges();\n if (visibleRanges == null || visibleRanges.length === 0) {\n return false;\n }\n\n for (let i = 0; i < visibleRanges.length; i += 1) {\n const range = visibleRanges[i];\n if (range.startLineNumber <= line && line <= range.endLineNumber) {\n return true;\n }\n }\n\n return false;\n }\n\n /** Checks if the given log message is visible with the current filters */\n isLogItemVisible(message: LogItem): boolean {\n const { shownLogLevels } = this.state;\n return shownLogLevels[message.logLevel];\n }\n\n flush(): void {\n let text = '';\n for (let i = 0; i < this.bufferedMessages.length; i += 1) {\n const message = this.bufferedMessages[i];\n const logText = LogView.getLogText(message);\n text += logText;\n if (logText.charAt(logText.length - 1) !== '\\n') {\n text += '\\n';\n }\n }\n\n this.bufferedMessages = [];\n\n this.appendLogText(text);\n }\n\n queue(message: LogItem): void {\n this.bufferedMessages.push(message);\n if (this.bufferedMessages.length === 1) {\n this.flushTimer = setTimeout(\n this.handleFlushTimeout,\n LogView.bufferTimeout\n );\n }\n }\n\n stopFlushTimer(): void {\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = undefined;\n }\n }\n\n updateDimensions(): void {\n if (this.editor) {\n this.editor.layout();\n }\n }\n\n handleClearClick(): void {\n this.clearLogs();\n }\n\n clearLogs(): void {\n this.messages = [];\n this.refreshLogText();\n }\n\n handleFlushTimeout(): void {\n this.stopFlushTimer();\n this.flush();\n }\n\n handleLogMessage(message: LogItem): void {\n this.messages.push(message);\n\n if (this.editor && this.isLogItemVisible(message)) {\n this.queue(message);\n }\n }\n\n handleMenuItemClick(logLevel: string): void {\n this.toggleLogLevel(logLevel);\n }\n\n handleResetClick(): void {\n this.resetLogLevels();\n }\n\n handleResize(): void {\n this.updateDimensions();\n }\n\n handleToggleAllClick(): void {\n this.toggleAll();\n }\n\n render(): ReactElement {\n const popperOptions = { placement: 'bottom-end' as Placement };\n const { shownLogLevels } = this.state;\n const actions = this.getMenuActions(shownLogLevels);\n return (\n <div className=\"log-pane h-100 w-100\">\n <div className=\"log-pane-menu\">\n <Button\n kind=\"ghost\"\n className=\"btn-clear-logs\"\n onClick={this.handleClearClick}\n icon={dhTrashUndo}\n tooltip=\"Clear log\"\n />\n <Button\n kind=\"ghost\"\n className=\"btn-link-icon btn-overflow\"\n icon={vsGear}\n tooltip=\"Log Settings\"\n onClick={() => {\n // no-op: click is handled in `DropdownMenu'\n }}\n >\n <DropdownMenu\n actions={actions}\n popperClassName=\"log-level-menu-popper\"\n popperOptions={popperOptions}\n />\n </Button>\n </div>\n <div\n className=\"log-pane-editor h-100 w-100\"\n ref={editorContainer => {\n this.editorContainer = editorContainer;\n }}\n />\n </div>\n );\n }\n}\n\nexport default LogView;\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/console",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.20.1-beta.0+d483569",
|
|
4
4
|
"description": "Deephaven Console",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -31,13 +31,13 @@
|
|
|
31
31
|
"start": "cross-env NODE_ENV=development npm run watch"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@deephaven/chart": "^0.
|
|
35
|
-
"@deephaven/components": "^0.
|
|
36
|
-
"@deephaven/icons": "^0.
|
|
37
|
-
"@deephaven/jsapi-shim": "^0.
|
|
38
|
-
"@deephaven/log": "^0.
|
|
39
|
-
"@deephaven/storage": "^0.
|
|
40
|
-
"@deephaven/utils": "^0.
|
|
34
|
+
"@deephaven/chart": "^0.20.1-beta.0+d483569",
|
|
35
|
+
"@deephaven/components": "^0.20.1-beta.0+d483569",
|
|
36
|
+
"@deephaven/icons": "^0.20.1-beta.0+d483569",
|
|
37
|
+
"@deephaven/jsapi-shim": "^0.20.1-beta.0+d483569",
|
|
38
|
+
"@deephaven/log": "^0.20.1-beta.0+d483569",
|
|
39
|
+
"@deephaven/storage": "^0.20.1-beta.0+d483569",
|
|
40
|
+
"@deephaven/utils": "^0.20.1-beta.0+d483569",
|
|
41
41
|
"@fortawesome/react-fontawesome": "^0.1.18",
|
|
42
42
|
"classnames": "^2.3.1",
|
|
43
43
|
"lodash.debounce": "^4.0.8",
|
|
@@ -55,8 +55,8 @@
|
|
|
55
55
|
"react-dom": "^17.x"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
|
-
"@deephaven/mocks": "^0.
|
|
59
|
-
"@deephaven/tsconfig": "^0.
|
|
58
|
+
"@deephaven/mocks": "^0.20.1-beta.0+d483569",
|
|
59
|
+
"@deephaven/tsconfig": "^0.20.1-beta.0+d483569"
|
|
60
60
|
},
|
|
61
61
|
"files": [
|
|
62
62
|
"dist"
|
|
@@ -67,5 +67,5 @@
|
|
|
67
67
|
"publishConfig": {
|
|
68
68
|
"access": "public"
|
|
69
69
|
},
|
|
70
|
-
"gitHead": "
|
|
70
|
+
"gitHead": "d483569ffe9aadc229d8869aee1e4f38ca6b3c4a"
|
|
71
71
|
}
|