From f6b6daa39b3952378c9fa79b424be75637b7aef2 Mon Sep 17 00:00:00 2001 From: highperfocused Date: Mon, 20 Oct 2025 15:39:27 +0200 Subject: [PATCH] refactor: replace useBlogPost with useLongFormContentNote across components for consistency --- src/components/BlogPostForm.tsx | 4 ++-- src/components/LatestArticles.tsx | 4 ++-- src/components/ProfessionalBlogPostForm.tsx | 4 ++-- src/components/TrendingTags.tsx | 4 ++-- .../{useBlogPost.ts => useLongFormContentNote.ts} | 14 +++++++------- ...{useBlogPosts.ts => useLongFormContentNotes.ts} | 10 +++++----- src/pages/ArticlePage.tsx | 4 ++-- 7 files changed, 22 insertions(+), 22 deletions(-) rename src/hooks/{useBlogPost.ts => useLongFormContentNote.ts} (65%) rename src/hooks/{useBlogPosts.ts => useLongFormContentNotes.ts} (84%) diff --git a/src/components/BlogPostForm.tsx b/src/components/BlogPostForm.tsx index 03cfa81..148346b 100644 --- a/src/components/BlogPostForm.tsx +++ b/src/components/BlogPostForm.tsx @@ -3,7 +3,7 @@ import { useNavigate } from 'react-router-dom'; import { nip19 } from 'nostr-tools'; import { useCurrentUser } from '@/hooks/useCurrentUser'; import { usePublishBlogPost } from '@/hooks/usePublishBlogPost'; -import { useBlogPost } from '@/hooks/useBlogPost'; +import { useLongFormContentNote } from '@/hooks/useLongFormContentNote'; import { useUploadFile } from '@/hooks/useUploadFile'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; @@ -25,7 +25,7 @@ export function BlogPostForm({ editIdentifier }: BlogPostFormProps) { const { mutateAsync: uploadFile, isPending: isUploading } = useUploadFile(); // Load existing post if editing (using the current user's pubkey) - const { data: existingPost } = useBlogPost( + const { data: existingPost } = useLongFormContentNote( user?.pubkey || '', editIdentifier || '' ); diff --git a/src/components/LatestArticles.tsx b/src/components/LatestArticles.tsx index a5fc451..2070ac3 100644 --- a/src/components/LatestArticles.tsx +++ b/src/components/LatestArticles.tsx @@ -3,7 +3,7 @@ import { Card, CardHeader } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Skeleton } from '@/components/ui/skeleton'; import { Newspaper, ChevronDown } from 'lucide-react'; -import { useBlogPosts } from '@/hooks/useBlogPosts'; +import { useLongFormContentNotes } from '@/hooks/useLongFormContentNotes'; import { ArticlePreview } from '@/components/ArticlePreview'; const INITIAL_POSTS_COUNT = 3; @@ -11,7 +11,7 @@ const LOAD_MORE_COUNT = 6; export function LatestArticles() { const [visibleCount, setVisibleCount] = useState(INITIAL_POSTS_COUNT); - const { data: posts, isLoading } = useBlogPosts(); + const { data: posts, isLoading } = useLongFormContentNotes(); // Loading state if (isLoading) { diff --git a/src/components/ProfessionalBlogPostForm.tsx b/src/components/ProfessionalBlogPostForm.tsx index 359848f..e387bd1 100644 --- a/src/components/ProfessionalBlogPostForm.tsx +++ b/src/components/ProfessionalBlogPostForm.tsx @@ -4,7 +4,7 @@ import { nip19 } from 'nostr-tools'; import { SerializedEditorState } from 'lexical'; import { useCurrentUser } from '@/hooks/useCurrentUser'; import { usePublishBlogPost } from '@/hooks/usePublishBlogPost'; -import { useBlogPost } from '@/hooks/useBlogPost'; +import { useLongFormContentNote } from '@/hooks/useLongFormContentNote'; import { useUploadFile } from '@/hooks/useUploadFile'; import { useIsMobile } from '@/hooks/useIsMobile'; import { Button } from '@/components/ui/button'; @@ -50,7 +50,7 @@ export function ProfessionalBlogPostForm({ editIdentifier }: ProfessionalBlogPos const { mutateAsync: uploadFile, isPending: isUploading } = useUploadFile(); // Load existing post if editing (using the current user's pubkey) - const { data: existingPost, isLoading: isLoadingPost } = useBlogPost( + const { data: existingPost, isLoading: isLoadingPost } = useLongFormContentNote( user?.pubkey || '', editIdentifier || '' ); diff --git a/src/components/TrendingTags.tsx b/src/components/TrendingTags.tsx index 13540ec..df73e67 100644 --- a/src/components/TrendingTags.tsx +++ b/src/components/TrendingTags.tsx @@ -3,7 +3,7 @@ import { Card, CardContent } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Skeleton } from '@/components/ui/skeleton'; import { TrendingUp, Hash } from 'lucide-react'; -import { useBlogPosts } from '@/hooks/useBlogPosts'; +import { useLongFormContentNotes } from '@/hooks/useLongFormContentNotes'; interface TagCount { tag: string; @@ -12,7 +12,7 @@ interface TagCount { export function TrendingTags() { const navigate = useNavigate(); - const { data: posts, isLoading } = useBlogPosts(); + const { data: posts, isLoading } = useLongFormContentNotes(); // Loading state if (isLoading) { diff --git a/src/hooks/useBlogPost.ts b/src/hooks/useLongFormContentNote.ts similarity index 65% rename from src/hooks/useBlogPost.ts rename to src/hooks/useLongFormContentNote.ts index e1b0334..e05b502 100644 --- a/src/hooks/useBlogPost.ts +++ b/src/hooks/useLongFormContentNote.ts @@ -2,14 +2,14 @@ import { useQuery } from '@tanstack/react-query'; import { useNostr } from '@nostrify/react'; import type { NostrEvent } from '@nostrify/nostrify'; -interface BlogPost extends NostrEvent { +interface LongFormContentNote extends NostrEvent { kind: 30023; } /** - * Validates that a Nostr event is a valid NIP-23 blog post + * Validates that a Nostr event is a valid NIP-23 long form content note */ -function validateBlogPost(event: NostrEvent): event is BlogPost { +function validateLongFormContentNote(event: NostrEvent): event is LongFormContentNote { if (event.kind !== 30023) return false; const d = event.tags.find(([name]) => name === 'd')?.[1]; @@ -21,13 +21,13 @@ function validateBlogPost(event: NostrEvent): event is BlogPost { } /** - * Hook to fetch a single blog post by author pubkey and d-tag identifier + * Hook to fetch a single long form content note by author pubkey and d-tag identifier */ -export function useBlogPost(pubkey: string, identifier: string) { +export function useLongFormContentNote(pubkey: string, identifier: string) { const { nostr } = useNostr(); return useQuery({ - queryKey: ['blog-post', pubkey, identifier], + queryKey: ['long-form-content-note', pubkey, identifier], queryFn: async (c) => { const signal = AbortSignal.any([c.signal, AbortSignal.timeout(3000)]); @@ -46,7 +46,7 @@ export function useBlogPost(pubkey: string, identifier: string) { const event = events[0]; // Validate the event - if (!validateBlogPost(event)) return null; + if (!validateLongFormContentNote(event)) return null; return event; }, diff --git a/src/hooks/useBlogPosts.ts b/src/hooks/useLongFormContentNotes.ts similarity index 84% rename from src/hooks/useBlogPosts.ts rename to src/hooks/useLongFormContentNotes.ts index 42dcb57..d8dee46 100644 --- a/src/hooks/useBlogPosts.ts +++ b/src/hooks/useLongFormContentNotes.ts @@ -9,7 +9,7 @@ interface BlogPost extends NostrEvent { /** * Validates that a Nostr event is a valid NIP-23 blog post */ -function validateBlogPost(event: NostrEvent): event is BlogPost { +function validateLongFormContentNote(event: NostrEvent): event is BlogPost { // Must be kind 30023 if (event.kind !== 30023) return false; @@ -24,13 +24,13 @@ function validateBlogPost(event: NostrEvent): event is BlogPost { } /** - * Hook to fetch all blog posts from all authors + * Hook to fetch all long form content notes from all authors */ -export function useBlogPosts() { +export function useLongFormContentNotes() { const { nostr } = useNostr(); return useQuery({ - queryKey: ['blog-posts'], + queryKey: ['long-form-content-notes'], queryFn: async (c) => { const signal = AbortSignal.any([c.signal, AbortSignal.timeout(3000)]); @@ -43,7 +43,7 @@ export function useBlogPosts() { ); // Filter and validate events - const validPosts = events.filter(validateBlogPost); + const validPosts = events.filter(validateLongFormContentNote); // Helper: safely parse published_at from tags const getPublishedAt = (event: NostrEvent): number | undefined => { diff --git a/src/pages/ArticlePage.tsx b/src/pages/ArticlePage.tsx index 8d20c7f..d95926e 100644 --- a/src/pages/ArticlePage.tsx +++ b/src/pages/ArticlePage.tsx @@ -1,7 +1,7 @@ import { useParams } from 'react-router-dom'; import { nip19 } from 'nostr-tools'; import { useSeoMeta } from '@unhead/react'; -import { useBlogPost } from '@/hooks/useBlogPost'; +import { useLongFormContentNote } from '@/hooks/useLongFormContentNote'; import { useAuthor } from '@/hooks/useAuthor'; import { ArticleView } from '@/components/ArticleView'; import { Skeleton } from '@/components/ui/skeleton'; @@ -30,7 +30,7 @@ export default function ArticlePage() { console.error('Failed to decode naddr:', error); } - const { data: post, isLoading } = useBlogPost(pubkey, identifier); + const { data: post, isLoading } = useLongFormContentNote(pubkey, identifier); const author = useAuthor(pubkey); // Extract article metadata