Skip to content

Commit 2af86cd

Browse files
authored
fix(workbench): cache the workbench SplitPane position (#76)
fix #60
1 parent 56e31e9 commit 2af86cd

File tree

3 files changed

+41
-4
lines changed

3 files changed

+41
-4
lines changed

src/controller/index.ts

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { PanelController } from './panel';
88
import { SettingsController } from './settings';
99
import { SidebarController } from './sidebar';
1010
import { StatusBarController } from './statusBar';
11+
import { WorkbenchController } from './workbench';
1112

1213
export const activityBarController = container.resolve(ActivityBarController);
1314
export const editorController = container.resolve(EditorController);
@@ -18,3 +19,4 @@ export const explorerController = container.resolve(ExplorerController);
1819
export const statusBarController = container.resolve(StatusBarController);
1920
export const settingsController = container.resolve(SettingsController);
2021
export const folderTreeController = container.resolve(FolderTreeController);
22+
export const workbenchController = container.resolve(WorkbenchController);

src/controller/workbench.ts

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { Controller } from 'mo/react/controller';
2+
import { singleton } from 'tsyringe';
3+
4+
export interface IWorkbenchController {
5+
readonly splitPanePos: string[];
6+
onPaneSizeChange?: (newSize: number) => void;
7+
}
8+
9+
@singleton()
10+
export class WorkbenchController
11+
extends Controller
12+
implements IWorkbenchController {
13+
// Group Pos locate here temporary, we can move it to state or localStorage in future.
14+
public splitPanePos: string[] = ['300px', 'auto'];
15+
16+
constructor() {
17+
super();
18+
}
19+
20+
public onPaneSizeChange = (newSize) => {
21+
this.splitPanePos = newSize;
22+
};
23+
}

src/workbench/workbench.tsx

+16-4
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ import { APP_PREFIX } from 'mo/common/const';
1616
import { panelService } from 'mo/services';
1717
import { connect } from 'mo/react';
1818
import { IPanel } from 'mo/model/workbench/panel';
19+
import { workbenchController } from 'mo/controller';
20+
import { IWorkbenchController } from 'mo/controller/workbench';
1921

2022
export interface IWorkbench {
2123
panel: IPanel;
@@ -25,8 +27,9 @@ const mainBenchClassName = prefixClaName('mainBench');
2527
const workbenchClassName = prefixClaName('workbench');
2628
const appClassName = classNames(APP_PREFIX, Utils.isMacOs() ? 'mac' : '');
2729

28-
export function WorkbenchView(props: IWorkbench) {
29-
const { panel } = props;
30+
export function WorkbenchView(props: IWorkbench & IWorkbenchController) {
31+
const { panel, onPaneSizeChange, splitPanePos } = props;
32+
3033
return (
3134
<div id={ID_APP} className={appClassName}>
3235
<div className={workbenchClassName}>
@@ -37,8 +40,13 @@ export function WorkbenchView(props: IWorkbench) {
3740
split="vertical"
3841
primary="first"
3942
allowResize={true}
43+
onChange={onPaneSizeChange}
4044
>
41-
<Pane minSize="170px" initialSize="300px" maxSize="80%">
45+
<Pane
46+
minSize="170px"
47+
initialSize={splitPanePos[0]}
48+
maxSize="80%"
49+
>
4250
<SidebarView />
4351
</Pane>
4452
<SplitPane
@@ -69,6 +77,10 @@ export function WorkbenchView(props: IWorkbench) {
6977
);
7078
}
7179

72-
export const Workbench = connect({ panel: panelService }, WorkbenchView);
80+
export const Workbench = connect(
81+
{ panel: panelService },
82+
WorkbenchView,
83+
workbenchController
84+
);
7385

7486
export default Workbench;

0 commit comments

Comments
 (0)