'use client'; import { useState, useEffect } from 'react'; import Link from 'next/link'; import { useRouter, useSearchParams } from 'next/navigation'; import DeleteButton from './DeleteButton'; import Pagination from '@/lib/components/Pagination'; interface EmailTemplate { id: string; title: string; content: string; createdAt: string; modifiedAt: string; } interface PaginationInfo { page: number; pageSize: number; totalCount: number; totalPages: number; } interface EmailTemplatesResponse { data: EmailTemplate[]; pagination: PaginationInfo; } export default function AdminEmailTemplates() { const router = useRouter(); const searchParams = useSearchParams(); // Get pagination values from URL params const initialPage = parseInt(searchParams.get('page') || '1'); const initialPageSize = parseInt(searchParams.get('pageSize') || '10'); // State for pagination const [page, setPage] = useState(initialPage); const [pageSize, setPageSize] = useState(initialPageSize); // State for data const [emailTemplates, setEmailTemplates] = useState([]); const [pagination, setPagination] = useState({ page: initialPage, pageSize: initialPageSize, totalCount: 0, totalPages: 0 }); const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(null); // Fetch email templates with pagination useEffect(() => { const fetchEmailTemplates = async () => { setIsLoading(true); setError(null); try { // Build query string with pagination const params = new URLSearchParams(); params.append('page', initialPage.toString()); params.append('pageSize', initialPageSize.toString()); const response = await fetch(`/api/email-templates?${params.toString()}`); if (!response.ok) { throw new Error('Failed to fetch email templates'); } const responseData: EmailTemplatesResponse = await response.json(); setEmailTemplates(responseData.data); setPagination(responseData.pagination); } catch (err) { console.error('Error fetching email templates:', err); setError(err instanceof Error ? err.message : 'An error occurred'); } finally { setIsLoading(false); } }; fetchEmailTemplates(); }, [initialPage, initialPageSize]); // Handle page change const handlePageChange = (newPage: number) => { setPage(newPage); // Build query string with new page const params = new URLSearchParams(searchParams.toString()); params.set('page', newPage.toString()); // Update URL with new page router.push(`/admin/email-templates?${params.toString()}`); }; return (

Email Templates

Add New Template
{/* Error Message */} {error && (

{error}

)} {/* Loading State */} {isLoading ? (

Loading email templates...

) : (
{emailTemplates.length > 0 ? ( emailTemplates.map((template) => ( )) ) : ( )}
Title Created Modified Actions
{template.title} {new Date(template.createdAt).toLocaleDateString()} {' '} {new Date(template.createdAt).toLocaleTimeString()} {new Date(template.modifiedAt).toLocaleDateString()} {' '} {new Date(template.modifiedAt).toLocaleTimeString()} Edit
No email templates found. Create your first template!
{/* Pagination */}
)}
); }