48 lines
1.3 KiB
JavaScript
48 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}`);
|
|
}
|
|
}
|
|
}
|