import FeedSwitcher from '@/components/FeedSwitcher' import RelayIcon from '@/components/RelayIcon' import { Drawer, DrawerContent } from '@/components/ui/drawer' import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' import { IS_COMMUNITY_MODE, COMMUNITY_RELAY_SETS, COMMUNITY_RELAYS } from '@/constants' import { simplifyUrl } from '@/lib/url' import { cn } from '@/lib/utils' import { useFavoriteRelays } from '@/providers/FavoriteRelaysProvider' import { useFeed } from '@/providers/FeedProvider' import { useScreenSize } from '@/providers/ScreenSizeProvider' import { ChevronDown, Server, Star, UsersRound } from 'lucide-react' import { forwardRef, HTMLAttributes, useMemo, useState } from 'react' import { useTranslation } from 'react-i18next' export default function FeedButton({ className }: { className?: string }) { const { isSmallScreen } = useScreenSize() const [open, setOpen] = useState(false) if (IS_COMMUNITY_MODE && COMMUNITY_RELAY_SETS.length + COMMUNITY_RELAYS.length <= 1) { return } if (isSmallScreen) { return ( <> setOpen(true)} />
setOpen(false)} />
) } return (
e.stopPropagation()} onTouchMove={(e) => e.stopPropagation()} > setOpen(false)} />
) } const FeedSwitcherTrigger = forwardRef>( ({ className, ...props }, ref) => { const { t } = useTranslation() const { feedInfo, relayUrls } = useFeed() const { relaySets } = useFavoriteRelays() const activeRelaySet = useMemo(() => { return feedInfo?.feedType === 'relays' && feedInfo.id ? (relaySets.find((set) => set.id === feedInfo.id) ?? COMMUNITY_RELAY_SETS.find((set) => set.id === feedInfo.id)) : undefined }, [feedInfo, relaySets]) const title = useMemo(() => { if (feedInfo?.feedType === 'following') { return t('Following') } if (feedInfo?.feedType === 'pinned') { return t('Special Follow') } if (relayUrls.length === 0) { return t('Choose a feed') } if (feedInfo?.feedType === 'relay') { return simplifyUrl(feedInfo?.id ?? '') } if (feedInfo?.feedType === 'relays') { return feedInfo.name ?? activeRelaySet?.name ?? activeRelaySet?.id } }, [feedInfo, activeRelaySet]) const icon = useMemo(() => { if (feedInfo?.feedType === 'following') return if (feedInfo?.feedType === 'pinned') return if (feedInfo?.feedType === 'relay' && feedInfo.id) { return } return }, [feedInfo]) const clickable = !IS_COMMUNITY_MODE || COMMUNITY_RELAY_SETS.length + COMMUNITY_RELAYS.length > 1 return (
{icon}
{title}
{clickable && }
) } )