Files
Magent/frontend/app/welcome/page.tsx
T
Assclaw 4034a8f72a
Magent CI/CD / verify (push) Successful in 10m26s
Magent CI/CD / deploy-prod (push) Skipped
Magent CI/CD / deploy-beta (push) Skipped
Add post-login welcome and friendly how-it-works guide
2026-09-07 16:08:37 +12:00

37 lines
2.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
'use client'
import { useEffect, useState } from 'react'
import { authFetch, clearToken, getApiBase } from '../lib/auth'
import '../welcome.css'
export default function WelcomePage() {
const [ready, setReady] = useState(false)
const [url, setUrl] = useState<string | null>(null)
const [error, setError] = useState('')
useEffect(() => {
const controller = new AbortController()
void (async () => {
try {
const response = await authFetch(`${getApiBase()}/site/info`, { signal: controller.signal })
if (response.status === 401) { clearToken(); window.location.replace('/login'); return }
if (!response.ok) throw new Error('Unavailable')
const data = await response.json()
const candidate = data.mediaServerUrl ? new URL(data.mediaServerUrl) : null
if (candidate && ['https:', 'http:'].includes(candidate.protocol) && !candidate.username && !candidate.password) setUrl(candidate.href)
setReady(true)
} catch {
if (!controller.signal.aborted) setError('We couldnt load your welcome page. Please try again.')
}
})()
return () => controller.abort()
}, [])
return <main className="welcome-page">
<header><span className="welcome-kicker">GrizzlyFlix + Magent</span><h1>Make yourself at home.</h1><p>Something to watch, or something to sort out?</p></header>
{error ? <div role="alert"><p>{error}</p><button onClick={() => window.location.reload()}>Try again</button> <a href="/login">Back to sign in</a></div> : !ready ? <p role="status">Getting things ready</p> : <div className="welcome-choices">
{url ? <a className="welcome-choice" href={url}><span className="welcome-icon" aria-hidden="true"></span><h2>Go to GrizzlyFlix</h2><p>Find your next favourite. Watch movies and TV shows.</p><strong>Lets watch <span aria-hidden="true"></span></strong></a> : <section className="welcome-choice"><span className="welcome-icon" aria-hidden="true"></span><h2>Go to GrizzlyFlix</h2><p>The watch link hasnt been set up yet. Please ask an admin to add the public playback URL.</p></section>}
<a className="welcome-choice" href="/"><span className="welcome-icon" aria-hidden="true"></span><h2>Manage your account</h2><p>Track requests, report a problem, or update your profile.</p><strong>Open 01 My Requests <span aria-hidden="true"></span></strong></a>
</div>}
<footer>First time here? <a href="/how-it-works">Heres how it works</a>.</footer>
</main>
}