reducer.ts 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import { Reducer } from "react";
  2. import { Action } from "./actionTypes";
  3. import keys from "../storageKeys";
  4. export const defaultState = {
  5. loggingIn: false,
  6. loggedIn: false,
  7. userToken: null,
  8. username: null,
  9. };
  10. // Estado inicial de usuario
  11. export const getInitialState = (): State => {
  12. const userToken = localStorage.getItem(keys.userToken);
  13. return { ...defaultState, userToken, loggedIn: !!userToken };
  14. };
  15. export type State = {
  16. loggingIn?: Boolean | null;
  17. loggedIn?: Boolean | null;
  18. userToken?: string | null;
  19. username?: string | null;
  20. error?: string | null;
  21. };
  22. const reducer: Reducer<State, Action> = (state, action) => {
  23. switch (action.type) {
  24. case "LOGIN_REQUEST":
  25. return {
  26. ...state,
  27. loggingIn: true,
  28. loggedIn: false,
  29. username: action.username,
  30. };
  31. case "LOGIN_SUCCESS":
  32. return {
  33. loggedIn: true,
  34. loggingIn: false,
  35. username: action.username,
  36. userToken: action.userToken,
  37. };
  38. case "LOGIN_FAILURE_DISMISS":
  39. return {
  40. ...state,
  41. error: undefined,
  42. };
  43. case "LOGIN_FAILURE":
  44. return {
  45. error: action.error,
  46. };
  47. case "LOGOUT":
  48. return {};
  49. default:
  50. return state;
  51. }
  52. };
  53. export default reducer;