import { usePublicClient } from "wagmi";
import React, { useEffect, useState } from "react";
import { Layout } from "../../components/layout";
import { Hero } from "./hero";
import { LatestCampaignsSection } from "./latest-campaigns-section";
import { TemplatesSection } from "./templates-section";
import { useFeaturedKPITokens } from "../../hooks/useFeaturedKPITokens";
import { CarrotMarquee } from "../../components/ui/carrot-marquee";
import { useDebounce } from "react-use";
import { useFeaturedBlacklistedKPITokenAddresses } from "../../hooks/useFeaturedBlacklistedKPITokenAddresses";
import {
useTransition,
config as springConfig,
animated,
} from "@react-spring/web";
import Loader from "../../icons/loader";
import { useFathomTrackPageWatch } from "../../hooks/useFathomTrackPageWatch";
import { MultiChainLinksUpdater } from "../../updaters/multi-chain-links";
interface HomeProps {
templateId?: number;
}
export const Home = ({ templateId }: HomeProps) => {
const publicClient = usePublicClient();
const {
isLoading: loadingFeaturedBlacklistedKPITokenAddresses,
data: featuredBlacklistedKPITokenAddresses,
} = useFeaturedBlacklistedKPITokenAddresses({ publicClient });
const { isLoading: loadingFeaturedKPITokens, data: featuredKPITokens } =
useFeaturedKPITokens(featuredBlacklistedKPITokenAddresses);
useFathomTrackPageWatch();
const [debouncedLoading, setDebouncedLoading] = useState(
loadingFeaturedBlacklistedKPITokenAddresses || loadingFeaturedKPITokens,
);
const transition = useTransition(debouncedLoading, {
config: { ...springConfig.default, duration: 100 },
from: { opacity: 1 },
enter: { opacity: 1 },
leave: { opacity: 0 },
});
useDebounce(
() => {
setDebouncedLoading(
loadingFeaturedBlacklistedKPITokenAddresses ||
loadingFeaturedKPITokens,
);
},
500,
[loadingFeaturedBlacklistedKPITokenAddresses, loadingFeaturedKPITokens],
);
useEffect(() => {
const bodyElement = window.document.getElementById("__app_body");
if (!bodyElement) return;
bodyElement.scroll({ top: 0, left: 0, behavior: "smooth" });
}, []);
return (
<>
{transition((style, show) => {
return (
show && (
)
);
})}
>
);
};