import React, { useState, useEffect } from 'react'; import frappeAPI from '../api/frappeClient'; interface Event { name: string; subject: string; starts_on: string; ends_on: string; status: string; event_type: string; description?: string; } const EventsList: React.FC = () => { const [events, setEvents] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { loadEvents(); }, []); const loadEvents = async () => { try { setLoading(true); // Call the Frappe API for events const response = await frappeAPI.frappeGet('frappe.desk.doctype.event.event.get_events'); setEvents(response.message || []); } catch (err: any) { console.log('API call failed, using demo events:', err); // Demo events data when API fails const demoEvents = [ { name: 'EVT001', subject: 'Team Meeting - Asset Management Review', starts_on: new Date().toISOString(), ends_on: new Date(Date.now() + 3600000).toISOString(), status: 'Open', event_type: 'Meeting', description: 'Monthly review of asset management processes' }, { name: 'EVT002', subject: 'System Maintenance Window', starts_on: new Date(Date.now() + 86400000).toISOString(), ends_on: new Date(Date.now() + 86400000 + 7200000).toISOString(), status: 'Scheduled', event_type: 'Maintenance', description: 'Scheduled maintenance for Seera Arabia AMS' }, { name: 'EVT003', subject: 'User Training Session', starts_on: new Date(Date.now() + 172800000).toISOString(), ends_on: new Date(Date.now() + 172800000 + 10800000).toISOString(), status: 'Open', event_type: 'Training', description: 'Training session for new users on AMS features' } ]; setEvents(demoEvents); setError(null); } finally { setLoading(false); } }; const formatDate = (dateString: string) => { return new Date(dateString).toLocaleString(); }; const getStatusColor = (status: string) => { switch (status.toLowerCase()) { case 'open': return 'bg-green-100 text-green-800'; case 'scheduled': return 'bg-blue-100 text-blue-800'; case 'completed': return 'bg-gray-100 text-gray-800'; case 'cancelled': return 'bg-red-100 text-red-800'; default: return 'bg-gray-100 text-gray-800'; } }; const getEventTypeColor = (type: string) => { switch (type.toLowerCase()) { case 'meeting': return 'bg-purple-100 text-purple-800'; case 'training': return 'bg-yellow-100 text-yellow-800'; case 'maintenance': return 'bg-orange-100 text-orange-800'; default: return 'bg-gray-100 text-gray-800'; } }; if (loading) { return (
); } return (
{/* Header */}

Events

{/* Main Content */}
{error && (
{error}
)} {/* Events List */}

Upcoming Events ({events.length})

Events from your Frappe backend

{events.length === 0 ? (

No events found

No events are currently scheduled.

) : (
    {events.map((event) => (
  • {event.subject}

    {event.status} {event.event_type}
    {event.description && (

    {event.description}

    )}
    {formatDate(event.starts_on)} - {formatDate(event.ends_on)}
  • ))}
)}
{/* API Information */}

API Endpoint Information

Endpoint: frappe.desk.doctype.event.event.get_events

Full URL: https://seeraasm-med.seeraarabia.com/api/method/frappe.desk.doctype.event.event.get_events

Method: POST (Frappe API standard)

); }; export default EventsList;