Files
gridpilot.gg/apps/website/app/sponsor/settings/page.tsx
2026-01-18 13:26:35 +01:00

114 lines
3.5 KiB
TypeScript

'use client';
import { useState } from 'react';
import { SponsorSettingsTemplate } from '@/templates/SponsorSettingsTemplate';
import { logoutAction } from '@/app/actions/logoutAction';
import { ConfirmDialog } from '@/components/shared/ux/ConfirmDialog';
import { useRouter } from 'next/navigation';
import { routes } from '@/lib/routing/RouteConfig';
import { logger } from '@/lib/infrastructure/logging/logger';
// ============================================================================
// Mock Data
// ============================================================================
const MOCK_PROFILE = {
companyName: 'Acme Racing Co.',
contactName: 'John Smith',
contactEmail: 'sponsor@acme-racing.com',
contactPhone: '+1 (555) 123-4567',
website: 'https://acme-racing.com',
description: 'Premium sim racing equipment and accessories for competitive drivers. We specialize in high-performance steering wheels, pedals, and cockpit systems used by professionals worldwide.',
logoUrl: null,
industry: 'Racing Equipment',
address: {
street: '123 Racing Boulevard',
city: 'Indianapolis',
country: 'United States',
postalCode: '46222',
},
taxId: 'US12-3456789',
socialLinks: {
twitter: '@acmeracing',
linkedin: 'acme-racing-co',
instagram: '@acmeracing',
},
};
const MOCK_NOTIFICATIONS = {
emailNewSponsorships: true,
emailWeeklyReport: true,
emailRaceAlerts: false,
emailPaymentAlerts: true,
emailNewOpportunities: true,
emailContractExpiry: true,
};
const MOCK_PRIVACY = {
publicProfile: true,
showStats: false,
showActiveSponsorships: true,
allowDirectContact: true,
};
export default function SponsorSettingsPage() {
const router = useRouter();
const [profile, setProfile] = useState(MOCK_PROFILE);
const [notifications, setNotifications] = useState(MOCK_NOTIFICATIONS);
const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false);
const [isDeleting, setIsDeleting] = useState(false);
const [saving, setSaving] = useState(false);
const [saved, setSaved] = useState(false);
const handleSaveProfile = async () => {
setSaving(true);
await new Promise(resolve => setTimeout(resolve, 800));
logger.info('Profile saved', { profile });
setSaving(false);
setSaved(true);
setTimeout(() => setSaved(false), 3000);
};
const handleDeleteAccount = async () => {
setIsDeleting(true);
const result = await logoutAction();
if (result.isErr()) {
logger.error('Logout failed', new Error(result.getError()));
setIsDeleting(false);
return;
}
router.push(routes.auth.login);
};
const viewData = {
profile: MOCK_PROFILE,
notifications: MOCK_NOTIFICATIONS,
privacy: MOCK_PRIVACY,
};
return (
<>
<SponsorSettingsTemplate
viewData={viewData}
profile={profile}
setProfile={setProfile as any}
notifications={notifications}
setNotifications={setNotifications as any}
onSaveProfile={handleSaveProfile}
onDeleteAccount={() => setIsDeleteDialogOpen(true)}
saving={saving}
saved={saved}
/>
<ConfirmDialog
isOpen={isDeleteDialogOpen}
onClose={() => setIsDeleteDialogOpen(false)}
onConfirm={handleDeleteAccount}
title="Delete Sponsor Account"
description="Are you sure you want to delete your sponsor account? This action cannot be undone. All sponsorship data, contracts, and history will be permanently removed."
confirmLabel="Delete Account"
variant="danger"
isLoading={isDeleting}
/>
</>
);
}