diff --git a/web/src/ui/login/LoginScreen.tsx b/web/src/ui/login/LoginScreen.tsx index c3a680f..bf7ee10 100644 --- a/web/src/ui/login/LoginScreen.tsx +++ b/web/src/ui/login/LoginScreen.tsx @@ -71,7 +71,10 @@ export const LoginScreen = ({ client }: LoginScreenProps) => { const resolveLoginFlows = useCallback((serverURL: string) => { client.rpc.getLoginFlows(serverURL).then( - resp => setLoginFlows(resp.flows.map(flow => flow.type)), + resp => { + setLoginFlows(resp.flows.map(flow => flow.type)) + setError("") + }, err => setError(`Failed to get login flows: ${err}`), ) }, [client]) @@ -79,7 +82,7 @@ export const LoginScreen = ({ client }: LoginScreenProps) => { client.rpc.discoverHomeserver(username).then( resp => { const url = resp["m.homeserver"].base_url - setLoginFlows(null) + setLoginFlows([]) setHomeserverURL(url) resolveLoginFlows(url) }, @@ -96,6 +99,15 @@ export const LoginScreen = ({ client }: LoginScreenProps) => { clearTimeout(timeout) } }, [username, resolveHomeserver]) + useEffect(() => { + if (loginFlows !== null || loginFlows === "resolving" || !homeserverURL) { + return + } + const timeout = setTimeout(() => resolveLoginFlows(homeserverURL), 500) + return () => { + clearTimeout(timeout) + } + }, [homeserverURL, loginFlows, resolveLoginFlows]) const onChangeUsername = useCallback((evt: React.ChangeEvent) => { setUsername(evt.target.value) }, []) @@ -120,30 +132,29 @@ export const LoginScreen = ({ client }: LoginScreenProps) => { value={username} onChange={onChangeUsername} /> - {supportsPassword !== false && + {supportsPassword && } -
{supportsSSO && } - {supportsPassword !== false && }
{error &&