Skip to content

Commit 8b9dd90

Browse files
committed
🚧 make <Sidebar /> component
1 parent 2ed4664 commit 8b9dd90

File tree

4 files changed

+68
-8
lines changed

4 files changed

+68
-8
lines changed

client/components/Dropdown.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ const DropdownWrapper = styled.ul`
2525
display: flex;
2626
flex-direction: column;
2727
height: auto;
28-
z-index: 9999;
28+
z-index: 2;
2929
border-radius: ${remSize(6)};
3030
3131
& li:first-child { border-radius: ${remSize(5)} ${remSize(5)} 0 0; }

client/components/Sidebar.jsx

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import React from 'react';
2+
import PropTypes from 'prop-types';
3+
import { Link } from 'react-router';
4+
import styled from 'styled-components';
5+
import { remSize, prop, common } from '../theme';
6+
import Header from './mobile/Header';
7+
import IconButton from './mobile/IconButton';
8+
import { ExitIcon } from '../common/icons';
9+
10+
11+
const SidebarWrapper = styled.div`
12+
height: 100%;
13+
width: ${remSize(180)};
14+
15+
position: absolute;
16+
z-index: 2;
17+
left: 0;
18+
19+
background: white;
20+
box-shadow: 0 6px 6px 0 rgba(0,0,0,0.10);
21+
`;
22+
23+
const Sidebar = ({ title, onPressClose }) => (
24+
<SidebarWrapper>
25+
{title &&
26+
<Header slim title={title}>
27+
<IconButton onPress={onPressClose} icon={ExitIcon} aria-label="Return to ide view" />
28+
</Header>}
29+
</SidebarWrapper>
30+
);
31+
32+
Sidebar.propTypes = {
33+
title: PropTypes.string,
34+
onPressClose: PropTypes.func.isRequired,
35+
};
36+
37+
Sidebar.defaultProps = {
38+
title: null,
39+
// onPressClose: PropTypes.func.isRequired,
40+
};
41+
42+
43+
export default Sidebar;

client/components/useAsModal.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import React from 'react';
22
import { useModalBehavior } from '../utils/custom-hooks';
33

4+
45
export default (component) => {
56
const [visible, trigger, setRef] = useModalBehavior();
67

client/modules/IDE/pages/MobileIDEView.jsx

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import ActionStrip from '../../../components/mobile/ActionStrip';
3434
import useAsModal from '../../../components/useAsModal';
3535
import { PreferencesIcon } from '../../../common/icons';
3636
import Dropdown from '../../../components/Dropdown';
37+
import Sidebar from '../../../components/Sidebar';
3738

3839
const isUserOwner = ({ project, user }) =>
3940
project.owner && project.owner.id === user.id;
@@ -67,18 +68,13 @@ const MobileIDEView = (props) => {
6768
selectedFile, updateFileContent, files, user, params,
6869
closeEditorOptions, showEditorOptions,
6970
startRefreshSketch, stopSketch, expandSidebar, collapseSidebar, clearConsole, console,
70-
showRuntimeErrorWarning, hideRuntimeErrorWarning, startSketch, getProject, clearPersistedState
71+
showRuntimeErrorWarning, hideRuntimeErrorWarning, startSketch, getProject, clearPersistedState, setUnsavedChanges
7172
} = props;
7273

7374
const [tmController, setTmController] = useState(null); // eslint-disable-line
7475

7576
const { username } = user;
7677

77-
const [triggerNavDropdown, NavDropDown] = useAsModal(<Dropdown
78-
items={getNatOptions(username)}
79-
align="right"
80-
/>);
81-
8278
// Force state reset
8379
useEffect(clearPersistedState, []);
8480
useEffect(stopSketch, []);
@@ -95,16 +91,34 @@ const MobileIDEView = (props) => {
9591
setCurrentProjectID(params.project_id);
9692
}, [params, project, username]);
9793

94+
const [toggleNavDropdown, NavDropDown] = useAsModal(<Dropdown
95+
items={getNatOptions(username)}
96+
align="right"
97+
/>);
98+
99+
const [toggleExplorer, Explorer] = useAsModal(<Sidebar
100+
title="hahaha"
101+
onPressClose={() => {}}
102+
/>);
103+
104+
// toggle sidebar starting opened
105+
useEffect(toggleExplorer, []);
98106

99107
return (
100108
<Screen fullscreen>
109+
<Explorer />
101110
<Header
102111
title={project.name}
103112
subtitle={selectedFile.name}
104113
>
105114
<NavItem>
106115
<IconButton
107-
onClick={triggerNavDropdown}
116+
onClick={toggleExplorer}
117+
icon={MoreIcon}
118+
aria-label="Options"
119+
/>
120+
<IconButton
121+
onClick={toggleNavDropdown}
108122
icon={MoreIcon}
109123
aria-label="Options"
110124
/>
@@ -147,6 +161,7 @@ const MobileIDEView = (props) => {
147161
hideRuntimeErrorWarning={hideRuntimeErrorWarning}
148162
runtimeErrorWarningVisible={ide.runtimeErrorWarningVisible}
149163
provideController={setTmController}
164+
setUnsavedChanges={setUnsavedChanges}
150165
/>
151166
</IDEWrapper>
152167

@@ -267,6 +282,7 @@ MobileIDEView.propTypes = {
267282
username: PropTypes.string,
268283
}).isRequired,
269284

285+
setUnsavedChanges: PropTypes.func.isRequired,
270286
getProject: PropTypes.func.isRequired,
271287
clearPersistedState: PropTypes.func.isRequired,
272288
params: PropTypes.shape({

0 commit comments

Comments
 (0)