import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import * as actions from 'src/js/actions/index.js'; import App from '@doodle3d/doodle3d-core/lib/components/App'; import injectSheet from 'react-jss'; import Popover from 'material-ui/Popover/Popover'; import Badge from 'material-ui/Badge'; import btnPrintWiFiImageURL from 'img/export/btnPrintWiFi.png'; import btnSaveSTLImageURL from 'img/export/btnSaveSTL.png'; import btn3DHubsImageURL from 'img/export/btn3DHubs.png'; import btnShapewaysImageURL from 'img/export/btnShapeways.png'; import btnThingiverseImageURL from 'img/export/btnThingiverse.png'; import btnSketchFabImageURL from 'img/export/btnSketchFab.png'; import btnMyMiniFactoryImageURL from 'img/export/btnMyMiniFactory.png'; import btnPolar3DImageURL from 'img/export/btnPolar3D.png'; import btnNewUrl from 'img/menu/btnNew.png'; import btnOpenUrl from 'img/menu/btnOpen.png'; import btnSaveUrl from 'img/menu/btnSave.png'; import btnSettingsUrl from 'img/menu/btnMenu.png'; import btnNewSmallUrl from 'img/menu/btnNewSmall.png'; import btnOpenSmallUrl from 'img/menu/btnOpenSmall.png'; import btnSaveSmallUrl from 'img/menu/btnSaveSmall.png'; import btnSettingsSmallUrl from 'img/menu/btnMenuSmall.png'; import btnExportUrl from 'img/menu/btnExport.png'; import btnExportSmallUrl from 'img/menu/btnExportSmall.png'; import btnLoveUrl from 'img/menu/btnLove.png'; import btnLoveSmallUrl from 'img/menu/btnLoveSmall.png'; import btnHelpUrl from 'img/menu/btnHelp.png'; import btnHelpSmallUrl from 'img/menu/btnHelpSmall.png'; import Menu from 'material-ui/Menu'; import MenuItem from 'material-ui/MenuItem'; import ArrowDropLeft from 'material-ui/svg-icons/navigation/chevron-left'; const button = { cursor: 'pointer', margin: '0 2px' }; const styles = { badge: { right: '-44px', content: { backgroundColor: 'red' } }, buttonLeft: { '@media (max-width: 900px)': { backgroundColor: 'white' }, userSelect: 'none', position: 'absolute', top: '0', left: '0', display: 'flex' }, new: { '@media (max-width: 900px)': { backgroundImage: `url(${btnNewSmallUrl})`, backgroundSize: '40px auto', width: '40px', height: '40px' }, backgroundImage: `url(${btnNewUrl})`, backgroundSize: '72px auto', width: '72px', height: '51px', ...button }, open: { '@media (max-width: 900px)': { backgroundImage: `url(${btnOpenSmallUrl})`, backgroundSize: '40px auto', width: '40px', height: '40px' }, backgroundImage: `url(${btnOpenUrl})`, backgroundSize: '80px auto', width: '80px', height: '55px', ...button }, save: { '@media (max-width: 900px)': { backgroundImage: `url(${btnSaveSmallUrl})`, backgroundSize: '40px auto', width: '40px', height: '40px' }, backgroundImage: `url(${btnSaveUrl})`, backgroundSize: '80px auto', width: '80px', height: '56px', ...button }, settings: { '@media (max-width: 900px)': { backgroundImage: `url(${btnSettingsSmallUrl})`, backgroundSize: '40px auto', width: '40px', height: '40px' }, backgroundImage: `url(${btnSettingsUrl})`, backgroundSize: '77px auto', width: '77px', height: '57px', ...button }, love: { '@media (max-width: 900px)': { backgroundImage: `url(${btnLoveSmallUrl})`, backgroundSize: '40px auto', width: '40px', height: '40px' }, backgroundImage: `url(${btnLoveUrl})`, backgroundSize: '77px auto', width: '77px', height: '57px', ...button }, help: { '@media (max-width: 900px)': { backgroundImage: `url(${btnHelpSmallUrl})`, backgroundSize: '40px auto', width: '40px', height: '40px' }, backgroundImage: `url(${btnHelpUrl})`, backgroundSize: '77px auto', width: '77px', height: '57px', ...button }, export: { '@media (max-width: 900px)': { backgroundImage: `url(${btnExportSmallUrl})`, backgroundSize: '40px auto', width: '40px', height: '40px' }, backgroundImage: `url(${btnExportUrl})`, backgroundSize: '60px auto', position: 'absolute', top: '0', right: '0', width: '60px', height: '71px', cursor: 'pointer' }, }; class AppContainer extends React.Component { static propTypes = { children: PropTypes.node, classes: PropTypes.objectOf(PropTypes.string), downloadAllSketches: PropTypes.func.isRequired, downloadStl: PropTypes.func.isRequired, downloadObj: PropTypes.func.isRequired, clear: PropTypes.func.isRequired, toMyDoodles: PropTypes.func.isRequired, toSave: PropTypes.func.isRequired, toSettings: PropTypes.func.isRequired, toDonate: PropTypes.func.isRequired, toSlicer: PropTypes.func.isRequired, toHelp: PropTypes.func.isRequired, }; state = { popover: { open: false, element: null }, popoverAbout: { open: false, element: null }, } openPopover = (event) => { this.setState({ popover: { element: event.currentTarget, open: true } }); }; closePopover = () => { this.setState({ popover: { element: null, open: false }, }); }; openPopoverAbout = (event) => { this.setState({ popoverAbout: { element: event.currentTarget, open: true } }); }; closePopoverAbout = () => { this.setState({ popoverAbout: { element: null, open: false }, }); }; wrapFunction = (callback) => { return async () => { callback(); this.closePopover(); this.closePopoverAbout(); }; }; render() { const { downloadStl, downloadObj, downloadAllSketches, clear, toMyDoodles, toSettings, toSave, children, classes, toDonate, toHelp, toSlicer } = this.props; const _downloadStl = this.wrapFunction(downloadStl); const _downloadObj = this.wrapFunction(downloadObj); const _downloadAllSketches = this.wrapFunction(downloadAllSketches); const _toSettings = this.wrapFunction(toSettings); const _toHelp = this.wrapFunction(toHelp); const _toDonate = this.wrapFunction(toDonate); const _toSlicer = this.wrapFunction(toSlicer); return (
{children} ); } } export default connect(state => ({ }), { toMyDoodles: () => actions.router.push('/my-doodles'), toSave: () => actions.router.push('/save'), toDonate: () => actions.router.push('/donate'), toHelp: () => actions.router.push('/help'), toSettings: () => actions.router.push('/settings'), toSlicer: () => actions.router.push('/slicer'), clear: actions.sketcher.clear, downloadStl: actions.downloadStl, downloadObj: actions.downloadObj, downloadAllSketches: actions.files.downloadAllSketches })(injectSheet(styles)(AppContainer));