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

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -103,7 +103,7 @@ export default function MobileQrPrintPage() {
) : null}
<XStack justifyContent="flex-end">
<ContextHelpLink slug="event-prep-checklist" />
<ContextHelpLink slug="guest-access-qr" />
</XStack>
<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', () => ({
useAdminTheme: () => ({
text: '#111827',