Skip to content

Commit 5c99e76

Browse files
committed
save layout
1 parent 66aaca9 commit 5c99e76

9 files changed

+348
-6
lines changed

.vscode/settings.json

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"files.exclude": {
3+
"**/.git": true,
4+
"**/*.js.map": true,
5+
"**/*.js": {
6+
"when": "$(basename).ts"
7+
},
8+
"**/*?.js": {
9+
"when": "$(basename).tsx"
10+
}
11+
},
12+
"files.eol": "\n",
13+
"editor.tabSize": 2,
14+
"typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": false
15+
}

lib/DockAlgorithm.js

+3-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/DockData.d.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export interface BoxData extends DockDataBase {
1212
children: (BoxData | PanelData)[];
1313
}
1414
export interface TabGroup {
15+
name?: string;
1516
floatable?: boolean;
1617
multiTabs?: boolean;
1718
tabLocked?: boolean;
@@ -21,7 +22,7 @@ export interface TabGroup {
2122
export interface TabData extends DockDataBase {
2223
id?: string;
2324
parent?: PanelData;
24-
title: string;
25+
title: React.ReactChild;
2526
content: React.ReactElement | (() => React.ReactElement);
2627
closable?: boolean;
2728
group: TabGroup;

lib/Serializer.d.ts

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import { DockMode, LayoutData, PanelData, TabData } from "./DockData";
2+
interface DefaultLayoutCache {
3+
panels: Map<string | number, PanelData>;
4+
tabs: Map<string, TabData>;
5+
}
6+
interface SavedTab {
7+
id: string;
8+
groupName: string;
9+
}
10+
interface SavedPanel {
11+
id: string | number;
12+
groupName: string;
13+
size: number;
14+
tabs: SavedTab[];
15+
activeId: string;
16+
x?: number;
17+
y?: number;
18+
z?: number;
19+
w?: number;
20+
h?: number;
21+
}
22+
interface SavedBox {
23+
id: string | number;
24+
mode: DockMode;
25+
size: number;
26+
children: (SavedBox | SavedPanel)[];
27+
}
28+
interface SavedLayout {
29+
dockbox: SavedBox;
30+
floatbox: SavedBox;
31+
}
32+
export declare function createLayoutCache(defaultLayout: LayoutData): DefaultLayoutCache;
33+
export interface SaveModifier {
34+
modifySavedPanel?(savedPanel: SavedPanel, panelData: PanelData): void;
35+
modifySavedTab?(savedTab: SavedTab, tabData: TabData): void;
36+
}
37+
export interface LoadModifier {
38+
loadPanel?(savedPanel: SavedPanel): PanelData;
39+
loadTab?(savedTab: SavedTab): TabData;
40+
}
41+
export declare function saveLayout(layout: LayoutData, modifier?: SaveModifier): SavedLayout;
42+
export declare function loadLayout(savedLayout: SavedLayout, defaultLayout: LayoutData, modifier?: LoadModifier): LayoutData;
43+
export {};

lib/Serializer.js

+110
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/DockAlgorithm.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import {BoxData, DockMode, DropDirection, LayoutData, nextId, PanelData, TabData
22

33

44
export const placeHolderGroup: TabGroup = {
5+
/** used by serialization */
6+
name: '-place-holder-',
57
panelClass: 'dock-placeholder-panel',
68
floatable: false,
79
};
@@ -247,7 +249,7 @@ export function fixLayoutData(layout: LayoutData): LayoutData {
247249
fixBoxData(layout.dockbox);
248250
fixBoxData(layout.floatbox);
249251
if (layout.dockbox.children.length === 0) {
250-
let newPanel: PanelData = {id: '+0', group: placeHolderGroup, panelLock: true, size: 200, tabs: []};
252+
let newPanel: PanelData = {id: '+0', group: placeHolderGroup, panelLock: {}, size: 200, tabs: []};
251253
newPanel.parent = layout.dockbox;
252254
layout.dockbox.children.push(newPanel);
253255
} else {
@@ -261,7 +263,6 @@ export function fixLayoutData(layout: LayoutData): LayoutData {
261263
}
262264
layout.dockbox.parent = null;
263265
layout.floatbox.parent = null;
264-
console.log(layout)
265266
return layout;
266267
}
267268

src/DockData.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export interface BoxData extends DockDataBase {
1717

1818

1919
export interface TabGroup {
20+
name?: string;
2021
floatable?: boolean;
2122
multiTabs?: boolean;
2223
// when tabs are locked, you can only drag the whole panel
@@ -28,7 +29,7 @@ export interface TabGroup {
2829
export interface TabData extends DockDataBase {
2930
id?: string;
3031
parent?: PanelData;
31-
title: string;
32+
title: React.ReactChild;
3233
content: React.ReactElement | (() => React.ReactElement);
3334
closable?: boolean;
3435
group: TabGroup;

0 commit comments

Comments
 (0)