49 lines
1.4 KiB
JavaScript
49 lines
1.4 KiB
JavaScript
export const menuReducer = (state, action) => {
|
|
switch (action) {
|
|
case 'show': return true;
|
|
case 'hide': return false;
|
|
case 'toggle': return !state;
|
|
default: throw new Error("menustate unknown to reducer");
|
|
}
|
|
}
|
|
|
|
export const sessionReducer = (state, action) => {
|
|
switch (action.type) {
|
|
case 'start': return { active: true, token: action.token, username: action.username }
|
|
case 'end': return { active: false, token: null, username: null, exiry: null }
|
|
default: throw new Error("action type unknown to session reducer");
|
|
}
|
|
}
|
|
|
|
export const userTableReducer = (state, action) => {
|
|
let user = action.user;
|
|
switch (action.type) {
|
|
case 'create': return [...state, { line: state.length, ...user }];
|
|
case 'delete': {
|
|
let newstate = [];
|
|
let newindex = 0;
|
|
state.forEach((u, i) => {
|
|
if (user.uid && u.uid != user.uid || user.line && i != user.line)
|
|
newstate.push({ ...u, line: newindex++ })
|
|
return newstate;
|
|
}, []);
|
|
return newstate;
|
|
}
|
|
case 'update': {
|
|
let newstate = [];
|
|
state.forEach((u, i) => {
|
|
if (user.uid && u.uid == user.uid || user.line && i == user.line)
|
|
newstate.push(user);
|
|
else
|
|
newstate.push(u);
|
|
});
|
|
return [...newstate]
|
|
}
|
|
case 'import':
|
|
return action.imported;
|
|
case 'reset':
|
|
return [];
|
|
default:
|
|
throw new Error("action type unknown to usertable reducer");
|
|
}
|
|
} |