diff --git a/src/components/Dashboard.jsx b/src/components/Dashboard.jsx index 4d06665..39492ad 100644 --- a/src/components/Dashboard.jsx +++ b/src/components/Dashboard.jsx @@ -2,12 +2,14 @@ import { useState } from 'react'; import AddContact from './AddContact'; import ViewContact from './ViewContact'; +import ViewSentMessages from './ViewSentMessages'; import './Dashboard.css'; const Dashboard = () => { const [activeView, setActiveView] = useState('dashboard'); const [showContactForm, setShowContactForm] = useState(false); + const [isViewSentMessagesOpen, setViewSentMessagesOpen] = useState(false); const [isPopupOpen, setIsPopupOpen] = useState(false); const handleAddContactClick = () => { @@ -75,6 +77,19 @@ const Dashboard = () => { Click for action 1 + + + setViewSentMessagesOpen(false)} + /> + { + const [sentMessages, setSentMessages] = useState([]); + const [lastUpdated, setLastUpdated] = useState(null); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + const [searchTerm, setSearchTerm] = useState(''); + + // Fetch the sent messages or Message Event Responses + const fetchSentMessages = useCallback(async () => { + try { + setLoading(true); + setError(null); + + const accessToken = localStorage.getItem(DATA_KEY_ACCESS_TOKEN); + const userId = localStorage.getItem(DATA_KEY_USER_ID); + + if (!accessToken) { + throw new Error('Authentication required. Please log in again.'); + } + + const response = await fetch( + `${API_BASE_URL}/api/v1/schedule/message/event/response?user_id=${userId}`, + { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${accessToken}`, + }, + } + ); + + if (!response.ok) { + if (response.status === 401) { + throw new Error('Session expired. Please log in again.'); + } else if (response.status === 404) { + console.log('No messages sent associated with user'); + setLoading(false); + return; + } else { + throw new Error(`Failed to fetch sent messages: ${response.status}`); + } + } + + const result = await response.json(); + + if (result.data) { + setLastUpdated(new Date()); + setSentMessages(result.data); + } else { + throw new Error(result.message || 'Failed to load sent messages'); + } + } catch (err) { + setError(err.message || 'Failed to load sent messages.'); + setSentMessages([]); + } finally { + setLoading(false); + } + }, []); + + const handleRefresh = () => { + fetchSentMessages(); + }; + + useEffect(() => { + if (isOpen) { + console.log('Fetching sent messages'); + fetchSentMessages(); + } + }, [isOpen, fetchSentMessages]); + + 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)) + ); + }); + + const formatLastUpdated = () => { + if (!lastUpdated) return 'Never'; + return lastUpdated.toLocaleTimeString([], { + hour: '2-digit', + minute: '2-digit', + }); + }; + + if (!isOpen) return null; + + return ( +
+
e.stopPropagation()} + > +
+
+

{title}

+ +
+ +
+ {error && ( +
+
{error}
+ +
+ )} + + {loading ? ( +
+
+

+ Loading sent messages +

+
+ ) : ( + <> +
+ + + setSearchTerm(e.target.value)} + style={{ + flex: 1, + minWidth: '200px', + maxWidth: '300px', + padding: '8px 12px', + border: '1px solid #e5e7eb', + borderRadius: '6px', + fontSize: '14px', + }} + /> + +
+ Updated: {formatLastUpdated()} + +
+
+ + {/* Sent Messages List */} + {filteredSentMessages.length === 0 ? ( +
+
+ X +
+

+ {searchTerm + ? 'No matching sent messages found' + : 'No sent messages available'} +

+

+ {searchTerm + ? 'Try a different search term' + : 'Create a contact and send a message to get started'} +

+ {searchTerm && ( + + )} +
+ ) : ( + <> +
+
+ {filteredSentMessages.map((sentMessage, index) => ( +
+
+
+ + {index + 1} + +
+

+ {sentMessage.status} +

+
Sent: {sentMessage.sent}
+
+
+ + Id: {sentMessage.id} + +
+
+ ))} +
+
+ + )} + + )} +
+ + +
+
+
+
+
+ ); +}; + +export default ViewSentMessages;