44 lines
1.3 KiB
TypeScript
44 lines
1.3 KiB
TypeScript
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)
|
|
}
|
|
}
|