"use client"; import { useState, useEffect } from "react"; import { Button } from "@/components/ui/button"; import { useToast } from "@/components/ui/use-toast"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Pagination, PaginationContent, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, } from "@/components/ui/pagination"; import Link from "next/link"; interface Subscriber { email: string; subscribedAt: string; } const EmailPage = () => { const [subscribers, setSubscribers] = useState([]); const [currentPage, setCurrentPage] = useState(1); const [totalPages, setTotalPages] = useState(0); const { toast } = useToast(); useEffect(() => { // Function to fetch subscribers data const fetchSubscribers = async () => { try { const res = await fetch( `/api/newsletter/subscriber?page=${currentPage}` ); const data = await res.json(); setSubscribers(data.subscribers); setTotalPages(data.totalPages); } catch (error) { toast({ title: "Error fetching subscribers", description: `${error}`, }); } }; // Fetch data initially fetchSubscribers(); // Set up interval to fetch data every 10 seconds const intervalId = setInterval(fetchSubscribers, 10000); // Clear interval on component unmount return () => clearInterval(intervalId); }, [currentPage, toast]); return (

Newsletter Emails

Newsletter Subscribers

Total subscribers: {subscribers.length}

Email Subscribed At {subscribers.map((subscriber, idx) => ( {subscriber.email} {new Date(subscriber.subscribedAt).toLocaleDateString()} ))}
{totalPages > 1 && ( {currentPage > 1 && ( setCurrentPage(currentPage - 1)} /> )} {Array.from({ length: totalPages }).map((_, i) => ( setCurrentPage(i + 1)} > {i + 1} ))} {currentPage < totalPages && ( setCurrentPage(currentPage + 1)} /> )} )}
); }; export default EmailPage;