import { DaddyClient, getClient } from "../../util/daddy"; import { Config } from "../../config"; import { all, takeLatest, put, select } from "redux-saga/effects"; import { FETCH_PROFILE_REQUEST, fetchProfile, FETCH_PROFILE_FAILURE, FETCH_PROFILE_SUCCESS, updateProfileRequestAction, UPDATE_PROFILE_REQUEST, UPDATE_PROFILE_FAILURE, UPDATE_PROFILE_SUCCESS } from "../actions/profile"; import { SET_CURRENT_USER } from "../actions/auth"; import { User } from "../../types/user"; export function* profileRootSaga() { yield all([ takeLatest(SET_CURRENT_USER, onCurrentUserChangeSaga), takeLatest(FETCH_PROFILE_REQUEST, fetchProfileSaga), takeLatest(UPDATE_PROFILE_REQUEST, updateProfileSaga), ]); } export function* onCurrentUserChangeSaga() { yield put(fetchProfile()); } export function* fetchProfileSaga() { const client = getClient(Config.graphQLEndpoint, Config.subscriptionEndpoint); let profile: User; try { profile = yield client.fetchProfile().then(result => result.userProfile); } catch(err) { yield put({ type: FETCH_PROFILE_FAILURE, err }); return; } yield put({type: FETCH_PROFILE_SUCCESS, profile }); } export function* updateProfileSaga({ changes }: updateProfileRequestAction) { const client = getClient(Config.graphQLEndpoint, Config.subscriptionEndpoint); let profile: User; try { profile = yield client.updateProfile(changes).then(result => result.updateProfile); } catch(err) { yield put({ type: UPDATE_PROFILE_FAILURE, err }); return; } yield put({type: UPDATE_PROFILE_SUCCESS, profile }); }