191 lines
5.1 KiB
JavaScript
191 lines
5.1 KiB
JavaScript
import { useState, useEffect, useCallback } from "react";
|
|
import {
|
|
Mutation,
|
|
useMutation,
|
|
useQuery,
|
|
useQueryClient,
|
|
} from "@tanstack/react-query";
|
|
import { Link, useNavigate } from "react-router-dom";
|
|
import AuthRepository from "../repositories/AuthRepository.jsx";
|
|
import { useDispatch, useSelector } from "react-redux";
|
|
import {
|
|
closeAuthModal,
|
|
closeModal,
|
|
openAuthModal,
|
|
openModal,
|
|
setSelfTenant,
|
|
toggleModal,
|
|
} from "../slices/localVariablesSlice.jsx";
|
|
import { removeSession } from "../utils/authUtils.js";
|
|
import { cacheProfileData } from "../slices/apiDataManager.jsx";
|
|
import { blockUI } from "../utils/blockUI.js";
|
|
import showToast from "../services/toastService";
|
|
|
|
// ----------------------------Modal--------------------------
|
|
|
|
export const useModal = (modalType) => {
|
|
const dispatch = useDispatch();
|
|
|
|
const modalState = useSelector(
|
|
(state) => state.localVariables.modals[modalType] || {}
|
|
);
|
|
|
|
const { isOpen = false, data = null } = modalState;
|
|
|
|
const onOpen = (payload = {}) =>
|
|
dispatch(openModal({ modalType, data: payload }));
|
|
|
|
const onClose = () => dispatch(closeModal({ modalType }));
|
|
|
|
const onToggle = () => dispatch(toggleModal({ modalType }));
|
|
|
|
return { isOpen, data, onOpen, onClose, onToggle };
|
|
};
|
|
|
|
|
|
export const useSubscription = (frequency) => {
|
|
return useQuery({
|
|
queryKey: ["subscriptionPlans", frequency],
|
|
queryFn: async () => {
|
|
const resp = await AuthRepository.getSubscription(frequency);
|
|
return resp.data;
|
|
},
|
|
});
|
|
};
|
|
|
|
// -------------------APIHook-------------------------------------
|
|
|
|
export const useTenants = () => {
|
|
return useQuery({
|
|
queryKey: ["tenantlist"],
|
|
queryFn: async () => await AuthRepository.getTenantList(),
|
|
});
|
|
};
|
|
|
|
export const useSelectTenant = (onSuccessCallBack) => {
|
|
const queryClient = useQueryClient();
|
|
|
|
return useMutation({
|
|
mutationFn: async (tenantId) => {
|
|
const res = await AuthRepository.selectTenant(tenantId);
|
|
return res.data;
|
|
},
|
|
|
|
onSuccess: (data) => {
|
|
if (localStorage.getItem("jwtToken")) {
|
|
localStorage.setItem("jwtToken", data.token);
|
|
localStorage.setItem("refreshToken", data.refreshToken);
|
|
} else {
|
|
sessionStorage.setItem("jwtToken", data.token);
|
|
sessionStorage.setItem("refreshToken", data.refreshToken);
|
|
}
|
|
|
|
if (onSuccessCallBack) onSuccessCallBack();
|
|
},
|
|
|
|
onError: (error) => {
|
|
showToast(error.message || "Error while creating project", "error");
|
|
localStorage.removeItem("jwtToken");
|
|
localStorage.removeItem("refreshToken");
|
|
localStorage.removeItem("ctnt");
|
|
},
|
|
});
|
|
};
|
|
|
|
export const useCreateSelfTenant = (onSuccessCallBack, onFailureCallBack) => {
|
|
const dispatch = useDispatch();
|
|
return useMutation({
|
|
mutationFn: async (payload) => {
|
|
const resp = await AuthRepository.createSuscription(payload);
|
|
return resp.data;
|
|
},
|
|
onSuccess: (response, variables) => {
|
|
dispatch(
|
|
setSelfTenant({
|
|
tenantEnquireId: response?.id,
|
|
planId: null,
|
|
details: response,
|
|
})
|
|
);
|
|
if (onSuccessCallBack) onSuccessCallBack(response);
|
|
},
|
|
onError: (error) => {
|
|
showToast(
|
|
`${error?.response?.data?.errors || ""} ${
|
|
error?.response?.data?.message || ""
|
|
} ${error?.response?.data?.statusCode || ""}`.trim() ||
|
|
error?.message ||
|
|
"Something went wrong, please try again!",
|
|
"error"
|
|
);
|
|
|
|
if (onFailureCallBack) onFailureCallBack();
|
|
},
|
|
});
|
|
};
|
|
|
|
export const useSelfGetSubscription = (onSuccessCallBack,onFailureCallBack) => {
|
|
const dispatch = useDispatch();
|
|
return useMutation({
|
|
mutationFn: async (payload) => {
|
|
blockUI();
|
|
const resp = await AuthRepository.selfCreateSubscription(payload);
|
|
return resp.data;
|
|
},
|
|
onSuccess: (response, variables) => {
|
|
if (onSuccessCallBack) onSuccessCallBack(response);
|
|
},
|
|
onError: (error) => {
|
|
showToast("Somthing worng went happend", "error");
|
|
if (onFailureCallBack) onFailureCallBack();
|
|
},
|
|
});
|
|
};
|
|
|
|
export const useAuthModal = () => {
|
|
const dispatch = useDispatch();
|
|
const { isOpen } = useSelector((state) => state.localVariables.AuthModal);
|
|
|
|
return {
|
|
isOpen,
|
|
onOpen: () => dispatch(openAuthModal()),
|
|
onClose: () => dispatch(closeAuthModal()),
|
|
};
|
|
};
|
|
|
|
export const useLogout = () => {
|
|
const queryClient = useQueryClient();
|
|
const navigate = useNavigate();
|
|
const dispatch = useDispatch();
|
|
|
|
return useMutation({
|
|
mutationFn: async () => {
|
|
const refreshToken =
|
|
localStorage.getItem("refreshToken") ||
|
|
sessionStorage.getItem("refreshToken");
|
|
|
|
if (!refreshToken) return; // no call if already removed
|
|
|
|
return await AuthRepository.logout({ refreshToken });
|
|
},
|
|
|
|
onMutate: async () => {
|
|
// Cancel all ongoing queries
|
|
await queryClient.cancelQueries();
|
|
},
|
|
|
|
onSuccess: () => {
|
|
queryClient.clear();
|
|
removeSession();
|
|
dispatch(cacheProfileData(null));
|
|
navigate("/auth/login", { replace: true });
|
|
},
|
|
|
|
onError: () => {
|
|
removeSession();
|
|
queryClient.clear();
|
|
navigate("/auth/login", { replace: true });
|
|
},
|
|
});
|
|
};
|