Add dedicated mobile event add-ons page
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-02-07 15:00:14 +01:00
parent ddbfa38db1
commit 922da46331
10 changed files with 847 additions and 189 deletions

View File

@@ -201,7 +201,7 @@ export default function MobileBillingPage() {
const scopedEventPath = scopeEvent?.slug ? ADMIN_EVENT_VIEW_PATH(scopeEvent.slug) : null;
const activeEventId = scopeEvent?.id ?? activeEvent?.id ?? null;
const hasSellableAddons = React.useMemo(() => catalogAddons.some((addon) => Boolean(addon.price_id)), [catalogAddons]);
const eventRecapPath = scopeEvent?.slug ? adminPath(`/mobile/events/${scopeEvent.slug}/recap`) : null;
const eventAddonsPath = scopeEvent?.slug ? adminPath(`/mobile/events/${scopeEvent.slug}/addons`) : null;
const eventControlRoomPath = scopeEvent?.slug ? adminPath(`/mobile/events/${scopeEvent.slug}/control-room`) : null;
const scopedEventPackage = scopeEvent?.package ?? null;
const scopedEventAddons = React.useMemo<EventAddonSummary[]>(() => {
@@ -702,7 +702,7 @@ export default function MobileBillingPage() {
<YStack gap="$2" marginTop="$1">
<CTAButton
label={t('billing.sections.currentEvent.openAddonShop', 'Buy add-ons for this event')}
onPress={() => navigate(eventRecapPath ?? adminPath(`/mobile/events/${scopeEvent.slug}/recap`))}
onPress={() => navigate(eventAddonsPath ?? adminPath(`/mobile/events/${scopeEvent.slug}/addons`))}
/>
<CTAButton
label={t('billing.sections.currentEvent.openAddonUpsell', 'Open control-room upgrades')}
@@ -896,7 +896,7 @@ export default function MobileBillingPage() {
{scopeEvent?.slug && hasSellableAddons ? (
<CTAButton
label={t('billing.sections.addOns.openShop', 'Buy add-ons now')}
onPress={() => navigate(eventRecapPath ?? adminPath(`/mobile/events/${scopeEvent.slug}/recap`))}
onPress={() => navigate(eventAddonsPath ?? adminPath(`/mobile/events/${scopeEvent.slug}/addons`))}
/>
) : null}
</YStack>