64 lines
1.3 KiB
TypeScript
64 lines
1.3 KiB
TypeScript
|
import { useEffect, useState } from "react";
|
||
|
import axios from "axios";
|
||
|
import {
|
||
|
DataWrapper,
|
||
|
errorDataWrapper,
|
||
|
fetchDataWrapper,
|
||
|
receiveDataWrapper,
|
||
|
} from "../store/helpers";
|
||
|
import { TVL_CUMULATIVE_URL } from "../utils/consts";
|
||
|
|
||
|
export interface LockedAsset {
|
||
|
Symbol: string;
|
||
|
Name: string;
|
||
|
Address: string;
|
||
|
CoinGeckoId: string;
|
||
|
Amount: number;
|
||
|
Notional: number;
|
||
|
TokenPrice: number;
|
||
|
}
|
||
|
|
||
|
export interface LockedAssets {
|
||
|
[tokenAddress: string]: LockedAsset;
|
||
|
}
|
||
|
|
||
|
export interface ChainsAssets {
|
||
|
[chainId: string]: LockedAssets;
|
||
|
}
|
||
|
|
||
|
export interface NotionalTVLCumulative {
|
||
|
DailyLocked: {
|
||
|
[date: string]: ChainsAssets;
|
||
|
};
|
||
|
}
|
||
|
|
||
|
const useCumulativeTVL = () => {
|
||
|
const [cumulativeTVL, setCumulativeTVL] = useState<
|
||
|
DataWrapper<NotionalTVLCumulative>
|
||
|
>(fetchDataWrapper());
|
||
|
|
||
|
useEffect(() => {
|
||
|
let cancelled = false;
|
||
|
axios
|
||
|
.get<NotionalTVLCumulative>(TVL_CUMULATIVE_URL)
|
||
|
.then((response) => {
|
||
|
if (!cancelled) {
|
||
|
setCumulativeTVL(receiveDataWrapper(response.data));
|
||
|
}
|
||
|
})
|
||
|
.catch((error) => {
|
||
|
if (!cancelled) {
|
||
|
setCumulativeTVL(errorDataWrapper(error));
|
||
|
}
|
||
|
console.log(error);
|
||
|
});
|
||
|
return () => {
|
||
|
cancelled = true;
|
||
|
};
|
||
|
}, []);
|
||
|
|
||
|
return cumulativeTVL;
|
||
|
};
|
||
|
|
||
|
export default useCumulativeTVL;
|