import { useContext, useEffect, useState } from "react"; import { Link, Outlet, RouteObject, useParams } from "react-router-dom"; import { FormattedMessage } from "react-intl"; import { unixNow } from "@snort/shared"; import { NostrLink } from "@snort/system"; import { SnortContext } from "@snort/system-react"; import Timeline from "@/Element/Feed/Timeline"; import { TimelineSubject } from "@/Feed/TimelineFeed"; import { debounce, getRelayName, sha256 } from "@/SnortUtils"; import useLogin from "@/Hooks/useLogin"; import Discover from "@/Pages/Discover"; import TrendingUsers from "@/Element/Trending/TrendingUsers"; import TrendingNotes from "@/Element/Trending/TrendingPosts"; import HashTagsPage from "@/Pages/HashTagsPage"; import SuggestedProfiles from "@/Element/SuggestedProfiles"; import { TaskList } from "@/Tasks/TaskList"; import TimelineFollows from "@/Element/Feed/TimelineFollows"; import { RootTabs } from "@/Element/Feed/RootTabs"; import { DeckContext } from "@/Pages/DeckLayout"; import { TopicsPage } from "./TopicsPage"; import TrendingHashtags from "@/Element/Trending/TrendingHashtags"; import messages from "./messages"; interface RelayOption { url: string; paid: boolean; } export default function RootPage() { return ( <>
); } const FollowsHint = () => { const { publicKey: pubKey, follows } = useLogin(); if (follows.item?.length === 0 && pubKey) { return ( ), }} /> ); } return null; }; export const GlobalTab = () => { const { relays } = useLogin(); const [relay, setRelay] = useState(); const [allRelays, setAllRelays] = useState(); const [now] = useState(unixNow()); const system = useContext(SnortContext); function globalRelaySelector() { if (!allRelays || allRelays.length === 0) return null; const paidRelays = allRelays.filter(a => a.paid); const publicRelays = allRelays.filter(a => !a.paid); return (

); } useEffect(() => { return debounce(500, () => { const ret: RelayOption[] = []; system.Sockets.forEach(v => { if (v.connected) { ret.push({ url: v.address, paid: v.info?.limitation?.payment_required ?? false, }); } }); ret.sort(a => (a.paid ? -1 : 1)); if (ret.length > 0 && !relay) { setRelay(ret[0]); } setAllRelays(ret); }); }, [relays, relay]); return ( <> {globalRelaySelector()} {relay && ( )} ); }; export const NotesTab = () => { // eslint-disable-next-line @typescript-eslint/no-unused-vars const deckContext = useContext(DeckContext); return ( <> { deckContext.setThread(NostrLink.fromEvent(ev)); } : undefined } /> ); }; export const ConversationsTab = () => { return ; }; export const TagsTab = (params: { tag?: string }) => { const { tag } = useParams(); const t = params.tag ?? tag ?? ""; const subject: TimelineSubject = { type: "hashtag", items: [t], discriminator: `tags-${t}`, streams: true, }; return ; }; const DefaultTab = () => { const { preferences, publicKey } = useLogin(s => ({ preferences: s.appData.item.preferences, publicKey: s.publicKey, })); const tab = publicKey ? preferences.defaultRootTab ?? `notes` : `trending/notes`; const elm = RootTabRoutes.find(a => a.path === tab)?.element; return elm; }; export const RootTabRoutes = [ { path: "", element: , }, { path: "global", element: , }, { path: "notes", element: , }, { path: "conversations", element: , }, { path: "discover", element: , }, { path: "tag/:tag", element: , }, { path: "trending/notes", element: , }, { path: "trending/people", element: (
), }, { path: "trending/hashtags", element: , }, { path: "suggested", element: (
), }, { path: "t/:tag", element: , }, { path: "topics", element: , }, ]; export const RootRoutes = [ { path: "/", element: , children: RootTabRoutes, }, ] as RouteObject[];