Landing: Enter -> login door, /login deep-link (signin mode), /signup register; onboarding scroll fix
This commit is contained in:
parent
f98fca45d0
commit
27fd68c8df
4 changed files with 18 additions and 5 deletions
|
|
@ -65,7 +65,10 @@ function SignInForm({ onSwitch }: { onSwitch: () => void }): React.ReactElement
|
||||||
export default function OnboardingPage(): React.ReactElement {
|
export default function OnboardingPage(): React.ReactElement {
|
||||||
const { status, session, register, adoptToken, logout } = useAuth();
|
const { status, session, register, adoptToken, logout } = useAuth();
|
||||||
const offline = status === "offline";
|
const offline = status === "offline";
|
||||||
const [mode, setMode] = useState<"register" | "signin">("register");
|
// /login deep-links here in sign-in mode; the default entry is create-account.
|
||||||
|
const [mode, setMode] = useState<"register" | "signin">(
|
||||||
|
typeof window !== "undefined" && window.location.search.includes("mode=signin") ? "signin" : "register",
|
||||||
|
);
|
||||||
const [step, setStep] = useState(0);
|
const [step, setStep] = useState(0);
|
||||||
const [name, setName] = useState("");
|
const [name, setName] = useState("");
|
||||||
// Collectives opt-in (operator reorder #2): default OFF = solo account.
|
// Collectives opt-in (operator reorder #2): default OFF = solo account.
|
||||||
|
|
@ -148,7 +151,7 @@ export default function OnboardingPage(): React.ReactElement {
|
||||||
// Signed-in visitors who land here (e.g. from the sidebar) get a way out rather than a second registration form.
|
// Signed-in visitors who land here (e.g. from the sidebar) get a way out rather than a second registration form.
|
||||||
if (status === "authenticated" && session !== null && step === 0) {
|
if (status === "authenticated" && session !== null && step === 0) {
|
||||||
return (
|
return (
|
||||||
<div className="flex h-full items-center justify-center p-6">
|
<div className="flex min-h-full items-center justify-center p-6">
|
||||||
<Card className="w-[520px] max-w-full p-6">
|
<Card className="w-[520px] max-w-full p-6">
|
||||||
<h2 className="mb-1 text-base font-semibold">You're signed in</h2>
|
<h2 className="mb-1 text-base font-semibold">You're signed in</h2>
|
||||||
<p className="mb-6 text-xs text-text-faint">
|
<p className="mb-6 text-xs text-text-faint">
|
||||||
|
|
|
||||||
9
apps/web/src/app/login/page.tsx
Normal file
9
apps/web/src/app/login/page.tsx
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
import { redirect } from "next/navigation";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* /login — the sign-in door. The onboarding page holds both forms; this route
|
||||||
|
* deep-links into sign-in mode (register stays the default at /signup).
|
||||||
|
*/
|
||||||
|
export default function LoginRedirect(): React.ReactElement {
|
||||||
|
redirect("/onboarding?mode=signin");
|
||||||
|
}
|
||||||
|
|
@ -88,7 +88,7 @@ function ManualLanding(): React.ReactElement {
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const onKey = (e: KeyboardEvent): void => {
|
const onKey = (e: KeyboardEvent): void => {
|
||||||
if (e.key === "Enter" && e.target === document.body && !e.shiftKey) {
|
if (e.key === "Enter" && e.target === document.body && !e.shiftKey) {
|
||||||
router.push(status === "authenticated" ? "/streams" : "/onboarding");
|
router.push(status === "authenticated" ? "/streams" : "/login");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
window.addEventListener("keydown", onKey);
|
window.addEventListener("keydown", onKey);
|
||||||
|
|
@ -133,7 +133,7 @@ function ManualLanding(): React.ReactElement {
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
<Link
|
<Link
|
||||||
href={status === "authenticated" ? "/streams" : "/onboarding"}
|
href={status === "authenticated" ? "/streams" : "/login"}
|
||||||
className="shrink-0 rounded-md bg-accent px-3 py-1.5 text-2xs font-medium text-white hover:bg-accent-hover"
|
className="shrink-0 rounded-md bg-accent px-3 py-1.5 text-2xs font-medium text-white hover:bg-accent-hover"
|
||||||
>
|
>
|
||||||
{status === "authenticated"
|
{status === "authenticated"
|
||||||
|
|
@ -158,7 +158,7 @@ function ManualLanding(): React.ReactElement {
|
||||||
// create-account forms. A join link itself arrives from outside
|
// create-account forms. A join link itself arrives from outside
|
||||||
// (the only /join route is /join/[token]); starting/solo need the
|
// (the only /join route is /join/[token]); starting/solo need the
|
||||||
// same forms, so one destination is honest for all three.
|
// same forms, so one destination is honest for all three.
|
||||||
const href = "/onboarding";
|
const href = "/onboarding?mode=register";
|
||||||
return (
|
return (
|
||||||
<li key={path.id}>
|
<li key={path.id}>
|
||||||
<Link
|
<Link
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ services:
|
||||||
volumes:
|
volumes:
|
||||||
- tuwunel_data:/var/lib/conduwuit
|
- tuwunel_data:/var/lib/conduwuit
|
||||||
- /opt/occupymedia/tuwunel.toml:/etc/tuwunel/tuwunel.toml:ro
|
- /opt/occupymedia/tuwunel.toml:/etc/tuwunel/tuwunel.toml:ro
|
||||||
|
- /opt/occupymedia/appservices:/appservices:ro
|
||||||
ports:
|
ports:
|
||||||
- "6167:6167" # tunnel: chat.occupymedia.cc -> 100.117.210.52:6167
|
- "6167:6167" # tunnel: chat.occupymedia.cc -> 100.117.210.52:6167
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue