From 30c653913d0ebcb66edcba4f7c2fcdc6f938ca5f Mon Sep 17 00:00:00 2001 From: Codex Agent Date: Fri, 16 Jan 2026 14:17:27 +0100 Subject: [PATCH] Show endcustomer event allowance on dashboard --- .../js/admin/i18n/locales/de/management.json | 3 ++ .../js/admin/i18n/locales/en/management.json | 3 ++ resources/js/admin/mobile/DashboardPage.tsx | 46 +++++++++++++------ .../mobile/__tests__/DashboardPage.test.tsx | 4 +- 4 files changed, 39 insertions(+), 17 deletions(-) diff --git a/resources/js/admin/i18n/locales/de/management.json b/resources/js/admin/i18n/locales/de/management.json index efc3db4..b5d95ac 100644 --- a/resources/js/admin/i18n/locales/de/management.json +++ b/resources/js/admin/i18n/locales/de/management.json @@ -2187,6 +2187,9 @@ "limitDays": "Galerietage", "limitsTitle": "Limits", "remaining": "Verbleibende Events", + "eventAllowance": "Event-Kontingent", + "eventPerPurchase": "1 Event pro Kauf", + "eventPerPurchaseShort": "Pro Kauf", "purchased": "Gekauft", "expires": "Läuft ab", "unlimited": "Unbegrenzt", diff --git a/resources/js/admin/i18n/locales/en/management.json b/resources/js/admin/i18n/locales/en/management.json index ae3d0c9..6dfbe74 100644 --- a/resources/js/admin/i18n/locales/en/management.json +++ b/resources/js/admin/i18n/locales/en/management.json @@ -2191,6 +2191,9 @@ "limitDays": "Gallery days", "limitsTitle": "Limits", "remaining": "Remaining events", + "eventAllowance": "Event allowance", + "eventPerPurchase": "1 event per purchase", + "eventPerPurchaseShort": "Per purchase", "purchased": "Purchased", "expires": "Expires", "unlimited": "Unlimited", diff --git a/resources/js/admin/mobile/DashboardPage.tsx b/resources/js/admin/mobile/DashboardPage.tsx index 42d1bdc..6226c15 100644 --- a/resources/js/admin/mobile/DashboardPage.tsx +++ b/resources/js/admin/mobile/DashboardPage.tsx @@ -168,8 +168,8 @@ export default function MobileDashboardPage() { const activePackage = packagesOverview?.activePackage ?? packagesOverview?.packages?.find((pkg) => pkg.active) ?? null; - const remainingEvents = activePackage?.remaining_events ?? null; const isResellerPackage = activePackage?.package_type === 'reseller'; + const remainingEvents = isResellerPackage ? (activePackage?.remaining_events ?? null) : null; const summarySeenPackageId = summarySeenOverride ?? onboardingStatus?.steps?.summary_seen_package_id ?? null; const hasSummaryPackage = @@ -586,10 +586,17 @@ function PackageSummarySheet({ - + {packageType === 'reseller' ? ( + + ) : ( + + )} {expiresAt ? ( @@ -672,19 +679,28 @@ function PackageSummaryBanner({ const { textStrong, muted, border, surface, accentSoft, primary, surfaceMuted, shadow } = useAdminTheme(); const text = textStrong; const packageName = activePackage.package_name ?? t('mobileDashboard.packageSummary.fallbackTitle', 'Package summary'); - const remainingEvents = typeof activePackage.remaining_events === 'number' ? activePackage.remaining_events : null; + const remainingEvents = + activePackage.package_type === 'reseller' && typeof activePackage.remaining_events === 'number' + ? activePackage.remaining_events + : null; const hasLimit = remainingEvents !== null; const totalEvents = hasLimit ? activePackage.used_events + remainingEvents : null; const showProgress = hasLimit && (totalEvents ?? 0) > 0; - const usageLabel = hasLimit - ? t('mobileDashboard.packageSummary.bannerUsage', '{{used}} of {{total}} events used', { - used: activePackage.used_events, - total: totalEvents ?? 0, - }) - : t('mobileDashboard.packageSummary.bannerUnlimited', 'Unlimited events'); - const remainingLabel = hasLimit - ? t('mobileDashboard.packageSummary.bannerRemaining', '{{count}} remaining', { count: remainingEvents }) - : t('mobileDashboard.packageSummary.bannerRemainingUnlimited', 'No limit'); + const usageLabel = + activePackage.package_type === 'reseller' + ? hasLimit + ? t('mobileDashboard.packageSummary.bannerUsage', '{{used}} of {{total}} events used', { + used: activePackage.used_events, + total: totalEvents ?? 0, + }) + : t('mobileDashboard.packageSummary.bannerUnlimited', 'Unlimited events') + : t('mobileDashboard.packageSummary.eventPerPurchase', '1 event per purchase'); + const remainingLabel = + activePackage.package_type === 'reseller' + ? hasLimit + ? t('mobileDashboard.packageSummary.bannerRemaining', '{{count}} remaining', { count: remainingEvents }) + : t('mobileDashboard.packageSummary.bannerRemainingUnlimited', 'No limit') + : t('mobileDashboard.packageSummary.eventPerPurchaseShort', 'Per purchase'); const progressMax = totalEvents ?? 0; const progressValue = Math.min(activePackage.used_events, progressMax); diff --git a/resources/js/admin/mobile/__tests__/DashboardPage.test.tsx b/resources/js/admin/mobile/__tests__/DashboardPage.test.tsx index 3c16a0d..be1a43e 100644 --- a/resources/js/admin/mobile/__tests__/DashboardPage.test.tsx +++ b/resources/js/admin/mobile/__tests__/DashboardPage.test.tsx @@ -20,7 +20,7 @@ const fixtures = vi.hoisted(() => ({ id: 1, package_id: 1, package_name: 'Standard', - package_type: 'standard', + package_type: 'reseller', included_package_slug: null, active: true, used_events: 2, @@ -240,7 +240,7 @@ describe('MobileDashboardPage', () => { eventContext.hasEvents = true; eventContext.hasMultipleEvents = false; - fixtures.activePackage.package_type = 'standard'; + fixtures.activePackage.package_type = 'reseller'; fixtures.activePackage.remaining_events = 3; navigateMock.mockClear(); });