Merge pull request #131 from sensebox/add-sound-selector

add sound selector
This commit is contained in:
Mario Pesch 2021-12-20 15:16:47 +01:00 committed by GitHub
commit 94aba6d176
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 110 additions and 3 deletions

View File

@ -1,4 +1,11 @@
import { VISIT, LANGUAGE, RENDERER, STATISTICS, PLATFORM } from "./types"; import {
VISIT,
LANGUAGE,
RENDERER,
SOUNDS,
STATISTICS,
PLATFORM,
} from "./types";
export const visitPage = () => (dispatch) => { export const visitPage = () => (dispatch) => {
dispatch({ dispatch({
@ -30,6 +37,13 @@ export const setRenderer = (renderer) => (dispatch) => {
}); });
}; };
export const setSounds = (sounds) => (dispatch) => {
dispatch({
type: SOUNDS,
payload: sounds,
});
};
export const setStatistics = (showStatistics) => (dispatch) => { export const setStatistics = (showStatistics) => (dispatch) => {
dispatch({ dispatch({
type: STATISTICS, type: STATISTICS,

View File

@ -45,6 +45,7 @@ export const VISIT = "VISIT";
export const LANGUAGE = "LANGUAGE"; export const LANGUAGE = "LANGUAGE";
export const PLATFORM = "PLATFORM"; export const PLATFORM = "PLATFORM";
export const RENDERER = "RENDERER"; export const RENDERER = "RENDERER";
export const SOUNDS = "SOUNDS";
export const STATISTICS = "STATISTICS"; export const STATISTICS = "STATISTICS";
// messages // messages

View File

@ -72,6 +72,7 @@ class BlocklyWindow extends Component {
this.props.trashcan !== undefined ? this.props.trashcan : true this.props.trashcan !== undefined ? this.props.trashcan : true
} }
renderer={this.props.renderer} renderer={this.props.renderer}
sounds={this.props.sounds}
maxInstances={getMaxInstances()} maxInstances={getMaxInstances()}
zoom={{ zoom={{
// https://developers.google.com/blockly/guides/configure/web/zoom // https://developers.google.com/blockly/guides/configure/web/zoom
@ -123,11 +124,13 @@ BlocklyWindow.propTypes = {
onChangeWorkspace: PropTypes.func.isRequired, onChangeWorkspace: PropTypes.func.isRequired,
clearStats: PropTypes.func.isRequired, clearStats: PropTypes.func.isRequired,
renderer: PropTypes.string.isRequired, renderer: PropTypes.string.isRequired,
sounds: PropTypes.string.isRequired,
language: PropTypes.string.isRequired, language: PropTypes.string.isRequired,
}; };
const mapStateToProps = (state) => ({ const mapStateToProps = (state) => ({
renderer: state.general.renderer, renderer: state.general.renderer,
sounds: state.general.sounds,
language: state.general.language, language: state.general.language,
}); });

View File

@ -177,6 +177,9 @@ export const UI = {
"Der Tablet Modus deaktiviert die Code anzeige und aktiviert die Möglichkeit den Programmcode über die senseBox Connect App zu übertragen. Weitere Informationen dazu findest du unter: ", "Der Tablet Modus deaktiviert die Code anzeige und aktiviert die Möglichkeit den Programmcode über die senseBox Connect App zu übertragen. Weitere Informationen dazu findest du unter: ",
settings_ota_on: "Aktiviert", settings_ota_on: "Aktiviert",
settings_ota_off: "Deaktiviert", settings_ota_off: "Deaktiviert",
settings_sounds: "Töne",
settings_sounds_text:
"Aktiviere oder Deaktiviere Töne beim hinzufügen und löschen von Blöcken. Standardmäßig deaktiviert",
/** /**
* 404 * 404

View File

@ -167,11 +167,14 @@ export const UI = {
"The display of statistics on the usage of the blocks above the workspace can be shown or hidden.", "The display of statistics on the usage of the blocks above the workspace can be shown or hidden.",
settings_statistics_on: "On", settings_statistics_on: "On",
settings_statistics_off: "Off", settings_statistics_off: "Off",
settings_ota_head: "tablet mode", settings_ota_head: "Tablet mode",
settings_ota_text: settings_ota_text:
"Tablet mode disables the code display and enables the possibility to transfer the program code via the senseBox Connect app. You can find more information on: ", "Tablet mode disables the code display and enables the possibility to transfer the program code via the senseBox Connect app. You can find more information on: ",
settings_ota_on: "Activated", settings_ota_on: "Activated",
settings_ota_off: "Deactivated", settings_ota_off: "Deactivated",
settings_sounds: "Sound",
settings_sounds_text:
"Enable or disable sounds when adding and deleting blocks. Disabled by default",
/** /**
* 404 * 404

View File

@ -94,7 +94,7 @@ class Toolbox extends React.Component {
<Block type="sensebox_wifi" /> <Block type="sensebox_wifi" />
<Block type="sensebox_wifi_status" /> <Block type="sensebox_wifi_status" />
<Block type="sensebox_wifi_rssi" /> <Block type="sensebox_wifi_rssi" />
<Block type="sensebox_wifi_ip" /> <Block type="sensebox_get_ip" />
<Block type="sensebox_startap" /> <Block type="sensebox_startap" />
</Category> </Category>
<Category name="SD" colour={getColour().sensebox}> <Category name="SD" colour={getColour().sensebox}>

View File

@ -11,6 +11,7 @@ import LanguageSelector from "./LanguageSelector";
import RenderSelector from "./RenderSelector"; import RenderSelector from "./RenderSelector";
import StatsSelector from "./StatsSelector"; import StatsSelector from "./StatsSelector";
import OtaSelector from "./OtaSelector"; import OtaSelector from "./OtaSelector";
import SoundsSelector from "./SoundsSelector";
import Button from "@material-ui/core/Button"; import Button from "@material-ui/core/Button";
import Paper from "@material-ui/core/Paper"; import Paper from "@material-ui/core/Paper";
@ -48,6 +49,9 @@ class Settings extends Component {
<Paper style={{ margin: "10px 0px", padding: "10px" }}> <Paper style={{ margin: "10px 0px", padding: "10px" }}>
<OtaSelector /> <OtaSelector />
</Paper> </Paper>
<Paper style={{ margin: "10px 0px", padding: "10px" }}>
<SoundsSelector />
</Paper>
<Button <Button
style={{ marginTop: "10px" }} style={{ marginTop: "10px" }}

View File

@ -0,0 +1,63 @@
import React, { Component } from "react";
import PropTypes from "prop-types";
import { connect } from "react-redux";
import { setSounds } from "../../actions/generalActions";
import * as Blockly from "blockly/core";
import InputLabel from "@material-ui/core/InputLabel";
import MenuItem from "@material-ui/core/MenuItem";
import FormControl from "@material-ui/core/FormControl";
import Select from "@material-ui/core/Select";
import Typography from "@material-ui/core/Typography";
import FormHelperText from "@material-ui/core/FormHelperText";
class SoundsSelector extends Component {
componentDidMount() {
// Ensure that Blockly.setLocale is adopted in the component.
// Otherwise, the text will not be displayed until the next update of the component.
this.forceUpdate();
}
render() {
return (
<div>
<Typography style={{ fontWeight: "bold" }}>
{Blockly.Msg.settings_sounds}
</Typography>
<FormHelperText
style={{ color: "black", lineHeight: 1.3, marginBottom: "8px" }}
>
{Blockly.Msg.settings_sounds_text}
</FormHelperText>
<FormControl>
<InputLabel id="demo-simple-select-label">
{Blockly.Msg.settings_sounds}
</InputLabel>
<Select
labelId="demo-simple-select-label"
id="demo-simple-select"
value={this.props.sounds}
onChange={(e) => this.props.setSounds(e.target.value)}
>
<MenuItem value={false}>{Blockly.Msg.settings_ota_off}</MenuItem>
<MenuItem value={true}>{Blockly.Msg.settings_ota_on}</MenuItem>
</Select>
</FormControl>
</div>
);
}
}
SoundsSelector.propTypes = {
setSounds: PropTypes.func.isRequired,
language: PropTypes.string.isRequired,
sounds: PropTypes.string.isRequired,
};
const mapStateToProps = (state) => ({
sounds: state.general.sounds,
language: state.general.language,
});
export default connect(mapStateToProps, { setSounds })(SoundsSelector);

View File

@ -2,6 +2,7 @@ import {
VISIT, VISIT,
LANGUAGE, LANGUAGE,
RENDERER, RENDERER,
SOUNDS,
STATISTICS, STATISTICS,
PLATFORM, PLATFORM,
} from "../actions/types"; } from "../actions/types";
@ -20,6 +21,14 @@ const initialPlatform = () => {
return getPlatform(); return getPlatform();
}; };
const initialSounds = () => {
if (window.localStorage.getItem("sounds")) {
return window.localStorage.getItem("sounds");
} else {
return "off";
}
};
const getPlatform = () => { const getPlatform = () => {
if (window.localStorage.getItem("platform")) { if (window.localStorage.getItem("platform")) {
return JSON.parse(window.localStorage.getItem("platform")); return JSON.parse(window.localStorage.getItem("platform"));
@ -62,6 +71,7 @@ const initialState = {
pageVisits: 0, // detect if previous URL was pageVisits: 0, // detect if previous URL was
language: initialLanguage(), language: initialLanguage(),
renderer: initialRenderer(), renderer: initialRenderer(),
sounds: initialSounds(),
statistics: initialStatistics(), statistics: initialStatistics(),
platform: initialPlatform(), platform: initialPlatform(),
}; };
@ -90,6 +100,12 @@ export default function foo(state = initialState, action) {
...state, ...state,
renderer: action.payload, renderer: action.payload,
}; };
case SOUNDS:
window.localStorage.setItem("sounds", action.payload);
return {
...state,
sounds: action.payload,
};
case STATISTICS: case STATISTICS:
window.localStorage.setItem("statistics", action.payload); window.localStorage.setItem("statistics", action.payload);
return { return {