45 lines
1.3 KiB
TypeScript
Raw Normal View History

import { filterForEventsTaggingId } from '@nostr-dev-kit/ndk'
2024-10-31 20:14:29 +01:00
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'
2024-10-31 20:14:29 +01:00
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)
2024-10-31 20:14:29 +01:00
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
2024-10-31 20:14:29 +01:00
}
const blogDetails = extractBlogDetails(event)
return blogDetails
2024-10-31 20:14:29 +01:00
} 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')
2024-10-31 20:14:29 +01:00
return redirect(appRoutes.blogs)
}
}