import { useState } from 'react' import { Loader2, Plus, X } from 'lucide-react' import { toast } from 'sonner' import { FormError } from '@/components/form-field' import { MoneyInput } from '@/components/money-input' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { monthIndex, monthName, useSetTargets } from '@/lib/debt' import { formatNumber, parseMoney } from '@/lib/format' import { formatMonth } from '@/lib/reports' import { t } from '@/lib/strings' import type { DebtTarget } from '@/types/DebtTarget' const s = t.debt type Row = { key: number; month: string; amount: string } /** Yol haritası: ay → ay sonu toplam borç hedefi (liste olduğu gibi kaydedilir) */ export function TargetsEditor({ targets, thisMonth, }: { targets: DebtTarget[] thisMonth: string }) { const save = useSetTargets() const [rows, setRows] = useState(() => targets.map((tg, i) => ({ key: i, month: tg.month, amount: formatNumber(tg.closing_target / 100), })), ) const [error, setError] = useState() function add() { const last = rows.length ? monthIndex(rows[rows.length - 1].month) : monthIndex(thisMonth) setRows([ ...rows, { key: Date.now(), month: monthName((last ?? 0) + (rows.length ? 1 : 0)), amount: '' }, ]) } async function submit() { setError(undefined) const out: DebtTarget[] = [] for (const r of rows) { const k = parseMoney(r.amount) if (monthIndex(r.month) === null || k === null || k < 0) return setError(`${r.month || '?'}: ay ya da tutar geçersiz`) out.push({ month: r.month, closing_target: k }) } try { await save.mutateAsync(out.sort((a, b) => a.month.localeCompare(b.month))) toast.success(s.targetsSaved) } catch (e) { setError(e instanceof Error ? e.message : String(e)) } } return (

{s.targetsHint}

    {rows.map((r, i) => (
  • setRows(rows.map((x, j) => (j === i ? { ...x, month: e.target.value } : x))) } className="w-40 shrink-0" />
    setRows(rows.map((x, j) => (j === i ? { ...x, amount: v } : x)))} />
  • ))}
) }