Customize watermark labels in package comparison
This commit is contained in:
@@ -40,6 +40,22 @@ interface Package {
|
|||||||
branding_allowed?: boolean;
|
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[] =>
|
const sortPackagesByPrice = (packages: Package[]): Package[] =>
|
||||||
[...packages].sort((a, b) => Number(a.price ?? 0) - Number(b.price ?? 0));
|
[...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) {
|
const watermarkFeature = resolveWatermarkFeatureKey(pkg);
|
||||||
removeFeature('watermark');
|
['watermark', 'no_watermark', 'watermark_base', 'watermark_custom'].forEach(removeFeature);
|
||||||
addFeature('no_watermark');
|
addFeature(watermarkFeature);
|
||||||
} else {
|
|
||||||
removeFeature('no_watermark');
|
|
||||||
addFeature('watermark');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pkg.branding_allowed) {
|
if (pkg.branding_allowed) {
|
||||||
addFeature('custom_branding');
|
addFeature('custom_branding');
|
||||||
@@ -142,8 +154,7 @@ function PackageComparison({ packages, variant }: PackageComparisonProps) {
|
|||||||
{
|
{
|
||||||
key: 'watermark',
|
key: 'watermark',
|
||||||
label: t('packages.watermark_label'),
|
label: t('packages.watermark_label'),
|
||||||
value: (pkg: Package) =>
|
value: (pkg: Package) => t(`packages.feature_${resolveWatermarkFeatureKey(pkg)}`),
|
||||||
pkg.watermark_allowed === false ? t('packages.no_watermark') : t('packages.feature_watermark'),
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'branding',
|
key: 'branding',
|
||||||
|
|||||||
15
resources/js/pages/marketing/__tests__/Packages.test.ts
Normal file
15
resources/js/pages/marketing/__tests__/Packages.test.ts
Normal file
@@ -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');
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -36,6 +36,8 @@ return [
|
|||||||
'feature_live_slideshow' => 'Live-Slideshow',
|
'feature_live_slideshow' => 'Live-Slideshow',
|
||||||
'feature_analytics' => 'Analytics',
|
'feature_analytics' => 'Analytics',
|
||||||
'feature_watermark' => 'Wasserzeichen',
|
'feature_watermark' => 'Wasserzeichen',
|
||||||
|
'feature_watermark_base' => 'Unser Wasserzeichen',
|
||||||
|
'feature_watermark_custom' => 'Eigenes Wasserzeichen',
|
||||||
'feature_branding' => 'Branding',
|
'feature_branding' => 'Branding',
|
||||||
'feature_support' => 'Support',
|
'feature_support' => 'Support',
|
||||||
'feature_basic_uploads' => 'Grundlegende Uploads',
|
'feature_basic_uploads' => 'Grundlegende Uploads',
|
||||||
|
|||||||
@@ -36,6 +36,8 @@ return [
|
|||||||
'feature_live_slideshow' => 'Live Slideshow',
|
'feature_live_slideshow' => 'Live Slideshow',
|
||||||
'feature_analytics' => 'Analytics',
|
'feature_analytics' => 'Analytics',
|
||||||
'feature_watermark' => 'Watermark',
|
'feature_watermark' => 'Watermark',
|
||||||
|
'feature_watermark_base' => 'Our watermark',
|
||||||
|
'feature_watermark_custom' => 'Custom watermark',
|
||||||
'feature_branding' => 'Branding',
|
'feature_branding' => 'Branding',
|
||||||
'feature_support' => 'Support',
|
'feature_support' => 'Support',
|
||||||
'feature_basic_uploads' => 'Basic Uploads',
|
'feature_basic_uploads' => 'Basic Uploads',
|
||||||
|
|||||||
Reference in New Issue
Block a user