feat : save map.json on project

This commit is contained in:
math-pixel
2026-04-23 15:40:10 +02:00
parent d0cf876372
commit 6b8ba3d58d
5 changed files with 122 additions and 11 deletions
+8
View File
@@ -11,6 +11,7 @@ interface EditorControlsProps {
onUndo: () => void;
onRedo: () => void;
onExportJson: () => void;
onSaveToServer?: () => void;
onResetCamera?: () => void;
onPlayerMode?: () => void;
isPlayerMode?: boolean;
@@ -27,6 +28,7 @@ export default function EditorControls({
onUndo,
onRedo,
onExportJson,
onSaveToServer,
onResetCamera,
onPlayerMode,
isPlayerMode,
@@ -89,6 +91,12 @@ export default function EditorControls({
💾 Export JSON
</button>
{onSaveToServer && (
<button className="save-button" onClick={onSaveToServer}>
💾 Save to Server
</button>
)}
<h3>View</h3>
{onResetCamera && (
+17
View File
@@ -236,6 +236,23 @@ code {
background: #ff8533;
}
.save-button {
width: 100%;
margin-top: 10px;
padding: 12px;
background: #22c55e;
color: white;
border: none;
border-radius: 6px;
cursor: pointer;
font-size: 14px;
font-weight: bold;
}
.save-button:hover {
background: #16a34a;
}
.reset-button {
width: 100%;
padding: 12px;
+23
View File
@@ -145,6 +145,28 @@ export function EditorPage(): React.JSX.Element {
}
}, [applySnapshot]);
const handleSaveToServer = useCallback(async () => {
if (!sceneData) return;
const json = JSON.stringify(sceneData.mapNodes, null, 2);
try {
const response = await fetch("/api/save-map", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: json,
});
if (response.ok) {
alert("Map enregistrée avec succès!");
} else {
alert("Erreur lors de l'enregistrement");
}
} catch (err) {
console.error("Error saving map:", err);
alert("Erreur lors de l'enregistrement");
}
}, [sceneData]);
const handleExportJson = useCallback(() => {
if (!sceneData) return;
const json = JSON.stringify(sceneData.mapNodes, null, 2);
@@ -406,6 +428,7 @@ export function EditorPage(): React.JSX.Element {
onUndo={handleUndo}
onRedo={handleRedo}
onExportJson={handleExportJson}
onSaveToServer={handleSaveToServer}
onResetCamera={handleResetCamera}
onPlayerMode={handlePlayerMode}
isPlayerMode={isPlayerMode}