import React, { useState, useEffect } from 'react'; import { Link } from 'react-router-dom'; import { Hotel, Facebook, Twitter, Instagram, Mail, Phone, MapPin, Linkedin, Youtube, Award, Shield, Star, Trophy, Medal, BadgeCheck, CheckCircle, Heart, Crown, Gem, Zap, Target, TrendingUp, LucideIcon } from 'lucide-react'; import CookiePreferencesLink from '../common/CookiePreferencesLink'; import ChatWidget from '../chat/ChatWidget'; import { pageContentService } from '../../services/api'; import type { PageContent } from '../../services/api/pageContentService'; import { useCompanySettings } from '../../contexts/CompanySettingsContext'; const Footer: React.FC = () => { const { settings } = useCompanySettings(); const [pageContent, setPageContent] = useState(null); const [enabledPages, setEnabledPages] = useState>(new Set()); useEffect(() => { const fetchPageContent = async () => { try { const response = await pageContentService.getFooterContent(); if (response.status === 'success' && response.data?.page_content) { setPageContent(response.data.page_content); } } catch (err: any) { console.error('Error fetching footer content:', err); } }; const checkEnabledPages = async () => { const enabled = new Set(); const policyPages = [ { type: 'privacy', url: '/privacy', service: () => pageContentService.getPrivacyContent() }, { type: 'terms', url: '/terms', service: () => pageContentService.getTermsContent() }, { type: 'refunds', url: '/refunds', service: () => pageContentService.getRefundsContent() }, { type: 'cancellation', url: '/cancellation', service: () => pageContentService.getCancellationContent() }, { type: 'accessibility', url: '/accessibility', service: () => pageContentService.getAccessibilityContent() }, { type: 'faq', url: '/faq', service: () => pageContentService.getFAQContent() }, ]; await Promise.all( policyPages.map(async (page) => { try { const response = await page.service(); if (response.status === 'success' && response.data?.page_content?.is_active) { enabled.add(page.url); } } catch (err: any) { // If 404, page is disabled, don't add to enabled set if (err.response?.status !== 404) { console.error(`Error checking ${page.type} page:`, err); } } }) ); setEnabledPages(enabled); }; fetchPageContent(); checkEnabledPages(); }, []); const displayPhone = settings.company_phone || null; const displayEmail = settings.company_email || null; const displayAddress = settings.company_address || '123 ABC Street, District 1\nHo Chi Minh City, Vietnam'; const phoneNumber = displayPhone ? displayPhone.replace(/\s+/g, '').replace(/[()]/g, '') : ''; const phoneHref = displayPhone ? 'tel:' + phoneNumber : ''; const logoUrl = settings.company_logo_url ? (settings.company_logo_url.startsWith('http') ? settings.company_logo_url : `${import.meta.env.VITE_API_URL || 'http://localhost:8000'}${settings.company_logo_url}`) : null; const iconMap: Record = { Award, Star, Trophy, Medal, BadgeCheck, CheckCircle, Shield, Heart, Crown, Gem, Zap, Target, TrendingUp, }; const badges = pageContent?.badges || []; const defaultQuickLinks = [ { label: 'Home', url: '/' }, { label: 'Rooms & Suites', url: '/rooms' }, { label: 'My Bookings', url: '/bookings' }, { label: 'About Us', url: '/about' } ]; const defaultSupportLinks = [ { label: 'FAQ', url: '/faq' }, { label: 'Terms of Service', url: '/terms' }, { label: 'Privacy Policy', url: '/privacy' }, { label: 'Refunds Policy', url: '/refunds' }, { label: 'Cancellation Policy', url: '/cancellation' }, { label: 'Accessibility', url: '/accessibility' }, { label: 'Contact Us', url: '/contact' } ]; const quickLinks = pageContent?.footer_links?.quick_links && pageContent.footer_links.quick_links.length > 0 ? pageContent.footer_links.quick_links : defaultQuickLinks; const allSupportLinks = pageContent?.footer_links?.support_links && pageContent.footer_links.support_links.length > 0 ? pageContent.footer_links.support_links : defaultSupportLinks; // Filter support links to only show enabled policy pages const supportLinks = allSupportLinks.filter((link) => { // Always show Contact Us if (link.url === '/contact') return true; // Only show policy pages if they are enabled return enabledPages.has(link.url); }); return ( ); }; export default Footer;