svet-pos-project-client / src / store / auth-action.ts
auth-action.ts
Raw
import axios from "axios";
import { Auth, setAuthToken } from "../api/agent";
import { authActions } from "./auth-slice";

export const userLogin = (username: string, password: string) => {
  return async (dispatch: any) => {
    try {
      const loggedInUser = await login(username, password);
      dispatch(
        authActions.login({
          role: loggedInUser.role,
          token: loggedInUser.accessToken,
          user: loggedInUser.username,
        })
      );
    } catch (e) {
      console.log("Error in login action",e.message);
      dispatch(authActions.authError());
    }
  };
};

//TODO: attach dispatch for register user ( no login need after register)
export const registerOwner = (
  email: string,
  username: string,
  password: string,
  mobileNumber: string,
  ownerName: string
) => {
  return async (dispatch: any) => {
    try {
      const registeredUser = await register(
        email,
        username,
        password,
        mobileNumber,
        ownerName
      );
      console.log("action user register", registeredUser);
    } catch (e) {
      console.log("Error in owner register action ", e.message);
      // dispatch(authActions.authError());
    }
  };
};
export const loadUser = () => async (dispatch: any) => {
  console.log("loading user .....");
  try {
    const loggedUser = await loadUserByToken();
    console.log('loaded user data : ',{ ...loggedUser });
    dispatch(
      authActions.loadUser({
        role: loggedUser.data.role,
        user: loggedUser.data.username,
      })
    );
  } catch (e) {
    console.log("error user loading :  ", e);
    // dispatch(authActions.authError());
  }
};

const login = async (username: string, password: string) => {
  const response = await Auth.login({ username, password });
  if (!response) {
    throw new Error("Could not login right now");
  }
  return response;
};

const register = async (
  email: string,
  username: string,
  password: string,
  mobileNumber: string,
  ownerName: string
) => {
  const role = "OWNER";
  const response = await Auth.register({
    email,
    username,
    password,
    role,
    mobileNumber,
    ownerName,
  });
  if (!response) {
    throw new Error("Could not login right now");
  }
  return response;
};

const loadUserByToken = async () => {
  const response = await Auth.loadUser();
  if (!response) {
    throw new Error("Could not login right now");
  }
  return response;
};