diff --git a/app/components/ui/carousel-hero.tsx b/app/components/ui/carousel-hero.tsx index 71bc36f..8bd1df8 100644 --- a/app/components/ui/carousel-hero.tsx +++ b/app/components/ui/carousel-hero.tsx @@ -1,15 +1,16 @@ import useEmblaCarousel from 'embla-carousel-react' -import { useCallback, useEffect, useState } from 'react' -import { useRouteLoaderData } from 'react-router' +import { Suspense, useCallback, useEffect, useState } from 'react' +import { Await, useRouteLoaderData } from 'react-router' import { stripHtml } from 'string-strip-html' -import { Button } from '~/components/ui/button' import { CarouselButton } from '~/components/ui/button-slide' import { useNewsContext } from '~/contexts/news' import type { loader } from '~/routes/_news' import type { TNews } from '~/types/news' import { getPremiumAttribute } from '~/utils/render' +import { Button } from './button' + export const CarouselHero = (properties: TNews) => { const { setIsSuccessOpen } = useNewsContext() const loaderData = useRouteLoaderData('routes/_news') @@ -72,43 +73,52 @@ export const CarouselHero = (properties: TNews) => { ref={emblaReference} >
- {items.map( - ({ featured_image, title, content, slug, is_premium }, index) => ( -
-
- {title} -
-
-

- {title} -

-

- {stripHtml(content).result} -

-
-
}> + + {(value) => + value.data.map( + ( + { featured_image, title, content, slug, is_premium }, + index, + ) => ( +
- View More - -
-
-
- ), - )} +
+ {title} +
+
+

+ {title} +

+

+ {stripHtml(content).result} +

+
+ +
+
+
+ ), + ) + } + + diff --git a/app/components/ui/carousel-section.tsx b/app/components/ui/carousel-section.tsx index 8e317ba..615cc4b 100644 --- a/app/components/ui/carousel-section.tsx +++ b/app/components/ui/carousel-section.tsx @@ -1,15 +1,15 @@ import useEmblaCarousel from 'embla-carousel-react' -import { useCallback, useEffect, useState } from 'react' -import { useRouteLoaderData } from 'react-router' +import { Suspense, useCallback, useEffect, useState } from 'react' +import { Await, useRouteLoaderData } from 'react-router' import { stripHtml } from 'string-strip-html' -import { Button } from '~/components/ui/button' import { CarouselButton } from '~/components/ui/button-slide' import { useNewsContext } from '~/contexts/news' import type { loader } from '~/routes/_news' import type { TNews } from '~/types/news' import { getPremiumAttribute } from '~/utils/render' +import { Button } from './button' import { Tags } from './tags' export const CarouselSection = (properties: TNews) => { @@ -79,50 +79,56 @@ export const CarouselSection = (properties: TNews) => { ref={emblaReference} >
- {items.map( - ( - { featured_image, title, content, tags, slug, is_premium }, - index, - ) => ( -
-
- {title} -
-
- -

- {title} -

-
-

- {stripHtml(content).result} -

-
}> + + {(value) => + value.data.map( + ( + { featured_image, title, content, tags, slug, is_premium }, + index, + ) => ( +
- View More - -
-
-
- ), - )} +
+ {title} +
+
+ +

+ {title} +

+
+

+ {stripHtml(content).result} +

+ +
+
+
+ ), + ) + } + + diff --git a/app/pages/news/index.tsx b/app/pages/news/index.tsx index 1ee72e6..c7f8c5e 100644 --- a/app/pages/news/index.tsx +++ b/app/pages/news/index.tsx @@ -12,17 +12,17 @@ export const NewsPage = () => { const spotlight: TNews = { title: loaderData?.spotlightCategory?.name || '', description: loaderData?.spotlightCategory?.description || '', - items: loaderData?.spotlightNews || [], + items: loaderData?.spotlightData || Promise.resolve({ data: [] }), } const berita: TNews = { title: loaderData?.beritaCategory?.name || '', description: loaderData?.beritaCategory?.description || '', - items: loaderData?.beritaNews || [], + items: loaderData?.beritaData || Promise.resolve({ data: [] }), } const kajian: TNews = { title: loaderData?.kajianCategory?.name || '', description: loaderData?.kajianCategory?.description || '', - items: loaderData?.kajianNews || [], + items: loaderData?.kajianData || Promise.resolve({ data: [] }), } return ( diff --git a/app/routes/_news._index.tsx b/app/routes/_news._index.tsx index 6ab4d18..55de589 100644 --- a/app/routes/_news._index.tsx +++ b/app/routes/_news._index.tsx @@ -25,31 +25,22 @@ export const loader = async ({}: Route.LoaderArgs) => { (category) => category.code === kajianCode, ) - let { data: spotlightNews } = await getNews({ + const spotlightData = getNews({ categories: [spotlightCode], }) - spotlightNews = spotlightNews.filter( - (news) => new Date(news.live_at) <= new Date(), - ) - let { data: beritaNews } = await getNews({ + const beritaData = getNews({ categories: [beritaCode], }) - beritaNews = beritaNews.filter((news) => new Date(news.live_at) <= new Date()) - let { data: kajianNews } = await getNews({ + const kajianData = getNews({ categories: [kajianCode], }) - kajianNews = kajianNews.filter((news) => new Date(news.live_at) <= new Date()) - return { spotlightCategory, - spotlightCode, beritaCategory, - beritaCode, kajianCategory, - kajianCode, - spotlightNews, - beritaNews, - kajianNews, + spotlightData, + beritaData, + kajianData, } } diff --git a/app/types/news.ts b/app/types/news.ts index d6dbf1a..20bd3e5 100644 --- a/app/types/news.ts +++ b/app/types/news.ts @@ -3,5 +3,5 @@ import type { TNewsResponse } from '~/apis/common/get-news' export type TNews = { title: string description: string - items: TNewsResponse[] + items: Promise<{ data: TNewsResponse[] }> }