import { Show, createEffect, createResource, createSignal } from "solid-js"; import { apiClient } from "../../lib/api-client"; import { Input } from "../../components/ui/input"; import { Textarea } from "../../components/ui/textarea"; import { PaletteIcon, MailIcon, CheckCircleIcon, BellIcon, XCircleIcon, CalendarDaysIcon } from "../../components/dashboard/icons"; import { SMSSettings } from "../../components/sms-settings"; import { CalendarFeed } from "../../components/calendar-feed"; import { WidgetBuilder } from "../../components/widget-builder"; import { DashboardLayout, useDashboardData } from "./layout"; function SettingsPage() { const data = useDashboardData(); const [brandColor, setBrandColor] = createSignal(data.resolvedBootstrap()?.brand?.primaryColor ?? "#c25e3a"); const [brandSaving, setBrandSaving] = createSignal(false); const [activeEmailType, setActiveEmailType] = createSignal("confirmation"); const [emailSubject, setEmailSubject] = createSignal(""); const [emailBody, setEmailBody] = createSignal(""); const [emailSaving, setEmailSaving] = createSignal(false); const [emailTemplates, { refetch: refetchTemplates }] = createResource( () => data.token(), async (bearer) => { if (!bearer || bearer.startsWith("demo.")) return []; try { const response = await (apiClient as any).GET("/v1/tenants/email-templates", { headers: { Authorization: `Bearer ${bearer}` } }); return (response.data?.templates as any[]) ?? []; } catch { return []; } }, ); // Prefill the editor from the stored template whenever the type changes. createEffect(() => { const tpl = (emailTemplates() ?? []).find((t: any) => t.type === activeEmailType()); setEmailSubject(tpl?.subject ?? ""); setEmailBody(tpl?.bodyText ?? tpl?.bodyHtml ?? ""); }); const presetColors = [ { name: data.i18n.locale() === "cs" ? "Hnědá" : "Terracotta", color: "#c25e3a" }, { name: data.i18n.locale() === "cs" ? "Zelená" : "Sage", color: "#5a7c5a" }, { name: data.i18n.locale() === "cs" ? "Modrá" : "Ocean", color: "#3a6a8a" }, { name: data.i18n.locale() === "cs" ? "Fialová" : "Plum", color: "#6a4a7a" }, ]; const handleSaveBrand = async () => { const bearer = data.token(); if (!bearer || bearer.startsWith("demo.")) { data.setDemoNotice(data.i18n.locale() === "cs" ? "V demo režimu nelze ukládat." : "Cannot save in demo mode."); return; } setBrandSaving(true); try { await (apiClient as any).PUT("/v1/tenants/brand", { headers: { Authorization: `Bearer ${bearer}` }, body: { primaryColor: brandColor() } }); } catch { /* ignore */ } finally { setBrandSaving(false); } }; return (
{data.i18n.locale() === "cs" ? "Spravujte svůj podnik, branding a předvolby." : "Manage your business, branding and preferences."}
{data.i18n.t("dashboard.preview")}
Bookra
{data.i18n.locale() === "cs" ? "Rezervujte si termín" : "Book an appointment"}
{data.i18n.locale() === "cs" ? "Upravte e-maily posílané zákazníkům." : "Customize emails sent to customers."}