hooks in config/services.php/.env.example, and updated wizard steps/controllers to store session payloads, attach packages, and surface localized success/error states. - Retooled payment handling for both Stripe and PayPal, adding richer status management in CheckoutController/ PayPalController, fallback flows in the wizard’s PaymentStep.tsx, and fresh feature tests for intent creation, webhooks, and the wizard CTA. - Introduced a consent-aware Matomo analytics stack: new consent context, cookie-banner UI, useAnalytics/ useCtaExperiment hooks, and MatomoTracker component, then instrumented marketing pages (Home, Packages, Checkout) with localized copy and experiment tracking. - Polished package presentation across marketing UIs by centralizing formatting in PresentsPackages, surfacing localized description tables/placeholders, tuning badges/layouts, and syncing guest/marketing translations. - Expanded docs & reference material (docs/prp/*, TODOs, public gallery overview) and added a Playwright smoke test for the hero CTA while reconciling outstanding checklist items.
68 lines
3.2 KiB
TypeScript
68 lines
3.2 KiB
TypeScript
import React from 'react';
|
|
import { Link } from '@inertiajs/react';
|
|
import { useTranslation } from 'react-i18next';
|
|
import { useConsent } from '@/contexts/consent';
|
|
|
|
const Footer: React.FC = () => {
|
|
|
|
const { t } = useTranslation(['marketing', 'legal', 'common']);
|
|
const { openPreferences } = useConsent();
|
|
|
|
|
|
return (
|
|
<footer className="bg-white border-t border-gray-200 mt-auto">
|
|
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
|
|
<div className="grid grid-cols-1 md:grid-cols-3 gap-8">
|
|
<div>
|
|
<div className="flex items-center gap-4">
|
|
<img src="logo-transparent-md.png" alt="FotoSpiel.App Logo" className="h-12 w-auto" />
|
|
<div>
|
|
<Link href="/" className="text-2xl font-bold font-display text-pink-500">
|
|
FotoSpiel.App
|
|
</Link>
|
|
<p className="text-gray-600 font-sans-marketing mt-2">
|
|
Deine Plattform für Event-Fotos.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div>
|
|
<h3 className="font-semibold font-display text-gray-900 mb-4">Rechtliches</h3>
|
|
<ul className="space-y-2 text-sm text-gray-600 font-sans-marketing">
|
|
<li><Link href="/impressum" className="hover:text-pink-500 transition-colors">{t('legal:impressum')}</Link></li>
|
|
<li><Link href="/datenschutz" className="hover:text-pink-500 transition-colors">{t('legal:datenschutz')}</Link></li>
|
|
<li><Link href="/agb" className="hover:text-pink-500 transition-colors">{t('legal:agb')}</Link></li>
|
|
<li><Link href="/kontakt" className="hover:text-pink-500 transition-colors">{t('marketing:nav.contact')}</Link></li>
|
|
<li>
|
|
<button
|
|
type="button"
|
|
onClick={openPreferences}
|
|
className="hover:text-pink-500 transition-colors"
|
|
>
|
|
{t('common:consent.footer.manage_link')}
|
|
</button>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div>
|
|
<h3 className="font-semibold font-display text-gray-900 mb-4">Social</h3>
|
|
<ul className="space-y-2 text-sm text-gray-600 font-sans-marketing">
|
|
<li><a href="#" className="hover:text-pink-500">Instagram</a></li>
|
|
<li><a href="#" className="hover:text-pink-500">Facebook</a></li>
|
|
<li><a href="#" className="hover:text-pink-500">YouTube</a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<div className="border-t border-gray-200 mt-8 pt-8 text-center text-sm text-gray-500 font-sans-marketing">
|
|
© 2025 FotoSpiel.App - Alle Rechte vorbehalten.
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
);
|
|
};
|
|
|
|
export default Footer;
|