import { Box, Overlay, OverlayBackdrop, OverlayCenter, Spinner, Text, color, config } from 'folds';
import { Icon, Icons } from '../../../components/icons';
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(() => {
const existingDeviceId = localStorage.getItem('cinny_device_id') ?? undefined;
startLogin(baseUrl, {
type: 'm.login.token',
token,
device_id: existingDeviceId,
initial_device_display_name: 'Paarrot',
});
}, [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 && (
)}
>
)}
}>
>
);
}