import { useState, useEffect, useCallback } from 'react'; import { tokenService } from '../services/TokenService'; import { messageEventResponseApi } from '../api/messageEventResponseApi'; import { scheduleApi } from '../api/scheduleApi'; import './ViewSentMessages.css'; const ViewSentMessages = ({ isOpen, onClose, title = 'View Sent Messages', }) => { const [sentMessages, setSentMessages] = useState([]); const [scheduledMessages, setScheduledMessages] = useState([]); const [lastUpdated, setLastUpdated] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [searchTerm, setSearchTerm] = useState(''); const [activeTab, setActiveTab] = useState('sent'); // Fetch the sent messages or Message Event Responses const fetchSentMessages = useCallback(async () => { try { setLoading(true); setError(null); const userId = tokenService.getUserId(); const response = await messageEventResponseApi.getMessageEventResponsesByUserId( userId, tokenService.bearerToken() ); if (response) { setLastUpdated(new Date()); setSentMessages(response.data); } else { throw new Error(response.message || 'Failed to load sent messages'); } } catch (err) { setError(err.message || 'Failed to load sent messages.'); setSentMessages([]); } finally { setLoading(false); } }, []); const fetchScheduledMessages = useCallback(async () => { try { const userId = tokenService.getUserId(); const response = await scheduleApi.getScheduledMessage( userId, tokenService.bearerToken() ); if (response) { const scheduledMessages = response.data; setScheduledMessages(scheduledMessages); } else { throw new Error(response.message || 'Failed to get scheduled messages'); } } catch (err) { console.error('Failed to load scheduled messages:', err); setScheduledMessages([]); } }, []); const handleRefresh = () => { if (activeTab === 'sent') { fetchSentMessages(); } else { fetchScheduledMessages(); } }; useEffect(() => { if (isOpen) { console.log('Fetching sent messages'); fetchSentMessages(); } }, [isOpen, fetchSentMessages]); // Fetch scheduled messages when tab is switched useEffect(() => { if (activeTab === 'scheduled' && isOpen) { fetchScheduledMessages(); } }, [activeTab, isOpen, fetchScheduledMessages]); const filteredSentMessages = sentMessages.filter((sentMessage) => { const searchLower = searchTerm.toLowerCase(); return ( (sentMessage.status && sentMessage.status.toLowerCase().includes(searchLower)) || (sentMessage.sent && sentMessage.sent.toLowerCase().includes(searchLower)) || (sentMessage.id && sentMessage.id.toString().includes(searchTerm)) ); }); // Filter scheduled messages const filteredScheduledMessages = scheduledMessages.filter((message) => { const searchLower = searchTerm.toLowerCase(); return ( (message.status && message.status.toLowerCase().includes(searchLower)) || (message.id && message.id.toString().includes(searchTerm)) ); }); const formatLastUpdated = () => { if (!lastUpdated) return 'Never'; return lastUpdated.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', }); }; // Format date for scheduled messages const formatScheduledDate = (dateString) => { return new Date(dateString).toLocaleString(); }; // Get status badge styling const getStatusBadgeClass = (status) => { switch (status) { case 'PROCESSING': return 'status-processing'; case 'SENT': return 'status-sent'; case 'FAILED': return 'status-failed'; default: return 'status-default'; } }; if (!isOpen) return null; return (
e.stopPropagation()} >

{title}

{/* Add tabs for navigation */}
{/* Search input */}
setSearchTerm(e.target.value)} className="search-input" />
{error && (
{error}
)} {loading ? (

Loading messages...

) : ( <> {/* Sent Messages Tab Content */} {activeTab === 'sent' && (

Sent Messages

Last updated: {formatLastUpdated()}
{filteredSentMessages.length > 0 ? (
{filteredSentMessages.map((message) => ( ))}
ID Status Sent Time
{message.id.substring(0, 8)}... {message.status} {message.sent || 'N/A'}
) : (
No sent messages found.
)}
)} {/* Scheduled Messages Tab Content */} {activeTab === 'scheduled' && (

Scheduled Messages

{filteredScheduledMessages.length > 0 ? (
{filteredScheduledMessages.map((message) => ( ))}
ID Scheduled Time Created Time Status
{message.id.substring(0, 8)}... {formatScheduledDate(message.scheduled)} {formatScheduledDate(message.created)} {message.status}
) : (
No scheduled messages found.
)}
)} )}
); }; export default ViewSentMessages;