Presupuestador_web/client/src/lib/axios/createAxiosAuthActions.ts

67 lines
1.6 KiB
TypeScript
Raw Normal View History

2024-06-06 11:05:54 +00:00
import { ILogin_DTO, ILogin_Response_DTO } from "@shared/contexts";
import secureLocalStorage from "react-secure-storage";
import { IAuthActions } from "../hooks";
import { createAxiosInstance } from "./axiosInstance";
export const createAxiosAuthActions = (
apiUrl: string,
httpClient = createAxiosInstance()
): IAuthActions => ({
login: async ({ email, password }: ILogin_DTO) => {
// eslint-disable-next-line no-useless-catch
try {
const { data } = await httpClient.request<ILogin_Response_DTO>({
url: `${apiUrl}/auth/login`,
method: "POST",
data: {
email,
password,
},
});
secureLocalStorage.setItem("uecko", JSON.stringify(data));
return {
success: true,
data,
redirectTo: "/",
};
} catch (error) {
return {
success: false,
error: {
message: "Login failed",
name: "Invalid email or password",
},
};
}
},
logout: () => {
secureLocalStorage.removeItem("uecko");
return Promise.resolve({
success: true,
redirectTo: "/login",
});
},
check: () => {
const data: ILogin_Response_DTO = JSON.parse(
secureLocalStorage.getItem("uecko")?.toString() || ""
);
return Promise.resolve(
data.token
? {
authenticated: true,
}
: { authenticated: false, redirectTo: "/login" }
);
},
onError: (error: any) => {
console.error(error);
secureLocalStorage.removeItem("uecko");
return Promise.resolve({
error,
logout: true,
});
},
});