"use client"; import { defaultRegion } from "@/constants"; import { useQuery } from "@tanstack/react-query"; import { useSearchParams } from "next/navigation"; import { useMemo } from "react"; import { Button } from "@nextui-org/button"; import { Spacer } from "@nextui-org/spacer"; import { useClient } from "@/hooks/useClient"; import getRegionCodes from "@/utils/getRegionCodes"; import { Container } from "@/components/Container"; import { LoadingPage } from "@/components/LoadingPage"; import { Video } from "@/components/Video"; import { RegionSwitcher } from "./RegionSwitcher"; import { Component } from "@/typings/component"; export const Trending: Component = ({}) => { const client = useClient(); const searchParams = useSearchParams(); const validRegions = useMemo(() => getRegionCodes(), []); const specifiedRegion = searchParams.get("region")?.toUpperCase() ?? defaultRegion; const [region, regionError] = useMemo(() => { const foundRegion = validRegions.find( (validRegion) => validRegion.code === specifiedRegion ); if (foundRegion === undefined) return [null, new Error(`Region \`${specifiedRegion}\` is invalid`)]; return [foundRegion, null]; }, [specifiedRegion, validRegions]); const { isLoading, error: fetchError, refetch, data } = useQuery({ queryKey: ["trending", region], queryFn: () => { if (region === null) return; return client.getTrending(region.code); }, enabled: regionError === null }); const noDataError = useMemo(() => { if (data && data.length === 0) return new Error( `Could not find any trending video's in region \`${region?.name}\`` ); return null; }, [data, region]); const error: Error | null = regionError ?? fetchError ?? noDataError ?? null; return ( <>

Trending

{isLoading && !data && } {error && (

An error occurred loading the trending page

{error.toString()}

)} {data && error === null && (
{data.map((video) => (
)}
); };