import { put, takeEvery, all, select } from "redux-saga/effects"; import { ContractHelper } from "../services/contract"; import { Waifu } from "../types/waifusion"; import { completeLoadWaifus, loadWaifus, setWaifuIndexes, } from "./reducers/user"; import { selectWaifus, setWaifus } from "./reducers/waifus"; /* WATCHERS */ function* watchLoadWaifus() { yield takeEvery(loadWaifus, loadWaifusAction); } /* ACTIONS */ function* loadWaifusAction() { const waifus: Waifu[] = yield select(selectWaifus); const waifusCopy = [...waifus]; const contractHelper = new ContractHelper(); yield contractHelper.init(); const _ownedWaifus: Waifu[] = yield contractHelper.getWaifus(); yield put(setWaifuIndexes(_ownedWaifus.map((waifu: Waifu) => waifu.id))); for (let i = 0; i < _ownedWaifus.length; i++) { const waifuIds = waifus.map((waifu: Waifu) => waifu.id); if (waifuIds.indexOf(_ownedWaifus[i].id) === -1) waifusCopy.push(_ownedWaifus[i]); else waifusCopy[i] = _ownedWaifus[i]; } waifusCopy.reverse(); yield put(setWaifus(waifusCopy)); yield put(completeLoadWaifus()); } export default function* rootSaga(): any { yield all([watchLoadWaifus()]); }