actions.ts 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import { Dispatch } from "react";
  2. import { Action } from "./actionTypes";
  3. import { login as apiLoginRequest } from "../../api";
  4. export const login = (username: string, password: string) => async (
  5. dispatch: Dispatch<Action>
  6. ) => {
  7. // Loading login state
  8. dispatch(loginRequest());
  9. const errors = {
  10. 400: "Credenciales inválidas",
  11. };
  12. try {
  13. const res = await apiLoginRequest(username, password);
  14. if (!res.ok) {
  15. const msg = (errors as any)[res.status];
  16. dispatch(loginFailure(msg ?? "Request inválida"));
  17. const text = await res.text();
  18. console.log("Error en el login", text);
  19. return;
  20. }
  21. const body = await res.json();
  22. const userToken = body.token;
  23. dispatch(loginSuccess(username, userToken));
  24. } catch (e) {
  25. console.error(e);
  26. dispatch(loginFailure("Error de conexión"));
  27. }
  28. };
  29. export const loginRequest = (): Action => ({
  30. type: "LOGIN_REQUEST",
  31. });
  32. export const loginSuccess = (username: string, userToken: string): Action => ({
  33. type: "LOGIN_SUCCESS",
  34. username,
  35. userToken,
  36. });
  37. export const loginFailure = (code: string): Action => ({
  38. type: "LOGIN_FAILURE",
  39. error: code,
  40. });
  41. export const failureDismiss = (): Action => ({
  42. type: "LOGIN_FAILURE_DISMISS",
  43. });