import { filterForEventsTaggingId } from '@nostr-dev-kit/ndk' import { NDKContextType } from 'contexts/NDKContext' import { LoaderFunctionArgs, redirect } from 'react-router-dom' import { toast } from 'react-toastify' import { appRoutes } from 'routes' import { log, LogType } from 'utils' import { extractBlogDetails } from 'utils/blog' export const blogRouteLoader = (ndkContext: NDKContextType) => async ({ params }: LoaderFunctionArgs) => { const { naddr } = params if (!naddr) { log(true, LogType.Error, 'Required naddr.') return redirect(appRoutes.blogs) } try { const filter = filterForEventsTaggingId(naddr) if (!filter) { log(true, LogType.Error, 'Unable to create filter from blog naddr.') return redirect(appRoutes.blogs) } const event = await ndkContext.fetchEvent(filter) if (!event) { log(true, LogType.Error, 'Unable to fetch the blog event.') return null } const blogDetails = extractBlogDetails(event) return blogDetails } catch (error) { log( true, LogType.Error, 'An error occurred in fetching blog details from relays', error ) toast.error('An error occurred in fetching blog details from relays') return redirect(appRoutes.blogs) } }