1
0
Fork 0
forked from Mirrors/gomuks

web/login: reorder fields

This commit is contained in:
Tulir Asokan 2024-11-18 00:27:47 +02:00
parent c3d9b2f922
commit 9e795ed3bd

View file

@ -71,7 +71,10 @@ export const LoginScreen = ({ client }: LoginScreenProps) => {
const resolveLoginFlows = useCallback((serverURL: string) => { const resolveLoginFlows = useCallback((serverURL: string) => {
client.rpc.getLoginFlows(serverURL).then( 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}`), err => setError(`Failed to get login flows: ${err}`),
) )
}, [client]) }, [client])
@ -79,7 +82,7 @@ export const LoginScreen = ({ client }: LoginScreenProps) => {
client.rpc.discoverHomeserver(username).then( client.rpc.discoverHomeserver(username).then(
resp => { resp => {
const url = resp["m.homeserver"].base_url const url = resp["m.homeserver"].base_url
setLoginFlows(null) setLoginFlows([])
setHomeserverURL(url) setHomeserverURL(url)
resolveLoginFlows(url) resolveLoginFlows(url)
}, },
@ -96,6 +99,15 @@ export const LoginScreen = ({ client }: LoginScreenProps) => {
clearTimeout(timeout) clearTimeout(timeout)
} }
}, [username, resolveHomeserver]) }, [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<HTMLInputElement>) => { const onChangeUsername = useCallback((evt: React.ChangeEvent<HTMLInputElement>) => {
setUsername(evt.target.value) setUsername(evt.target.value)
}, []) }, [])
@ -120,30 +132,29 @@ export const LoginScreen = ({ client }: LoginScreenProps) => {
value={username} value={username}
onChange={onChangeUsername} onChange={onChangeUsername}
/> />
{supportsPassword !== false && <input <input
type="text"
id="mxlogin-homeserver-url"
placeholder="Homeserver URL (will autofill)"
value={homeserverURL}
onChange={onChangeHomeserverURL}
/>
{supportsPassword && <input
type="password" type="password"
id="mxlogin-password" id="mxlogin-password"
placeholder="Password" placeholder="Password"
value={password} value={password}
onChange={onChangePassword} onChange={onChangePassword}
/>} />}
<input
type="text"
id="mxlogin-homeserver-url"
placeholder="Homeserver URL"
value={homeserverURL}
onChange={onChangeHomeserverURL}
/>
<div className="buttons"> <div className="buttons">
{supportsSSO && <button {supportsSSO && <button
className="mx-login-button" className="mx-login-button"
type={supportsPassword ? "button" : "submit"} type={supportsPassword ? "button" : "submit"}
onClick={supportsPassword ? loginSSO : undefined} onClick={supportsPassword ? loginSSO : undefined}
>Login with SSO</button>} >Login with SSO</button>}
{supportsPassword !== false && <button {supportsPassword && <button
className="mx-login-button" className="mx-login-button"
type="submit" type="submit"
disabled={!loginFlows}
>Login{supportsSSO || beeperDomain ? " with password" : ""}</button>} >Login{supportsSSO || beeperDomain ? " with password" : ""}</button>}
</div> </div>
{error && <div className="error"> {error && <div className="error">