yb-blades-tst
Version:
It allows developers to visualize data in a variety of chart types such as line, bar, column, pie, and more.
40 lines (37 loc) • 1.26 kB
text/typescript
import { useEffect, useState } from "react";
const useApi = () => {
const [awaitingResponse, setAwaitingResponse] = useState<any>({});
const [data, setData] = useState<any>({});
const [error, setError] = useState<any>({});
useEffect(()=>{
return ()=>{
cleanState()
}
},[])
const cleanState=()=>{
setAwaitingResponse({})
setData({})
setError({})
}
const handleApi = async (fetchDetails:any,dataFor:string,isGet:boolean=true) => {
if(!dataFor){
return;
}
setAwaitingResponse((prev:any)=>({...prev,[dataFor]:true}));
try {
const response =fetchDetails.options ? await fetch(fetchDetails.url.fetchDetails.options) : await fetch(fetchDetails.url);
const responseData = await response.json();
if (response.ok) {
setData((prev:any)=>({...prev,[dataFor]:responseData}));
} else {
setError((prev:any)=>({...prev,[dataFor]:responseData?.toString()}));
}
} catch (error:any) {
setError({[dataFor]:error?.message || error.toString()});
} finally {
setAwaitingResponse((prev:any)=>({...prev,[dataFor]:false}));
}
};
return { awaitingResponse, data, error,handleApi };
};
export default useApi;