diff --git a/src/app/admin/page.tsx b/src/app/admin/page.tsx index d46a9fa..2dacac7 100644 --- a/src/app/admin/page.tsx +++ b/src/app/admin/page.tsx @@ -1294,6 +1294,28 @@ function BrandSection({ images, onToast }: { images: Image[]; onToast: (m: strin facebook_url: '', instagram_url: '', whatsapp_url: '', address: '', phone: '', email: '', }); + const [loading, setLoading] = useState(true); + const [saving, setSaving] = useState(false); + + useEffect(() => { + loadConfig(); + }, []); + + const loadConfig = async () => { + try { + const res = await fetch('/api/site-assets'); + if (res.ok) { + const data = await res.json(); + if (data.data) { + setConfig(prev => ({ ...prev, ...data.data })); + } + } + } catch (err) { + console.error('Failed to load config:', err); + } finally { + setLoading(false); + } + }; const handleUpload = async (key: keyof FooterConfig) => { const input = document.createElement('input'); @@ -1318,6 +1340,28 @@ function BrandSection({ images, onToast }: { images: Image[]; onToast: (m: strin input.click(); }; + const saveConfig = async () => { + setSaving(true); + try { + const res = await fetch('/api/site-assets', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ values: config }), + }); + if (res.ok) { + onToast('Configuration saved!', 'success'); + } else { + onToast('Failed to save', 'error'); + } + } catch { + onToast('Failed to save', 'error'); + } finally { + setSaving(false); + } + }; + + if (loading) return
Loading...
; + return (
@@ -1340,6 +1384,38 @@ function BrandSection({ images, onToast }: { images: Image[]; onToast: (m: strin setConfig(prev => ({ ...prev, tagline: v }))} placeholder="Your hotel tagline" />
+ + +
+
+
📍 Address
+ setConfig(prev => ({ ...prev, address: v }))} placeholder="Full address" /> +
+
+
📞 Phone
+ setConfig(prev => ({ ...prev, phone: v }))} placeholder="+593 99 999 9999" /> +
+
+
✉️ Email
+ setConfig(prev => ({ ...prev, email: v }))} placeholder="contact@lahuasca.com" /> +
+
+
📘 Facebook URL
+ setConfig(prev => ({ ...prev, facebook_url: v }))} placeholder="https://facebook.com/..." /> +
+
+
📷 Instagram URL
+ setConfig(prev => ({ ...prev, instagram_url: v }))} placeholder="https://instagram.com/..." /> +
+
+
💬 WhatsApp URL
+ setConfig(prev => ({ ...prev, whatsapp_url: v }))} placeholder="https://wa.me/..." /> +
+
+ +
+ {saving ? 'Saving...' : '💾 Save Configuration'} +
); } diff --git a/src/app/api/site-assets/route.ts b/src/app/api/site-assets/route.ts index e2d5ccb..3373820 100644 --- a/src/app/api/site-assets/route.ts +++ b/src/app/api/site-assets/route.ts @@ -2,7 +2,7 @@ import { NextRequest, NextResponse } from 'next/server'; import { requireRole } from '@/lib/auth'; import { db } from '@/lib/db'; -const PUBLIC_KEYS = ['logo','favicon','facebook_url','instagram_url','whatsapp_url','address','phone','email','wifi_password']; +const PUBLIC_KEYS = ['logo','favicon','tagline','facebook_url','instagram_url','whatsapp_url','address','phone','email','wifi_password']; export async function GET(request: NextRequest) { try { diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index 105a5cf..78172dc 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -4,6 +4,7 @@ import { useEffect, useState } from 'react'; import { FacebookIcon, InstagramIcon, WhatsAppIcon } from './icons'; interface Config { + tagline?: string; facebook_url?: string; instagram_url?: string; whatsapp_url?: string; @@ -47,7 +48,7 @@ export default function Footer() {

La Huasca

- A quiet corner of the Ecuadorian Andes. + {config.tagline || 'A quiet corner of the Ecuadorian Andes.'}