From da6f95aead0bd0156d1ad66800b54ecf90b73d8c Mon Sep 17 00:00:00 2001 From: Codex Agent Date: Wed, 21 Jan 2026 22:07:46 +0100 Subject: [PATCH] Add order CTA links on packages overview --- resources/js/pages/marketing/Packages.tsx | 58 +++++++++++++++----- resources/lang/de/marketing.json | 1 + resources/lang/en/marketing.json | 1 + tests/Feature/Marketing/PackagesPageTest.php | 28 ++++++++++ 4 files changed, 75 insertions(+), 13 deletions(-) create mode 100644 tests/Feature/Marketing/PackagesPageTest.php diff --git a/resources/js/pages/marketing/Packages.tsx b/resources/js/pages/marketing/Packages.tsx index f4ce438..b303c65 100644 --- a/resources/js/pages/marketing/Packages.tsx +++ b/resources/js/pages/marketing/Packages.tsx @@ -673,6 +673,7 @@ interface PackageCardProps { variant: 'endcustomer' | 'reseller'; highlight?: boolean; onSelect?: (pkg: Package) => void; + onCtaClick?: (pkg: Package, variant: 'endcustomer' | 'reseller') => void; className?: string; showCTA?: boolean; ctaLabel?: string; @@ -684,6 +685,7 @@ function PackageCard({ variant, highlight = false, onSelect, + onCtaClick, className, showCTA = true, ctaLabel, @@ -691,9 +693,12 @@ function PackageCard({ }: PackageCardProps) { const { t } = useTranslation('marketing'); const { t: tCommon } = useTranslation('common'); + const { localizedPath } = useLocalizedRoutes(); const accent = getAccentTheme(variant); + const purchaseUrl = localizedPath(`/bestellen/${pkg.id}`); + const numericPrice = Number(pkg.price); const priceLabel = numericPrice === 0 @@ -805,19 +810,42 @@ function PackageCard({ {featureList} {showCTA && onSelect && ( - - + +
+ + +
)} @@ -1072,6 +1100,7 @@ const PackageDetailGrid: React.FC = ({ variant="endcustomer" highlight={pkg.id === highlightEndcustomerId} onSelect={(selected) => handleCardClick(selected, 'endcustomer')} + onCtaClick={handleCtaClick} className="h-full" compact /> @@ -1095,6 +1124,7 @@ const PackageDetailGrid: React.FC = ({ variant="endcustomer" highlight={pkg.id === highlightEndcustomerId} onSelect={(selected) => handleCardClick(selected, 'endcustomer')} + onCtaClick={handleCtaClick} className="h-full" compact /> @@ -1124,6 +1154,7 @@ const PackageDetailGrid: React.FC = ({ variant="reseller" highlight={pkg.id === highlightResellerId} onSelect={(selected) => handleCardClick(selected, 'reseller')} + onCtaClick={handleCtaClick} className="h-full" compact /> @@ -1147,6 +1178,7 @@ const PackageDetailGrid: React.FC = ({ variant="reseller" highlight={pkg.id === highlightResellerId} onSelect={(selected) => handleCardClick(selected, 'reseller')} + onCtaClick={handleCtaClick} className="h-full" compact /> diff --git a/resources/lang/de/marketing.json b/resources/lang/de/marketing.json index b2c0dee..c9c0c7c 100644 --- a/resources/lang/de/marketing.json +++ b/resources/lang/de/marketing.json @@ -71,6 +71,7 @@ "gallery_days": "Tage Galerie", "max_events_year": "Events enthalten", "recommended_usage_window": "Empfohlen innerhalb von 24 Monaten zu nutzen.", + "to_order": "Bestellen", "buy_now": "Jetzt kaufen", "subscribe_now": "Jetzt kaufen", "register_buy": "Registrieren und kaufen", diff --git a/resources/lang/en/marketing.json b/resources/lang/en/marketing.json index c5f975a..6f94d01 100644 --- a/resources/lang/en/marketing.json +++ b/resources/lang/en/marketing.json @@ -71,6 +71,7 @@ "gallery_days": "Gallery Days", "max_events_year": "Events included", "recommended_usage_window": "Recommended to use within 24 months.", + "to_order": "Order now", "buy_now": "Buy Now", "subscribe_now": "Buy Now", "register_buy": "Register and Buy", diff --git a/tests/Feature/Marketing/PackagesPageTest.php b/tests/Feature/Marketing/PackagesPageTest.php new file mode 100644 index 0000000..1f08fbe --- /dev/null +++ b/tests/Feature/Marketing/PackagesPageTest.php @@ -0,0 +1,28 @@ +count(2)->endcustomer()->create(); + Package::factory()->count(1)->reseller()->create(); + + $response = $this->get('/de/packages'); + + $response->assertOk(); + $response->assertInertia(fn (Assert $page) => $page + ->component('marketing/Packages') + ->has('endcustomerPackages', 2) + ->has('resellerPackages', 1) + ); + } +}