"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 ?
No social links added yet.