// Caririaçu Guincho — Tela de detalhe do guincho (7 abas) const { useState: useStateGD, useEffect: useEffectGD, useMemo: useMemoGD } = React; const TABS_GUINCHO = [ { key: 'geral', label: 'Geral' }, { key: 'abastecimento', label: 'Abast.' }, { key: 'despesa', label: 'Despesa' }, { key: 'receita', label: 'Receita' }, { key: 'servico', label: 'Serviço' }, { key: 'checklist', label: 'Checklist' }, { key: 'lembrete', label: 'Lembrete' }, ]; const GuinchoDetalheScreen = ({ guinchoId, onBack }) => { const [guincho, setGuincho] = useStateGD(null); const [tab, setTab] = useStateGD('geral'); const [periodo, setPeriodo] = useStateGD(() => { const f = new Date(); const i = new Date(); i.setDate(i.getDate() - 180); return { inicio: i.toISOString().slice(0, 10), fim: f.toISOString().slice(0, 10) }; }); const [lembretesCount, setLembretesCount] = useStateGD(0); const [lembretesRefresh, setLembretesRefresh] = useStateGD(0); useEffectGD(() => { if (!guinchoId) return; db.one('frota', guinchoId).then(setGuincho); }, [guinchoId]); // contagem de lembretes amarelo+vermelho deste guincho useEffectGD(() => { if (!guincho) return; let alive = true; (async () => { const ls = await db.list('lembretes', { eq: { guincho_id: guincho.id, status: 'ativo' } }); let n = 0; for (const l of ls) { const st = window.statusLembrete(l, guincho.km_atual); if (st.estado !== 'ativo') n++; } if (alive) setLembretesCount(n); })(); return () => { alive = false; }; }, [guincho, lembretesRefresh]); if (!guincho) return