103 lines
2.8 KiB
JavaScript
Raw Normal View History

2017-01-26 18:53:52 +01:00
import { takeLatest } from 'redux-saga';
2017-04-21 17:19:41 +02:00
import { put, select, fork, call } from 'redux-saga/effects';
import request from 'utils/request';
2017-04-21 17:52:18 +02:00
import { browserHistory } from 'react-router';
2017-05-09 17:35:36 +02:00
import { router } from 'app';
2017-01-26 18:53:52 +01:00
import {
2017-04-21 17:19:41 +02:00
recordLoaded,
recordEdited,
recordEditError,
2017-04-21 17:52:18 +02:00
recordDeleted,
recordDeleteError,
2017-01-26 18:53:52 +01:00
} from './actions';
import {
LOAD_RECORD,
2017-04-21 17:19:41 +02:00
EDIT_RECORD,
2017-04-21 17:52:18 +02:00
DELETE_RECORD,
2017-01-26 18:53:52 +01:00
} from './constants';
import {
2017-04-21 17:19:41 +02:00
makeSelectCurrentModelName,
makeSelectRecord,
2017-05-05 11:40:52 +02:00
makeSelectIsCreating,
} from './selectors';
export function* getRecord(params) {
2017-04-21 17:19:41 +02:00
const currentModelName = yield select(makeSelectCurrentModelName());
try {
2017-04-21 17:19:41 +02:00
const requestURL = `http://localhost:1337/content-manager/explorer/${currentModelName}/${params.id}`;
// Call our request helper (see 'utils/request')
const data = yield call(request, requestURL, {
method: 'GET',
2017-04-21 17:19:41 +02:00
});
2017-01-26 18:53:52 +01:00
2017-04-21 17:19:41 +02:00
yield put(recordLoaded(data));
} catch (err) {
console.error(err);
}
2017-01-26 18:53:52 +01:00
}
2017-04-21 17:19:41 +02:00
export function* editRecord() {
const currentModelName = yield select(makeSelectCurrentModelName());
const record = yield select(makeSelectRecord());
const recordJSON = record.toJSON();
2017-05-05 11:40:52 +02:00
const isCreating = yield select(makeSelectIsCreating());
const id = isCreating ? '' : recordJSON.id;
2017-04-21 17:19:41 +02:00
try {
2017-05-05 11:40:52 +02:00
const requestURL = `http://localhost:1337/content-manager/explorer/${currentModelName}/${id}`;
2017-04-21 17:19:41 +02:00
// Call our request helper (see 'utils/request')
yield call(request, requestURL, {
2017-05-05 11:40:52 +02:00
method: isCreating ? 'POST' : 'PUT',
2017-04-21 17:19:41 +02:00
body: recordJSON,
});
yield put(recordEdited());
2017-05-05 11:40:52 +02:00
window.Strapi.notification.success(`The entry has been successfully ${isCreating ? 'created' : 'updated'}.`);
2017-04-21 17:19:41 +02:00
} catch (err) {
yield put(recordEditError());
2017-05-05 11:40:52 +02:00
window.Strapi.notification.error(`An error occurred during record ${isCreating ? 'creation' : 'update'}.`);
2017-04-21 17:19:41 +02:00
}
}
2017-04-21 17:52:18 +02:00
export function* deleteRecord() {
const currentModelName = yield select(makeSelectCurrentModelName());
const record = yield select(makeSelectRecord());
const recordJSON = record.toJSON();
try {
const requestURL = `http://localhost:1337/content-manager/explorer/${currentModelName}/${recordJSON.id}`;
// Call our request helper (see 'utils/request')
yield call(request, requestURL, {
method: 'DELETE',
});
yield put(recordDeleted());
window.Strapi.notification.success('The entry has been successfully deleted.');
2017-05-09 17:35:36 +02:00
// Redirect to the list page.
router.push(`/plugins/content-manager/${currentModelName}`);
2017-04-21 17:52:18 +02:00
} catch (err) {
yield put(recordDeleteError());
window.Strapi.notification.error('An error occurred during record deletion.');
}
}
export function* defaultSaga() {
2017-04-21 17:19:41 +02:00
yield fork(takeLatest, LOAD_RECORD, getRecord);
yield fork(takeLatest, EDIT_RECORD, editRecord);
2017-04-21 17:52:18 +02:00
yield fork(takeLatest, DELETE_RECORD, deleteRecord);
}
// All sagas to be loaded
export default [
defaultSaga,
];