Add tenant PWA help articles and links
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled
tests / ui (push) Has been cancelled

This commit is contained in:
Codex Agent
2026-01-23 10:29:20 +01:00
parent db0fdc58a1
commit 0eb3b85f06
26 changed files with 484 additions and 9 deletions

View File

@@ -0,0 +1,35 @@
---
title: "Pakete, Abrechnung & Exporte"
locale: de
slug: billing-packages-exports
audience: admin
summary: "Paketlimits prüfen, Add-ons kaufen und Datenexporte anfordern."
version_introduced: 2025.4
requires_app_version: "^3.2.0"
status: draft
translation_state: aligned
last_reviewed_at: 2026-01-23
owner: success@fotospiel.app
related:
- slug: post-event-wrapup
- slug: tenant-dashboard-overview
---
## Pakete & Limits
- Verbleibende Events, Gäste, Fotos und Galerietage prüfen.
- Bei Bedarf Paket upgraden oder Addons kaufen.
## BillingPortal
- Zahlungsdaten oder Rechnungen im Portal verwalten.
- Für Upgrades den PaketShop nutzen.
## Datenexporte
- Tenant oder EventExport anfordern.
- Größere Exporte brauchen etwas Zeit; Liste aktualisieren.
## RetentionHinweis
- Galerietage prüfen, damit der Zugriff nicht abläuft.
- Für Archivierung und Compliance `post-event-wrapup` verwenden.
### Weitere Hilfe
`post-event-wrapup` für Aufgaben nach dem Event.

View File

@@ -0,0 +1,35 @@
---
title: "Branding & Assets"
locale: de
slug: event-branding-assets
audience: admin
summary: "Logos hochladen, Farben setzen und Wasserzeichen verwalten."
version_introduced: 2025.4
requires_app_version: "^3.2.0"
status: draft
translation_state: aligned
last_reviewed_at: 2026-01-23
owner: onboarding@fotospiel.app
related:
- slug: event-prep-checklist
- slug: tenant-dashboard-overview
---
## Was du anpassen kannst
- **Coverbild** und **Logo** für den GastStartscreen.
- **Primärfarbe** und **Akzent** für Buttons und Highlights.
- **Begrüßungstext** pro Sprache.
- **Wasserzeichen** für exportierte Fotos.
## Empfohlener Ablauf
1. Logo und Coverbild zuerst hochladen.
2. Farben passend zum Event einstellen.
3. Vorschau prüfen und Texte anpassen.
4. Wasserzeichen nur aktivieren, wenn vertraglich nötig.
### Tipps
- Hoher Kontrast sorgt für bessere Lesbarkeit.
- Begrüßungstext kurz halten (12 Sätze).
### Weitere Hilfe
`event-prep-checklist` für die Vorbereitung oder `tenant-dashboard-overview` für den Status.

View File

@@ -12,6 +12,10 @@ last_reviewed_at: 2026-01-23
owner: ops@fotospiel.app owner: ops@fotospiel.app
related: related:
- slug: tenant-dashboard-overview - slug: tenant-dashboard-overview
- slug: event-settings
- slug: event-branding-assets
- slug: event-tasks-setup
- slug: guest-access-qr
- slug: control-room-moderation - slug: control-room-moderation
- slug: live-show-setup - slug: live-show-setup
--- ---

View File

@@ -0,0 +1,35 @@
---
title: "Event-Einstellungen"
locale: de
slug: event-settings
audience: admin
summary: "Event-Basics, Veröffentlichungsstatus und Upload-Regeln anpassen."
version_introduced: 2025.4
requires_app_version: "^3.2.0"
status: draft
translation_state: aligned
last_reviewed_at: 2026-01-23
owner: onboarding@fotospiel.app
related:
- slug: event-prep-checklist
- slug: tenant-dashboard-overview
---
## Grunddaten
- **Name, Datum, Ort** müssen stimmen sie erscheinen in Exporten.
- **Event-Typ** hilft bei Vorlagen und Reporting.
## Status & Sichtbarkeit
- **Veröffentlicht**: Gäste können beitreten.
- **Entwurf**: für die Vorbereitung, kein Gästezugang.
## Upload-Regeln
- **AutoFreigabe** veröffentlicht Uploads sofort.
- **Fotoaufgaben-Modus** steuert, ob Gäste Aufgaben sehen.
### Tipps
- Event im Entwurf lassen, bis Branding und Aufgaben fertig sind.
- Bei Moderationsbedarf AutoFreigabe deaktivieren.
### Weitere Hilfe
`event-prep-checklist` für den Ablauf oder `guest-access-qr` für die Freigabe.

View File

@@ -0,0 +1,38 @@
---
title: "Event-Aufgaben & Sammlungen"
locale: de
slug: event-tasks-setup
audience: admin
summary: "Fotoaufgaben, Aufgabenbibliothek, Emotionen und Sammlungen für Gäste konfigurieren."
version_introduced: 2025.4
requires_app_version: "^3.2.0"
status: draft
translation_state: aligned
last_reviewed_at: 2026-01-23
owner: onboarding@fotospiel.app
related:
- slug: event-prep-checklist
- slug: tenant-dashboard-overview
---
## Wann nutze ich diese Seite?
Hier stellst du die Aufgaben zusammen, die Gäste im Event sehen und erfüllen sollen.
## Aufgaben-Tab
- Zugewiesene Aufgaben prüfen und Titel/Beschreibung anpassen.
- Aufgaben entfernen, die nicht zum Event passen.
## Aufgabenbibliothek
- Paket importieren, um eine kuratierte Basis zu erhalten.
- Eigene Aufgaben für besondere Momente hinzufügen.
## Emotionen & Sammlungen
- **Emotionen** helfen beim Taggen der Stimmung (z. B. fröhlich, emotional, wild).
- **Sammlungen** gruppieren Aufgaben nach Themen (z. B. Zeremonie, Party, Familie).
### Tipps
- Aufgaben kurz und konkret formulieren.
- 1220 Aufgaben reichen meist aus.
### Weitere Hilfe
`event-prep-checklist` für die Vorbereitung oder `tenant-dashboard-overview` für den Status.

View File

@@ -0,0 +1,36 @@
---
title: "Event-Team & Einladungen"
locale: de
slug: event-team-invites
audience: admin
summary: "Team einladen, Rollen vergeben und Zugriffe verwalten."
version_introduced: 2025.4
requires_app_version: "^3.2.0"
status: draft
translation_state: aligned
last_reviewed_at: 2026-01-23
owner: success@fotospiel.app
related:
- slug: tenant-dashboard-overview
- slug: event-settings
---
## Team einladen
1. Name und EMail eingeben.
2. Rolle wählen (Admin oder Mitglied).
3. Einladung senden und Annahme abwarten.
## Rollen im Überblick
- **Admin**: kann Einstellungen und Moderation verwalten.
- **Mitglied**: eingeschränkter Zugriff für Helfer.
## Zugriffe verwalten
- Einladungen erneut senden, wenn sie noch offen sind.
- Zugang entfernen, wenn Helfer nicht mehr benötigt werden.
### Tipps
- Mindestens zwei Admins für Redundanz.
- Mitgliederrollen für temporäre Helfer nutzen.
### Weitere Hilfe
`event-settings` für Berechtigungen oder `tenant-dashboard-overview` für den Überblick.

View File

@@ -0,0 +1,31 @@
---
title: "Gästezugang & QR"
locale: de
slug: guest-access-qr
audience: admin
summary: "Join-Link oder QR-Code teilen und Drucklayouts für Gäste vorbereiten."
version_introduced: 2025.4
requires_app_version: "^3.2.0"
status: draft
translation_state: aligned
last_reviewed_at: 2026-01-23
owner: onboarding@fotospiel.app
related:
- slug: event-prep-checklist
- slug: tenant-dashboard-overview
---
## Wo finde ich den QR?
Öffne die QRSeite im EventDashboard. Dort kannst du den JoinLink kopieren oder Drucklayouts herunterladen.
## Best Practices
- QRCode an Eingängen und an der Fotobox sichtbar platzieren.
- Kurzen Hinweis ergänzen, z. B. „Scannen, um Fotos hochzuladen“.
- QR vorab mit einem Handy testen.
## Alternativen zum QR
- JoinLink per EMail oder Messenger senden.
- Link in gedruckte Einladungen integrieren.
### Weitere Hilfe
`event-prep-checklist` für den kompletten Ablauf.

View File

@@ -17,10 +17,15 @@ Dieses Portal sammelt alles, was Event-Admins für Vorbereitung, Kern-Workflows
| Bereich | Kernfrage | Artikel-Slug | | Bereich | Kernfrage | Artikel-Slug |
| --- | --- | --- | | --- | --- | --- |
| Dashboard | Wo sehe ich Status, KPIs und Schnellaktionen? | `tenant-dashboard-overview` | | Dashboard | Wo sehe ich Status, KPIs und Schnellaktionen? | `tenant-dashboard-overview` |
| Event-Vorbereitung | Was muss vor dem Start erledigt sein? | `event-prep-checklist` | | Event-Einstellungen | Wo bearbeite ich Event-Basics und Status? | `event-settings` |
| FAQ | Was sind die häufigsten Fragen? | `faq-admin` | | Branding | Wie lade ich Logos hoch und setze Farben? | `event-branding-assets` |
| Aufgaben & Sammlungen | Wie verwalte ich Aufgaben und Prompts? | `event-tasks-setup` |
| Gästezugang | Wie teile ich Join-Link oder QR? | `guest-access-qr` |
| Team & Einladungen | Wie lade ich Helfer ein und vergebe Rollen? | `event-team-invites` |
| Control Room | Wie moderiere ich Uploads und steuere die Queue? | `control-room-moderation` | | Control Room | Wie moderiere ich Uploads und steuere die Queue? | `control-room-moderation` |
| Live Show | Wie richte ich den Live-Show-Player ein? | `live-show-setup` | | Live Show | Wie richte ich den Live-Show-Player ein? | `live-show-setup` |
| Abschluss & Exporte | Was erledige ich nach dem Event? | `post-event-wrapup` | | Abrechnung & Exporte | Wo verwalte ich Pakete und Exporte? | `billing-packages-exports` |
| Abschluss & Compliance | Was erledige ich nach dem Event? | `post-event-wrapup` |
| FAQ | Was sind die häufigsten Fragen? | `faq-admin` |
Nutze das Help Center in der App für mobilfreundliches Lesen oder öffne `/help/admin` am Desktop. Nutze das Help Center in der App für mobilfreundliches Lesen oder öffne `/help/admin` am Desktop.

View File

@@ -11,6 +11,7 @@ translation_state: aligned
last_reviewed_at: 2026-01-23 last_reviewed_at: 2026-01-23
owner: onboarding@fotospiel.app owner: onboarding@fotospiel.app
related: related:
- slug: event-settings
- slug: event-prep-checklist - slug: event-prep-checklist
- slug: post-event-wrapup - slug: post-event-wrapup
--- ---

View File

@@ -0,0 +1,35 @@
---
title: "Packages, Billing & Exports"
locale: en
slug: billing-packages-exports
audience: admin
summary: "Review package limits, purchase addons, and request data exports."
version_introduced: 2025.4
requires_app_version: "^3.2.0"
status: draft
translation_state: aligned
last_reviewed_at: 2026-01-23
owner: success@fotospiel.app
related:
- slug: post-event-wrapup
- slug: tenant-dashboard-overview
---
## Packages & limits
- Review remaining events, guests, photos, and gallery days.
- Upgrade the package or purchase addons if limits are low.
## Billing portal
- Open the billing portal to update payment methods or invoices.
- Use the package shop for upgrades when needed.
## Data exports
- Request a tenantwide or eventspecific export.
- Large exports can take a few minutes; refresh the list to see progress.
## Retention reminders
- Check the gallery days limit to avoid expired access.
- Use `post-event-wrapup` for archiving and compliance steps.
### Need more help?
See `post-event-wrapup` for afterevent tasks.

View File

@@ -0,0 +1,35 @@
---
title: "Branding & Assets"
locale: en
slug: event-branding-assets
audience: admin
summary: "Upload logos, set colors, and manage the watermark for the guest experience."
version_introduced: 2025.4
requires_app_version: "^3.2.0"
status: draft
translation_state: aligned
last_reviewed_at: 2026-01-23
owner: onboarding@fotospiel.app
related:
- slug: event-prep-checklist
- slug: tenant-dashboard-overview
---
## What you can change
- **Cover image** and **logo** for the guest landing screen.
- **Primary color** and **accent** for buttons and highlights.
- **Welcome text** per locale.
- **Watermark** settings for exported photos.
## Recommended workflow
1. Upload logo and cover image first.
2. Adjust colors to match the event identity.
3. Review the guest preview and adjust copy if needed.
4. Configure watermark only if required by the contract.
### Tips
- Use highcontrast colors for readability.
- Keep welcome text short (12 sentences).
### Need more help?
See `event-prep-checklist` for the full prep flow or `tenant-dashboard-overview` for the status view.

View File

@@ -12,6 +12,10 @@ last_reviewed_at: 2026-01-23
owner: ops@fotospiel.app owner: ops@fotospiel.app
related: related:
- slug: tenant-dashboard-overview - slug: tenant-dashboard-overview
- slug: event-settings
- slug: event-branding-assets
- slug: event-tasks-setup
- slug: guest-access-qr
- slug: control-room-moderation - slug: control-room-moderation
- slug: live-show-setup - slug: live-show-setup
--- ---

View File

@@ -0,0 +1,35 @@
---
title: "Event Settings"
locale: en
slug: event-settings
audience: admin
summary: "Edit event basics, publish status, and upload rules."
version_introduced: 2025.4
requires_app_version: "^3.2.0"
status: draft
translation_state: aligned
last_reviewed_at: 2026-01-23
owner: onboarding@fotospiel.app
related:
- slug: event-prep-checklist
- slug: tenant-dashboard-overview
---
## Core fields
- **Name, date, location**: keep these accurate for guests and exports.
- **Event type**: helps internal reporting and templates.
## Status & visibility
- **Published**: guests can join the event.
- **Draft**: safe for preparation; no guest access yet.
## Upload rules
- **Autoapproval** lets guest uploads appear immediately.
- **Photo tasks mode** controls whether guests see tasks or just the gallery.
### Tips
- Keep the event in Draft until branding and tasks are ready.
- If moderation is needed, disable autoapproval.
### Need more help?
See `event-prep-checklist` for the full flow or `guest-access-qr` for sharing.

View File

@@ -0,0 +1,38 @@
---
title: "Event Tasks & Collections"
locale: en
slug: event-tasks-setup
audience: admin
summary: "Configure photo tasks, the task library, emotions, and collections for guests."
version_introduced: 2025.4
requires_app_version: "^3.2.0"
status: draft
translation_state: aligned
last_reviewed_at: 2026-01-23
owner: onboarding@fotospiel.app
related:
- slug: event-prep-checklist
- slug: tenant-dashboard-overview
---
## When to use this page
Use this page to shape the guest experience: tasks guide what guests should capture and add structure to the gallery.
## Tasks tab
- Review the assigned tasks and edit titles or descriptions.
- Remove tasks that do not fit the event tone.
## Task Library tab
- Import a task package to get a curated starter set.
- Add custom tasks for special moments or sponsor prompts.
## Emotions & Collections
- **Emotions** help guests tag the mood (e.g. joyful, emotional, wild).
- **Collections** group tasks into themes (e.g. ceremony, party, family).
### Tips
- Keep tasks short and concrete.
- Aim for 1220 tasks per event to avoid overwhelming guests.
### Need more help?
Open `event-prep-checklist` for the full prep flow or `tenant-dashboard-overview` for the status view.

View File

@@ -0,0 +1,36 @@
---
title: "Event Team & Invites"
locale: en
slug: event-team-invites
audience: admin
summary: "Invite staff, assign roles, and manage access for your event team."
version_introduced: 2025.4
requires_app_version: "^3.2.0"
status: draft
translation_state: aligned
last_reviewed_at: 2026-01-23
owner: success@fotospiel.app
related:
- slug: tenant-dashboard-overview
- slug: event-settings
---
## Invite team members
1. Enter name and email.
2. Choose a role (Admin or Member).
3. Send the invite and wait for acceptance.
## Roles overview
- **Admin**: can manage settings and moderation.
- **Member**: limited access for helpers.
## Manage access
- Resend invites for pending members.
- Remove access when staff leave the event.
### Tips
- Keep at least two admins for redundancy.
- Use member roles for temporary helpers.
### Need more help?
See `event-settings` for permissions or `tenant-dashboard-overview` for the full event overview.

View File

@@ -0,0 +1,31 @@
---
title: "Guest Access & QR"
locale: en
slug: guest-access-qr
audience: admin
summary: "Share the join link or QR code and prepare printed layouts for guests."
version_introduced: 2025.4
requires_app_version: "^3.2.0"
status: draft
translation_state: aligned
last_reviewed_at: 2026-01-23
owner: onboarding@fotospiel.app
related:
- slug: event-prep-checklist
- slug: tenant-dashboard-overview
---
## Where to find the QR
Open the QR page from the event dashboard. You can copy the join link or download print layouts.
## Best practices
- Display the QR at entrances and the photobooth.
- Include a short hint like “Scan to join and upload photos.”
- Test the QR with a phone before guests arrive.
## Sharing alternatives
- Send the join link via email or messenger.
- Add the link to printed invitations if the event is preannounced.
### Need more help?
See `event-prep-checklist` for the full prep flow.

View File

@@ -17,10 +17,15 @@ This portal collects everything event admins need to configure events, run key w
| Section | Key Questions | Article Slug | | Section | Key Questions | Article Slug |
| --- | --- | --- | | --- | --- | --- |
| Dashboard | Where do I see status, KPIs, and quick actions? | `tenant-dashboard-overview` | | Dashboard | Where do I see status, KPIs, and quick actions? | `tenant-dashboard-overview` |
| Event Preparation | What do I need before guests arrive? | `event-prep-checklist` | | Event Settings | Where do I edit the event basics and publish status? | `event-settings` |
| FAQ | What are the most common questions? | `faq-admin` | | Branding | How do I upload logos and set colors? | `event-branding-assets` |
| Tasks & Collections | How do I manage guest tasks and prompts? | `event-tasks-setup` |
| Guest Access | How do I share the join link or QR? | `guest-access-qr` |
| Team & Invites | How do I invite staff and assign roles? | `event-team-invites` |
| Control Room | How do I moderate uploads and manage the queue? | `control-room-moderation` | | Control Room | How do I moderate uploads and manage the queue? | `control-room-moderation` |
| Live Show | How do I configure the Live Show player? | `live-show-setup` | | Live Show | How do I configure the Live Show player? | `live-show-setup` |
| Wrap-up & Exports | What should I do after the event ends? | `post-event-wrapup` | | Billing & Exports | Where do I manage packages and data exports? | `billing-packages-exports` |
| Wrap-up & Compliance | What should I do after the event ends? | `post-event-wrapup` |
| FAQ | What are the most common questions? | `faq-admin` |
Use the in-app help center for mobile-friendly reading, or open `/help/admin` on desktop for the full layout. Use the in-app help center for mobile-friendly reading, or open `/help/admin` on desktop for the full layout.

View File

@@ -11,6 +11,7 @@ translation_state: aligned
last_reviewed_at: 2026-01-23 last_reviewed_at: 2026-01-23
owner: onboarding@fotospiel.app owner: onboarding@fotospiel.app
related: related:
- slug: event-settings
- slug: event-prep-checklist - slug: event-prep-checklist
- slug: post-event-wrapup - slug: post-event-wrapup
--- ---

View File

@@ -8,6 +8,7 @@ import { Pressable } from '@tamagui/react-native-web-lite';
import toast from 'react-hot-toast'; import toast from 'react-hot-toast';
import { MobileShell, HeaderActionButton } from './components/MobileShell'; import { MobileShell, HeaderActionButton } from './components/MobileShell';
import { MobileCard, CTAButton, PillBadge } from './components/Primitives'; import { MobileCard, CTAButton, PillBadge } from './components/Primitives';
import { ContextHelpLink } from './components/ContextHelpLink';
import { import {
createTenantBillingPortalSession, createTenantBillingPortalSession,
getTenantPackagesOverview, getTenantPackagesOverview,
@@ -268,6 +269,10 @@ export default function MobileBillingPage() {
<CTAButton label={t('billing.actions.refresh', 'Refresh')} tone="ghost" onPress={load} /> <CTAButton label={t('billing.actions.refresh', 'Refresh')} tone="ghost" onPress={load} />
</MobileCard> </MobileCard>
) : null} ) : null}
<XStack justifyContent="flex-end">
<ContextHelpLink slug="billing-packages-exports" />
</XStack>
{pendingCheckout && (checkoutStatus === 'failed' || checkoutStatus === 'cancelled') ? ( {pendingCheckout && (checkoutStatus === 'failed' || checkoutStatus === 'cancelled') ? (
<MobileCard borderColor={danger} backgroundColor="$red1" space="$2"> <MobileCard borderColor={danger} backgroundColor="$red1" space="$2">
<XStack alignItems="center" justifyContent="space-between"> <XStack alignItems="center" justifyContent="space-between">

View File

@@ -562,7 +562,7 @@ export default function MobileBrandingPage() {
) : null} ) : null}
<XStack justifyContent="flex-end"> <XStack justifyContent="flex-end">
<ContextHelpLink slug="event-prep-checklist" /> <ContextHelpLink slug="event-branding-assets" />
</XStack> </XStack>
<MobileCard space="$2"> <MobileCard space="$2">

View File

@@ -7,6 +7,7 @@ import { Switch } from '@tamagui/switch';
import toast from 'react-hot-toast'; import toast from 'react-hot-toast';
import { MobileShell, HeaderActionButton } from './components/MobileShell'; import { MobileShell, HeaderActionButton } from './components/MobileShell';
import { MobileCard, CTAButton, PillBadge, SkeletonCard } from './components/Primitives'; import { MobileCard, CTAButton, PillBadge, SkeletonCard } from './components/Primitives';
import { ContextHelpLink } from './components/ContextHelpLink';
import { MobileSelect } from './components/FormControls'; import { MobileSelect } from './components/FormControls';
import { import {
DataExportSummary, DataExportSummary,
@@ -371,6 +372,9 @@ export default function MobileDataExportsPage() {
</HeaderActionButton> </HeaderActionButton>
} }
> >
<XStack justifyContent="flex-end">
<ContextHelpLink slug="billing-packages-exports" />
</XStack>
<DataExportsPanel onRefreshReady={setRefresh} /> <DataExportsPanel onRefreshReady={setRefresh} />
</MobileShell> </MobileShell>
); );

View File

@@ -11,6 +11,7 @@ import { MobileShell } from './components/MobileShell';
import { MobileCard, CTAButton, FloatingActionButton } from './components/Primitives'; import { MobileCard, CTAButton, FloatingActionButton } from './components/Primitives';
import { MobileDateInput, MobileField, MobileInput, MobileSelect, MobileTextArea } from './components/FormControls'; import { MobileDateInput, MobileField, MobileInput, MobileSelect, MobileTextArea } from './components/FormControls';
import { LegalConsentSheet } from './components/LegalConsentSheet'; import { LegalConsentSheet } from './components/LegalConsentSheet';
import { ContextHelpLink } from './components/ContextHelpLink';
import { import {
createEvent, createEvent,
getEvent, getEvent,
@@ -402,6 +403,10 @@ export default function MobileEventFormPage() {
</MobileCard> </MobileCard>
) : null} ) : null}
<XStack justifyContent="flex-end">
<ContextHelpLink slug="event-settings" />
</XStack>
<MobileCard space="$3"> <MobileCard space="$3">
<MobileField label={requiredLabel(t('eventForm.fields.name.label', 'Event name'))}> <MobileField label={requiredLabel(t('eventForm.fields.name.label', 'Event name'))}>
<MobileInput <MobileInput

View File

@@ -8,6 +8,7 @@ import { Pressable } from '@tamagui/react-native-web-lite';
import { MobileShell, HeaderActionButton } from './components/MobileShell'; import { MobileShell, HeaderActionButton } from './components/MobileShell';
import { MobileCard, CTAButton, PillBadge, SkeletonCard } from './components/Primitives'; import { MobileCard, CTAButton, PillBadge, SkeletonCard } from './components/Primitives';
import { MobileField, MobileInput, MobileSelect } from './components/FormControls'; import { MobileField, MobileInput, MobileSelect } from './components/FormControls';
import { ContextHelpLink } from './components/ContextHelpLink';
import { EventMember, getEventMembers, inviteEventMember, removeEventMember, trackOnboarding } from '../api'; import { EventMember, getEventMembers, inviteEventMember, removeEventMember, trackOnboarding } from '../api';
import { isAuthError } from '../auth/tokens'; import { isAuthError } from '../auth/tokens';
import { getApiErrorMessage } from '../lib/apiError'; import { getApiErrorMessage } from '../lib/apiError';
@@ -158,6 +159,10 @@ export default function MobileEventMembersPage() {
</MobileCard> </MobileCard>
) : null} ) : null}
<XStack justifyContent="flex-end">
<ContextHelpLink slug="event-team-invites" />
</XStack>
<MobileCard space="$3"> <MobileCard space="$3">
<Text fontSize="$md" fontWeight="800" color={textStrong}> <Text fontSize="$md" fontWeight="800" color={textStrong}>
{t('events.members.inviteTitle', 'Invite Member')} {t('events.members.inviteTitle', 'Invite Member')}

View File

@@ -1164,7 +1164,7 @@ export default function MobileEventTasksPage() {
width="100%" width="100%"
> >
<XStack justifyContent="flex-end" marginBottom="$2"> <XStack justifyContent="flex-end" marginBottom="$2">
<ContextHelpLink slug="event-prep-checklist" /> <ContextHelpLink slug="event-tasks-setup" />
</XStack> </XStack>
<Tabs.List <Tabs.List
borderRadius={16} borderRadius={16}

View File

@@ -103,7 +103,7 @@ export default function MobileQrPrintPage() {
) : null} ) : null}
<XStack justifyContent="flex-end"> <XStack justifyContent="flex-end">
<ContextHelpLink slug="event-prep-checklist" /> <ContextHelpLink slug="guest-access-qr" />
</XStack> </XStack>
<MobileCard space="$3" alignItems="center"> <MobileCard space="$3" alignItems="center">

View File

@@ -88,6 +88,22 @@ vi.mock('@tamagui/switch', () => ({
), ),
})); }));
vi.mock('@tamagui/react-native-web-lite', () => ({
Pressable: ({
children,
onPress,
...rest
}: {
children: React.ReactNode;
onPress?: () => void;
[key: string]: unknown;
}) => (
<button type="button" onClick={onPress} {...rest}>
{children}
</button>
),
}));
vi.mock('../theme', () => ({ vi.mock('../theme', () => ({
useAdminTheme: () => ({ useAdminTheme: () => ({
text: '#111827', text: '#111827',