mirror of
https://github.com/plankanban/planka.git
synced 2025-12-19 01:12:02 +03:00
Project managers, board members, auto-update after reconnection, refactoring
This commit is contained in:
36
client/src/sagas/core/request.js
Executable file
36
client/src/sagas/core/request.js
Executable file
@@ -0,0 +1,36 @@
|
||||
import { call, fork, join, put, select, take } from 'redux-saga/effects';
|
||||
|
||||
import { accessTokenSelector } from '../../selectors';
|
||||
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
|
||||
}
|
||||
|
||||
const accessToken = yield select(accessTokenSelector);
|
||||
|
||||
try {
|
||||
return yield call(method, ...args, {
|
||||
Authorization: `Bearer ${accessToken}`,
|
||||
});
|
||||
} 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);
|
||||
}
|
||||
Reference in New Issue
Block a user