diff --git a/app/pages/news/index.tsx b/app/pages/news/index.tsx index 2625511..bb31758 100644 --- a/app/pages/news/index.tsx +++ b/app/pages/news/index.tsx @@ -4,11 +4,13 @@ import { Card } from '~/components/ui/card' import { CarouselHero } from '~/components/ui/carousel-hero' import { CarouselSection } from '~/components/ui/carousel-section' import { Newsletter } from '~/components/ui/newsletter' -import type { loader } from '~/routes/_news._index' +import { type clientLoader } from '~/routes/_news._index' import type { TNews } from '~/types/news' export const NewsPage = () => { - const loaderData = useRouteLoaderData('routes/_news._index') + const loaderData = useRouteLoaderData( + 'routes/_news._index', + ) const spotlight: TNews = { title: loaderData?.spotlightCategory?.name || '', description: loaderData?.spotlightCategory?.description || '', diff --git a/app/routes/_news._index.tsx b/app/routes/_news._index.tsx index 7fff202..47558e1 100644 --- a/app/routes/_news._index.tsx +++ b/app/routes/_news._index.tsx @@ -13,35 +13,61 @@ export const loader = async ({}: Route.LoaderArgs) => { const spotlightCategory = categoriesData.find( (category) => category.code === spotlightCode, ) - let { data: spotlightNews } = await getNews({ categories: [spotlightCode] }) - spotlightNews = spotlightNews.filter( - (news) => new Date(news.live_at) <= new Date(), - ) const beritaCode = 'berita' const beritaCategory = categoriesData.find( (category) => category.code === beritaCode, ) - let { data: beritaNews } = await getNews({ categories: [beritaCode] }) - beritaNews = beritaNews.filter((news) => new Date(news.live_at) <= new Date()) const kajianCode = 'kajian' const kajianCategory = categoriesData.find( (category) => category.code === kajianCode, ) - let { data: kajianNews } = await getNews({ categories: [kajianCode] }) - kajianNews = kajianNews.filter((news) => new Date(news.live_at) <= new Date()) return { spotlightCategory, - spotlightNews, + spotlightCode, beritaCategory, - beritaNews, + beritaCode, kajianCategory, + kajianCode, + } +} + +export const clientLoader = async ({ + serverLoader, +}: Route.ClientLoaderArgs) => { + const serverData = await serverLoader() + + let { data: spotlightNews } = await getNews({ + categories: [serverData.spotlightCode], + }) + spotlightNews = spotlightNews.filter( + (news) => new Date(news.live_at) <= new Date(), + ) + let { data: beritaNews } = await getNews({ + categories: [serverData.beritaCode], + }) + beritaNews = beritaNews.filter((news) => new Date(news.live_at) <= new Date()) + let { data: kajianNews } = await getNews({ + categories: [serverData.kajianCode], + }) + kajianNews = kajianNews.filter((news) => new Date(news.live_at) <= new Date()) + + return { + ...serverData, + spotlightNews, + beritaNews, kajianNews, } } +clientLoader.hydrate = true as const + +export const HydrateFallback = () => { + return
Loading...
+} + export const ErrorBoundary = ({ error }: Route.ErrorBoundaryProps) => { let message = 'Oops!' let details = 'An unexpected error occurred.'