import React, { useState } from 'react' import { Link } from 'react-router-dom' import { useComponents } from '../../contexts/ComponentContext' import { FaPlus, FaSearch, FaRegEdit, FaTrashAlt, FaEye, FaEyeSlash, FaFilter, FaCalendarAlt, } from 'react-icons/fa' import Widget from '@/components/common/Widget' import { ROUTES_ENUM } from '@/routes/route.constant' import { useLocalization } from '@/utils/hooks/useLocalization' import { Loading } from '../../components/shared' import { APP_NAME } from '@/constants/app.constant' import { Helmet } from 'react-helmet' const ComponentManager: React.FC = () => { const { components, loading, updateComponent, deleteComponent } = useComponents() const [searchTerm, setSearchTerm] = useState('') const [filterActive, setFilterActive] = useState<'all' | 'active' | 'inactive'>('all') // Calculate statistics const totalComponents = components?.length || 0 const activeComponents = components?.filter((c) => c.isActive).length || 0 const inactiveComponents = totalComponents - activeComponents const { translate } = useLocalization() const filteredComponents = components?.filter((component) => { const matchesSearch = component.name.toLowerCase().includes(searchTerm.toLowerCase()) || (component.description || '').toLowerCase().includes(searchTerm.toLowerCase()) const matchesFilter = filterActive === 'all' || (filterActive === 'active' && component.isActive) || (filterActive === 'inactive' && !component.isActive) return matchesSearch && matchesFilter }) const handleToggleActive = async (id: string, isActive: boolean) => { try { const component = components?.find((c) => c.id === id) if (component) { await updateComponent(id, { ...component, isActive }) } } catch (err) { console.error('Failed to toggle component status:', err) } } const handleDelete = async (id: string, name: string) => { if (window.confirm(translate('::App.DeveloperKit.Component.ConfirmDelete'))) { try { await deleteComponent(id) } catch (err) { console.error('Failed to delete component:', err) } } } return (
{(() => { try { const parsed = JSON.parse(component.dependencies ?? '[]') return Array.isArray(parsed) && parsed.length > 0 ? `${parsed.join(', ')}` : translate('::App.DeveloperKit.Component.NoDependencies') } catch { return translate('::App.DeveloperKit.Component.NoDependencies') } })()}
{component.description && ({component.description}
)}{translate('::App.DeveloperKit.Component.PropsLabel')}
{component.props}
{searchTerm || filterActive !== 'all' ? translate('::App.DeveloperKit.EmptyFilteredDescription') : translate('::App.DeveloperKit.Component.Empty.Initial.Description')}
{!searchTerm && filterActive === 'all' && (