diff --git a/firestore.rules b/firestore.rules index fc8ee76..e8f070f 100644 --- a/firestore.rules +++ b/firestore.rules @@ -61,11 +61,12 @@ service cloud.firestore { function verifyFieldTypes() { return verifyBoolType("sound") && + verifyBoolType("coloredEdges") && verifyThemeValue(); } function getPossibleFields() { - let requiredFields = ["sound", "theme"]; + let requiredFields = ["sound", "theme", "coloredEdges"]; let optionalFields = []; let allFields = requiredFields.concat(optionalFields); return [requiredFields, allFields]; diff --git a/functions/index.js b/functions/index.js index f99cbc3..6e8df5b 100644 --- a/functions/index.js +++ b/functions/index.js @@ -33,6 +33,7 @@ exports.userCreated = functions.auth.user().onCreate((user) => { return db.collection("users").doc(user.uid).set({ sound: true, theme: "default", + coloredEdges: false, }); }); }); diff --git a/src/App.js b/src/App.js index c4bae5d..3a46891 100644 --- a/src/App.js +++ b/src/App.js @@ -121,6 +121,7 @@ class App extends React.Component { userDataPresent: false, sound: true, theme: "default", + coloredEdges: false, pageLoading: true, }; @@ -161,9 +162,11 @@ class App extends React.Component { .then((userDoc) => { newState.sound = userDoc.data().sound; newState.theme = userDoc.data().theme; + newState.coloredEdges = userDoc.data().coloredEdges; }).catch((error) => { newState.sound = true; newState.theme = "default"; + newState.coloredEdges = false; }); } @@ -234,6 +237,17 @@ class App extends React.Component { }); } + handleColoredEdgesChange = (newColoredEdges, globalChange = false) => { + if (globalChange) firebase.firestore().collection("users") + .doc(this.state.user.uid) + .update({ + coloredEdges: newColoredEdges, + }); + this.setState({ + coloredEdges: newColoredEdges, + }); + } + acceptCookies = () => { window.removeEventListener('resize', this.updateCookieNoticeMargins); this.cookieNoticeHeight = this.cookieNotice.offsetHeight; @@ -285,10 +299,14 @@ class App extends React.Component { - + - + + { + this.state.coloredEdges && +
+ }
diff --git a/src/Progress.js b/src/Progress.js index 8a5f4d6..7400d89 100644 --- a/src/Progress.js +++ b/src/Progress.js @@ -61,6 +61,7 @@ export default withRouter(class Progress extends React.Component { showSettings: false, soundInput: this.props.sound, themeInput: this.props.theme, + coloredEdgesInput: this.props.coloredEdges, setIds: [], attemptNumber: 1, attemptHistory: {}, @@ -232,9 +233,16 @@ export default withRouter(class Progress extends React.Component { }); } + handleColoredEdgesInputChange = (event) => { + this.setState({ + coloredEdgesInput: event.target.checked, + }); + } + saveSettings = (globalChange) => { this.props.handleSoundChange(this.state.soundInput, globalChange); this.props.handleThemeChange(this.state.themeInput, globalChange); + this.props.handleColoredEdgesChange(this.state.coloredEdgesInput, globalChange); this.hideSettings(); } @@ -702,9 +710,11 @@ export default withRouter(class Progress extends React.Component { saveSettings={this.saveSettings} handleSoundInputChange={this.handleSoundInputChange} handleThemeInputChange={this.handleThemeInputChange} + handleColoredEdgesInputChange={this.handleColoredEdgesInputChange} themes={this.props.themes} soundInput={this.state.soundInput} themeInput={this.state.themeInput} + coloredEdgesInput={this.state.coloredEdgesInput} /> diff --git a/src/Settings.js b/src/Settings.js index 804f09a..cd91892 100644 --- a/src/Settings.js +++ b/src/Settings.js @@ -22,6 +22,7 @@ export default withRouter(class Settings extends Component { ], soundInput: this.props.sound, themeInput: this.props.theme, + coloredEdgesInput: this.props.coloredEdges, }; let isMounted = true; @@ -60,9 +61,16 @@ export default withRouter(class Settings extends Component { }); } + handleColoredEdgesInputChange = (event) => { + this.setState({ + coloredEdgesInput: event.target.checked, + }); + } + saveSettings = (globalChange) => { this.props.handleSoundChange(this.state.soundInput, globalChange); this.props.handleThemeChange(this.state.themeInput, globalChange); + this.props.handleColoredEdgesChange(this.state.coloredEdgesInput, globalChange); this.props.history.push("/"); } @@ -77,9 +85,11 @@ export default withRouter(class Settings extends Component { saveSettings={this.saveSettings} handleSoundInputChange={this.handleSoundInputChange} handleThemeInputChange={this.handleThemeInputChange} + handleColoredEdgesInputChange={this.handleColoredEdgesInputChange} themes={this.props.themes} soundInput={this.state.soundInput} themeInput={this.state.themeInput} + coloredEdgesInput={this.state.coloredEdgesInput} />
diff --git a/src/SettingsContent.js b/src/SettingsContent.js index f677a34..9fe143e 100644 --- a/src/SettingsContent.js +++ b/src/SettingsContent.js @@ -10,17 +10,27 @@ export default class SettingsContent extends Component { return ( <>

Settings

- +
+ + +

Theme

-
+
{ this.props.themes.map((theme) =>