import React, { useState, useEffect } from 'react'; import api from '../api'; import GenerativeBanner from './GenerativeBanner'; import NebulaBanner from './NebulaBanner'; import FirefliesBanner from './FirefliesBanner'; import HextechBanner from './HextechBanner'; interface Banner { id: number; name: string; slug: string; description: string; is_active: boolean; settings: any; } interface DynamicBannerProps { username: string; palette: string[]; ratingsCount: number; followersCount: number; } // Future expansion: Add more banner components here const MatrixBanner: React.FC = ({ username, settings }) => { // Placeholder for a second model return (
{Array.from({ length: 20 }).map((_, i) => (
{username.split('').map((char, j) => ( {char} ))}
))}
); }; const DynamicBanner: React.FC = (props) => { const [banner, setBanner] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { const fetchActiveBanner = async () => { try { const res = await api.get('banners/active/'); setBanner(res.data); } catch (err) { console.error('Failed to fetch active banner:', err); } finally { setLoading(false); } }; fetchActiveBanner(); }, []); if (loading) return null; // Default to GenerativeBanner if no active banner or unrecognized slug if (!banner || banner.slug === 'generative-web') { return ; } if (banner.slug === 'matrix') { return ; } if (banner.slug === 'nebula') { return ; } if (banner.slug === 'fireflies') { return ; } if (banner.slug === 'hextech') { return ; } // Fallback return ; }; export default DynamicBanner;