removing workspace from Redux

This commit is contained in:
Delucse 2020-07-23 15:55:54 +02:00
parent c2405de04a
commit 168c5fb575
7 changed files with 25 additions and 68 deletions

View File

@ -1,6 +1,5 @@
export const NEW_CODE = 'NEW_CODE'; export const NEW_CODE = 'NEW_CODE';
export const CHANGE_WORKSPACE = 'CHANGE_WORKSPACE'; export const CHANGE_WORKSPACE = 'CHANGE_WORKSPACE';
export const NEW_WORKSPACE = 'NEW_WORKSPACE';
export const CREATE_BLOCK = 'CREATE_BLOCK'; export const CREATE_BLOCK = 'CREATE_BLOCK';
export const MOVE_BLOCK = 'MOVE_BLOCK'; export const MOVE_BLOCK = 'MOVE_BLOCK';
export const CHANGE_BLOCK = 'CHANGE_BLOCK'; export const CHANGE_BLOCK = 'CHANGE_BLOCK';

View File

@ -1,4 +1,4 @@
import { NEW_CODE, CHANGE_WORKSPACE, NEW_WORKSPACE, CREATE_BLOCK, MOVE_BLOCK, CHANGE_BLOCK, DELETE_BLOCK, CLEAR_STATS } from './types'; import { NEW_CODE, CHANGE_WORKSPACE, CREATE_BLOCK, MOVE_BLOCK, CHANGE_BLOCK, DELETE_BLOCK, CLEAR_STATS } from './types';
import * as Blockly from 'blockly/core'; import * as Blockly from 'blockly/core';
@ -8,22 +8,12 @@ export const workspaceChange = () => (dispatch) => {
}) })
} }
export const initWorkspace = (workspace) => (dispatch) => {
dispatch({
type: NEW_WORKSPACE,
payload: workspace
});
}
export const onChangeWorkspace = (event) => (dispatch, getState) => { export const onChangeWorkspace = (event) => (dispatch, getState) => {
const workspace = Blockly.getMainWorkspace();
dispatch({
type: NEW_WORKSPACE,
payload: workspace
});
dispatch({ dispatch({
type: CHANGE_WORKSPACE, type: CHANGE_WORKSPACE,
}) })
const workspace = Blockly.getMainWorkspace();
var code = getState().workspace.code; var code = getState().workspace.code;
code.arduino = Blockly.Arduino.workspaceToCode(workspace); code.arduino = Blockly.Arduino.workspaceToCode(workspace);
var xmlDom = Blockly.Xml.workspaceToDom(workspace); var xmlDom = Blockly.Xml.workspaceToDom(workspace);
@ -78,11 +68,3 @@ export const clearStats = () => (dispatch) => {
payload: stats payload: stats
}); });
}; };
export const setWorkspace = (workspace) => (dispatch, getState) => {
dispatch({
type: NEW_WORKSPACE,
payload: {new: workspace, old: getState().workspace.new}
});
};

View File

@ -3,6 +3,8 @@ import PropTypes from 'prop-types';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { clearStats, workspaceChange } from '../actions/workspaceActions'; import { clearStats, workspaceChange } from '../actions/workspaceActions';
import * as Blockly from 'blockly/core';
import ListItem from '@material-ui/core/ListItem'; import ListItem from '@material-ui/core/ListItem';
import ListItemIcon from '@material-ui/core/ListItemIcon'; import ListItemIcon from '@material-ui/core/ListItemIcon';
import ListItemText from '@material-ui/core/ListItemText'; import ListItemText from '@material-ui/core/ListItemText';
@ -13,15 +15,11 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
class ClearWorkspace extends Component { class ClearWorkspace extends Component {
clearWorkspace = () => { clearWorkspace = () => {
if(this.props.workspace){ const workspace = Blockly.getMainWorkspace();
this.props.workspace.clear(); workspace.clear();
this.props.workspace.options.maxBlocks = Infinity; workspace.options.maxBlocks = Infinity;
this.props.workspaceChange(); this.props.workspaceChange();
this.props.clearStats(); this.props.clearStats();
}
else {
alert()
}
} }
render() { render() {
@ -35,13 +33,9 @@ class ClearWorkspace extends Component {
} }
ClearWorkspace.propTypes = { ClearWorkspace.propTypes = {
workspace: PropTypes.object.isRequired,
clearStats: PropTypes.func.isRequired, clearStats: PropTypes.func.isRequired,
workspaceChange: PropTypes.func.isRequired workspaceChange: PropTypes.func.isRequired
}; };
const mapStateToProps = state => ({
workspace: state.workspace.workspace
});
export default connect(mapStateToProps, { clearStats, workspaceChange })(ClearWorkspace); export default connect(null, { clearStats, workspaceChange })(ClearWorkspace);

View File

@ -1,8 +1,7 @@
import React, { Component } from 'react'; import React, { Component } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { onChangeWorkspace, initWorkspace } from '../actions/workspaceActions'; import { onChangeWorkspace } from '../actions/workspaceActions';
import WorkspaceStats from './WorkspaceStats'; import WorkspaceStats from './WorkspaceStats';
import WorkspaceFunc from './WorkspaceFunc'; import WorkspaceFunc from './WorkspaceFunc';
@ -16,7 +15,7 @@ import './Blockly/blocks/index';
import './Blockly/generator/index'; import './Blockly/generator/index';
class Home extends React.Component { class Home extends Component {
constructor(props) { constructor(props) {
super(props); super(props);
@ -24,8 +23,7 @@ class Home extends React.Component {
} }
componentDidMount() { componentDidMount() {
let workspace = Blockly.getMainWorkspace(); const workspace = Blockly.getMainWorkspace();
this.props.initWorkspace(workspace);
workspace.addChangeListener((event) => { workspace.addChangeListener((event) => {
this.props.onChangeWorkspace(event); this.props.onChangeWorkspace(event);
}); });
@ -72,22 +70,9 @@ class Home extends React.Component {
}; };
} }
WorkspaceStats.propTypes = { Home.propTypes = {
workspace: PropTypes.object.isRequired, onChangeWorkspace: PropTypes.func.isRequired
create: PropTypes.number.isRequired,
change: PropTypes.number.isRequired,
delete: PropTypes.number.isRequired,
move: PropTypes.number.isRequired,
worskpaceChange: PropTypes.number.isRequired
}; };
const mapStateToProps = state => ({
workspace: state.workspace.workspace,
create: state.workspace.stats.create,
change: state.workspace.stats.change,
delete: state.workspace.stats.delete,
move: state.workspace.stats.move,
worskpaceChange: state.workspace.change
});
export default connect(null, { onChangeWorkspace, initWorkspace })(Home); export default connect(null, { onChangeWorkspace })(Home);

View File

@ -43,4 +43,8 @@ class MaxBlocks extends Component {
}; };
} }
MaxBlocks.propTypes = {
workspaceChange: PropTypes.func.isRequired
};
export default connect(null, { workspaceChange })(MaxBlocks); export default connect(null, { workspaceChange })(MaxBlocks);

View File

@ -24,13 +24,14 @@ const styles = (theme) => ({
class WorkspaceStats extends Component { class WorkspaceStats extends Component {
render() { render() {
const remainingBlocksInfinity = this.props.workspace ? this.props.workspace.remainingCapacity() !== Infinity : null; const workspace = Blockly.getMainWorkspace();
const remainingBlocksInfinity = workspace ? workspace.remainingCapacity() !== Infinity : null;
return ( return (
<div style={{marginBottom: '20px'}}> <div style={{marginBottom: '20px'}}>
<Tooltip title="Anzahl aktueller Blöcke" style={{marginLeft: 0}} className={this.props.classes.stats}> <Tooltip title="Anzahl aktueller Blöcke" style={{marginLeft: 0}} className={this.props.classes.stats}>
<div> <div>
<FontAwesomeIcon icon={faPuzzlePiece} /> <FontAwesomeIcon icon={faPuzzlePiece} />
<Typography style={{display: 'inline'}}> {this.props.workspace ? this.props.workspace.getAllBlocks().length : 0}</Typography> <Typography style={{display: 'inline'}}> {workspace ? workspace.getAllBlocks().length : 0}</Typography>
</div> </div>
</Tooltip> </Tooltip>
<Tooltip title="Anzahl neuer Blöcke" className={this.props.classes.stats}> <Tooltip title="Anzahl neuer Blöcke" className={this.props.classes.stats}>
@ -63,7 +64,7 @@ class WorkspaceStats extends Component {
</Tooltip> </Tooltip>
{remainingBlocksInfinity ? {remainingBlocksInfinity ?
<Tooltip title="verbleibende Blöcke" className={this.props.classes.stats}> <Tooltip title="verbleibende Blöcke" className={this.props.classes.stats}>
<Typography style={{display: 'inline'}}>{this.props.workspace.remainingCapacity()} verbleibende Blöcke</Typography> <Typography style={{display: 'inline'}}>{workspace.remainingCapacity()} verbleibende Blöcke</Typography>
</Tooltip> : null} </Tooltip> : null}
</div> </div>
); );
@ -71,7 +72,6 @@ class WorkspaceStats extends Component {
} }
WorkspaceStats.propTypes = { WorkspaceStats.propTypes = {
workspace: PropTypes.object.isRequired,
create: PropTypes.number.isRequired, create: PropTypes.number.isRequired,
change: PropTypes.number.isRequired, change: PropTypes.number.isRequired,
delete: PropTypes.number.isRequired, delete: PropTypes.number.isRequired,
@ -80,7 +80,6 @@ WorkspaceStats.propTypes = {
}; };
const mapStateToProps = state => ({ const mapStateToProps = state => ({
workspace: state.workspace.workspace,
create: state.workspace.stats.create, create: state.workspace.stats.create,
change: state.workspace.stats.change, change: state.workspace.stats.change,
delete: state.workspace.stats.delete, delete: state.workspace.stats.delete,

View File

@ -1,4 +1,4 @@
import { CHANGE_WORKSPACE, NEW_CODE, NEW_WORKSPACE, CREATE_BLOCK, MOVE_BLOCK, CHANGE_BLOCK, DELETE_BLOCK, CLEAR_STATS } from '../actions/types'; import { CHANGE_WORKSPACE, NEW_CODE, CREATE_BLOCK, MOVE_BLOCK, CHANGE_BLOCK, DELETE_BLOCK, CLEAR_STATS } from '../actions/types';
const initialState = { const initialState = {
@ -6,7 +6,6 @@ const initialState = {
arduino: '', arduino: '',
xml: '' xml: ''
}, },
workspace: null,
stats: { stats: {
create: 0, create: 0,
change: 0, change: 0,
@ -28,11 +27,6 @@ export default function(state = initialState, action){
...state, ...state,
change: state.change += 1 change: state.change += 1
}; };
case NEW_WORKSPACE:
return {
...state,
workspace: action.payload
};
case CREATE_BLOCK: case CREATE_BLOCK:
case MOVE_BLOCK: case MOVE_BLOCK:
case CHANGE_BLOCK: case CHANGE_BLOCK: