Skip to content

Commit 1001c33

Browse files
author
Pablo Ivan Moraga Sandoval
committed
Merge branch 'auto-save'
2 parents 6a15b56 + 1c49a69 commit 1001c33

29 files changed

Lines changed: 2681 additions & 1680 deletions

config.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"version": "1.2.0",
2+
"version": "1.2.1",
33
"description": "Minecraft Docker Manager - Control panel for managing Minecraft servers via Docker",
44
"author": "ketbome",
55
"license": "MIT"

frontend/package-lock.json

Lines changed: 12 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frontend/public/images/map.webp

5.74 KB
Loading

frontend/src/app/dashboard/[server]/page.tsx

Lines changed: 8 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,11 @@ import { useServerStatus } from "@/lib/hooks/useServerStatus";
77
import { useServerConfig } from "@/lib/hooks/useServerConfig";
88
import { ServerPageHeader } from "@/components/organisms/ServerPageHeader";
99
import { ServerConfigTabs } from "@/components/organisms/ServerConfigTabs";
10-
import { Skeleton } from "@/components/ui/skeleton";
10+
import { ServerLoadingSkeleton } from "@/components/organisms/ServerLoadingSkeleton";
1111
import { motion } from "framer-motion";
1212
import Image from "next/image";
1313
import { useLanguage } from "@/lib/hooks/useLanguage";
1414

15-
1615
export 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

Comments
 (0)