Commit 8ef9343a authored by Văn Hoàng's avatar Văn Hoàng

[tag]0.1-vcci

parents c05eecdb 15d6837b
Pipeline #43876 passed with stages
in 20 minutes and 36 seconds
...@@ -23,79 +23,75 @@ export default function DynamicPage() { ...@@ -23,79 +23,75 @@ export default function DynamicPage() {
const params = useParams(); const params = useParams();
const slugArray = Array.isArray(params.slug) ? params.slug : [params.slug]; const slugArray = Array.isArray(params.slug) ? params.slug : [params.slug];
const lastPart = slugArray[slugArray.length - 1]; const lastPart = slugArray[slugArray.length - 1];
const url = slugArray.join("/");
//check id post // states
const isUUID = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test( const [submitSearch, setSubmitSearch] = useState("");
lastPart as string const [page, setPage] = useState(1);
); const pageSize = 5;
const { data: categoriesPage } = // query
useGetNewsPageConfigGetHierarchical<GetNewsPageConfigResponseType>({ const { data: categoriesPage } = useGetNewsPageConfigGetHierarchical<GetNewsPageConfigResponseType>({
static_link: `/${slugArray[0]}`, code: `${slugArray[0]}`,
}); });
const { data: newsDetail, isLoading: isLoadingDetail } = useGetNews<GetNewsResponseType>({
filters: `external_link@=${lastPart}`,
});
const { data: news, isLoading } = useGetNews<GetNewsResponseType>({
pageSize: String(pageSize),
currentPage: String(page),
filters: `page_config.static_link==/${url}` + (submitSearch ? `,title@=${submitSearch}` : ""),
});
if (isUUID) { if (isLoadingDetail) {
const id = lastPart; return (
const { data, isLoading } = useGetNewsId<GetNewsDetailResponseType>( <div className="flex justify-center py-12">
id as string <Spinner />
</div>
); );
}
// detail news page
const isDetailPage = newsDetail?.responseData?.rows?.length === 1;
if (isDetailPage) {
return ( return (
<div className='container w-full flex justify-center items-center pb-10'> <div className='container w-full flex justify-center items-center pb-10'>
{isLoading ? ( <div className='flex flex-col gap-5 w-full'>
<Spinner /> <ListCategory categories={categoriesPage?.responseData?.children} />
) : ( <div className="grid grid-cols-1 lg:grid-cols-3 gap-5">
<div className='flex flex-col gap-5 w-full'> <main className="lg:col-span-2 bg-white border rounded-md p-8">
<ListCategory categories={categoriesPage?.responseData?.children} /> <div className='pb-5 text-primary text-2xl leading-normal font-medium'>
<div className="grid grid-cols-1 lg:grid-cols-3 gap-5"> {newsDetail?.responseData?.rows[0].title}
{/* Main content */} </div>
<main className="lg:col-span-2 bg-white border rounded-md p-8"> <div className='flex items-center gap-2 text-sm mb-4'>
<div className='pb-5 text-primary text-2xl leading-normal font-medium'> <span className='text-base text-blue-700'>
{data?.responseData?.title} {dayjs(newsDetail?.responseData?.rows[0].created_at).format('DD/MM/YYYY')}
</div> </span>
<div className='flex items-center gap-2 text-sm mb-4'> </div>
<span className='text-base text-blue-700'> <hr className="my-5" />
{dayjs(data?.responseData?.created_at).format('DD/MM/YYYY')} <div className='flex-1 text-app-grey text-base overflow-hidden'>
</span> <div className="prose tiptap overflow-hidden">
</div> {parse(newsDetail?.responseData?.rows[0].description ?? '')}
<hr className="my-5" />
<div className='flex-1 text-app-grey text-base overflow-hidden'>
<div className="prose tiptap overflow-hidden">
{parse(data?.responseData?.description ?? '')}
</div>
</div> </div>
</main> </div>
</main>
{/* Sidebar */} <aside className="space-y-6">
<aside className="space-y-6"> <EventCalendar />
<EventCalendar /> </aside>
</aside>
</div>
</div> </div>
)} </div>
</div> </div>
); );
} }
// nếu là trang danh sách tin tức // list news page
const url = slugArray.join("/");
const [submitSearch, setSubmitSearch] = useState("");
const [page, setPage] = useState(1);
const pageSize = 5;
const { data: news, isLoading } = useGetNews<GetNewsResponseType>({
pageSize: String(pageSize),
currentPage: String(page),
filters: `page_config.static_link==/${url}` + (submitSearch ? `,title@=${submitSearch}` : ""),
});
return ( return (
<div className="min-h-screen container mx-auto"> <div className="min-h-screen container mx-auto">
<div className="w-full flex flex-col gap-5"> <div className="w-full flex flex-col gap-5">
<ListCategory categories={categoriesPage?.responseData?.children} /> <ListCategory categories={categoriesPage?.responseData?.children} />
<div className="grid grid-cols-1 lg:grid-cols-3 gap-6"> <div className="grid grid-cols-1 lg:grid-cols-3 gap-6">
{/* Main content */}
<main className="lg:col-span-2 bg-background"> <main className="lg:col-span-2 bg-background">
<div className="pb-5 overflow-hidden"> <div className="pb-5 overflow-hidden">
{isLoading ? ( {isLoading ? (
...@@ -111,10 +107,9 @@ export default function DynamicPage() { ...@@ -111,10 +107,9 @@ export default function DynamicPage() {
<CardNews <CardNews
key={item.id} key={item.id}
news={item} news={item}
link={`/${url}/${item.id}`} link={`${item.external_link}`}
/> />
))} ))}
<div className="w-full flex justify-center mt-4"> <div className="w-full flex justify-center mt-4">
<Pagination <Pagination
pageCount={Number(news?.responseData.totalPages ?? 1)} pageCount={Number(news?.responseData.totalPages ?? 1)}
...@@ -130,18 +125,12 @@ export default function DynamicPage() { ...@@ -130,18 +125,12 @@ export default function DynamicPage() {
)} )}
</div> </div>
</main> </main>
{/* Sidebar */}
<aside className="space-y-6"> <aside className="space-y-6">
<ListFilter onSearch={setSubmitSearch} /> <ListFilter onSearch={setSubmitSearch} />
<EventCalendar /> <EventCalendar />
<div className="bg-white border rounded-md overflow-hidden"> <div className="bg-white border rounded-md overflow-hidden">
<div className="w-full relative bg-gray-100"> <div className="w-full relative bg-gray-100">
<img <img src="/banner.webp" alt="Quảng cáo" className="object-cover" />
src="/banner.webp"
alt="Quảng cáo"
className="object-cover"
/>
</div> </div>
</div> </div>
</aside> </aside>
...@@ -149,4 +138,4 @@ export default function DynamicPage() { ...@@ -149,4 +138,4 @@ export default function DynamicPage() {
</div> </div>
</div> </div>
); );
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment