import { Box, Icon, Icons, Overlay, OverlayBackdrop, OverlayCenter, Spinner, Text, color, config, } from 'folds'; import React, { useCallback, useEffect } from 'react'; import { MatrixError } from 'matrix-js-sdk'; import { useAutoDiscoveryInfo } from '../../../hooks/useAutoDiscoveryInfo'; import { AsyncStatus, useAsyncCallback } from '../../../hooks/useAsyncCallback'; import { CustomLoginResponse, LoginError, login, useLoginComplete } from './loginUtil'; function LoginTokenError({ message }: { message: string }) { return ( Token Login {message} ); } type TokenLoginProps = { token: string; }; export function TokenLogin({ token }: TokenLoginProps) { const discovery = useAutoDiscoveryInfo(); const baseUrl = discovery['m.homeserver'].base_url; const [loginState, startLogin] = useAsyncCallback< CustomLoginResponse, MatrixError, Parameters >(useCallback(login, [])); useEffect(() => { startLogin(baseUrl, { type: 'm.login.token', token, initial_device_display_name: 'Cinny Web', }); }, [baseUrl, token, startLogin]); useLoginComplete(loginState.status === AsyncStatus.Success ? loginState.data : undefined); return ( <> {loginState.status === AsyncStatus.Error && ( <> {loginState.error.errcode === LoginError.Forbidden && ( )} {loginState.error.errcode === LoginError.UserDeactivated && ( )} {loginState.error.errcode === LoginError.InvalidRequest && ( )} {loginState.error.errcode === LoginError.RateLimited && ( )} {loginState.error.errcode === LoginError.Unknown && ( )} )} }> ); }