"use client"; import { useState } from 'react'; import { LinkedInIcon, GitHubIcon, XLogo, RedditIcon, SlackIcon, WhatsAppIcon } from '../icons'; import { Button, Input, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Label } from '../ui'; import { Trash2, User, Globe, Youtube, Instagram, Facebook, MessageCircle, Send, Music, Mail } from 'lucide-react'; export interface SocialLink { platform: string; url: string; username?: string; /** `internal` links render only on company-hub (server-enforced); default `external`. */ visibility?: 'external' | 'internal'; } export interface SocialPlatform { id: string; name: string; display_name: string; icon_name: string; url_pattern?: string; placeholder?: string; enabled: boolean; } interface SocialLinksManagerProps { links: SocialLink[]; onChange: (links: SocialLink[]) => void; platforms?: SocialPlatform[]; className?: string; } // Default platforms if none provided (empty array to encourage using dynamic data) const defaultPlatforms: SocialPlatform[] = []; // Icon mapping - dynamically loaded based on database icon_name const iconMap = { linkedin: LinkedInIcon, github: GitHubIcon, twitter: XLogo, reddit: RedditIcon, slack: SlackIcon, whatsapp: WhatsAppIcon, website: Globe, youtube: Youtube, instagram: Instagram, facebook: Facebook, discord: MessageCircle, telegram: Send, tiktok: Music, email: Mail, mail: Mail, }; export function SocialLinksManager({ links, onChange, platforms = defaultPlatforms, className = '' }: SocialLinksManagerProps) { const addLink = () => { const firstPlatform = platforms[0]?.name || 'website'; onChange([...links, { platform: firstPlatform, url: '' }]); }; const removeLink = (index: number) => { onChange(links.filter((_, i) => i !== index)); }; const updateLink = (index: number, field: keyof SocialLink, value: string) => { const updated = [...links]; updated[index] = { ...updated[index], [field]: value }; onChange(updated); }; const getIcon = (link: SocialLink, platform?: SocialPlatform) => { // Use database icon_name if available, fallback to platform name const iconKey = platform?.icon_name || link.platform; const IconComponent = iconMap[iconKey as keyof typeof iconMap]; return IconComponent ? : null; }; return (
{links.map((link, index) => { const platform = platforms.find(p => p.name === link.platform); const Icon = getIcon(link, platform); return (
{Icon}
updateLink(index, 'url', e.target.value)} onKeyDown={(e) => { if (e.key === 'Enter') { e.preventDefault() e.stopPropagation() } }} />
); })} {links.length === 0 && (

No social links added yet.

)}
); }