feat(profile): Add Profile and components
This commit is contained in:
committed by
mrugesh mohapatra
parent
491912448b
commit
987da19254
@@ -1,7 +1,12 @@
|
||||
import { call, put, takeEvery } from 'redux-saga/effects';
|
||||
|
||||
import { fetchUserComplete, fetchUserError } from './';
|
||||
import { getSessionUser } from '../utils/ajax';
|
||||
import {
|
||||
fetchUserComplete,
|
||||
fetchUserError,
|
||||
fetchProfileForUserError,
|
||||
fetchProfileForUserComplete
|
||||
} from './';
|
||||
import { getSessionUser, getUserProfile } from '../utils/ajax';
|
||||
import { jwt } from './cookieValues';
|
||||
|
||||
function* fetchSessionUser() {
|
||||
@@ -13,13 +18,30 @@ function* fetchSessionUser() {
|
||||
const {
|
||||
data: { user = {}, result = '' }
|
||||
} = yield call(getSessionUser);
|
||||
const appUser = user[result];
|
||||
const appUser = user[result] || {};
|
||||
yield put(fetchUserComplete({ user: appUser, username: result }));
|
||||
} catch (e) {
|
||||
yield put(fetchUserError(e));
|
||||
}
|
||||
}
|
||||
|
||||
export function createFetchUserSaga(types) {
|
||||
return [takeEvery(types.fetchUser, fetchSessionUser)];
|
||||
function* fetchOtherUser({ payload: maybeUser }) {
|
||||
try {
|
||||
const { data } = yield call(getUserProfile, maybeUser);
|
||||
|
||||
const { entities: { user = {} } = {}, result = '' } = data;
|
||||
const otherUser = user[result] || {};
|
||||
yield put(
|
||||
fetchProfileForUserComplete({ user: otherUser, username: result })
|
||||
);
|
||||
} catch (e) {
|
||||
yield put(fetchProfileForUserError(e));
|
||||
}
|
||||
}
|
||||
|
||||
export function createFetchUserSaga(types) {
|
||||
return [
|
||||
takeEvery(types.fetchUser, fetchSessionUser),
|
||||
takeEvery(types.fetchProfileForUser, fetchOtherUser)
|
||||
];
|
||||
}
|
||||
|
@@ -39,6 +39,9 @@ const initialState = {
|
||||
userFetchState: {
|
||||
...defaultFetchState
|
||||
},
|
||||
userProfileFetchState: {
|
||||
...defaultFetchState
|
||||
},
|
||||
showDonationModal: false,
|
||||
isOnline: true
|
||||
};
|
||||
@@ -53,6 +56,7 @@ export const types = createTypes(
|
||||
'updateComplete',
|
||||
'updateFailed',
|
||||
...createAsyncTypes('fetchUser'),
|
||||
...createAsyncTypes('fetchProfileForUser'),
|
||||
...createAsyncTypes('acceptTerms'),
|
||||
...createAsyncTypes('showCert'),
|
||||
...createAsyncTypes('reportUser')
|
||||
@@ -60,11 +64,7 @@ export const types = createTypes(
|
||||
ns
|
||||
);
|
||||
|
||||
export const epics = [
|
||||
hardGoToEpic,
|
||||
failedUpdatesEpic,
|
||||
updateCompleteEpic
|
||||
];
|
||||
export const epics = [hardGoToEpic, failedUpdatesEpic, updateCompleteEpic];
|
||||
|
||||
export const sagas = [
|
||||
...createAcceptTermsSaga(types),
|
||||
@@ -98,6 +98,14 @@ export const fetchUser = createAction(types.fetchUser);
|
||||
export const fetchUserComplete = createAction(types.fetchUserComplete);
|
||||
export const fetchUserError = createAction(types.fetchUserError);
|
||||
|
||||
export const fetchProfileForUser = createAction(types.fetchProfileForUser);
|
||||
export const fetchProfileForUserComplete = createAction(
|
||||
types.fetchProfileForUserComplete
|
||||
);
|
||||
export const fetchProfileForUserError = createAction(
|
||||
types.fetchProfileForUserError
|
||||
);
|
||||
|
||||
export const reportUser = createAction(types.reportUser);
|
||||
export const reportUserComplete = createAction(types.reportUserComplete);
|
||||
export const reportUserError = createAction(types.reportUserError);
|
||||
@@ -144,6 +152,8 @@ export const userByNameSelector = username => state => {
|
||||
return username in user ? user[username] : {};
|
||||
};
|
||||
export const userFetchStateSelector = state => state[ns].userFetchState;
|
||||
export const userProfileFetchStateSelector = state =>
|
||||
state[ns].userProfileFetchState;
|
||||
export const usernameSelector = state => state[ns].appUsername;
|
||||
export const userSelector = state => {
|
||||
const username = usernameSelector(state);
|
||||
@@ -170,11 +180,15 @@ export const reducer = handleActions(
|
||||
...state,
|
||||
userFetchState: { ...defaultFetchState }
|
||||
}),
|
||||
[types.fetchProfileForUser]: state => ({
|
||||
...state,
|
||||
userProfileFetchState: { ...defaultFetchState }
|
||||
}),
|
||||
[types.fetchUserComplete]: (state, { payload: { user, username } }) => ({
|
||||
...state,
|
||||
user: {
|
||||
...state.user,
|
||||
[username]: user
|
||||
[username]: { ...user, sessionUser: true }
|
||||
},
|
||||
appUsername: username,
|
||||
userFetchState: {
|
||||
@@ -193,6 +207,35 @@ export const reducer = handleActions(
|
||||
error: payload
|
||||
}
|
||||
}),
|
||||
[types.fetchProfileForUserComplete]: (
|
||||
state,
|
||||
{ payload: { user, username } }
|
||||
) => {
|
||||
const previousUserObject =
|
||||
username in state.user ? state.user[username] : {};
|
||||
return {
|
||||
...state,
|
||||
user: {
|
||||
...state.user,
|
||||
[username]: { ...previousUserObject, ...user }
|
||||
},
|
||||
userProfileFetchState: {
|
||||
pending: false,
|
||||
complete: true,
|
||||
errored: false,
|
||||
error: null
|
||||
}
|
||||
};
|
||||
},
|
||||
[types.fetchProfileForUserError]: (state, { payload }) => ({
|
||||
...state,
|
||||
userFetchState: {
|
||||
pending: false,
|
||||
complete: false,
|
||||
errored: true,
|
||||
error: payload
|
||||
}
|
||||
}),
|
||||
[types.onlineStatusChange]: (state, { payload: isOnline }) => ({
|
||||
...state,
|
||||
isOnline
|
||||
|
@@ -2,7 +2,8 @@ import { all } from 'redux-saga/effects';
|
||||
|
||||
import { sagas as appSagas } from './';
|
||||
import { sagas as settingsSagas } from './settings';
|
||||
import { sagas as challengeSagas } from '../templates/Challenges/redux';
|
||||
|
||||
export default function* rootSaga() {
|
||||
yield all([...appSagas, ...settingsSagas]);
|
||||
yield all([...appSagas, ...challengeSagas, ...settingsSagas]);
|
||||
}
|
||||
|
Reference in New Issue
Block a user