2017-11-20 14:21:08 +01:00
|
|
|
import { set } from 'lodash';
|
2017-11-14 14:27:16 +01:00
|
|
|
import { call, fork, takeLatest, put, select } from 'redux-saga/effects';
|
|
|
|
import auth from 'utils/auth';
|
|
|
|
import request from 'utils/request';
|
2017-11-10 14:20:33 +01:00
|
|
|
|
2017-11-14 14:27:16 +01:00
|
|
|
import { makeSelectFormType, makeSelectModifiedData } from './selectors';
|
2017-11-20 14:21:08 +01:00
|
|
|
import { submitError, submitSucceeded } from './actions';
|
2017-11-10 14:20:33 +01:00
|
|
|
import { SUBMIT } from './constants';
|
|
|
|
|
|
|
|
export function* submitForm() {
|
|
|
|
try {
|
2017-11-14 14:27:16 +01:00
|
|
|
const formType = yield select(makeSelectFormType());
|
|
|
|
const body = yield select(makeSelectModifiedData());
|
2017-11-20 14:21:08 +01:00
|
|
|
let requestURL;
|
2017-11-14 14:27:16 +01:00
|
|
|
|
2017-11-20 14:21:08 +01:00
|
|
|
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:
|
2017-11-10 14:20:33 +01:00
|
|
|
|
2017-11-20 14:21:08 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (formType === 'forgot-password') {
|
|
|
|
strapi.notification.info('The email has been sent');
|
2017-11-14 14:27:16 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
yield put(submitSucceeded());
|
2017-11-10 14:20:33 +01:00
|
|
|
} catch(error) {
|
2017-11-20 14:21:08 +01:00
|
|
|
const formType = yield select(makeSelectFormType());
|
|
|
|
const errors = [{ id: error.response.payload.message }];
|
|
|
|
|
|
|
|
let formErrors;
|
|
|
|
|
|
|
|
switch (formType) {
|
|
|
|
case 'forgot-password':
|
|
|
|
formErrors = [{ name: 'email', errors }];
|
|
|
|
break;
|
|
|
|
// TODO : handle other error type;
|
|
|
|
default:
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
strapi.notification.error(error.response.payload.message);
|
|
|
|
|
|
|
|
yield put(submitError(formErrors));
|
2017-11-10 14:20:33 +01:00
|
|
|
}
|
|
|
|
}
|
2017-11-09 17:36:07 +01:00
|
|
|
|
|
|
|
export default function* defaultSaga() {
|
2017-11-10 14:20:33 +01:00
|
|
|
yield fork(takeLatest, SUBMIT, submitForm);
|
2017-11-09 17:36:07 +01:00
|
|
|
}
|