Skip to content

Commit 4e57e9f

Browse files
committed
layout manipulation
1 parent c833c6a commit 4e57e9f

File tree

6 files changed

+75
-32
lines changed

6 files changed

+75
-32
lines changed

app/components/file/index.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,20 @@ import React from 'react';
22
import { observer } from 'mobx-react';
33
import { FileObject } from './file-object';
44
import { workspace } from '#store/workspace';
5+
import { Button } from '#ui';
6+
import { selectTab } from '#components/layout/model';
57

8+
// set focused tab
9+
// selt focused obejct
610
export const File = observer(() => {
711
return (
8-
<FileObject obj={workspace.file} />
12+
<>
13+
<FileObject obj={workspace.file} />
14+
{workspace.project && (
15+
<div className="project-copy">
16+
<Button color="blue" large onClick={() => {selectTab('Project')}}>copy to project</Button>
17+
</div>
18+
)}
19+
</>
920
);
1021
});

app/components/layout/index.js

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -12,39 +12,41 @@ import { Sprites } from '#components/sprites';
1212
import { Mappings } from '#components/mappings';
1313
import { Documentation } from '#components/documentation';
1414

15-
const getPanel = (node) => {
16-
const component = node.getComponent();
17-
if (!node._visible) return false;
18-
if (component === 'file') {
19-
return <File node={node}/>;
20-
} else if (component === 'project') {
21-
return <Project node={node}/>;
22-
} else if (component === 'palettes') {
23-
return <Palettes node={node}/>;
24-
} else if (component === 'art') {
25-
return <Art node={node}/>;
26-
} else if (component === 'sprites') {
27-
return <Sprites node={node}/>;
28-
} else if (component === 'mappings') {
29-
return <Mappings node={node}/>;
30-
} else if (component === 'documentation') {
31-
return <Documentation node={node}/>;
32-
}
33-
};
3415

3516
export class Layout extends Component {
36-
3717
factory = (node) => {
38-
const maximized = !!node.getModel().getMaximizedTabset();
18+
const model = node.getModel();
19+
const maximized = !!model.getMaximizedTabset();
3920
return (
40-
<div className={classNames([
41-
'flexlayout__panel',
42-
maximized && 'flexlayout__panel_maximized',
43-
])}>
44-
{getPanel(node)}
21+
<div
22+
className={classNames([
23+
'flexlayout__panel',
24+
maximized && 'flexlayout__panel_maximized',
25+
])}
26+
>
27+
{(() => {
28+
const component = node.getComponent();
29+
if (!node._visible) return false;
30+
if (component === 'file') {
31+
return <File node={node} />;
32+
} else if (component === 'project') {
33+
return <Project node={node} />;
34+
} else if (component === 'palettes') {
35+
return <Palettes node={node} />;
36+
} else if (component === 'art') {
37+
return <Art node={node} />;
38+
} else if (component === 'sprites') {
39+
return <Sprites node={node} />;
40+
} else if (component === 'mappings') {
41+
return <Mappings node={node} />;
42+
} else if (component === 'documentation') {
43+
return <Documentation node={node} />;
44+
}
45+
return 'No such tab';
46+
})()}
4547
</div>
4648
);
47-
}
49+
};
4850

4951
render() {
5052
return (
@@ -55,5 +57,4 @@ export class Layout extends Component {
5557
/>
5658
);
5759
}
58-
5960
}

app/components/layout/model.js

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import FlexLayout from 'flexlayout-react';
1+
import FlexLayout, { Actions } from 'flexlayout-react';
22

33
window.resetLayout = () => {
44
localStorage.removeItem('layout');
@@ -81,6 +81,18 @@ if (!version) {
8181
localStorage.setItem('layout-version', 1);
8282
}
8383

84+
function findNode(name, children) {
85+
if (!name) return;
86+
for (let i = 0; i < children.length; i++) {
87+
const child = children[i];
88+
if (child.name === name) return child;
89+
if (child.children) {
90+
const result = findNode(name, child.children);
91+
if (result) return result;
92+
}
93+
}
94+
}
95+
8496
export const model = version && savedLayout
8597
? FlexLayout.Model.fromJson(JSON.parse(savedLayout))
8698
: FlexLayout.Model.fromJson(DEFAULT_LAYOUT);
@@ -89,3 +101,11 @@ export const model = version && savedLayout
89101
export function saveModel(model) {
90102
localStorage.setItem('layout', JSON.stringify(model.toJson()));
91103
}
104+
105+
export function selectTab(name) {
106+
model.doAction(
107+
Actions.selectTab(
108+
findNode(name, model.toJson().layout.children).id,
109+
),
110+
);
111+
}

app/components/ui/button/index.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import React from 'react';
22
import SVARS from '!!sass-variables-loader!#styles/variables.scss';
33
import { observer } from 'mobx-react';
4+
import classNames from 'classnames';
45

56
export const Button = observer((props) => {
6-
const { color, ...otherProps } = props;
7+
const { color, large, ...otherProps } = props;
78
return <button
8-
className='button'
9+
className={classNames('button', large && 'large')}
910
style={
1011
{
1112
backgroundColor: SVARS[color || 'white2'],

styles/components/project.scss

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@
99
}
1010
}
1111

12+
.project-copy {
13+
padding: 0 10px;
14+
display: flex;
15+
margin-top: -10px;
16+
justify-content: flex-end;
17+
}
18+
1219
.project {
1320
height: 100%;
1421
display: flex;

styles/components/ui.scss

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ input {
6969
}
7070

7171
.button {
72+
&.large {
73+
width: 159px;
74+
}
7275
font-family: Hack Bold;
7376
padding: 2px 5px;
7477
margin: 2px 0;

0 commit comments

Comments
 (0)