diff --git a/frontend/src/app/api/contact-info/route.ts b/frontend/src/app/api/contact-info/route.ts new file mode 100644 index 0000000..23044d5 --- /dev/null +++ b/frontend/src/app/api/contact-info/route.ts @@ -0,0 +1,68 @@ +import { NextResponse } from 'next/server'; +import prisma from '@/lib/prisma'; + +// Cache em memória para evitar muitas consultas ao banco +let cachedContactInfo: { whatsapp: string; whatsappLink: string } | null = null; +let cacheTime = 0; +const CACHE_TTL = 60 * 1000; // 1 minuto + +export async function GET() { + try { + // Verifica se cache é válido + if (cachedContactInfo && Date.now() - cacheTime < CACHE_TTL) { + return NextResponse.json(cachedContactInfo); + } + + // Busca dados da página de contato + const pageContent = await prisma.pageContent.findUnique({ + where: { + slug_locale: { + slug: 'contato', + locale: 'pt' + } + } + }); + + if (!pageContent || !pageContent.content) { + // Retorna valores padrão + return NextResponse.json({ + whatsapp: '(35) 9882-9445', + whatsappLink: 'https://wa.me/5535988229445' + }); + } + + const content = pageContent.content as { + info?: { + items?: Array<{ + icon?: string; + link?: string; + linkText?: string; + }>; + }; + }; + + // Encontra o item de WhatsApp + const whatsappItem = content.info?.items?.find( + item => item.icon === 'ri-whatsapp-line' || item.link?.includes('wa.me') + ); + + const result = { + whatsapp: whatsappItem?.linkText || '(35) 9882-9445', + whatsappLink: whatsappItem?.link || 'https://wa.me/5535988229445' + }; + + // Atualiza cache + cachedContactInfo = result; + cacheTime = Date.now(); + + return NextResponse.json(result); + } catch (error) { + console.error('Erro ao buscar informações de contato:', error); + + // Retorna valores padrão em caso de erro + return NextResponse.json({ + whatsapp: '(35) 9882-9445', + whatsappLink: 'https://wa.me/5535988229445' + }); + } +} diff --git a/frontend/src/components/Header.tsx b/frontend/src/components/Header.tsx index 5b9b1cc..5caaf79 100644 --- a/frontend/src/components/Header.tsx +++ b/frontend/src/components/Header.tsx @@ -12,12 +12,23 @@ export default function Header() { const { theme, setTheme } = useTheme(); const { locale, setLocale, t } = useLocale(); const [mounted, setMounted] = useState(false); + const [whatsappLink, setWhatsappLink] = useState('https://wa.me/5535988229445'); // Prefixo para links baseado no locale const prefix = locale === 'pt' ? '' : `/${locale}`; useEffect(() => { setMounted(true); + + // Busca o número do WhatsApp do CMS + fetch('/api/contact-info') + .then(res => res.json()) + .then(data => { + if (data.whatsappLink) { + setWhatsappLink(data.whatsappLink); + } + }) + .catch(console.error); }, []); // Prevent scrolling when mobile menu is open @@ -86,13 +97,15 @@ export default function Header() {
- {t('nav.contactUs')} - +
@@ -186,14 +199,16 @@ export default function Header() {
- setIsMobileMenuOpen(false)} className="w-full py-4 bg-primary text-white rounded-xl font-bold text-center flex items-center justify-center gap-2 shadow-lg shadow-primary/20" > {t('nav.contactUs')} - +
{ + // Busca o número do WhatsApp do CMS + fetch('/api/contact-info') + .then(res => res.json()) + .then(data => { + if (data.whatsappLink) { + setWhatsappLink(data.whatsappLink); + } + }) + .catch(console.error); + }, []); return (