"use client"; import { Plus, X, CheckCircle2, XCircle, Clock, Zap } from "lucide-react"; import { useCampaignStore } from "@/lib/stores/campaign-store"; import type { PostData, Platform, PostPlatformContent, PostSyncState, PostMetrics } from "@/lib/types/campaign"; import { PLATFORMS } from "@/lib/types/campaign"; interface Props { nodeId: string; data: PostData; } function SyncBadge({ state }: { state: PostSyncState }) { const icons: Record = { synced: , failed: , pending: , published: , }; return (
{icons[state.status]} {state.status} {state.error && ( {state.error} )}
); } function MetricsBadge({ metrics }: { metrics: PostMetrics }) { const parts: string[] = []; if (metrics.likes != null) parts.push(`${metrics.likes} likes`); if (metrics.comments != null) parts.push(`${metrics.comments} comments`); if (metrics.shares != null) parts.push(`${metrics.shares} shares`); if (metrics.impressions != null) parts.push(`${metrics.impressions} impr.`); if (parts.length === 0) return null; return (
{parts.join(" ยท ")} {metrics.fetchedAt && ( ({new Date(metrics.fetchedAt).toLocaleTimeString()}) )}
); } export function PostForm({ nodeId, data }: Props) { const updateNodeData = useCampaignStore((s) => s.updateNodeData); const addPlatform = (platformId: Platform) => { if (data.platforms.some((p) => p.platform === platformId)) return; const newPlatforms: PostPlatformContent[] = [ ...data.platforms, { platform: platformId, content: data.sharedContent }, ]; updateNodeData(nodeId, { platforms: newPlatforms }); }; const removePlatform = (platformId: Platform) => { updateNodeData(nodeId, { platforms: data.platforms.filter((p) => p.platform !== platformId), }); }; const updatePlatformContent = (platformId: Platform, content: string) => { updateNodeData(nodeId, { platforms: data.platforms.map((p) => p.platform === platformId ? { ...p, content } : p ), }); }; const availablePlatforms = PLATFORMS.filter( (p) => !data.platforms.some((dp) => dp.platform === p.id) ); return (