feat(driver-pwa): onboarding renders only configured bot channels

Co-Authored-By: claude-flow <ruv@ruv.net>
This commit is contained in:
2026-06-18 22:05:08 +10:00
co-authored by claude-flow
parent adad929769
commit e5a2874ba7
2 changed files with 17 additions and 7 deletions
@@ -14,4 +14,10 @@ describe("OnboardingPage", () => {
expect(screen.getByRole("link", { name: /MAX/i })).toHaveAttribute("href", "https://max.ru/b?start=x"); expect(screen.getByRole("link", { name: /MAX/i })).toHaveAttribute("href", "https://max.ru/b?start=x");
expect(screen.getByRole("button", { name: /запросить код/i })).toBeInTheDocument(); expect(screen.getByRole("button", { name: /запросить код/i })).toBeInTheDocument();
}); });
it("renders only Telegram when max is absent", () => {
sessionStorage.setItem("pp-onboarding", JSON.stringify({ tg: "https://t.me/ppdriver_bot?start=x", phone: "9143054400" }));
render(<MemoryRouter><OnboardingPage /></MemoryRouter>);
expect(screen.getByRole("link", { name: /Telegram/i })).toBeInTheDocument();
expect(screen.queryByRole("link", { name: /MAX/i })).toBeNull();
});
}); });
@@ -3,7 +3,7 @@ import { useNavigate } from "react-router-dom";
export function OnboardingPage() { export function OnboardingPage() {
const nav = useNavigate(); const nav = useNavigate();
const raw = sessionStorage.getItem("pp-onboarding"); const raw = sessionStorage.getItem("pp-onboarding");
const data = raw ? (JSON.parse(raw) as { tg: string; max: string; phone: string }) : null; const data = raw ? (JSON.parse(raw) as { tg?: string; max?: string; phone: string }) : null;
if (!data) return null; if (!data) return null;
return ( return (
@@ -12,12 +12,16 @@ export function OnboardingPage() {
<p className="text-muted text-sm mb-8"> <p className="text-muted text-sm mb-8">
Чтобы получать код входа, откройте бот и нажмите «Старт». Затем вернитесь и запросите код снова. Чтобы получать код входа, откройте бот и нажмите «Старт». Затем вернитесь и запросите код снова.
</p> </p>
<a href={data.tg} target="_blank" rel="noopener" className="btn-primary mb-3 no-underline block"> {data.tg && (
Подключить Telegram <a href={data.tg} target="_blank" rel="noopener" className="btn-primary mb-3 no-underline block">
</a> Подключить Telegram
<a href={data.max} target="_blank" rel="noopener" className="btn-ghost mb-6 no-underline block"> </a>
Подключить MAX )}
</a> {data.max && (
<a href={data.max} target="_blank" rel="noopener" className="btn-ghost mb-6 no-underline block">
Подключить MAX
</a>
)}
<button className="btn-ghost" onClick={() => nav("/login")}> <button className="btn-ghost" onClick={() => nav("/login")}>
Я подключил запросить код Я подключил запросить код
</button> </button>