Files
Magent/frontend/app/welcome/page.tsx
T
Assclaw f852e7c941
Magent CI/CD / verify (push) Failing after 9m34s
Magent CI/CD / deploy-beta (push) Skipped
chore: standardize security and quality foundations
2026-09-17 20:03:47 +12:00

90 lines
3.1 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 type="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>View stats &amp; requests</h2>
<p>Check your viewing stats, follow your requests, or make a new one.</p>
<strong>
Open Magent <span aria-hidden="true"></span>
</strong>
</a>
</div>
)}
<footer>
First time here? <a href="/how-it-works">Heres how it works</a>.
</footer>
</main>
);
}