diff --git a/driver-pwa/frontend/src/hooks/usePaymentStatus.ts b/driver-pwa/frontend/src/hooks/usePaymentStatus.ts
new file mode 100644
index 0000000..bee1229
--- /dev/null
+++ b/driver-pwa/frontend/src/hooks/usePaymentStatus.ts
@@ -0,0 +1,10 @@
+import { useQuery } from "@tanstack/react-query";
+import { getPaymentState } from "@/api/driver";
+
+export function usePaymentStatus(orderId: string) {
+ return useQuery({
+ queryKey: ["payment", orderId],
+ queryFn: () => getPaymentState(orderId),
+ refetchInterval: (q) => (q.state.data?.status === "PAID" || q.state.data?.status === "REJECTED" ? false : 1500),
+ });
+}
diff --git a/driver-pwa/frontend/src/pages/PaymentPage.test.tsx b/driver-pwa/frontend/src/pages/PaymentPage.test.tsx
new file mode 100644
index 0000000..1490e6e
--- /dev/null
+++ b/driver-pwa/frontend/src/pages/PaymentPage.test.tsx
@@ -0,0 +1,29 @@
+import { describe, it, expect, vi } from "vitest";
+import { render, screen, waitFor } from "@testing-library/react";
+import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
+import { MemoryRouter, Routes, Route } from "react-router-dom";
+
+const states = ["FORM", "PAID"];
+vi.mock("@/api/driver", () => ({
+ getPaymentState: vi.fn(async () => ({ order_id: "o9", status: states.shift() ?? "PAID" })),
+}));
+import { PaymentPage } from "./PaymentPage";
+
+function wrap() {
+ const qc = new QueryClient();
+ return render(
+
Оплачено
+{st.bucket} пополнен на {formatMoney(st.base ?? 0)}
+ +{formatMoney(st.total ?? 0)}
+{st.bucket}
+ Оплатить +Откроется ваше приложение банка
+