@deephaven/dashboard-core-plugins 0.22.3-beta.18 → 0.22.3-beta.21
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/ChartBuilderPlugin.d.ts +1 -1
- package/dist/ChartBuilderPlugin.d.ts.map +1 -1
- package/dist/ChartBuilderPlugin.js +6 -8
- package/dist/ChartBuilderPlugin.js.map +1 -1
- package/dist/ChartPlugin.d.ts +1 -1
- package/dist/ChartPlugin.d.ts.map +1 -1
- package/dist/ChartPlugin.js +4 -8
- package/dist/ChartPlugin.js.map +1 -1
- package/dist/ConsolePlugin.d.ts +1 -1
- package/dist/ConsolePlugin.d.ts.map +1 -1
- package/dist/ConsolePlugin.js +16 -62
- package/dist/ConsolePlugin.js.map +1 -1
- package/dist/FilterPlugin.d.ts +1 -1
- package/dist/FilterPlugin.d.ts.map +1 -1
- package/dist/FilterPlugin.js +6 -13
- package/dist/FilterPlugin.js.map +1 -1
- package/dist/GridPlugin.d.ts +1 -1
- package/dist/GridPlugin.d.ts.map +1 -1
- package/dist/GridPlugin.js +4 -8
- package/dist/GridPlugin.js.map +1 -1
- package/dist/LinkerPlugin.d.ts +1 -1
- package/dist/LinkerPlugin.d.ts.map +1 -1
- package/dist/LinkerPlugin.js +2 -2
- package/dist/LinkerPlugin.js.map +1 -1
- package/dist/MarkdownPlugin.d.ts +1 -1
- package/dist/MarkdownPlugin.d.ts.map +1 -1
- package/dist/MarkdownPlugin.js +4 -8
- package/dist/MarkdownPlugin.js.map +1 -1
- package/dist/PandasPlugin.d.ts +1 -1
- package/dist/PandasPlugin.d.ts.map +1 -1
- package/dist/PandasPlugin.js +4 -8
- package/dist/PandasPlugin.js.map +1 -1
- package/dist/controls/ControlType.js +0 -6
- package/dist/controls/ControlType.js.map +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.js +7 -51
- package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
- package/dist/controls/input-filter/InputFilter.js +1 -31
- package/dist/controls/input-filter/InputFilter.js.map +1 -1
- package/dist/controls/markdown/MarkdownContainer.js +0 -3
- package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
- package/dist/controls/markdown/MarkdownEditor.d.ts +0 -2
- package/dist/controls/markdown/MarkdownEditor.d.ts.map +1 -1
- package/dist/controls/markdown/MarkdownEditor.js +13 -20
- package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
- package/dist/controls/markdown/MarkdownStartPage.js +0 -11
- package/dist/controls/markdown/MarkdownStartPage.js.map +1 -1
- package/dist/controls/markdown/MarkdownUtils.js +0 -7
- package/dist/controls/markdown/MarkdownUtils.js.map +1 -1
- package/dist/events/ChartEvent.js +0 -5
- package/dist/events/ChartEvent.js.map +1 -1
- package/dist/events/ConsoleEvent.js +0 -7
- package/dist/events/ConsoleEvent.js.map +1 -1
- package/dist/events/InputFilterEvent.js +0 -10
- package/dist/events/InputFilterEvent.js.map +1 -1
- package/dist/events/IrisGridEvent.js +0 -8
- package/dist/events/IrisGridEvent.js.map +1 -1
- package/dist/events/MarkdownEvent.js.map +1 -1
- package/dist/events/NotebookEvent.js +0 -10
- package/dist/events/NotebookEvent.js.map +1 -1
- package/dist/events/PQEvent.js +0 -5
- package/dist/events/PQEvent.js.map +1 -1
- package/dist/events/PandasEvent.js +0 -4
- package/dist/events/PandasEvent.js.map +1 -1
- package/dist/events/TabEvent.js +0 -8
- package/dist/events/TabEvent.js.map +1 -1
- package/dist/events/index.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/linker/Linker.d.ts +3 -0
- package/dist/linker/Linker.d.ts.map +1 -1
- package/dist/linker/Linker.js +70 -119
- package/dist/linker/Linker.js.map +1 -1
- package/dist/linker/LinkerLink.css +90 -25
- package/dist/linker/LinkerLink.css.map +1 -1
- package/dist/linker/LinkerLink.d.ts +20 -2
- package/dist/linker/LinkerLink.d.ts.map +1 -1
- package/dist/linker/LinkerLink.js +214 -23
- package/dist/linker/LinkerLink.js.map +1 -1
- package/dist/linker/LinkerOverlayContent.css +0 -4
- package/dist/linker/LinkerOverlayContent.css.map +1 -1
- package/dist/linker/LinkerOverlayContent.d.ts +11 -0
- package/dist/linker/LinkerOverlayContent.d.ts.map +1 -1
- package/dist/linker/LinkerOverlayContent.js +78 -33
- package/dist/linker/LinkerOverlayContent.js.map +1 -1
- package/dist/linker/LinkerUtils.d.ts +9 -2
- package/dist/linker/LinkerUtils.d.ts.map +1 -1
- package/dist/linker/LinkerUtils.js +9 -25
- package/dist/linker/LinkerUtils.js.map +1 -1
- package/dist/linker/ToolType.js.map +1 -1
- package/dist/panels/ChartColumnSelectorOverlay.d.ts +5 -5
- package/dist/panels/ChartColumnSelectorOverlay.d.ts.map +1 -1
- package/dist/panels/ChartColumnSelectorOverlay.js +4 -7
- package/dist/panels/ChartColumnSelectorOverlay.js.map +1 -1
- package/dist/panels/ChartFilterOverlay.d.ts +4 -4
- package/dist/panels/ChartFilterOverlay.d.ts.map +1 -1
- package/dist/panels/ChartFilterOverlay.js +2 -7
- package/dist/panels/ChartFilterOverlay.js.map +1 -1
- package/dist/panels/ChartPanel.d.ts.map +1 -1
- package/dist/panels/ChartPanel.js +11 -150
- package/dist/panels/ChartPanel.js.map +1 -1
- package/dist/panels/CommandHistoryPanel.d.ts.map +1 -1
- package/dist/panels/CommandHistoryPanel.js +1 -26
- package/dist/panels/CommandHistoryPanel.js.map +1 -1
- package/dist/panels/ConsolePanel.d.ts.map +1 -1
- package/dist/panels/ConsolePanel.js +12 -57
- package/dist/panels/ConsolePanel.js.map +1 -1
- package/dist/panels/DropdownFilterPanel.d.ts.map +1 -1
- package/dist/panels/DropdownFilterPanel.js +16 -122
- package/dist/panels/DropdownFilterPanel.js.map +1 -1
- package/dist/panels/FileExplorerPanel.js +4 -33
- package/dist/panels/FileExplorerPanel.js.map +1 -1
- package/dist/panels/FilterSetManager.d.ts.map +1 -1
- package/dist/panels/FilterSetManager.js +13 -86
- package/dist/panels/FilterSetManager.js.map +1 -1
- package/dist/panels/FilterSetManagerPanel.js +10 -64
- package/dist/panels/FilterSetManagerPanel.js.map +1 -1
- package/dist/panels/InputFilterPanel.d.ts.map +1 -1
- package/dist/panels/InputFilterPanel.js +8 -38
- package/dist/panels/InputFilterPanel.js.map +1 -1
- package/dist/panels/IrisGridPanel.d.ts.map +1 -1
- package/dist/panels/IrisGridPanel.js +24 -133
- package/dist/panels/IrisGridPanel.js.map +1 -1
- package/dist/panels/IrisGridPanelTooltip.d.ts +5 -5
- package/dist/panels/IrisGridPanelTooltip.d.ts.map +1 -1
- package/dist/panels/IrisGridPanelTooltip.js +2 -5
- package/dist/panels/IrisGridPanelTooltip.js.map +1 -1
- package/dist/panels/LogPanel.js +4 -22
- package/dist/panels/LogPanel.js.map +1 -1
- package/dist/panels/MarkdownNotebook.js +3 -30
- package/dist/panels/MarkdownNotebook.js.map +1 -1
- package/dist/panels/MarkdownPanel.js +2 -30
- package/dist/panels/MarkdownPanel.js.map +1 -1
- package/dist/panels/MockFileStorage.js +1 -14
- package/dist/panels/MockFileStorage.js.map +1 -1
- package/dist/panels/MockFileStorageTable.js +11 -30
- package/dist/panels/MockFileStorageTable.js.map +1 -1
- package/dist/panels/NotebookPanel.js +24 -182
- package/dist/panels/NotebookPanel.js.map +1 -1
- package/dist/panels/PandasPanel.js +1 -20
- package/dist/panels/PandasPanel.js.map +1 -1
- package/dist/panels/Panel.js +2 -38
- package/dist/panels/Panel.js.map +1 -1
- package/dist/panels/PanelContextMenu.js +7 -29
- package/dist/panels/PanelContextMenu.js.map +1 -1
- package/dist/panels/RenameDialog.js +2 -17
- package/dist/panels/RenameDialog.js.map +1 -1
- package/dist/panels/WidgetPanel.js +2 -20
- package/dist/panels/WidgetPanel.js.map +1 -1
- package/dist/panels/WidgetPanelTooltip.d.ts +5 -5
- package/dist/panels/WidgetPanelTooltip.d.ts.map +1 -1
- package/dist/panels/WidgetPanelTooltip.js +2 -4
- package/dist/panels/WidgetPanelTooltip.js.map +1 -1
- package/dist/panels/index.js.map +1 -1
- package/dist/prop-types/CommonPropTypes.js +0 -3
- package/dist/prop-types/CommonPropTypes.js.map +1 -1
- package/dist/prop-types/UIPropTypes.js.map +1 -1
- package/dist/prop-types/index.js.map +1 -1
- package/dist/redux/actionTypes.js.map +1 -1
- package/dist/redux/actions.js +8 -9
- package/dist/redux/actions.js.map +1 -1
- package/dist/redux/index.js.map +1 -1
- package/dist/redux/reducers/connection.js.map +1 -1
- package/dist/redux/reducers/index.js.map +1 -1
- package/dist/redux/reducers/sessionWrapper.js.map +1 -1
- package/dist/redux/selectors.js +10 -15
- package/dist/redux/selectors.js.map +1 -1
- package/package.json +21 -20
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
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; }
|
|
2
|
-
|
|
3
2
|
import React, { PureComponent } from 'react';
|
|
4
3
|
import classNames from 'classnames';
|
|
5
4
|
import Markdown from 'react-markdown';
|
|
@@ -12,17 +11,14 @@ import { assertNotNull } from '@deephaven/utils';
|
|
|
12
11
|
export class MarkdownNotebook extends PureComponent {
|
|
13
12
|
constructor(props) {
|
|
14
13
|
super(props);
|
|
15
|
-
|
|
16
14
|
_defineProperty(this, "commands", void 0);
|
|
17
|
-
|
|
18
15
|
_defineProperty(this, "codeElements", void 0);
|
|
19
|
-
|
|
20
16
|
_defineProperty(this, "editorScrollView", void 0);
|
|
21
|
-
|
|
22
17
|
this.handleRunSelected = this.handleRunSelected.bind(this);
|
|
23
18
|
this.renderCodeBlock = this.renderCodeBlock.bind(this);
|
|
24
|
-
this.renderLink = this.renderLink.bind(this);
|
|
19
|
+
this.renderLink = this.renderLink.bind(this);
|
|
25
20
|
|
|
21
|
+
// Map of each code block from it's starting line number to the code within that block
|
|
26
22
|
this.commands = new Map();
|
|
27
23
|
this.codeElements = new Map();
|
|
28
24
|
this.editorScrollView = /*#__PURE__*/React.createRef();
|
|
@@ -34,20 +30,16 @@ export class MarkdownNotebook extends PureComponent {
|
|
|
34
30
|
nextStartLine: null
|
|
35
31
|
};
|
|
36
32
|
}
|
|
37
|
-
|
|
38
33
|
componentDidMount() {
|
|
39
34
|
this.updateHasCode();
|
|
40
35
|
}
|
|
41
|
-
|
|
42
36
|
componentDidUpdate() {
|
|
43
37
|
this.updateHasCode();
|
|
44
38
|
}
|
|
45
|
-
|
|
46
39
|
updateHasCode() {
|
|
47
40
|
var {
|
|
48
41
|
hasCode
|
|
49
42
|
} = this.state;
|
|
50
|
-
|
|
51
43
|
if (this.commands.size === 0 && hasCode) {
|
|
52
44
|
this.setState({
|
|
53
45
|
hasCode: false
|
|
@@ -58,27 +50,22 @@ export class MarkdownNotebook extends PureComponent {
|
|
|
58
50
|
});
|
|
59
51
|
}
|
|
60
52
|
}
|
|
53
|
+
|
|
61
54
|
/**
|
|
62
55
|
* @param line The line of the code block to start from
|
|
63
56
|
* @returns The next line of the code block to start from
|
|
64
57
|
*/
|
|
65
|
-
|
|
66
|
-
|
|
67
58
|
getNextStartLine(line) {
|
|
68
59
|
var keys = [...this.commands.keys()];
|
|
69
60
|
var nextIndex = keys.findIndex(key => key === line) + 1;
|
|
70
|
-
|
|
71
61
|
if (nextIndex >= keys.length) {
|
|
72
62
|
// We got to the last block, disable
|
|
73
63
|
return null;
|
|
74
64
|
}
|
|
75
|
-
|
|
76
65
|
return keys[nextIndex];
|
|
77
66
|
}
|
|
78
|
-
|
|
79
67
|
handleRunSelected(event) {
|
|
80
68
|
var _this$codeElements$ge, _element$parentElemen;
|
|
81
|
-
|
|
82
69
|
event.preventDefault();
|
|
83
70
|
event.stopPropagation();
|
|
84
71
|
var {
|
|
@@ -86,20 +73,16 @@ export class MarkdownNotebook extends PureComponent {
|
|
|
86
73
|
} = this.state;
|
|
87
74
|
var keys = [...this.commands.keys()];
|
|
88
75
|
var keyIndex = keys.findIndex(key => key === nextStartLine || nextStartLine == null);
|
|
89
|
-
|
|
90
76
|
if (keyIndex < 0) {
|
|
91
77
|
return;
|
|
92
78
|
}
|
|
93
|
-
|
|
94
79
|
var startLine = keys[keyIndex];
|
|
95
80
|
var command = this.commands.get(startLine);
|
|
96
81
|
var newNextStartLine = this.getNextStartLine(startLine);
|
|
97
82
|
var element = (_this$codeElements$ge = this.codeElements.get(startLine)) === null || _this$codeElements$ge === void 0 ? void 0 : _this$codeElements$ge.current;
|
|
98
83
|
var nextElement = element === null || element === void 0 ? void 0 : (_element$parentElemen = element.parentElement) === null || _element$parentElemen === void 0 ? void 0 : _element$parentElemen.nextElementSibling;
|
|
99
|
-
|
|
100
84
|
if (nextElement != null) {
|
|
101
85
|
var _this$editorScrollVie;
|
|
102
|
-
|
|
103
86
|
var {
|
|
104
87
|
offsetTop
|
|
105
88
|
} = nextElement;
|
|
@@ -109,13 +92,11 @@ export class MarkdownNotebook extends PureComponent {
|
|
|
109
92
|
left: 0
|
|
110
93
|
});
|
|
111
94
|
}
|
|
112
|
-
|
|
113
95
|
this.runCode(command);
|
|
114
96
|
this.setState({
|
|
115
97
|
nextStartLine: newNextStartLine
|
|
116
98
|
});
|
|
117
99
|
}
|
|
118
|
-
|
|
119
100
|
runCode(command) {
|
|
120
101
|
var {
|
|
121
102
|
onRunCode
|
|
@@ -125,7 +106,6 @@ export class MarkdownNotebook extends PureComponent {
|
|
|
125
106
|
hasRunCode: true
|
|
126
107
|
});
|
|
127
108
|
}
|
|
128
|
-
|
|
129
109
|
renderCodeBlock(props) {
|
|
130
110
|
var {
|
|
131
111
|
children,
|
|
@@ -153,13 +133,11 @@ export class MarkdownNotebook extends PureComponent {
|
|
|
153
133
|
var isFirstBlock = this.commands.size === 0;
|
|
154
134
|
var isSelected = nextStartLine === line || isFirstBlock && nextStartLine == null && !hasRunCode;
|
|
155
135
|
var language = className !== undefined && className.startsWith('language-') ? className.substring(9) : 'plaintext';
|
|
156
|
-
|
|
157
136
|
if (inline != null && inline) {
|
|
158
137
|
return /*#__PURE__*/React.createElement("code", {
|
|
159
138
|
className: className
|
|
160
139
|
}, children);
|
|
161
140
|
}
|
|
162
|
-
|
|
163
141
|
this.commands.set(line, command);
|
|
164
142
|
this.codeElements.set(line, ref);
|
|
165
143
|
return /*#__PURE__*/React.createElement("div", {
|
|
@@ -190,7 +168,6 @@ export class MarkdownNotebook extends PureComponent {
|
|
|
190
168
|
language: language
|
|
191
169
|
}, React.Children.map(children, child => typeof child === 'string' ? child.trim() : child))));
|
|
192
170
|
}
|
|
193
|
-
|
|
194
171
|
renderLink(props) {
|
|
195
172
|
var {
|
|
196
173
|
onLinkClick
|
|
@@ -206,7 +183,6 @@ export class MarkdownNotebook extends PureComponent {
|
|
|
206
183
|
target: target
|
|
207
184
|
}, children);
|
|
208
185
|
}
|
|
209
|
-
|
|
210
186
|
render() {
|
|
211
187
|
var {
|
|
212
188
|
content,
|
|
@@ -246,12 +222,9 @@ export class MarkdownNotebook extends PureComponent {
|
|
|
246
222
|
includeElementIndex: true
|
|
247
223
|
}, content)));
|
|
248
224
|
}
|
|
249
|
-
|
|
250
225
|
}
|
|
251
|
-
|
|
252
226
|
_defineProperty(MarkdownNotebook, "defaultProps", {
|
|
253
227
|
onRunCode: () => undefined
|
|
254
228
|
});
|
|
255
|
-
|
|
256
229
|
export default MarkdownNotebook;
|
|
257
230
|
//# sourceMappingURL=MarkdownNotebook.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownNotebook.js","names":["React","PureComponent","classNames","Markdown","remarkGfm","Button","Code","vsPlay","assertNotNull","MarkdownNotebook","constructor","props","handleRunSelected","bind","renderCodeBlock","renderLink","commands","Map","codeElements","editorScrollView","createRef","state","hasCode","hasRunCode","nextStartLine","componentDidMount","updateHasCode","componentDidUpdate","size","setState","getNextStartLine","line","keys","nextIndex","findIndex","key","length","event","preventDefault","stopPropagation","keyIndex","startLine","command","get","newNextStartLine","element","current","nextElement","parentElement","nextElementSibling","offsetTop","top","scroll","left","runCode","onRunCode","children","className","inline","node","nodeChildren","position","start","value","ref","isFirstBlock","isSelected","language","undefined","startsWith","substring","set","Children","map","child","trim","onLinkClick","href","target","render","content","transformImageUri","transformLinkUri","flashing","code","a"],"sources":["../../src/panels/MarkdownNotebook.tsx"],"sourcesContent":["import React, {\n PureComponent,\n ReactElement,\n RefObject,\n MouseEvent,\n MouseEventHandler,\n} from 'react';\nimport classNames from 'classnames';\nimport Markdown from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport { Button } from '@deephaven/components';\nimport { Code } from '@deephaven/console';\nimport { vsPlay } from '@deephaven/icons';\nimport './MarkdownNotebook.scss';\nimport {\n ReactMarkdownProps,\n TransformImage,\n TransformLink,\n} from 'react-markdown/src/ast-to-react';\nimport { assertNotNull } from '@deephaven/utils';\n\ninterface MarkdownNotebookProps {\n onRunCode: (command?: string) => void;\n content: string;\n onLinkClick: MouseEventHandler<HTMLAnchorElement>;\n transformImageUri?: TransformImage;\n transformLinkUri?: false | TransformLink | null;\n}\n\ninterface MarkdownNotebookState {\n hasCode: boolean;\n\n // Keep track if any code has been executed yet. If not, make the run button flash\n hasRunCode: boolean;\n\n // Line of the next block to execute. Null to start at the first block\n nextStartLine: number | null;\n}\n\nexport class MarkdownNotebook extends PureComponent<\n MarkdownNotebookProps,\n MarkdownNotebookState\n> {\n static defaultProps = {\n onRunCode: (): void => undefined,\n };\n\n constructor(props: MarkdownNotebookProps) {\n super(props);\n\n this.handleRunSelected = this.handleRunSelected.bind(this);\n this.renderCodeBlock = this.renderCodeBlock.bind(this);\n this.renderLink = this.renderLink.bind(this);\n\n // Map of each code block from it's starting line number to the code within that block\n this.commands = new Map();\n this.codeElements = new Map();\n this.editorScrollView = React.createRef();\n\n this.state = {\n hasCode: false,\n\n // Keep track if any code has been executed yet. If not, make the run button flash\n hasRunCode: false,\n\n // Line of the next block to execute. Null to start at the first block\n nextStartLine: null,\n };\n }\n\n componentDidMount(): void {\n this.updateHasCode();\n }\n\n componentDidUpdate(): void {\n this.updateHasCode();\n }\n\n commands: Map<number, string>;\n\n codeElements: Map<number, React.RefObject<HTMLDivElement>>;\n\n editorScrollView: RefObject<HTMLDivElement>;\n\n updateHasCode(): void {\n const { hasCode } = this.state;\n if (this.commands.size === 0 && hasCode) {\n this.setState({ hasCode: false });\n } else if (this.commands.size > 0 && !hasCode) {\n this.setState({ hasCode: true });\n }\n }\n\n /**\n * @param line The line of the code block to start from\n * @returns The next line of the code block to start from\n */\n getNextStartLine(line: number | null): number | null {\n const keys = [...this.commands.keys()];\n const nextIndex = keys.findIndex(key => key === line) + 1;\n if (nextIndex >= keys.length) {\n // We got to the last block, disable\n return null;\n }\n\n return keys[nextIndex];\n }\n\n handleRunSelected(event: MouseEvent<HTMLButtonElement>): void {\n event.preventDefault();\n event.stopPropagation();\n\n const { nextStartLine } = this.state;\n const keys = [...this.commands.keys()];\n const keyIndex = keys.findIndex(\n key => key === nextStartLine || nextStartLine == null\n );\n if (keyIndex < 0) {\n return;\n }\n const startLine = keys[keyIndex];\n const command = this.commands.get(startLine);\n const newNextStartLine = this.getNextStartLine(startLine);\n const element = this.codeElements.get(startLine)?.current;\n const nextElement = element?.parentElement?.nextElementSibling;\n if (nextElement != null) {\n const { offsetTop } = nextElement as HTMLElement;\n const top = offsetTop;\n this.editorScrollView.current?.scroll({\n top,\n left: 0,\n });\n }\n\n this.runCode(command);\n this.setState({ nextStartLine: newNextStartLine });\n }\n\n runCode(command?: string): void {\n const { onRunCode } = this.props;\n onRunCode(command);\n\n this.setState({ hasRunCode: true });\n }\n\n renderCodeBlock(\n props: JSX.IntrinsicElements['code'] &\n ReactMarkdownProps & {\n inline?: boolean;\n }\n ): ReactElement {\n const { children, className, inline, node } = props;\n const { hasRunCode, nextStartLine } = this.state;\n const { children: nodeChildren, position } = node;\n assertNotNull(position);\n const { start } = position;\n const { line } = start;\n const command = (nodeChildren[0] as { value: string }).value;\n const ref = React.createRef<HTMLDivElement>();\n const isFirstBlock = this.commands.size === 0;\n const isSelected =\n nextStartLine === line ||\n (isFirstBlock && nextStartLine == null && !hasRunCode);\n const language =\n className !== undefined && className.startsWith('language-')\n ? className.substring(9)\n : 'plaintext';\n\n if (inline != null && inline) {\n return <code className={className}>{children}</code>;\n }\n\n this.commands.set(line, command);\n this.codeElements.set(line, ref);\n\n return (\n <div\n className={classNames('markdown-notebook-code-block', {\n 'is-selected': isSelected,\n })}\n ref={ref}\n onClick={() => {\n this.setState({ nextStartLine: line });\n }}\n role=\"presentation\"\n >\n <Button\n kind=\"ghost\"\n icon={vsPlay}\n className=\"btn-play-block\"\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n\n this.runCode(command);\n this.setState({ nextStartLine: line });\n }}\n tooltip=\"Run code\"\n />\n <code>\n <Code language={language}>\n {React.Children.map(children, child =>\n typeof child === 'string' ? child.trim() : child\n )}\n </Code>\n </code>\n </div>\n );\n }\n\n renderLink(\n props: React.ClassAttributes<HTMLAnchorElement> &\n React.AnchorHTMLAttributes<HTMLAnchorElement> &\n ReactMarkdownProps\n ): ReactElement {\n const { onLinkClick } = this.props;\n const { href, children, target } = props;\n return (\n <a href={href} onClick={onLinkClick} target={target}>\n {children}\n </a>\n );\n }\n\n render(): ReactElement {\n const { content, transformImageUri, transformLinkUri } = this.props;\n const { hasCode, hasRunCode, nextStartLine } = this.state;\n return (\n <div className=\"markdown-notebook\">\n <div className=\"markdown-notebook-toolbar\">\n <Button\n className={classNames('btn-play-selected-cell', {\n flashing: hasCode && !hasRunCode,\n })}\n kind=\"ghost\"\n icon={vsPlay}\n onClick={this.handleRunSelected}\n tooltip=\"Run code and select next\"\n disabled={(hasRunCode && nextStartLine == null) || !hasCode}\n >\n Run Selected Code\n </Button>\n </div>\n <div className=\"markdown-notebook-content\" ref={this.editorScrollView}>\n <Markdown\n components={{ code: this.renderCodeBlock, a: this.renderLink }}\n linkTarget=\"_blank\"\n remarkPlugins={[remarkGfm]}\n transformLinkUri={transformLinkUri}\n transformImageUri={transformImageUri}\n includeElementIndex\n >\n {content}\n </Markdown>\n </div>\n </div>\n );\n }\n}\n\nexport default MarkdownNotebook;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MarkdownNotebook.js","names":["React","PureComponent","classNames","Markdown","remarkGfm","Button","Code","vsPlay","assertNotNull","MarkdownNotebook","constructor","props","handleRunSelected","bind","renderCodeBlock","renderLink","commands","Map","codeElements","editorScrollView","createRef","state","hasCode","hasRunCode","nextStartLine","componentDidMount","updateHasCode","componentDidUpdate","size","setState","getNextStartLine","line","keys","nextIndex","findIndex","key","length","event","preventDefault","stopPropagation","keyIndex","startLine","command","get","newNextStartLine","element","current","nextElement","parentElement","nextElementSibling","offsetTop","top","scroll","left","runCode","onRunCode","children","className","inline","node","nodeChildren","position","start","value","ref","isFirstBlock","isSelected","language","undefined","startsWith","substring","set","Children","map","child","trim","onLinkClick","href","target","render","content","transformImageUri","transformLinkUri","flashing","code","a"],"sources":["../../src/panels/MarkdownNotebook.tsx"],"sourcesContent":["import React, {\n PureComponent,\n ReactElement,\n RefObject,\n MouseEvent,\n MouseEventHandler,\n} from 'react';\nimport classNames from 'classnames';\nimport Markdown from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport { Button } from '@deephaven/components';\nimport { Code } from '@deephaven/console';\nimport { vsPlay } from '@deephaven/icons';\nimport './MarkdownNotebook.scss';\nimport {\n ReactMarkdownProps,\n TransformImage,\n TransformLink,\n} from 'react-markdown/src/ast-to-react';\nimport { assertNotNull } from '@deephaven/utils';\n\ninterface MarkdownNotebookProps {\n onRunCode: (command?: string) => void;\n content: string;\n onLinkClick: MouseEventHandler<HTMLAnchorElement>;\n transformImageUri?: TransformImage;\n transformLinkUri?: false | TransformLink | null;\n}\n\ninterface MarkdownNotebookState {\n hasCode: boolean;\n\n // Keep track if any code has been executed yet. If not, make the run button flash\n hasRunCode: boolean;\n\n // Line of the next block to execute. Null to start at the first block\n nextStartLine: number | null;\n}\n\nexport class MarkdownNotebook extends PureComponent<\n MarkdownNotebookProps,\n MarkdownNotebookState\n> {\n static defaultProps = {\n onRunCode: (): void => undefined,\n };\n\n constructor(props: MarkdownNotebookProps) {\n super(props);\n\n this.handleRunSelected = this.handleRunSelected.bind(this);\n this.renderCodeBlock = this.renderCodeBlock.bind(this);\n this.renderLink = this.renderLink.bind(this);\n\n // Map of each code block from it's starting line number to the code within that block\n this.commands = new Map();\n this.codeElements = new Map();\n this.editorScrollView = React.createRef();\n\n this.state = {\n hasCode: false,\n\n // Keep track if any code has been executed yet. If not, make the run button flash\n hasRunCode: false,\n\n // Line of the next block to execute. Null to start at the first block\n nextStartLine: null,\n };\n }\n\n componentDidMount(): void {\n this.updateHasCode();\n }\n\n componentDidUpdate(): void {\n this.updateHasCode();\n }\n\n commands: Map<number, string>;\n\n codeElements: Map<number, React.RefObject<HTMLDivElement>>;\n\n editorScrollView: RefObject<HTMLDivElement>;\n\n updateHasCode(): void {\n const { hasCode } = this.state;\n if (this.commands.size === 0 && hasCode) {\n this.setState({ hasCode: false });\n } else if (this.commands.size > 0 && !hasCode) {\n this.setState({ hasCode: true });\n }\n }\n\n /**\n * @param line The line of the code block to start from\n * @returns The next line of the code block to start from\n */\n getNextStartLine(line: number | null): number | null {\n const keys = [...this.commands.keys()];\n const nextIndex = keys.findIndex(key => key === line) + 1;\n if (nextIndex >= keys.length) {\n // We got to the last block, disable\n return null;\n }\n\n return keys[nextIndex];\n }\n\n handleRunSelected(event: MouseEvent<HTMLButtonElement>): void {\n event.preventDefault();\n event.stopPropagation();\n\n const { nextStartLine } = this.state;\n const keys = [...this.commands.keys()];\n const keyIndex = keys.findIndex(\n key => key === nextStartLine || nextStartLine == null\n );\n if (keyIndex < 0) {\n return;\n }\n const startLine = keys[keyIndex];\n const command = this.commands.get(startLine);\n const newNextStartLine = this.getNextStartLine(startLine);\n const element = this.codeElements.get(startLine)?.current;\n const nextElement = element?.parentElement?.nextElementSibling;\n if (nextElement != null) {\n const { offsetTop } = nextElement as HTMLElement;\n const top = offsetTop;\n this.editorScrollView.current?.scroll({\n top,\n left: 0,\n });\n }\n\n this.runCode(command);\n this.setState({ nextStartLine: newNextStartLine });\n }\n\n runCode(command?: string): void {\n const { onRunCode } = this.props;\n onRunCode(command);\n\n this.setState({ hasRunCode: true });\n }\n\n renderCodeBlock(\n props: JSX.IntrinsicElements['code'] &\n ReactMarkdownProps & {\n inline?: boolean;\n }\n ): ReactElement {\n const { children, className, inline, node } = props;\n const { hasRunCode, nextStartLine } = this.state;\n const { children: nodeChildren, position } = node;\n assertNotNull(position);\n const { start } = position;\n const { line } = start;\n const command = (nodeChildren[0] as { value: string }).value;\n const ref = React.createRef<HTMLDivElement>();\n const isFirstBlock = this.commands.size === 0;\n const isSelected =\n nextStartLine === line ||\n (isFirstBlock && nextStartLine == null && !hasRunCode);\n const language =\n className !== undefined && className.startsWith('language-')\n ? className.substring(9)\n : 'plaintext';\n\n if (inline != null && inline) {\n return <code className={className}>{children}</code>;\n }\n\n this.commands.set(line, command);\n this.codeElements.set(line, ref);\n\n return (\n <div\n className={classNames('markdown-notebook-code-block', {\n 'is-selected': isSelected,\n })}\n ref={ref}\n onClick={() => {\n this.setState({ nextStartLine: line });\n }}\n role=\"presentation\"\n >\n <Button\n kind=\"ghost\"\n icon={vsPlay}\n className=\"btn-play-block\"\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n\n this.runCode(command);\n this.setState({ nextStartLine: line });\n }}\n tooltip=\"Run code\"\n />\n <code>\n <Code language={language}>\n {React.Children.map(children, child =>\n typeof child === 'string' ? child.trim() : child\n )}\n </Code>\n </code>\n </div>\n );\n }\n\n renderLink(\n props: React.ClassAttributes<HTMLAnchorElement> &\n React.AnchorHTMLAttributes<HTMLAnchorElement> &\n ReactMarkdownProps\n ): ReactElement {\n const { onLinkClick } = this.props;\n const { href, children, target } = props;\n return (\n <a href={href} onClick={onLinkClick} target={target}>\n {children}\n </a>\n );\n }\n\n render(): ReactElement {\n const { content, transformImageUri, transformLinkUri } = this.props;\n const { hasCode, hasRunCode, nextStartLine } = this.state;\n return (\n <div className=\"markdown-notebook\">\n <div className=\"markdown-notebook-toolbar\">\n <Button\n className={classNames('btn-play-selected-cell', {\n flashing: hasCode && !hasRunCode,\n })}\n kind=\"ghost\"\n icon={vsPlay}\n onClick={this.handleRunSelected}\n tooltip=\"Run code and select next\"\n disabled={(hasRunCode && nextStartLine == null) || !hasCode}\n >\n Run Selected Code\n </Button>\n </div>\n <div className=\"markdown-notebook-content\" ref={this.editorScrollView}>\n <Markdown\n components={{ code: this.renderCodeBlock, a: this.renderLink }}\n linkTarget=\"_blank\"\n remarkPlugins={[remarkGfm]}\n transformLinkUri={transformLinkUri}\n transformImageUri={transformImageUri}\n includeElementIndex\n >\n {content}\n </Markdown>\n </div>\n </div>\n );\n }\n}\n\nexport default MarkdownNotebook;\n"],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
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; }
|
|
2
|
-
|
|
3
2
|
import React, { Component } from 'react';
|
|
4
3
|
import memoize from 'memoize-one';
|
|
5
4
|
import { connect } from 'react-redux';
|
|
@@ -15,13 +14,9 @@ var log = Log.module('MarkdownPanel');
|
|
|
15
14
|
export class MarkdownPanel extends Component {
|
|
16
15
|
constructor(props) {
|
|
17
16
|
super(props);
|
|
18
|
-
|
|
19
17
|
_defineProperty(this, "markdownEditor", void 0);
|
|
20
|
-
|
|
21
18
|
_defineProperty(this, "editor", void 0);
|
|
22
|
-
|
|
23
19
|
_defineProperty(this, "getClosedMarkdowns", memoize(closedPanels => closedPanels.filter(panel => panel.component === 'MarkdownPanel').reverse()));
|
|
24
|
-
|
|
25
20
|
this.handleContainerDoubleClick = this.handleContainerDoubleClick.bind(this);
|
|
26
21
|
this.handleCreateMarkdown = this.handleCreateMarkdown.bind(this);
|
|
27
22
|
this.handleDeleteMarkdown = this.handleDeleteMarkdown.bind(this);
|
|
@@ -33,13 +28,11 @@ export class MarkdownPanel extends Component {
|
|
|
33
28
|
panelState
|
|
34
29
|
} = props;
|
|
35
30
|
var content = null;
|
|
36
|
-
|
|
37
31
|
if (panelState != null && panelState.content != null) {
|
|
38
32
|
({
|
|
39
33
|
content
|
|
40
34
|
} = panelState);
|
|
41
35
|
}
|
|
42
|
-
|
|
43
36
|
this.state = {
|
|
44
37
|
isStartPageShown: content == null,
|
|
45
38
|
isEditing: false,
|
|
@@ -49,26 +42,21 @@ export class MarkdownPanel extends Component {
|
|
|
49
42
|
};
|
|
50
43
|
this.markdownEditor = null;
|
|
51
44
|
}
|
|
52
|
-
|
|
53
45
|
setEditorPosition(clickPositionY) {
|
|
54
46
|
assertNotNull(this.markdownEditor);
|
|
55
47
|
var {
|
|
56
48
|
container: markdownEditorContainer
|
|
57
49
|
} = this.markdownEditor;
|
|
58
|
-
|
|
59
50
|
if (this.editor && markdownEditorContainer) {
|
|
60
51
|
var _this$editor$getModel, _this$editor$getModel2;
|
|
61
|
-
|
|
62
52
|
var contentTop = markdownEditorContainer.getBoundingClientRect().top;
|
|
63
53
|
var contentScrollTop = markdownEditorContainer.scrollTop;
|
|
64
54
|
var contentScrollHeight = markdownEditorContainer.scrollHeight;
|
|
65
55
|
var totalLines = (_this$editor$getModel = (_this$editor$getModel2 = this.editor.getModel()) === null || _this$editor$getModel2 === void 0 ? void 0 : _this$editor$getModel2.getLineCount()) !== null && _this$editor$getModel !== void 0 ? _this$editor$getModel : 0;
|
|
66
56
|
var lineToFocus = Math.round((contentScrollTop + clickPositionY - contentTop) / contentScrollHeight * totalLines);
|
|
67
|
-
|
|
68
57
|
if (lineToFocus > totalLines) {
|
|
69
58
|
lineToFocus = totalLines;
|
|
70
59
|
}
|
|
71
|
-
|
|
72
60
|
this.editor.revealLine(lineToFocus);
|
|
73
61
|
this.editor.setPosition({
|
|
74
62
|
lineNumber: lineToFocus,
|
|
@@ -77,13 +65,11 @@ export class MarkdownPanel extends Component {
|
|
|
77
65
|
this.editor.focus();
|
|
78
66
|
}
|
|
79
67
|
}
|
|
80
|
-
|
|
81
68
|
handleContainerDoubleClick(event) {
|
|
82
69
|
var {
|
|
83
70
|
isEditing
|
|
84
71
|
} = this.state;
|
|
85
72
|
var dbClickPositionY = event.clientY;
|
|
86
|
-
|
|
87
73
|
if (!isEditing) {
|
|
88
74
|
this.setState({
|
|
89
75
|
isEditing: true
|
|
@@ -92,12 +78,10 @@ export class MarkdownPanel extends Component {
|
|
|
92
78
|
});
|
|
93
79
|
}
|
|
94
80
|
}
|
|
95
|
-
|
|
96
81
|
handleEditorInitialized(editor) {
|
|
97
82
|
log.debug('Markdown Editor Initialized...');
|
|
98
83
|
this.editor = editor;
|
|
99
84
|
}
|
|
100
|
-
|
|
101
85
|
handleCreateMarkdown() {
|
|
102
86
|
log.debug('create markdown...');
|
|
103
87
|
this.setState({
|
|
@@ -114,7 +98,6 @@ export class MarkdownPanel extends Component {
|
|
|
114
98
|
}
|
|
115
99
|
});
|
|
116
100
|
}
|
|
117
|
-
|
|
118
101
|
handleOpenMarkdown(markdown) {
|
|
119
102
|
log.debug('open markdown...', markdown);
|
|
120
103
|
var {
|
|
@@ -124,26 +107,23 @@ export class MarkdownPanel extends Component {
|
|
|
124
107
|
var config = LayoutUtils.getComponentConfigFromContainer(glContainer);
|
|
125
108
|
glEventHub.emit(PanelEvent.REOPEN, markdown, config);
|
|
126
109
|
}
|
|
127
|
-
|
|
128
110
|
handleDeleteMarkdown(markdown) {
|
|
129
111
|
var {
|
|
130
112
|
glEventHub
|
|
131
113
|
} = this.props;
|
|
132
114
|
glEventHub.emit(PanelEvent.DELETE, markdown);
|
|
133
115
|
}
|
|
134
|
-
|
|
135
116
|
handleEditorBlur(event) {
|
|
136
117
|
var _this$editor;
|
|
137
|
-
|
|
138
118
|
log.debug("markdown content changed, saving...");
|
|
139
119
|
var {
|
|
140
120
|
isEditing
|
|
141
|
-
} = this.state;
|
|
121
|
+
} = this.state;
|
|
142
122
|
|
|
123
|
+
// if not in edit mode, or in edit mode but blur went to an internal monaco field (like search)
|
|
143
124
|
if (!isEditing || this.markdownEditor != null && this.markdownEditor.container != null && this.markdownEditor.container.contains(event.relatedTarget)) {
|
|
144
125
|
return;
|
|
145
126
|
}
|
|
146
|
-
|
|
147
127
|
var content = (_this$editor = this.editor) === null || _this$editor === void 0 ? void 0 : _this$editor.getValue();
|
|
148
128
|
this.setState({
|
|
149
129
|
content,
|
|
@@ -154,17 +134,14 @@ export class MarkdownPanel extends Component {
|
|
|
154
134
|
}
|
|
155
135
|
});
|
|
156
136
|
}
|
|
157
|
-
|
|
158
137
|
handleEditorResize() {
|
|
159
138
|
var {
|
|
160
139
|
isEditing
|
|
161
140
|
} = this.state;
|
|
162
|
-
|
|
163
141
|
if (isEditing && this.editor) {
|
|
164
142
|
this.editor.layout();
|
|
165
143
|
}
|
|
166
144
|
}
|
|
167
|
-
|
|
168
145
|
render() {
|
|
169
146
|
var {
|
|
170
147
|
glContainer,
|
|
@@ -203,15 +180,11 @@ export class MarkdownPanel extends Component {
|
|
|
203
180
|
onEditorInitialized: this.handleEditorInitialized
|
|
204
181
|
})));
|
|
205
182
|
}
|
|
206
|
-
|
|
207
183
|
}
|
|
208
|
-
|
|
209
184
|
_defineProperty(MarkdownPanel, "defaultProps", {
|
|
210
185
|
panelState: null
|
|
211
186
|
});
|
|
212
|
-
|
|
213
187
|
_defineProperty(MarkdownPanel, "COMPONENT", 'MarkdownPanel');
|
|
214
|
-
|
|
215
188
|
var mapStateToProps = (state, ownProps) => {
|
|
216
189
|
var {
|
|
217
190
|
localDashboardId
|
|
@@ -220,7 +193,6 @@ var mapStateToProps = (state, ownProps) => {
|
|
|
220
193
|
closedPanels: getClosedPanelsForDashboard(state, localDashboardId)
|
|
221
194
|
};
|
|
222
195
|
};
|
|
223
|
-
|
|
224
196
|
export default connect(mapStateToProps, null, null, {
|
|
225
197
|
forwardRef: true
|
|
226
198
|
})(MarkdownPanel);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownPanel.js","names":["React","Component","memoize","connect","getClosedPanelsForDashboard","LayoutUtils","PanelEvent","Log","assertNotNull","Panel","MarkdownContainer","MarkdownStartPage","MarkdownEditor","log","module","MarkdownPanel","constructor","props","closedPanels","filter","panel","component","reverse","handleContainerDoubleClick","bind","handleCreateMarkdown","handleDeleteMarkdown","handleOpenMarkdown","handleEditorInitialized","handleEditorBlur","handleEditorResize","panelState","content","state","isStartPageShown","isEditing","markdownEditor","setEditorPosition","clickPositionY","container","markdownEditorContainer","editor","contentTop","getBoundingClientRect","top","contentScrollTop","scrollTop","contentScrollHeight","scrollHeight","totalLines","getModel","getLineCount","lineToFocus","Math","round","revealLine","setPosition","lineNumber","column","focus","event","dbClickPositionY","clientY","setState","debug","markdown","glContainer","glEventHub","config","getComponentConfigFromContainer","emit","REOPEN","DELETE","contains","relatedTarget","getValue","layout","render","closedMarkdowns","getClosedMarkdowns","undefined","mapStateToProps","ownProps","localDashboardId","forwardRef"],"sources":["../../src/panels/MarkdownPanel.tsx"],"sourcesContent":["import React, { Component, FocusEvent, MouseEvent, ReactElement } from 'react';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport {\n ClosedPanel,\n ClosedPanels,\n getClosedPanelsForDashboard,\n LayoutUtils,\n PanelEvent,\n} from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport type {\n Container,\n EventEmitter,\n ReactComponentConfig,\n} from '@deephaven/golden-layout';\nimport type * as monaco from 'monaco-editor';\nimport { assertNotNull } from '@deephaven/utils';\nimport { RootState } from '@deephaven/redux';\nimport Panel from './Panel';\nimport MarkdownContainer from '../controls/markdown/MarkdownContainer';\nimport MarkdownStartPage from '../controls/markdown/MarkdownStartPage';\nimport MarkdownEditor from '../controls/markdown/MarkdownEditor';\nimport './MarkdownPanel.scss';\n\nconst log = Log.module('MarkdownPanel');\n\ninterface PanelState {\n content?: string;\n}\n\ninterface MarkdownPanelProps {\n glContainer: Container;\n glEventHub: EventEmitter;\n panelState: PanelState;\n closedPanels: ClosedPanel[];\n}\n\ninterface MarkdownPanelState {\n isStartPageShown: boolean;\n isEditing: boolean;\n content?: string | null;\n\n // eslint-disable-next-line react/no-unused-state\n panelState: PanelState;\n}\n\nexport class MarkdownPanel extends Component<\n MarkdownPanelProps,\n MarkdownPanelState\n> {\n static defaultProps = {\n panelState: null,\n };\n\n static COMPONENT = 'MarkdownPanel';\n\n constructor(props: MarkdownPanelProps) {\n super(props);\n\n this.handleContainerDoubleClick = this.handleContainerDoubleClick.bind(\n this\n );\n this.handleCreateMarkdown = this.handleCreateMarkdown.bind(this);\n this.handleDeleteMarkdown = this.handleDeleteMarkdown.bind(this);\n this.handleOpenMarkdown = this.handleOpenMarkdown.bind(this);\n this.handleEditorInitialized = this.handleEditorInitialized.bind(this);\n this.handleEditorBlur = this.handleEditorBlur.bind(this);\n this.handleEditorResize = this.handleEditorResize.bind(this);\n\n const { panelState } = props;\n let content = null;\n if (panelState != null && panelState.content != null) {\n ({ content } = panelState);\n }\n\n this.state = {\n isStartPageShown: content == null,\n isEditing: false,\n content,\n\n // eslint-disable-next-line react/no-unused-state\n panelState,\n };\n\n this.markdownEditor = null;\n }\n\n markdownEditor: MarkdownEditor | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n setEditorPosition(clickPositionY: number): void {\n assertNotNull(this.markdownEditor);\n const { container: markdownEditorContainer } = this.markdownEditor;\n if (this.editor && markdownEditorContainer) {\n const contentTop = markdownEditorContainer.getBoundingClientRect().top;\n const contentScrollTop = markdownEditorContainer.scrollTop;\n const contentScrollHeight = markdownEditorContainer.scrollHeight;\n const totalLines = this.editor.getModel()?.getLineCount() ?? 0;\n\n let lineToFocus = Math.round(\n ((contentScrollTop + clickPositionY - contentTop) /\n contentScrollHeight) *\n totalLines\n );\n if (lineToFocus > totalLines) {\n lineToFocus = totalLines;\n }\n\n this.editor.revealLine(lineToFocus);\n this.editor.setPosition({\n lineNumber: lineToFocus,\n column: 1,\n });\n this.editor.focus();\n }\n }\n\n getClosedMarkdowns = memoize((closedPanels: ClosedPanels) =>\n closedPanels.filter(panel => panel.component === 'MarkdownPanel').reverse()\n );\n\n handleContainerDoubleClick(event: MouseEvent<Element>): void {\n const { isEditing } = this.state;\n const dbClickPositionY = event.clientY;\n\n if (!isEditing) {\n this.setState({ isEditing: true }, () => {\n this.setEditorPosition(dbClickPositionY);\n });\n }\n }\n\n handleEditorInitialized(editor: monaco.editor.IStandaloneCodeEditor): void {\n log.debug('Markdown Editor Initialized...');\n this.editor = editor;\n }\n\n handleCreateMarkdown(): void {\n log.debug('create markdown...');\n\n this.setState(\n {\n isStartPageShown: false,\n content: '',\n isEditing: true,\n\n // eslint-disable-next-line react/no-unused-state\n panelState: { content: '' },\n },\n () => {\n if (this.editor != null && this.editor.focus != null) {\n this.editor.focus();\n }\n }\n );\n }\n\n handleOpenMarkdown(markdown: ReactComponentConfig): void {\n log.debug('open markdown...', markdown);\n\n const { glContainer, glEventHub } = this.props;\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n glEventHub.emit(PanelEvent.REOPEN, markdown, config);\n }\n\n handleDeleteMarkdown(markdown: ReactComponentConfig): void {\n const { glEventHub } = this.props;\n glEventHub.emit(PanelEvent.DELETE, markdown);\n }\n\n handleEditorBlur(event: FocusEvent<HTMLDivElement>): void {\n log.debug(`markdown content changed, saving...`);\n const { isEditing } = this.state;\n\n // if not in edit mode, or in edit mode but blur went to an internal monaco field (like search)\n if (\n !isEditing ||\n (this.markdownEditor != null &&\n this.markdownEditor.container != null &&\n this.markdownEditor.container.contains(event.relatedTarget))\n ) {\n return;\n }\n\n const content = this.editor?.getValue();\n\n this.setState({\n content,\n isEditing: false,\n\n // eslint-disable-next-line react/no-unused-state\n panelState: { content },\n });\n }\n\n handleEditorResize(): void {\n const { isEditing } = this.state;\n if (isEditing && this.editor) {\n this.editor.layout();\n }\n }\n\n render(): ReactElement {\n const { glContainer, glEventHub, closedPanels } = this.props;\n const { isEditing, isStartPageShown, content } = this.state;\n const closedMarkdowns = this.getClosedMarkdowns(closedPanels);\n\n return (\n <Panel\n glContainer={glContainer}\n glEventHub={glEventHub}\n className=\"markdown-panel\"\n componentPanel={this}\n onResize={this.handleEditorResize}\n onBlur={this.handleEditorBlur}\n isClonable\n isRenamable\n >\n {isStartPageShown ? (\n <MarkdownStartPage\n closedMarkdowns={closedMarkdowns}\n onCreate={this.handleCreateMarkdown}\n onOpen={this.handleOpenMarkdown}\n onDelete={this.handleDeleteMarkdown}\n />\n ) : (\n <MarkdownContainer\n isEditing={isEditing}\n onDoubleClick={this.handleContainerDoubleClick}\n >\n <MarkdownEditor\n ref={markdownEditor => {\n this.markdownEditor = markdownEditor;\n }}\n isEditing={isEditing}\n content={content ?? undefined}\n onEditorInitialized={this.handleEditorInitialized}\n />\n </MarkdownContainer>\n )}\n </Panel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string }\n) => {\n const { localDashboardId } = ownProps;\n return {\n closedPanels: getClosedPanelsForDashboard(state, localDashboardId),\n };\n};\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(\n MarkdownPanel\n);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MarkdownPanel.js","names":["React","Component","memoize","connect","getClosedPanelsForDashboard","LayoutUtils","PanelEvent","Log","assertNotNull","Panel","MarkdownContainer","MarkdownStartPage","MarkdownEditor","log","module","MarkdownPanel","constructor","props","closedPanels","filter","panel","component","reverse","handleContainerDoubleClick","bind","handleCreateMarkdown","handleDeleteMarkdown","handleOpenMarkdown","handleEditorInitialized","handleEditorBlur","handleEditorResize","panelState","content","state","isStartPageShown","isEditing","markdownEditor","setEditorPosition","clickPositionY","container","markdownEditorContainer","editor","contentTop","getBoundingClientRect","top","contentScrollTop","scrollTop","contentScrollHeight","scrollHeight","totalLines","getModel","getLineCount","lineToFocus","Math","round","revealLine","setPosition","lineNumber","column","focus","event","dbClickPositionY","clientY","setState","debug","markdown","glContainer","glEventHub","config","getComponentConfigFromContainer","emit","REOPEN","DELETE","contains","relatedTarget","getValue","layout","render","closedMarkdowns","getClosedMarkdowns","undefined","mapStateToProps","ownProps","localDashboardId","forwardRef"],"sources":["../../src/panels/MarkdownPanel.tsx"],"sourcesContent":["import React, { Component, FocusEvent, MouseEvent, ReactElement } from 'react';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport {\n ClosedPanel,\n ClosedPanels,\n getClosedPanelsForDashboard,\n LayoutUtils,\n PanelEvent,\n} from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport type {\n Container,\n EventEmitter,\n ReactComponentConfig,\n} from '@deephaven/golden-layout';\nimport type * as monaco from 'monaco-editor';\nimport { assertNotNull } from '@deephaven/utils';\nimport { RootState } from '@deephaven/redux';\nimport Panel from './Panel';\nimport MarkdownContainer from '../controls/markdown/MarkdownContainer';\nimport MarkdownStartPage from '../controls/markdown/MarkdownStartPage';\nimport MarkdownEditor from '../controls/markdown/MarkdownEditor';\nimport './MarkdownPanel.scss';\n\nconst log = Log.module('MarkdownPanel');\n\ninterface PanelState {\n content?: string;\n}\n\ninterface MarkdownPanelProps {\n glContainer: Container;\n glEventHub: EventEmitter;\n panelState: PanelState;\n closedPanels: ClosedPanel[];\n}\n\ninterface MarkdownPanelState {\n isStartPageShown: boolean;\n isEditing: boolean;\n content?: string | null;\n\n // eslint-disable-next-line react/no-unused-state\n panelState: PanelState;\n}\n\nexport class MarkdownPanel extends Component<\n MarkdownPanelProps,\n MarkdownPanelState\n> {\n static defaultProps = {\n panelState: null,\n };\n\n static COMPONENT = 'MarkdownPanel';\n\n constructor(props: MarkdownPanelProps) {\n super(props);\n\n this.handleContainerDoubleClick = this.handleContainerDoubleClick.bind(\n this\n );\n this.handleCreateMarkdown = this.handleCreateMarkdown.bind(this);\n this.handleDeleteMarkdown = this.handleDeleteMarkdown.bind(this);\n this.handleOpenMarkdown = this.handleOpenMarkdown.bind(this);\n this.handleEditorInitialized = this.handleEditorInitialized.bind(this);\n this.handleEditorBlur = this.handleEditorBlur.bind(this);\n this.handleEditorResize = this.handleEditorResize.bind(this);\n\n const { panelState } = props;\n let content = null;\n if (panelState != null && panelState.content != null) {\n ({ content } = panelState);\n }\n\n this.state = {\n isStartPageShown: content == null,\n isEditing: false,\n content,\n\n // eslint-disable-next-line react/no-unused-state\n panelState,\n };\n\n this.markdownEditor = null;\n }\n\n markdownEditor: MarkdownEditor | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n setEditorPosition(clickPositionY: number): void {\n assertNotNull(this.markdownEditor);\n const { container: markdownEditorContainer } = this.markdownEditor;\n if (this.editor && markdownEditorContainer) {\n const contentTop = markdownEditorContainer.getBoundingClientRect().top;\n const contentScrollTop = markdownEditorContainer.scrollTop;\n const contentScrollHeight = markdownEditorContainer.scrollHeight;\n const totalLines = this.editor.getModel()?.getLineCount() ?? 0;\n\n let lineToFocus = Math.round(\n ((contentScrollTop + clickPositionY - contentTop) /\n contentScrollHeight) *\n totalLines\n );\n if (lineToFocus > totalLines) {\n lineToFocus = totalLines;\n }\n\n this.editor.revealLine(lineToFocus);\n this.editor.setPosition({\n lineNumber: lineToFocus,\n column: 1,\n });\n this.editor.focus();\n }\n }\n\n getClosedMarkdowns = memoize((closedPanels: ClosedPanels) =>\n closedPanels.filter(panel => panel.component === 'MarkdownPanel').reverse()\n );\n\n handleContainerDoubleClick(event: MouseEvent<Element>): void {\n const { isEditing } = this.state;\n const dbClickPositionY = event.clientY;\n\n if (!isEditing) {\n this.setState({ isEditing: true }, () => {\n this.setEditorPosition(dbClickPositionY);\n });\n }\n }\n\n handleEditorInitialized(editor: monaco.editor.IStandaloneCodeEditor): void {\n log.debug('Markdown Editor Initialized...');\n this.editor = editor;\n }\n\n handleCreateMarkdown(): void {\n log.debug('create markdown...');\n\n this.setState(\n {\n isStartPageShown: false,\n content: '',\n isEditing: true,\n\n // eslint-disable-next-line react/no-unused-state\n panelState: { content: '' },\n },\n () => {\n if (this.editor != null && this.editor.focus != null) {\n this.editor.focus();\n }\n }\n );\n }\n\n handleOpenMarkdown(markdown: ReactComponentConfig): void {\n log.debug('open markdown...', markdown);\n\n const { glContainer, glEventHub } = this.props;\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n glEventHub.emit(PanelEvent.REOPEN, markdown, config);\n }\n\n handleDeleteMarkdown(markdown: ReactComponentConfig): void {\n const { glEventHub } = this.props;\n glEventHub.emit(PanelEvent.DELETE, markdown);\n }\n\n handleEditorBlur(event: FocusEvent<HTMLDivElement>): void {\n log.debug(`markdown content changed, saving...`);\n const { isEditing } = this.state;\n\n // if not in edit mode, or in edit mode but blur went to an internal monaco field (like search)\n if (\n !isEditing ||\n (this.markdownEditor != null &&\n this.markdownEditor.container != null &&\n this.markdownEditor.container.contains(event.relatedTarget))\n ) {\n return;\n }\n\n const content = this.editor?.getValue();\n\n this.setState({\n content,\n isEditing: false,\n\n // eslint-disable-next-line react/no-unused-state\n panelState: { content },\n });\n }\n\n handleEditorResize(): void {\n const { isEditing } = this.state;\n if (isEditing && this.editor) {\n this.editor.layout();\n }\n }\n\n render(): ReactElement {\n const { glContainer, glEventHub, closedPanels } = this.props;\n const { isEditing, isStartPageShown, content } = this.state;\n const closedMarkdowns = this.getClosedMarkdowns(closedPanels);\n\n return (\n <Panel\n glContainer={glContainer}\n glEventHub={glEventHub}\n className=\"markdown-panel\"\n componentPanel={this}\n onResize={this.handleEditorResize}\n onBlur={this.handleEditorBlur}\n isClonable\n isRenamable\n >\n {isStartPageShown ? (\n <MarkdownStartPage\n closedMarkdowns={closedMarkdowns}\n onCreate={this.handleCreateMarkdown}\n onOpen={this.handleOpenMarkdown}\n onDelete={this.handleDeleteMarkdown}\n />\n ) : (\n <MarkdownContainer\n isEditing={isEditing}\n onDoubleClick={this.handleContainerDoubleClick}\n >\n <MarkdownEditor\n ref={markdownEditor => {\n this.markdownEditor = markdownEditor;\n }}\n isEditing={isEditing}\n content={content ?? undefined}\n onEditorInitialized={this.handleEditorInitialized}\n />\n </MarkdownContainer>\n )}\n </Panel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string }\n) => {\n const { localDashboardId } = ownProps;\n return {\n closedPanels: getClosedPanelsForDashboard(state, localDashboardId),\n };\n};\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(\n MarkdownPanel\n);\n"],"mappings":"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"}
|
|
@@ -1,51 +1,38 @@
|
|
|
1
1
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
2
|
-
|
|
3
2
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
4
|
-
|
|
5
3
|
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
|
-
|
|
7
4
|
import MockFileStorageTable from "./MockFileStorageTable.js";
|
|
8
5
|
export class MockFileStorage {
|
|
9
6
|
constructor(items) {
|
|
10
7
|
_defineProperty(this, "items", void 0);
|
|
11
|
-
|
|
12
8
|
this.items = items;
|
|
13
9
|
}
|
|
14
|
-
|
|
15
10
|
getTable() {
|
|
16
11
|
var _this = this;
|
|
17
|
-
|
|
18
12
|
return _asyncToGenerator(function* () {
|
|
19
13
|
return new MockFileStorageTable(_this.items);
|
|
20
14
|
})();
|
|
21
15
|
}
|
|
22
|
-
/* eslint-disable class-methods-use-this */
|
|
23
|
-
|
|
24
16
|
|
|
17
|
+
/* eslint-disable class-methods-use-this */
|
|
25
18
|
saveFile(file) {
|
|
26
19
|
throw new Error('Method not implemented.');
|
|
27
20
|
}
|
|
28
|
-
|
|
29
21
|
loadFile(name) {
|
|
30
22
|
throw new Error('Method not implemented.');
|
|
31
23
|
}
|
|
32
|
-
|
|
33
24
|
deleteFile(name) {
|
|
34
25
|
throw new Error('Method not implemented.');
|
|
35
26
|
}
|
|
36
|
-
|
|
37
27
|
moveFile(name, newName) {
|
|
38
28
|
throw new Error('Method not implemented.');
|
|
39
29
|
}
|
|
40
|
-
|
|
41
30
|
info(name) {
|
|
42
31
|
throw new Error('Method not implemented.');
|
|
43
32
|
}
|
|
44
|
-
|
|
45
33
|
createDirectory(name) {
|
|
46
34
|
throw new Error('Method not implemented.');
|
|
47
35
|
}
|
|
48
|
-
|
|
49
36
|
}
|
|
50
37
|
export default MockFileStorage;
|
|
51
38
|
//# sourceMappingURL=MockFileStorage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MockFileStorage.js","names":["MockFileStorageTable","MockFileStorage","constructor","items","getTable","saveFile","file","Error","loadFile","name","deleteFile","moveFile","newName","info","createDirectory"],"sources":["../../src/panels/MockFileStorage.ts"],"sourcesContent":["import {\n File,\n FileStorage,\n FileStorageItem,\n FileStorageTable,\n} from '@deephaven/file-explorer';\nimport MockFileStorageTable from './MockFileStorageTable';\n\nexport class MockFileStorage implements FileStorage {\n private items: FileStorageItem[];\n\n constructor(items: FileStorageItem[]) {\n this.items = items;\n }\n\n async getTable(): Promise<FileStorageTable> {\n return new MockFileStorageTable(this.items);\n }\n\n /* eslint-disable class-methods-use-this */\n saveFile(file: File): Promise<File> {\n throw new Error('Method not implemented.');\n }\n\n loadFile(name: string): Promise<File> {\n throw new Error('Method not implemented.');\n }\n\n deleteFile(name: string): Promise<void> {\n throw new Error('Method not implemented.');\n }\n\n moveFile(name: string, newName: string): Promise<void> {\n throw new Error('Method not implemented.');\n }\n\n info(name: string): Promise<FileStorageItem> {\n throw new Error('Method not implemented.');\n }\n\n createDirectory(name: string): Promise<FileStorageItem> {\n throw new Error('Method not implemented.');\n }\n}\n\nexport default MockFileStorage;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"MockFileStorage.js","names":["MockFileStorageTable","MockFileStorage","constructor","items","getTable","saveFile","file","Error","loadFile","name","deleteFile","moveFile","newName","info","createDirectory"],"sources":["../../src/panels/MockFileStorage.ts"],"sourcesContent":["import {\n File,\n FileStorage,\n FileStorageItem,\n FileStorageTable,\n} from '@deephaven/file-explorer';\nimport MockFileStorageTable from './MockFileStorageTable';\n\nexport class MockFileStorage implements FileStorage {\n private items: FileStorageItem[];\n\n constructor(items: FileStorageItem[]) {\n this.items = items;\n }\n\n async getTable(): Promise<FileStorageTable> {\n return new MockFileStorageTable(this.items);\n }\n\n /* eslint-disable class-methods-use-this */\n saveFile(file: File): Promise<File> {\n throw new Error('Method not implemented.');\n }\n\n loadFile(name: string): Promise<File> {\n throw new Error('Method not implemented.');\n }\n\n deleteFile(name: string): Promise<void> {\n throw new Error('Method not implemented.');\n }\n\n moveFile(name: string, newName: string): Promise<void> {\n throw new Error('Method not implemented.');\n }\n\n info(name: string): Promise<FileStorageItem> {\n throw new Error('Method not implemented.');\n }\n\n createDirectory(name: string): Promise<FileStorageItem> {\n throw new Error('Method not implemented.');\n }\n}\n\nexport default MockFileStorage;\n"],"mappings":";;;OAMOA,oBAAoB;AAE3B,OAAO,MAAMC,eAAe,CAAwB;EAGlDC,WAAW,CAACC,KAAwB,EAAE;IAAA;IACpC,IAAI,CAACA,KAAK,GAAGA,KAAK;EACpB;EAEMC,QAAQ,GAA8B;IAAA;IAAA;MAC1C,OAAO,IAAIJ,oBAAoB,CAAC,KAAI,CAACG,KAAK,CAAC;IAAC;EAC9C;;EAEA;EACAE,QAAQ,CAACC,IAAU,EAAiB;IAClC,MAAM,IAAIC,KAAK,CAAC,yBAAyB,CAAC;EAC5C;EAEAC,QAAQ,CAACC,IAAY,EAAiB;IACpC,MAAM,IAAIF,KAAK,CAAC,yBAAyB,CAAC;EAC5C;EAEAG,UAAU,CAACD,IAAY,EAAiB;IACtC,MAAM,IAAIF,KAAK,CAAC,yBAAyB,CAAC;EAC5C;EAEAI,QAAQ,CAACF,IAAY,EAAEG,OAAe,EAAiB;IACrD,MAAM,IAAIL,KAAK,CAAC,yBAAyB,CAAC;EAC5C;EAEAM,IAAI,CAACJ,IAAY,EAA4B;IAC3C,MAAM,IAAIF,KAAK,CAAC,yBAAyB,CAAC;EAC5C;EAEAO,eAAe,CAACL,IAAY,EAA4B;IACtD,MAAM,IAAIF,KAAK,CAAC,yBAAyB,CAAC;EAC5C;AACF;AAEA,eAAeN,eAAe"}
|
|
@@ -1,51 +1,39 @@
|
|
|
1
1
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
2
|
-
|
|
3
2
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
4
|
-
|
|
5
3
|
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
|
-
|
|
7
4
|
import { isDirectory } from '@deephaven/file-explorer';
|
|
8
5
|
export class MockFileStorageTable {
|
|
9
6
|
constructor(items) {
|
|
10
7
|
_defineProperty(this, "items", void 0);
|
|
11
|
-
|
|
12
8
|
_defineProperty(this, "onUpdateCallback", void 0);
|
|
13
|
-
|
|
14
9
|
this.items = items;
|
|
15
10
|
}
|
|
16
|
-
/* eslint-disable class-methods-use-this */
|
|
17
|
-
|
|
18
11
|
|
|
19
|
-
|
|
12
|
+
/* eslint-disable class-methods-use-this */
|
|
13
|
+
setSearch(search) {
|
|
14
|
+
// no-op
|
|
20
15
|
}
|
|
21
|
-
|
|
22
16
|
setExpanded(path, expanded) {
|
|
23
17
|
// only sets expansion for the FileExplorer in NewItemModal
|
|
24
18
|
if (path.charAt(path.length - 1) === '/') {
|
|
25
19
|
for (var i = 0; i < this.items.length; i += 1) {
|
|
26
20
|
var item = this.items[i];
|
|
27
|
-
|
|
28
21
|
if (isDirectory(item) && ("".concat(item.filename, "/") === path || item.filename === path)) {
|
|
29
22
|
item.isExpanded = expanded;
|
|
30
23
|
}
|
|
31
24
|
}
|
|
32
25
|
}
|
|
33
|
-
|
|
34
26
|
return Promise.resolve();
|
|
35
27
|
}
|
|
36
|
-
|
|
37
28
|
collapseAll() {
|
|
38
29
|
for (var i = 0; i < this.items.length; i += 1) {
|
|
39
30
|
var item = this.items[i];
|
|
40
|
-
|
|
41
31
|
if (isDirectory(item)) {
|
|
42
32
|
item.isExpanded = false;
|
|
43
33
|
}
|
|
44
34
|
}
|
|
45
|
-
|
|
46
35
|
return Promise.resolve();
|
|
47
36
|
}
|
|
48
|
-
|
|
49
37
|
getViewportData() {
|
|
50
38
|
return Promise.resolve({
|
|
51
39
|
items: this.items,
|
|
@@ -53,45 +41,38 @@ export class MockFileStorageTable {
|
|
|
53
41
|
offset: 0
|
|
54
42
|
});
|
|
55
43
|
}
|
|
56
|
-
|
|
57
44
|
getSnapshot(sortedRanges) {
|
|
58
45
|
return _asyncToGenerator(function* () {
|
|
59
46
|
throw new Error('Method not implemented.');
|
|
60
47
|
})();
|
|
61
48
|
}
|
|
62
|
-
|
|
63
49
|
setViewport(viewport) {
|
|
64
50
|
var _this = this;
|
|
65
|
-
|
|
66
51
|
return _asyncToGenerator(function* () {
|
|
67
52
|
var _this$onUpdateCallbac;
|
|
68
|
-
|
|
69
53
|
var loadedViewportData = yield _this.getViewportData();
|
|
70
54
|
(_this$onUpdateCallbac = _this.onUpdateCallback) === null || _this$onUpdateCallbac === void 0 ? void 0 : _this$onUpdateCallbac.call(_this, loadedViewportData);
|
|
71
55
|
})();
|
|
72
56
|
}
|
|
73
|
-
|
|
74
|
-
|
|
57
|
+
setFilters(config) {
|
|
58
|
+
// no-op
|
|
75
59
|
}
|
|
76
|
-
|
|
77
|
-
|
|
60
|
+
setSorts(config) {
|
|
61
|
+
// no-op
|
|
78
62
|
}
|
|
79
|
-
|
|
80
|
-
|
|
63
|
+
setReversed(isReversed) {
|
|
64
|
+
// no-op
|
|
81
65
|
}
|
|
82
|
-
|
|
83
|
-
|
|
66
|
+
close() {
|
|
67
|
+
// no-op
|
|
84
68
|
}
|
|
85
|
-
|
|
86
69
|
onUpdate(callback) {
|
|
87
70
|
this.onUpdateCallback = callback;
|
|
88
71
|
return jest.fn();
|
|
89
72
|
}
|
|
90
|
-
|
|
91
73
|
get size() {
|
|
92
74
|
return this.items.length;
|
|
93
75
|
}
|
|
94
|
-
|
|
95
76
|
}
|
|
96
77
|
export default MockFileStorageTable;
|
|
97
78
|
//# sourceMappingURL=MockFileStorageTable.js.map
|