Skip to content

Commit 3c0905b

Browse files
authored
feat(With Member): Set isLoading when updating t he member (#54)
1 parent 967350e commit 3c0905b

File tree

4 files changed

+19
-6
lines changed

4 files changed

+19
-6
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -457,6 +457,8 @@ The render will also be passed a function to call for logging out, and another t
457457

458458
On initial load, the `isLoading` prop will be set, which will become false when the user is loaded. Use this field to avoid showing a Login Button while fetch is happening.
459459

460+
In order to update the current member, call `checkForMemberUpdated`.
461+
460462
```javascript
461463
import { WithMember } from '@quintype/components';
462464

src/components/with-member.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import React from "react";
22
import { connect } from "react-redux";
33
import PropTypes from "prop-types";
44
import { getRequest } from './api-client';
5-
import { MEMBER_UPDATED } from '../store/actions';
5+
import { MEMBER_UPDATED, MEMBER_BEING_LOADED } from '../store/actions';
66

77
let loadedMember = false;
88

@@ -13,6 +13,7 @@ class WithMemberBase extends React.Component {
1313
}
1414

1515
checkForMemberUpdated() {
16+
this.props.memberBeingLoaded();
1617
return getRequest('/api/v1/members/me')
1718
.forbidden(() => this.props.memberUpdated(null))
1819
.unauthorized(() => this.props.memberUpdated(null))
@@ -41,12 +42,13 @@ export const WithMember = connect(mapStateToProps, mapDispatchToProps)(WithMembe
4142
function mapStateToProps(state) {
4243
return {
4344
member: state.member || null,
44-
isLoading: state.member === false,
45+
isLoading: state.memberLoading,
4546
}
4647
}
4748

4849
function mapDispatchToProps(dispatch) {
4950
return {
51+
memberBeingLoaded: () => dispatch({ type: MEMBER_BEING_LOADED }),
5052
memberUpdated: member => dispatch({ type: MEMBER_UPDATED, member }),
5153
logout: () => getRequest('/api/logout').res(() => dispatch({ type: MEMBER_UPDATED, member: null }))
5254
};

src/store/actions.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ export const HAMBURGER_CLOSED = 'QT-HAMBURGER_CLOSED';
99

1010
export const SERVICE_WORKER_UPDATED = 'QT-SERVICE_WORKER_UPDATED';
1111

12-
export const MEMBER_UPDATED = 'QT-MEMBER_UPDATED';
12+
export const MEMBER_UPDATED = 'QT-MEMBER_UPDATED';
13+
export const MEMBER_BEING_LOADED = 'QT-MEMBER_BEING_LOADED';

src/store/reducers.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
HAMBURGER_CLICKED,
88
HAMBURGER_CLOSED,
99
MEMBER_UPDATED,
10+
MEMBER_BEING_LOADED,
1011
} from './actions';
1112

1213
function breakingNewsReducer(state = [], action) {
@@ -41,19 +42,26 @@ function hamburgerOpenedReducer(state = false, action) {
4142
}
4243
}
4344

44-
// member is set to false when loading, then it is either
45-
// null or a member object
46-
function memberReducer(state = false, action) {
45+
function memberReducer(state = null, action) {
4746
switch(action.type) {
4847
case MEMBER_UPDATED: return action.member;
4948
default: return state;
5049
}
5150
}
5251

52+
function memberLoadingReducer(state = true, action) {
53+
switch (action.type) {
54+
case MEMBER_BEING_LOADED: return true;
55+
case MEMBER_UPDATED: return false;
56+
default: return state;
57+
}
58+
}
59+
5360
export const ComponentReducers = {
5461
breakingNews: breakingNewsReducer,
5562
clientSideRendered: clientSideRenderedReducer,
5663
pageLoading: pageLoadingReducer,
5764
hamburgerOpened: hamburgerOpenedReducer,
5865
member: memberReducer,
66+
memberLoading: memberLoadingReducer,
5967
};

0 commit comments

Comments
 (0)