Created
October 4, 2019 15:43
-
-
Save c80609a/54949aabb33101c62eb4086c6e588177 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { call, put, select, takeLatest } from "redux-saga/effects"; | |
import {makeCheckFormData, makeFormData} from "./helpers/boat_form"; | |
import {growl} from "../actions/growl"; | |
import { POST, POST2 } from "../../../../utils/api/request"; | |
import { | |
EDIT_BOAT_REQUESTED, | |
EDIT_BOAT_INVALID, | |
EDIT_BOAT_VALID, | |
EDIT_BOAT_SUCCEEDED, | |
EDIT_BOAT_FAILED | |
} from "../constants/boat_form"; | |
import {NAV_TAB_BOATS} from "../../Nav/tabs_list"; | |
import {changeTab} from "../actions/nav"; | |
/** | |
* @param action.url_save - урл, по которому надо совершить запрос на сохранение после успешной валидации | |
* @param action.url_boats_list - урл, на который надо перейти после успешного сохранения данных лодки | |
*/ | |
function* Edit(action) { | |
// console.log("<CheckEdit> url_save = " + action.url_save); | |
const getStoreBoatForm0 = (state) => state.boat_form; // существующие значения (т.е. то, что было подано в форму изначально) | |
const boatFormOld = yield select(getStoreBoatForm0); | |
const getStoreBoatForm = (state) => state.boat_form_new; // новые значения (т.е. юзер что-то изменил в форме) | |
const boatFormNew = yield select(getStoreBoatForm); | |
const form_data = makeFormData(boatFormOld.values, boatFormNew.values); | |
try { | |
const response = yield call( | |
() => POST2(action.url_save, form_data) | |
); | |
if (response.status === 200) { | |
yield put({ | |
type: EDIT_BOAT_SUCCEEDED, | |
payload: response.data | |
}) | |
yield put(growl({ type: 'success', msg: 'information_saved' })); | |
yield put(changeTab(NAV_TAB_BOATS)) | |
} else { | |
yield put({ type: EDIT_BOAT_INVALID, payload: response.data }) | |
} | |
} catch (e) { | |
yield put({ | |
type: EDIT_BOAT_FAILED, | |
payload: { | |
message: e.message | |
} | |
}); | |
} | |
} | |
/** Сначала отправим запрос на валидацию данных. | |
* | |
* @param action.url_save - урл, по которому надо совершить запрос на сохранение после успешной валидации | |
* @param action.url_validate - урл, по которому надо совершить запрос на валидацию | |
*/ | |
function* CheckEdit(action) { | |
// console.log("<CheckEdit> url_save = " + action.url_save + ', url_validate = ' + action.url_validate); | |
const getStoreBoatForm0 = (state) => state.boat_form; // существующие значения (т.е. то, что было подано в форму изначально) | |
const boatFormOld = yield select(getStoreBoatForm0); | |
const getStoreBoatForm = (state) => state.boat_form_new; // новые значения (т.е. юзер что-то изменил в форме) | |
const boatFormNew = yield select(getStoreBoatForm); | |
const boat_values = makeCheckFormData(boatFormOld.values, boatFormNew.values); // на сервер отправляем существующие значения, поверх которых наложены новые значения | |
try { | |
const response = yield call( | |
() => POST(action.url_validate, { boat: boat_values }) | |
); | |
if (response.status === 200) | |
// а теперь можно слать запрос на создание | |
yield put({ | |
type: EDIT_BOAT_VALID, | |
url_save: action.url_save | |
}); | |
else | |
yield put({ type: EDIT_BOAT_INVALID, payload: response.data }); | |
} catch (e) { | |
yield put({ | |
type: EDIT_BOAT_FAILED, | |
payload: { | |
message: e.message | |
} | |
}); | |
} | |
} | |
function* BoatFormSaga() { | |
yield takeLatest(EDIT_BOAT_REQUESTED, CheckEdit); | |
yield takeLatest(EDIT_BOAT_VALID, Edit); | |
} | |
export default BoatFormSaga; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment