v0.1 - макет интерфейса, аутентификация через логин, аккаунт админа, создание партии в 2 этапа, базовые настройки профиля и группы, переключение между группами, статистика
This commit is contained in:
@@ -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} />;
|
||||
}
|
||||
Reference in New Issue
Block a user