v0.1 - макет интерфейса, аутентификация через логин, аккаунт админа, создание партии в 2 этапа, базовые настройки профиля и группы, переключение между группами, статистика

This commit is contained in:
2026-06-16 17:41:06 +03:00
parent 6ab74f01aa
commit 56b5d09a4d
123 changed files with 13572 additions and 21 deletions
@@ -0,0 +1,52 @@
import { useEffect, useRef } from "react";
interface TelegramUser {
id: number;
first_name?: string;
last_name?: string;
username?: string;
photo_url?: string;
auth_date: number;
hash: string;
}
declare global {
interface Window {
__fsTelegramAuth?: (user: TelegramUser) => void;
}
}
/**
* Официальный Telegram Login Widget. Требует бота (@BotFather) и /setdomain
* на текущий HTTPS-домен. botUsername — без «@».
*/
export function TelegramLoginButton({
botUsername,
onAuth,
}: {
botUsername: string;
onAuth: (user: TelegramUser) => void;
}) {
const ref = useRef<HTMLDivElement>(null);
useEffect(() => {
window.__fsTelegramAuth = (user) => onAuth(user);
const script = document.createElement("script");
script.src = "https://telegram.org/js/telegram-widget.js?22";
script.async = true;
script.setAttribute("data-telegram-login", botUsername);
script.setAttribute("data-size", "large");
script.setAttribute("data-userpic", "false");
script.setAttribute("data-request-access", "write");
script.setAttribute("data-onauth", "__fsTelegramAuth(user)");
const node = ref.current;
node?.appendChild(script);
return () => {
if (node) node.innerHTML = "";
delete window.__fsTelegramAuth;
};
}, [botUsername, onAuth]);
return <div ref={ref} />;
}