import { default as axios, AxiosError } from "axios" import { default as classNames } from "classnames" import { useTranslation } from "next-i18next" import { HTMLProps, useCallback, useState } from "react" import { LoginContext } from "../contexts/login" import { ApiError, ApiResult } from "../types/api" import { FestaLoginData, TelegramLoginData } from "../types/user" import { useDefinedContext } from "../utils/definedContext" import { TelegramLoginButton } from "./TelegramLoginButton" export function ActionLoginTelegram({ className, ...props }: HTMLProps) { const { t } = useTranslation("common") const [_, setLogin] = useDefinedContext(LoginContext) const [working, setWorking] = useState(false) const [error, setError] = useState(null) const onLogin = useCallback( async (data: TelegramLoginData) => { setError(null) setWorking(true) try { var response = await axios.post>("/api/login?provider=telegram", data) } catch (e) { const axe = e as AxiosError setError(axe?.response?.data as ApiError | undefined) return } finally { setWorking(false) } setLogin(response.data as FestaLoginData) localStorage.setItem("login", JSON.stringify(response.data)) }, [setLogin] ) const newClassName = classNames(className, { "negative": error, }) let message: JSX.Element let contents: JSX.Element if (error) { message = t("formTelegramLoginError") contents = (
{JSON.stringify(error)}
) } else if (working) { message = t("formTelegramLoginWorking") contents = <> } else { message = t("formTelegramLoginDescription") contents = ( ) } return (

{message}

{contents}
) }