2022-04-26 18:01:55 +05:00
|
|
|
import { call, fork, join, put, take } from 'redux-saga/effects';
|
2021-06-24 01:05:22 +05:00
|
|
|
|
|
|
|
|
import { logout } from '../../actions';
|
|
|
|
|
import ErrorCodes from '../../constants/ErrorCodes';
|
|
|
|
|
|
|
|
|
|
let lastRequestTask;
|
|
|
|
|
|
|
|
|
|
function* queueRequest(method, ...args) {
|
|
|
|
|
if (lastRequestTask) {
|
|
|
|
|
try {
|
|
|
|
|
yield join(lastRequestTask);
|
|
|
|
|
} catch {} // eslint-disable-line no-empty
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
try {
|
2022-04-26 18:01:55 +05:00
|
|
|
return yield call(method, ...args);
|
2021-06-24 01:05:22 +05:00
|
|
|
} catch (error) {
|
|
|
|
|
if (error.code === ErrorCodes.UNAUTHORIZED) {
|
|
|
|
|
yield put(logout()); // TODO: next url
|
|
|
|
|
yield take();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
throw error;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default function* request(method, ...args) {
|
|
|
|
|
lastRequestTask = yield fork(queueRequest, method, ...args);
|
|
|
|
|
|
|
|
|
|
return yield join(lastRequestTask);
|
|
|
|
|
}
|