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 (

Danh sách Đặt lịch ({totalScheduled})

setSearchTerm(e.target.value)} />
{/* Bulk Actions Bar */} {selectedIds.length > 0 && (
Đã chọn {selectedIds.length} bài viết
)} {/* List Header */}
0 && selectedIds.length === filteredQueue.length} onChange={handleSelectAll} />
Nội dung
Lớp học
Giờ đăng
Thao tác
{/* List Items */}
{filteredQueue.length > 0 ? filteredQueue.map(item => (
handleToggleSelect(item.id)} />
{item.draft_type === 'lesson_recap' ? 'RECAP BÀI GIẢNG' : 'THÔNG BÁO'}
{item.content}
{getSpaceName(item.space_id)}
{new Date(item.scheduled_at).toLocaleString('vi-VN', { hour: '2-digit', minute: '2-digit', day: '2-digit', month: '2-digit' })}
)) : (

Không tìm thấy bài viết nào phù hợp.

)}
); }; export default ScheduledQueueList;