import React, { useState, useMemo } from 'react'; import { FiClock, FiTrash2, FiSend, FiEdit2, FiSearch, FiFilter, FiCheckSquare, FiAlertCircle } from 'react-icons/fi'; const ScheduledQueueList = ({ queue = [], taSpaces = [], onEdit, onSendNow, onCancelSchedule, onBulkCancel, onBulkSendNow, isLoading }) => { const [searchTerm, setSearchTerm] = useState(''); const [selectedIds, setSelectedIds] = useState([]); const [timeFilter, setTimeFilter] = useState('all'); // all, today, next7days // Lọc dữ liệu dựa trên search và time filter const filteredQueue = useMemo(() => { return queue.filter(item => { // 1. Chỉ lấy những item đang được schedule if (item.status !== 'scheduled' || !item.scheduled_at) return false; // 2. Tìm kiếm theo nội dung const matchesSearch = item.content?.toLowerCase().includes(searchTerm.toLowerCase()); if (!matchesSearch) return false; // 3. Lọc theo thời gian const scheduleDate = new Date(item.scheduled_at); const today = new Date(); today.setHours(0, 0, 0, 0); const next7Days = new Date(today); next7Days.setDate(today.getDate() + 7); if (timeFilter === 'today') { const tomorrow = new Date(today); tomorrow.setDate(today.getDate() + 1); return scheduleDate >= today && scheduleDate < tomorrow; } if (timeFilter === 'next7days') { return scheduleDate >= today && scheduleDate <= next7Days; } return true; }).sort((a, b) => new Date(a.scheduled_at) - new Date(b.scheduled_at)); // Sắp xếp gần nhất lên trước }, [queue, searchTerm, timeFilter]); const handleToggleSelect = (id) => { setSelectedIds(prev => prev.includes(id) ? prev.filter(i => i !== id) : [...prev, id]); }; const handleSelectAll = () => { if (selectedIds.length === filteredQueue.length) { setSelectedIds([]); } else { setSelectedIds(filteredQueue.map(i => i.id)); } }; const getSpaceName = (spaceId) => { return taSpaces.find(s => s.id === spaceId)?.name || 'Lớp ẩn'; }; const totalScheduled = queue.filter(i => i.status === 'scheduled' && i.scheduled_at).length; return (
Không tìm thấy bài viết nào phù hợp.