-
Notifications
You must be signed in to change notification settings - Fork 0
/
Reducer.jsx
37 lines (34 loc) · 874 Bytes
/
Reducer.jsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import { v4 as uuidv4 } from "uuid";
export const reducer = (state, action) => {
const { type, payload } = action;
switch (type) {
case "ADD_ITEM": {
const { item, amount } = payload;
const newItem = {
id: uuidv4(),
item,
isShopped: false,
amount,
};
return [...state, newItem];
}
case "ITEM_SHOPPED": {
const { id } = payload;
return state.map((item) =>
item.id === id ? { ...item, isShopped: !item.isShopped } : item
);
}
case "DELETE_ITEM": {
const { id } = payload;
return state.filter((item) => item.id !== id);
}
case "SET_AMOUNT": {
const { id, amount } = payload;
return state.map((item) => (item.id === id ? { ...item, amount } : item));
}
case "CLEAR_LIST":
return [];
default:
return state;
}
};