import { useState } from "react"; import { useQuery } from "@tanstack/react-query"; import { useNavigate } from "react-router-dom"; import { ChevronRight, Image as ImageIcon } from "lucide-react"; import { getFines } from "@/api/driver"; import { fineStatusText, isOwed } from "@/lib/fineStatus"; import { formatDate, formatMoney } from "@/lib/format"; import { OperationIcon } from "@/components/operationIcon"; import { Spinner } from "@/components/Spinner"; /** * Штрафы водителя списком. * * Строка «Долг по штрафам −5 156 ₽» на балансе не отвечает на вопрос «за что», * и водитель идёт выяснять звонком. Здесь он видит каждое постановление, а в * карточке — фотографию с камеры. * * Долг в шапке берём из баланса 1С, а не суммой строк: постановление парк гасит * авансом, и по бумагам ГИБДД оно закрыто в тот же день — долг перед парком от * этого никуда не девается. Список без этой оговорки показывал бы «неоплаченных * нет» при −5 156 ₽ на главном экране. */ export function FinesPage() { const nav = useNavigate(); const [tab, setTab] = useState<"open" | "all">("open"); const { data, isLoading, isError, refetch } = useQuery({ queryKey: ["fines", tab], queryFn: () => getFines(tab), }); const items = data?.items ?? []; return (

Штрафы

{data ? data.debt !== 0 || data.open_count > 0 ? `Долг по штрафам ${formatMoney(data.debt)} · не погашено: ${data.open_count}` : "Долгов по штрафам нет" : " "}

{([["open", "Не погашены"], ["all", "Все"]] as const).map(([key, label]) => ( ))}
{isLoading ? (
) : isError ? (

Не удалось загрузить штрафы

) : items.length === 0 ? (

{tab === "open" ? "Непогашенных штрафов нет" : "Штрафов не найдено"}

) : (
{items.map((f) => ( ))}
)}
); }