p5.js-web-editor/client/modules/Mobile/MobileSketchView.jsx

140 lines
3.9 KiB
React
Raw Normal View History

import React, { useState, useEffect } from 'react';
import PropTypes from 'prop-types';
2020-06-18 20:49:31 +02:00
import { Link } from 'react-router';
import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
2020-06-18 20:49:31 +02:00
import styled from 'styled-components';
import Header from '../../components/mobile/Header';
import PreviewFrame from '../IDE/components/PreviewFrame';
import Screen from '../../components/mobile/MobileScreen';
import * as ProjectActions from '../IDE/actions/project';
import * as IDEActions from '../IDE/actions/ide';
import { getHTMLFile, getJSFiles, getCSSFiles } from '../IDE/reducers/files';
2020-06-18 20:49:31 +02:00
import { ExitIcon } from '../../common/Icons';
import { remSize } from '../../theme';
const Content = styled.div`
z-index: 0;
margin-top: ${remSize(48)};
`;
2020-06-18 20:49:31 +02:00
const IconLinkWrapper = styled(Link)`
width: 2rem;
margin-right: 1.25rem;
margin-left: none;
`;
const noop = () => {};
const MobileSketchView = (props) => {
const [overlay, setOverlay] = useState(null);
// TODO: useSelector requires react-redux ^7.1.0
// const htmlFile = useSelector(state => getHTMLFile(state.files));
// const jsFiles = useSelector(state => getJSFiles(state.files));
// const cssFiles = useSelector(state => getCSSFiles(state.files));
// const files = useSelector(state => state.files);
const {
htmlFile, jsFiles, cssFiles, files, params
} = props;
// Actions
const { getProject, startSketch } = props;
// useEffect(() => {
// console.log(params);
// getProject(params.project_id, params.username);
// }, []);
return (
<Screen>
<Header>
2020-06-18 20:49:31 +02:00
<IconLinkWrapper to="/mobile" aria-label="Return to original editor">
<ExitIcon viewBox="0 0 16 16" />
</IconLinkWrapper>
<div>
<h2>Hello</h2>
<h3><br /></h3>
</div>
</Header>
<Content>
<h1>Hello</h1>
<main className="preview-frame-holder">
<PreviewFrame
fullView
isPlaying
htmlFile={htmlFile}
jsFiles={jsFiles}
cssFiles={cssFiles}
files={files}
head={<link type="text/css" rel="stylesheet" href="/preview-styles.css" />}
isAccessibleOutputPlaying={false}
textOutput={false}
gridOutput={false}
soundOutput={false}
previewIsRefreshing={false}
dispatchConsoleEvent={noop}
endSketchRefresh={noop}
setBlobUrl={noop}
stopSketch={noop}
expandConsole={noop}
clearConsole={noop}
/>
</main>
</Content>
</Screen>);
};
MobileSketchView.propTypes = {
params: PropTypes.shape({
project_id: PropTypes.string,
username: PropTypes.string
}).isRequired,
htmlFile: PropTypes.shape({
id: PropTypes.string.isRequired,
content: PropTypes.string.isRequired,
name: PropTypes.string.isRequired
}).isRequired,
jsFiles: PropTypes.arrayOf(PropTypes.shape({
id: PropTypes.string.isRequired,
content: PropTypes.string.isRequired,
name: PropTypes.string.isRequired
})).isRequired,
cssFiles: PropTypes.arrayOf(PropTypes.shape({
id: PropTypes.string.isRequired,
content: PropTypes.string.isRequired,
name: PropTypes.string.isRequired
})).isRequired,
files: PropTypes.arrayOf(PropTypes.shape({
id: PropTypes.string.isRequired,
content: PropTypes.string.isRequired,
name: PropTypes.string.isRequired
})).isRequired,
getProject: PropTypes.func.isRequired,
startSketch: PropTypes.func.isRequired,
};
function mapStateToProps(state) {
return {
htmlFile: getHTMLFile(state.files),
jsFiles: getJSFiles(state.files),
cssFiles: getCSSFiles(state.files),
project: state.project,
files: state.files
};
}
function mapDispatchToProps(dispatch) {
return bindActionCreators({ ...ProjectActions, ...IDEActions }, dispatch);
}
export default connect(mapStateToProps, mapDispatchToProps)(MobileSketchView);