diff --git a/client/src/components/settings/DangerZone.js b/client/src/components/settings/DangerZone.js
index df4fdf3db0..970cdd080a 100644
--- a/client/src/components/settings/DangerZone.js
+++ b/client/src/components/settings/DangerZone.js
@@ -5,12 +5,11 @@ import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import { FullWidthRow, ButtonSpacer, Spacer } from '../helpers';
+import { deleteAccount, resetProgress } from '../../redux/settings';
import DeleteModal from './DeleteModal';
-
-import {deleteAccount, resetProgress } from '../../redux/settings';
+import ResetModal from './ResetModal';
import './danger-zone.css';
-import ResetModal from './ResetModal';
const propTypes = {
deleteAccount: PropTypes.func.isRequired,
@@ -48,6 +47,7 @@ class DangerZone extends Component {
}
render() {
+ const { deleteAccount, resetProgress } = this.props;
return (
@@ -79,9 +79,11 @@ class DangerZone extends Component {
this.toggleResetModal()}
show={this.state.reset} />
this.toggleDeleteModal()}
show={this.state.delete} />
diff --git a/client/src/components/settings/DeleteModal.js b/client/src/components/settings/DeleteModal.js
index 64c77ee6b1..f622e4d9aa 100644
--- a/client/src/components/settings/DeleteModal.js
+++ b/client/src/components/settings/DeleteModal.js
@@ -4,7 +4,7 @@ import PropTypes from 'prop-types';
import { ButtonSpacer } from '../helpers';
import { Button, Modal } from '@freecodecamp/react-bootstrap'
-import './DangerZone'
+import './danger-zone.css';
const propTypes = {
delete: PropTypes.func.isRequired,
diff --git a/client/src/redux/settings/danger-zone-saga.js b/client/src/redux/settings/danger-zone-saga.js
new file mode 100644
index 0000000000..56c41ea8fd
--- /dev/null
+++ b/client/src/redux/settings/danger-zone-saga.js
@@ -0,0 +1,41 @@
+import { call, put, takeEvery } from 'redux-saga/effects';
+
+import {
+ deleteAccountComplete,
+ deleteAccountError,
+ resetProgressComplete,
+ resetProgressError
+} from './';
+
+import {
+ postResetProgress,
+ postDeleteAccount
+} from '../../utils/ajax';
+import { createFlashMessage } from '../../components/Flash/redux';
+
+function* deleteAccountSaga({ payload }) {
+ try {
+ const { data: response } = yield call(postDeleteAccount, payload);
+ yield put(deleteAccountComplete(response));
+ yield put(createFlashMessage(response));
+ } catch (e) {
+ yield put(deleteAccountError(e));
+ }
+}
+
+function* resetProgressSaga({ payload }) {
+ try {
+ const { data: response } = yield call(postResetProgress, payload);
+ yield put(resetProgressComplete(response));
+ yield put(createFlashMessage(response));
+ } catch (e) {
+ yield put(resetProgressError(e));
+ }
+}
+
+export function createDangerZoneSaga(types) {
+ return [
+ takeEvery(types.deleteAccount, deleteAccountSaga),
+ takeEvery(types.resetProgress, resetProgressSaga)
+ ];
+}
diff --git a/client/src/redux/settings/index.js b/client/src/redux/settings/index.js
index 7722681317..6abe451926 100644
--- a/client/src/redux/settings/index.js
+++ b/client/src/redux/settings/index.js
@@ -1,6 +1,7 @@
import { createAction, handleActions } from 'redux-actions';
import { createTypes, createAsyncTypes } from '../../utils/createTypes';
+import { createDangerZoneSaga } from './danger-zone-saga';
import { createSettingsSagas } from './settings-sagas';
import { createUpdateMyEmailSaga } from './update-email-saga';
@@ -37,7 +38,8 @@ export const types = createTypes(
export const sagas = [
...createSettingsSagas(types),
- ...createUpdateMyEmailSaga(types)
+ ...createUpdateMyEmailSaga(types),
+ ...createDangerZoneSaga(types)
];
const checkForSuccessPayload = ({ type, payload }) =>
diff --git a/client/src/utils/ajax.js b/client/src/utils/ajax.js
index 6a753ecb51..cb22cd4891 100644
--- a/client/src/utils/ajax.js
+++ b/client/src/utils/ajax.js
@@ -50,6 +50,14 @@ export function postReportUser(body) {
return post('/user/report-user', body);
}
+export function postDeleteAccount(body) {
+ return post('/account/delete', body);
+}
+
+export function postResetProgress(body) {
+ return post('/account/reset-progress', body);
+}
+
/** PUT **/
export function putUpdateMyAbout(values) {