fix(pwa): штрафы не прячутся за вкладкой «Не погашены»
Водитель, оплативший штраф сам, видел пустой экран: список открывался на «Не погашены», а там у него ноль (Морозов, штраф от 16.08 — оплачен им, парк его не выставлял). Выглядело как «приложение потеряло мои штрафы». Теперь вкладка выбирается по данным: есть непогашенные — открываем их, нет — открываем «Все». Заодно один запрос вместо двух: список короткий, фильтруем на месте, и переключение вкладок стало мгновенным. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -22,12 +22,18 @@ import { Spinner } from "@/components/Spinner";
|
||||
*/
|
||||
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),
|
||||
queryKey: ["fines"],
|
||||
queryFn: () => getFines("all"),
|
||||
});
|
||||
const items = data?.items ?? [];
|
||||
const [tab, setTab] = useState<"open" | "all" | null>(null);
|
||||
// Долгов нет — открываем «Все». Иначе водитель с оплаченными штрафами видел
|
||||
// пустой экран и решал, что приложение их потеряло (Морозов, 18.08.2026).
|
||||
const active = tab ?? (data && data.open_count > 0 ? "open" : "all");
|
||||
const items = (data?.items ?? []).filter((f) => active === "all" || f.settled === "owed");
|
||||
|
||||
return (
|
||||
<div className="pt-2">
|
||||
@@ -47,7 +53,7 @@ export function FinesPage() {
|
||||
key={key}
|
||||
onClick={() => setTab(key)}
|
||||
className={`px-3 py-2 rounded-xl2 text-xs border ${
|
||||
tab === key ? "border-line bg-surface font-semibold" : "border-line text-muted"
|
||||
active === key ? "border-ink bg-surface font-semibold" : "border-line text-muted"
|
||||
}`}
|
||||
>
|
||||
{label}
|
||||
@@ -64,7 +70,7 @@ export function FinesPage() {
|
||||
</div>
|
||||
) : items.length === 0 ? (
|
||||
<p className="text-muted text-sm text-center py-10">
|
||||
{tab === "open" ? "Непогашенных штрафов нет" : "Штрафов не найдено"}
|
||||
{active === "open" ? "Непогашенных штрафов нет" : "Штрафов не найдено"}
|
||||
</p>
|
||||
) : (
|
||||
<div>
|
||||
|
||||
Reference in New Issue
Block a user