import React, { useEffect, useState } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { Code, Briefcase, Shield, Cloud, Globe, ExternalLink, Layers } from 'lucide-react'; import { PageHeader } from '../components/ui/PageHeader'; import { PageLayout } from '../components/layout/PageLayout'; import { getEcosystemOfferings } from '../services/ecosystem-api'; import type { EcosystemOffering } from '../services/ecosystem-api'; import { BrandLogo } from './admin/EcosystemManagerPage'; const iconMap: Record = { Code, Briefcase, Shield, Cloud, Globe }; export const EcosystemPage: React.FC = () => { const [offerings, setOfferings] = useState([]); const [loading, setLoading] = useState(true); const [filter, setFilter] = useState<'ALL' | 'PRODUCT' | 'SERVICE'>('ALL'); useEffect(() => { const fetchData = async () => { try { const data = await getEcosystemOfferings(); setOfferings(data); } catch (err) { console.error('Failed to load ecosystem data:', err); } finally { setLoading(false); } }; fetchData(); }, []); const filteredOfferings = offerings.filter(o => { if (filter === 'ALL') return true; return o.type === filter; }); const headerNode = ( ); return (
{/* Segmented controls filter */}
{(['ALL', 'PRODUCT', 'SERVICE'] as const).map((type) => { const labels: Record = { ALL: 'All Solutions', PRODUCT: 'Products', SERVICE: 'Services' }; return ( ); })}
{filteredOfferings.length} Solutions Available
{loading ? (
) : ( {filteredOfferings.map((offering) => { const IconComponent = iconMap[offering.logoIcon] || Globe; const isProduct = offering.type === 'PRODUCT'; return (
{/* Logo and Badges */}
{offering.logoUrl ? ( ) : (
)}
{offering.type}
{/* Info Copy */}

{offering.name}

{offering.tagline}

{offering.description}

{/* Key Benefits */} {offering.benefits && offering.benefits.length > 0 && (
Key Benefits
    {offering.benefits.map((benefit, bIdx) => (
  • {benefit}
  • ))}
)} {/* Optional Media (GIF, Video, Image) */} {offering.mediaUrl && offering.mediaType && offering.mediaType !== 'NONE' && (
{offering.mediaType === 'VIDEO' ? ( offering.mediaUrl.includes('youtube.com') || offering.mediaUrl.includes('youtube-nocookie.com') || offering.mediaUrl.includes('vimeo.com') ? (