"use client"; import { useRouter } from "next/navigation"; import { useState, useTransition } from "react"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Select } from "@/components/ui/select"; import { Textarea } from "@/components/ui/textarea"; import { updateBusinessProfileAction, updateBusinessSettingsAction } from "../actions/business"; const TIMEZONES = ["Europe/London", "Europe/Paris", "Europe/Dublin", "America/New_York", "America/Los_Angeles"]; const CURRENCIES = ["GBP", "USD", "EUR"]; const LOCALES = ["en-GB", "en-US"]; export interface BusinessDetailsInitial { name: string; description: string; logoUrl: string; phone: string; email: string; website: string; instagramUrl: string; facebookUrl: string; timezone: string; currency: string; locale: string; addressLine1: string; addressLine2: string; city: string; region: string; postalCode: string; country: string; cancellationPolicy: string; lateArrivalPolicy: string; bookingTerms: string; privacyPolicyUrl: string; } export function BusinessDetailsForm({ initial }: { initial: BusinessDetailsInitial }) { const router = useRouter(); const [form, setForm] = useState(initial); const [error, setError] = useState(null); const [saved, setSaved] = useState(false); const [isPending, startTransition] = useTransition(); const set = (key: K, value: BusinessDetailsInitial[K]) => { setSaved(false); setForm((prev) => ({ ...prev, [key]: value })); }; const handleSave = () => { setError(null); startTransition(async () => { const profileResult = await updateBusinessProfileAction({ profile: { name: form.name, description: form.description || undefined, logoUrl: form.logoUrl || undefined, phone: form.phone || undefined, email: form.email || undefined, website: form.website || undefined, instagramUrl: form.instagramUrl || undefined, facebookUrl: form.facebookUrl || undefined, timezone: form.timezone, currency: form.currency, locale: form.locale, }, location: { addressLine1: form.addressLine1, addressLine2: form.addressLine2 || undefined, city: form.city, region: form.region || undefined, postalCode: form.postalCode, country: form.country, }, }); if (!profileResult.success) { setError(profileResult.error ?? "Couldn't save business details."); return; } const settingsResult = await updateBusinessSettingsAction({ cancellationPolicy: form.cancellationPolicy || undefined, lateArrivalPolicy: form.lateArrivalPolicy || undefined, bookingTerms: form.bookingTerms || undefined, privacyPolicyUrl: form.privacyPolicyUrl || undefined, }); if (!settingsResult.success) { setError(settingsResult.error ?? "Couldn't save business policies."); return; } setSaved(true); router.refresh(); }); }; return (

Profile

set("name", e.target.value)} /> set("logoUrl", e.target.value)} />