2017-11-28 15:04:02 +01:00

77 lines
2.0 KiB
JavaScript

import { set } from 'lodash';
import { call, fork, takeLatest, put, select } from 'redux-saga/effects';
import auth from 'utils/auth';
import request from 'utils/request';
import { makeSelectFormType, makeSelectModifiedData } from './selectors';
import { submitError, submitSucceeded } from './actions';
import { SUBMIT } from './constants';
export function* submitForm() {
try {
const formType = yield select(makeSelectFormType());
const body = yield select(makeSelectModifiedData());
let requestURL;
switch (formType) {
case 'login':
requestURL = '/auth/local';
break;
case 'register':
requestURL = '/auth/local/register';
break;
case 'reset-password':
requestURL = '/auth/reset-password';
break;
case 'forgot-password':
requestURL = '/auth/forgot-password';
set(body, 'url', `${strapi.backendURL}/admin/plugins/users-permissions/auth/reset-password`);
break;
default:
}
const response = yield call(request, requestURL, { method: 'POST', body });
if (response.jwt) {
yield call(auth.setToken, response.jwt, body.rememberMe);
yield call(auth.setUserInfo, response.user, body.rememberMe);
}
yield put(submitSucceeded());
} catch(error) {
const formType = yield select(makeSelectFormType());
const errors = error.response.payload.message.reduce((acc, key) => {
const err = key.messages.reduce((acc, key) => {
acc.id = `users-permissions.${key.id}`;
return acc;
}, { id: '' });
acc.push(err);
return acc;
}, []);
let formErrors;
switch (formType) {
case 'forgot-password':
formErrors = [{ name: 'email', errors }];
break;
case 'login':
formErrors = [{ name: 'identifier', errors }];
break;
default:
}
yield put(submitError(formErrors));
}
}
export default function* defaultSaga() {
yield fork(takeLatest, SUBMIT, submitForm);
}