feat(certs): Convert certification views to gatsby

This commit is contained in:
Bouncey
2018-09-04 14:54:23 +01:00
committed by mrugesh mohapatra
parent dc00eb8555
commit 77a4452437
30 changed files with 627 additions and 917 deletions

View File

@@ -4,19 +4,28 @@ import { createTypes, createAsyncTypes } from '../utils/createTypes';
import { createFetchUserSaga } from './fetch-user-saga';
import { createAcceptTermsSaga } from './accept-terms-saga';
import { createAppMountSaga } from './app-mount-saga';
import { createShowCertSaga } from './show-cert-saga';
import { createUpdateMyEmailSaga } from './update-email-saga';
const ns = 'app';
const defaultFetchState = {
pending: true,
complete: false,
errored: false,
error: null
};
const initialState = {
appUsername: '',
fetchState: {
pending: true,
complete: false,
errored: false,
error: null
showCert: {},
showCertFetchState: {
...defaultFetchState
},
user: {}
user: {},
userFetchState: {
...defaultFetchState
}
};
const types = createTypes(
@@ -24,6 +33,7 @@ const types = createTypes(
'appMount',
...createAsyncTypes('fetchUser'),
...createAsyncTypes('acceptTerms'),
...createAsyncTypes('showCert'),
...createAsyncTypes('updateMyEmail')
],
ns
@@ -33,7 +43,8 @@ export const sagas = [
...createAcceptTermsSaga(types),
...createAppMountSaga(types),
...createFetchUserSaga(types),
...createUpdateMyEmailSaga(types)
...createUpdateMyEmailSaga(types),
...createShowCertSaga(types)
];
export const appMount = createAction(types.appMount);
@@ -46,12 +57,24 @@ export const fetchUser = createAction(types.fetchUser);
export const fetchUserComplete = createAction(types.fetchUserComplete);
export const fetchUserError = createAction(types.fetchUserError);
export const showCert = createAction(types.showCert);
export const showCertComplete = createAction(types.showCertComplete);
export const showCertError = createAction(types.showCertError);
export const updateMyEmail = createAction(types.updateMyEmail);
export const updateMyEmailComplete = createAction(types.updateMyEmailComplete);
export const updateMyEmailError = createAction(types.updateMyEmailError);
export const isSignedInSelector = state => !!Object.keys(state[ns].user).length;
export const userFetchStateSelector = state => state[ns].fetchState;
export const showCertSelector = state => state[ns].showCert;
export const showCertFetchStateSelector = state => state[ns].showCertFetchState;
export const userByNameSelector = username => state => {
const { user } = state[ns];
return username in user ? user[username] : {};
};
export const userFetchStateSelector = state => state[ns].userFetchState;
export const usernameSelector = state => state[ns].appUsername;
export const userSelector = state => state[ns].user;
@@ -59,18 +82,13 @@ export const reducer = handleActions(
{
[types.fetchUser]: state => ({
...state,
fetchState: {
pending: true,
complete: false,
errored: false,
error: null
}
userFetchState: { ...defaultFetchState }
}),
[types.fetchUserComplete]: (state, { payload: { user, username } }) => ({
...state,
user,
appUsername: username,
fetchState: {
userFetchState: {
pending: false,
complete: true,
errored: false,
@@ -79,7 +97,32 @@ export const reducer = handleActions(
}),
[types.fetchUserError]: (state, { payload }) => ({
...state,
fetchState: {
userFetchState: {
pending: false,
complete: false,
errored: true,
error: payload
}
}),
[types.showCert]: state => ({
...state,
showCert: {},
showCertFetchState: { ...defaultFetchState }
}),
[types.showCertComplete]: (state, { payload }) => ({
...state,
showCert: payload,
showCertFetchState: {
pending: false,
complete: true,
errored: false,
error: null
}
}),
[types.showCertError]: (state, { payload }) => ({
...state,
showCert: {},
showCertFetchState: {
pending: false,
complete: false,
errored: true,

View File

@@ -0,0 +1,27 @@
import { put, takeEvery, call } from 'redux-saga/effects';
import { navigateTo } from 'gatsby';
import { createFlashMessage } from '../components/Flash/redux';
import { getShowCert } from '../utils/ajax';
import { showCertComplete, showCertError } from '.';
function* getShowCertSaga({ payload: { username, certName: cert } }) {
try {
const { data: response } = yield call(getShowCert, username, cert);
const { messages } = response;
if (messages && messages.length) {
for (let i = 0; i < messages.length; i++) {
yield put(createFlashMessage(messages[i]));
}
yield call(navigateTo, '/');
return;
}
yield put(showCertComplete(response));
} catch (e) {
yield put(showCertError(e));
}
}
export function createShowCertSaga(types) {
return [takeEvery(types.showCert, getShowCertSaga)];
}