Yogesh
initial deploy
cd8bd0a
Raw
History Blame Contribute Delete
2 kB
"use client";
import { useEffect, useState } from "react";
import { Card, Toggle } from "@/shared/components";
import { useTranslations } from "next-intl";
export default function DebugModeCard() {
const [debugMode, setDebugMode] = useState(true);
const [loading, setLoading] = useState(true);
const t = useTranslations("settings");
useEffect(() => {
let mounted = true;
async function loadSettings() {
setLoading(true);
try {
const res = await fetch("/api/settings", { cache: "no-store" });
if (res.ok && mounted) {
const data = await res.json();
setDebugMode(data.debugMode === true);
}
} catch {
// Leave the current switch state in place if settings cannot be loaded.
} finally {
if (mounted) setLoading(false);
}
}
loadSettings();
return () => {
mounted = false;
};
}, []);
const updateDebugMode = async (value: boolean) => {
const previousValue = debugMode;
setDebugMode(value);
try {
const res = await fetch("/api/settings", {
method: "PATCH",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ debugMode: value }),
});
if (!res.ok) setDebugMode(previousValue);
} catch (err) {
setDebugMode(previousValue);
console.error("Failed to update debugMode:", err);
}
};
return (
<Card>
<div className="flex items-center justify-between gap-4">
<div className="flex items-center gap-3">
<div className="p-2 rounded-lg bg-primary/10 text-primary">
<span className="material-symbols-outlined text-[20px]" aria-hidden="true">
bug_report
</span>
</div>
<div>
<h3 className="text-lg font-semibold">{t("debugToggle")}</h3>
</div>
</div>
<Toggle checked={debugMode} onChange={updateDebugMode} disabled={loading} />
</div>
</Card>
);
}