import React, { useEffect, useState } from 'react'; import { CondoService } from '../services/mockDb'; import { PayPalScriptProvider, PayPalButtons } from "@paypal/react-paypal-js"; import { Briefcase, Calendar, CheckCircle2, AlertCircle } from 'lucide-react'; export const ExtraordinaryUser: React.FC = () => { const [expenses, setExpenses] = useState([]); // Using any for composite object from specific API const [loading, setLoading] = useState(true); const [paypalClientId, setPaypalClientId] = useState(''); const [successMsg, setSuccessMsg] = useState(''); const [hasFamily, setHasFamily] = useState(true); useEffect(() => { const load = async () => { try { const user = CondoService.getCurrentUser(); if (!user?.familyId) { setHasFamily(false); setLoading(false); return; } const [myExp, condo] = await Promise.all([ CondoService.getMyExpenses(), CondoService.getActiveCondo() ]); setExpenses(myExp); if (condo?.paypalClientId) setPaypalClientId(condo.paypalClientId); // Update "Last Viewed" timestamp to clear notification localStorage.setItem('lastViewedExpensesTime', Date.now().toString()); // Trigger event to update Sidebar immediately window.dispatchEvent(new Event('expenses-viewed')); } catch(e) { console.error(e); } finally { setLoading(false); } }; load(); }, []); const handlePaymentSuccess = async (expenseId: string, amount: number) => { try { await CondoService.payExpense(expenseId, amount); setSuccessMsg('Pagamento registrato con successo!'); setTimeout(() => setSuccessMsg(''), 3000); // Refresh const updated = await CondoService.getMyExpenses(); setExpenses(updated); } catch(e) { alert("Errore registrazione pagamento"); } }; if (loading) return
Caricamento spese...
; if (!hasFamily) { return (

Nessuna Famiglia Associata

Il tuo utente (probabilmente Admin) non è collegato ad alcuna famiglia, quindi non ci sono spese personali da mostrare.

Vai in Impostazioni > Utenti e associa il tuo account a una famiglia per testare questa vista.

); } return (

Le Mie Spese Extra

Lavori straordinari e ripartizioni

{successMsg && (
{successMsg}
)} {expenses.length === 0 ? (

Nessuna spesa straordinaria attiva.

) : (
{expenses.map(exp => { const remaining = exp.myShare.amountDue - exp.myShare.amountPaid; const isPaid = exp.myShare.status === 'PAID'; return (

{exp.title}

{new Date(exp.startDate).toLocaleDateString()}

{isPaid ? 'Saldato' : 'In Sospeso'}
Quota Totale (100%) € {exp.totalAmount.toLocaleString()}
La tua quota ({exp.myShare.percentage}%) € {exp.myShare.amountDue.toFixed(2)}
Versato: € {exp.myShare.amountPaid.toFixed(2)} Restante: € {Math.max(0, remaining).toFixed(2)}
{!isPaid && remaining > 0.01 && ( <> {paypalClientId ? ( { return actions.order.create({ intent: "CAPTURE", purchase_units: [{ description: `Spesa Straordinaria: ${exp.title}`, amount: { currency_code: "EUR", value: remaining.toFixed(2) } }] }); }} onApprove={(data, actions) => { if(!actions.order) return Promise.resolve(); return actions.order.capture().then(() => { handlePaymentSuccess(exp.id, remaining); }); }} /> ) : (
Pagamenti online non configurati. Contatta l'amministratore.
)} )} {isPaid && (
Nessun importo dovuto
)}
); })}
)}
); };