49 lines
1.3 KiB
JavaScript
49 lines
1.3 KiB
JavaScript
|
import handleUserClicked from "./userpathhandler";
|
||
|
|
||
|
export default function reduce(state, action) {
|
||
|
switch (action.type) {
|
||
|
case 'started_loading': {
|
||
|
return {
|
||
|
...state,
|
||
|
maze: null,
|
||
|
loading: true,
|
||
|
errorMessage: null
|
||
|
}
|
||
|
}
|
||
|
case 'loaded_maze': {
|
||
|
return {
|
||
|
...state,
|
||
|
loading: false,
|
||
|
maze: action.maze,
|
||
|
userPath: []
|
||
|
}
|
||
|
}
|
||
|
case 'loading_failed': {
|
||
|
return {
|
||
|
...state,
|
||
|
loading: false,
|
||
|
errorMessage: `Failed to load maze. Reason: ${action.reason}`
|
||
|
}
|
||
|
}
|
||
|
case 'toggled_show_solution': {
|
||
|
return {
|
||
|
...state,
|
||
|
showSolution: action.value
|
||
|
}
|
||
|
}
|
||
|
case 'closed_message_banner': {
|
||
|
return {
|
||
|
...state,
|
||
|
errorMessage: null
|
||
|
}
|
||
|
}
|
||
|
case 'clicked_cell': {
|
||
|
// There's so much logic involved, externalize that into its own file.
|
||
|
return handleUserClicked(state, action.x, action.y);
|
||
|
}
|
||
|
default: {
|
||
|
throw new Error(`Unknown action: ${action.type}`);
|
||
|
}
|
||
|
}
|
||
|
}
|