Skip to content

Commit d00506a

Browse files
committed
🚧 mound the <PreviewFrame /> properly on Mobile Preview screen
1 parent 123c2b0 commit d00506a

File tree

5 files changed

+109
-114
lines changed

5 files changed

+109
-114
lines changed

client/common/Icons.jsx

Lines changed: 0 additions & 58 deletions
This file was deleted.

client/common/icons.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React from 'react';
22
import PropTypes from 'prop-types';
33
import styled from 'styled-components';
4-
import { remSize, prop } from '../theme';
4+
import { prop } from '../theme';
55
import SortArrowUp from '../images/sort-arrow-up.svg';
66
import SortArrowDown from '../images/sort-arrow-down.svg';
77
import Github from '../images/github.svg';

client/modules/IDE/pages/IDEViewMobile.jsx

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import { getHTMLFile } from '../reducers/files';
2020

2121
// Local Imports
2222
import Editor from '../components/Editor';
23-
import { prop, remSize } from '../../../theme';
2423
import { ExitIcon } from '../../../common/icons';
2524

2625
import PreferencesIcon from '../../../images/preferences.svg';
@@ -32,16 +31,6 @@ import Screen from '../../../components/mobile/MobileScreen';
3231
import Footer from '../../../components/mobile/Footer';
3332
import IDEWrapper from '../../../components/mobile/IDEWrapper';
3433

35-
const textColor = prop('primaryTextColor');
36-
37-
const Icon = styled.a`
38-
> svg {
39-
fill: ${textColor};
40-
color: ${textColor};
41-
margin-left: ${remSize(16)};
42-
}
43-
`;
44-
4534
const IconLinkWrapper = styled(Link)`
4635
width: 3rem;
4736
margin-right: 1.25rem;
Lines changed: 104 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useState, useEffect } from 'react';
1+
import React from 'react';
22
import PropTypes from 'prop-types';
33
import { Link } from 'react-router';
44
import { bindActionCreators } from 'redux';
@@ -9,11 +9,14 @@ import PreviewFrame from '../IDE/components/PreviewFrame';
99
import Screen from '../../components/mobile/MobileScreen';
1010
import * as ProjectActions from '../IDE/actions/project';
1111
import * as IDEActions from '../IDE/actions/ide';
12+
import * as PreferencesActions from '../IDE/actions/preferences';
13+
import * as ConsoleActions from '../IDE/actions/console';
14+
import * as FilesActions from '../IDE/actions/files';
1215

13-
import { getHTMLFile, getJSFiles, getCSSFiles } from '../IDE/reducers/files';
16+
import { getHTMLFile } from '../IDE/reducers/files';
1417

1518

16-
import { ExitIcon } from '../../common/Icons';
19+
import { ExitIcon } from '../../common/icons';
1720
import { remSize } from '../../theme';
1821

1922

@@ -28,24 +31,26 @@ const IconLinkWrapper = styled(Link)`
2831
margin-left: none;
2932
`;
3033

31-
const noop = () => {};
32-
3334
const MobileSketchView = (props) => {
34-
const [overlay, setOverlay] = useState(null);
35-
36-
3735
// TODO: useSelector requires react-redux ^7.1.0
3836
// const htmlFile = useSelector(state => getHTMLFile(state.files));
3937
// const jsFiles = useSelector(state => getJSFiles(state.files));
4038
// const cssFiles = useSelector(state => getCSSFiles(state.files));
4139
// const files = useSelector(state => state.files);
4240

4341
const {
44-
htmlFile, jsFiles, cssFiles, files, params
42+
htmlFile, files, selectedFile
4543
} = props;
4644

4745
// Actions
48-
const { getProject, startSketch } = props;
46+
const {
47+
setTextOutput, setGridOutput, setSoundOutput,
48+
endSketchRefresh, stopSketch,
49+
dispatchConsoleEvent, expandConsole, clearConsole,
50+
setBlobUrl,
51+
} = props;
52+
53+
const { preferences, ide } = props;
4954

5055
// useEffect(() => {
5156
// console.log(params);
@@ -65,30 +70,35 @@ const MobileSketchView = (props) => {
6570
</Header>
6671
<Content>
6772
<h1>Hello</h1>
68-
<main className="preview-frame-holder">
73+
<section className="preview-frame-holder">
6974

7075
<PreviewFrame
71-
fullView
72-
isPlaying
7376
htmlFile={htmlFile}
74-
jsFiles={jsFiles}
75-
cssFiles={cssFiles}
7677
files={files}
77-
head={<link type="text/css" rel="stylesheet" href="/preview-styles.css" />}
78-
isAccessibleOutputPlaying={false}
79-
textOutput={false}
80-
gridOutput={false}
81-
soundOutput={false}
82-
previewIsRefreshing={false}
83-
84-
dispatchConsoleEvent={noop}
85-
endSketchRefresh={noop}
86-
setBlobUrl={noop}
87-
stopSketch={noop}
88-
expandConsole={noop}
89-
clearConsole={noop}
78+
fullView
79+
80+
content={selectedFile.content}
81+
82+
isPlaying={ide.isPlaying}
83+
isAccessibleOutputPlaying={ide.isAccessibleOutputPlaying}
84+
previewIsRefreshing={ide.previewIsRefreshing}
85+
86+
textOutput={preferences.textOutput}
87+
gridOutput={preferences.gridOutput}
88+
soundOutput={preferences.soundOutput}
89+
autorefresh={preferences.autorefresh}
90+
91+
setTextOutput={setTextOutput}
92+
setGridOutput={setGridOutput}
93+
setSoundOutput={setSoundOutput}
94+
dispatchConsoleEvent={dispatchConsoleEvent}
95+
endSketchRefresh={endSketchRefresh}
96+
stopSketch={stopSketch}
97+
setBlobUrl={setBlobUrl}
98+
expandConsole={expandConsole}
99+
clearConsole={clearConsole}
90100
/>
91-
</main>
101+
</section>
92102
</Content>
93103
</Screen>);
94104
};
@@ -98,42 +108,93 @@ MobileSketchView.propTypes = {
98108
project_id: PropTypes.string,
99109
username: PropTypes.string
100110
}).isRequired,
111+
101112
htmlFile: PropTypes.shape({
102113
id: PropTypes.string.isRequired,
103114
content: PropTypes.string.isRequired,
104115
name: PropTypes.string.isRequired
105116
}).isRequired,
106-
jsFiles: PropTypes.arrayOf(PropTypes.shape({
107-
id: PropTypes.string.isRequired,
108-
content: PropTypes.string.isRequired,
109-
name: PropTypes.string.isRequired
110-
})).isRequired,
111-
cssFiles: PropTypes.arrayOf(PropTypes.shape({
117+
files: PropTypes.arrayOf(PropTypes.shape({
112118
id: PropTypes.string.isRequired,
113119
content: PropTypes.string.isRequired,
114120
name: PropTypes.string.isRequired
115121
})).isRequired,
116-
files: PropTypes.arrayOf(PropTypes.shape({
122+
123+
selectedFile: PropTypes.shape({
117124
id: PropTypes.string.isRequired,
118125
content: PropTypes.string.isRequired,
119126
name: PropTypes.string.isRequired
120-
})).isRequired,
121-
getProject: PropTypes.func.isRequired,
122-
startSketch: PropTypes.func.isRequired,
127+
}).isRequired,
128+
129+
preferences: PropTypes.shape({
130+
fontSize: PropTypes.number.isRequired,
131+
autosave: PropTypes.bool.isRequired,
132+
linewrap: PropTypes.bool.isRequired,
133+
lineNumbers: PropTypes.bool.isRequired,
134+
lintWarning: PropTypes.bool.isRequired,
135+
textOutput: PropTypes.bool.isRequired,
136+
gridOutput: PropTypes.bool.isRequired,
137+
soundOutput: PropTypes.bool.isRequired,
138+
theme: PropTypes.string.isRequired,
139+
autorefresh: PropTypes.bool.isRequired
140+
}).isRequired,
141+
142+
ide: PropTypes.shape({
143+
isPlaying: PropTypes.bool.isRequired,
144+
isAccessibleOutputPlaying: PropTypes.bool.isRequired,
145+
consoleEvent: PropTypes.array,
146+
modalIsVisible: PropTypes.bool.isRequired,
147+
sidebarIsExpanded: PropTypes.bool.isRequired,
148+
consoleIsExpanded: PropTypes.bool.isRequired,
149+
preferencesIsVisible: PropTypes.bool.isRequired,
150+
projectOptionsVisible: PropTypes.bool.isRequired,
151+
newFolderModalVisible: PropTypes.bool.isRequired,
152+
shareModalVisible: PropTypes.bool.isRequired,
153+
shareModalProjectId: PropTypes.string.isRequired,
154+
shareModalProjectName: PropTypes.string.isRequired,
155+
shareModalProjectUsername: PropTypes.string.isRequired,
156+
editorOptionsVisible: PropTypes.bool.isRequired,
157+
keyboardShortcutVisible: PropTypes.bool.isRequired,
158+
unsavedChanges: PropTypes.bool.isRequired,
159+
infiniteLoop: PropTypes.bool.isRequired,
160+
previewIsRefreshing: PropTypes.bool.isRequired,
161+
infiniteLoopMessage: PropTypes.string.isRequired,
162+
projectSavedTime: PropTypes.string,
163+
previousPath: PropTypes.string.isRequired,
164+
justOpenedProject: PropTypes.bool.isRequired,
165+
errorType: PropTypes.string,
166+
runtimeErrorWarningVisible: PropTypes.bool.isRequired,
167+
uploadFileModalVisible: PropTypes.bool.isRequired
168+
}).isRequired,
169+
170+
setTextOutput: PropTypes.func.isRequired,
171+
setGridOutput: PropTypes.func.isRequired,
172+
setSoundOutput: PropTypes.func.isRequired,
173+
dispatchConsoleEvent: PropTypes.func.isRequired,
174+
endSketchRefresh: PropTypes.func.isRequired,
175+
stopSketch: PropTypes.func.isRequired,
176+
setBlobUrl: PropTypes.func.isRequired,
177+
expandConsole: PropTypes.func.isRequired,
178+
clearConsole: PropTypes.func.isRequired,
123179
};
124180

125181
function mapStateToProps(state) {
126182
return {
127183
htmlFile: getHTMLFile(state.files),
128-
jsFiles: getJSFiles(state.files),
129-
cssFiles: getCSSFiles(state.files),
130184
project: state.project,
131-
files: state.files
185+
files: state.files,
186+
ide: state.ide,
187+
preferences: state.preferences,
188+
selectedFile: state.files.find(file => file.isSelectedFile) ||
189+
state.files.find(file => file.name === 'sketch.js') ||
190+
state.files.find(file => file.name !== 'root'),
132191
};
133192
}
134193

135194
function mapDispatchToProps(dispatch) {
136-
return bindActionCreators({ ...ProjectActions, ...IDEActions }, dispatch);
195+
return bindActionCreators({
196+
...ProjectActions, ...IDEActions, ...PreferencesActions, ...ConsoleActions, ...FilesActions
197+
}, dispatch);
137198
}
138199

139200
export default connect(mapStateToProps, mapDispatchToProps)(MobileSketchView);

client/routes.jsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Route, IndexRoute, Router, Switch, useRouteMatch } from 'react-router';
1+
import { Route, IndexRoute } from 'react-router';
22
import React from 'react';
33
import App from './modules/App/App';
44
import IDEView from './modules/IDE/pages/IDEView';
@@ -23,6 +23,9 @@ const checkAuth = (store) => {
2323
};
2424

2525
const onRouteChange = (store) => {
26+
// FIXME: This seems unnecessary - using the mobile <Switch /> navigator should prevent this from being called
27+
const path = window.location.pathname;
28+
if (path.includes('/mobile')) return;
2629
store.dispatch(stopSketch());
2730
};
2831

0 commit comments

Comments
 (0)