-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbookSlice.ts
More file actions
60 lines (56 loc) · 1.5 KB
/
bookSlice.ts
File metadata and controls
60 lines (56 loc) · 1.5 KB
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
const BOOK_INITIAL_STATE: book.State = {
isLoading: false,
books: [],
selectedBook: undefined,
selectedBookId: "",
};
const bookSlice = createSlice({
name: "books",
initialState: BOOK_INITIAL_STATE,
reducers: {
getBooks: (state: book.State) => {
state.isLoading = true;
},
getBooksDone: (state: book.State, action: PayloadAction<book.Book[]>) => {
state.isLoading = false;
state.books = action.payload;
},
getBooksError: (state: book.State) => {
state.isLoading = false;
},
getBookDetail: (state: book.State, action: PayloadAction<book.State>) => {
state.isLoading = true;
},
getBookDetailDone: (
state: book.State,
action: PayloadAction<book.State>
) => {
state.isLoading = false;
state.selectedBook = action.payload;
},
getBookDetailError: (state: book.State) => {
state.isLoading = false;
},
selectBook: (state: book.State, action: PayloadAction<book.State>) => {
state.selectedBookId = action.payload;
},
updateFavourite: (state, action) => {
const book = state.find((books) => books.id === action.payload.id);
if (book) {
book.isFavourited = action.payload.favourite;
}
},
},
});
export const {
getBooks,
getBooksDone,
getBooksError,
getBookDetail,
getBookDetailDone,
getBookDetailError,
updateFavourite,
selectBook,
} = bookSlice.actions;
export default bookSlice.reducer;