46 lines
1.5 KiB
TypeScript
46 lines
1.5 KiB
TypeScript
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 });
|
|
} |