import React, { JSX, useEffect, useState } from 'react'; import { Calendar as CalendarIcon, CalendarX, Clock, Plus, Thermometer } from 'lucide-react-native'; import { Alert, ScrollView, Text, TouchableOpacity, View, ActivityIndicator, RefreshControl } from 'react-native'; import { TimeOffRequest, TimeOffRequestType } from '@/types/types'; import RequestPermitModal from '@/components/RequestPermitModal'; import CalendarWidget from '@/components/CalendarWidget'; import LoadingScreen from '@/components/LoadingScreen'; import api from '@/utils/api'; import { formatDate, formatTime } from '@/utils/dateTime'; // Icon Mapping const typeIcons: Record JSX.Element> = { Ferie: (color) => , Permesso: (color) => , Malattia: (color) => , Assenza: (color) => , }; export default function PermitsScreen() { const [showModal, setShowModal] = useState(false); const [permits, setPermits] = useState([]); const [types, setTypes] = useState([]); const [isLoading, setIsLoading] = useState(true); const [refreshing, setRefreshing] = useState(false); const fetchPermits = async () => { try { if (!refreshing) setIsLoading(true); // Fetch Permits const response = await api.get('/time-off-request/list'); setPermits(response.data); // Fetch Types const typesResponse = await api.get('/time-off-request/get-types'); setTypes(typesResponse.data); } catch (error) { console.error('Errore nel recupero dei permessi:', error); Alert.alert('Errore', 'Impossibile recuperare i permessi. Riprova più tardi.'); } finally { setIsLoading(false); setRefreshing(false); } }; useEffect(() => { fetchPermits(); }, []); const onRefresh = () => { setRefreshing(true); fetchPermits(); }; if (isLoading && !refreshing) { return ; } return ( setShowModal(false)} onSubmit={(data) => { console.log('Richiesta:', data); fetchPermits(); }} /> {/* Header */} Ferie e Permessi Gestisci le tue assenze } > {/* Calendar Widget */} {/* Lista Richieste Recenti */} {permits.length === 0 ? ( Nessuna richiesta di permesso trovata. ) : ( Le tue richieste {/* TODO: Aggiungere una paginazione con delle freccette affianco? - Limite backend? */} {permits.map((item) => ( {typeIcons[item.timeOffRequestType.name]?.(item.timeOffRequestType.color)} {item.timeOffRequestType.name} {formatDate(item.start_date?.toLocaleString())} {item.end_date ? `- ${formatDate(item.end_date.toLocaleString())}` : ''} {item.timeOffRequestType.name === 'Permesso' && ( {formatTime(item.start_time)} - {formatTime(item.end_time)} )} {/* TODO: Aggiungere funzionalità per modificare/eliminare la richiesta? */} {item.status ? 'Approvato' : 'In Attesa'} ))} )} {/* FAB */} setShowModal(true)} className="absolute bottom-8 right-6 w-16 h-16 bg-[#099499] rounded-full shadow-lg items-center justify-center active:scale-90" > ); }