@deephaven/dashboard-core-plugins 0.37.4-logout.17 → 0.37.4-logout.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.js.map +1 -1
- package/dist/ChartPlugin.js.map +1 -1
- package/dist/ConsolePlugin.js.map +1 -1
- package/dist/FilterPlugin.js.map +1 -1
- package/dist/GridPlugin.js.map +1 -1
- package/dist/LinkerPlugin.js.map +1 -1
- package/dist/MarkdownPlugin.js.map +1 -1
- package/dist/PandasPlugin.js.map +1 -1
- package/dist/controls/ControlType.js.map +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
- package/dist/controls/input-filter/InputFilter.js.map +1 -1
- package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
- package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
- package/dist/controls/markdown/MarkdownStartPage.js.map +1 -1
- package/dist/controls/markdown/MarkdownUtils.js.map +1 -1
- package/dist/events/ChartEvent.js +0 -2
- package/dist/events/ChartEvent.js.map +1 -1
- package/dist/events/ConsoleEvent.js.map +1 -1
- package/dist/events/InputFilterEvent.js +0 -8
- package/dist/events/InputFilterEvent.js.map +1 -1
- package/dist/events/IrisGridEvent.js +0 -2
- package/dist/events/IrisGridEvent.js.map +1 -1
- package/dist/events/NotebookEvent.js.map +1 -1
- package/dist/events/PQEvent.js.map +1 -1
- package/dist/events/PandasEvent.js +0 -2
- package/dist/events/PandasEvent.js.map +1 -1
- package/dist/events/TabEvent.js.map +1 -1
- package/dist/linker/Linker.js.map +1 -1
- package/dist/linker/LinkerLink.js.map +1 -1
- package/dist/linker/LinkerOverlayContent.js.map +1 -1
- package/dist/linker/LinkerUtils.js +1 -1
- package/dist/linker/LinkerUtils.js.map +1 -1
- package/dist/panels/ChartColumnSelectorOverlay.js.map +1 -1
- package/dist/panels/ChartFilterOverlay.js.map +1 -1
- package/dist/panels/ChartPanel.js.map +1 -1
- package/dist/panels/ChartPanelUtils.js.map +1 -1
- package/dist/panels/CommandHistoryPanel.js.map +1 -1
- package/dist/panels/ConsolePanel.js.map +1 -1
- package/dist/panels/DropdownFilterPanel.js +2 -1
- package/dist/panels/DropdownFilterPanel.js.map +1 -1
- package/dist/panels/FileExplorerPanel.js.map +1 -1
- package/dist/panels/FilterSetManager.js.map +1 -1
- package/dist/panels/FilterSetManagerPanel.js.map +1 -1
- package/dist/panels/InputFilterPanel.js +3 -2
- package/dist/panels/InputFilterPanel.js.map +1 -1
- package/dist/panels/IrisGridPanel.js +0 -1
- package/dist/panels/IrisGridPanel.js.map +1 -1
- package/dist/panels/IrisGridPanelTooltip.js.map +1 -1
- package/dist/panels/LogPanel.js.map +1 -1
- package/dist/panels/MarkdownNotebook.js.map +1 -1
- package/dist/panels/MarkdownPanel.js.map +1 -1
- package/dist/panels/MockFileStorage.js.map +1 -1
- package/dist/panels/MockFileStorageTable.js.map +1 -1
- package/dist/panels/NotebookPanel.js.map +1 -1
- package/dist/panels/PandasPanel.js.map +1 -1
- package/dist/panels/Panel.js.map +1 -1
- package/dist/panels/PanelContextMenu.js.map +1 -1
- package/dist/panels/RenameDialog.js.map +1 -1
- package/dist/panels/WidgetPanel.js.map +1 -1
- package/dist/panels/WidgetPanelTooltip.js.map +1 -1
- package/dist/prop-types/CommonPropTypes.js.map +1 -1
- package/dist/redux/actions.js.map +1 -1
- package/dist/redux/index.js.map +1 -1
- package/dist/redux/selectors.js.map +1 -1
- package/package.json +21 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LogPanel.js","names":["React","PureComponent","connect","LogView","Log","Panel","getDashboardSessionWrapper","log","module","LogPanel","constructor","props","
|
|
1
|
+
{"version":3,"file":"LogPanel.js","names":["React","PureComponent","connect","LogView","Log","Panel","getDashboardSessionWrapper","log","module","LogPanel","constructor","props","handleResize","bind","handleShow","handleHide","handleSessionOpened","handleSessionClosed","isBottomVisible","logView","session","state","updateDimensions","triggerFindWidget","scrollToBottom","debug","setState","render","glContainer","glEventHub","mapStateToProps","ownProps","localDashboardId","ConnectedLogPanel","forwardRef"],"sources":["../../src/panels/LogPanel.tsx"],"sourcesContent":["// Wrapper for the Console for use in a golden layout container\n// Will probably need to handle window popping out from golden layout here.\nimport React, { PureComponent } from 'react';\nimport { connect } from 'react-redux';\nimport { LogView } from '@deephaven/console';\nimport { IdeSession } from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport type { Container, EventEmitter } from '@deephaven/golden-layout';\nimport { RootState } from '@deephaven/redux';\nimport './LogPanel.scss';\nimport Panel from './Panel';\nimport { getDashboardSessionWrapper } from '../redux';\n\nconst log = Log.module('LogPanel');\n\ninterface LogPanelProps {\n glContainer: Container;\n glEventHub: EventEmitter;\n session: IdeSession;\n}\n\ninterface LogPanelState {\n session: IdeSession;\n}\n\nclass LogPanel extends PureComponent<LogPanelProps, LogPanelState> {\n static defaultProps = {\n session: null,\n };\n\n static COMPONENT = 'LogPanel';\n\n static TITLE = 'Log';\n\n constructor(props: LogPanelProps) {\n super(props);\n\n this.handleResize = this.handleResize.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleHide = this.handleHide.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.bind(this);\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n\n this.isBottomVisible = true;\n this.logView = null;\n\n const { session } = this.props;\n\n this.state = { session };\n }\n\n isBottomVisible: boolean;\n\n logView: LogView | null;\n\n handleResize() {\n this.updateDimensions();\n }\n\n handleShow() {\n this.updateDimensions();\n if (this.logView) {\n this.logView.triggerFindWidget();\n\n if (this.isBottomVisible) {\n this.logView.scrollToBottom();\n }\n }\n }\n\n handleHide() {\n if (this.logView) {\n this.isBottomVisible = this.logView.isBottomVisible();\n }\n }\n\n handleSessionOpened(session: IdeSession) {\n log.debug('Session opened', [session]);\n this.setState({ session });\n }\n\n // eslint-disable-next-line class-methods-use-this\n handleSessionClosed(session: IdeSession) {\n log.debug('Session closed', session);\n // Keep the session reference in state unchanged until the session is re-connected\n }\n\n updateDimensions() {\n if (this.logView) {\n this.logView.updateDimensions();\n }\n }\n\n render() {\n const { glContainer, glEventHub } = this.props;\n const { session } = this.state;\n return (\n <Panel\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onResize={this.handleResize}\n onHide={this.handleHide}\n onShow={this.handleShow}\n onSessionOpen={this.handleSessionOpened}\n onSessionClose={this.handleSessionClosed}\n >\n {session == null && (\n <div className=\"log-panel-disconnected-message\">\n Waiting for session connection\n </div>\n )}\n {session != null && (\n <LogView\n session={session}\n ref={logView => {\n this.logView = logView;\n }}\n />\n )}\n </Panel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string }\n) => ({\n session: getDashboardSessionWrapper(state, ownProps.localDashboardId)\n ?.session,\n});\n\nconst ConnectedLogPanel = connect(mapStateToProps, null, null, {\n forwardRef: true,\n})(LogPanel);\n\nexport default ConnectedLogPanel;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownNotebook.js","names":["React","PureComponent","classNames","Markdown","remarkGfm","Button","Code","vsPlay","assertNotNull","MarkdownNotebook","constructor","props","_defineProperty","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","_this$codeElements$ge","_element$parentElemen","preventDefault","stopPropagation","keyIndex","startLine","command","get","newNextStartLine","element","current","nextElement","parentElement","nextElementSibling","_this$editorScrollVie","offsetTop","top","scroll","left","runCode","onRunCode","children","className","inline","node","nodeChildren","position","start","value","ref","isFirstBlock","isSelected","language","undefined","startsWith","substring","createElement","set","onClick","role","kind","icon","tooltip","Children","map","child","trim","onLinkClick","href","target","render","content","transformImageUri","transformLinkUri","flashing","disabled","components","code","a","linkTarget","remarkPlugins","includeElementIndex"],"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 +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","_defineProperty","closedPanels","filter","panel","component","reverse","handleContainerDoubleClick","bind","handleCreateMarkdown","handleDeleteMarkdown","handleOpenMarkdown","handleEditorInitialized","handleEditorBlur","handleEditorResize","panelState","content","state","isStartPageShown","isEditing","markdownEditor","setEditorPosition","clickPositionY","container","markdownEditorContainer","editor","_this$editor$getModel","_this$editor$getModel2","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","_this$editor","contains","relatedTarget","getValue","layout","render","closedMarkdowns","getClosedMarkdowns","createElement","className","componentPanel","onResize","onBlur","isClonable","isRenamable","onCreate","onOpen","onDelete","onDoubleClick","ref","undefined","onEditorInitialized","mapStateToProps","ownProps","localDashboardId","ConnectedMarkdownPanel","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\nconst ConnectedMarkdownPanel = connect(mapStateToProps, null, null, {\n forwardRef: true,\n})(MarkdownPanel);\n\nexport default ConnectedMarkdownPanel;\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","ConnectedMarkdownPanel","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\nconst ConnectedMarkdownPanel = connect(mapStateToProps, null, null, {\n forwardRef: true,\n})(MarkdownPanel);\n\nexport default ConnectedMarkdownPanel;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MockFileStorage.js","names":["FileNotFoundError","FileUtils","MockFileStorageTable","MockFileStorage","constructor","items","
|
|
1
|
+
{"version":3,"file":"MockFileStorage.js","names":["FileNotFoundError","FileUtils","MockFileStorageTable","MockFileStorage","constructor","items","getTable","saveFile","file","Error","loadFile","name","deleteFile","filter","value","filename","moveFile","newName","i","length","basename","getBaseName","id","info","allItems","itemDetails","type","createDirectory"],"sources":["../../src/panels/MockFileStorage.ts"],"sourcesContent":["import {\n File,\n FileNotFoundError,\n FileStorage,\n FileStorageItem,\n FileStorageTable,\n FileUtils,\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 async deleteFile(name: string): Promise<void> {\n this.items = this.items.filter(value => value.filename !== name);\n }\n\n async moveFile(name: string, newName: string): Promise<void> {\n for (let i = 0; i < this.items.length; i += 1) {\n if (this.items[i].filename === name) {\n this.items[i].filename = newName;\n this.items[i].basename = FileUtils.getBaseName(newName);\n this.items[i].id = newName;\n break;\n }\n }\n }\n\n async info(name: string): Promise<FileStorageItem> {\n const allItems = this.items.filter(value => value.filename === name);\n if (allItems.length === 0) {\n throw new FileNotFoundError();\n }\n if (allItems.length > 1) {\n throw new Error('More than one matching file found');\n }\n const itemDetails = allItems[0];\n\n return {\n filename: itemDetails.filename,\n basename: itemDetails.basename,\n id: itemDetails.filename,\n type: itemDetails.type,\n };\n }\n\n createDirectory(name: string): Promise<FileStorageItem> {\n throw new Error('Method not implemented.');\n }\n}\n\nexport default MockFileStorage;\n"],"mappings":";;;;;AAAA,SAEEA,iBAAiB,EAIjBC,SAAS,QACJ,0BAA0B;AAAC,OAC3BC,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;EAEMG,UAAU,CAACD,IAAY,EAAiB;IAAA;IAAA;MAC5C,MAAI,CAACN,KAAK,GAAG,MAAI,CAACA,KAAK,CAACQ,MAAM,CAACC,KAAK,IAAIA,KAAK,CAACC,QAAQ,KAAKJ,IAAI,CAAC;IAAC;EACnE;EAEMK,QAAQ,CAACL,IAAY,EAAEM,OAAe,EAAiB;IAAA;IAAA;MAC3D,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,MAAI,CAACb,KAAK,CAACc,MAAM,EAAED,CAAC,IAAI,CAAC,EAAE;QAC7C,IAAI,MAAI,CAACb,KAAK,CAACa,CAAC,CAAC,CAACH,QAAQ,KAAKJ,IAAI,EAAE;UACnC,MAAI,CAACN,KAAK,CAACa,CAAC,CAAC,CAACH,QAAQ,GAAGE,OAAO;UAChC,MAAI,CAACZ,KAAK,CAACa,CAAC,CAAC,CAACE,QAAQ,GAAGnB,SAAS,CAACoB,WAAW,CAACJ,OAAO,CAAC;UACvD,MAAI,CAACZ,KAAK,CAACa,CAAC,CAAC,CAACI,EAAE,GAAGL,OAAO;UAC1B;QACF;MACF;IAAC;EACH;EAEMM,IAAI,CAACZ,IAAY,EAA4B;IAAA;IAAA;MACjD,IAAMa,QAAQ,GAAG,MAAI,CAACnB,KAAK,CAACQ,MAAM,CAACC,KAAK,IAAIA,KAAK,CAACC,QAAQ,KAAKJ,IAAI,CAAC;MACpE,IAAIa,QAAQ,CAACL,MAAM,KAAK,CAAC,EAAE;QACzB,MAAM,IAAInB,iBAAiB,EAAE;MAC/B;MACA,IAAIwB,QAAQ,CAACL,MAAM,GAAG,CAAC,EAAE;QACvB,MAAM,IAAIV,KAAK,CAAC,mCAAmC,CAAC;MACtD;MACA,IAAMgB,WAAW,GAAGD,QAAQ,CAAC,CAAC,CAAC;MAE/B,OAAO;QACLT,QAAQ,EAAEU,WAAW,CAACV,QAAQ;QAC9BK,QAAQ,EAAEK,WAAW,CAACL,QAAQ;QAC9BE,EAAE,EAAEG,WAAW,CAACV,QAAQ;QACxBW,IAAI,EAAED,WAAW,CAACC;MACpB,CAAC;IAAC;EACJ;EAEAC,eAAe,CAAChB,IAAY,EAA4B;IACtD,MAAM,IAAIF,KAAK,CAAC,yBAAyB,CAAC;EAC5C;AACF;AAEA,eAAeN,eAAe"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MockFileStorageTable.js","names":["isDirectory","MockFileStorageTable","constructor","items","
|
|
1
|
+
{"version":3,"file":"MockFileStorageTable.js","names":["isDirectory","MockFileStorageTable","constructor","items","setSearch","search","setExpanded","path","expanded","charAt","length","i","item","filename","isExpanded","Promise","resolve","collapseAll","getViewportData","offset","getSnapshot","sortedRanges","Error","setViewport","viewport","loadedViewportData","onUpdateCallback","setFilters","config","setSorts","setReversed","isReversed","close","onUpdate","callback","jest","fn","size"],"sources":["../../src/panels/MockFileStorageTable.ts"],"sourcesContent":["import {\n FileStorageItem,\n FileStorageTable,\n isDirectory,\n} from '@deephaven/file-explorer';\nimport {\n ViewportData,\n IndexRange,\n StorageSnapshot,\n StorageTableViewport,\n FilterConfig,\n SortConfig,\n ViewportUpdateCallback,\n StorageListenerRemover,\n} from '@deephaven/storage';\n\nexport class MockFileStorageTable implements FileStorageTable {\n private items: FileStorageItem[];\n\n private onUpdateCallback?: ViewportUpdateCallback<FileStorageItem>;\n\n constructor(items: FileStorageItem[]) {\n this.items = items;\n }\n\n /* eslint-disable class-methods-use-this */\n setSearch(search: string): void {\n // no-op\n }\n\n setExpanded(path: string, expanded: boolean): Promise<void> {\n // only sets expansion for the FileExplorer in NewItemModal\n if (path.charAt(path.length - 1) === '/') {\n for (let i = 0; i < this.items.length; i += 1) {\n const item = this.items[i];\n if (\n isDirectory(item) &&\n (`${item.filename}/` === path || item.filename === path)\n ) {\n item.isExpanded = expanded;\n }\n }\n }\n return Promise.resolve();\n }\n\n collapseAll(): Promise<void> {\n for (let i = 0; i < this.items.length; i += 1) {\n const item = this.items[i];\n if (isDirectory(item)) {\n item.isExpanded = false;\n }\n }\n return Promise.resolve();\n }\n\n getViewportData(): Promise<ViewportData<FileStorageItem>> {\n return Promise.resolve({\n items: this.items, // Fill in with mock items\n offset: 0,\n });\n }\n\n async getSnapshot(\n sortedRanges: IndexRange[]\n ): Promise<StorageSnapshot<FileStorageItem>> {\n throw new Error('Method not implemented.');\n }\n\n async setViewport(viewport: StorageTableViewport): Promise<void> {\n const loadedViewportData = await this.getViewportData();\n this.onUpdateCallback?.(loadedViewportData);\n }\n\n setFilters(config: FilterConfig[] | null): void {\n // no-op\n }\n\n setSorts(config: SortConfig[] | null): void {\n // no-op\n }\n\n setReversed(isReversed: boolean): void {\n // no-op\n }\n\n close(): void {\n // no-op\n }\n\n onUpdate(\n callback: ViewportUpdateCallback<FileStorageItem>\n ): StorageListenerRemover {\n this.onUpdateCallback = callback;\n return jest.fn();\n }\n\n get size(): number {\n return this.items.length;\n }\n}\n\nexport default MockFileStorageTable;\n"],"mappings":";;;;;AAAA,SAGEA,WAAW,QACN,0BAA0B;AAYjC,OAAO,MAAMC,oBAAoB,CAA6B;EAK5DC,WAAW,CAACC,KAAwB,EAAE;IAAA;IAAA;IACpC,IAAI,CAACA,KAAK,GAAGA,KAAK;EACpB;;EAEA;EACAC,SAAS,CAACC,MAAc,EAAQ;IAC9B;EAAA;EAGFC,WAAW,CAACC,IAAY,EAAEC,QAAiB,EAAiB;IAC1D;IACA,IAAID,IAAI,CAACE,MAAM,CAACF,IAAI,CAACG,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;MACxC,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACR,KAAK,CAACO,MAAM,EAAEC,CAAC,IAAI,CAAC,EAAE;QAC7C,IAAMC,IAAI,GAAG,IAAI,CAACT,KAAK,CAACQ,CAAC,CAAC;QAC1B,IACEX,WAAW,CAACY,IAAI,CAAC,KAChB,UAAGA,IAAI,CAACC,QAAQ,WAAQN,IAAI,IAAIK,IAAI,CAACC,QAAQ,KAAKN,IAAI,CAAC,EACxD;UACAK,IAAI,CAACE,UAAU,GAAGN,QAAQ;QAC5B;MACF;IACF;IACA,OAAOO,OAAO,CAACC,OAAO,EAAE;EAC1B;EAEAC,WAAW,GAAkB;IAC3B,KAAK,IAAIN,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACR,KAAK,CAACO,MAAM,EAAEC,CAAC,IAAI,CAAC,EAAE;MAC7C,IAAMC,IAAI,GAAG,IAAI,CAACT,KAAK,CAACQ,CAAC,CAAC;MAC1B,IAAIX,WAAW,CAACY,IAAI,CAAC,EAAE;QACrBA,IAAI,CAACE,UAAU,GAAG,KAAK;MACzB;IACF;IACA,OAAOC,OAAO,CAACC,OAAO,EAAE;EAC1B;EAEAE,eAAe,GAA2C;IACxD,OAAOH,OAAO,CAACC,OAAO,CAAC;MACrBb,KAAK,EAAE,IAAI,CAACA,KAAK;MAAE;MACnBgB,MAAM,EAAE;IACV,CAAC,CAAC;EACJ;EAEMC,WAAW,CACfC,YAA0B,EACiB;IAAA;MAC3C,MAAM,IAAIC,KAAK,CAAC,yBAAyB,CAAC;IAAC;EAC7C;EAEMC,WAAW,CAACC,QAA8B,EAAiB;IAAA;IAAA;MAAA;MAC/D,IAAMC,kBAAkB,SAAS,KAAI,CAACP,eAAe,EAAE;MACvD,8BAAI,CAACQ,gBAAgB,0DAArB,gCAAI,EAAoBD,kBAAkB,CAAC;IAAC;EAC9C;EAEAE,UAAU,CAACC,MAA6B,EAAQ;IAC9C;EAAA;EAGFC,QAAQ,CAACD,MAA2B,EAAQ;IAC1C;EAAA;EAGFE,WAAW,CAACC,UAAmB,EAAQ;IACrC;EAAA;EAGFC,KAAK,GAAS;IACZ;EAAA;EAGFC,QAAQ,CACNC,QAAiD,EACzB;IACxB,IAAI,CAACR,gBAAgB,GAAGQ,QAAQ;IAChC,OAAOC,IAAI,CAACC,EAAE,EAAE;EAClB;EAEA,IAAIC,IAAI,GAAW;IACjB,OAAO,IAAI,CAAClC,KAAK,CAACO,MAAM;EAC1B;AACF;AAEA,eAAeT,oBAAoB"}
|