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[];