import React, { useState, useEffect } from 'react' import { Link } from 'react-router-dom' import { FaPlus, FaSearch, FaRegEdit, FaTrashAlt, FaCheckCircle, FaTimesCircle, FaFilter, FaCalendarAlt, FaCode, FaSpinner, FaExternalLinkAlt, FaArrowDown, FaArrowUp, } from 'react-icons/fa' import { useLocalization } from '@/utils/hooks/useLocalization' import { dynamicServiceService, type DynamicServiceDto } from '@/services/dynamicService.service' import { Helmet } from 'react-helmet' import { APP_NAME } from '@/constants/app.constant' import { ROUTES_ENUM } from '@/routes/route.constant' const DynamicServiceManager: React.FC = () => { const { translate } = useLocalization() const [services, setServices] = useState([]) const [isLoading, setIsLoading] = useState(false) const [searchTerm, setSearchTerm] = useState('') const [filterStatus, setFilterStatus] = useState<'all' | 'Success' | 'Failed' | 'Pending'>('all') useEffect(() => { loadServices() }, []) const loadServices = async () => { try { setIsLoading(true) const response = await dynamicServiceService.getList() setServices(response.items || []) } catch (error) { console.error('Servisler yüklenirken hata:', error) } finally { setIsLoading(false) } } const deleteService = async (serviceId: string) => { if (!confirm(translate('::App.DeveloperKit.DynamicServices.DeleteConfirm'))) return try { await dynamicServiceService.delete(serviceId) await loadServices() } catch (error) { console.error('Servis silinirken hata:', error) alert(translate('::App.DeveloperKit.DynamicServices.DeleteError')) } } const totalServices = services.length const successServices = services.filter((s) => s.compilationStatus === 'Success').length const failedServices = services.filter((s) => s.compilationStatus === 'Failed').length const activeServices = services.filter((s) => s.isActive).length const inactiveServices = services.filter((s) => !s.isActive).length const stats = [ { name: translate('::App.DeveloperKit.DynamicServices.Total'), value: totalServices, icon: FaCode, color: 'text-purple-600', bgColor: 'bg-purple-100', }, { name: translate('::App.DeveloperKit.DynamicServices.Successful'), value: successServices, icon: FaCheckCircle, color: 'text-emerald-600', bgColor: 'bg-emerald-100', }, { name: translate('::App.DeveloperKit.DynamicServices.Failed'), value: failedServices, icon: FaTimesCircle, color: 'text-red-600', bgColor: 'bg-red-100', }, { name: translate('::App.DeveloperKit.DynamicServices.Active'), value: activeServices, icon: FaArrowUp, color: 'text-emerald-600', bgColor: 'bg-blue-300', }, { name: translate('::App.DeveloperKit.DynamicServices.Passive'), value: inactiveServices, icon: FaArrowDown, color: 'text-emerald-600', bgColor: 'bg-green-400', }, ] const filteredServices = services.filter((service) => { const matchesSearch = service.name.toLowerCase().includes(searchTerm.toLowerCase()) || (service.displayName || '').toLowerCase().includes(searchTerm.toLowerCase()) const matchesFilter = filterStatus === 'all' || service.compilationStatus === filterStatus return matchesSearch && matchesFilter }) const statusBadge = (status: string) => { if (status === 'Success') return 'bg-emerald-100 text-emerald-700' if (status === 'Failed') return 'bg-red-100 text-red-700' return 'bg-yellow-100 text-yellow-700' } const openSwagger = () => { window.open(`${import.meta.env.VITE_API_URL}/swagger/index.html`, '_blank') } return (
{/* Stats */}
{stats.map((stat, index) => (

{stat.name}

{stat.value}

))}
{/* Toolbar */}
setSearchTerm(e.target.value)} className="w-full pl-10 pr-4 py-2 border border-slate-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent" />
{translate('::App.DeveloperKit.DynamicServices.NewService')}
{/* List */} {isLoading ? (
) : filteredServices.length > 0 ? (
{filteredServices.map((service) => (

{service.name}

{service.displayName && (

{service.displayName}

)} {service.compilationStatus} · v{service.version} {service.description && (

{service.description}

)}
{service.lastSuccessfulCompilation && (
{new Date(service.lastSuccessfulCompilation).toLocaleDateString()}
)}
{/* Actions */}
))}
) : (

{searchTerm || filterStatus !== 'all' ? translate('::App.DeveloperKit.DynamicServices.NoResults') : translate('::App.DeveloperKit.DynamicServices.NoServicesYet')}

{searchTerm || filterStatus !== 'all' ? translate('::App.DeveloperKit.DynamicServices.TryChangingFilter') : translate('::App.DeveloperKit.DynamicServices.GetStarted')}

{!searchTerm && filterStatus === 'all' && ( {translate('::App.DeveloperKit.DynamicServices.CreateNewService')} )}
)}
) } export default DynamicServiceManager