import React, { useState } from 'react'; import { ServerContext } from '@/state/server'; import http from '@/api/http'; import { faCube } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import classNames from 'classnames'; interface VersionData { success: boolean; platform?: string; modpack_id?: string; modpack_name?: string; current_version?: string; latest_version?: string; status?: string; message?: string; error?: string; } const ModpackVersionCard: React.FC = () => { const uuid = ServerContext.useStoreState((state) => state.server.data?.uuid); const [status, setStatus] = useState<'idle' | 'loading' | 'success' | 'error'>('idle'); const [data, setData] = useState(null); const checkForUpdates = async () => { if (!uuid) return; setStatus('loading'); try { const response = await http.post(`/api/client/extensions/modpackchecker/servers/${uuid}/check`); setData(response.data); setStatus(response.data.success ? 'success' : 'error'); } catch (error: any) { if (error.response?.status === 429) { setData({ success: false, error: 'rate_limited' }); } else if (error.response?.status === 404) { setData({ success: false, error: 'not_found' }); } else { setData({ success: false, error: 'api_error' }); } setStatus('error'); } }; // Convert error codes to short display messages const getErrorMessage = (error?: string): string => { if (!error) return 'Error'; if (error.includes('detect') || error.includes('MODPACK')) return 'Not configured'; if (error === 'rate_limited') return 'Wait 60s'; if (error === 'not_found') return 'Not found'; if (error === 'api_error') return 'API error'; if (error.length > 20) return 'Check failed'; return error; }; const getBgColor = () => { if (status === 'success' && data?.status === 'update_available') return 'bg-orange-500'; if (status === 'success' && data?.success) return 'bg-cyan-500'; return 'bg-gray-700'; }; return (

Modpack Version

{status === 'idle' && Click to check} {status === 'loading' && Checking...} {status === 'success' && data?.success && {data.latest_version}} {(status === 'error' || (status === 'success' && !data?.success)) && ( {getErrorMessage(data?.error || data?.message)} )}
); }; export default ModpackVersionCard;