ui: scratchpad sidebar api

This commit is contained in:
undefined committed 2022-07-15 00:50:43 +08:00
1 parent 60fc805c84
commit 997b403db3
5 files changed
+38 -4

No files matched your search

@@ -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 <Component />;
setTimeout(() => setState(state + 1), 1000);
return <div>No registered providers.</div>;
}
@@ -16,6 +16,7 @@ import Toolbar, {
const mapStateToProps = (state) => ({ const mapStateToProps = (state) => ({
pretestVisible: state.ui.pretest.visible, pretestVisible: state.ui.pretest.visible,
sidebarVisible: state.ui.sidebar.visible,
recordsVisible: state.ui.records.visible, recordsVisible: state.ui.records.visible,
isPosting: state.ui.isPosting, isPosting: state.ui.isPosting,
isRunning: state.pretest.isRunning, isRunning: state.pretest.isRunning,
@@ -183,6 +184,16 @@ export default connect(mapStateToProps, mapDispatchToProps)(class ScratchpadTool
{i18n('Records')} {i18n('Records')}
</ToolbarButton> </ToolbarButton>
)} )}
{/* <ToolbarButton
activated={this.props.sidebarVisible}
onClick={() => this.props.togglePanel('sidebar')}
data-global-hotkey="alt+w"
data-tooltip={`${i18n('Toggle Sidebar')} (Alt+L)`}
>
<Icon name="edit" />
{' '}
{i18n('Pretest')}
</ToolbarButton> */}
</Toolbar> </Toolbar>
); );
} }
@@ -8,8 +8,9 @@ import ScratchpadToolbar from './ScratchpadToolbarContainer';
import ScratchpadEditor from './ScratchpadEditorContainer'; import ScratchpadEditor from './ScratchpadEditorContainer';
import ScratchpadPretest from './ScratchpadPretestContainer'; import ScratchpadPretest from './ScratchpadPretestContainer';
import ScratchpadRecords from './ScratchpadRecordsContainer'; import ScratchpadRecords from './ScratchpadRecordsContainer';
import ScratchpadSidebar from './ScratchpadSidebar';
function buildNestedPane([a, ...panes]) { function buildNestedPane([a, ...panes], mode = 'horizontal') {
const elements = [ const elements = [
a, a,
...panes.filter((p) => p.props.visible), ...panes.filter((p) => p.props.visible),
@@ -18,7 +19,7 @@ function buildNestedPane([a, ...panes]) {
return elements return elements
.reduce((prev, curr) => ( .reduce((prev, curr) => (
<SplitPane <SplitPane
split="horizontal" split={mode}
primary="second" primary="second"
defaultSize={curr.props.size} defaultSize={curr.props.size}
key={curr.element.key} key={curr.element.key}
@@ -63,7 +64,15 @@ export default connect(mapStateToProps, mapDispatchToProps)(class ScratchpadCont
primary="second" primary="second"
onChange={(size) => this.handleChangeSize('main', size)} onChange={(size) => this.handleChangeSize('main', size)}
> >
<Dom className="scratchpad__problem" childDom={$('.problem-content').get(0)} /> <SplitPane
defaultSize={this.props.ui.sidebar.visible ? this.props.ui.sidebar.size : 0}
split="vertical"
primary="second"
onChange={(size) => this.handleChangeSize('sidebar', size)}
>
<Dom className="scratchpad__problem" childDom={$('.problem-content').get(0)} />
<ScratchpadSidebar name="debug" />
</SplitPane>
{buildNestedPane([ {buildNestedPane([
<SplitPaneFillOverlay key="editor" className="flex-col"> <SplitPaneFillOverlay key="editor" className="flex-col">
<ScratchpadToolbar /> <ScratchpadToolbar />
@@ -11,6 +11,10 @@ export default function reducer(state = {
: false, : false,
size: 200, size: 200,
}, },
sidebar: {
visible: false,
size: 100,
},
records: { records: {
visible: UiContext.canViewRecord && localStorage.getItem('scratchpad/records') === 'true', visible: UiContext.canViewRecord && localStorage.getItem('scratchpad/records') === 'true',
size: 100, size: 100,
+2 -1
View File
@@ -1,5 +1,6 @@
import $ from 'jquery'; import $ from 'jquery';
import _ from 'lodash'; import _ from 'lodash';
import React from 'react';
import './utils/delay'; import './utils/delay';
import './utils/emulateAnchorClick'; import './utils/emulateAnchorClick';
@@ -23,6 +24,6 @@ import './components/notification';
import './components/nprogress'; import './components/nprogress';
import './components/monaco/loader'; import './components/monaco/loader';
window.node_modules = { _, $ }; window.node_modules = { _, $, React };
window.$ = $; window.$ = $;
window.jQuery = $; window.jQuery = $;