actionLogin.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import { actionPromise } from "../reducers";
  2. import { gql } from "../helpers";
  3. import { actionAuthLogin } from "../reducers";
  4. import { actionAboutMe } from "./actionAboutMe";
  5. import { actionLogout, logoutWorker } from "./actionLogout";
  6. import { promiseWorker } from "../reducers/promiseReducer";
  7. import { call, put } from "redux-saga/effects";
  8. export const actionLogin = (username, password) => ({ type: "LOGIN", payload: { username, password } });
  9. export function* loginWorker(action) {
  10. const { username, password } = action.payload || {};
  11. yield call(logoutWorker, actionLogout());
  12. const token = yield call(
  13. promiseWorker,
  14. actionPromise(
  15. "login",
  16. gql(
  17. `mutation Login($username:String!,$password:String!){
  18. tokenAuth(username:$username,password:$password){
  19. token
  20. }
  21. }`,
  22. { username, password }
  23. )
  24. )
  25. );
  26. if (token) {
  27. if (typeof token === "string") {
  28. yield put(actionAuthLogin(token));
  29. } else {
  30. yield put(actionAuthLogin(token.token));
  31. }
  32. yield put(actionAboutMe());
  33. }
  34. }