From 997b403db36292fab13bb809c23988d0925de005 Mon Sep 17 00:00:00 2001 From: undefined Date: Fri, 15 Jul 2022 00:50:43 +0800 Subject: [PATCH] ui: scratchpad sidebar api --- .../components/scratchpad/ScratchpadSidebar.tsx | 9 +++++++++ .../scratchpad/ScratchpadToolbarContainer.jsx | 11 +++++++++++ .../ui-default/components/scratchpad/index.jsx | 15 ++++++++++++--- .../components/scratchpad/reducers/ui.ts | 4 ++++ packages/ui-default/modules.js | 3 ++- 5 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 packages/ui-default/components/scratchpad/ScratchpadSidebar.tsx diff --git a/packages/ui-default/components/scratchpad/ScratchpadSidebar.tsx b/packages/ui-default/components/scratchpad/ScratchpadSidebar.tsx new file mode 100644 index 000000000..37f1870ee --- /dev/null +++ b/packages/ui-default/components/scratchpad/ScratchpadSidebar.tsx @@ -0,0 +1,9 @@ +import React from 'react'; + +export default function ScratchpadSidebar({ name }) { + const Component = window.Hydro.scratchpad?.[name]; + const [state, setState] = React.useState(0); + if (Component) return ; + setTimeout(() => setState(state + 1), 1000); + return
No registered providers.
; +} diff --git a/packages/ui-default/components/scratchpad/ScratchpadToolbarContainer.jsx b/packages/ui-default/components/scratchpad/ScratchpadToolbarContainer.jsx index e6cf016ce..a2875d084 100644 --- a/packages/ui-default/components/scratchpad/ScratchpadToolbarContainer.jsx +++ b/packages/ui-default/components/scratchpad/ScratchpadToolbarContainer.jsx @@ -16,6 +16,7 @@ import Toolbar, { const mapStateToProps = (state) => ({ pretestVisible: state.ui.pretest.visible, + sidebarVisible: state.ui.sidebar.visible, recordsVisible: state.ui.records.visible, isPosting: state.ui.isPosting, isRunning: state.pretest.isRunning, @@ -183,6 +184,16 @@ export default connect(mapStateToProps, mapDispatchToProps)(class ScratchpadTool {i18n('Records')} )} + {/* this.props.togglePanel('sidebar')} + data-global-hotkey="alt+w" + data-tooltip={`${i18n('Toggle Sidebar')} (Alt+L)`} + > + + {' '} + {i18n('Pretest')} + */} ); } diff --git a/packages/ui-default/components/scratchpad/index.jsx b/packages/ui-default/components/scratchpad/index.jsx index 82ebf2654..410db49e0 100644 --- a/packages/ui-default/components/scratchpad/index.jsx +++ b/packages/ui-default/components/scratchpad/index.jsx @@ -8,8 +8,9 @@ import ScratchpadToolbar from './ScratchpadToolbarContainer'; import ScratchpadEditor from './ScratchpadEditorContainer'; import ScratchpadPretest from './ScratchpadPretestContainer'; import ScratchpadRecords from './ScratchpadRecordsContainer'; +import ScratchpadSidebar from './ScratchpadSidebar'; -function buildNestedPane([a, ...panes]) { +function buildNestedPane([a, ...panes], mode = 'horizontal') { const elements = [ a, ...panes.filter((p) => p.props.visible), @@ -18,7 +19,7 @@ function buildNestedPane([a, ...panes]) { return elements .reduce((prev, curr) => ( this.handleChangeSize('main', size)} > - + this.handleChangeSize('sidebar', size)} + > + + + {buildNestedPane([ diff --git a/packages/ui-default/components/scratchpad/reducers/ui.ts b/packages/ui-default/components/scratchpad/reducers/ui.ts index 2bfe8f6a3..3ab5a4203 100644 --- a/packages/ui-default/components/scratchpad/reducers/ui.ts +++ b/packages/ui-default/components/scratchpad/reducers/ui.ts @@ -11,6 +11,10 @@ export default function reducer(state = { : false, size: 200, }, + sidebar: { + visible: false, + size: 100, + }, records: { visible: UiContext.canViewRecord && localStorage.getItem('scratchpad/records') === 'true', size: 100, diff --git a/packages/ui-default/modules.js b/packages/ui-default/modules.js index d089c8c6a..3f16f533b 100644 --- a/packages/ui-default/modules.js +++ b/packages/ui-default/modules.js @@ -1,5 +1,6 @@ import $ from 'jquery'; import _ from 'lodash'; +import React from 'react'; import './utils/delay'; import './utils/emulateAnchorClick'; @@ -23,6 +24,6 @@ import './components/notification'; import './components/nprogress'; import './components/monaco/loader'; -window.node_modules = { _, $ }; +window.node_modules = { _, $, React }; window.$ = $; window.jQuery = $;