import React, { useState, useEffect } from 'react'; import { Modal } from '../ui/modal'; import Button from '../ui/button/Button'; import { CalendarIcon, ClockIcon, ErrorIcon } from '../../icons'; import { getAccountTimezone } from '../../utils/timezone'; interface Content { id: number; title: string; } interface BulkScheduleModalProps { isOpen: boolean; onClose: () => void; contentItems: Content[]; onSchedule: (contentIds: number[], scheduledDate: string) => Promise; } const BulkScheduleModal: React.FC = ({ isOpen, onClose, contentItems, onSchedule }) => { const [selectedDate, setSelectedDate] = useState(''); const [selectedTime, setSelectedTime] = useState('09:00'); const [isSubmitting, setIsSubmitting] = useState(false); useEffect(() => { if (isOpen) { // Default to tomorrow at 9:00 AM const tomorrow = new Date(); tomorrow.setDate(tomorrow.getDate() + 1); const dateStr = tomorrow.toISOString().split('T')[0]; setSelectedDate(dateStr); setSelectedTime('09:00'); } }, [isOpen]); const handleSubmit = async () => { if (!selectedDate || !selectedTime || contentItems.length === 0) return; // Combine date and time into ISO string const scheduledDateTime = new Date(`${selectedDate}T${selectedTime}`); // Validate future date if (scheduledDateTime <= new Date()) { alert('Please select a future date and time'); return; } setIsSubmitting(true); try { const contentIds = contentItems.map(item => item.id); await onSchedule(contentIds, scheduledDateTime.toISOString()); onClose(); } catch (error) { console.error('Failed to schedule:', error); } finally { setIsSubmitting(false); } }; const formatPreviewDate = () => { if (!selectedDate || !selectedTime) return ''; try { const dateTime = new Date(`${selectedDate}T${selectedTime}`); return dateTime.toLocaleString('en-US', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric', hour: 'numeric', minute: '2-digit', hour12: true, timeZone: getAccountTimezone(), }); } catch (error) { return ''; } }; return (
{/* Header */}

Schedule {contentItems.length} Article{contentItems.length !== 1 ? 's' : ''}

Schedule all selected articles for the same date and time

{/* Date/Time Selection */}
{/* Date Picker */}
setSelectedDate(e.target.value)} min={new Date().toISOString().split('T')[0]} className="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-500 focus:border-transparent" disabled={isSubmitting} />
{/* Time Picker */}
setSelectedTime(e.target.value)} className="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-500 focus:border-transparent" disabled={isSubmitting} />
{/* Preview */} {selectedDate && selectedTime && (

Preview: {formatPreviewDate()} ({getAccountTimezone()})

)} {/* Warning */}

All {contentItems.length} article{contentItems.length !== 1 ? 's' : ''} will be scheduled for the same date and time.

{/* Content List */} {contentItems.length > 0 && (

Selected Articles:

    {contentItems.slice(0, 10).map((item, index) => (
  • {index + 1}. {item.title}
  • ))} {contentItems.length > 10 && (
  • ... and {contentItems.length - 10} more
  • )}
)}
{/* Actions */}
); }; export default BulkScheduleModal;