Update actions/reducers
This commit is contained in:
parent
66c8ab1a8c
commit
f0a0ad776d
5 changed files with 25 additions and 5 deletions
|
|
@ -9,6 +9,7 @@ export const RECEIVE_POST = 'RECEIVE_POST';
|
||||||
export const REQUEST_POSTS = 'REQUEST_POSTS';
|
export const REQUEST_POSTS = 'REQUEST_POSTS';
|
||||||
|
|
||||||
export const MARK_POST_READ = 'MARK_POST_READ';
|
export const MARK_POST_READ = 'MARK_POST_READ';
|
||||||
|
export const MARKING_POST = 'MARKING_POST';
|
||||||
|
|
||||||
export const requestPosts = () => ({ type: REQUEST_POSTS });
|
export const requestPosts = () => ({ type: REQUEST_POSTS });
|
||||||
|
|
||||||
|
|
@ -30,10 +31,14 @@ export const postRead = (post, section) => ({
|
||||||
section,
|
section,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export const markingPostRead = () => ({ type: MARKING_POST });
|
||||||
|
|
||||||
export const markPostRead = (post, token) => {
|
export const markPostRead = (post, token) => {
|
||||||
return (dispatch, getState) => {
|
return (dispatch, getState) => {
|
||||||
const { selected } = getState();
|
const { selected } = getState();
|
||||||
|
|
||||||
|
dispatch(markingPostRead());
|
||||||
|
|
||||||
const url = `/api/posts/${post.id}/`;
|
const url = `/api/posts/${post.id}/`;
|
||||||
const options = {
|
const options = {
|
||||||
method: 'PATCH',
|
method: 'PATCH',
|
||||||
|
|
|
||||||
|
|
@ -130,7 +130,6 @@ const mapDispatchToProps = dispatch => ({
|
||||||
markPostRead: (post, token) => dispatch(markPostRead(post, token)),
|
markPostRead: (post, token) => dispatch(markPostRead(post, token)),
|
||||||
});
|
});
|
||||||
|
|
||||||
// TODO use different boolean for saving mark post as read state
|
const mapStateToProps = state => ({ isMarkingPost: state.posts.isMarking });
|
||||||
const mapStateToProps = state => ({ isMarkingPost: state.posts.isFetching });
|
|
||||||
|
|
||||||
export default connect(mapStateToProps, mapDispatchToProps)(PostModal);
|
export default connect(mapStateToProps, mapDispatchToProps)(PostModal);
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,8 @@ import { CATEGORY_TYPE, RULE_TYPE } from '../constants.js';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
SELECT_POST,
|
SELECT_POST,
|
||||||
|
MARKING_POST,
|
||||||
|
MARK_POST_READ,
|
||||||
RECEIVE_POST,
|
RECEIVE_POST,
|
||||||
RECEIVE_POSTS,
|
RECEIVE_POSTS,
|
||||||
REQUEST_POSTS,
|
REQUEST_POSTS,
|
||||||
|
|
@ -13,7 +15,7 @@ import { SELECT_CATEGORY } from '../actions/categories.js';
|
||||||
import { SELECT_RULE } from '../actions/rules.js';
|
import { SELECT_RULE } from '../actions/rules.js';
|
||||||
import { MARK_SECTION_READ } from '../actions/selected.js';
|
import { MARK_SECTION_READ } from '../actions/selected.js';
|
||||||
|
|
||||||
const defaultState = { items: {}, isFetching: false };
|
const defaultState = { items: {}, isFetching: false, isMarking: false };
|
||||||
|
|
||||||
export const posts = (state = { ...defaultState }, action) => {
|
export const posts = (state = { ...defaultState }, action) => {
|
||||||
switch (action.type) {
|
switch (action.type) {
|
||||||
|
|
@ -62,6 +64,10 @@ export const posts = (state = { ...defaultState }, action) => {
|
||||||
...updatedPosts,
|
...updatedPosts,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
case MARKING_POST:
|
||||||
|
return { ...state, isMarking: true };
|
||||||
|
case MARK_POST_READ:
|
||||||
|
return { ...state, isMarking: false };
|
||||||
default:
|
default:
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,12 +14,18 @@ describe('post actions', () => {
|
||||||
fetchMock.restore();
|
fetchMock.restore();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should create an action request posts', () => {
|
it('should create an action to request posts', () => {
|
||||||
const expectedAction = { type: actions.REQUEST_POSTS };
|
const expectedAction = { type: actions.REQUEST_POSTS };
|
||||||
|
|
||||||
expect(actions.requestPosts()).toEqual(expectedAction);
|
expect(actions.requestPosts()).toEqual(expectedAction);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should create an action to mark a post read', () => {
|
||||||
|
const expectedAction = { type: actions.MARKING_POST };
|
||||||
|
|
||||||
|
expect(actions.markingPostRead()).toEqual(expectedAction);
|
||||||
|
});
|
||||||
|
|
||||||
it('should create an action receive a post', () => {
|
it('should create an action receive a post', () => {
|
||||||
const post = {
|
const post = {
|
||||||
id: 2067,
|
id: 2067,
|
||||||
|
|
@ -147,6 +153,7 @@ describe('post actions', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
const expectedActions = [
|
const expectedActions = [
|
||||||
|
{ type: actions.MARKING_POST },
|
||||||
{
|
{
|
||||||
type: actions.RECEIVE_POST,
|
type: actions.RECEIVE_POST,
|
||||||
post: { ...post, read: true },
|
post: { ...post, read: true },
|
||||||
|
|
@ -362,6 +369,7 @@ describe('post actions', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
const expectedActions = [
|
const expectedActions = [
|
||||||
|
{ type: actions.MARKING_POST },
|
||||||
{ type: actions.RECEIVE_POST, post: {} },
|
{ type: actions.RECEIVE_POST, post: {} },
|
||||||
{ type: errorActions.RECEIVE_API_ERROR, error: TypeError(errorMessage) },
|
{ type: errorActions.RECEIVE_API_ERROR, error: TypeError(errorMessage) },
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ describe('post actions', () => {
|
||||||
it('should return state after requesting posts', () => {
|
it('should return state after requesting posts', () => {
|
||||||
const action = { type: actions.REQUEST_POSTS };
|
const action = { type: actions.REQUEST_POSTS };
|
||||||
|
|
||||||
const expectedState = { ...defaultState, isFetching: true };
|
const expectedState = { ...defaultState, isFetching: true, isMarking: false };
|
||||||
|
|
||||||
expect(reducer(undefined, action)).toEqual(expectedState);
|
expect(reducer(undefined, action)).toEqual(expectedState);
|
||||||
});
|
});
|
||||||
|
|
@ -40,6 +40,7 @@ describe('post actions', () => {
|
||||||
const expectedState = {
|
const expectedState = {
|
||||||
...defaultState,
|
...defaultState,
|
||||||
isFetching: false,
|
isFetching: false,
|
||||||
|
isMarking: false,
|
||||||
items: { [post.id]: post },
|
items: { [post.id]: post },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -85,6 +86,7 @@ describe('post actions', () => {
|
||||||
const expectedState = {
|
const expectedState = {
|
||||||
...defaultState,
|
...defaultState,
|
||||||
isFetching: false,
|
isFetching: false,
|
||||||
|
isMarking: false,
|
||||||
items: expectedPosts,
|
items: expectedPosts,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue