From 49730f51ac27581384423f0d7884592af85c0bdd Mon Sep 17 00:00:00 2001 From: Delucse <46593742+Delucse@users.noreply.github.com> Date: Mon, 14 Dec 2020 19:26:07 +0100 Subject: [PATCH] public route --- src/actions/authActions.js | 9 ++++-- src/components/Blockly/BlocklyWindow.js | 20 +++++++----- src/components/Route/PublicRoute.js | 32 ++++++++++++++++++ src/components/Route/Routes.js | 43 ++++++++++++++++++------- src/components/Tutorial/Tutorial.js | 5 ++- src/components/Workspace/SaveProject.js | 6 ++-- 6 files changed, 89 insertions(+), 26 deletions(-) create mode 100644 src/components/Route/PublicRoute.js diff --git a/src/actions/authActions.js b/src/actions/authActions.js index 2da6b9e..ebd8151 100644 --- a/src/actions/authActions.js +++ b/src/actions/authActions.js @@ -16,11 +16,11 @@ export const loadUser = () => (dispatch) => { type: GET_STATUS, payload: res.data.user.status }); + dispatch(setLanguage(res.data.user.language)); dispatch({ type: USER_LOADED, payload: res.data.user }); - dispatch(setLanguage(res.data.user.language)); }, error: err => { if(err.response){ @@ -74,11 +74,11 @@ export const login = ({ email, password }) => (dispatch) => { type: LOGIN_SUCCESS, payload: res.data }); + dispatch(setLanguage(res.data.user.language)); dispatch({ type: GET_STATUS, payload: res.data.user.status }); - dispatch(setLanguage(res.data.user.language)); dispatch(returnSuccess(res.data.message, res.status, 'LOGIN_SUCCESS')); }) .catch(err => { @@ -172,10 +172,13 @@ export const logout = () => (dispatch) => { type: GET_STATUS, payload: status }); - var locale = 'de_DE'; + var locale = 'en_US'; if (window.localStorage.getItem('locale')) { locale = window.localStorage.getItem('locale'); } + else if (navigator.language === 'de-DE'){ + locale = 'de_DE'; + } dispatch(setLanguage(locale)); dispatch(returnSuccess(res.data.message, res.status, 'LOGOUT_SUCCESS')); clearTimeout(logoutTimerId); diff --git a/src/components/Blockly/BlocklyWindow.js b/src/components/Blockly/BlocklyWindow.js index aa9ce69..d77d620 100644 --- a/src/components/Blockly/BlocklyWindow.js +++ b/src/components/Blockly/BlocklyWindow.js @@ -2,15 +2,15 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { onChangeWorkspace, clearStats } from '../../actions/workspaceActions'; -import { De } from './msg/de'; -import { En } from './msg/en'; + import BlocklyComponent from './BlocklyComponent'; import BlocklySvg from './BlocklySvg'; + import * as Blockly from 'blockly/core'; import './blocks/index'; import './generator/index'; -import { initialXml } from './initialXml.js'; +import { initialXml } from './initialXml.js'; class BlocklyWindow extends Component { @@ -18,11 +18,6 @@ class BlocklyWindow extends Component { constructor(props) { super(props); this.simpleWorkspace = React.createRef(); - if (this.props.language === 'de_DE') { - Blockly.setLocale(De); - } else if (this.props.language === 'en_US') { - Blockly.setLocale(En); - } } componentDidMount() { @@ -50,6 +45,15 @@ class BlocklyWindow extends Component { if (!xml) xml = initialXml; Blockly.Xml.domToWorkspace(Blockly.Xml.textToDom(xml), workspace); } + if(props.language !== this.props.language){ + // change language + if (!xml) xml = initialXml; + var xmlDom = Blockly.Xml.textToDom(xml); + Blockly.Xml.clearWorkspaceAndLoadFromXml(xmlDom, workspace); + // var toolbox = workspace.getToolbox(); + // console.log(toolbox); + // workspace.updateToolbox(toolbox.toolboxDef_); + } Blockly.svgResize(workspace); } diff --git a/src/components/Route/PublicRoute.js b/src/components/Route/PublicRoute.js new file mode 100644 index 0000000..99d4e5a --- /dev/null +++ b/src/components/Route/PublicRoute.js @@ -0,0 +1,32 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import { connect } from 'react-redux'; + +import { Route } from 'react-router-dom'; + + +class PublicRoute extends Component { + + render() { + return ( + !this.props.progress ? + + this.props.children + } + /> + : null + ); + } +} + +PublicRoute.propTypes = { + progress: PropTypes.bool.isRequired +}; + +const mapStateToProps = state => ({ + progress: state.auth.progress +}); + +export default connect(mapStateToProps, null)(PublicRoute); diff --git a/src/components/Route/Routes.js b/src/components/Route/Routes.js index 3121edf..5207d45 100644 --- a/src/components/Route/Routes.js +++ b/src/components/Route/Routes.js @@ -5,6 +5,7 @@ import { visitPage } from '../../actions/generalActions'; import { Route, Switch, withRouter } from 'react-router-dom'; +import PublicRoute from './PublicRoute'; import PrivateRoute from './PrivateRoute'; import PrivateRouteCreator from './PrivateRouteCreator'; import IsLoggedRoute from './IsLoggedRoute'; @@ -34,18 +35,30 @@ class Routes extends Component { return (
- + + + {/* Tutorials */} - + + + - + - + + + {/* Sharing */} - + + + {/* Gallery-Projects */} - - + + + + + + {/* User-Projects */} @@ -64,12 +77,20 @@ class Routes extends Component { {/* settings */} - + + + {/* privacy */} - - + + + + + + {/* Not Found */} - + + +
); diff --git a/src/components/Tutorial/Tutorial.js b/src/components/Tutorial/Tutorial.js index b6fd1f7..299c788 100644 --- a/src/components/Tutorial/Tutorial.js +++ b/src/components/Tutorial/Tutorial.js @@ -5,6 +5,8 @@ import { workspaceName } from '../../actions/workspaceActions'; import { clearMessages } from '../../actions/messageActions'; import { getTutorial, resetTutorial, tutorialStep,tutorialProgress } from '../../actions/tutorialActions'; +import { withRouter } from 'react-router-dom'; + import Breadcrumbs from '../Breadcrumbs'; import StepperHorizontal from './StepperHorizontal'; import StepperVertical from './StepperVertical'; @@ -26,6 +28,7 @@ class Tutorial extends Component { // retrieve tutorial only if a potential user is loaded - authentication // is finished (success or failed) if(!this.props.progress){ + console.log(this.props); this.props.getTutorial(this.props.match.params.tutorialId); } } @@ -120,4 +123,4 @@ const mapStateToProps = state => ({ progress: state.auth.progress }); -export default connect(mapStateToProps, { getTutorial, resetTutorial, tutorialStep, tutorialProgress, clearMessages, workspaceName })(Tutorial); +export default connect(mapStateToProps, { getTutorial, resetTutorial, tutorialStep, tutorialProgress, clearMessages, workspaceName })(withRouter(Tutorial)); diff --git a/src/components/Workspace/SaveProject.js b/src/components/Workspace/SaveProject.js index a71e968..733ff76 100644 --- a/src/components/Workspace/SaveProject.js +++ b/src/components/Workspace/SaveProject.js @@ -100,10 +100,10 @@ class SaveProject extends Component { success: res => { var project = res.data[this.state.projectType]; this.props.history.push(`/${this.state.projectType}/${project._id}`); - }) - .catch(err => { + }, + error: err => { this.setState({ snackbar: true, key: Date.now(), message: `${Blockly.Msg.messages_gallery_save_fail_1} ${this.state.projectType === 'gallery' ? 'Galerie-' : ''} ${Blockly.Msg.messages_gallery_save_fail_2}`, type: 'error' }); - window.scrollTo(0, 0); + window.scrollTo(0, 0); } }; axios.post(`${process.env.REACT_APP_BLOCKLY_API}/${this.state.projectType}`, body, config)