import { useState, useEffect } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; import api from '../../../api'; import { useAuth } from '../../../App'; import { LayoutGrid, Tag, Upload, DollarSign, Trash2, Circle, BarChart3, Key, Star, ArrowRightLeft } from 'lucide-react'; import StoreListing from './StoreListing'; import PublishUpdate from './PublishUpdate'; import Pricing from './Pricing'; import Coupons from './Coupons'; import Licenses from './Licenses'; import PluginReviewsTab from './PluginReviewsTab'; import TransferOwnership from './TransferOwnership'; import DangerZone from './DangerZone'; import PluginAnalyticsTab from './PluginAnalyticsTab'; import './ManagePlugin.css'; export type PluginData = { id: number; name: string; translated_descriptions: string; category: string; source_link: string; keywords: string; price_cents: number; type: 'free' | 'paid' | 'adwall'; screenshots: { id: number; path: string }[]; preview_path?: string; version?: string; status?: 'published' | 'draft' | 'review'; sale_active?: boolean; sale_discount_percent?: number; is_early_access?: boolean; is_preorder?: boolean; preorder_release_date?: string; youtube_video_url?: string; dev_id?: number; }; const NAV_ITEMS = [ { key: 'listing', label: 'Store Listing', icon: LayoutGrid }, { key: 'update', label: 'Publish Update', icon: Upload }, { key: 'analytics', label: 'Analytics', icon: BarChart3 }, { key: 'reviews', label: 'Reviews', icon: Star }, { key: 'pricing', label: 'Pricing', icon: DollarSign }, { key: 'licenses', label: 'Licenses', icon: Key }, { key: 'coupons', label: 'Coupons', icon: Tag }, { key: 'transfer', label: 'Transfer', icon: ArrowRightLeft }, { key: 'danger', label: 'Danger Zone', icon: Trash2 }, ]; const ManagePlugin = () => { const { id } = useParams<{ id: string }>(); const { user } = useAuth(); const navigate = useNavigate(); const [activeTab, setActiveTab] = useState('listing'); const [loading, setLoading] = useState(true); const [plugin, setPlugin] = useState(null); useEffect(() => { if (user) { fetchPlugin(); } }, [id, user]); const fetchPlugin = async () => { try { const res = await api.get(`/plugins/${id}`); const data = res.data; if (!user || (data.dev_id !== user.id && user.role !== 'admin')) { navigate('/dashboard/plugins', { replace: true }); return; } setPlugin(data); } catch { navigate('/dashboard/plugins', { replace: true }); } finally { setLoading(false); } }; const refreshPlugin = () => fetchPlugin(); if (loading) { return (
Loading plugin…
); } if (!plugin) return null; const statusColor = { published: 'var(--mp-success)', draft: 'var(--mp-muted)', review: 'var(--mp-warn)', }[plugin.status ?? 'published']; return (
{/* ── Sidebar ───────────────────────────────────────────── */} {/* ── Main Content ──────────────────────────────────────── */}
{activeTab === 'listing' && ( )} {activeTab === 'update' && ( )} {activeTab === 'analytics' && ( )} {activeTab === 'reviews' && ( )} {activeTab === 'pricing' && ( )} {activeTab === 'licenses' && ( )} {activeTab === 'coupons' && ( )} {activeTab === 'transfer' && ( )} {activeTab === 'danger' && ( )}
); }; export default ManagePlugin;