-
Notifications
You must be signed in to change notification settings - Fork 0
/
postDelete.js
67 lines (55 loc) · 1.32 KB
/
postDelete.js
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
61
62
63
64
65
66
67
const POST_DELETE_REQUESTED = 'POST_DELETE_REQUESTED';
const POST_DELETE_SUCCEEDED = 'POST_DELETE_SUCCEEDED';
// --- Request
// Action creator
const requestAction = postId => ({
type: POST_DELETE_REQUESTED,
postId,
});
// Action handler
const onRequest = {
[POST_DELETE_REQUESTED]:
// show spinner
(state, { postId }) =>
state.update(
'processingPosts',
processingPosts => processingPosts.add(postId),
),
};
// --- Success
// Action creator
const successAction = postId => ({
type: POST_DELETE_SUCCEEDED,
postId,
});
// Action handlers
const onSuccess = {
[POST_DELETE_SUCCEEDED]: [
// 1. hide spinner
(state, { postId }) =>
state.update(
'processingPosts',
processingPosts => processingPosts.delete(postId),
),
// 2. remove post entity
{
leaf: ['entities', 'posts'],
reduce:
(state, { postId }) =>
state
.updateIn(['index'], index => index.delete(postId))
.updateIn(['entities'], entities => entities.delete(postId)),
},
],
};
// --- Exports
// Thunk
export const deletePost = postId => dispatch => {
dispatch(requestAction(postId));
setTimeout(() => dispatch(successAction(postId)), 1000);
};
// Action handlers
export const onPostDelete = {
...onRequest,
...onSuccess,
};