From 1aab7c93725beed5a44665586b7d4c1dd414c398 Mon Sep 17 00:00:00 2001
From: kieran
{t.tokens ? t.tokens.map(renderToken) : t.raw}
-
{t.raw}
;
+ return (
+
+ {t.raw.substring(1, t.raw.length - 1)}
+
+ );
}
case "code": {
return {t.raw}; @@ -84,23 +86,34 @@ const Markdown = forwardRef
+{t.tokens ? t.tokens.map(renderToken) : t.raw}); } case "link": { return ( - + {t.tokens ? t.tokens.map(renderToken) : t.raw} ); } case "list": { if (t.ordered) { - return{t.items.map(renderToken)}
; + return ( ++ {t.items.map(renderToken)} +
+ ); } else { - return{t.items.map(renderToken)}
; + return ( ++ {t.items.map(renderToken)} +
+ ); } } case "list_item": { @@ -170,7 +183,7 @@ const Markdown = forwardRef( return marked.lexer(props.content); }, [props.content]); return ( - +{parsed .filter((a) => a.type !== "footnote" && a.type !== "footnotes") .map((a) => renderToken(a))} diff --git a/src/main.tsx b/src/main.tsx index 72624dc..2050d6c 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -15,6 +15,8 @@ import { StatusPage } from "./pages/status.tsx"; import { AccountSettings } from "./pages/account-settings.tsx"; import { VmBillingPage } from "./pages/vm-billing.tsx"; import { VmGraphsPage } from "./pages/vm-graphs.tsx"; +import { NewsPage } from "./pages/news.tsx"; +import { NewsPost } from "./pages/news-post.tsx"; const system = new NostrSystem({ automaticOutboxModel: false, @@ -71,6 +73,14 @@ const router = createBrowserRouter([ path: "/status", element:, }, + { + path: "/news", + element: , + }, + { + path: "/news/:id", + element: , + }, ], }, ]); diff --git a/src/pages/home.tsx b/src/pages/home.tsx index 4e2a76c..2562d82 100644 --- a/src/pages/home.tsx +++ b/src/pages/home.tsx @@ -40,6 +40,8 @@ export default function HomePage() { {" | "} Terms {" | "} + News + {" | "} a[0] == "title")?.[1]; + const posted = Number( + state.tags.find((a) => a[0] == "published_at")?.[1] ?? state.created_at, + ); + return ( + ++ ); +} diff --git a/src/pages/news.tsx b/src/pages/news.tsx new file mode 100644 index 0000000..6ffe74c --- /dev/null +++ b/src/pages/news.tsx @@ -0,0 +1,55 @@ +import { EventKind, NostrLink, RequestBuilder } from "@snort/system"; +import { NostrProfile } from "../const"; +import { useRequestBuilder } from "@snort/system-react"; +import { Link } from "react-router-dom"; + +export function NewsPage() { + const req = new RequestBuilder("news"); + req + .withFilter() + .kinds([EventKind.LongFormTextNote]) + .authors([NostrProfile.id]) + .limit(10); + + const posts = useRequestBuilder(req); + + return ( +{title}+++ ++ {new Date(posted * 1000).toLocaleString()}++ ++ ); +}News+ {posts + .sort((a, b) => { + const a_posted = Number( + a.tags.find((a) => a[0] == "published_at")?.[1] ?? a.created_at, + ); + const b_posted = Number( + b.tags.find((z) => z[0] == "published_at")?.[1] ?? b.created_at, + ); + return b_posted - a_posted; + }) + .map((a) => { + const link = NostrLink.fromEvent(a); + const title = a.tags.find((a) => a[0] == "title")?.[1]; + const posted = Number( + a.tags.find((a) => a[0] == "published_at")?.[1] ?? a.created_at, + ); + const slug = title + ?.toLocaleLowerCase() + .replace(/[:/]/g, "") + .trimStart() + .trimEnd() + .replace(/ /g, "-"); + return ( + +++ + ); + })} + {posts.length === 0 &&++{title}+{new Date(posted * 1000).toDateString()}+No posts yet..} +