import { call, put, takeLatest } from 'redux-saga/effects'; import * as actions from 'constants/show_action_types'; import { updateFileAvailability, updateDisplayAssetError } from 'actions/show'; import { UNAVAILABLE, AVAILABLE } from 'constants/asset_display_states'; import { checkFileAvailability, triggerClaimGet } from 'api/fileApi'; function* retrieveFile (action) { const name = action.data.name; const claimId = action.data.claimId; // see if the file is available let isAvailable; try { ({ data: isAvailable } = yield call(checkFileAvailability, name, claimId)); } catch (error) { return yield put(updateDisplayAssetError(error.message)); }; if (isAvailable) { yield put(updateDisplayAssetError(null)); return yield put(updateFileAvailability(AVAILABLE)); } yield put(updateFileAvailability(UNAVAILABLE)); // initiate get request for the file try { yield call(triggerClaimGet, name, claimId); } catch (error) { return yield put(updateDisplayAssetError(error.message)); }; yield put(updateFileAvailability(AVAILABLE)); }; export function* watchFileIsRequested () { yield takeLatest(actions.FILE_REQUESTED, retrieveFile); };