import React, { useEffect, useState } from 'react'; import { useFarm } from '../context/FarmContext.tsx'; import { formatDateId, formatDateRange, resolveCycleStatus } from '../utils/format.ts'; import type { Cycle } from '../types/api.ts'; type Phase = { name: string; startDay: number; endDay: number; color: string }; function phasesFor(totalDays: number): Phase[] { const starterEnd = Math.min(10, totalDays); const growerEnd = Math.min(24, totalDays); const phases: Phase[] = [ { name: 'Starter', startDay: 1, endDay: starterEnd, color: 'bg-red-400' }, ]; if (growerEnd > starterEnd) { phases.push({ name: 'Grower', startDay: starterEnd + 1, endDay: growerEnd, color: 'bg-orange-400', }); } if (totalDays > growerEnd) { phases.push({ name: 'Finisher', startDay: growerEnd + 1, endDay: totalDays, color: 'bg-yellow-500', }); } return phases; } const statusConfig = { active: { label: 'Active', bg: 'bg-red-100', text: 'text-red-800', icon: 'fa-running' }, pending_close: { label: 'Pending Close', bg: 'bg-amber-100', text: 'text-amber-800', icon: 'fa-hourglass-half', }, closed: { label: 'Completed', bg: 'bg-green-100', text: 'text-green-800', icon: 'fa-check-circle', }, }; const SingleCycleView: React.FC<{ cycle: Cycle }> = ({ cycle }) => { const phases = phasesFor(cycle.total_days); const currentDay = Math.min(Math.max(cycle.current_day, 0), cycle.total_days); const cycleStatus = resolveCycleStatus(cycle); const progress = cycle.total_days > 0 ? (currentDay / cycle.total_days) * 100 : 0; return (
Siklus:{' '} {formatDateRange(cycle.start_date, cycle.end_date)}
Estimasi Panen
{formatDateId(cycle.end_date)}
Belum ada siklus untuk kandang ini. Data siklus datang dari sinkron site kota.
) : ( <>Pilih tab siklus di atas.
)} > )}