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 && ( ) ); })}
); };