diff --git a/src/pages/Servers.tsx b/src/pages/Servers.tsx index 59b8adf..dba9de2 100644 --- a/src/pages/Servers.tsx +++ b/src/pages/Servers.tsx @@ -32,6 +32,37 @@ interface ServerData extends ServerInfo { error?: string } +// Loading Skeleton Component +const LoadingSkeleton = ({ width = '60px', height = '40px', className = '', style = {} }: { width?: string, height?: string, className?: string, style?: React.CSSProperties }) => ( +
+
+
+) + function Servers() { const { t } = useTranslation() @@ -49,6 +80,7 @@ function Servers() { ] const [servers, setServers] = useState([]) + const [loading, setLoading] = useState(true) const [selectedCategory, setSelectedCategory] = useState('All') // Fetch A2S data for all servers @@ -84,6 +116,7 @@ function Servers() { const results = await Promise.all(serverPromises) setServers(results) + setLoading(false) } fetchServerData() @@ -174,7 +207,69 @@ function Servers() { gridTemplateColumns: 'repeat(auto-fit, minmax(350px, 1fr))', gap: '2rem' }}> - {filteredServers.map((server) => ( + {loading ? ( + // Show loading skeletons + serverList.map((_, index) => ( +
+ {/* Status Indicator Skeleton */} +
+ + {/* Server Header Skeleton */} +
+ +
+ + +
+
+ + {/* Server Stats Skeleton */} +
+
+ + +
+
+ + +
+
+ + {/* Server Details Skeleton */} +
+ +
+ + {/* Join Button Skeleton */} + +
+ )) + ) : ( + filteredServers.map((server) => (
- ))} + )) + )}