'use client';
import { useState, useEffect } from 'react';
import { useSearchParams } from 'next/navigation';
import ListPageTemplate from '@/components/common/ListPageTemplate';
import Pagination1 from '@/components/common/Pagination1';
import axios from 'axios';
const LoadingSpinner = () => (
);
export default function DynamicListPage({ initialItems, slugArr, basePath, columns, pageSize, totalItems }) {
const [items, setItems] = useState(initialItems);
const [total, setTotal] = useState(totalItems);
const [isLoading, setIsLoading] = useState(false);
const searchParams = useSearchParams();
const page = searchParams.get('page');
const currentPage = Number(page) || 1;
useEffect(() => {
const fetchPageData = async () => {
if (currentPage === 1) {
setItems(initialItems);
setTotal(totalItems);
return;
}
setIsLoading(true);
try {
const res = await axios.post('/api/get-page-data', {
slug_list: slugArr,
page: currentPage,
page_size: pageSize,
});
setItems(res.data.data);
setTotal(res.data.total);
} catch (error) {
console.error('Failed to fetch page data:', error);
// Optionally, handle the error in the UI
} finally {
setIsLoading(false);
}
};
fetchPageData();
}, [currentPage, slugArr, pageSize, initialItems, totalItems]);
const listItems = items.map(item => ({
...item,
slug: item.slug,
title: item.title,
image: item.image || item.cover || item.img || '',
additional_title: item.additional_title || '',
subtitle: item.subtitle || item.content || '',
}));
const totalPages = Math.ceil((total || 0) / pageSize);
return (
<>
{isLoading ? (
) : (
)}
>
);
}