From 7cba506d6b4fd704f38ea67c8b4c2e9f5f42f432 Mon Sep 17 00:00:00 2001 From: kieran Date: Thu, 6 Mar 2025 22:32:09 +0000 Subject: [PATCH] feat: latest news on homepage --- src/components/latest-news.tsx | 24 ++++++++++++++++++++++++ src/components/news-link.tsx | 26 ++++++++++++++++++++++++++ src/pages/home.tsx | 2 ++ src/pages/news.tsx | 30 +++++------------------------- 4 files changed, 57 insertions(+), 25 deletions(-) create mode 100644 src/components/latest-news.tsx create mode 100644 src/components/news-link.tsx diff --git a/src/components/latest-news.tsx b/src/components/latest-news.tsx new file mode 100644 index 0000000..43dc8fd --- /dev/null +++ b/src/components/latest-news.tsx @@ -0,0 +1,24 @@ +import { EventKind, RequestBuilder } from "@snort/system"; +import { NostrProfile } from "../const"; +import { useRequestBuilder } from "@snort/system-react"; +import { NewLink } from "./news-link"; + +export function LatestNews() { + const req = new RequestBuilder("latest-news"); + req + .withFilter() + .kinds([EventKind.LongFormTextNote]) + .authors([NostrProfile.id]) + .limit(1); + + const posts = useRequestBuilder(req); + + if (posts.length > 0) { + return ( +
+
Latest News
+ +
+ ); + } +} diff --git a/src/components/news-link.tsx b/src/components/news-link.tsx new file mode 100644 index 0000000..7ec4252 --- /dev/null +++ b/src/components/news-link.tsx @@ -0,0 +1,26 @@ +import { NostrEvent, NostrLink } from "@snort/system"; +import { Link } from "react-router-dom"; + +export function NewLink({ ev }: { ev: NostrEvent }) { + const link = NostrLink.fromEvent(ev); + const title = ev.tags.find((a) => a[0] == "title")?.[1]; + const posted = Number( + ev.tags.find((a) => a[0] == "published_at")?.[1] ?? ev.created_at, + ); + const slug = title + ?.toLocaleLowerCase() + .replace(/[:/]/g, "") + .trimStart() + .trimEnd() + .replace(/ /g, "-"); + return ( + +
+
+
{title}
+
{new Date(posted * 1000).toDateString()}
+
+
+ + ); +} diff --git a/src/pages/home.tsx b/src/pages/home.tsx index 5c97112..86824a8 100644 --- a/src/pages/home.tsx +++ b/src/pages/home.tsx @@ -4,6 +4,7 @@ import VpsCard from "../components/vps-card"; import { ApiUrl, NostrProfile } from "../const"; import { Link } from "react-router-dom"; import { VpsCustomOrder } from "../components/vps-custom"; +import { LatestNews } from "../components/latest-news"; export default function HomePage() { const [offers, setOffers] = useState(); @@ -16,6 +17,7 @@ export default function HomePage() { return ( <>
+
VPS Offers
Virtual Private Server hosting with flexible plans, high uptime, and diff --git a/src/pages/news.tsx b/src/pages/news.tsx index 6ffe74c..102b989 100644 --- a/src/pages/news.tsx +++ b/src/pages/news.tsx @@ -1,7 +1,7 @@ -import { EventKind, NostrLink, RequestBuilder } from "@snort/system"; +import { EventKind, RequestBuilder } from "@snort/system"; import { NostrProfile } from "../const"; import { useRequestBuilder } from "@snort/system-react"; -import { Link } from "react-router-dom"; +import { NewLink } from "../components/news-link"; export function NewsPage() { const req = new RequestBuilder("news"); @@ -26,29 +26,9 @@ export function NewsPage() { ); 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 ( - -
-
-
{title}
-
{new Date(posted * 1000).toDateString()}
-
-
- - ); - })} + .map((a) => ( + + ))} {posts.length === 0 &&
No posts yet..
}
);