@deephaven/iris-grid 0.46.1-beta.0 → 0.46.1-beta.4
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/AdvancedFilterCreator.js +122 -102
- package/dist/AdvancedFilterCreator.js.map +1 -1
- package/dist/AdvancedFilterCreatorFilterItem.js +47 -38
- package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.js +52 -40
- package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.js +35 -28
- package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
- package/dist/ColumnStatistics.js +74 -54
- package/dist/ColumnStatistics.js.map +1 -1
- package/dist/CrossColumnSearch.js +113 -90
- package/dist/CrossColumnSearch.js.map +1 -1
- package/dist/FilterInputField.js +42 -35
- package/dist/FilterInputField.js.map +1 -1
- package/dist/GotoRow.js +226 -193
- package/dist/GotoRow.js.map +1 -1
- package/dist/IrisGrid.js +371 -344
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridBottomBar.js +11 -8
- package/dist/IrisGridBottomBar.js.map +1 -1
- package/dist/IrisGridCellOverflowModal.js +56 -50
- package/dist/IrisGridCellOverflowModal.js.map +1 -1
- package/dist/IrisGridCopyHandler.js +34 -24
- package/dist/IrisGridCopyHandler.js.map +1 -1
- package/dist/IrisGridPartitionSelector.js +59 -46
- package/dist/IrisGridPartitionSelector.js.map +1 -1
- package/dist/PartitionSelectorSearch.js +43 -36
- package/dist/PartitionSelectorSearch.js.map +1 -1
- package/dist/PendingDataBottomBar.js +34 -22
- package/dist/PendingDataBottomBar.js.map +1 -1
- package/dist/ToastBottomBar.js +5 -3
- package/dist/ToastBottomBar.js.map +1 -1
- package/dist/format-context-menus/CustomFormatAction.js +34 -25
- package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
- package/dist/format-context-menus/FormatContextMenuUtils.js +2 -1
- package/dist/format-context-menus/FormatContextMenuUtils.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js +50 -36
- package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
- package/dist/sidebar/AdvancedSettingsMenu.js +2 -1
- package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
- package/dist/sidebar/ChartBuilder.js +134 -107
- package/dist/sidebar/ChartBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.js +70 -48
- package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnInput.js +66 -53
- package/dist/sidebar/CustomColumnInput.js.map +1 -1
- package/dist/sidebar/InputEditor.js +15 -11
- package/dist/sidebar/InputEditor.js.map +1 -1
- package/dist/sidebar/RollupRows.js +130 -103
- package/dist/sidebar/RollupRows.js.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.js +49 -39
- package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
- package/dist/sidebar/TableCsvExporter.js +178 -128
- package/dist/sidebar/TableCsvExporter.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationEdit.js +67 -57
- package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.js +86 -63
- package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +30 -22
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionEditor.js +52 -47
- package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +52 -42
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +90 -67
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js +30 -22
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/StyleEditor.js +70 -58
- package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
- package/dist/sidebar/icons/BarIcon.js +21 -12
- package/dist/sidebar/icons/BarIcon.js.map +1 -1
- package/dist/sidebar/icons/FormatColumnWhereIcon.js +38 -30
- package/dist/sidebar/icons/FormatColumnWhereIcon.js.map +1 -1
- package/dist/sidebar/icons/FormatRowWhereIcon.js +32 -24
- package/dist/sidebar/icons/FormatRowWhereIcon.js.map +1 -1
- package/dist/sidebar/icons/HistogramIcon.js +21 -12
- package/dist/sidebar/icons/HistogramIcon.js.map +1 -1
- package/dist/sidebar/icons/LineIcon.js +24 -15
- package/dist/sidebar/icons/LineIcon.js.map +1 -1
- package/dist/sidebar/icons/PieIcon.js +21 -12
- package/dist/sidebar/icons/PieIcon.js.map +1 -1
- package/dist/sidebar/icons/ScatterIcon.js +71 -62
- package/dist/sidebar/icons/ScatterIcon.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +129 -121
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js +121 -87
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +40 -26
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +17 -14
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js +34 -28
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +2 -2
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js +8 -7
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -1
- package/package.json +15 -15
|
@@ -3,6 +3,7 @@ import classNames from 'classnames';
|
|
|
3
3
|
import { CSSTransition } from 'react-transition-group';
|
|
4
4
|
import { ThemeExport } from '@deephaven/components';
|
|
5
5
|
import "./IrisGridBottomBar.css";
|
|
6
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
7
|
export function IrisGridBottomBar(_ref) {
|
|
7
8
|
var {
|
|
8
9
|
animation = 'iris-grid-bottom-bar-slide-up',
|
|
@@ -15,7 +16,7 @@ export function IrisGridBottomBar(_ref) {
|
|
|
15
16
|
onExiting,
|
|
16
17
|
onExited
|
|
17
18
|
} = _ref;
|
|
18
|
-
return /*#__PURE__*/
|
|
19
|
+
return /*#__PURE__*/_jsx(CSSTransition, {
|
|
19
20
|
in: isShown,
|
|
20
21
|
timeout: ThemeExport.transitionMs,
|
|
21
22
|
classNames: animation,
|
|
@@ -24,13 +25,15 @@ export function IrisGridBottomBar(_ref) {
|
|
|
24
25
|
onExiting: onExiting,
|
|
25
26
|
onExited: onExited,
|
|
26
27
|
mountOnEnter: true,
|
|
27
|
-
unmountOnExit: true
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
unmountOnExit: true,
|
|
29
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
30
|
+
className: classNames('iris-grid-bottom-bar', className),
|
|
31
|
+
role: "presentation",
|
|
32
|
+
onClick: onClick,
|
|
33
|
+
onKeyPress: onClick,
|
|
34
|
+
children: children
|
|
35
|
+
})
|
|
36
|
+
});
|
|
34
37
|
}
|
|
35
38
|
export default IrisGridBottomBar;
|
|
36
39
|
//# sourceMappingURL=IrisGridBottomBar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridBottomBar.js","names":["React","classNames","CSSTransition","ThemeExport","IrisGridBottomBar","animation","children","className","isShown","onClick","onEntering","onEntered","onExiting","onExited","transitionMs"],"sources":["../src/IrisGridBottomBar.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport { ThemeExport } from '@deephaven/components';\nimport './IrisGridBottomBar.scss';\n\nexport type IrisGridBottomBarProps = {\n animation?: string;\n children: React.ReactNode;\n onClick?: () => void;\n onEntering?: () => void;\n onEntered?: () => void;\n onExiting?: () => void;\n onExited?: () => void;\n isShown: boolean;\n className?: string;\n};\n\nexport function IrisGridBottomBar({\n animation = 'iris-grid-bottom-bar-slide-up',\n children,\n className,\n isShown,\n onClick,\n onEntering,\n onEntered,\n onExiting,\n onExited,\n}: IrisGridBottomBarProps): JSX.Element {\n return (\n <CSSTransition\n in={isShown}\n timeout={ThemeExport.transitionMs}\n classNames={animation}\n onEntering={onEntering}\n onEntered={onEntered}\n onExiting={onExiting}\n onExited={onExited}\n mountOnEnter\n unmountOnExit\n >\n <div\n className={classNames('iris-grid-bottom-bar', className)}\n role=\"presentation\"\n onClick={onClick}\n onKeyPress={onClick}\n >\n {children}\n </div>\n </CSSTransition>\n );\n}\n\nexport default IrisGridBottomBar;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,aAAa,QAAQ,wBAAwB;AACtD,SAASC,WAAW,QAAQ,uBAAuB;AAAC;AAepD,OAAO,SAASC,iBAAiB,OAUO;EAAA,IAVN;IAChCC,SAAS,GAAG,+BAA+B;IAC3CC,QAAQ;IACRC,SAAS;IACTC,OAAO;IACPC,OAAO;IACPC,UAAU;IACVC,SAAS;IACTC,SAAS;IACTC;EACsB,CAAC;EACvB,oBACE,
|
|
1
|
+
{"version":3,"file":"IrisGridBottomBar.js","names":["React","classNames","CSSTransition","ThemeExport","IrisGridBottomBar","animation","children","className","isShown","onClick","onEntering","onEntered","onExiting","onExited","transitionMs"],"sources":["../src/IrisGridBottomBar.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport { ThemeExport } from '@deephaven/components';\nimport './IrisGridBottomBar.scss';\n\nexport type IrisGridBottomBarProps = {\n animation?: string;\n children: React.ReactNode;\n onClick?: () => void;\n onEntering?: () => void;\n onEntered?: () => void;\n onExiting?: () => void;\n onExited?: () => void;\n isShown: boolean;\n className?: string;\n};\n\nexport function IrisGridBottomBar({\n animation = 'iris-grid-bottom-bar-slide-up',\n children,\n className,\n isShown,\n onClick,\n onEntering,\n onEntered,\n onExiting,\n onExited,\n}: IrisGridBottomBarProps): JSX.Element {\n return (\n <CSSTransition\n in={isShown}\n timeout={ThemeExport.transitionMs}\n classNames={animation}\n onEntering={onEntering}\n onEntered={onEntered}\n onExiting={onExiting}\n onExited={onExited}\n mountOnEnter\n unmountOnExit\n >\n <div\n className={classNames('iris-grid-bottom-bar', className)}\n role=\"presentation\"\n onClick={onClick}\n onKeyPress={onClick}\n >\n {children}\n </div>\n </CSSTransition>\n );\n}\n\nexport default IrisGridBottomBar;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,aAAa,QAAQ,wBAAwB;AACtD,SAASC,WAAW,QAAQ,uBAAuB;AAAC;AAAA;AAepD,OAAO,SAASC,iBAAiB,OAUO;EAAA,IAVN;IAChCC,SAAS,GAAG,+BAA+B;IAC3CC,QAAQ;IACRC,SAAS;IACTC,OAAO;IACPC,OAAO;IACPC,UAAU;IACVC,SAAS;IACTC,SAAS;IACTC;EACsB,CAAC;EACvB,oBACE,KAAC,aAAa;IACZ,EAAE,EAAEL,OAAQ;IACZ,OAAO,EAAEL,WAAW,CAACW,YAAa;IAClC,UAAU,EAAET,SAAU;IACtB,UAAU,EAAEK,UAAW;IACvB,SAAS,EAAEC,SAAU;IACrB,SAAS,EAAEC,SAAU;IACrB,QAAQ,EAAEC,QAAS;IACnB,YAAY;IACZ,aAAa;IAAA,uBAEb;MACE,SAAS,EAAEZ,UAAU,CAAC,sBAAsB,EAAEM,SAAS,CAAE;MACzD,IAAI,EAAC,cAAc;MACnB,OAAO,EAAEE,OAAQ;MACjB,UAAU,EAAEA,OAAQ;MAAA,UAEnBH;IAAQ;EACL,EACQ;AAEpB;AAEA,eAAeF,iBAAiB"}
|
|
@@ -3,6 +3,8 @@ import { Editor } from '@deephaven/console';
|
|
|
3
3
|
import { Button, CopyButton, Modal, ModalBody, ModalHeader } from '@deephaven/components';
|
|
4
4
|
import { vsJson, vsListOrdered } from '@deephaven/icons';
|
|
5
5
|
import "./IrisGridCellOverflowModal.css";
|
|
6
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
8
|
export default function IrisGridCellOverflowModal(_ref) {
|
|
7
9
|
var _editorRef$current$ge, _editorRef$current2;
|
|
8
10
|
var {
|
|
@@ -92,7 +94,7 @@ export default function IrisGridCellOverflowModal(_ref) {
|
|
|
92
94
|
if (!isOpen && !isOpened) {
|
|
93
95
|
return null;
|
|
94
96
|
}
|
|
95
|
-
return /*#__PURE__*/
|
|
97
|
+
return /*#__PURE__*/_jsxs(Modal, {
|
|
96
98
|
isOpen: isOpen,
|
|
97
99
|
centered: true,
|
|
98
100
|
keyboard: true,
|
|
@@ -103,55 +105,59 @@ export default function IrisGridCellOverflowModal(_ref) {
|
|
|
103
105
|
setHeight(0);
|
|
104
106
|
},
|
|
105
107
|
className: "theme-bg-dark cell-overflow-modal",
|
|
106
|
-
size: "xl"
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
onEditorInitialized: onEditorInitialized,
|
|
133
|
-
settings: {
|
|
134
|
-
value: text,
|
|
135
|
-
readOnly: true,
|
|
136
|
-
wordWrap: 'on',
|
|
137
|
-
// Loading json language w/o the monaco workers causes UI freezes and monaco errors. TS colorizes the same
|
|
138
|
-
language: canFormat ? 'typescript' : 'plaintext',
|
|
139
|
-
folding: canFormat,
|
|
140
|
-
padding: {
|
|
141
|
-
bottom: 16
|
|
108
|
+
size: "xl",
|
|
109
|
+
children: [/*#__PURE__*/_jsxs(ModalHeader, {
|
|
110
|
+
toggle: onClose,
|
|
111
|
+
children: [/*#__PURE__*/_jsx("h5", {
|
|
112
|
+
className: "overflow-modal-title",
|
|
113
|
+
children: "Cell Contents"
|
|
114
|
+
}), /*#__PURE__*/_jsx(CopyButton, {
|
|
115
|
+
kind: "inline",
|
|
116
|
+
tooltip: "Copy cell contents",
|
|
117
|
+
copy: (_editorRef$current$ge = (_editorRef$current2 = editorRef.current) === null || _editorRef$current2 === void 0 ? void 0 : _editorRef$current2.getValue()) !== null && _editorRef$current$ge !== void 0 ? _editorRef$current$ge : text
|
|
118
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
119
|
+
kind: "inline",
|
|
120
|
+
active: showLineNumbers,
|
|
121
|
+
icon: vsListOrdered,
|
|
122
|
+
tooltip: "Toggle line numbers",
|
|
123
|
+
onClick: toggleLineNumbers
|
|
124
|
+
}), canFormat && /*#__PURE__*/_jsx(Button, {
|
|
125
|
+
kind: "inline",
|
|
126
|
+
icon: vsJson,
|
|
127
|
+
active: isFormatted,
|
|
128
|
+
tooltip: "Format as JSON",
|
|
129
|
+
onClick: formatAsJSON
|
|
130
|
+
})]
|
|
131
|
+
}), /*#__PURE__*/_jsx(ModalBody, {
|
|
132
|
+
style: {
|
|
133
|
+
height
|
|
142
134
|
},
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
135
|
+
children: /*#__PURE__*/_jsx(Editor, {
|
|
136
|
+
onEditorInitialized: onEditorInitialized,
|
|
137
|
+
settings: {
|
|
138
|
+
value: text,
|
|
139
|
+
readOnly: true,
|
|
140
|
+
wordWrap: 'on',
|
|
141
|
+
// Loading json language w/o the monaco workers causes UI freezes and monaco errors. TS colorizes the same
|
|
142
|
+
language: canFormat ? 'typescript' : 'plaintext',
|
|
143
|
+
folding: canFormat,
|
|
144
|
+
padding: {
|
|
145
|
+
bottom: 16
|
|
146
|
+
},
|
|
147
|
+
lineNumbers: showLineNumbers ? 'on' : 'off',
|
|
148
|
+
overviewRulerLanes: 0,
|
|
149
|
+
renderLineHighlight: 'none',
|
|
150
|
+
/*
|
|
151
|
+
The entire string may be 1 giant line
|
|
152
|
+
Monaco by default seeds find w/ that line
|
|
153
|
+
On very long strings this hangs the browser, so never seed the search
|
|
154
|
+
*/
|
|
155
|
+
find: {
|
|
156
|
+
seedSearchStringFromSelection: 'never'
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
})
|
|
160
|
+
})]
|
|
161
|
+
});
|
|
156
162
|
}
|
|
157
163
|
//# sourceMappingURL=IrisGridCellOverflowModal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridCellOverflowModal.js","names":["React","useEffect","useRef","useState","Editor","Button","CopyButton","Modal","ModalBody","ModalHeader","vsJson","vsListOrdered","IrisGridCellOverflowModal","text","isOpen","onClose","isOpened","setIsOpened","height","setHeight","showLineNumbers","setShowLineNumbers","isFormatted","setIsFormatted","canFormat","setCanFormat","editorRef","enableFormatButtonWhenOpen","JSON","parse","updateLayoutOnHeightChange","current","layout","toggleShowLineNumber","updateOptions","lineNumbers","toggleLineNumbers","formatAsJSON","model","getModel","setValue","stringify","undefined","autoSetLineNumbers","editor","getLineCount","handleToggle","onEditorInitialized","getContentHeight","onDidContentSizeChange","contentHeight","getValue","value","readOnly","wordWrap","language","folding","padding","bottom","overviewRulerLanes","renderLineHighlight","find","seedSearchStringFromSelection"],"sources":["../src/IrisGridCellOverflowModal.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { Editor } from '@deephaven/console';\nimport * as monaco from 'monaco-editor';\nimport {\n Button,\n CopyButton,\n Modal,\n ModalBody,\n ModalHeader,\n} from '@deephaven/components';\nimport { vsJson, vsListOrdered } from '@deephaven/icons';\nimport './IrisGridCellOverflowModal.scss';\n\ninterface IrisGridCellOverflowModalProps {\n text: string;\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport default function IrisGridCellOverflowModal({\n text,\n isOpen,\n onClose,\n}: IrisGridCellOverflowModalProps): React.ReactElement | null {\n const [isOpened, setIsOpened] = useState(false);\n const [height, setHeight] = useState(0);\n const [showLineNumbers, setShowLineNumbers] = useState(false);\n const [isFormatted, setIsFormatted] = useState(false);\n const [canFormat, setCanFormat] = useState(false);\n const editorRef = useRef<monaco.editor.IStandaloneCodeEditor>();\n\n // Update format button on open\n useEffect(\n function enableFormatButtonWhenOpen() {\n if (!isOpen) {\n return;\n }\n\n try {\n JSON.parse(text);\n setCanFormat(true);\n } catch {\n setCanFormat(false);\n }\n setIsFormatted(false);\n },\n [isOpen, text]\n );\n\n // Re-layout editor on height change\n useEffect(\n function updateLayoutOnHeightChange() {\n if (editorRef.current) {\n editorRef.current.layout();\n }\n },\n [height]\n );\n\n // Update editor options on line number toggle\n useEffect(\n function toggleShowLineNumber() {\n if (editorRef.current) {\n editorRef.current.updateOptions({\n lineNumbers: showLineNumbers ? 'on' : 'off',\n });\n }\n },\n [showLineNumbers]\n );\n\n function toggleLineNumbers() {\n setShowLineNumbers(!showLineNumbers);\n }\n\n function formatAsJSON() {\n const model = editorRef.current?.getModel();\n if (!canFormat || !model) {\n return;\n }\n\n if (!isFormatted) {\n model.setValue(JSON.stringify(JSON.parse(text), undefined, 2));\n setIsFormatted(true);\n } else {\n model.setValue(text);\n setIsFormatted(false);\n }\n autoSetLineNumbers();\n }\n\n function autoSetLineNumbers() {\n const editor = editorRef.current;\n if (!editor) {\n return;\n }\n\n setShowLineNumbers((editor.getModel()?.getLineCount() ?? 0) > 1);\n }\n\n function handleToggle() {\n if (isOpened) {\n editorRef.current = undefined;\n onClose();\n }\n }\n\n function onEditorInitialized(editor: monaco.editor.IStandaloneCodeEditor) {\n editorRef.current = editor;\n setHeight(editor.getContentHeight());\n editor.onDidContentSizeChange(({ contentHeight }) =>\n setHeight(contentHeight)\n );\n autoSetLineNumbers();\n }\n\n if (!isOpen && !isOpened) {\n return null;\n }\n\n return (\n <Modal\n isOpen={isOpen}\n centered\n keyboard\n toggle={handleToggle}\n onOpened={() => setIsOpened(true)}\n onClosed={() => {\n setIsOpened(false);\n setHeight(0);\n }}\n className=\"theme-bg-dark cell-overflow-modal\"\n size=\"xl\"\n >\n <ModalHeader toggle={onClose}>\n <h5 className=\"overflow-modal-title\">Cell Contents</h5>\n <CopyButton\n kind=\"inline\"\n tooltip=\"Copy cell contents\"\n copy={editorRef.current?.getValue() ?? text}\n />\n <Button\n kind=\"inline\"\n active={showLineNumbers}\n icon={vsListOrdered}\n tooltip=\"Toggle line numbers\"\n onClick={toggleLineNumbers}\n />\n {canFormat && (\n <Button\n kind=\"inline\"\n icon={vsJson}\n active={isFormatted}\n tooltip=\"Format as JSON\"\n onClick={formatAsJSON}\n />\n )}\n </ModalHeader>\n <ModalBody style={{ height }}>\n <Editor\n onEditorInitialized={onEditorInitialized}\n settings={{\n value: text,\n readOnly: true,\n wordWrap: 'on',\n // Loading json language w/o the monaco workers causes UI freezes and monaco errors. TS colorizes the same\n language: canFormat ? 'typescript' : 'plaintext',\n folding: canFormat,\n padding: { bottom: 16 },\n lineNumbers: showLineNumbers ? 'on' : 'off',\n overviewRulerLanes: 0,\n renderLineHighlight: 'none',\n /*\n The entire string may be 1 giant line\n Monaco by default seeds find w/ that line\n On very long strings this hangs the browser, so never seed the search\n */\n find: { seedSearchStringFromSelection: 'never' },\n }}\n />\n </ModalBody>\n </Modal>\n );\n}\n"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"IrisGridCellOverflowModal.js","names":["React","useEffect","useRef","useState","Editor","Button","CopyButton","Modal","ModalBody","ModalHeader","vsJson","vsListOrdered","IrisGridCellOverflowModal","text","isOpen","onClose","isOpened","setIsOpened","height","setHeight","showLineNumbers","setShowLineNumbers","isFormatted","setIsFormatted","canFormat","setCanFormat","editorRef","enableFormatButtonWhenOpen","JSON","parse","updateLayoutOnHeightChange","current","layout","toggleShowLineNumber","updateOptions","lineNumbers","toggleLineNumbers","formatAsJSON","model","getModel","setValue","stringify","undefined","autoSetLineNumbers","editor","getLineCount","handleToggle","onEditorInitialized","getContentHeight","onDidContentSizeChange","contentHeight","getValue","value","readOnly","wordWrap","language","folding","padding","bottom","overviewRulerLanes","renderLineHighlight","find","seedSearchStringFromSelection"],"sources":["../src/IrisGridCellOverflowModal.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { Editor } from '@deephaven/console';\nimport * as monaco from 'monaco-editor';\nimport {\n Button,\n CopyButton,\n Modal,\n ModalBody,\n ModalHeader,\n} from '@deephaven/components';\nimport { vsJson, vsListOrdered } from '@deephaven/icons';\nimport './IrisGridCellOverflowModal.scss';\n\ninterface IrisGridCellOverflowModalProps {\n text: string;\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport default function IrisGridCellOverflowModal({\n text,\n isOpen,\n onClose,\n}: IrisGridCellOverflowModalProps): React.ReactElement | null {\n const [isOpened, setIsOpened] = useState(false);\n const [height, setHeight] = useState(0);\n const [showLineNumbers, setShowLineNumbers] = useState(false);\n const [isFormatted, setIsFormatted] = useState(false);\n const [canFormat, setCanFormat] = useState(false);\n const editorRef = useRef<monaco.editor.IStandaloneCodeEditor>();\n\n // Update format button on open\n useEffect(\n function enableFormatButtonWhenOpen() {\n if (!isOpen) {\n return;\n }\n\n try {\n JSON.parse(text);\n setCanFormat(true);\n } catch {\n setCanFormat(false);\n }\n setIsFormatted(false);\n },\n [isOpen, text]\n );\n\n // Re-layout editor on height change\n useEffect(\n function updateLayoutOnHeightChange() {\n if (editorRef.current) {\n editorRef.current.layout();\n }\n },\n [height]\n );\n\n // Update editor options on line number toggle\n useEffect(\n function toggleShowLineNumber() {\n if (editorRef.current) {\n editorRef.current.updateOptions({\n lineNumbers: showLineNumbers ? 'on' : 'off',\n });\n }\n },\n [showLineNumbers]\n );\n\n function toggleLineNumbers() {\n setShowLineNumbers(!showLineNumbers);\n }\n\n function formatAsJSON() {\n const model = editorRef.current?.getModel();\n if (!canFormat || !model) {\n return;\n }\n\n if (!isFormatted) {\n model.setValue(JSON.stringify(JSON.parse(text), undefined, 2));\n setIsFormatted(true);\n } else {\n model.setValue(text);\n setIsFormatted(false);\n }\n autoSetLineNumbers();\n }\n\n function autoSetLineNumbers() {\n const editor = editorRef.current;\n if (!editor) {\n return;\n }\n\n setShowLineNumbers((editor.getModel()?.getLineCount() ?? 0) > 1);\n }\n\n function handleToggle() {\n if (isOpened) {\n editorRef.current = undefined;\n onClose();\n }\n }\n\n function onEditorInitialized(editor: monaco.editor.IStandaloneCodeEditor) {\n editorRef.current = editor;\n setHeight(editor.getContentHeight());\n editor.onDidContentSizeChange(({ contentHeight }) =>\n setHeight(contentHeight)\n );\n autoSetLineNumbers();\n }\n\n if (!isOpen && !isOpened) {\n return null;\n }\n\n return (\n <Modal\n isOpen={isOpen}\n centered\n keyboard\n toggle={handleToggle}\n onOpened={() => setIsOpened(true)}\n onClosed={() => {\n setIsOpened(false);\n setHeight(0);\n }}\n className=\"theme-bg-dark cell-overflow-modal\"\n size=\"xl\"\n >\n <ModalHeader toggle={onClose}>\n <h5 className=\"overflow-modal-title\">Cell Contents</h5>\n <CopyButton\n kind=\"inline\"\n tooltip=\"Copy cell contents\"\n copy={editorRef.current?.getValue() ?? text}\n />\n <Button\n kind=\"inline\"\n active={showLineNumbers}\n icon={vsListOrdered}\n tooltip=\"Toggle line numbers\"\n onClick={toggleLineNumbers}\n />\n {canFormat && (\n <Button\n kind=\"inline\"\n icon={vsJson}\n active={isFormatted}\n tooltip=\"Format as JSON\"\n onClick={formatAsJSON}\n />\n )}\n </ModalHeader>\n <ModalBody style={{ height }}>\n <Editor\n onEditorInitialized={onEditorInitialized}\n settings={{\n value: text,\n readOnly: true,\n wordWrap: 'on',\n // Loading json language w/o the monaco workers causes UI freezes and monaco errors. TS colorizes the same\n language: canFormat ? 'typescript' : 'plaintext',\n folding: canFormat,\n padding: { bottom: 16 },\n lineNumbers: showLineNumbers ? 'on' : 'off',\n overviewRulerLanes: 0,\n renderLineHighlight: 'none',\n /*\n The entire string may be 1 giant line\n Monaco by default seeds find w/ that line\n On very long strings this hangs the browser, so never seed the search\n */\n find: { seedSearchStringFromSelection: 'never' },\n }}\n />\n </ModalBody>\n </Modal>\n );\n}\n"],"mappings":"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"}
|
|
@@ -11,6 +11,8 @@ import Log from '@deephaven/log';
|
|
|
11
11
|
import IrisGridUtils from "./IrisGridUtils.js";
|
|
12
12
|
import IrisGridBottomBar from "./IrisGridBottomBar.js";
|
|
13
13
|
import "./IrisGridCopyHandler.css";
|
|
14
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
15
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
14
16
|
var log = Log.module('IrisGridCopyHandler');
|
|
15
17
|
/**
|
|
16
18
|
* Component for handling copying of data from the Iris Grid.
|
|
@@ -263,7 +265,7 @@ class IrisGridCopyHandler extends Component {
|
|
|
263
265
|
var isButtonContainerVisible = copyState !== IrisGridCopyHandler.COPY_STATES.DONE;
|
|
264
266
|
var isFetching = buttonState === IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS;
|
|
265
267
|
var isDone = copyState === IrisGridCopyHandler.COPY_STATES.DONE;
|
|
266
|
-
return /*#__PURE__*/
|
|
268
|
+
return /*#__PURE__*/_jsxs(IrisGridBottomBar, {
|
|
267
269
|
animation: animation,
|
|
268
270
|
isShown: isShown,
|
|
269
271
|
className: classNames('iris-grid-copy-handler', {
|
|
@@ -273,29 +275,37 @@ class IrisGridCopyHandler extends Component {
|
|
|
273
275
|
onEntering: onEntering,
|
|
274
276
|
onEntered: onEntered,
|
|
275
277
|
onExiting: onExiting,
|
|
276
|
-
onExited: onExited
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
278
|
+
onExited: onExited,
|
|
279
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
280
|
+
className: "status-message",
|
|
281
|
+
children: /*#__PURE__*/_jsx("span", {
|
|
282
|
+
children: statusMessageText
|
|
283
|
+
})
|
|
284
|
+
}), /*#__PURE__*/_jsx(CSSTransition, {
|
|
285
|
+
in: isButtonContainerVisible,
|
|
286
|
+
timeout: ThemeExport.transitionMs,
|
|
287
|
+
classNames: "fade",
|
|
288
|
+
mountOnEnter: true,
|
|
289
|
+
unmountOnExit: true,
|
|
290
|
+
children: /*#__PURE__*/_jsxs("div", {
|
|
291
|
+
className: "buttons-container",
|
|
292
|
+
children: [/*#__PURE__*/_jsx("button", {
|
|
293
|
+
type: "button",
|
|
294
|
+
className: "btn btn-outline-secondary btn-cancel",
|
|
295
|
+
onClick: this.handleCancelClick,
|
|
296
|
+
children: "Cancel"
|
|
297
|
+
}), /*#__PURE__*/_jsxs(Button, {
|
|
298
|
+
kind: isFetching ? 'tertiary' : 'primary',
|
|
299
|
+
className: classNames('btn-copy', {
|
|
300
|
+
'btn-spinner': isFetching
|
|
301
|
+
}),
|
|
302
|
+
onClick: this.handleCopyClick,
|
|
303
|
+
disabled: isFetching,
|
|
304
|
+
children: [isFetching && /*#__PURE__*/_jsx(LoadingSpinner, {}), copyButtonText]
|
|
305
|
+
})]
|
|
306
|
+
})
|
|
307
|
+
})]
|
|
308
|
+
});
|
|
299
309
|
}
|
|
300
310
|
}
|
|
301
311
|
_defineProperty(IrisGridCopyHandler, "NO_PROMPT_THRESHOLD", 10000);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridCopyHandler.js","names":["React","Component","classNames","CSSTransition","Button","LoadingSpinner","ThemeExport","GridRange","GridUtils","CanceledPromiseError","copyToClipboard","PromiseUtils","Log","IrisGridUtils","IrisGridBottomBar","log","module","IrisGridCopyHandler","getStatusMessageText","copyState","rowCount","COPY_STATES","CONFIRMATION_REQUIRED","toLocaleString","CLICK_REQUIRED","FETCH_ERROR","FETCH_IN_PROGRESS","DONE","getCopyButtonText","buttonState","BUTTON_STATES","CLICK_TO_COPY","RETRY","constructor","props","handleBackgroundClick","bind","handleCancelClick","handleCopyClick","handleHideTimeout","state","error","undefined","IDLE","COPY","isShown","componentDidMount","copyOperation","startCopy","componentDidUpdate","prevProps","componentWillUnmount","stopCopy","debug2","setState","ranges","debug","startHideTimer","NO_PROMPT_THRESHOLD","startFetch","textData","stopFetch","stopHideTimer","copyText","text","then","model","includeHeaders","userColumnWidths","movedColumns","formatValues","hiddenColumns","getHiddenColumns","modelRanges","getModelRanges","length","subtractRanges","map","makeColumn","subtractRangesFromRanges","formatValue","value","column","displayString","type","name","fetchPromise","makeCancelable","textSnapshot","catch","cancel","hideTimer","setTimeout","HIDE_TIMEOUT","clearTimeout","render","onEntering","onEntered","onExiting","onExited","animation","copyButtonText","statusMessageText","isButtonContainerVisible","isFetching","isDone","transitionMs"],"sources":["../src/IrisGridCopyHandler.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport { Button, LoadingSpinner, ThemeExport } from '@deephaven/components';\nimport {\n GridRange,\n GridUtils,\n ModelSizeMap,\n MoveOperation,\n} from '@deephaven/grid';\nimport {\n CancelablePromise,\n CanceledPromiseError,\n copyToClipboard,\n PromiseUtils,\n} from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport type { Column } from '@deephaven/jsapi-types';\nimport IrisGridUtils from './IrisGridUtils';\nimport IrisGridBottomBar from './IrisGridBottomBar';\nimport './IrisGridCopyHandler.scss';\nimport IrisGridModel from './IrisGridModel';\n\nconst log = Log.module('IrisGridCopyHandler');\n\ntype Values<T> = T[keyof T];\n\ntype ButtonStateType = Values<typeof IrisGridCopyHandler.BUTTON_STATES>;\n\nexport type CopyOperation = {\n ranges: readonly GridRange[];\n includeHeaders: boolean;\n formatValues?: boolean;\n movedColumns: readonly MoveOperation[];\n userColumnWidths: ModelSizeMap;\n error?: string;\n};\n\ninterface IrisGridCopyHandlerProps {\n model: IrisGridModel;\n copyOperation: CopyOperation;\n onEntering: () => void;\n onEntered: () => void;\n onExiting: () => void;\n onExited: () => void;\n}\n\ninterface IrisGridCopyHandlerState {\n error?: string;\n copyState: string;\n buttonState: string;\n isShown: boolean;\n rowCount: number;\n}\n/**\n * Component for handling copying of data from the Iris Grid.\n * - Prompts if necessary (large amount of rows copied)\n * - Tries to async copy, falls back to showing a \"Click to Copy\" button if that fails\n */\nclass IrisGridCopyHandler extends Component<\n IrisGridCopyHandlerProps,\n IrisGridCopyHandlerState\n> {\n static NO_PROMPT_THRESHOLD = 10000;\n\n static HIDE_TIMEOUT = 3000;\n\n /**\n * Different states for the current copy operation\n */\n static COPY_STATES = {\n // No copy operation in progress\n IDLE: 'IDLE',\n\n // Large copy operation, confirmation required\n CONFIRMATION_REQUIRED: 'CONFIRMATION_REQUIRED',\n\n // Fetch is currently in progress\n FETCH_IN_PROGRESS: 'FETCH_IN_PROGRESS',\n\n // There was an error fetching the data\n FETCH_ERROR: 'FETCH_ERROR',\n\n // Click is required to copy\n CLICK_REQUIRED: 'CLICK_REQUIRED',\n\n // The copy operation is completed and successfully copied to the clipboard\n DONE: 'DONE',\n };\n\n static BUTTON_STATES = {\n COPY: 'COPY',\n FETCH_IN_PROGRESS: 'FETCH_IN_PROGRESS',\n CLICK_TO_COPY: 'CLICK_TO_COPY',\n RETRY: 'RETRY',\n };\n\n static defaultProps = {\n copyOperation: null,\n onEntering: (): void => undefined,\n onEntered: (): void => undefined,\n onExiting: (): void => undefined,\n onExited: (): void => undefined,\n };\n\n static getStatusMessageText(copyState: string, rowCount: number): string {\n switch (copyState) {\n case IrisGridCopyHandler.COPY_STATES.CONFIRMATION_REQUIRED:\n return `Are you sure you want to copy ${rowCount.toLocaleString()} rows to your clipboard?`;\n case IrisGridCopyHandler.COPY_STATES.CLICK_REQUIRED:\n return `Fetched ${rowCount.toLocaleString()} rows!`;\n case IrisGridCopyHandler.COPY_STATES.FETCH_ERROR:\n return 'Unable to copy data.';\n case IrisGridCopyHandler.COPY_STATES.FETCH_IN_PROGRESS:\n return `Fetching ${rowCount.toLocaleString()} rows for clipboard...`;\n case IrisGridCopyHandler.COPY_STATES.DONE:\n return 'Copied to Clipboard!';\n default:\n return '';\n }\n }\n\n static getCopyButtonText(buttonState: ButtonStateType): string {\n switch (buttonState) {\n case IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS:\n return 'Fetching';\n case IrisGridCopyHandler.BUTTON_STATES.CLICK_TO_COPY:\n return 'Click to Copy';\n case IrisGridCopyHandler.BUTTON_STATES.RETRY:\n return 'Retry';\n default:\n return 'Copy';\n }\n }\n\n constructor(props: IrisGridCopyHandlerProps) {\n super(props);\n\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n this.handleCancelClick = this.handleCancelClick.bind(this);\n this.handleCopyClick = this.handleCopyClick.bind(this);\n this.handleHideTimeout = this.handleHideTimeout.bind(this);\n\n this.state = {\n error: undefined,\n copyState: IrisGridCopyHandler.COPY_STATES.IDLE,\n buttonState: IrisGridCopyHandler.BUTTON_STATES.COPY,\n isShown: false,\n rowCount: 0,\n };\n }\n\n componentDidMount(): void {\n const { copyOperation } = this.props;\n if (copyOperation != null) {\n this.startCopy();\n }\n }\n\n componentDidUpdate(prevProps: IrisGridCopyHandlerProps): void {\n const { copyOperation } = this.props;\n if (prevProps.copyOperation !== copyOperation) {\n this.startCopy();\n }\n }\n\n componentWillUnmount(): void {\n this.stopCopy();\n }\n\n textData?: string;\n\n hideTimer?: ReturnType<typeof setTimeout>;\n\n fetchPromise?: CancelablePromise<string>;\n\n startCopy(): void {\n log.debug2('startCopy');\n\n this.stopCopy();\n\n const { copyOperation } = this.props;\n if (copyOperation == null) {\n log.debug2('No copy operation set, cancelling out');\n this.setState({ isShown: false });\n return;\n }\n\n const { ranges, error } = copyOperation;\n if (error != null) {\n log.debug('Showing copy error', error);\n this.setState({\n isShown: true,\n copyState: IrisGridCopyHandler.COPY_STATES.DONE,\n error,\n });\n this.startHideTimer();\n return;\n }\n\n const rowCount = GridRange.rowCount(ranges);\n\n this.setState({ rowCount, isShown: true, error: undefined });\n\n if (rowCount > IrisGridCopyHandler.NO_PROMPT_THRESHOLD) {\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.COPY,\n copyState: IrisGridCopyHandler.COPY_STATES.CONFIRMATION_REQUIRED,\n });\n } else {\n this.startFetch();\n }\n }\n\n stopCopy(): void {\n this.textData = undefined;\n this.stopFetch();\n this.stopHideTimer();\n }\n\n handleBackgroundClick(): void {\n log.debug2('handleBackgroundClick');\n\n const { copyState } = this.state;\n if (copyState === IrisGridCopyHandler.COPY_STATES.DONE) {\n this.setState({ isShown: false });\n }\n }\n\n handleCancelClick(): void {\n log.debug2('handleCancelClick');\n\n this.stopFetch();\n this.setState({ isShown: false });\n }\n\n handleCopyClick(): void {\n log.debug2('handleCopyClick');\n\n if (this.textData != null) {\n this.copyText(this.textData);\n } else {\n this.startFetch();\n }\n }\n\n handleHideTimeout(): void {\n log.debug2('handleHideTimeout');\n\n this.stopHideTimer();\n\n this.setState({ isShown: false });\n }\n\n copyText(text: string): void {\n log.debug2('copyText', text);\n\n this.textData = text;\n\n copyToClipboard(text).then(\n () => {\n this.setState({ copyState: IrisGridCopyHandler.COPY_STATES.DONE });\n this.startHideTimer();\n },\n error => {\n log.error('copyText error', error);\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.CLICK_TO_COPY,\n copyState: IrisGridCopyHandler.COPY_STATES.CLICK_REQUIRED,\n });\n }\n );\n }\n\n startFetch(): void {\n this.stopFetch();\n\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_IN_PROGRESS,\n });\n\n const { model, copyOperation } = this.props;\n const {\n ranges,\n includeHeaders,\n userColumnWidths,\n movedColumns,\n formatValues,\n } = copyOperation;\n log.debug('startFetch', ranges);\n\n const hiddenColumns = IrisGridUtils.getHiddenColumns(userColumnWidths);\n let modelRanges = GridUtils.getModelRanges(ranges, movedColumns);\n if (hiddenColumns.length > 0) {\n const subtractRanges = hiddenColumns.map(GridRange.makeColumn);\n modelRanges = GridRange.subtractRangesFromRanges(\n modelRanges,\n subtractRanges\n );\n }\n\n // Remove the hidden columns from the snapshot\n const formatValue =\n formatValues != null && formatValues\n ? (value: unknown, column: Column) =>\n model.displayString(value, column.type, column.name)\n : (value: unknown) => `${value}`;\n\n this.fetchPromise = PromiseUtils.makeCancelable(\n model.textSnapshot(modelRanges, includeHeaders, formatValue)\n );\n this.fetchPromise\n .then((text: string) => {\n this.fetchPromise = undefined;\n this.copyText(text);\n })\n .catch((error: unknown) => {\n if (error instanceof CanceledPromiseError) {\n log.debug('User cancelled copy.');\n } else {\n log.error('Error fetching contents', error);\n this.fetchPromise = undefined;\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.RETRY,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_ERROR,\n });\n }\n });\n }\n\n stopFetch(): void {\n if (this.fetchPromise) {\n log.debug2('stopFetch');\n this.fetchPromise.cancel();\n this.fetchPromise = undefined;\n }\n }\n\n startHideTimer(): void {\n this.stopHideTimer();\n\n this.hideTimer = setTimeout(\n this.handleHideTimeout,\n IrisGridCopyHandler.HIDE_TIMEOUT\n );\n }\n\n stopHideTimer(): void {\n if (this.hideTimer != null) {\n clearTimeout(this.hideTimer);\n this.hideTimer = undefined;\n }\n }\n\n render(): JSX.Element {\n const { onEntering, onEntered, onExiting, onExited } = this.props;\n const { buttonState, copyState, isShown, rowCount, error } = this.state;\n\n const animation =\n copyState === IrisGridCopyHandler.COPY_STATES.DONE\n ? 'fade'\n : 'copy-slide-up';\n const copyButtonText = IrisGridCopyHandler.getCopyButtonText(buttonState);\n const statusMessageText =\n error ?? IrisGridCopyHandler.getStatusMessageText(copyState, rowCount);\n const isButtonContainerVisible =\n copyState !== IrisGridCopyHandler.COPY_STATES.DONE;\n const isFetching =\n buttonState === IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS;\n const isDone = copyState === IrisGridCopyHandler.COPY_STATES.DONE;\n\n return (\n <IrisGridBottomBar\n animation={animation}\n isShown={isShown}\n className={classNames('iris-grid-copy-handler', {\n 'copy-done': isDone,\n })}\n onClick={this.handleBackgroundClick}\n onEntering={onEntering}\n onEntered={onEntered}\n onExiting={onExiting}\n onExited={onExited}\n >\n <div className=\"status-message\">\n <span>{statusMessageText}</span>\n </div>\n <CSSTransition\n in={isButtonContainerVisible}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <div className=\"buttons-container\">\n <button\n type=\"button\"\n className=\"btn btn-outline-secondary btn-cancel\"\n onClick={this.handleCancelClick}\n >\n Cancel\n </button>\n <Button\n kind={isFetching ? 'tertiary' : 'primary'}\n className={classNames('btn-copy', {\n 'btn-spinner': isFetching,\n })}\n onClick={this.handleCopyClick}\n disabled={isFetching}\n >\n {isFetching && <LoadingSpinner />}\n {copyButtonText}\n </Button>\n </div>\n </CSSTransition>\n </IrisGridBottomBar>\n );\n }\n}\n\nexport default IrisGridCopyHandler;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IrisGridCopyHandler.js","names":["React","Component","classNames","CSSTransition","Button","LoadingSpinner","ThemeExport","GridRange","GridUtils","CanceledPromiseError","copyToClipboard","PromiseUtils","Log","IrisGridUtils","IrisGridBottomBar","log","module","IrisGridCopyHandler","getStatusMessageText","copyState","rowCount","COPY_STATES","CONFIRMATION_REQUIRED","toLocaleString","CLICK_REQUIRED","FETCH_ERROR","FETCH_IN_PROGRESS","DONE","getCopyButtonText","buttonState","BUTTON_STATES","CLICK_TO_COPY","RETRY","constructor","props","handleBackgroundClick","bind","handleCancelClick","handleCopyClick","handleHideTimeout","state","error","undefined","IDLE","COPY","isShown","componentDidMount","copyOperation","startCopy","componentDidUpdate","prevProps","componentWillUnmount","stopCopy","debug2","setState","ranges","debug","startHideTimer","NO_PROMPT_THRESHOLD","startFetch","textData","stopFetch","stopHideTimer","copyText","text","then","model","includeHeaders","userColumnWidths","movedColumns","formatValues","hiddenColumns","getHiddenColumns","modelRanges","getModelRanges","length","subtractRanges","map","makeColumn","subtractRangesFromRanges","formatValue","value","column","displayString","type","name","fetchPromise","makeCancelable","textSnapshot","catch","cancel","hideTimer","setTimeout","HIDE_TIMEOUT","clearTimeout","render","onEntering","onEntered","onExiting","onExited","animation","copyButtonText","statusMessageText","isButtonContainerVisible","isFetching","isDone","transitionMs"],"sources":["../src/IrisGridCopyHandler.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport { Button, LoadingSpinner, ThemeExport } from '@deephaven/components';\nimport {\n GridRange,\n GridUtils,\n ModelSizeMap,\n MoveOperation,\n} from '@deephaven/grid';\nimport {\n CancelablePromise,\n CanceledPromiseError,\n copyToClipboard,\n PromiseUtils,\n} from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport type { Column } from '@deephaven/jsapi-types';\nimport IrisGridUtils from './IrisGridUtils';\nimport IrisGridBottomBar from './IrisGridBottomBar';\nimport './IrisGridCopyHandler.scss';\nimport IrisGridModel from './IrisGridModel';\n\nconst log = Log.module('IrisGridCopyHandler');\n\ntype Values<T> = T[keyof T];\n\ntype ButtonStateType = Values<typeof IrisGridCopyHandler.BUTTON_STATES>;\n\nexport type CopyOperation = {\n ranges: readonly GridRange[];\n includeHeaders: boolean;\n formatValues?: boolean;\n movedColumns: readonly MoveOperation[];\n userColumnWidths: ModelSizeMap;\n error?: string;\n};\n\ninterface IrisGridCopyHandlerProps {\n model: IrisGridModel;\n copyOperation: CopyOperation;\n onEntering: () => void;\n onEntered: () => void;\n onExiting: () => void;\n onExited: () => void;\n}\n\ninterface IrisGridCopyHandlerState {\n error?: string;\n copyState: string;\n buttonState: string;\n isShown: boolean;\n rowCount: number;\n}\n/**\n * Component for handling copying of data from the Iris Grid.\n * - Prompts if necessary (large amount of rows copied)\n * - Tries to async copy, falls back to showing a \"Click to Copy\" button if that fails\n */\nclass IrisGridCopyHandler extends Component<\n IrisGridCopyHandlerProps,\n IrisGridCopyHandlerState\n> {\n static NO_PROMPT_THRESHOLD = 10000;\n\n static HIDE_TIMEOUT = 3000;\n\n /**\n * Different states for the current copy operation\n */\n static COPY_STATES = {\n // No copy operation in progress\n IDLE: 'IDLE',\n\n // Large copy operation, confirmation required\n CONFIRMATION_REQUIRED: 'CONFIRMATION_REQUIRED',\n\n // Fetch is currently in progress\n FETCH_IN_PROGRESS: 'FETCH_IN_PROGRESS',\n\n // There was an error fetching the data\n FETCH_ERROR: 'FETCH_ERROR',\n\n // Click is required to copy\n CLICK_REQUIRED: 'CLICK_REQUIRED',\n\n // The copy operation is completed and successfully copied to the clipboard\n DONE: 'DONE',\n };\n\n static BUTTON_STATES = {\n COPY: 'COPY',\n FETCH_IN_PROGRESS: 'FETCH_IN_PROGRESS',\n CLICK_TO_COPY: 'CLICK_TO_COPY',\n RETRY: 'RETRY',\n };\n\n static defaultProps = {\n copyOperation: null,\n onEntering: (): void => undefined,\n onEntered: (): void => undefined,\n onExiting: (): void => undefined,\n onExited: (): void => undefined,\n };\n\n static getStatusMessageText(copyState: string, rowCount: number): string {\n switch (copyState) {\n case IrisGridCopyHandler.COPY_STATES.CONFIRMATION_REQUIRED:\n return `Are you sure you want to copy ${rowCount.toLocaleString()} rows to your clipboard?`;\n case IrisGridCopyHandler.COPY_STATES.CLICK_REQUIRED:\n return `Fetched ${rowCount.toLocaleString()} rows!`;\n case IrisGridCopyHandler.COPY_STATES.FETCH_ERROR:\n return 'Unable to copy data.';\n case IrisGridCopyHandler.COPY_STATES.FETCH_IN_PROGRESS:\n return `Fetching ${rowCount.toLocaleString()} rows for clipboard...`;\n case IrisGridCopyHandler.COPY_STATES.DONE:\n return 'Copied to Clipboard!';\n default:\n return '';\n }\n }\n\n static getCopyButtonText(buttonState: ButtonStateType): string {\n switch (buttonState) {\n case IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS:\n return 'Fetching';\n case IrisGridCopyHandler.BUTTON_STATES.CLICK_TO_COPY:\n return 'Click to Copy';\n case IrisGridCopyHandler.BUTTON_STATES.RETRY:\n return 'Retry';\n default:\n return 'Copy';\n }\n }\n\n constructor(props: IrisGridCopyHandlerProps) {\n super(props);\n\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n this.handleCancelClick = this.handleCancelClick.bind(this);\n this.handleCopyClick = this.handleCopyClick.bind(this);\n this.handleHideTimeout = this.handleHideTimeout.bind(this);\n\n this.state = {\n error: undefined,\n copyState: IrisGridCopyHandler.COPY_STATES.IDLE,\n buttonState: IrisGridCopyHandler.BUTTON_STATES.COPY,\n isShown: false,\n rowCount: 0,\n };\n }\n\n componentDidMount(): void {\n const { copyOperation } = this.props;\n if (copyOperation != null) {\n this.startCopy();\n }\n }\n\n componentDidUpdate(prevProps: IrisGridCopyHandlerProps): void {\n const { copyOperation } = this.props;\n if (prevProps.copyOperation !== copyOperation) {\n this.startCopy();\n }\n }\n\n componentWillUnmount(): void {\n this.stopCopy();\n }\n\n textData?: string;\n\n hideTimer?: ReturnType<typeof setTimeout>;\n\n fetchPromise?: CancelablePromise<string>;\n\n startCopy(): void {\n log.debug2('startCopy');\n\n this.stopCopy();\n\n const { copyOperation } = this.props;\n if (copyOperation == null) {\n log.debug2('No copy operation set, cancelling out');\n this.setState({ isShown: false });\n return;\n }\n\n const { ranges, error } = copyOperation;\n if (error != null) {\n log.debug('Showing copy error', error);\n this.setState({\n isShown: true,\n copyState: IrisGridCopyHandler.COPY_STATES.DONE,\n error,\n });\n this.startHideTimer();\n return;\n }\n\n const rowCount = GridRange.rowCount(ranges);\n\n this.setState({ rowCount, isShown: true, error: undefined });\n\n if (rowCount > IrisGridCopyHandler.NO_PROMPT_THRESHOLD) {\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.COPY,\n copyState: IrisGridCopyHandler.COPY_STATES.CONFIRMATION_REQUIRED,\n });\n } else {\n this.startFetch();\n }\n }\n\n stopCopy(): void {\n this.textData = undefined;\n this.stopFetch();\n this.stopHideTimer();\n }\n\n handleBackgroundClick(): void {\n log.debug2('handleBackgroundClick');\n\n const { copyState } = this.state;\n if (copyState === IrisGridCopyHandler.COPY_STATES.DONE) {\n this.setState({ isShown: false });\n }\n }\n\n handleCancelClick(): void {\n log.debug2('handleCancelClick');\n\n this.stopFetch();\n this.setState({ isShown: false });\n }\n\n handleCopyClick(): void {\n log.debug2('handleCopyClick');\n\n if (this.textData != null) {\n this.copyText(this.textData);\n } else {\n this.startFetch();\n }\n }\n\n handleHideTimeout(): void {\n log.debug2('handleHideTimeout');\n\n this.stopHideTimer();\n\n this.setState({ isShown: false });\n }\n\n copyText(text: string): void {\n log.debug2('copyText', text);\n\n this.textData = text;\n\n copyToClipboard(text).then(\n () => {\n this.setState({ copyState: IrisGridCopyHandler.COPY_STATES.DONE });\n this.startHideTimer();\n },\n error => {\n log.error('copyText error', error);\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.CLICK_TO_COPY,\n copyState: IrisGridCopyHandler.COPY_STATES.CLICK_REQUIRED,\n });\n }\n );\n }\n\n startFetch(): void {\n this.stopFetch();\n\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_IN_PROGRESS,\n });\n\n const { model, copyOperation } = this.props;\n const {\n ranges,\n includeHeaders,\n userColumnWidths,\n movedColumns,\n formatValues,\n } = copyOperation;\n log.debug('startFetch', ranges);\n\n const hiddenColumns = IrisGridUtils.getHiddenColumns(userColumnWidths);\n let modelRanges = GridUtils.getModelRanges(ranges, movedColumns);\n if (hiddenColumns.length > 0) {\n const subtractRanges = hiddenColumns.map(GridRange.makeColumn);\n modelRanges = GridRange.subtractRangesFromRanges(\n modelRanges,\n subtractRanges\n );\n }\n\n // Remove the hidden columns from the snapshot\n const formatValue =\n formatValues != null && formatValues\n ? (value: unknown, column: Column) =>\n model.displayString(value, column.type, column.name)\n : (value: unknown) => `${value}`;\n\n this.fetchPromise = PromiseUtils.makeCancelable(\n model.textSnapshot(modelRanges, includeHeaders, formatValue)\n );\n this.fetchPromise\n .then((text: string) => {\n this.fetchPromise = undefined;\n this.copyText(text);\n })\n .catch((error: unknown) => {\n if (error instanceof CanceledPromiseError) {\n log.debug('User cancelled copy.');\n } else {\n log.error('Error fetching contents', error);\n this.fetchPromise = undefined;\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.RETRY,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_ERROR,\n });\n }\n });\n }\n\n stopFetch(): void {\n if (this.fetchPromise) {\n log.debug2('stopFetch');\n this.fetchPromise.cancel();\n this.fetchPromise = undefined;\n }\n }\n\n startHideTimer(): void {\n this.stopHideTimer();\n\n this.hideTimer = setTimeout(\n this.handleHideTimeout,\n IrisGridCopyHandler.HIDE_TIMEOUT\n );\n }\n\n stopHideTimer(): void {\n if (this.hideTimer != null) {\n clearTimeout(this.hideTimer);\n this.hideTimer = undefined;\n }\n }\n\n render(): JSX.Element {\n const { onEntering, onEntered, onExiting, onExited } = this.props;\n const { buttonState, copyState, isShown, rowCount, error } = this.state;\n\n const animation =\n copyState === IrisGridCopyHandler.COPY_STATES.DONE\n ? 'fade'\n : 'copy-slide-up';\n const copyButtonText = IrisGridCopyHandler.getCopyButtonText(buttonState);\n const statusMessageText =\n error ?? IrisGridCopyHandler.getStatusMessageText(copyState, rowCount);\n const isButtonContainerVisible =\n copyState !== IrisGridCopyHandler.COPY_STATES.DONE;\n const isFetching =\n buttonState === IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS;\n const isDone = copyState === IrisGridCopyHandler.COPY_STATES.DONE;\n\n return (\n <IrisGridBottomBar\n animation={animation}\n isShown={isShown}\n className={classNames('iris-grid-copy-handler', {\n 'copy-done': isDone,\n })}\n onClick={this.handleBackgroundClick}\n onEntering={onEntering}\n onEntered={onEntered}\n onExiting={onExiting}\n onExited={onExited}\n >\n <div className=\"status-message\">\n <span>{statusMessageText}</span>\n </div>\n <CSSTransition\n in={isButtonContainerVisible}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <div className=\"buttons-container\">\n <button\n type=\"button\"\n className=\"btn btn-outline-secondary btn-cancel\"\n onClick={this.handleCancelClick}\n >\n Cancel\n </button>\n <Button\n kind={isFetching ? 'tertiary' : 'primary'}\n className={classNames('btn-copy', {\n 'btn-spinner': isFetching,\n })}\n onClick={this.handleCopyClick}\n disabled={isFetching}\n >\n {isFetching && <LoadingSpinner />}\n {copyButtonText}\n </Button>\n </div>\n </CSSTransition>\n </IrisGridBottomBar>\n );\n }\n}\n\nexport default IrisGridCopyHandler;\n"],"mappings":"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"}
|
|
@@ -9,6 +9,8 @@ import Log from '@deephaven/log';
|
|
|
9
9
|
import debounce from 'lodash.debounce';
|
|
10
10
|
import PartitionSelectorSearch from "./PartitionSelectorSearch.js";
|
|
11
11
|
import "./IrisGridPartitionSelector.css";
|
|
12
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
14
|
var log = Log.module('IrisGridPartitionSelector');
|
|
13
15
|
var PARTITION_CHANGE_DEBOUNCE_MS = 250;
|
|
14
16
|
class IrisGridPartitionSelector extends Component {
|
|
@@ -130,9 +132,8 @@ class IrisGridPartitionSelector extends Component {
|
|
|
130
132
|
var {
|
|
131
133
|
partition
|
|
132
134
|
} = this.state;
|
|
133
|
-
var partitionSelectorSearch = /*#__PURE__*/
|
|
135
|
+
var partitionSelectorSearch = /*#__PURE__*/_jsx(PartitionSelectorSearch, {
|
|
134
136
|
dh: dh,
|
|
135
|
-
key: "search",
|
|
136
137
|
getFormattedString: getFormattedString,
|
|
137
138
|
table: table,
|
|
138
139
|
onSelect: this.handlePartitionSelect,
|
|
@@ -140,51 +141,63 @@ class IrisGridPartitionSelector extends Component {
|
|
|
140
141
|
ref: selectorSearch => {
|
|
141
142
|
this.selectorSearch = selectorSearch;
|
|
142
143
|
}
|
|
144
|
+
}, "search");
|
|
145
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
146
|
+
className: "iris-grid-partition-selector",
|
|
147
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
148
|
+
className: "status-message",
|
|
149
|
+
children: /*#__PURE__*/_jsxs("span", {
|
|
150
|
+
children: ["Filtering \"", columnName, "\" partition to"]
|
|
151
|
+
})
|
|
152
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
153
|
+
className: "input-group",
|
|
154
|
+
children: [/*#__PURE__*/_jsx("input", {
|
|
155
|
+
type: "text",
|
|
156
|
+
value: partition,
|
|
157
|
+
onChange: this.handlePartitionChange,
|
|
158
|
+
className: "form-control input-partition"
|
|
159
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
160
|
+
className: "input-group-append",
|
|
161
|
+
children: /*#__PURE__*/_jsxs("button", {
|
|
162
|
+
type: "button",
|
|
163
|
+
className: "btn btn-outline-primary",
|
|
164
|
+
children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {
|
|
165
|
+
icon: vsTriangleDown
|
|
166
|
+
}), /*#__PURE__*/_jsx(Tooltip, {
|
|
167
|
+
children: "Partitions"
|
|
168
|
+
}), /*#__PURE__*/_jsx(DropdownMenu, {
|
|
169
|
+
ref: searchMenu => {
|
|
170
|
+
this.searchMenu = searchMenu;
|
|
171
|
+
},
|
|
172
|
+
actions: [{
|
|
173
|
+
menuElement: partitionSelectorSearch
|
|
174
|
+
}],
|
|
175
|
+
onMenuOpened: this.handleSearchOpened,
|
|
176
|
+
onMenuClosed: this.handleSearchClosed
|
|
177
|
+
})]
|
|
178
|
+
})
|
|
179
|
+
})]
|
|
180
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
181
|
+
className: "iris-grid-partition-selector-spacer"
|
|
182
|
+
}), /*#__PURE__*/_jsx("button", {
|
|
183
|
+
type: "button",
|
|
184
|
+
className: "btn btn-outline-primary btn-ignore",
|
|
185
|
+
onClick: this.handleIgnoreClick,
|
|
186
|
+
children: "Ignore & Fetch All"
|
|
187
|
+
}), /*#__PURE__*/_jsx("button", {
|
|
188
|
+
type: "button",
|
|
189
|
+
className: "btn btn-outline-primary btn-append",
|
|
190
|
+
onClick: this.handleAppendClick,
|
|
191
|
+
children: "Append Command"
|
|
192
|
+
}), /*#__PURE__*/_jsx("button", {
|
|
193
|
+
type: "button",
|
|
194
|
+
className: "btn btn-link btn-link-icon btn-close",
|
|
195
|
+
onClick: onDone,
|
|
196
|
+
children: /*#__PURE__*/_jsx(FontAwesomeIcon, {
|
|
197
|
+
icon: vsClose
|
|
198
|
+
})
|
|
199
|
+
})]
|
|
143
200
|
});
|
|
144
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
145
|
-
className: "iris-grid-partition-selector"
|
|
146
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
147
|
-
className: "status-message"
|
|
148
|
-
}, /*#__PURE__*/React.createElement("span", null, "Filtering \"", columnName, "\" partition to")), /*#__PURE__*/React.createElement("div", {
|
|
149
|
-
className: "input-group"
|
|
150
|
-
}, /*#__PURE__*/React.createElement("input", {
|
|
151
|
-
type: "text",
|
|
152
|
-
value: partition,
|
|
153
|
-
onChange: this.handlePartitionChange,
|
|
154
|
-
className: "form-control input-partition"
|
|
155
|
-
}), /*#__PURE__*/React.createElement("div", {
|
|
156
|
-
className: "input-group-append"
|
|
157
|
-
}, /*#__PURE__*/React.createElement("button", {
|
|
158
|
-
type: "button",
|
|
159
|
-
className: "btn btn-outline-primary"
|
|
160
|
-
}, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
|
|
161
|
-
icon: vsTriangleDown
|
|
162
|
-
}), /*#__PURE__*/React.createElement(Tooltip, null, "Partitions"), /*#__PURE__*/React.createElement(DropdownMenu, {
|
|
163
|
-
ref: searchMenu => {
|
|
164
|
-
this.searchMenu = searchMenu;
|
|
165
|
-
},
|
|
166
|
-
actions: [{
|
|
167
|
-
menuElement: partitionSelectorSearch
|
|
168
|
-
}],
|
|
169
|
-
onMenuOpened: this.handleSearchOpened,
|
|
170
|
-
onMenuClosed: this.handleSearchClosed
|
|
171
|
-
})))), /*#__PURE__*/React.createElement("div", {
|
|
172
|
-
className: "iris-grid-partition-selector-spacer"
|
|
173
|
-
}), /*#__PURE__*/React.createElement("button", {
|
|
174
|
-
type: "button",
|
|
175
|
-
className: "btn btn-outline-primary btn-ignore",
|
|
176
|
-
onClick: this.handleIgnoreClick
|
|
177
|
-
}, "Ignore & Fetch All"), /*#__PURE__*/React.createElement("button", {
|
|
178
|
-
type: "button",
|
|
179
|
-
className: "btn btn-outline-primary btn-append",
|
|
180
|
-
onClick: this.handleAppendClick
|
|
181
|
-
}, "Append Command"), /*#__PURE__*/React.createElement("button", {
|
|
182
|
-
type: "button",
|
|
183
|
-
className: "btn btn-link btn-link-icon btn-close",
|
|
184
|
-
onClick: onDone
|
|
185
|
-
}, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
|
|
186
|
-
icon: vsClose
|
|
187
|
-
})));
|
|
188
201
|
}
|
|
189
202
|
}
|
|
190
203
|
_defineProperty(IrisGridPartitionSelector, "defaultProps", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridPartitionSelector.js","names":["React","Component","FontAwesomeIcon","DropdownMenu","Tooltip","vsTriangleDown","vsClose","Log","debounce","PartitionSelectorSearch","log","module","PARTITION_CHANGE_DEBOUNCE_MS","IrisGridPartitionSelector","constructor","props","sendUpdate","handleAppendClick","bind","handleCloseClick","handleIgnoreClick","handlePartitionChange","handlePartitionSelect","handlePartitionListResized","handleSearchOpened","handleSearchClosed","searchMenu","selectorSearch","partition","state","componentWillUnmount","debounceUpdate","cancel","debug2","onAppend","sendDone","sendFetchAll","event","value","target","setState","closeMenu","scheduleUpdate","table","applyFilter","focus","flush","onDone","onChange","onFetchAll","render","columnName","dh","getFormattedString","partitionSelectorSearch","menuElement","undefined"],"sources":["../src/IrisGridPartitionSelector.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { DropdownMenu, Tooltip } from '@deephaven/components';\nimport { vsTriangleDown, vsClose } from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport debounce from 'lodash.debounce';\nimport type { dh as DhType, Table } from '@deephaven/jsapi-types';\nimport PartitionSelectorSearch from './PartitionSelectorSearch';\nimport './IrisGridPartitionSelector.scss';\nimport { ColumnName } from './CommonTypes';\n\nconst log = Log.module('IrisGridPartitionSelector');\n\nconst PARTITION_CHANGE_DEBOUNCE_MS = 250;\ninterface IrisGridPartitionSelectorProps<T> {\n dh: DhType;\n getFormattedString: (value: T, type: string, name: string) => string;\n table: Table;\n columnName: ColumnName;\n partition: string;\n onAppend: (partition: string) => void;\n onFetchAll: () => void;\n onDone: (event?: React.MouseEvent<HTMLButtonElement>) => void;\n onChange: (partition: string) => void;\n}\ninterface IrisGridPartitionSelectorState {\n partition: string;\n}\nclass IrisGridPartitionSelector<T> extends Component<\n IrisGridPartitionSelectorProps<T>,\n IrisGridPartitionSelectorState\n> {\n static defaultProps = {\n onAppend: (): void => undefined,\n onChange: (): void => undefined,\n onFetchAll: (): void => undefined,\n onDone: (): void => undefined,\n partition: '',\n };\n\n constructor(props: IrisGridPartitionSelectorProps<T>) {\n super(props);\n\n this.handleAppendClick = this.handleAppendClick.bind(this);\n this.handleCloseClick = this.handleCloseClick.bind(this);\n this.handleIgnoreClick = this.handleIgnoreClick.bind(this);\n this.handlePartitionChange = this.handlePartitionChange.bind(this);\n this.handlePartitionSelect = this.handlePartitionSelect.bind(this);\n this.handlePartitionListResized =\n this.handlePartitionListResized.bind(this);\n this.handleSearchOpened = this.handleSearchOpened.bind(this);\n this.handleSearchClosed = this.handleSearchClosed.bind(this);\n\n this.searchMenu = null;\n this.selectorSearch = null;\n\n const { partition } = props;\n this.state = {\n partition,\n };\n }\n\n componentWillUnmount(): void {\n this.debounceUpdate.cancel();\n }\n\n searchMenu: DropdownMenu | null;\n\n selectorSearch: PartitionSelectorSearch<T> | null;\n\n handleAppendClick(): void {\n log.debug2('handleAppendClick');\n\n const { onAppend } = this.props;\n const { partition } = this.state;\n onAppend(partition);\n }\n\n handleCloseClick(): void {\n log.debug2('handleCloseClick');\n\n this.sendDone();\n }\n\n handleIgnoreClick(): void {\n log.debug2('handleIgnoreClick');\n\n this.sendFetchAll();\n }\n\n handlePartitionChange(event: React.ChangeEvent<HTMLInputElement>): void {\n log.debug2('handlePartitionChange');\n\n const { value: partition } = event.target;\n\n this.setState({ partition });\n\n this.debounceUpdate();\n }\n\n handlePartitionSelect(partition: string): void {\n if (this.searchMenu) {\n this.searchMenu.closeMenu();\n }\n\n this.setState({ partition }, () => {\n this.sendUpdate();\n });\n }\n\n handlePartitionListResized(): void {\n if (this.searchMenu) {\n this.searchMenu.scheduleUpdate();\n }\n }\n\n handleSearchClosed(): void {\n // Reset the table filter so it's ready next time user opens search\n const { table } = this.props;\n table.applyFilter([]);\n }\n\n handleSearchOpened(): void {\n if (this.selectorSearch) {\n this.selectorSearch.focus();\n }\n }\n\n debounceUpdate = debounce((): void => {\n this.sendUpdate();\n }, PARTITION_CHANGE_DEBOUNCE_MS);\n\n sendDone(): void {\n this.debounceUpdate.flush();\n\n const { onDone } = this.props;\n onDone();\n }\n\n sendUpdate(): void {\n log.debug2('sendUpdate');\n\n const { onChange } = this.props;\n const { partition } = this.state;\n onChange(partition);\n }\n\n sendFetchAll(): void {\n log.debug2('sendFetchAll');\n\n this.debounceUpdate.cancel();\n\n const { onFetchAll } = this.props;\n onFetchAll();\n }\n\n render(): JSX.Element {\n const { columnName, dh, getFormattedString, onDone, table } = this.props;\n const { partition } = this.state;\n const partitionSelectorSearch = (\n <PartitionSelectorSearch\n dh={dh}\n key=\"search\"\n getFormattedString={getFormattedString}\n table={table}\n onSelect={this.handlePartitionSelect}\n onListResized={this.handlePartitionListResized}\n ref={selectorSearch => {\n this.selectorSearch = selectorSearch;\n }}\n />\n );\n return (\n <div className=\"iris-grid-partition-selector\">\n <div className=\"status-message\">\n <span>Filtering "{columnName}" partition to</span>\n </div>\n <div className=\"input-group\">\n <input\n type=\"text\"\n value={partition}\n onChange={this.handlePartitionChange}\n className=\"form-control input-partition\"\n />\n <div className=\"input-group-append\">\n <button type=\"button\" className=\"btn btn-outline-primary\">\n <FontAwesomeIcon icon={vsTriangleDown} />\n <Tooltip>Partitions</Tooltip>\n <DropdownMenu\n ref={searchMenu => {\n this.searchMenu = searchMenu;\n }}\n actions={[{ menuElement: partitionSelectorSearch }]}\n onMenuOpened={this.handleSearchOpened}\n onMenuClosed={this.handleSearchClosed}\n />\n </button>\n </div>\n </div>\n <div className=\"iris-grid-partition-selector-spacer\" />\n <button\n type=\"button\"\n className=\"btn btn-outline-primary btn-ignore\"\n onClick={this.handleIgnoreClick}\n >\n Ignore & Fetch All\n </button>\n <button\n type=\"button\"\n className=\"btn btn-outline-primary btn-append\"\n onClick={this.handleAppendClick}\n >\n Append Command\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon btn-close\"\n onClick={onDone}\n >\n <FontAwesomeIcon icon={vsClose} />\n </button>\n </div>\n );\n }\n}\n\nexport default IrisGridPartitionSelector;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IrisGridPartitionSelector.js","names":["React","Component","FontAwesomeIcon","DropdownMenu","Tooltip","vsTriangleDown","vsClose","Log","debounce","PartitionSelectorSearch","log","module","PARTITION_CHANGE_DEBOUNCE_MS","IrisGridPartitionSelector","constructor","props","sendUpdate","handleAppendClick","bind","handleCloseClick","handleIgnoreClick","handlePartitionChange","handlePartitionSelect","handlePartitionListResized","handleSearchOpened","handleSearchClosed","searchMenu","selectorSearch","partition","state","componentWillUnmount","debounceUpdate","cancel","debug2","onAppend","sendDone","sendFetchAll","event","value","target","setState","closeMenu","scheduleUpdate","table","applyFilter","focus","flush","onDone","onChange","onFetchAll","render","columnName","dh","getFormattedString","partitionSelectorSearch","menuElement","undefined"],"sources":["../src/IrisGridPartitionSelector.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { DropdownMenu, Tooltip } from '@deephaven/components';\nimport { vsTriangleDown, vsClose } from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport debounce from 'lodash.debounce';\nimport type { dh as DhType, Table } from '@deephaven/jsapi-types';\nimport PartitionSelectorSearch from './PartitionSelectorSearch';\nimport './IrisGridPartitionSelector.scss';\nimport { ColumnName } from './CommonTypes';\n\nconst log = Log.module('IrisGridPartitionSelector');\n\nconst PARTITION_CHANGE_DEBOUNCE_MS = 250;\ninterface IrisGridPartitionSelectorProps<T> {\n dh: DhType;\n getFormattedString: (value: T, type: string, name: string) => string;\n table: Table;\n columnName: ColumnName;\n partition: string;\n onAppend: (partition: string) => void;\n onFetchAll: () => void;\n onDone: (event?: React.MouseEvent<HTMLButtonElement>) => void;\n onChange: (partition: string) => void;\n}\ninterface IrisGridPartitionSelectorState {\n partition: string;\n}\nclass IrisGridPartitionSelector<T> extends Component<\n IrisGridPartitionSelectorProps<T>,\n IrisGridPartitionSelectorState\n> {\n static defaultProps = {\n onAppend: (): void => undefined,\n onChange: (): void => undefined,\n onFetchAll: (): void => undefined,\n onDone: (): void => undefined,\n partition: '',\n };\n\n constructor(props: IrisGridPartitionSelectorProps<T>) {\n super(props);\n\n this.handleAppendClick = this.handleAppendClick.bind(this);\n this.handleCloseClick = this.handleCloseClick.bind(this);\n this.handleIgnoreClick = this.handleIgnoreClick.bind(this);\n this.handlePartitionChange = this.handlePartitionChange.bind(this);\n this.handlePartitionSelect = this.handlePartitionSelect.bind(this);\n this.handlePartitionListResized =\n this.handlePartitionListResized.bind(this);\n this.handleSearchOpened = this.handleSearchOpened.bind(this);\n this.handleSearchClosed = this.handleSearchClosed.bind(this);\n\n this.searchMenu = null;\n this.selectorSearch = null;\n\n const { partition } = props;\n this.state = {\n partition,\n };\n }\n\n componentWillUnmount(): void {\n this.debounceUpdate.cancel();\n }\n\n searchMenu: DropdownMenu | null;\n\n selectorSearch: PartitionSelectorSearch<T> | null;\n\n handleAppendClick(): void {\n log.debug2('handleAppendClick');\n\n const { onAppend } = this.props;\n const { partition } = this.state;\n onAppend(partition);\n }\n\n handleCloseClick(): void {\n log.debug2('handleCloseClick');\n\n this.sendDone();\n }\n\n handleIgnoreClick(): void {\n log.debug2('handleIgnoreClick');\n\n this.sendFetchAll();\n }\n\n handlePartitionChange(event: React.ChangeEvent<HTMLInputElement>): void {\n log.debug2('handlePartitionChange');\n\n const { value: partition } = event.target;\n\n this.setState({ partition });\n\n this.debounceUpdate();\n }\n\n handlePartitionSelect(partition: string): void {\n if (this.searchMenu) {\n this.searchMenu.closeMenu();\n }\n\n this.setState({ partition }, () => {\n this.sendUpdate();\n });\n }\n\n handlePartitionListResized(): void {\n if (this.searchMenu) {\n this.searchMenu.scheduleUpdate();\n }\n }\n\n handleSearchClosed(): void {\n // Reset the table filter so it's ready next time user opens search\n const { table } = this.props;\n table.applyFilter([]);\n }\n\n handleSearchOpened(): void {\n if (this.selectorSearch) {\n this.selectorSearch.focus();\n }\n }\n\n debounceUpdate = debounce((): void => {\n this.sendUpdate();\n }, PARTITION_CHANGE_DEBOUNCE_MS);\n\n sendDone(): void {\n this.debounceUpdate.flush();\n\n const { onDone } = this.props;\n onDone();\n }\n\n sendUpdate(): void {\n log.debug2('sendUpdate');\n\n const { onChange } = this.props;\n const { partition } = this.state;\n onChange(partition);\n }\n\n sendFetchAll(): void {\n log.debug2('sendFetchAll');\n\n this.debounceUpdate.cancel();\n\n const { onFetchAll } = this.props;\n onFetchAll();\n }\n\n render(): JSX.Element {\n const { columnName, dh, getFormattedString, onDone, table } = this.props;\n const { partition } = this.state;\n const partitionSelectorSearch = (\n <PartitionSelectorSearch\n dh={dh}\n key=\"search\"\n getFormattedString={getFormattedString}\n table={table}\n onSelect={this.handlePartitionSelect}\n onListResized={this.handlePartitionListResized}\n ref={selectorSearch => {\n this.selectorSearch = selectorSearch;\n }}\n />\n );\n return (\n <div className=\"iris-grid-partition-selector\">\n <div className=\"status-message\">\n <span>Filtering "{columnName}" partition to</span>\n </div>\n <div className=\"input-group\">\n <input\n type=\"text\"\n value={partition}\n onChange={this.handlePartitionChange}\n className=\"form-control input-partition\"\n />\n <div className=\"input-group-append\">\n <button type=\"button\" className=\"btn btn-outline-primary\">\n <FontAwesomeIcon icon={vsTriangleDown} />\n <Tooltip>Partitions</Tooltip>\n <DropdownMenu\n ref={searchMenu => {\n this.searchMenu = searchMenu;\n }}\n actions={[{ menuElement: partitionSelectorSearch }]}\n onMenuOpened={this.handleSearchOpened}\n onMenuClosed={this.handleSearchClosed}\n />\n </button>\n </div>\n </div>\n <div className=\"iris-grid-partition-selector-spacer\" />\n <button\n type=\"button\"\n className=\"btn btn-outline-primary btn-ignore\"\n onClick={this.handleIgnoreClick}\n >\n Ignore & Fetch All\n </button>\n <button\n type=\"button\"\n className=\"btn btn-outline-primary btn-append\"\n onClick={this.handleAppendClick}\n >\n Append Command\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon btn-close\"\n onClick={onDone}\n >\n <FontAwesomeIcon icon={vsClose} />\n </button>\n </div>\n );\n }\n}\n\nexport default IrisGridPartitionSelector;\n"],"mappings":"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"}
|