@@ -7,12 +7,11 @@ import { useServerStatus } from "@/lib/hooks/useServerStatus";
77import { useServerConfig } from "@/lib/hooks/useServerConfig" ;
88import { ServerPageHeader } from "@/components/organisms/ServerPageHeader" ;
99import { ServerConfigTabs } from "@/components/organisms/ServerConfigTabs" ;
10- import { Skeleton } from "@/components/ui/skeleton " ;
10+ import { ServerLoadingSkeleton } from "@/components/organisms/ServerLoadingSkeleton " ;
1111import { motion } from "framer-motion" ;
1212import Image from "next/image" ;
1313import { useLanguage } from "@/lib/hooks/useLanguage" ;
1414
15-
1615export default function ServerConfig ( ) {
1716 const router = useRouter ( ) ;
1817 const params = useParams ( ) ;
@@ -30,94 +29,19 @@ export default function ServerConfig() {
3029 } , [ router ] ) ;
3130
3231 if ( configLoading ) {
33- return (
34- < div className = "space-y-8" >
35- { /* Header skeleton */ }
36- < motion . div initial = { { opacity : 0 , y : - 20 } } animate = { { opacity : 1 , y : 0 } } transition = { { duration : 0.5 } } className = "bg-gray-900/80 backdrop-blur-md p-6 rounded-lg border border-gray-700/60 space-y-4" >
37- < div className = "flex items-center gap-3" >
38- < Skeleton className = "h-12 w-12 rounded-md bg-gray-700/50" />
39- < div className = "flex-1" >
40- < Skeleton className = "h-8 w-48 bg-gray-700/50 mb-2" />
41- < Skeleton className = "h-4 w-32 bg-gray-700/50" />
42- </ div >
43- < Skeleton className = "h-8 w-20 rounded-full bg-gray-700/50" />
44- </ div >
45- < div className = "grid grid-cols-1 md:grid-cols-3 gap-4" >
46- < Skeleton className = "h-20 w-full rounded-lg bg-gray-700/50" />
47- < Skeleton className = "h-20 w-full rounded-lg bg-gray-700/50" />
48- < Skeleton className = "h-20 w-full rounded-lg bg-gray-700/50" />
49- </ div >
50- </ motion . div >
51-
52- { /* Tabs skeleton */ }
53- < motion . div initial = { { opacity : 0 , y : 20 } } animate = { { opacity : 1 , y : 0 } } transition = { { duration : 0.5 , delay : 0.2 } } className = "bg-gray-900/80 backdrop-blur-md rounded-lg border border-gray-700/60 overflow-hidden" >
54- < div className = "flex gap-1 border-b border-gray-700/60 px-6 pt-6" >
55- { [ ...Array ( 5 ) ] . map ( ( _ , i ) => (
56- < Skeleton key = { i } className = "h-10 w-24 rounded-t-md bg-gray-700/50" />
57- ) ) }
58- </ div >
59-
60- < div className = "flex flex-col items-center justify-center py-20 px-6 space-y-6" >
61- < div className = "relative h-20 w-20" >
62- < motion . div
63- animate = { {
64- rotate : 360 ,
65- scale : [ 1 , 1.1 , 1 ] ,
66- } }
67- transition = { {
68- rotate : { duration : 2 , repeat : Infinity , ease : "linear" } ,
69- scale : { duration : 1.5 , repeat : Infinity , ease : "easeInOut" } ,
70- } }
71- >
72- < Image src = "/images/loading-cube.webp" alt = "Loading" width = { 80 } height = { 80 } className = "object-contain drop-shadow-lg" />
73- </ motion . div >
74- </ div >
75-
76- < div className = "text-center space-y-3" >
77- < h3 className = "text-xl font-medium text-white font-minecraft" > Cargando configuración del servidor</ h3 >
78- < p className = "text-gray-400" > Preparando los bloques... Esto puede tomar unos segundos</ p >
79- </ div >
80-
81- < div className = "w-80 h-3 bg-gray-800/60 rounded-full overflow-hidden border border-gray-700/40" >
82- < motion . div
83- className = "h-full bg-gradient-to-r from-emerald-500 to-blue-500"
84- initial = { { width : "0%" } }
85- animate = { { width : "100%" } }
86- transition = { {
87- duration : 2.5 ,
88- repeat : Infinity ,
89- ease : "easeInOut" ,
90- } }
91- />
92- </ div >
93-
94- < div className = "flex gap-4 opacity-60" >
95- < motion . div animate = { { y : [ - 3 , 3 , - 3 ] } } transition = { { repeat : Infinity , duration : 2 , ease : "easeInOut" } } >
96- < Image src = "/images/redstone.webp" alt = "Redstone" width = { 24 } height = { 24 } />
97- </ motion . div >
98- < motion . div animate = { { y : [ - 3 , 3 , - 3 ] } } transition = { { repeat : Infinity , duration : 2 , delay : 0.3 , ease : "easeInOut" } } >
99- < Image src = "/images/gold.webp" alt = "Gold" width = { 24 } height = { 24 } />
100- </ motion . div >
101- < motion . div animate = { { y : [ - 3 , 3 , - 3 ] } } transition = { { repeat : Infinity , duration : 2 , delay : 0.6 , ease : "easeInOut" } } >
102- < Image src = "/images/emerald.webp" alt = "Emerald" width = { 24 } height = { 24 } />
103- </ motion . div >
104- </ div >
105- </ div >
106- </ motion . div >
107- </ div >
108- ) ;
32+ return < ServerLoadingSkeleton /> ;
10933 }
11034
11135 return (
11236 < div className = "space-y-8" >
11337 { /* Server Header */ }
11438 < motion . div initial = { { opacity : 0 , y : - 20 } } animate = { { opacity : 1 , y : 0 } } transition = { { duration : 0.5 } } >
115- < ServerPageHeader serverId = { serverId } serverName = { config . serverName } serverStatus = { status } isProcessing = { isProcessingAction } onStartServer = { startServer } onStopServer = { stopServer } onRestartServer = { restartServer } />
39+ < ServerPageHeader serverId = { serverId } serverName = { config . serverName } serverStatus = { status } isProcessing = { isProcessingAction } onStartServer = { startServer } onStopServer = { stopServer } onRestartServer = { restartServer } onClearData = { clearServerData } />
11640 </ motion . div >
11741
11842 { /* Server Configuration Tabs */ }
11943 < motion . div initial = { { opacity : 0 , y : 20 } } animate = { { opacity : 1 , y : 0 } } transition = { { duration : 0.5 , delay : 0.2 } } >
120- < ServerConfigTabs serverId = { serverId } config = { config } updateConfig = { updateConfig } saveConfig = { saveConfig } serverStatus = { status } onClearData = { clearServerData } />
44+ < ServerConfigTabs serverId = { serverId } config = { config } updateConfig = { updateConfig } saveConfig = { saveConfig } serverStatus = { status } />
12145 </ motion . div >
12246
12347 { /* Decorative Elements */ }
@@ -140,22 +64,22 @@ export default function ServerConfig() {
14064 < motion . div initial = { { opacity : 0 , y : 20 } } animate = { { opacity : 1 , y : 0 } } transition = { { duration : 0.5 , delay : 0.8 } } className = "bg-gray-900/60 backdrop-blur-md rounded-lg border border-gray-700/40 p-6" >
14165 < div className = "flex items-center gap-3 mb-4" >
14266 < Image src = "/images/command-block.webp" alt = "Command Block" width = { 24 } height = { 24 } />
143- < h3 className = "text-lg font-minecraft text-white" > { t ( "serverInformation" ) } </ h3 >
67+ < h3 className = "text-lg font-minecraft text-white" > { t ( "serverInformation" ) } </ h3 >
14468 </ div >
14569 < div className = "grid grid-cols-1 md:grid-cols-3 gap-4 text-sm" >
14670 < div className = "bg-gray-800/40 rounded-lg p-3 border border-gray-700/30" >
147- < p className = "text-gray-400 mb-1" > { t ( "serverId" ) } </ p >
71+ < p className = "text-gray-400 mb-1" > { t ( "serverId" ) } </ p >
14872 < p className = "text-white font-medium font-minecraft" > { serverId } </ p >
14973 </ div >
15074 < div className = "bg-gray-800/40 rounded-lg p-3 border border-gray-700/30" >
151- < p className = "text-gray-400 mb-1" > { t ( "currentStatus" ) } </ p >
75+ < p className = "text-gray-400 mb-1" > { t ( "currentStatus" ) } </ p >
15276 < div className = "flex items-center gap-2" >
15377 < div className = { `w-2 h-2 rounded-full ${ status === "running" ? "bg-emerald-500" : status === "stopped" ? "bg-yellow-500" : status === "starting" ? "bg-orange-500" : "bg-red-500" } ` } />
15478 < p className = "text-white font-medium capitalize" > { status } </ p >
15579 </ div >
15680 </ div >
15781 < div className = "bg-gray-800/40 rounded-lg p-3 border border-gray-700/30" >
158- < p className = "text-gray-400 mb-1" > { t ( ' port' ) } </ p >
82+ < p className = "text-gray-400 mb-1" > { t ( " port" ) } </ p >
15983 < p className = "text-white font-medium" > { config . port || "25565" } </ p >
16084 </ div >
16185 </ div >
0 commit comments