dialog for device selction
This commit is contained in:
parent
86c709a014
commit
b212316b0b
10
src/actions/boardAction.js
Normal file
10
src/actions/boardAction.js
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
import {
|
||||||
|
BOARD,
|
||||||
|
} from "./types";
|
||||||
|
|
||||||
|
export const setBoard = (board) => (dispatch) => {
|
||||||
|
dispatch({
|
||||||
|
type: BOARD,
|
||||||
|
payload: board,
|
||||||
|
});
|
||||||
|
};
|
@ -63,3 +63,6 @@ export const GET_PROJECT = "GET_PROJECT";
|
|||||||
export const GET_PROJECTS = "GET_PROJECTS";
|
export const GET_PROJECTS = "GET_PROJECTS";
|
||||||
export const PROJECT_TYPE = "PROJECT_TYPE";
|
export const PROJECT_TYPE = "PROJECT_TYPE";
|
||||||
export const PROJECT_DESCRIPTION = "PROJECT_DESCRIPTION";
|
export const PROJECT_DESCRIPTION = "PROJECT_DESCRIPTION";
|
||||||
|
|
||||||
|
//board
|
||||||
|
export const BOARD = "BOARD";
|
||||||
|
@ -126,6 +126,138 @@ const sensebox_mcu = {
|
|||||||
parseKey: "_*_",
|
parseKey: "_*_",
|
||||||
};
|
};
|
||||||
|
|
||||||
export const selectedBoard = () => {
|
//Just for test purposes
|
||||||
return sensebox_mcu;
|
const sensebox_mini = {
|
||||||
|
description: "senseBox Mini",
|
||||||
|
compilerFlag: "arduino:samd",
|
||||||
|
digitalPins: [
|
||||||
|
["A1", "1"],
|
||||||
|
["A2", "2"],
|
||||||
|
["B3", "3"],
|
||||||
|
["B4", "4"],
|
||||||
|
["C5", "5"],
|
||||||
|
["C6", "6"],
|
||||||
|
],
|
||||||
|
digitalPinsLED: [
|
||||||
|
["BUILTIN_1", "7"],
|
||||||
|
["BUILTIN_2", "8"],
|
||||||
|
["A1", "1"],
|
||||||
|
["A2", "2"],
|
||||||
|
["B3", "3"],
|
||||||
|
["B4", "4"],
|
||||||
|
["C5", "5"],
|
||||||
|
["C6", "6"],
|
||||||
|
],
|
||||||
|
digitalPinsButton: [
|
||||||
|
["on Board", "0"],
|
||||||
|
["A1", "1"],
|
||||||
|
["A2", "2"],
|
||||||
|
|
||||||
|
],
|
||||||
|
pwmPins: [
|
||||||
|
["A1", "1"],
|
||||||
|
["A2", "2"],
|
||||||
|
["B3", "3"],
|
||||||
|
["B4", "4"],
|
||||||
|
["C5", "5"],
|
||||||
|
["C6", "6"],
|
||||||
|
],
|
||||||
|
serial: [
|
||||||
|
["serial", "SerialUSB"],
|
||||||
|
["serial_1", "Serial1"],
|
||||||
|
["serial_2", "Serial2"],
|
||||||
|
],
|
||||||
|
serialPins: {
|
||||||
|
SerialUSB: [
|
||||||
|
["RX", ""],
|
||||||
|
["TX", ""],
|
||||||
|
],
|
||||||
|
Serial1: [
|
||||||
|
["RX", "11"],
|
||||||
|
["TX", "10"],
|
||||||
|
],
|
||||||
|
Serial2: [
|
||||||
|
["RX", "13"],
|
||||||
|
["TX", "12"],
|
||||||
|
],
|
||||||
|
},
|
||||||
|
serialSpeed: [
|
||||||
|
["300", "300"],
|
||||||
|
["600", "600"],
|
||||||
|
["1200", "1200"],
|
||||||
|
["2400", "2400"],
|
||||||
|
["4800", "4800"],
|
||||||
|
["9600", "9600"],
|
||||||
|
["14400", "14400"],
|
||||||
|
["19200", "19200"],
|
||||||
|
["28800", "28800"],
|
||||||
|
["31250", "31250"],
|
||||||
|
["38400", "38400"],
|
||||||
|
["57600", "57600"],
|
||||||
|
["115200", "115200"],
|
||||||
|
],
|
||||||
|
spi: [["SPI", "SPI"]],
|
||||||
|
spiPins: {
|
||||||
|
SPI: [
|
||||||
|
["MOSI", "19"],
|
||||||
|
["MISO", "21"],
|
||||||
|
["SCK", "20"],
|
||||||
|
],
|
||||||
|
},
|
||||||
|
spiClockDivide: [
|
||||||
|
["2 (8MHz)", "SPI_CLOCK_DIV2"],
|
||||||
|
["4 (4MHz)", "SPI_CLOCK_DIV4"],
|
||||||
|
["8 (2MHz)", "SPI_CLOCK_DIV8"],
|
||||||
|
["16 (1MHz)", "SPI_CLOCK_DIV16"],
|
||||||
|
["32 (500KHz)", "SPI_CLOCK_DIV32"],
|
||||||
|
["64 (250KHz)", "SPI_CLOCK_DIV64"],
|
||||||
|
["128 (125KHz)", "SPI_CLOCK_DIV128"],
|
||||||
|
],
|
||||||
|
i2c: [["I2C", "Wire"]],
|
||||||
|
i2cPins: {
|
||||||
|
Wire: [
|
||||||
|
["SDA", "17"],
|
||||||
|
["SCL", "16"],
|
||||||
|
],
|
||||||
|
},
|
||||||
|
i2cSpeed: [
|
||||||
|
["100kHz", "100000L"],
|
||||||
|
["400kHz", "400000L"],
|
||||||
|
],
|
||||||
|
builtinLed: [
|
||||||
|
["BUILTIN_1", "7"],
|
||||||
|
["BUILTIN_2", "8"],
|
||||||
|
],
|
||||||
|
interrupt: [
|
||||||
|
["interrupt1", "1"],
|
||||||
|
["interrupt2", "2"],
|
||||||
|
["interrupt3", "3"],
|
||||||
|
["interrupt4", "4"],
|
||||||
|
["interrupt5", "5"],
|
||||||
|
["interrupt6", "6"],
|
||||||
|
],
|
||||||
|
analogPins: [
|
||||||
|
["A1", "A1"],
|
||||||
|
["A2", "A2"],
|
||||||
|
],
|
||||||
|
serial_baud_rate: 9600,
|
||||||
|
parseKey: "_*_",
|
||||||
|
};
|
||||||
|
|
||||||
|
var board = sensebox_mcu
|
||||||
|
|
||||||
|
export const setBoard = (selectedBoard) => {
|
||||||
|
console.log(board)
|
||||||
|
if (selectedBoard === "mini"){
|
||||||
|
board = sensebox_mini
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
board = sensebox_mcu
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export const selectedBoard = () => {
|
||||||
|
console.log(board)
|
||||||
|
return board;
|
||||||
};
|
};
|
||||||
|
@ -141,6 +141,7 @@ export const UI = {
|
|||||||
|
|
||||||
button_cancel: "Abbrechen",
|
button_cancel: "Abbrechen",
|
||||||
button_close: "Schließen",
|
button_close: "Schließen",
|
||||||
|
button_save: "Speichern",
|
||||||
button_accept: "Bestätigen",
|
button_accept: "Bestätigen",
|
||||||
button_compile: "Kompilieren",
|
button_compile: "Kompilieren",
|
||||||
button_create_variableCreate: "Erstelle Variable",
|
button_create_variableCreate: "Erstelle Variable",
|
||||||
@ -301,4 +302,10 @@ export const UI = {
|
|||||||
codeeditor_blockly_code: "Lade Blockly Code",
|
codeeditor_blockly_code: "Lade Blockly Code",
|
||||||
codeeditor_compile_progress:
|
codeeditor_compile_progress:
|
||||||
"Dein Code wird nun kompiliert und anschließend auf deinen Computer heruntergeladen",
|
"Dein Code wird nun kompiliert und anschließend auf deinen Computer heruntergeladen",
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Device Selction
|
||||||
|
* */
|
||||||
|
deviceselection_head: "Welches Board benutzt du?",
|
||||||
|
deviceselection_keep_selection: "Speichere meine Auswahl fürs nächste Mal"
|
||||||
};
|
};
|
||||||
|
@ -10,6 +10,7 @@ import Navbar from './Navbar';
|
|||||||
import Footer from './Footer';
|
import Footer from './Footer';
|
||||||
import Routes from './Route/Routes';
|
import Routes from './Route/Routes';
|
||||||
import Cookies from './Cookies';
|
import Cookies from './Cookies';
|
||||||
|
import { setBoard } from './Blockly/helpers/board';
|
||||||
|
|
||||||
class Content extends Component {
|
class Content extends Component {
|
||||||
|
|
||||||
@ -19,6 +20,7 @@ class Content extends Component {
|
|||||||
} else if (this.props.language === 'en_US') {
|
} else if (this.props.language === 'en_US') {
|
||||||
Blockly.setLocale(En);
|
Blockly.setLocale(En);
|
||||||
}
|
}
|
||||||
|
setBoard(this.props.board)
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidUpdate(props) {
|
componentDidUpdate(props) {
|
||||||
@ -29,6 +31,7 @@ class Content extends Component {
|
|||||||
Blockly.setLocale(En);
|
Blockly.setLocale(En);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
setBoard(this.props.board)
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
@ -48,7 +51,8 @@ Content.propTypes = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const mapStateToProps = state => ({
|
const mapStateToProps = state => ({
|
||||||
language: state.general.language
|
language: state.general.language,
|
||||||
|
board: state.board.board
|
||||||
});
|
});
|
||||||
|
|
||||||
export default connect(mapStateToProps, null)(Content);
|
export default connect(mapStateToProps, null)(Content);
|
||||||
|
161
src/components/DeviceSelction.js
Normal file
161
src/components/DeviceSelction.js
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
import React, { Component } from "react";
|
||||||
|
import PropTypes from "prop-types";
|
||||||
|
import { connect } from "react-redux";
|
||||||
|
import Dialog from "./Dialog";
|
||||||
|
|
||||||
|
import { withStyles } from "@material-ui/core/styles";
|
||||||
|
import Checkbox from "@material-ui/core/Checkbox";
|
||||||
|
import FormControlLabel from "@material-ui/core/FormControlLabel";
|
||||||
|
import * as Blockly from "blockly";
|
||||||
|
import ReactMarkdown from "react-markdown";
|
||||||
|
import { IconButton, Grid, Avatar } from "@material-ui/core";
|
||||||
|
import { setBoard } from "../actions/boardAction";
|
||||||
|
|
||||||
|
const styles = (theme) => ({
|
||||||
|
link: {
|
||||||
|
color: theme.palette.primary.main,
|
||||||
|
textDecoration: "none",
|
||||||
|
"&:hover": {
|
||||||
|
color: theme.palette.primary.main,
|
||||||
|
textDecoration: `underline`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
label: {
|
||||||
|
fontSize: "0.9rem",
|
||||||
|
color: "grey",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
class DeviceSeclection extends Component {
|
||||||
|
constructor(props) {
|
||||||
|
var previousPageWasAnotherDomain = props.pageVisits === 0;
|
||||||
|
var userWantToKeepBoard = window.localStorage.getItem("board")
|
||||||
|
? true
|
||||||
|
: false;
|
||||||
|
super(props);
|
||||||
|
this.state = {
|
||||||
|
open: userWantToKeepBoard
|
||||||
|
? !userWantToKeepBoard
|
||||||
|
: previousPageWasAnotherDomain,
|
||||||
|
selectedBoard : "",
|
||||||
|
saveSettings: false,
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
toggleDialog = () => {
|
||||||
|
this.setState({ open: !this.state });
|
||||||
|
if(this.state.saveSettings){
|
||||||
|
window.localStorage.setItem("board", this.state.selectedBoard)
|
||||||
|
}
|
||||||
|
this.props.setBoard(this.state.selectedBoard)
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
onChange = (e) => {
|
||||||
|
if (e.target.checked) {
|
||||||
|
this.setState({ saveSettings: true});
|
||||||
|
} else {
|
||||||
|
this.setState({ saveSettings: false});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
onclick = (e, value) => {
|
||||||
|
console.log(e, value)
|
||||||
|
this.setState({selectedBoard: value})
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<Dialog
|
||||||
|
style={{ zIndex: 9999999 }}
|
||||||
|
fullWidth
|
||||||
|
maxWidth={"xl"}
|
||||||
|
open={this.state.open}
|
||||||
|
title={Blockly.Msg.deviceselection_head}
|
||||||
|
content={""}
|
||||||
|
onClick={this.toggleDialog}
|
||||||
|
button={Blockly.Msg.button_save}
|
||||||
|
disabled={this.state.selectedBoard===""}
|
||||||
|
>
|
||||||
|
<div>
|
||||||
|
<Grid container spacing={2} style={{ textAlign : "center" }}>
|
||||||
|
<Grid item xs={4}>
|
||||||
|
<IconButton onClick={(e) => this.onclick(e, "mcu")}>
|
||||||
|
<Avatar
|
||||||
|
alt="Sensebox MCU"
|
||||||
|
src="/media/hardware/senseboxmcu.png"
|
||||||
|
style={{
|
||||||
|
border: this.state.selectedBoard == "mcu" ? 'medium solid DeepSkyBlue': "0.1px solid lightgray",
|
||||||
|
width:"20vw",
|
||||||
|
height: "20vw"
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</IconButton>
|
||||||
|
<p>Sensebox MCU</p>
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
<Grid item xs={4}>
|
||||||
|
<IconButton onClick={(e) => this.onclick(e, "esp")}>
|
||||||
|
<Avatar
|
||||||
|
alt="Sensebox ESP"
|
||||||
|
src="/media/hardware/senseboxmcu.png"
|
||||||
|
style={{
|
||||||
|
border: this.state.selectedBoard == "esp" ? 'medium solid DeepSkyBlue': "0.1px solid lightgray",
|
||||||
|
width:"20vw",
|
||||||
|
height: "20vw"
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</IconButton>
|
||||||
|
<p>Sensebox ESP</p>
|
||||||
|
</Grid>
|
||||||
|
<Grid item xs={4}>
|
||||||
|
<IconButton onClick={(e) => this.onclick(e, "mini")}>
|
||||||
|
<Avatar
|
||||||
|
alt="Sensebox Mini"
|
||||||
|
src="/media/hardware/senseboxmcu.png"
|
||||||
|
style={{
|
||||||
|
border: this.state.selectedBoard == "mini" ? 'medium solid DeepSkyBlue': "0.1px solid lightgray",
|
||||||
|
width:"20vw",
|
||||||
|
height: "20vw"
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</IconButton>
|
||||||
|
<p>Sensebox Mini</p>
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
</div>
|
||||||
|
<FormControlLabel
|
||||||
|
style={{ marginTop: "20px" }}
|
||||||
|
classes={{ label: this.props.classes.label }}
|
||||||
|
control={
|
||||||
|
<Checkbox
|
||||||
|
size={"small"}
|
||||||
|
value={true}
|
||||||
|
checked={this.state.checked}
|
||||||
|
onChange={(e) => this.onChange(e)}
|
||||||
|
name="dialog"
|
||||||
|
color="primary"
|
||||||
|
/>
|
||||||
|
}
|
||||||
|
label={Blockly.Msg.deviceselection_keep_selection}
|
||||||
|
/>
|
||||||
|
</Dialog>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DeviceSeclection.propTypes = {
|
||||||
|
pageVisits: PropTypes.number.isRequired,
|
||||||
|
};
|
||||||
|
|
||||||
|
const mapStateToProps = (state) => ({
|
||||||
|
pageVisits: state.general.pageVisits,
|
||||||
|
selectedBoard: state.board.board
|
||||||
|
});
|
||||||
|
|
||||||
|
export default connect(
|
||||||
|
mapStateToProps,
|
||||||
|
{setBoard}
|
||||||
|
)(withStyles(styles, { withTheme: true })(DeviceSeclection));
|
@ -24,7 +24,7 @@ class Dialog extends Component {
|
|||||||
</DialogContent>
|
</DialogContent>
|
||||||
<DialogActions>
|
<DialogActions>
|
||||||
{this.props.actions ? this.props.actions :
|
{this.props.actions ? this.props.actions :
|
||||||
<Button onClick={this.props.onClick} color="primary">
|
<Button onClick={this.props.onClick} disabled={this.props.disabled} color="primary">
|
||||||
{this.props.button}
|
{this.props.button}
|
||||||
</Button>
|
</Button>
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,7 @@ import BlocklyWindow from "./Blockly/BlocklyWindow";
|
|||||||
import CodeViewer from "./CodeViewer";
|
import CodeViewer from "./CodeViewer";
|
||||||
import TrashcanButtons from "./Workspace/TrashcanButtons";
|
import TrashcanButtons from "./Workspace/TrashcanButtons";
|
||||||
import HintTutorialExists from "./Tutorial/HintTutorialExists";
|
import HintTutorialExists from "./Tutorial/HintTutorialExists";
|
||||||
|
import DeviceSelction from "./DeviceSelction";
|
||||||
|
|
||||||
import Grid from "@material-ui/core/Grid";
|
import Grid from "@material-ui/core/Grid";
|
||||||
import IconButton from "@material-ui/core/IconButton";
|
import IconButton from "@material-ui/core/IconButton";
|
||||||
@ -186,6 +187,7 @@ class Home extends Component {
|
|||||||
</Grid>
|
</Grid>
|
||||||
) : null}
|
) : null}
|
||||||
</Grid>
|
</Grid>
|
||||||
|
<DeviceSelction />
|
||||||
<HintTutorialExists />
|
<HintTutorialExists />
|
||||||
{this.props.platform ? (
|
{this.props.platform ? (
|
||||||
<Dialog
|
<Dialog
|
||||||
|
24
src/reducers/boardReducer.js
Normal file
24
src/reducers/boardReducer.js
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
import { BOARD } from '../actions/types';
|
||||||
|
|
||||||
|
const initialValue = () => {
|
||||||
|
if (window.localStorage.getItem("board")) {
|
||||||
|
return window.localStorage.getItem("locale");
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
|
||||||
|
const initialState = {
|
||||||
|
board: initialValue()
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function foo(state = initialState, action){
|
||||||
|
switch(action.type){
|
||||||
|
case BOARD:
|
||||||
|
return {
|
||||||
|
...state,
|
||||||
|
board: action.payload,
|
||||||
|
};
|
||||||
|
default:
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
}
|
@ -6,9 +6,11 @@ import generalReducer from './generalReducer';
|
|||||||
import projectReducer from './projectReducer';
|
import projectReducer from './projectReducer';
|
||||||
import messageReducer from './messageReducer';
|
import messageReducer from './messageReducer';
|
||||||
import authReducer from './authReducer';
|
import authReducer from './authReducer';
|
||||||
|
import boardReducer from './boardReducer'
|
||||||
|
|
||||||
export default combineReducers({
|
export default combineReducers({
|
||||||
auth: authReducer,
|
auth: authReducer,
|
||||||
|
board: boardReducer,
|
||||||
workspace: workspaceReducer,
|
workspace: workspaceReducer,
|
||||||
tutorial: tutorialReducer,
|
tutorial: tutorialReducer,
|
||||||
builder: tutorialBuilderReducer,
|
builder: tutorialBuilderReducer,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user