From 5d0ae0faa5e9a5a24c0009a02955ea77594bb7b4 Mon Sep 17 00:00:00 2001 From: Codex Agent Date: Thu, 15 Jan 2026 09:54:47 +0100 Subject: [PATCH] Customize watermark labels in package comparison --- resources/js/pages/marketing/Packages.tsx | 29 +++++++++++++------ .../marketing/__tests__/Packages.test.ts | 15 ++++++++++ resources/lang/de/marketing.php | 2 ++ resources/lang/en/marketing.php | 2 ++ 4 files changed, 39 insertions(+), 9 deletions(-) create mode 100644 resources/js/pages/marketing/__tests__/Packages.test.ts diff --git a/resources/js/pages/marketing/Packages.tsx b/resources/js/pages/marketing/Packages.tsx index 75989df..ca52bd8 100644 --- a/resources/js/pages/marketing/Packages.tsx +++ b/resources/js/pages/marketing/Packages.tsx @@ -40,6 +40,22 @@ interface Package { branding_allowed?: boolean; } +export const resolveWatermarkFeatureKey = (pkg: Package): string => { + if (pkg.slug === 'starter') { + return 'watermark_base'; + } + + if (pkg.slug === 'standard') { + return 'no_watermark'; + } + + if (pkg.slug === 'pro') { + return 'watermark_custom'; + } + + return pkg.watermark_allowed === false ? 'no_watermark' : 'watermark'; +}; + const sortPackagesByPrice = (packages: Package[]): Package[] => [...packages].sort((a, b) => Number(a.price ?? 0) - Number(b.price ?? 0)); @@ -64,13 +80,9 @@ const buildDisplayFeatures = (pkg: Package): string[] => { } }; - if (pkg.watermark_allowed === false) { - removeFeature('watermark'); - addFeature('no_watermark'); - } else { - removeFeature('no_watermark'); - addFeature('watermark'); - } + const watermarkFeature = resolveWatermarkFeatureKey(pkg); + ['watermark', 'no_watermark', 'watermark_base', 'watermark_custom'].forEach(removeFeature); + addFeature(watermarkFeature); if (pkg.branding_allowed) { addFeature('custom_branding'); @@ -142,8 +154,7 @@ function PackageComparison({ packages, variant }: PackageComparisonProps) { { key: 'watermark', label: t('packages.watermark_label'), - value: (pkg: Package) => - pkg.watermark_allowed === false ? t('packages.no_watermark') : t('packages.feature_watermark'), + value: (pkg: Package) => t(`packages.feature_${resolveWatermarkFeatureKey(pkg)}`), }, { key: 'branding', diff --git a/resources/js/pages/marketing/__tests__/Packages.test.ts b/resources/js/pages/marketing/__tests__/Packages.test.ts new file mode 100644 index 0000000..fc431fa --- /dev/null +++ b/resources/js/pages/marketing/__tests__/Packages.test.ts @@ -0,0 +1,15 @@ +import { describe, expect, it } from 'vitest'; +import { resolveWatermarkFeatureKey } from '../Packages'; + +describe('resolveWatermarkFeatureKey', () => { + it('returns package-specific labels for endcustomer tiers', () => { + expect(resolveWatermarkFeatureKey({ slug: 'starter' } as any)).toBe('watermark_base'); + expect(resolveWatermarkFeatureKey({ slug: 'standard' } as any)).toBe('no_watermark'); + expect(resolveWatermarkFeatureKey({ slug: 'pro' } as any)).toBe('watermark_custom'); + }); + + it('falls back to watermark_allowed when slug is unknown', () => { + expect(resolveWatermarkFeatureKey({ slug: 'reseller', watermark_allowed: true } as any)).toBe('watermark'); + expect(resolveWatermarkFeatureKey({ slug: 'reseller', watermark_allowed: false } as any)).toBe('no_watermark'); + }); +}); diff --git a/resources/lang/de/marketing.php b/resources/lang/de/marketing.php index d6c27f7..5bb8018 100644 --- a/resources/lang/de/marketing.php +++ b/resources/lang/de/marketing.php @@ -36,6 +36,8 @@ return [ 'feature_live_slideshow' => 'Live-Slideshow', 'feature_analytics' => 'Analytics', 'feature_watermark' => 'Wasserzeichen', + 'feature_watermark_base' => 'Unser Wasserzeichen', + 'feature_watermark_custom' => 'Eigenes Wasserzeichen', 'feature_branding' => 'Branding', 'feature_support' => 'Support', 'feature_basic_uploads' => 'Grundlegende Uploads', diff --git a/resources/lang/en/marketing.php b/resources/lang/en/marketing.php index 24a3ff5..4f25ae0 100644 --- a/resources/lang/en/marketing.php +++ b/resources/lang/en/marketing.php @@ -36,6 +36,8 @@ return [ 'feature_live_slideshow' => 'Live Slideshow', 'feature_analytics' => 'Analytics', 'feature_watermark' => 'Watermark', + 'feature_watermark_base' => 'Our watermark', + 'feature_watermark_custom' => 'Custom watermark', 'feature_branding' => 'Branding', 'feature_support' => 'Support', 'feature_basic_uploads' => 'Basic Uploads',