@deephaven/dashboard-core-plugins 0.15.5-beta.3 → 0.15.5-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ChartBuilderPlugin.d.ts.map +1 -1
- package/dist/ChartBuilderPlugin.js +2 -1
- package/dist/ChartBuilderPlugin.js.map +1 -1
- package/dist/FilterPlugin.js +1 -1
- package/dist/FilterPlugin.js.map +1 -1
- package/dist/controls/ControlType.d.ts +1 -1
- package/dist/controls/ControlType.d.ts.map +1 -1
- package/dist/controls/ControlType.js.map +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.d.ts +73 -81
- package/dist/controls/dropdown-filter/DropdownFilter.d.ts.map +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.js +41 -58
- package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
- package/dist/controls/input-filter/InputFilter.d.ts +46 -46
- package/dist/controls/input-filter/InputFilter.d.ts.map +1 -1
- package/dist/controls/input-filter/InputFilter.js +32 -39
- package/dist/controls/input-filter/InputFilter.js.map +1 -1
- package/dist/controls/markdown/MarkdownContainer.d.ts +11 -16
- package/dist/controls/markdown/MarkdownContainer.d.ts.map +1 -1
- package/dist/controls/markdown/MarkdownContainer.js +5 -8
- package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
- package/dist/controls/markdown/MarkdownEditor.d.ts +17 -19
- package/dist/controls/markdown/MarkdownEditor.d.ts.map +1 -1
- package/dist/controls/markdown/MarkdownEditor.js +5 -8
- package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
- package/dist/controls/markdown/MarkdownStartPage.d.ts +24 -28
- package/dist/controls/markdown/MarkdownStartPage.d.ts.map +1 -1
- package/dist/controls/markdown/MarkdownStartPage.js +19 -23
- package/dist/controls/markdown/MarkdownStartPage.js.map +1 -1
- package/dist/controls/markdown/MarkdownUtils.d.ts +4 -4
- package/dist/controls/markdown/MarkdownUtils.d.ts.map +1 -1
- package/dist/controls/markdown/MarkdownUtils.js +2 -2
- package/dist/controls/markdown/MarkdownUtils.js.map +1 -1
- package/dist/events/ChartEvent.d.ts +1 -1
- package/dist/events/ChartEvent.d.ts.map +1 -1
- package/dist/events/ChartEvent.js.map +1 -1
- package/dist/events/ConsoleEvent.d.ts +1 -1
- package/dist/events/ConsoleEvent.d.ts.map +1 -1
- package/dist/events/ConsoleEvent.js.map +1 -1
- package/dist/events/InputFilterEvent.d.ts +1 -1
- package/dist/events/InputFilterEvent.d.ts.map +1 -1
- package/dist/events/InputFilterEvent.js.map +1 -1
- package/dist/events/IrisGridEvent.d.ts +1 -1
- package/dist/events/IrisGridEvent.d.ts.map +1 -1
- package/dist/events/IrisGridEvent.js.map +1 -1
- package/dist/events/NotebookEvent.d.ts +1 -1
- package/dist/events/NotebookEvent.d.ts.map +1 -1
- package/dist/events/NotebookEvent.js.map +1 -1
- package/dist/events/PQEvent.d.ts +1 -1
- package/dist/events/PQEvent.d.ts.map +1 -1
- package/dist/events/PQEvent.js.map +1 -1
- package/dist/events/PandasEvent.d.ts +1 -1
- package/dist/events/PandasEvent.d.ts.map +1 -1
- package/dist/events/PandasEvent.js.map +1 -1
- package/dist/events/TabEvent.d.ts +1 -1
- package/dist/events/TabEvent.d.ts.map +1 -1
- package/dist/events/TabEvent.js.map +1 -1
- package/dist/events/index.d.ts +8 -8
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js.map +1 -1
- package/dist/linker/ColumnSelectionValidator.d.ts +4 -0
- package/dist/linker/ColumnSelectionValidator.d.ts.map +1 -0
- package/dist/linker/ColumnSelectionValidator.js +2 -0
- package/dist/linker/ColumnSelectionValidator.js.map +1 -0
- package/dist/linker/Linker.d.ts +11 -11
- package/dist/linker/Linker.js +1 -1
- package/dist/linker/Linker.js.map +1 -1
- package/dist/linker/LinkerUtils.d.ts +3 -3
- package/dist/linker/LinkerUtils.d.ts.map +1 -1
- package/dist/linker/LinkerUtils.js.map +1 -1
- package/dist/linker/ToolType.d.ts +1 -1
- package/dist/linker/ToolType.d.ts.map +1 -1
- package/dist/linker/ToolType.js.map +1 -1
- package/dist/panels/ChartColumnSelectorOverlay.d.ts +22 -26
- package/dist/panels/ChartColumnSelectorOverlay.d.ts.map +1 -1
- package/dist/panels/ChartColumnSelectorOverlay.js +5 -14
- package/dist/panels/ChartColumnSelectorOverlay.js.map +1 -1
- package/dist/panels/ChartFilterOverlay.d.ts +27 -21
- package/dist/panels/ChartFilterOverlay.d.ts.map +1 -1
- package/dist/panels/ChartFilterOverlay.js.map +1 -1
- package/dist/panels/ChartPanel.d.ts +149 -152
- package/dist/panels/ChartPanel.d.ts.map +1 -1
- package/dist/panels/ChartPanel.js +65 -73
- package/dist/panels/ChartPanel.js.map +1 -1
- package/dist/panels/CommandHistoryPanel.d.ts +41 -56
- package/dist/panels/CommandHistoryPanel.d.ts.map +1 -1
- package/dist/panels/CommandHistoryPanel.js +13 -35
- package/dist/panels/CommandHistoryPanel.js.map +1 -1
- package/dist/panels/ConsolePanel.d.ts +63 -73
- package/dist/panels/ConsolePanel.d.ts.map +1 -1
- package/dist/panels/ConsolePanel.js +67 -83
- package/dist/panels/ConsolePanel.js.map +1 -1
- package/dist/panels/DropdownFilterPanel.d.ts +110 -106
- package/dist/panels/DropdownFilterPanel.d.ts.map +1 -1
- package/dist/panels/DropdownFilterPanel.js +60 -62
- package/dist/panels/DropdownFilterPanel.js.map +1 -1
- package/dist/panels/FileExplorerPanel.d.ts +5 -7
- package/dist/panels/FileExplorerPanel.d.ts.map +1 -1
- package/dist/panels/FileExplorerPanel.js.map +1 -1
- package/dist/panels/FilterSetManager.d.ts +3 -1
- package/dist/panels/FilterSetManager.d.ts.map +1 -1
- package/dist/panels/FilterSetManager.js.map +1 -1
- package/dist/panels/FilterSetManagerPanel.d.ts +83 -62
- package/dist/panels/FilterSetManagerPanel.d.ts.map +1 -1
- package/dist/panels/FilterSetManagerPanel.js +58 -36
- package/dist/panels/FilterSetManagerPanel.js.map +1 -1
- package/dist/panels/InputFilterPanel.d.ts +50 -51
- package/dist/panels/InputFilterPanel.d.ts.map +1 -1
- package/dist/panels/InputFilterPanel.js +35 -34
- package/dist/panels/InputFilterPanel.js.map +1 -1
- package/dist/panels/IrisGridPanel.d.ts +191 -178
- package/dist/panels/IrisGridPanel.d.ts.map +1 -1
- package/dist/panels/IrisGridPanel.js +150 -179
- package/dist/panels/IrisGridPanel.js.map +1 -1
- package/dist/panels/LogPanel.d.ts +29 -45
- package/dist/panels/LogPanel.d.ts.map +1 -1
- package/dist/panels/LogPanel.js +9 -11
- package/dist/panels/LogPanel.js.map +1 -1
- package/dist/panels/MarkdownNotebook.d.ts +34 -34
- package/dist/panels/MarkdownNotebook.d.ts.map +1 -1
- package/dist/panels/MarkdownNotebook.js +21 -18
- package/dist/panels/MarkdownNotebook.js.map +1 -1
- package/dist/panels/MarkdownPanel.d.ts +41 -47
- package/dist/panels/MarkdownPanel.d.ts.map +1 -1
- package/dist/panels/MarkdownPanel.js +17 -19
- package/dist/panels/MarkdownPanel.js.map +1 -1
- package/dist/panels/NotebookPanel.d.ts +137 -115
- package/dist/panels/NotebookPanel.d.ts.map +1 -1
- package/dist/panels/NotebookPanel.js +95 -68
- package/dist/panels/NotebookPanel.js.map +1 -1
- package/dist/panels/PandasPanel.d.ts +20 -17
- package/dist/panels/PandasPanel.d.ts.map +1 -1
- package/dist/panels/PandasPanel.js +17 -13
- package/dist/panels/PandasPanel.js.map +1 -1
- package/dist/panels/Panel.d.ts +87 -123
- package/dist/panels/Panel.d.ts.map +1 -1
- package/dist/panels/Panel.js +29 -54
- package/dist/panels/Panel.js.map +1 -1
- package/dist/panels/PanelContextMenu.d.ts +16 -31
- package/dist/panels/PanelContextMenu.d.ts.map +1 -1
- package/dist/panels/PanelContextMenu.js +12 -15
- package/dist/panels/PanelContextMenu.js.map +1 -1
- package/dist/panels/RenameDialog.d.ts +26 -28
- package/dist/panels/RenameDialog.d.ts.map +1 -1
- package/dist/panels/RenameDialog.js +15 -19
- package/dist/panels/RenameDialog.js.map +1 -1
- package/dist/panels/WidgetPanel.d.ts +72 -106
- package/dist/panels/WidgetPanel.d.ts.map +1 -1
- package/dist/panels/WidgetPanel.js +17 -47
- package/dist/panels/WidgetPanel.js.map +1 -1
- package/dist/panels/WidgetPanelTooltip.d.ts +29 -22
- package/dist/panels/WidgetPanelTooltip.d.ts.map +1 -1
- package/dist/panels/WidgetPanelTooltip.js +1 -1
- package/dist/panels/WidgetPanelTooltip.js.map +1 -1
- package/dist/prop-types/CommonPropTypes.d.ts +4 -4
- package/dist/prop-types/CommonPropTypes.d.ts.map +1 -1
- package/dist/prop-types/CommonPropTypes.js +1 -1
- package/dist/prop-types/CommonPropTypes.js.map +1 -1
- package/dist/prop-types/UIPropTypes.d.ts +2 -7
- package/dist/prop-types/UIPropTypes.d.ts.map +1 -1
- package/dist/prop-types/UIPropTypes.js +0 -7
- package/dist/prop-types/UIPropTypes.js.map +1 -1
- package/dist/prop-types/index.d.ts +2 -2
- package/dist/prop-types/index.d.ts.map +1 -1
- package/dist/prop-types/index.js.map +1 -1
- package/dist/redux/actionTypes.d.ts +1 -1
- package/dist/redux/actionTypes.d.ts.map +1 -1
- package/dist/redux/actionTypes.js.map +1 -1
- package/dist/redux/actions.d.ts +63 -8
- package/dist/redux/actions.d.ts.map +1 -1
- package/dist/redux/actions.js +17 -17
- package/dist/redux/actions.js.map +1 -1
- package/dist/redux/reducers/index.d.ts +3 -4
- package/dist/redux/reducers/index.d.ts.map +1 -1
- package/dist/redux/reducers/index.js.map +1 -1
- package/dist/redux/reducers/sessionWrapper.d.ts +1 -1
- package/dist/redux/reducers/sessionWrapper.d.ts.map +1 -1
- package/dist/redux/reducers/sessionWrapper.js.map +1 -1
- package/dist/redux/selectors.d.ts +63 -9
- package/dist/redux/selectors.d.ts.map +1 -1
- package/dist/redux/selectors.js +24 -24
- package/dist/redux/selectors.js.map +1 -1
- package/package.json +20 -17
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/panels/NotebookPanel.jsx"],"names":["React","Component","ReactDOM","PropTypes","memoize","connect","FontAwesomeIcon","BasicModal","ContextActions","DropdownMenu","Tooltip","GLOBAL_SHORTCUTS","ScriptEditor","ScriptEditorUtils","SHORTCUTS","GLPropTypes","FileUtils","NewItemModal","vsSave","vsKebabVertical","dhFileSearch","vsPlay","dhRunSelection","getFileStorage","classNames","debounce","Log","Pending","PromiseUtils","ConsoleEvent","NotebookEvent","getDashboardSessionWrapper","Panel","MarkdownNotebook","log","module","DEBOUNCE_PANEL_STATE_UPDATE","NotebookPanel","handleError","error","isCanceled","languageFromFileName","fileName","extension","getExtension","toLowerCase","constructor","props","title","icon","action","handleFind","group","groups","high","shortcut","NOTEBOOK","FIND","order","handleBlur","bind","handleCloseCancel","handleCloseDiscard","handleCloseSave","handleCopy","handleEditorChange","handleFocus","handleLinkClick","handleLoadSuccess","handleLoadError","handlePanelTabClick","handleRenameFile","handleResize","handleRunCommand","handleRunAll","handleRunSelected","handleSave","handleSaveAsCancel","handleSaveAsSubmit","handleSaveError","handleSaveSuccess","handleSessionOpened","handleSessionClosed","handleShow","handleShowRename","handleTab","handleTabFocus","handleTabBlur","handleTransformLinkUri","pending","debouncedSavePanelState","savePanelState","debouncedLoad","load","notebook","tabTitleElement","unsavedIndicator","tabInitOnce","shouldPromptClose","isDashboardActive","session","sessionLanguage","panelState","settings","value","fileMetadata","isPreview","hasFileId","itemName","hasPath","isUnsaved","changeCount","state","isFocused","isLoading","isLoaded","savedChangeCount","showCloseModal","showSaveAsModal","scriptCode","debug","componentDidMount","glContainer","glEventHub","tab","initTab","initNotebookContent","on","RENAME_FILE","componentDidUpdate","prevProps","prevState","setPreviewStatus","componentWillUnmount","flush","cancel","off","emit","UNREGISTER_FILE","initTabCloseOverride","initTabClasses","close","setState","tabElement","element","get","titleElement","querySelector","classList","add","getNotebookValue","notebookValue","getValue","id","registerFileMetadata","Error","closeFileTabById","CLOSE_FILE","metadata","tabId","REGISTER_FILE","renameTab","RENAME","fileStorage","loadFile","then","loadedFile","filename","prevItemName","getBaseName","updatedSettings","language","content","catch","save","saveContent","updateSavedChangeCount","saveFile","remove","initialSettings","dehydratedValue","dehydratedSettings","copyName","getCopyFileName","createNotebook","e","debug2","removePreviewStatus","isUndoing","isRedoing","toggleFind","event","notebooksUrl","href","target","startsWith","stopPropagation","preventDefault","notebookPath","substring","length","replace","notebookSettings","SELECT_NOTEBOOK","errorParam","isTimedOut","file","oldMetadata","deleteFile","name","oldName","newName","updateDimensions","command","runCommand","getSelectedCommand","args","isHidden","focus","src","endsWith","charAt","itemUri","URL","requestAnimationFrame","CREATE_NOTEBOOK","SEND_COMMAND","render","focusOnMount","DEFAULT_NAME","isMarkdown","isExistingItem","overflowActions","getOverflowActions","isSessionConnected","isLanguageMatching","runButtonsDisabled","toolbarDisabled","contextActions","SAVE","disabledRunButtonTooltip","getDisabledRunTooltip","disabledRunSelectedButtonTooltip","additionalActions","createPortal","find","RUN","getDisplayText","RUN_SELECTED","POPPER_OPTIONS","placement","propTypes","shape","func","isRequired","Container","EventHub","bool","string","defaultProps","mapStateToProps","ownProps","sessionWrapper","localDashboardId","config","sessionConfig","type","forwardRef"],"mappings":"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","sourcesContent":["// Wrapper for the Notebook for use in a golden layout container\nimport React, { Component } from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n BasicModal,\n ContextActions,\n DropdownMenu,\n Tooltip,\n GLOBAL_SHORTCUTS,\n} from '@deephaven/components';\nimport { ScriptEditor, ScriptEditorUtils, SHORTCUTS } from '@deephaven/console';\nimport { GLPropTypes } from '@deephaven/dashboard';\nimport { FileUtils, NewItemModal } from '@deephaven/file-explorer';\nimport {\n vsSave,\n vsKebabVertical,\n dhFileSearch,\n vsPlay,\n dhRunSelection,\n} from '@deephaven/icons';\nimport { getFileStorage } from '@deephaven/redux';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport { Pending, PromiseUtils } from '@deephaven/utils';\nimport { ConsoleEvent, NotebookEvent } from '../events';\nimport { getDashboardSessionWrapper } from '../redux';\nimport Panel from './Panel';\nimport MarkdownNotebook from './MarkdownNotebook';\nimport './NotebookPanel.scss';\n\nconst log = Log.module('NotebookPanel');\n\nconst DEBOUNCE_PANEL_STATE_UPDATE = 400;\n\nclass NotebookPanel extends Component {\n static COMPONENT = 'NotebookPanel';\n\n static POPPER_OPTIONS = { placement: 'bottom-end' };\n\n static DEFAULT_NAME = 'Untitled';\n\n static handleError(error) {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n log.error(error);\n }\n\n static languageFromFileName(fileName) {\n const extension = FileUtils.getExtension(fileName).toLowerCase();\n switch (extension) {\n case 'py':\n case 'python':\n return 'python';\n case 'groovy':\n return 'groovy';\n case 'scala':\n return 'scala';\n default:\n return null;\n }\n }\n\n constructor(props) {\n super(props);\n\n this.handleBlur = this.handleBlur.bind(this);\n this.handleCloseCancel = this.handleCloseCancel.bind(this);\n this.handleCloseDiscard = this.handleCloseDiscard.bind(this);\n this.handleCloseSave = this.handleCloseSave.bind(this);\n this.handleCopy = this.handleCopy.bind(this);\n this.handleEditorChange = this.handleEditorChange.bind(this);\n this.handleFind = this.handleFind.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleLinkClick = this.handleLinkClick.bind(this);\n this.handleLoadSuccess = this.handleLoadSuccess.bind(this);\n this.handleLoadError = this.handleLoadError.bind(this);\n this.handlePanelTabClick = this.handlePanelTabClick.bind(this);\n this.handleRenameFile = this.handleRenameFile.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleRunCommand = this.handleRunCommand.bind(this);\n this.handleRunAll = this.handleRunAll.bind(this);\n this.handleRunSelected = this.handleRunSelected.bind(this);\n this.handleSave = this.handleSave.bind(this);\n this.handleSaveAsCancel = this.handleSaveAsCancel.bind(this);\n this.handleSaveAsSubmit = this.handleSaveAsSubmit.bind(this);\n this.handleSaveError = this.handleSaveError.bind(this);\n this.handleSaveSuccess = this.handleSaveSuccess.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.bind(this);\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleShowRename = this.handleShowRename.bind(this);\n this.handleTab = this.handleTab.bind(this);\n this.handleTabFocus = this.handleTabFocus.bind(this);\n this.handleTabBlur = this.handleTabBlur.bind(this);\n this.handleTransformLinkUri = this.handleTransformLinkUri.bind(this);\n\n this.pending = new Pending();\n\n this.debouncedSavePanelState = debounce(\n this.savePanelState.bind(this),\n DEBOUNCE_PANEL_STATE_UPDATE\n );\n\n this.debouncedLoad = debounce(\n this.load.bind(this),\n DEBOUNCE_PANEL_STATE_UPDATE\n );\n\n this.notebook = null;\n\n this.tabTitleElement = null;\n this.unsavedIndicator = null;\n this.tabInitOnce = false;\n this.shouldPromptClose = true;\n\n const { isDashboardActive, session, sessionLanguage, panelState } = props;\n\n let settings = {\n value: '',\n };\n let fileMetadata = null;\n let { isPreview } = props;\n if (panelState) {\n ({\n fileMetadata = fileMetadata,\n isPreview = isPreview,\n settings = settings,\n } = panelState);\n }\n\n // Not showing the unsaved indicator for null file id and editor content === '',\n // may need to implement some other indication that this notebook has never been saved\n const hasFileId =\n fileMetadata.itemName && FileUtils.hasPath(fileMetadata.itemName);\n\n // Unsaved if file id != null and content != null\n // OR file id is null AND content is not null or ''\n const isUnsaved =\n (hasFileId && settings.value != null) || (!hasFileId && settings.value);\n const changeCount = isUnsaved ? 1 : 0;\n\n this.state = {\n error: null,\n isDashboardActive,\n isFocused: false,\n isLoading: true,\n isLoaded: false,\n isPreview,\n\n savedChangeCount: 0,\n changeCount,\n fileMetadata,\n settings,\n\n session,\n sessionLanguage,\n\n // eslint-disable-next-line react/no-unused-state\n panelState: {\n fileMetadata,\n settings,\n },\n\n showCloseModal: false,\n showSaveAsModal: false,\n\n scriptCode: '',\n };\n\n log.debug('constructor', props, this.state);\n }\n\n componentDidMount() {\n const { glContainer, glEventHub } = this.props;\n const { tab } = glContainer;\n if (tab) this.initTab(tab);\n this.initNotebookContent();\n glEventHub.on(NotebookEvent.RENAME_FILE, this.handleRenameFile);\n glContainer.on('tabClicked', this.handlePanelTabClick);\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { isPreview } = this.state;\n if (isPreview !== prevState.isPreview) {\n this.setPreviewStatus(isPreview);\n }\n }\n\n componentWillUnmount() {\n this.debouncedSavePanelState.flush();\n this.pending.cancel();\n\n const { glContainer, glEventHub } = this.props;\n\n const { fileMetadata, isPreview } = this.state;\n glEventHub.off(NotebookEvent.RENAME_FILE, this.handleRenameFile);\n glContainer.off('tabClicked', this.handlePanelTabClick);\n glEventHub.emit(NotebookEvent.UNREGISTER_FILE, fileMetadata, isPreview);\n }\n\n // Called by TabEvent. Happens once when created, but also each time its moved.\n // when moved, need to re-init the unsaved indicators on title elements\n initTab(tab) {\n if (!this.tabInitOnce) {\n this.tabInitOnce = true;\n this.initTabCloseOverride();\n }\n this.initTabClasses(tab);\n }\n\n // override glContainer.close() with a custom closure that checks if needs saving\n initTabCloseOverride() {\n const { glContainer } = this.props;\n const close = glContainer.close.bind(glContainer);\n glContainer.close = () => {\n const { changeCount, savedChangeCount } = this.state;\n if (changeCount !== savedChangeCount && this.shouldPromptClose) {\n this.setState({ showCloseModal: true });\n } else {\n close();\n }\n };\n }\n\n initTabClasses(tab) {\n const tabElement = tab.element.get(0);\n const titleElement = tabElement.querySelector('.lm_title');\n this.tabTitleElement = titleElement;\n titleElement.classList.add('notebook-title');\n this.setPreviewStatus();\n }\n\n getNotebookValue() {\n const { changeCount, savedChangeCount, settings } = this.state;\n const { value } = settings;\n if (changeCount !== savedChangeCount && this.notebook) {\n const notebookValue = this.notebook.getValue();\n return notebookValue != null ? notebookValue : value;\n }\n return value;\n }\n\n initNotebookContent() {\n // Init from file,\n // fallback to content from settings for unsaved notebook\n const { fileMetadata, settings, isPreview } = this.state;\n if (fileMetadata && fileMetadata.id) {\n log.debug('Init content from file');\n this.registerFileMetadata(fileMetadata, isPreview);\n this.load();\n return;\n }\n if (settings.value != null) {\n log.debug('Use content passed in the settings prop');\n this.handleLoadSuccess();\n return;\n }\n // No settings, no metadata\n this.handleLoadError(new Error('Missing file metadata'));\n }\n\n closeFileTabById(id) {\n const { glEventHub } = this.props;\n glEventHub.emit(NotebookEvent.CLOSE_FILE, { id });\n }\n\n // Associate file id with the current tab\n // so the next time the file is opened this tab can be focused instead of opening a new tab\n registerFileMetadata(fileMetadata, isPreview) {\n const { glEventHub, metadata } = this.props;\n const { id: tabId } = metadata;\n glEventHub.emit(\n NotebookEvent.REGISTER_FILE,\n tabId,\n fileMetadata,\n isPreview\n );\n }\n\n renameTab(id, title) {\n const { glEventHub } = this.props;\n glEventHub.emit(NotebookEvent.RENAME, id, title);\n }\n\n load() {\n const { fileMetadata, settings } = this.state;\n const { id } = fileMetadata;\n const { fileStorage } = this.props;\n this.pending\n .add(fileStorage.loadFile(id))\n .then(loadedFile => {\n log.debug('Loaded file', loadedFile);\n const { filename: itemName } = loadedFile;\n const { itemName: prevItemName } = this.state;\n if (itemName !== prevItemName) {\n const { metadata } = this.props;\n const { id: tabId } = metadata;\n this.renameTab(tabId, FileUtils.getBaseName(itemName));\n }\n const updatedSettings = {\n ...settings,\n language: NotebookPanel.languageFromFileName(itemName),\n };\n if (settings.value == null) {\n updatedSettings.value = loadedFile.content;\n }\n this.setState({\n fileMetadata: { id: itemName, itemName },\n settings: updatedSettings,\n });\n this.debouncedSavePanelState();\n })\n .then(this.handleLoadSuccess)\n .catch(this.handleLoadError);\n }\n\n /**\n * Attempts to save the notebook.\n * @returns {boolean} Returns true if save has begun, false if user needed to be prompted\n */\n save() {\n const { fileMetadata } = this.state;\n if (fileMetadata && FileUtils.hasPath(fileMetadata.itemName)) {\n const content = this.getNotebookValue();\n this.saveContent(fileMetadata.itemName, content);\n return true;\n }\n\n this.setState({ showSaveAsModal: true });\n return false;\n }\n\n /**\n * Update existing file content\n * @param {string} filename The name of the file\n * @param {string} content New file content\n */\n saveContent(filename, content) {\n log.debug('saveContent', filename, content);\n this.updateSavedChangeCount();\n const { fileStorage } = this.props;\n this.pending\n .add(fileStorage.saveFile({ filename, content }))\n .then(this.handleSaveSuccess)\n .catch(this.handleSaveError);\n }\n\n updateSavedChangeCount() {\n this.setState(({ changeCount }) => ({ savedChangeCount: changeCount }));\n }\n\n setPreviewStatus() {\n if (!this.tabTitleElement) {\n return;\n }\n const { isPreview } = this.state;\n log.debug('setPreviewStatus', this.tabTitleElement, isPreview);\n if (isPreview) {\n this.tabTitleElement.classList.add('is-preview');\n } else {\n this.tabTitleElement.classList.remove('is-preview');\n }\n }\n\n getOverflowActions = memoize(() => [\n {\n title: 'Find',\n icon: dhFileSearch,\n action: this.handleFind,\n group: ContextActions.groups.high,\n shortcut: SHORTCUTS.NOTEBOOK.FIND,\n order: 10,\n },\n ]);\n\n savePanelState() {\n this.setState(state => {\n const {\n changeCount,\n savedChangeCount,\n fileMetadata,\n isPreview,\n settings: initialSettings,\n } = state;\n const value = this.getNotebookValue();\n // notebooks with no unsaved changes have value === null in dehydrated state\n // content will be loaded from file when hydrating\n const dehydratedValue = changeCount !== savedChangeCount ? value : null;\n const settings = {\n ...initialSettings,\n value,\n };\n const dehydratedSettings = {\n ...initialSettings,\n value: dehydratedValue,\n };\n const panelState = {\n settings: dehydratedSettings,\n fileMetadata,\n isPreview,\n };\n log.debug('Saving panel state', panelState);\n return {\n settings,\n // eslint-disable-next-line react/no-unused-state\n panelState,\n };\n });\n }\n\n handleCloseDiscard() {\n this.shouldPromptClose = false;\n this.setState({ showCloseModal: false });\n const { glContainer } = this.props;\n glContainer.close();\n }\n\n handleCloseSave() {\n this.shouldPromptClose = false;\n this.setState({ showCloseModal: false });\n if (this.save()) {\n const { glContainer } = this.props;\n glContainer.close();\n }\n }\n\n handleCloseCancel() {\n this.shouldPromptClose = true;\n this.setState({ showCloseModal: false });\n }\n\n handleCopy() {\n const { fileMetadata, settings } = this.state;\n const content = this.getNotebookValue();\n const { language } = settings;\n const { itemName } = fileMetadata;\n const copyName = FileUtils.getCopyFileName(itemName);\n log.debug('handleCopy', fileMetadata, itemName, copyName);\n this.createNotebook(copyName, language, content);\n }\n\n handleEditorChange(e) {\n log.debug2('handleEditorChanged', e);\n\n this.removePreviewStatus();\n\n this.setState(({ changeCount, savedChangeCount }) => {\n const { isUndoing, isRedoing } = e;\n if (isUndoing) {\n // Note that it's possible to undo past where the user last saved, if they save and then undo for example\n return { changeCount: changeCount - 1 };\n }\n\n if (!isRedoing && changeCount < savedChangeCount) {\n // We made another change after undoing some changes from the previous save\n // Just reset the saved counter to zero and increase the unchanged saves\n // It'll be set correctly on the next save\n return { changeCount: changeCount + 1, savedChangeCount: 0 };\n }\n\n return { changeCount: changeCount + 1 };\n });\n this.debouncedSavePanelState();\n }\n\n handleFind() {\n if (this.notebook) {\n this.notebook.toggleFind();\n }\n }\n\n handleBlur() {\n log.debug('handleBlur');\n this.setState({ isFocused: false });\n }\n\n handleFocus() {\n log.debug('handleFocus');\n this.setState({ isFocused: true });\n }\n\n /**\n * @param {MouseEvent} event The click event from clicking on the link\n */\n handleLinkClick(event) {\n const { notebooksUrl, session, sessionLanguage } = this.props;\n const { href } = event.target;\n if (!href || !href.startsWith(notebooksUrl)) {\n return;\n }\n\n event.stopPropagation();\n event.preventDefault();\n\n const notebookPath = `/${href.substring(notebooksUrl.length)}`.replace(\n /%20/g,\n ' '\n );\n if (notebookPath === '/') {\n log.debug('Ignoring invalid notebook link', notebookPath);\n return;\n }\n\n log.debug('Notebook link clicked, opening', notebookPath);\n\n const { glEventHub } = this.props;\n const notebookSettings = {\n value: null,\n language: sessionLanguage,\n };\n const fileMetadata = { id: notebookPath, itemName: notebookPath };\n glEventHub.emit(\n NotebookEvent.SELECT_NOTEBOOK,\n session,\n sessionLanguage,\n notebookSettings,\n fileMetadata\n );\n }\n\n handleLoadSuccess() {\n this.setState({\n error: null,\n isLoaded: true,\n isLoading: false,\n });\n }\n\n handleLoadError(errorParam) {\n let error = errorParam;\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n if (PromiseUtils.isTimedOut(error)) {\n error = new Error('File not found.');\n }\n log.error(error);\n this.setState({ error, isLoading: false });\n }\n\n handleSave() {\n log.debug('handleSave');\n this.save();\n }\n\n handleSaveSuccess(file) {\n const { fileStorage } = this.props;\n const fileMetadata = { id: file.filename, itemName: file.filename };\n const language = NotebookPanel.languageFromFileName(file.filename);\n this.setState(state => {\n const { fileMetadata: oldMetadata } = state;\n const settings = {\n ...state.settings,\n language,\n };\n log.debug('handleSaveSuccess', fileMetadata, oldMetadata, settings);\n if (\n FileUtils.hasPath(oldMetadata.itemName) &&\n oldMetadata.itemName !== fileMetadata.itemName\n ) {\n log.debug('handleSaveSuccess deleting old file', oldMetadata.itemName);\n fileStorage\n .deleteFile(oldMetadata.itemName)\n .catch(NotebookPanel.handleError);\n }\n return {\n fileMetadata,\n settings,\n isPreview: false,\n };\n });\n this.debouncedSavePanelState();\n this.registerFileMetadata(fileMetadata, false);\n }\n\n handleSaveError(error) {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n // There was an error saving, just reset the savedChangeCount\n // It's possible if they undo changes they'll be back at the spot where it was last saved successfully,\n // But we may as well continue showing the error until they actually save again\n this.setState({ savedChangeCount: 0 });\n log.error(error);\n }\n\n handleSaveAsCancel() {\n this.setState({ showSaveAsModal: false });\n }\n\n handleSaveAsSubmit(name) {\n log.debug('handleSaveAsSubmit', name);\n const { fileMetadata } = this.state;\n const { itemName: prevItemName } = fileMetadata;\n const content = this.getNotebookValue();\n this.setState({\n showSaveAsModal: false,\n });\n\n if (FileUtils.getBaseName(prevItemName) !== FileUtils.getBaseName(name)) {\n const { metadata } = this.props;\n const { id: tabId } = metadata;\n this.renameTab(tabId, FileUtils.getBaseName(name));\n }\n\n this.saveContent(name, content);\n }\n\n handleRenameFile(oldName, newName) {\n const { fileMetadata } = this.state;\n if (fileMetadata.id === oldName) {\n this.setState({ fileMetadata: { id: newName, itemName: newName } });\n this.debouncedSavePanelState();\n }\n }\n\n handleResize() {\n this.notebook?.updateDimensions();\n }\n\n handleRunCommand(command) {\n this.runCommand(command);\n }\n\n handleRunAll() {\n if (!this.notebook) {\n log.error('Editor is not initialized.');\n return;\n }\n this.runCommand(this.notebook.getValue());\n }\n\n handleRunSelected() {\n if (!this.notebook) {\n log.error('Editor is not initialized.');\n return;\n }\n this.runCommand(this.notebook.getSelectedCommand());\n }\n\n handleSessionOpened(session, { language }) {\n this.setState({\n session,\n sessionLanguage: language,\n });\n }\n\n handleSessionClosed() {\n this.setState({\n session: null,\n sessionLanguage: null,\n });\n }\n\n handleShow() {\n log.debug('handleShow');\n this.notebook?.updateDimensions();\n }\n\n handleShowRename() {\n this.setState({ showSaveAsModal: true });\n }\n\n handleTab(tab) {\n log.debug('NotebookPanel tab event', tab);\n this.initTab(tab);\n }\n\n handleTabFocus(...args) {\n log.debug('handleTabFocus', ...args);\n const { glContainer } = this.props;\n this.setState({\n isDashboardActive: true,\n });\n if (this.notebook && !glContainer.isHidden) {\n this.notebook.updateDimensions();\n }\n }\n\n handleTabBlur() {\n log.debug('handleTabBlur');\n this.setState({\n isDashboardActive: false,\n });\n }\n\n handlePanelTabClick() {\n log.debug('handlePanelTabClick');\n this.focus();\n }\n\n /**\n * Transform the link URI to load from where the notebook is if it's relative\n * @param {String} src The link to transform\n * @returns String the transformed link\n */\n handleTransformLinkUri(src) {\n const { notebooksUrl } = this.props;\n const { fileMetadata } = this.state;\n\n if (src.endsWith('/')) {\n return src;\n }\n\n if (src.startsWith('/')) {\n return `${notebooksUrl}${src.substring(1)}`;\n }\n\n let itemName = fileMetadata?.itemName;\n if (!itemName) {\n return src;\n }\n if (itemName.charAt(0) === '/') {\n itemName = itemName.substring(1);\n }\n\n const itemUri = new URL(itemName, notebooksUrl);\n return new URL(src, itemUri).href;\n }\n\n focus() {\n requestAnimationFrame(() => {\n if (this.notebook) {\n this.notebook.focus();\n }\n });\n }\n\n createNotebook(itemName, language, content) {\n const { glEventHub } = this.props;\n const { session, sessionLanguage, settings } = this.state;\n const notebookSettings = {\n ...settings,\n language,\n value: content,\n };\n const fileMetadata = {\n id: null,\n itemName,\n };\n log.debug(\n 'handleCreateNotebook',\n session,\n sessionLanguage,\n notebookSettings,\n fileMetadata\n );\n glEventHub.emit(\n NotebookEvent.CREATE_NOTEBOOK,\n session,\n sessionLanguage,\n notebookSettings,\n fileMetadata\n );\n }\n\n runCommand(command) {\n if (!command) {\n log.debug('Ignoring empty command.');\n return;\n }\n\n this.removePreviewStatus();\n\n const { glEventHub } = this.props;\n glEventHub.emit(ConsoleEvent.SEND_COMMAND, command, false, true);\n }\n\n removePreviewStatus() {\n this.setState(({ isPreview }) => {\n if (isPreview) {\n const { fileMetadata } = this.state;\n this.registerFileMetadata(fileMetadata, false);\n return { isPreview: false };\n }\n return null;\n });\n }\n\n render() {\n const {\n fileStorage,\n glContainer,\n glContainer: { tab },\n glEventHub,\n } = this.props;\n const {\n changeCount,\n savedChangeCount,\n error,\n isDashboardActive,\n isLoaded,\n isLoading,\n isPreview,\n fileMetadata,\n session,\n sessionLanguage,\n settings: initialSettings,\n showCloseModal,\n showSaveAsModal,\n } = this.state;\n // We don't want to steal focus if this isn't shown or it's just a preview\n const focusOnMount =\n isDashboardActive && !glContainer.isHidden && !isPreview;\n const itemName = fileMetadata?.itemName ?? NotebookPanel.DEFAULT_NAME;\n const isMarkdown = itemName.endsWith('.md');\n const isExistingItem = fileMetadata?.id != null;\n const overflowActions = this.getOverflowActions();\n const settings = {\n ...initialSettings,\n };\n const isSessionConnected = session != null;\n const isLanguageMatching = sessionLanguage === settings.language;\n const runButtonsDisabled =\n !isLoaded || !isSessionConnected || !isLanguageMatching;\n const toolbarDisabled = !isLoaded;\n const contextActions = [\n {\n action: this.handleSave,\n shortcut: GLOBAL_SHORTCUTS.SAVE,\n },\n ];\n const disabledRunButtonTooltip = ScriptEditorUtils.getDisabledRunTooltip(\n isSessionConnected,\n isLanguageMatching,\n 'Notebook extension',\n 'Run'\n );\n const disabledRunSelectedButtonTooltip = ScriptEditorUtils.getDisabledRunTooltip(\n isSessionConnected,\n isLanguageMatching,\n 'Notebook extension',\n 'Run Selected'\n );\n\n const additionalActions = [\n {\n title: isExistingItem ? 'Rename' : 'Save As…',\n order: 10,\n group: ContextActions.groups.high,\n action: this.handleShowRename,\n },\n {\n title: 'Copy File',\n action: this.handleCopy,\n group: ContextActions.groups.high,\n order: 20,\n },\n ];\n\n return (\n <>\n {tab &&\n ReactDOM.createPortal(\n <span\n className={classNames('editor-unsaved-indicator', {\n 'is-unsaved': changeCount !== savedChangeCount,\n })}\n />,\n tab.element.find('.lm_title_before').get(0) // tab.element is jquery element, we want a dom element\n )}\n\n <Panel\n className=\"notebook-container\"\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onTab={this.handleTab}\n onResize={this.handleResize}\n onShow={this.handleShow}\n onTabFocus={this.handleTabFocus}\n onTabBlur={this.handleTabBlur}\n onSessionOpen={this.handleSessionOpened}\n onSessionClose={this.handleSessionClosed}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n additionalActions={additionalActions}\n renderTabTooltip={() => itemName}\n >\n {!isMarkdown && (\n <>\n <div className=\"notebook-toolbar\">\n <span>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon btn-play\"\n onClick={this.handleRunAll}\n disabled={runButtonsDisabled}\n >\n <FontAwesomeIcon icon={vsPlay} transform=\"grow-4\" />\n <Tooltip>\n Run {SHORTCUTS.NOTEBOOK.RUN.getDisplayText()}\n </Tooltip>\n </button>\n {disabledRunButtonTooltip && (\n <Tooltip>{disabledRunButtonTooltip}</Tooltip>\n )}\n </span>\n <span>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon btn-play\"\n onClick={this.handleRunSelected}\n disabled={runButtonsDisabled}\n >\n <FontAwesomeIcon icon={dhRunSelection} transform=\"grow-4\" />\n <Tooltip>\n Run Selected{' '}\n {SHORTCUTS.NOTEBOOK.RUN_SELECTED.getDisplayText()}\n </Tooltip>\n </button>\n {disabledRunSelectedButtonTooltip && (\n <Tooltip>{disabledRunSelectedButtonTooltip}</Tooltip>\n )}\n </span>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon mr-auto\"\n disabled={toolbarDisabled}\n onClick={this.handleSave}\n >\n <FontAwesomeIcon icon={vsSave} />\n <Tooltip>Save</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-overflow btn-link-icon\"\n disabled={toolbarDisabled}\n >\n <FontAwesomeIcon icon={vsKebabVertical} />\n <Tooltip>More Actions...</Tooltip>\n <DropdownMenu\n actions={overflowActions}\n popperOptions={NotebookPanel.POPPER_OPTIONS}\n />\n </button>\n </div>\n <ScriptEditor\n isLoaded={isLoaded}\n isLoading={isLoading}\n error={error}\n onChange={this.handleEditorChange}\n onRunCommand={this.handleRunCommand}\n session={session}\n sessionLanguage={sessionLanguage}\n settings={settings}\n focusOnMount={focusOnMount}\n ref={notebook => {\n this.notebook = notebook;\n }}\n />\n </>\n )}\n {isMarkdown && (\n <MarkdownNotebook\n content={settings.value}\n onLinkClick={this.handleLinkClick}\n onRunCode={this.handleRunCommand}\n transformImageUri={this.handleTransformLinkUri}\n transformLinkUri={this.handleTransformLinkUri}\n />\n )}\n <NewItemModal\n isOpen={showSaveAsModal}\n type=\"file\"\n defaultValue={itemName}\n title={isExistingItem ? 'Rename' : 'Save file as'}\n onSubmit={this.handleSaveAsSubmit}\n onCancel={this.handleSaveAsCancel}\n notifyOnExtensionChange\n storage={fileStorage}\n />\n <BasicModal\n isOpen={showCloseModal}\n headerText={`Do you want to save the changes you made to ${itemName}?`}\n bodyText=\"Your changes will be lost if you don't save them.\"\n onCancel={this.handleCloseCancel}\n onDiscard={this.handleCloseDiscard}\n onConfirm={this.handleCloseSave}\n discardButtonText=\"Discard Changes\"\n confirmButtonText=\"Save\"\n />\n <ContextActions actions={contextActions} />\n </Panel>\n </>\n );\n }\n}\n\nNotebookPanel.propTypes = {\n fileStorage: PropTypes.shape({\n deleteFile: PropTypes.func.isRequired,\n loadFile: PropTypes.func.isRequired,\n saveFile: PropTypes.func.isRequired,\n }).isRequired,\n glContainer: GLPropTypes.Container.isRequired,\n glEventHub: GLPropTypes.EventHub.isRequired,\n isDashboardActive: PropTypes.bool,\n isPreview: PropTypes.bool,\n metadata: PropTypes.shape({\n id: PropTypes.string.isRequired,\n }).isRequired,\n session: PropTypes.shape({}),\n sessionLanguage: PropTypes.string,\n panelState: PropTypes.shape({\n settings: PropTypes.shape({}),\n fileMetadata: PropTypes.shape({}),\n }).isRequired,\n notebooksUrl: PropTypes.string.isRequired,\n};\n\nNotebookPanel.defaultProps = {\n isDashboardActive: true,\n isPreview: false,\n session: null,\n sessionLanguage: null,\n};\n\nconst mapStateToProps = (state, ownProps) => {\n const fileStorage = getFileStorage(state);\n const sessionWrapper = getDashboardSessionWrapper(\n state,\n ownProps.localDashboardId\n );\n const { session, config: sessionConfig } = sessionWrapper ?? {};\n const { type: sessionLanguage } = sessionConfig ?? {};\n return {\n fileStorage,\n session,\n sessionLanguage,\n };\n};\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(\n NotebookPanel\n);\n"],"file":"NotebookPanel.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/panels/NotebookPanel.tsx"],"names":["React","Component","ReactDOM","memoize","connect","FontAwesomeIcon","BasicModal","ContextActions","DropdownMenu","Tooltip","GLOBAL_SHORTCUTS","ScriptEditor","ScriptEditorUtils","SHORTCUTS","FileUtils","NewItemModal","vsSave","vsKebabVertical","dhFileSearch","vsPlay","dhRunSelection","getFileStorage","classNames","debounce","Log","assertNotNull","Pending","PromiseUtils","ConsoleEvent","NotebookEvent","getDashboardSessionWrapper","Panel","MarkdownNotebook","log","module","DEBOUNCE_PANEL_STATE_UPDATE","NotebookPanel","handleError","error","isCanceled","languageFromFileName","fileName","extension","getExtension","toLowerCase","constructor","props","title","icon","action","handleFind","group","groups","high","shortcut","NOTEBOOK","FIND","order","handleBlur","bind","handleCloseCancel","handleCloseDiscard","handleCloseSave","handleCopy","handleEditorChange","handleFocus","handleLinkClick","handleLoadSuccess","handleLoadError","handlePanelTabClick","handleRenameFile","handleResize","handleRunCommand","handleRunAll","handleRunSelected","handleSave","handleSaveAsCancel","handleSaveAsSubmit","handleSaveError","handleSaveSuccess","handleSessionOpened","handleSessionClosed","handleShow","handleShowRename","handleTab","handleTabFocus","handleTabBlur","handleTransformLinkUri","pending","debouncedSavePanelState","savePanelState","debouncedLoad","load","notebook","tabTitleElement","tabInitOnce","shouldPromptClose","isDashboardActive","session","sessionLanguage","panelState","settings","value","language","fileMetadata","isPreview","hasFileId","itemName","hasPath","isUnsaved","changeCount","state","undefined","isFocused","isLoading","isLoaded","savedChangeCount","showCloseModal","showSaveAsModal","scriptCode","debug","componentDidMount","glContainer","glEventHub","tab","initTab","initNotebookContent","on","RENAME_FILE","componentDidUpdate","prevProps","prevState","setPreviewStatus","componentWillUnmount","flush","cancel","off","emit","UNREGISTER_FILE","initTabCloseOverride","initTabClasses","close","setState","tabElement","element","get","titleElement","querySelector","classList","add","getNotebookValue","notebookValue","getValue","id","registerFileMetadata","Error","closeFileTabById","CLOSE_FILE","metadata","tabId","REGISTER_FILE","renameTab","RENAME","fileStorage","loadFile","then","loadedFile","filename","prevItemName","getBaseName","updatedSettings","content","catch","save","saveContent","updateSavedChangeCount","saveFile","basename","remove","initialSettings","dehydratedValue","dehydratedSettings","copyName","getCopyFileName","createNotebook","e","debug2","removePreviewStatus","isUndoing","isRedoing","toggleFind","event","notebooksUrl","href","currentTarget","startsWith","stopPropagation","preventDefault","notebookPath","substring","length","replace","notebookSettings","SELECT_NOTEBOOK","errorParam","isTimedOut","file","oldMetadata","deleteFile","name","oldName","newName","updateDimensions","command","runCommand","getSelectedCommand","args","isHidden","focus","src","endsWith","charAt","itemUri","URL","requestAnimationFrame","CREATE_NOTEBOOK","SEND_COMMAND","render","focusOnMount","DEFAULT_NAME","isMarkdown","isExistingItem","overflowActions","getOverflowActions","isSessionConnected","isLanguageMatching","runButtonsDisabled","toolbarDisabled","contextActions","SAVE","disabledRunButtonTooltip","getDisabledRunTooltip","disabledRunSelectedButtonTooltip","additionalActions","portal","find","createPortal","RUN","getDisplayText","RUN_SELECTED","POPPER_OPTIONS","placement","process","env","REACT_APP_NOTEBOOKS_URL","window","location","mapStateToProps","ownProps","sessionWrapper","localDashboardId","config","sessionConfig","type","forwardRef"],"mappings":"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","sourcesContent":["// Wrapper for the Notebook for use in a golden layout container\nimport React, { Component, MouseEvent, ReactElement } from 'react';\nimport ReactDOM from 'react-dom';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport type { editor } from 'monaco-editor';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n BasicModal,\n ContextActions,\n DropdownMenu,\n Tooltip,\n GLOBAL_SHORTCUTS,\n} from '@deephaven/components';\nimport { ScriptEditor, ScriptEditorUtils, SHORTCUTS } from '@deephaven/console';\nimport {\n FileStorage,\n FileUtils,\n NewItemModal,\n File,\n} from '@deephaven/file-explorer';\nimport {\n vsSave,\n vsKebabVertical,\n dhFileSearch,\n vsPlay,\n dhRunSelection,\n} from '@deephaven/icons';\nimport { getFileStorage, RootState } from '@deephaven/redux';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport { assertNotNull, Pending, PromiseUtils } from '@deephaven/utils';\nimport { Container, EventEmitter, Tab } from '@deephaven/golden-layout';\nimport { IdeSession } from '@deephaven/jsapi-shim';\nimport { ConsoleEvent, NotebookEvent } from '../events';\nimport { getDashboardSessionWrapper } from '../redux';\nimport Panel from './Panel';\nimport MarkdownNotebook from './MarkdownNotebook';\nimport './NotebookPanel.scss';\n\nconst log = Log.module('NotebookPanel');\n\nconst DEBOUNCE_PANEL_STATE_UPDATE = 400;\n\ninterface Metadata {\n id: string;\n}\n\ninterface Settings {\n language: string;\n value: string | null;\n}\n\ninterface FileMetadata {\n itemName: string;\n id: string;\n}\n\ninterface PanelState {\n isPreview?: boolean;\n settings: Settings;\n fileMetadata: FileMetadata | null;\n}\n\ninterface NotebookPanelProps {\n fileStorage: FileStorage;\n glContainer: Container;\n glEventHub: EventEmitter;\n isDashboardActive: boolean;\n isPreview: boolean;\n metadata: Metadata;\n session: IdeSession;\n sessionLanguage: string;\n panelState: PanelState;\n notebooksUrl: string;\n}\n\ninterface NotebookPanelState {\n error?: {\n message?: string | undefined;\n };\n isDashboardActive: boolean;\n isFocused: boolean;\n isLoading: boolean;\n isLoaded: boolean;\n isPreview: boolean;\n\n savedChangeCount: number;\n changeCount: number;\n fileMetadata: FileMetadata | null;\n settings: Settings;\n\n session?: IdeSession;\n sessionLanguage?: string;\n\n // eslint-disable-next-line react/no-unused-state\n panelState: PanelState;\n\n showCloseModal: boolean;\n showSaveAsModal: boolean;\n\n scriptCode: string;\n\n itemName?: string;\n}\n\nclass NotebookPanel extends Component<NotebookPanelProps, NotebookPanelState> {\n static COMPONENT = 'NotebookPanel';\n\n static POPPER_OPTIONS = { placement: 'bottom-end' } as const;\n\n static DEFAULT_NAME = 'Untitled';\n\n static handleError(error: unknown): void {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n log.error(error);\n }\n\n static defaultProps = {\n isDashboardActive: true,\n isPreview: false,\n session: null,\n sessionLanguage: null,\n notebooksUrl: new URL(\n `${process.env.REACT_APP_NOTEBOOKS_URL}/`,\n `${window.location}`\n ).href,\n };\n\n static languageFromFileName(fileName: string): string | null {\n const extension = FileUtils.getExtension(fileName).toLowerCase();\n switch (extension) {\n case 'py':\n case 'python':\n return 'python';\n case 'groovy':\n return 'groovy';\n case 'scala':\n return 'scala';\n default:\n return null;\n }\n }\n\n constructor(props: NotebookPanelProps) {\n super(props);\n\n this.handleBlur = this.handleBlur.bind(this);\n this.handleCloseCancel = this.handleCloseCancel.bind(this);\n this.handleCloseDiscard = this.handleCloseDiscard.bind(this);\n this.handleCloseSave = this.handleCloseSave.bind(this);\n this.handleCopy = this.handleCopy.bind(this);\n this.handleEditorChange = this.handleEditorChange.bind(this);\n this.handleFind = this.handleFind.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleLinkClick = this.handleLinkClick.bind(this);\n this.handleLoadSuccess = this.handleLoadSuccess.bind(this);\n this.handleLoadError = this.handleLoadError.bind(this);\n this.handlePanelTabClick = this.handlePanelTabClick.bind(this);\n this.handleRenameFile = this.handleRenameFile.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleRunCommand = this.handleRunCommand.bind(this);\n this.handleRunAll = this.handleRunAll.bind(this);\n this.handleRunSelected = this.handleRunSelected.bind(this);\n this.handleSave = this.handleSave.bind(this);\n this.handleSaveAsCancel = this.handleSaveAsCancel.bind(this);\n this.handleSaveAsSubmit = this.handleSaveAsSubmit.bind(this);\n this.handleSaveError = this.handleSaveError.bind(this);\n this.handleSaveSuccess = this.handleSaveSuccess.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.bind(this);\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleShowRename = this.handleShowRename.bind(this);\n this.handleTab = this.handleTab.bind(this);\n this.handleTabFocus = this.handleTabFocus.bind(this);\n this.handleTabBlur = this.handleTabBlur.bind(this);\n this.handleTransformLinkUri = this.handleTransformLinkUri.bind(this);\n\n this.pending = new Pending();\n\n this.debouncedSavePanelState = debounce(\n this.savePanelState.bind(this),\n DEBOUNCE_PANEL_STATE_UPDATE\n );\n\n this.debouncedLoad = debounce(\n this.load.bind(this),\n DEBOUNCE_PANEL_STATE_UPDATE\n );\n\n this.notebook = null;\n\n this.tabTitleElement = null;\n\n this.tabInitOnce = false;\n this.shouldPromptClose = true;\n\n const { isDashboardActive, session, sessionLanguage, panelState } = props;\n\n let settings: { value: string | null; language: string } = {\n value: '',\n language: '',\n };\n let fileMetadata = null;\n let { isPreview } = props;\n if (panelState) {\n ({\n fileMetadata = fileMetadata,\n isPreview = isPreview,\n settings = settings,\n } = panelState);\n }\n\n // Not showing the unsaved indicator for null file id and editor content === '',\n // may need to implement some other indication that this notebook has never been saved\n const hasFileId =\n fileMetadata?.itemName && FileUtils.hasPath(fileMetadata.itemName);\n\n // Unsaved if file id != null and content != null\n // OR file id is null AND content is not null or ''\n const isUnsaved =\n (hasFileId && settings.value != null) || (!hasFileId && settings.value);\n const changeCount = isUnsaved ? 1 : 0;\n\n this.state = {\n error: undefined,\n isDashboardActive,\n isFocused: false,\n isLoading: true,\n isLoaded: false,\n isPreview,\n\n savedChangeCount: 0,\n changeCount,\n fileMetadata,\n settings,\n\n session,\n sessionLanguage,\n\n // eslint-disable-next-line react/no-unused-state\n panelState: {\n fileMetadata,\n settings,\n },\n\n showCloseModal: false,\n showSaveAsModal: false,\n\n scriptCode: '',\n };\n\n log.debug('constructor', props, this.state);\n }\n\n componentDidMount() {\n const { glContainer, glEventHub } = this.props;\n const { tab } = glContainer;\n if (tab) this.initTab(tab);\n this.initNotebookContent();\n glEventHub.on(NotebookEvent.RENAME_FILE, this.handleRenameFile);\n glContainer.on('tabClicked', this.handlePanelTabClick);\n }\n\n componentDidUpdate(\n prevProps: NotebookPanelProps,\n prevState: NotebookPanelState\n ): void {\n const { isPreview } = this.state;\n if (isPreview !== prevState.isPreview) {\n this.setPreviewStatus();\n }\n }\n\n componentWillUnmount(): void {\n this.debouncedSavePanelState.flush();\n this.pending.cancel();\n\n const { glContainer, glEventHub } = this.props;\n\n const { fileMetadata, isPreview } = this.state;\n glEventHub.off(NotebookEvent.RENAME_FILE, this.handleRenameFile);\n glContainer.off('tabClicked', this.handlePanelTabClick);\n glEventHub.emit(NotebookEvent.UNREGISTER_FILE, fileMetadata, isPreview);\n }\n\n pending: Pending;\n\n debouncedSavePanelState;\n\n debouncedLoad;\n\n notebook: ScriptEditor | null;\n\n tabTitleElement: Element | null;\n\n tabInitOnce: boolean;\n\n shouldPromptClose: boolean;\n\n // Called by TabEvent. Happens once when created, but also each time its moved.\n // when moved, need to re-init the unsaved indicators on title elements\n initTab(tab: Tab): void {\n if (!this.tabInitOnce) {\n this.tabInitOnce = true;\n this.initTabCloseOverride();\n }\n this.initTabClasses(tab);\n }\n\n // override glContainer.close() with a custom closure that checks if needs saving\n initTabCloseOverride() {\n const { glContainer } = this.props;\n const close = glContainer.close.bind(glContainer);\n glContainer.close = () => {\n const { changeCount, savedChangeCount } = this.state;\n if (changeCount !== savedChangeCount && this.shouldPromptClose) {\n this.setState({ showCloseModal: true });\n } else {\n close();\n }\n return true;\n };\n }\n\n initTabClasses(tab: Tab) {\n const tabElement = tab.element.get(0);\n assertNotNull(tabElement);\n const titleElement = tabElement.querySelector('.lm_title');\n this.tabTitleElement = titleElement;\n titleElement?.classList.add('notebook-title');\n this.setPreviewStatus();\n }\n\n getNotebookValue(): string | null {\n const { changeCount, savedChangeCount, settings } = this.state;\n const { value } = settings;\n if (changeCount !== savedChangeCount && this.notebook) {\n const notebookValue = this.notebook.getValue();\n return notebookValue != null ? notebookValue : value;\n }\n return value;\n }\n\n initNotebookContent(): void {\n // Init from file,\n // fallback to content from settings for unsaved notebook\n const { fileMetadata, settings, isPreview } = this.state;\n if (fileMetadata && fileMetadata.id) {\n log.debug('Init content from file');\n this.registerFileMetadata(fileMetadata, isPreview);\n this.load();\n return;\n }\n if (settings.value != null) {\n log.debug('Use content passed in the settings prop');\n this.handleLoadSuccess();\n return;\n }\n // No settings, no metadata\n this.handleLoadError(new Error('Missing file metadata'));\n }\n\n closeFileTabById(id: string): void {\n const { glEventHub } = this.props;\n glEventHub.emit(NotebookEvent.CLOSE_FILE, { id });\n }\n\n // Associate file id with the current tab\n // so the next time the file is opened this tab can be focused instead of opening a new tab\n registerFileMetadata(fileMetadata: FileMetadata, isPreview: boolean): void {\n const { glEventHub, metadata } = this.props;\n const { id: tabId } = metadata;\n glEventHub.emit(\n NotebookEvent.REGISTER_FILE,\n tabId,\n fileMetadata,\n isPreview\n );\n }\n\n renameTab(id: string, title: string): void {\n const { glEventHub } = this.props;\n glEventHub.emit(NotebookEvent.RENAME, id, title);\n }\n\n load() {\n const { fileMetadata, settings } = this.state;\n assertNotNull(fileMetadata);\n const { id } = fileMetadata;\n const { fileStorage } = this.props;\n this.pending\n .add(fileStorage.loadFile(id))\n .then(loadedFile => {\n log.debug('Loaded file', loadedFile);\n const { filename: itemName } = loadedFile;\n const { itemName: prevItemName } = this.state;\n if (itemName !== prevItemName) {\n const { metadata } = this.props;\n const { id: tabId } = metadata;\n this.renameTab(tabId, FileUtils.getBaseName(itemName));\n }\n const updatedSettings = {\n ...settings,\n language: NotebookPanel.languageFromFileName(itemName) ?? '',\n };\n if (settings.value == null) {\n updatedSettings.value = loadedFile.content;\n }\n this.setState({\n fileMetadata: { id: itemName, itemName },\n settings: updatedSettings,\n });\n this.debouncedSavePanelState();\n })\n .then(this.handleLoadSuccess)\n .catch(this.handleLoadError);\n }\n\n /**\n * Attempts to save the notebook.\n * @returns Returns true if save has begun, false if user needed to be prompted\n */\n save(): boolean {\n const { fileMetadata } = this.state;\n if (fileMetadata && FileUtils.hasPath(fileMetadata.itemName)) {\n const content = this.getNotebookValue();\n if (content != null) {\n this.saveContent(fileMetadata.itemName, content);\n return true;\n }\n return false;\n }\n\n this.setState({ showSaveAsModal: true });\n return false;\n }\n\n /**\n * Update existing file content\n * @param filename The name of the file\n * @param content New file content\n */\n saveContent(filename: string, content: string): void {\n log.debug('saveContent', filename, content);\n this.updateSavedChangeCount();\n const { fileStorage } = this.props;\n this.pending\n .add(fileStorage.saveFile({ filename, content, basename: filename }))\n .then(this.handleSaveSuccess)\n .catch(this.handleSaveError);\n }\n\n updateSavedChangeCount() {\n this.setState(({ changeCount }) => ({ savedChangeCount: changeCount }));\n }\n\n setPreviewStatus() {\n if (!this.tabTitleElement) {\n return;\n }\n const { isPreview } = this.state;\n log.debug('setPreviewStatus', this.tabTitleElement, isPreview);\n if (isPreview) {\n this.tabTitleElement.classList.add('is-preview');\n } else {\n this.tabTitleElement.classList.remove('is-preview');\n }\n }\n\n getOverflowActions = memoize(() => [\n {\n title: 'Find',\n icon: dhFileSearch,\n action: this.handleFind,\n group: ContextActions.groups.high,\n shortcut: SHORTCUTS.NOTEBOOK.FIND,\n order: 10,\n },\n ]);\n\n savePanelState() {\n this.setState(state => {\n const {\n changeCount,\n savedChangeCount,\n fileMetadata,\n isPreview,\n settings: initialSettings,\n } = state;\n const value = this.getNotebookValue();\n // notebooks with no unsaved changes have value === null in dehydrated state\n // content will be loaded from file when hydrating\n const dehydratedValue = changeCount !== savedChangeCount ? value : null;\n const settings = {\n ...initialSettings,\n value,\n };\n const dehydratedSettings = {\n ...initialSettings,\n value: dehydratedValue,\n };\n const panelState = {\n settings: dehydratedSettings,\n fileMetadata,\n isPreview,\n };\n log.debug('Saving panel state', panelState);\n return {\n settings,\n // eslint-disable-next-line react/no-unused-state\n panelState,\n };\n });\n }\n\n handleCloseDiscard(): void {\n this.shouldPromptClose = false;\n this.setState({ showCloseModal: false });\n const { glContainer } = this.props;\n glContainer.close();\n }\n\n handleCloseSave(): void {\n this.shouldPromptClose = false;\n this.setState({ showCloseModal: false });\n if (this.save()) {\n const { glContainer } = this.props;\n glContainer.close();\n }\n }\n\n handleCloseCancel(): void {\n this.shouldPromptClose = true;\n this.setState({ showCloseModal: false });\n }\n\n handleCopy(): void {\n const { fileMetadata, settings } = this.state;\n assertNotNull(fileMetadata);\n const content = this.getNotebookValue();\n const { language } = settings;\n const { itemName } = fileMetadata;\n const copyName = FileUtils.getCopyFileName(itemName);\n log.debug('handleCopy', fileMetadata, itemName, copyName);\n this.createNotebook(copyName, language, content ?? undefined);\n }\n\n handleEditorChange(e: editor.IModelContentChangedEvent): void {\n log.debug2('handleEditorChanged', e);\n\n this.removePreviewStatus();\n\n this.setState(state => {\n const { changeCount, savedChangeCount } = state;\n const { isUndoing, isRedoing } = e;\n if (isUndoing) {\n // Note that it's possible to undo past where the user last saved, if they save and then undo for example\n return { changeCount: changeCount - 1, savedChangeCount };\n }\n\n if (!isRedoing && changeCount < savedChangeCount) {\n // We made another change after undoing some changes from the previous save\n // Just reset the saved counter to zero and increase the unchanged saves\n // It'll be set correctly on the next save\n return { changeCount: changeCount + 1, savedChangeCount: 0 };\n }\n\n return { changeCount: changeCount + 1, savedChangeCount };\n });\n this.debouncedSavePanelState();\n }\n\n handleFind() {\n if (this.notebook) {\n this.notebook.toggleFind();\n }\n }\n\n handleBlur(): void {\n log.debug('handleBlur');\n this.setState({ isFocused: false });\n }\n\n handleFocus(): void {\n log.debug('handleFocus');\n this.setState({ isFocused: true });\n }\n\n /**\n * @param event The click event from clicking on the link\n */\n handleLinkClick(event: MouseEvent<HTMLAnchorElement>) {\n const { notebooksUrl, session, sessionLanguage } = this.props;\n const { href } = event.currentTarget;\n if (!href || !href.startsWith(notebooksUrl)) {\n return;\n }\n\n event.stopPropagation();\n event.preventDefault();\n\n const notebookPath = `/${href.substring(notebooksUrl.length)}`.replace(\n /%20/g,\n ' '\n );\n if (notebookPath === '/') {\n log.debug('Ignoring invalid notebook link', notebookPath);\n return;\n }\n\n log.debug('Notebook link clicked, opening', notebookPath);\n\n const { glEventHub } = this.props;\n const notebookSettings = {\n value: null,\n language: sessionLanguage,\n };\n const fileMetadata = { id: notebookPath, itemName: notebookPath };\n glEventHub.emit(\n NotebookEvent.SELECT_NOTEBOOK,\n session,\n sessionLanguage,\n notebookSettings,\n fileMetadata\n );\n }\n\n handleLoadSuccess() {\n this.setState({\n error: undefined,\n isLoaded: true,\n isLoading: false,\n });\n }\n\n handleLoadError(errorParam: { message?: string | undefined }) {\n let error = errorParam;\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n if (PromiseUtils.isTimedOut(error)) {\n error = new Error('File not found.');\n }\n log.error(error);\n this.setState({ error, isLoading: false });\n }\n\n handleSave() {\n log.debug('handleSave');\n this.save();\n }\n\n handleSaveSuccess(file: File) {\n const { fileStorage } = this.props;\n const fileMetadata = { id: file.filename, itemName: file.filename };\n const language = NotebookPanel.languageFromFileName(file.filename) ?? '';\n this.setState(state => {\n const { fileMetadata: oldMetadata } = state;\n const settings = {\n ...state.settings,\n language,\n };\n log.debug('handleSaveSuccess', fileMetadata, oldMetadata, settings);\n if (\n oldMetadata &&\n FileUtils.hasPath(oldMetadata.itemName) &&\n oldMetadata.itemName !== fileMetadata.itemName\n ) {\n log.debug('handleSaveSuccess deleting old file', oldMetadata.itemName);\n fileStorage\n .deleteFile(oldMetadata.itemName)\n .catch(NotebookPanel.handleError);\n }\n return {\n fileMetadata,\n settings,\n isPreview: false,\n };\n });\n this.debouncedSavePanelState();\n this.registerFileMetadata(fileMetadata, false);\n }\n\n handleSaveError(error: unknown) {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n // There was an error saving, just reset the savedChangeCount\n // It's possible if they undo changes they'll be back at the spot where it was last saved successfully,\n // But we may as well continue showing the error until they actually save again\n this.setState({ savedChangeCount: 0 });\n log.error(error);\n }\n\n handleSaveAsCancel() {\n this.setState({ showSaveAsModal: false });\n }\n\n handleSaveAsSubmit(name: string): void {\n log.debug('handleSaveAsSubmit', name);\n const { fileMetadata } = this.state;\n if (!fileMetadata) {\n return;\n }\n const { itemName: prevItemName } = fileMetadata;\n const content = this.getNotebookValue() ?? '';\n this.setState({\n showSaveAsModal: false,\n });\n\n if (FileUtils.getBaseName(prevItemName) !== FileUtils.getBaseName(name)) {\n const { metadata } = this.props;\n const { id: tabId } = metadata;\n this.renameTab(tabId, FileUtils.getBaseName(name));\n }\n\n this.saveContent(name, content);\n }\n\n handleRenameFile(oldName: string, newName: string) {\n const { fileMetadata } = this.state;\n if (fileMetadata && fileMetadata.id === oldName) {\n this.setState({ fileMetadata: { id: newName, itemName: newName } });\n this.debouncedSavePanelState();\n }\n }\n\n handleResize(): void {\n this.notebook?.updateDimensions();\n }\n\n handleRunCommand(command?: string): void {\n this.runCommand(command);\n }\n\n handleRunAll(): void {\n if (!this.notebook) {\n log.error('Editor is not initialized.');\n return;\n }\n this.runCommand(this.notebook.getValue() ?? undefined);\n }\n\n handleRunSelected(): void {\n if (!this.notebook) {\n log.error('Editor is not initialized.');\n return;\n }\n this.runCommand(this.notebook.getSelectedCommand());\n }\n\n handleSessionOpened(\n session: IdeSession,\n { language }: { language: string }\n ): void {\n this.setState({\n session,\n sessionLanguage: language,\n });\n }\n\n handleSessionClosed(): void {\n this.setState({\n session: undefined,\n sessionLanguage: undefined,\n });\n }\n\n handleShow(): void {\n log.debug('handleShow');\n this.notebook?.updateDimensions();\n }\n\n handleShowRename(): void {\n this.setState({ showSaveAsModal: true });\n }\n\n handleTab(tab: Tab): void {\n log.debug('NotebookPanel tab event', tab);\n this.initTab(tab);\n }\n\n handleTabFocus(...args: unknown[]): void {\n log.debug('handleTabFocus', ...args);\n const { glContainer } = this.props;\n this.setState({\n isDashboardActive: true,\n });\n if (this.notebook && !glContainer.isHidden) {\n this.notebook.updateDimensions();\n }\n }\n\n handleTabBlur(): void {\n log.debug('handleTabBlur');\n this.setState({\n isDashboardActive: false,\n });\n }\n\n handlePanelTabClick(): void {\n log.debug('handlePanelTabClick');\n this.focus();\n }\n\n /**\n * Transform the link URI to load from where the notebook is if it's relative\n * @param src The link to transform\n * @returns String the transformed link\n */\n handleTransformLinkUri(src: string): string {\n const { notebooksUrl } = this.props;\n const { fileMetadata } = this.state;\n\n if (src.endsWith('/')) {\n return src;\n }\n\n if (src.startsWith('/')) {\n return `${notebooksUrl}${src.substring(1)}`;\n }\n\n let itemName = fileMetadata?.itemName;\n if (!itemName) {\n return src;\n }\n if (itemName.charAt(0) === '/') {\n itemName = itemName.substring(1);\n }\n\n const itemUri = new URL(itemName, notebooksUrl);\n return new URL(src, itemUri).href;\n }\n\n focus(): void {\n requestAnimationFrame(() => {\n if (this.notebook) {\n this.notebook.focus();\n }\n });\n }\n\n createNotebook(\n itemName: string,\n language: string | undefined,\n content = ''\n ): void {\n const { glEventHub } = this.props;\n const { session, sessionLanguage, settings } = this.state;\n const notebookSettings = {\n ...settings,\n language,\n value: content,\n };\n const fileMetadata = {\n id: null,\n itemName,\n };\n log.debug(\n 'handleCreateNotebook',\n session,\n sessionLanguage,\n notebookSettings,\n fileMetadata\n );\n glEventHub.emit(\n NotebookEvent.CREATE_NOTEBOOK,\n session,\n sessionLanguage,\n notebookSettings,\n fileMetadata\n );\n }\n\n runCommand(command?: string): void {\n if (!command) {\n log.debug('Ignoring empty command.');\n return;\n }\n\n this.removePreviewStatus();\n\n const { glEventHub } = this.props;\n glEventHub.emit(ConsoleEvent.SEND_COMMAND, command, false, true);\n }\n\n removePreviewStatus(): void {\n this.setState(({ isPreview }) => {\n if (isPreview) {\n const { fileMetadata } = this.state;\n if (fileMetadata) {\n this.registerFileMetadata(fileMetadata, false);\n }\n return { isPreview: false };\n }\n return null;\n });\n }\n\n render(): ReactElement {\n const {\n fileStorage,\n glContainer,\n glContainer: { tab },\n glEventHub,\n } = this.props;\n const {\n changeCount,\n savedChangeCount,\n error,\n isDashboardActive,\n isLoaded,\n isLoading,\n isPreview,\n fileMetadata,\n session,\n sessionLanguage,\n settings: initialSettings,\n showCloseModal,\n showSaveAsModal,\n } = this.state;\n // We don't want to steal focus if this isn't shown or it's just a preview\n const focusOnMount =\n isDashboardActive && !glContainer.isHidden && !isPreview;\n const itemName = fileMetadata?.itemName ?? NotebookPanel.DEFAULT_NAME;\n const isMarkdown = itemName.endsWith('.md');\n const isExistingItem = fileMetadata?.id != null;\n const overflowActions = this.getOverflowActions();\n const settings = {\n ...initialSettings,\n };\n const isSessionConnected = session != null;\n const isLanguageMatching = sessionLanguage === settings.language;\n const runButtonsDisabled =\n !isLoaded || !isSessionConnected || !isLanguageMatching;\n const toolbarDisabled = !isLoaded;\n const contextActions = [\n {\n action: this.handleSave,\n shortcut: GLOBAL_SHORTCUTS.SAVE,\n },\n ];\n const disabledRunButtonTooltip = ScriptEditorUtils.getDisabledRunTooltip(\n isSessionConnected,\n isLanguageMatching,\n 'Notebook extension',\n 'Run'\n );\n const disabledRunSelectedButtonTooltip = ScriptEditorUtils.getDisabledRunTooltip(\n isSessionConnected,\n isLanguageMatching,\n 'Notebook extension',\n 'Run Selected'\n );\n\n const additionalActions = [\n {\n title: isExistingItem ? 'Rename' : 'Save As…',\n order: 10,\n group: ContextActions.groups.high,\n action: this.handleShowRename,\n },\n {\n title: 'Copy File',\n action: this.handleCopy,\n group: ContextActions.groups.high,\n order: 20,\n },\n ];\n\n const portal = tab.element.find('.lm_title_before').get(0);\n assertNotNull(portal);\n\n return (\n <>\n {tab &&\n ReactDOM.createPortal(\n <span\n className={classNames('editor-unsaved-indicator', {\n 'is-unsaved': changeCount !== savedChangeCount,\n })}\n />,\n portal // tab.element is jquery element, we want a dom element\n )}\n\n <Panel\n className=\"notebook-container\"\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onTab={this.handleTab}\n onResize={this.handleResize}\n onShow={this.handleShow}\n onTabFocus={this.handleTabFocus}\n onTabBlur={this.handleTabBlur}\n onSessionOpen={this.handleSessionOpened}\n onSessionClose={this.handleSessionClosed}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n additionalActions={additionalActions}\n renderTabTooltip={() => itemName}\n >\n {!isMarkdown && (\n <>\n <div className=\"notebook-toolbar\">\n <span>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon btn-play\"\n onClick={this.handleRunAll}\n disabled={runButtonsDisabled}\n >\n <FontAwesomeIcon icon={vsPlay} transform=\"grow-4\" />\n <Tooltip>\n Run {SHORTCUTS.NOTEBOOK.RUN.getDisplayText()}\n </Tooltip>\n </button>\n {disabledRunButtonTooltip && (\n <Tooltip>{disabledRunButtonTooltip}</Tooltip>\n )}\n </span>\n <span>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon btn-play\"\n onClick={this.handleRunSelected}\n disabled={runButtonsDisabled}\n >\n <FontAwesomeIcon icon={dhRunSelection} transform=\"grow-4\" />\n <Tooltip>\n Run Selected{' '}\n {SHORTCUTS.NOTEBOOK.RUN_SELECTED.getDisplayText()}\n </Tooltip>\n </button>\n {disabledRunSelectedButtonTooltip && (\n <Tooltip>{disabledRunSelectedButtonTooltip}</Tooltip>\n )}\n </span>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon mr-auto\"\n disabled={toolbarDisabled}\n onClick={this.handleSave}\n >\n <FontAwesomeIcon icon={vsSave} />\n <Tooltip>Save</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-overflow btn-link-icon\"\n disabled={toolbarDisabled}\n >\n <FontAwesomeIcon icon={vsKebabVertical} />\n <Tooltip>More Actions...</Tooltip>\n <DropdownMenu\n actions={overflowActions}\n popperOptions={NotebookPanel.POPPER_OPTIONS}\n />\n </button>\n </div>\n <ScriptEditor\n isLoaded={isLoaded}\n isLoading={isLoading}\n error={error}\n onChange={this.handleEditorChange}\n onRunCommand={this.handleRunCommand}\n session={session}\n sessionLanguage={sessionLanguage}\n settings={settings}\n focusOnMount={focusOnMount}\n ref={notebook => {\n this.notebook = notebook;\n }}\n />\n </>\n )}\n {isMarkdown && (\n <MarkdownNotebook\n content={settings.value ?? ''}\n onLinkClick={this.handleLinkClick}\n onRunCode={this.handleRunCommand}\n transformImageUri={this.handleTransformLinkUri}\n transformLinkUri={this.handleTransformLinkUri}\n />\n )}\n <NewItemModal\n isOpen={showSaveAsModal}\n type=\"file\"\n defaultValue={itemName}\n title={isExistingItem ? 'Rename' : 'Save file as'}\n onSubmit={this.handleSaveAsSubmit}\n onCancel={this.handleSaveAsCancel}\n notifyOnExtensionChange\n storage={fileStorage}\n />\n <BasicModal\n isOpen={showCloseModal}\n headerText={`Do you want to save the changes you made to ${itemName}?`}\n bodyText=\"Your changes will be lost if you don't save them.\"\n onCancel={this.handleCloseCancel}\n onDiscard={this.handleCloseDiscard}\n onConfirm={this.handleCloseSave}\n discardButtonText=\"Discard Changes\"\n confirmButtonText=\"Save\"\n />\n <ContextActions actions={contextActions} />\n </Panel>\n </>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string }\n) => {\n const fileStorage = getFileStorage(state);\n const sessionWrapper = getDashboardSessionWrapper(\n state,\n ownProps.localDashboardId\n );\n const { session, config: sessionConfig } = sessionWrapper ?? {};\n const { type: sessionLanguage } = sessionConfig ?? {};\n return {\n fileStorage,\n session,\n sessionLanguage,\n };\n};\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(\n NotebookPanel\n);\n"],"file":"NotebookPanel.js"}
|
|
@@ -1,25 +1,28 @@
|
|
|
1
|
-
|
|
1
|
+
import { Component, ReactElement, RefObject } from 'react';
|
|
2
|
+
import { IrisGridPanel, IrisGridPanelProps, PanelState } from './IrisGridPanel';
|
|
3
|
+
import './PandasPanel.scss';
|
|
4
|
+
interface PandasPanelProps extends IrisGridPanelProps {
|
|
5
|
+
panelState: PanelState | null;
|
|
6
|
+
}
|
|
7
|
+
interface PandasPanelState {
|
|
8
|
+
shouldFocusGrid: boolean;
|
|
9
|
+
panelState: PanelState | null;
|
|
10
|
+
}
|
|
2
11
|
/**
|
|
3
12
|
* Wraps and IrisGridPanel to add a refresh button for Pandas.
|
|
4
13
|
*/
|
|
5
|
-
declare class PandasPanel extends
|
|
14
|
+
declare class PandasPanel extends Component<PandasPanelProps, PandasPanelState> {
|
|
15
|
+
static defaultProps: {
|
|
16
|
+
panelState: null;
|
|
17
|
+
};
|
|
6
18
|
static COMPONENT: string;
|
|
7
|
-
constructor(props:
|
|
8
|
-
|
|
9
|
-
|
|
19
|
+
constructor(props: PandasPanelProps);
|
|
20
|
+
buttonRef: RefObject<HTMLButtonElement>;
|
|
21
|
+
irisGridRef: RefObject<IrisGridPanel>;
|
|
10
22
|
handleReload(): void;
|
|
11
23
|
handleGridStateChange(): void;
|
|
12
|
-
handlePanelStateUpdate(panelState:
|
|
24
|
+
handlePanelStateUpdate(panelState: PanelState): void;
|
|
25
|
+
render(): ReactElement;
|
|
13
26
|
}
|
|
14
|
-
|
|
15
|
-
namespace propTypes {
|
|
16
|
-
const panelState: PropTypes.Requireable<PropTypes.InferProps<{}>>;
|
|
17
|
-
}
|
|
18
|
-
namespace defaultProps {
|
|
19
|
-
const panelState_1: null;
|
|
20
|
-
export { panelState_1 as panelState };
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
import React from "react";
|
|
24
|
-
import PropTypes from "prop-types";
|
|
27
|
+
export default PandasPanel;
|
|
25
28
|
//# sourceMappingURL=PandasPanel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PandasPanel.d.ts","sourceRoot":"","sources":["../../src/panels/PandasPanel.
|
|
1
|
+
{"version":3,"file":"PandasPanel.d.ts","sourceRoot":"","sources":["../../src/panels/PandasPanel.tsx"],"names":[],"mappings":"AAEA,OAAc,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,oBAAoB,CAAC;AAE5B,UAAU,gBAAiB,SAAQ,kBAAkB;IACnD,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;CAC/B;AAED,UAAU,gBAAgB;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;CAC/B;AAED;;GAEG;AACH,cAAM,WAAY,SAAQ,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACrE,MAAM,CAAC,YAAY;;MAEjB;IAEF,MAAM,CAAC,SAAS,SAAiB;gBAErB,KAAK,EAAE,gBAAgB;IAiBnC,SAAS,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAExC,WAAW,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;IAEtC,YAAY,IAAI,IAAI;IAQpB,qBAAqB,IAAI,IAAI;IAU7B,sBAAsB,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAMpD,MAAM,IAAI,YAAY;CAiCvB;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -6,19 +6,23 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
|
|
6
6
|
|
|
7
7
|
/* eslint-disable react/no-unused-state */
|
|
8
8
|
import React, { Component } from 'react';
|
|
9
|
-
import PropTypes from 'prop-types';
|
|
10
9
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
11
10
|
import { dhRefresh } from '@deephaven/icons';
|
|
12
11
|
import { Tooltip } from '@deephaven/components';
|
|
13
|
-
import IrisGridPanel from "./IrisGridPanel.js";
|
|
12
|
+
import { IrisGridPanel } from "./IrisGridPanel.js";
|
|
14
13
|
import "./PandasPanel.css";
|
|
14
|
+
|
|
15
15
|
/**
|
|
16
16
|
* Wraps and IrisGridPanel to add a refresh button for Pandas.
|
|
17
17
|
*/
|
|
18
|
-
|
|
19
18
|
class PandasPanel extends Component {
|
|
20
19
|
constructor(props) {
|
|
21
20
|
super(props);
|
|
21
|
+
|
|
22
|
+
_defineProperty(this, "buttonRef", void 0);
|
|
23
|
+
|
|
24
|
+
_defineProperty(this, "irisGridRef", void 0);
|
|
25
|
+
|
|
22
26
|
this.irisGridRef = /*#__PURE__*/React.createRef();
|
|
23
27
|
this.buttonRef = /*#__PURE__*/React.createRef();
|
|
24
28
|
this.handleReload = this.handleReload.bind(this);
|
|
@@ -35,21 +39,23 @@ class PandasPanel extends Component {
|
|
|
35
39
|
}
|
|
36
40
|
|
|
37
41
|
handleReload() {
|
|
38
|
-
|
|
39
|
-
|
|
42
|
+
var _this$irisGridRef$cur, _this$buttonRef$curre;
|
|
43
|
+
|
|
44
|
+
(_this$irisGridRef$cur = this.irisGridRef.current) === null || _this$irisGridRef$cur === void 0 ? void 0 : _this$irisGridRef$cur.initModel();
|
|
45
|
+
(_this$buttonRef$curre = this.buttonRef.current) === null || _this$buttonRef$curre === void 0 ? void 0 : _this$buttonRef$curre.blur();
|
|
40
46
|
this.setState({
|
|
41
47
|
shouldFocusGrid: true
|
|
42
48
|
});
|
|
43
49
|
}
|
|
44
50
|
|
|
45
51
|
handleGridStateChange() {
|
|
46
|
-
var _this$irisGridRef$
|
|
52
|
+
var _this$irisGridRef$cur2, _this$irisGridRef$cur3, _this$irisGridRef$cur4;
|
|
47
53
|
|
|
48
54
|
var {
|
|
49
55
|
shouldFocusGrid
|
|
50
56
|
} = this.state;
|
|
51
57
|
|
|
52
|
-
if (shouldFocusGrid && (_this$irisGridRef$
|
|
58
|
+
if (shouldFocusGrid && (_this$irisGridRef$cur2 = this.irisGridRef.current) !== null && _this$irisGridRef$cur2 !== void 0 && (_this$irisGridRef$cur3 = _this$irisGridRef$cur2.irisGrid) !== null && _this$irisGridRef$cur3 !== void 0 && (_this$irisGridRef$cur4 = _this$irisGridRef$cur3.current) !== null && _this$irisGridRef$cur4 !== void 0 && _this$irisGridRef$cur4.grid) {
|
|
53
59
|
this.irisGridRef.current.irisGrid.current.grid.focus();
|
|
54
60
|
this.setState({
|
|
55
61
|
shouldFocusGrid: false
|
|
@@ -85,13 +91,11 @@ class PandasPanel extends Component {
|
|
|
85
91
|
|
|
86
92
|
}
|
|
87
93
|
|
|
94
|
+
_defineProperty(PandasPanel, "defaultProps", {
|
|
95
|
+
panelState: null
|
|
96
|
+
});
|
|
97
|
+
|
|
88
98
|
_defineProperty(PandasPanel, "COMPONENT", 'PandasPanel');
|
|
89
99
|
|
|
90
|
-
PandasPanel.propTypes = {
|
|
91
|
-
panelState: PropTypes.shape({})
|
|
92
|
-
};
|
|
93
|
-
PandasPanel.defaultProps = {
|
|
94
|
-
panelState: null
|
|
95
|
-
};
|
|
96
100
|
export default PandasPanel;
|
|
97
101
|
//# sourceMappingURL=PandasPanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/panels/PandasPanel.
|
|
1
|
+
{"version":3,"sources":["../../src/panels/PandasPanel.tsx"],"names":["React","Component","FontAwesomeIcon","dhRefresh","Tooltip","IrisGridPanel","PandasPanel","constructor","props","irisGridRef","createRef","buttonRef","handleReload","bind","handleGridStateChange","handlePanelStateUpdate","panelState","state","shouldFocusGrid","current","initModel","blur","setState","irisGrid","grid","focus","render"],"mappings":";;;;AAAA;;AACA;AACA,OAAOA,KAAP,IAAgBC,SAAhB,QAA0D,OAA1D;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,SAAT,QAA0B,kBAA1B;AACA,SAASC,OAAT,QAAwB,uBAAxB;SACSC,a;;;AAYT;AACA;AACA;AACA,MAAMC,WAAN,SAA0BL,SAA1B,CAAwE;AAOtEM,EAAAA,WAAW,CAACC,KAAD,EAA0B;AACnC,UAAMA,KAAN;;AADmC;;AAAA;;AAGnC,SAAKC,WAAL,gBAAmBT,KAAK,CAACU,SAAN,EAAnB;AACA,SAAKC,SAAL,gBAAiBX,KAAK,CAACU,SAAN,EAAjB;AAEA,SAAKE,YAAL,GAAoB,KAAKA,YAAL,CAAkBC,IAAlB,CAAuB,IAAvB,CAApB;AACA,SAAKC,qBAAL,GAA6B,KAAKA,qBAAL,CAA2BD,IAA3B,CAAgC,IAAhC,CAA7B;AACA,SAAKE,sBAAL,GAA8B,KAAKA,sBAAL,CAA4BF,IAA5B,CAAiC,IAAjC,CAA9B;AAEA,QAAM;AAAEG,MAAAA;AAAF,QAAiBR,KAAvB;AACA,SAAKS,KAAL,GAAa;AACXC,MAAAA,eAAe,EAAE,KADN;AAEXF,MAAAA,UAFW,CAEC;;AAFD,KAAb;AAID;;AAMDJ,EAAAA,YAAY,GAAS;AAAA;;AACnB,kCAAKH,WAAL,CAAiBU,OAAjB,gFAA0BC,SAA1B;AACA,kCAAKT,SAAL,CAAeQ,OAAf,gFAAwBE,IAAxB;AACA,SAAKC,QAAL,CAAc;AACZJ,MAAAA,eAAe,EAAE;AADL,KAAd;AAGD;;AAEDJ,EAAAA,qBAAqB,GAAS;AAAA;;AAC5B,QAAM;AAAEI,MAAAA;AAAF,QAAsB,KAAKD,KAAjC;;AACA,QAAIC,eAAe,8BAAI,KAAKT,WAAL,CAAiBU,OAArB,6EAAI,uBAA0BI,QAA9B,6EAAI,uBAAoCJ,OAAxC,mDAAI,uBAA6CK,IAApE,EAA0E;AACxE,WAAKf,WAAL,CAAiBU,OAAjB,CAAyBI,QAAzB,CAAkCJ,OAAlC,CAA0CK,IAA1C,CAA+CC,KAA/C;AACA,WAAKH,QAAL,CAAc;AACZJ,QAAAA,eAAe,EAAE;AADL,OAAd;AAGD;AACF;;AAEDH,EAAAA,sBAAsB,CAACC,UAAD,EAA+B;AACnD,SAAKM,QAAL,CAAc;AACZN,MAAAA;AADY,KAAd;AAGD;;AAEDU,EAAAA,MAAM,GAAiB;AACrB,sBAAqB,KAAKlB,KAA1B;AAAA,QAAWA,KAAX;;AAEA,wBACE,oBAAC,aAAD;AACE,MAAA,GAAG,EAAE,KAAKC,WADZ;AAEE,MAAA,aAAa,EAAE,KAAKK,qBAFtB;AAGE,MAAA,kBAAkB,EAAE,KAAKC;AAH3B,OAIMP,KAJN,gBAME;AACE,MAAA,GAAG,EAAE,KAAKG,SADZ;AAEE,MAAA,IAAI,EAAC,QAFP;AAGE,MAAA,SAAS,EAAC,4BAHZ;AAIE,MAAA,OAAO,EAAE,KAAKC;AAJhB,wCAOE,+CACE,oBAAC,eAAD;AACE,MAAA,IAAI,EAAET,SADR;AAEE,MAAA,SAAS,EAAC,UAFZ;AAGE,MAAA,SAAS,EAAC;AAHZ,MADF,WAPF,eAeE,oBAAC,OAAD,iFAfF,CANF,CADF;AA6BD;;AApFqE;;gBAAlEG,W,kBACkB;AACpBU,EAAAA,UAAU,EAAE;AADQ,C;;gBADlBV,W,eAKe,a;;AAkFrB,eAAeA,WAAf","sourcesContent":["/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable react/no-unused-state */\nimport React, { Component, ReactElement, RefObject } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhRefresh } from '@deephaven/icons';\nimport { Tooltip } from '@deephaven/components';\nimport { IrisGridPanel, IrisGridPanelProps, PanelState } from './IrisGridPanel';\nimport './PandasPanel.scss';\n\ninterface PandasPanelProps extends IrisGridPanelProps {\n panelState: PanelState | null;\n}\n\ninterface PandasPanelState {\n shouldFocusGrid: boolean;\n panelState: PanelState | null;\n}\n\n/**\n * Wraps and IrisGridPanel to add a refresh button for Pandas.\n */\nclass PandasPanel extends Component<PandasPanelProps, PandasPanelState> {\n static defaultProps = {\n panelState: null,\n };\n\n static COMPONENT = 'PandasPanel';\n\n constructor(props: PandasPanelProps) {\n super(props);\n\n this.irisGridRef = React.createRef();\n this.buttonRef = React.createRef();\n\n this.handleReload = this.handleReload.bind(this);\n this.handleGridStateChange = this.handleGridStateChange.bind(this);\n this.handlePanelStateUpdate = this.handlePanelStateUpdate.bind(this);\n\n const { panelState } = props;\n this.state = {\n shouldFocusGrid: false,\n panelState, // Dehydrated panel state that can load this panel\n };\n }\n\n buttonRef: RefObject<HTMLButtonElement>;\n\n irisGridRef: RefObject<IrisGridPanel>;\n\n handleReload(): void {\n this.irisGridRef.current?.initModel();\n this.buttonRef.current?.blur();\n this.setState({\n shouldFocusGrid: true,\n });\n }\n\n handleGridStateChange(): void {\n const { shouldFocusGrid } = this.state;\n if (shouldFocusGrid && this.irisGridRef.current?.irisGrid?.current?.grid) {\n this.irisGridRef.current.irisGrid.current.grid.focus();\n this.setState({\n shouldFocusGrid: false,\n });\n }\n }\n\n handlePanelStateUpdate(panelState: PanelState): void {\n this.setState({\n panelState,\n });\n }\n\n render(): ReactElement {\n const { ...props } = this.props;\n\n return (\n <IrisGridPanel\n ref={this.irisGridRef}\n onStateChange={this.handleGridStateChange}\n onPanelStateUpdate={this.handlePanelStateUpdate}\n {...props}\n >\n <button\n ref={this.buttonRef}\n type=\"button\"\n className=\"btn btn-primary btn-pandas\"\n onClick={this.handleReload}\n >\n pandas dataframe\n <span>\n <FontAwesomeIcon\n icon={dhRefresh}\n transform=\"shrink-1\"\n className=\"mr-1\"\n />\n Reload\n </span>\n <Tooltip>\n Click to refresh pandas dataframe, updates do not occur\n automatically.\n </Tooltip>\n </button>\n </IrisGridPanel>\n );\n }\n}\n\nexport default PandasPanel;\n"],"file":"PandasPanel.js"}
|