@@ -16,7 +16,7 @@ export function Login() {
1616 const [ server , setServer ] = useState ( window . location . origin ) ;
1717 const [ username , setUsername ] = useState ( "" ) ;
1818 const [ password , setPassword ] = useState ( "" ) ;
19- const [ remember , setRemember ] = useState ( true ) ;
19+ const [ useSso , setUseSso ] = useState ( false ) ;
2020
2121 // Refs for focus trap
2222 const serverRef = useRef < HTMLInputElement | null > ( null ) ;
@@ -45,11 +45,11 @@ export function Login() {
4545 e . preventDefault ( ) ;
4646 try {
4747 const normalized = normalizeServer ( server ) ;
48- await loginBasic ( { server : normalized , username, password } ) ;
49- if ( ! remember ) {
50- // If user disabled remember, clear stored refresh token
51- localStorage . removeItem ( "app_refresh_token" ) ;
48+ if ( useSso ) {
49+ // For now just disable basic login when SSO selected (future: launch popup flow)
50+ return ;
5251 }
52+ await loginBasic ( { server : normalized , username, password } ) ;
5353 navigate ( "/library" , { replace : true } ) ;
5454 } catch {
5555 // error handled in context
@@ -115,6 +115,7 @@ export function Login() {
115115 onChange = { ( e ) => setUsername ( e . target . value ) }
116116 ref = { userRef }
117117 tabIndex = { 2 }
118+ disabled = { useSso }
118119 />
119120 </ Field >
120121 < Field >
@@ -128,29 +129,27 @@ export function Login() {
128129 onChange = { ( e ) => setPassword ( e . target . value ) }
129130 ref = { passRef }
130131 tabIndex = { 3 }
132+ disabled = { useSso }
131133 />
132134 </ Field >
133- < div className = "flex items-center justify-between hidden" >
134- < CheckboxField >
135- < Checkbox
136- name = "remember"
137- checked = { remember }
138- onChange = { ( ev : any ) => {
139- const checked = ( ev ?. target as HTMLInputElement | undefined )
140- ?. checked ;
141- if ( typeof checked === "boolean" ) setRemember ( checked ) ;
142- } }
143- />
144- < Label > Remember me</ Label >
145- </ CheckboxField >
146- </ div >
135+ < CheckboxField className = "cursor-pointer select-none" >
136+ < Checkbox
137+ id = "login-sso"
138+ name = "useSso"
139+ color = "indigo"
140+ className = "cursor-pointer"
141+ checked = { useSso }
142+ onChange = { ( checked : boolean ) => setUseSso ( ! ! checked ) }
143+ />
144+ < Label htmlFor = "login-sso" className = "cursor-pointer" > Login with SSO</ Label >
145+ </ CheckboxField >
147146 { error && (
148147 < div className = "text-sm text-red-500 -mt-4" role = "alert" >
149148 { error }
150149 </ div >
151150 ) }
152151 < Button type = "submit" className = "w-full" disabled = { loading } tabIndex = { 4 } ref = { submitRef } >
153- { loading ? " Authenticating…" : " Login" }
152+ { loading ? ( useSso ? 'Preparing SSO…' : ' Authenticating…' ) : ( useSso ? 'Continue with SSO' : ' Login' ) }
154153 </ Button >
155154 < Text tabIndex = { - 1 } aria-hidden = "true" >
156155 Don’t have an account? { "" }
0 commit comments