feat(register): show invite-only error when no code param is present
Some checks failed
CI / Unit & Component Tests (push) Failing after 2m34s
CI / OCR Service Tests (push) Successful in 34s
CI / Backend Unit Tests (push) Failing after 2m50s

Visiting /register without a code now shows a friendly error card
explaining the archive is invite-only, instead of the empty form.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Marcel
2026-04-19 12:29:34 +02:00
parent d07f7debf8
commit 692c2c0629
5 changed files with 13 additions and 3 deletions

View File

@@ -657,6 +657,8 @@
"register_btn_submit": "Konto erstellen",
"register_invalid_code": "Ungültiger Einladungslink",
"register_invalid_code_desc": "Dieser Einladungslink ist nicht gültig, wurde bereits verwendet oder ist abgelaufen. Bitte wende dich an den Administrator.",
"register_invite_only": "Das Archiv ist nur auf Einladung zugänglich.",
"register_invite_only_desc": "Für ein Konto benötigst du einen persönlichen Einladungslink. Bitte wende dich an ein Mitglied der Familie.",
"register_success": "Dein Konto wurde erfolgreich erstellt. Du kannst dich jetzt anmelden.",
"register_eyebrow": "Ein Familienprojekt",
"register_hero_headline": "Schön, dass du da bist.",

View File

@@ -657,6 +657,8 @@
"register_btn_submit": "Create account",
"register_invalid_code": "Invalid invite link",
"register_invalid_code_desc": "This invite link is not valid, has already been used, or has expired. Please contact the administrator.",
"register_invite_only": "The archive is invite-only.",
"register_invite_only_desc": "You need a personal invite link to create an account. Please get in touch with a family member.",
"register_success": "Your account has been created. You can now sign in.",
"register_eyebrow": "A family project",
"register_hero_headline": "Glad you're here.",

View File

@@ -657,6 +657,8 @@
"register_btn_submit": "Crear cuenta",
"register_invalid_code": "Enlace de invitación inválido",
"register_invalid_code_desc": "Este enlace de invitación no es válido, ya ha sido utilizado o ha expirado. Contacta al administrador.",
"register_invite_only": "El archivo es solo por invitación.",
"register_invite_only_desc": "Necesitas un enlace de invitación personal para crear una cuenta. Ponte en contacto con un miembro de la familia.",
"register_success": "Tu cuenta ha sido creada. Ahora puedes iniciar sesión.",
"register_eyebrow": "Un proyecto familiar",
"register_hero_headline": "Qué bueno que estés aquí.",

View File

@@ -12,7 +12,7 @@ interface InvitePrefill {
export const load: PageServerLoad = async ({ url, fetch }) => {
const code = url.searchParams.get('code');
if (!code) {
return { code: null, prefill: null, codeError: null };
return { code: null, prefill: null, codeError: 'NO_INVITE_CODE' };
}
const apiUrl = env.API_INTERNAL_URL || 'http://localhost:8080';

View File

@@ -60,9 +60,13 @@ $effect(() => {
/>
</svg>
<h1 class="mb-2 font-sans text-sm font-bold tracking-widest text-ink uppercase">
{m.register_invalid_code()}
{data.codeError === 'NO_INVITE_CODE' ? m.register_invite_only() : m.register_invalid_code()}
</h1>
<p class="mb-6 font-serif text-sm text-ink-2">{m.register_invalid_code_desc()}</p>
<p class="mb-6 font-serif text-sm text-ink-2">
{data.codeError === 'NO_INVITE_CODE'
? m.register_invite_only_desc()
: m.register_invalid_code_desc()}
</p>
<a
href="/login"
class="font-sans text-xs font-bold tracking-widest text-brand-navy/60 uppercase transition-colors hover:text-brand-navy"