Améliorations
This commit is contained in:
1 parent
7ee011de09
commit
6e03195d3a
2 files changed
+68
-6
No files matched your search
@@ -156,10 +156,11 @@ function TrendBadge({ current, prev, invert = false }) {
|
||||
}
|
||||
|
||||
/* ── Carte KPI individuelle ── */
|
||||
function KpiCard({ title, value, badge, refValue, onClick }) {
|
||||
function KpiCard({ title, value, badge, refValue, onClick, hint }) {
|
||||
return (
|
||||
<div
|
||||
className="kpi"
|
||||
title={hint}
|
||||
onClick={onClick}
|
||||
style={onClick ? { cursor: 'pointer', transition: 'box-shadow 0.15s, opacity 0.15s' } : undefined}
|
||||
onMouseEnter={onClick ? (e) => { e.currentTarget.style.boxShadow = '0 0 0 2px var(--primary)'; e.currentTarget.style.opacity = '0.88'; } : undefined}
|
||||
@@ -178,7 +179,7 @@ function KpiCard({ title, value, badge, refValue, onClick }) {
|
||||
}
|
||||
|
||||
/* ── KPI filtrés par année ── */
|
||||
function DashboardKpis({ portfolio, netMode, pfuRates, capitalMensuelData }) {
|
||||
function DashboardKpis({ portfolio, netMode, pfuRates, capitalMensuelData, activeId, activeView, soldePortefeuilleLive }) {
|
||||
const {
|
||||
annee, modeGlobal, rawDataGlobal, rawData, currentYear, currentMonth,
|
||||
setInclureInterets, setInclureCapital, setInclureCashback,
|
||||
@@ -187,6 +188,31 @@ function DashboardKpis({ portfolio, netMode, pfuRates, capitalMensuelData }) {
|
||||
const isCurrentYear = !modeGlobal && Number(annee) === currentYear;
|
||||
const isFutureYear = !modeGlobal && Number(annee) > currentYear;
|
||||
|
||||
// ── Porte-monnaie — même snapshot backend que DepotsRetraits/Plateformes
|
||||
// (GET /dashboard[?asOf=]), formule unique cf. mémoire
|
||||
// project_taxreport_interets_plateforme. "Depuis le début" → valeur live
|
||||
// déjà chargée par le parent ; année précise → snapshot fin d'année.
|
||||
const [walletAsOf, setWalletAsOf] = useState({});
|
||||
useEffect(() => {
|
||||
if (modeGlobal) return;
|
||||
if (!activeId && activeView !== 'all') return;
|
||||
const scopeParams = activeView === 'all' ? { scope: 'all' } : undefined;
|
||||
const prevYear = Number(annee) - 1;
|
||||
const keys = [`${annee}-12-31`, `${prevYear}-12-31`];
|
||||
Promise.all(keys.map(asOf =>
|
||||
api.get('/dashboard', { ...scopeParams, asOf }).then(d => [asOf, d])
|
||||
)).then(entries => {
|
||||
setWalletAsOf(prev => ({ ...prev, ...Object.fromEntries(entries) }));
|
||||
}).catch(e => console.error('walletAsOf load error:', e));
|
||||
}, [annee, modeGlobal, activeId, activeView]); // eslint-disable-line
|
||||
|
||||
const soldePortefeuilleValue = modeGlobal
|
||||
? soldePortefeuilleLive
|
||||
: (walletAsOf[`${annee}-12-31`]?.solde_portefeuille_total ?? null);
|
||||
const soldePortefeuillePrev = modeGlobal
|
||||
? null
|
||||
: (walletAsOf[`${Number(annee) - 1}-12-31`]?.solde_portefeuille_total ?? null);
|
||||
|
||||
// Capital de référence pour l'année sélectionnée
|
||||
// Pour les années passées : dernier mois de capitalMensuel (= capital déployé fin décembre)
|
||||
// Pour l'année courante / mode global : capital actuellement déployé (portfolio)
|
||||
@@ -380,6 +406,17 @@ function DashboardKpis({ portfolio, netMode, pfuRates, capitalMensuelData }) {
|
||||
? fmtEUR(enDefautPrev) + ' en ' + prevMonthLabel
|
||||
: null}
|
||||
/>
|
||||
<KpiCard
|
||||
title="Porte-monnaie"
|
||||
hint="Cash disponible sur les porte-monnaie des plateformes (hors compte courant)"
|
||||
value={soldePortefeuilleValue != null ? fmtEUR(soldePortefeuilleValue) : '…'}
|
||||
badge={!modeGlobal && soldePortefeuilleValue != null && soldePortefeuillePrev != null
|
||||
? <TrendBadge current={soldePortefeuilleValue} prev={soldePortefeuillePrev} />
|
||||
: null}
|
||||
refValue={!modeGlobal && soldePortefeuillePrev != null
|
||||
? fmtEUR(soldePortefeuillePrev) + ' en ' + (Number(annee) - 1)
|
||||
: null}
|
||||
/>
|
||||
<KpiCard
|
||||
title={perfLabel + (isFutureYear ? ' (proj.)' : '')}
|
||||
value={perfValue != null ? fmtPct(perfValue * 100) : '—'}
|
||||
@@ -529,7 +566,10 @@ export default function Dashboard() {
|
||||
|
||||
{/* ── KPI + sélecteur année ── */}
|
||||
<div style={{ display: 'flex', gap: 12, alignItems: 'stretch', marginBottom: 16 }}>
|
||||
<DashboardKpis portfolio={portfolio} netMode={netMode} pfuRates={pfuRates} capitalMensuelData={capitalMensuelData} />
|
||||
<DashboardKpis
|
||||
portfolio={portfolio} netMode={netMode} pfuRates={pfuRates} capitalMensuelData={capitalMensuelData}
|
||||
activeId={activeId} activeView={activeView} soldePortefeuilleLive={data?.solde_portefeuille_total ?? null}
|
||||
/>
|
||||
<YearSelectorKpi />
|
||||
</div>
|
||||
|
||||
|
||||
Reference in new issue
Block a user