diff --git a/minimal-app/src/app/store.js b/minimal-app/src/app/store.js index c9650e098d75f6d4239cd1e92a93fd5295d548c1..6c672233878603802caccfc76d14b93e3e8eb9dc 100644 --- a/minimal-app/src/app/store.js +++ b/minimal-app/src/app/store.js @@ -1,8 +1,10 @@ import { configureStore } from '@reduxjs/toolkit'; import counterSlice from '../features/counter/counterSlice.js'; +import invisibleMazeSlice from '../features/invisibleMaze/invisibleMazeSlice.js'; export const store = configureStore({ reducer: { [counterSlice.name]: counterSlice.reducer, + [invisibleMazeSlice.name]: invisibleMazeSlice.reducer, }, }); diff --git a/minimal-app/src/features/invisibleMaze/invisibleMaze.js b/minimal-app/src/features/invisibleMaze/invisibleMaze.js index 87f75147b2f78ff7d4502b57ef56a164ee3a370f..bb875f73d838e2b10e22231baf3c3d1b39efdfe2 100644 --- a/minimal-app/src/features/invisibleMaze/invisibleMaze.js +++ b/minimal-app/src/features/invisibleMaze/invisibleMaze.js @@ -1,11 +1,63 @@ import React from 'react'; import styles from './invisibleMaze.module.css'; +import { useSelector, useDispatch } from 'react-redux'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; + +import { + selectStepOne, + selectStepTwo, + selectStepThree, + selectButtonOne, + selectButtonTwo, + selectButtonThree, + setAllButtons, + setButtonOne, + setButtonTwo, + setButtonThree, +} from './invisibleMazeSlice.js'; + export function InvisibleMaze() { + const stepOne = useSelector(selectStepOne); + const stepTwo = useSelector(selectStepTwo); + const stepThree = useSelector(selectStepThree); + const buttonOne = useSelector(selectButtonOne); + const buttonTwo = useSelector(selectButtonTwo); + const buttonThree = useSelector(selectButtonThree); + const dispatch = useDispatch(); + + const mazeStepOneCorrect = classNames({ + [styles.panel] : buttonOne === 0, + [styles.correct] : buttonOne === stepOne, + }); + const onClickPanelOne = () => dispatch(setButtonOne({ + buttonOne : 1, + })); + const mazeStepTwoCorrect = classNames({ + [styles.panel] : buttonTwo === 0, + [styles.correct] : buttonTwo === stepTwo, + }); + const onClickPanelTwo = () => dispatch(setButtonTwo({ + buttonTwo : 2, + })); + const mazeStepThreeCorrect = classNames({ + [styles.panel] : buttonThree === 0, + [styles.correct] : buttonThree === stepThree, + }); + const onClickPanelThree = () => dispatch(setButtonThree({ + buttonThree : 3, + })); + const resetMaze = () => dispatch(setAllButtons({ + buttonOne : 0, + buttonThree : 0, + buttonTwo : 0, + })); + return ( <main> <div className={styles.maze}> - <button className={styles.panel}> + <button className={mazeStepOneCorrect} onClick={onClickPanelOne}> </button> <button className={styles.panel}> </button> @@ -15,7 +67,7 @@ export function InvisibleMaze() { <div className={styles.maze}> <button className={styles.panel}> </button> - <button className={styles.panel}> + <button className={mazeStepTwoCorrect} onClick={onClickPanelTwo}> </button> <button className={styles.panel}> </button> @@ -25,19 +77,13 @@ export function InvisibleMaze() { </button> <button className={styles.panel}> </button> - <button className={styles.panel}> + <button className={mazeStepThreeCorrect}onClick={onClickPanelThree}> </button> </div> <div className={styles.controlPanel}> - <button className={styles.create}> - {"Create Maze"} - </button> - <button className={styles.reset}> + <button className={styles.reset} onClick={resetMaze}> {"Reset Maze"} </button> - <button className={styles.play}> - {"Play Maze"} - </button> </div> </main> ); diff --git a/minimal-app/src/features/invisibleMaze/invisibleMaze.module.css b/minimal-app/src/features/invisibleMaze/invisibleMaze.module.css index e55ae8ef859cb95b194d2763c6515eedfde167e0..a1b4495a56baee0a116f74464a42992b7efe8480 100644 --- a/minimal-app/src/features/invisibleMaze/invisibleMaze.module.css +++ b/minimal-app/src/features/invisibleMaze/invisibleMaze.module.css @@ -2,18 +2,18 @@ width: 50%; height: 5em; } -.create { +.correct { width: 50%; height: 5em; - font-weight: bold; + background-color: darkgreen; } -.reset { +.wrong { width: 50%; height: 5em; - font-weight: bold; + color: darkred; } -.play { - width: 50%; +.reset { + width: 100%; height: 5em; font-weight: bold; } diff --git a/minimal-app/src/features/invisibleMaze/invisibleMazeSlice.js b/minimal-app/src/features/invisibleMaze/invisibleMazeSlice.js new file mode 100644 index 0000000000000000000000000000000000000000..0db84f917aeaf3e4971bb163e3f131e5a1486ccb --- /dev/null +++ b/minimal-app/src/features/invisibleMaze/invisibleMazeSlice.js @@ -0,0 +1,68 @@ +import { createSlice } from '@reduxjs/toolkit'; + +const invisibleMazeSlice = createSlice({ + name: 'invisibleMaze', + initialState: { + stepOne :1, + stepTwo :2, + stepThree :3, + buttonOne :0, + buttonTwo :0, + buttonThree : 0, + }, + reducers: { + setButtonOne: (invisibleMaze, action) => { + const { + buttonOne, + } = action.payload; + invisibleMaze.buttonOne = buttonOne; + }, + setButtonTwo: (invisibleMaze, action) => { + const { + buttonTwo, + } = action.payload; + invisibleMaze.buttonTwo = buttonTwo; + }, + setButtonThree: (invisibleMaze, action) => { + const { + buttonThree, + } = action.payload; + invisibleMaze.buttonThree = buttonThree; + }, + setAllButtons: (invisibleMaze, action) => { + const { + buttonThree,buttonOne,buttonTwo, + } = action.payload; + invisibleMaze.buttonThree = buttonThree; + invisibleMaze.buttonTwo = buttonTwo; + invisibleMaze.buttonOne = buttonOne; + }, + }, +}); +export default invisibleMazeSlice; + +export const { + setButtonOne, + setButtonTwo, + setButtonThree, + setAllButtons, +} = invisibleMazeSlice.actions; + +export function selectStepOne(state) { + return state.invisibleMaze.stepOne; +} +export function selectStepTwo(state) { + return state.invisibleMaze.stepTwo; +} +export function selectStepThree(state) { + return state.invisibleMaze.stepThree; +} +export function selectButtonOne(state) { + return state.invisibleMaze.buttonOne; +} +export function selectButtonTwo(state) { + return state.invisibleMaze.buttonTwo; +} +export function selectButtonThree(state) { + return state.invisibleMaze.buttonThree; +} \ No newline at end of file