import { useEffect, useRef, useState } from "react"; import { Helmet } from "react-helmet-async"; import { useTranslation } from "react-i18next"; import { To, useNavigate } from "react-router-dom"; import { WideContainer } from "@/components/layout/WideContainer"; import { useDebounce } from "@/hooks/useDebounce"; import { useRandomTranslation } from "@/hooks/useRandomTranslation"; import { useSearchQuery } from "@/hooks/useSearchQuery"; import { FeaturedCarousel } from "@/pages/discover/components/FeaturedCarousel"; import type { FeaturedMedia } from "@/pages/discover/components/FeaturedCarousel"; import DiscoverContent from "@/pages/discover/discoverContent"; import { HomeLayout } from "@/pages/layouts/HomeLayout"; import { BookmarksCarousel } from "@/pages/parts/home/BookmarksCarousel"; import { BookmarksPart } from "@/pages/parts/home/BookmarksPart"; import { HeroPart } from "@/pages/parts/home/HeroPart"; import { WatchingCarousel } from "@/pages/parts/home/WatchingCarousel"; import { WatchingPart } from "@/pages/parts/home/WatchingPart"; import { SearchListPart } from "@/pages/parts/search/SearchListPart"; import { SearchLoadingPart } from "@/pages/parts/search/SearchLoadingPart"; import { conf } from "@/setup/config"; import { useOverlayStack } from "@/stores/interface/overlayStack"; import { usePreferencesStore } from "@/stores/preferences"; import { MediaItem } from "@/utils/mediaTypes"; import { Button } from "./About"; import { AdsPart } from "./parts/home/AdsPart"; function useSearch(search: string) { const [searching, setSearching] = useState(false); const [loading, setLoading] = useState(false); const debouncedSearch = useDebounce(search, 500); useEffect(() => { setSearching(search !== ""); setLoading(search !== ""); if (search !== "") { window.scrollTo(0, 0); } }, [search]); useEffect(() => { setLoading(false); }, [debouncedSearch]); return { loading, searching, }; } // What the sigma? export function HomePage() { const { t } = useTranslation(); const { t: randomT } = useRandomTranslation(); const emptyText = randomT(`home.search.empty`); const navigate = useNavigate(); const [showBg, setShowBg] = useState(false); const searchParams = useSearchQuery(); const [search] = searchParams; const s = useSearch(search); const [showBookmarks, setShowBookmarks] = useState(false); const [showWatching, setShowWatching] = useState(false); const { showModal } = useOverlayStack(); const enableDiscover = usePreferencesStore((state) => state.enableDiscover); const enableFeatured = usePreferencesStore((state) => state.enableFeatured); const carouselRefs = useRef<{ [key: string]: HTMLDivElement | null }>({}); const enableCarouselView = usePreferencesStore( (state) => state.enableCarouselView, ); const enableLowPerformanceMode = usePreferencesStore( (state) => state.enableLowPerformanceMode, ); const homeSectionOrder = usePreferencesStore( (state) => state.homeSectionOrder, ); const handleClick = (path: To) => { window.scrollTo(0, 0); navigate(path); }; const handleShowDetails = async (media: MediaItem | FeaturedMedia) => { showModal("details", { id: Number(media.id), type: media.type === "movie" ? "movie" : "show", }); }; const renderHomeSections = () => { const sections = homeSectionOrder.map((section) => { switch (section) { case "watching": return enableCarouselView ? ( ) : ( ); case "bookmarks": return enableCarouselView ? ( ) : ( ); default: return null; } }); if (enableCarouselView) { return ( {sections} ); } return (
{sections}
); }; return (
{t("global.name")} {/* Page Header */} {enableFeatured ? ( ) : ( )} {conf().SHOW_AD ? : null}
{/* Search */} {search && ( {s.loading ? ( ) : ( s.searching && ( ) )} )} {/* User Content */} {!search && renderHomeSections()} {/* Under user content */} {/* Empty text */} {!(showBookmarks || showWatching) && (!enableDiscover || enableLowPerformanceMode) ? (

{emptyText}

) : null} {/* Discover Spacing */} {enableDiscover && (enableFeatured ? (
) : showBookmarks || showWatching ? (
) : (
))} {/* there... perfect. */} {/* Discover section or discover button */} {enableDiscover && !search && !enableLowPerformanceMode ? ( ) : (
{!search && !enableLowPerformanceMode && ( )}
)} ); }