|
1 | 1 | import { useState, useEffect } from 'react' |
2 | | -import { useNavigate, useParams } from 'react-router-dom' |
| 2 | +import { useNavigate, useParams, useSearchParams } from 'react-router-dom' |
3 | 3 | import { useAuth } from '../context/AuthContext' |
4 | 4 | import { apiUrl } from '../utils/basePath' |
5 | 5 | import './auth.css' |
6 | 6 |
|
7 | 7 | export default function Login() { |
8 | 8 | const navigate = useNavigate() |
9 | 9 | const { code: urlInviteCode } = useParams() |
| 10 | + const [searchParams] = useSearchParams() |
10 | 11 | const { authEnabled, user, loading: authLoading, refresh } = useAuth() |
11 | 12 | const [providers, setProviders] = useState([]) |
12 | 13 | const [hasUsers, setHasUsers] = useState(true) |
@@ -42,6 +43,14 @@ export default function Login() { |
42 | 43 | } |
43 | 44 | }, [urlInviteCode]) |
44 | 45 |
|
| 46 | + // Show error from OAuth redirect (e.g. invite_required) |
| 47 | + useEffect(() => { |
| 48 | + const errorParam = searchParams.get('error') |
| 49 | + if (errorParam === 'invite_required') { |
| 50 | + setError('A valid invite code is required to register') |
| 51 | + } |
| 52 | + }, [searchParams]) |
| 53 | + |
45 | 54 | useEffect(() => { |
46 | 55 | fetch(apiUrl('/api/auth/status')) |
47 | 56 | .then(r => r.json()) |
@@ -252,12 +261,14 @@ export default function Login() { |
252 | 261 | <button type="submit" className="btn btn-primary login-btn-full" disabled={submitting}> |
253 | 262 | {submitting ? 'Signing in...' : 'Sign In'} |
254 | 263 | </button> |
255 | | - <p className="login-footer"> |
256 | | - Don't have an account?{' '} |
257 | | - <button type="button" className="login-link" onClick={() => { setMode('register'); setError(''); setMessage('') }}> |
258 | | - Register |
259 | | - </button> |
260 | | - </p> |
| 264 | + {!(registrationMode === 'invite' && hasUsers && !urlInviteCode) && ( |
| 265 | + <p className="login-footer"> |
| 266 | + Don't have an account?{' '} |
| 267 | + <button type="button" className="login-link" onClick={() => { setMode('register'); setError(''); setMessage('') }}> |
| 268 | + Register |
| 269 | + </button> |
| 270 | + </p> |
| 271 | + )} |
261 | 272 | </form> |
262 | 273 | )} |
263 | 274 |
|
|
0 commit comments