import { call, put, select, takeLatest } from 'redux-saga/effects'; import request from 'utils/request'; import getBaseUrl from 'utils/urls'; import { GET_SHARED_RUNS, SET_PAGE, SET_FILTER_QUERY } from './constants'; import { makeSelectSharedRunsPage, makeSelectSharedFilter } from './selectors'; import { updateRunsAction } from './actions'; import { repoLoadingError, logoutAction } from '../App/actions'; export function* getRuns() { const page = yield select(makeSelectSharedRunsPage()); const filter = yield select(makeSelectSharedFilter()); const offset = 10 * (page - 1); const limit = 10; const requestUrl = `${getBaseUrl()}/api/v1/core/runs/public/?offset=${offset}&limit=${limit}`; try { const response = yield call(request, requestUrl); yield put(updateRunsAction({ ...response, page })); } catch (err) { if (err.response.status === 401) { yield put(logoutAction()); } else { yield put(repoLoadingError(err)); } } } export default function* sharedRunsListSaga() { yield takeLatest(SET_PAGE, getRuns); yield takeLatest(SET_FILTER_QUERY, getRuns); yield takeLatest(GET_SHARED_RUNS, getRuns); }