import React, { useState, useEffect } from 'react'; import { Table, Button, Avatar, Spin, Select, Input } from 'antd'; import { Link } from 'react-router-dom'; import { Plus, Edit, Trash2, Users, Gift, Heart, Search } from 'react-feather'; import CustomPagination from '../../components/CustomPagination'; const { Option } = Select; const WeddingGuestList = () => { // State management const [guestData, setGuestData] = useState([]); const [loading, setLoading] = useState(false); const [selectedRowKeys, setSelectedRowKeys] = useState([]); // Pagination state const [currentPage, setCurrentPage] = useState(1); const [pageSize, setPageSize] = useState(10); const [totalCount, setTotalCount] = useState(0); const [totalPages, setTotalPages] = useState(1); // Filter states const [filterStatus, setFilterStatus] = useState('All Status'); const [filterUnit, setFilterUnit] = useState('All Units'); const [searchTerm, setSearchTerm] = useState(''); // Mock data for wedding guests const mockGuestData = [ { id: 1, name: 'Nguyễn Văn An', unit: 'Công ty ABC', numberOfPeople: 2, giftAmount: 500000, status: 'Đi', phone: '0901234567', relationship: 'Bạn bè', inviteDate: '2024-01-15', confirmDate: '2024-01-20' }, { id: 2, name: 'Trần Thị Bình', unit: 'Trường ĐH XYZ', numberOfPeople: 4, giftAmount: 1000000, status: 'Đi', phone: '0912345678', relationship: 'Gia đình', inviteDate: '2024-01-16', confirmDate: '2024-01-22' }, { id: 3, name: 'Lê Minh Cường', unit: 'Ngân hàng DEF', numberOfPeople: 1, giftAmount: 300000, status: 'Không đi', phone: '0923456789', relationship: 'Đồng nghiệp', inviteDate: '2024-01-17', confirmDate: '2024-01-25' }, { id: 4, name: 'Phạm Thị Dung', unit: 'Bệnh viện GHI', numberOfPeople: 3, giftAmount: 800000, status: 'Đi', phone: '0934567890', relationship: 'Bạn bè', inviteDate: '2024-01-18', confirmDate: '2024-01-28' }, { id: 5, name: 'Hoàng Văn Em', unit: 'Công ty JKL', numberOfPeople: 2, giftAmount: 600000, status: 'Chưa xác nhận', phone: '0945678901', relationship: 'Đồng nghiệp', inviteDate: '2024-01-19', confirmDate: null } ]; // Load guest data const loadGuests = async (page = 1, size = 10) => { setLoading(true); try { // Simulate API call await new Promise(resolve => setTimeout(resolve, 1000)); // Filter and paginate mock data let filteredData = mockGuestData; // Apply filters if (filterStatus !== 'All Status') { filteredData = filteredData.filter(guest => guest.status === filterStatus); } if (filterUnit !== 'All Units') { filteredData = filteredData.filter(guest => guest.unit === filterUnit); } if (searchTerm) { filteredData = filteredData.filter(guest => guest.name.toLowerCase().includes(searchTerm.toLowerCase()) || guest.unit.toLowerCase().includes(searchTerm.toLowerCase()) ); } // Pagination const startIndex = (page - 1) * size; const endIndex = startIndex + size; const paginatedData = filteredData.slice(startIndex, endIndex); setGuestData(paginatedData); setTotalCount(filteredData.length); setTotalPages(Math.ceil(filteredData.length / size)); } catch (error) { console.error('Error loading guests:', error); setGuestData([]); setTotalCount(0); setTotalPages(1); } finally { setLoading(false); } }; // Get status configuration const getStatusConfig = (status) => { const statusConfigs = { 'Đi': { color: '#52c41a', backgroundColor: 'rgba(82, 196, 26, 0.1)', borderColor: '#52c41a', textColor: '#52c41a', icon: '✅' }, 'Không đi': { color: '#f5222d', backgroundColor: 'rgba(245, 34, 45, 0.1)', borderColor: '#f5222d', textColor: '#f5222d', icon: '❌' }, 'Chưa xác nhận': { color: '#faad14', backgroundColor: 'rgba(250, 173, 20, 0.1)', borderColor: '#faad14', textColor: '#faad14', icon: '⏳' } }; return statusConfigs[status] || statusConfigs['Chưa xác nhận']; }; // Format currency const formatCurrency = (amount) => { return new Intl.NumberFormat('vi-VN', { style: 'currency', currency: 'VND' }).format(amount); }; // Load data on component mount useEffect(() => { loadGuests(); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); // Handle pagination change const handlePageChange = (page) => { setCurrentPage(page); loadGuests(page, pageSize); }; // Handle page size change const handlePageSizeChange = (newPageSize) => { setPageSize(newPageSize); setCurrentPage(1); loadGuests(1, newPageSize); }; // Handle search const handleSearch = (value) => { setSearchTerm(value); setCurrentPage(1); loadGuests(1, pageSize); }; // Handle filter change const handleFilterChange = () => { setCurrentPage(1); loadGuests(1, pageSize); }; // Table columns configuration const columns = [ { title: 'Tên khách mời', dataIndex: 'name', key: 'name', render: (text, record) => (