1- import {
2- notFound ,
3- redirect ,
4- createFileRoute ,
5- Link ,
6- } from '@tanstack/react-router'
1+ import { notFound , redirect , createFileRoute } from '@tanstack/react-router'
72import { seo } from '~/utils/seo'
83import { PostNotFound } from './blog'
94import { createServerFn } from '@tanstack/react-start'
10- import { formatAuthors , getPublishedPosts } from '~/utils/blog'
5+ import { formatAuthors } from '~/utils/blog'
116import { format } from '~/utils/dates'
127import * as v from 'valibot'
138import { setResponseHeaders } from '@tanstack/react-start/server'
149import { allPosts } from 'content-collections'
1510import * as React from 'react'
1611import { MarkdownContent } from '~/components/markdown'
1712import { Card } from '~/components/Card'
18- import { libraries } from '~/libraries '
13+ import { LibrariesWidget } from '~/components/LibrariesWidget '
1914import { partners } from '~/utils/partners'
2015import { PartnersRail , RightRail } from '~/components/RightRail'
16+ import { RecentPostsWidget } from '~/components/RecentPostsWidget'
2117
2218import { Toc } from '~/components/Toc'
2319import { Breadcrumbs } from '~/components/Breadcrumbs'
@@ -59,22 +55,6 @@ const fetchBlogPost = createServerFn({ method: 'GET' })
5955 const now = new Date ( )
6056 const publishDate = new Date ( post . published )
6157 const isUnpublished = post . draft || publishDate > now
62- const recentPosts = getPublishedPosts ( )
63- . filter ( ( entry ) => entry . slug !== docsPath )
64- . slice ( 0 , 5 )
65- . map ( ( entry ) => ( {
66- slug : entry . slug ,
67- title : entry . title ,
68- } ) )
69-
70- const featuredLibraries = libraries
71- . filter ( ( library ) => library . visible !== false )
72- . slice ( 0 , 8 )
73- . map ( ( library ) => ( {
74- id : library . id ,
75- name : library . name ,
76- } ) )
77-
7858 return {
7959 title : post . title ,
8060 description : post . excerpt ,
@@ -84,8 +64,6 @@ const fetchBlogPost = createServerFn({ method: 'GET' })
8464 headerImage : post . headerImage ,
8565 filePath,
8666 isUnpublished,
87- recentPosts,
88- featuredLibraries,
8967 }
9068 } )
9169
@@ -128,15 +106,7 @@ export const Route = createFileRoute('/blog/$')({
128106} )
129107
130108function BlogPost ( ) {
131- const {
132- title,
133- content,
134- filePath,
135- authors,
136- published,
137- recentPosts,
138- featuredLibraries,
139- } = Route . useLoaderData ( )
109+ const { title, content, filePath, authors, published } = Route . useLoaderData ( )
140110
141111 const blogContent = `<small>_by ${ formatAuthors ( authors ) } on ${ format (
142112 new Date ( published || 0 ) ,
@@ -201,14 +171,12 @@ ${content}`
201171 const branch = 'main'
202172 const activePartners = React . useMemo (
203173 ( ) =>
204- partners
205- . filter (
206- ( d ) =>
207- d . status === 'active' &&
208- d . name !== 'Nozzle.io' &&
209- d . id !== 'fireship' ,
210- )
211- . slice ( 0 , 8 ) ,
174+ partners . filter (
175+ ( d ) =>
176+ d . status === 'active' &&
177+ d . name !== 'Nozzle.io' &&
178+ d . id !== 'fireship' ,
179+ ) ,
212180 [ ] ,
213181 )
214182
@@ -274,42 +242,11 @@ ${content}`
274242 </ div >
275243 < RightRail breakpoint = "md" >
276244 < PartnersRail partners = { activePartners } />
277- < Card className = "p-4" >
278- < div className = "mb-3 flex items-center justify-between" >
279- < Link to = "/blog" className = "font-semibold text-sm" >
280- Blog Posts
281- </ Link >
282- </ div >
283- < div className = "flex flex-col gap-2" >
284- { recentPosts . map ( ( post ) => (
285- < a
286- key = { post . slug }
287- href = { `/blog/${ post . slug } ` }
288- className = "text-xs opacity-70 hover:opacity-100 hover:underline"
289- >
290- { post . title }
291- </ a >
292- ) ) }
293- </ div >
294- </ Card >
295-
296- < Card className = "p-4" >
297- < div className = "mb-3" >
298- < a href = "/#libraries" className = "font-semibold text-sm" >
299- Libraries
300- </ a >
301- </ div >
302- < div className = "grid grid-cols-2 gap-2" >
303- { featuredLibraries . map ( ( library ) => (
304- < a
305- key = { library . id }
306- href = { `/${ library . id } /latest` }
307- className = "text-xs opacity-70 hover:opacity-100 hover:underline"
308- >
309- { library . name . replace ( 'TanStack ' , '' ) }
310- </ a >
311- ) ) }
312- </ div >
245+ < div className = "hidden md:block border border-gray-500/20 rounded-l-lg overflow-hidden w-full" >
246+ < RecentPostsWidget />
247+ </ div >
248+ < Card >
249+ < LibrariesWidget />
313250 </ Card >
314251 </ RightRail >
315252 </ div >
0 commit comments