1
|
import { AsyncThunkAction, PayloadAction, createSlice } from "@reduxjs/toolkit"
|
2
|
import { deleteNote, getAllNotes, createNote, updateNote } from "../actions/notesThunks"
|
3
|
import { Certainty, ItemViewState, Item } from "../../types/item";
|
4
|
import { Note, NotesViewState } from "../../types/note";
|
5
|
|
6
|
|
7
|
|
8
|
const initialState: NotesViewState = {
|
9
|
notes: [],
|
10
|
notesLoading: true, // for reading notes
|
11
|
requestPending: false, // for updating or deleting note
|
12
|
triggerRefresh: 0,
|
13
|
lastError: ""
|
14
|
}
|
15
|
|
16
|
export const noteSlice = createSlice({
|
17
|
name: "note",
|
18
|
initialState: initialState,
|
19
|
reducers: {
|
20
|
},
|
21
|
extraReducers: (builder) => {
|
22
|
// getAllNotes
|
23
|
builder.addCase(getAllNotes.fulfilled, (state, action) => {
|
24
|
state.notesLoading = false;
|
25
|
state.lastError = "";
|
26
|
state.notes = action.payload.notes;
|
27
|
})
|
28
|
builder.addCase(getAllNotes.pending, (state, action) => {
|
29
|
state.notesLoading = true;
|
30
|
})
|
31
|
builder.addCase(getAllNotes.rejected, (state, action) => {
|
32
|
state.notesLoading = false;
|
33
|
state.lastError = action.error.message
|
34
|
})
|
35
|
|
36
|
// deleteNote
|
37
|
builder.addCase(deleteNote.pending, (state, action) => {
|
38
|
state.requestPending = true;
|
39
|
})
|
40
|
builder.addCase(deleteNote.fulfilled, (state, action) => {
|
41
|
state.lastError = "";
|
42
|
state.triggerRefresh++;
|
43
|
state.requestPending = false;
|
44
|
})
|
45
|
builder.addCase(deleteNote.rejected, (state, action) => {
|
46
|
state.requestPending = false;
|
47
|
state.lastError = action.error.message
|
48
|
})
|
49
|
|
50
|
// createNote
|
51
|
builder.addCase(createNote.pending, (state, action) => {
|
52
|
state.requestPending = true;
|
53
|
})
|
54
|
builder.addCase(createNote.fulfilled, (state, action) => {
|
55
|
state.notes = [action.payload.createdNote ,...state.notes]
|
56
|
state.lastError = "";
|
57
|
state.triggerRefresh++;
|
58
|
state.requestPending = false;
|
59
|
})
|
60
|
builder.addCase(createNote.rejected, (state, action) => {
|
61
|
state.requestPending = false;
|
62
|
state.lastError = action.error.message
|
63
|
})
|
64
|
|
65
|
// createNote
|
66
|
builder.addCase(updateNote.pending, (state, action) => {
|
67
|
state.requestPending = true;
|
68
|
})
|
69
|
builder.addCase(updateNote.fulfilled, (state, action) => {
|
70
|
state.requestPending = false;
|
71
|
state.notes = state.notes.map((note) => {
|
72
|
if (note.uuid === action.payload.updateNote.uuid) {
|
73
|
return action.payload.updateNote;
|
74
|
} else {
|
75
|
return note;
|
76
|
}
|
77
|
});
|
78
|
state.lastError = "";
|
79
|
});
|
80
|
builder.addCase(updateNote.rejected, (state, action) => {
|
81
|
state.requestPending = false;
|
82
|
state.lastError = action.error.message
|
83
|
})
|
84
|
}
|
85
|
})
|
86
|
|
87
|
export default noteSlice.reducer
|