import { ChangeEvent, useEffect, useState } from "react"; import toast from "react-hot-toast"; import { useTranslation } from "react-i18next"; import { useUpdateLogoMutation, useUpdateServerMutation } from "@/app/services/server"; import { useAppSelector } from "@/app/store"; import LogoUploader from "@/components/AvatarUploader"; import SaveTip from "@/components/SaveTip"; import Input from "@/components/styled/Input"; import Label from "@/components/styled/Label"; import Textarea from "@/components/styled/Textarea"; import { shallowEqual } from "react-redux"; const Index = () => { const { t } = useTranslation("setting"); const { t: ct } = useTranslation(); const isAdmin = useAppSelector((store) => store.authData.user?.is_admin, shallowEqual); const server = useAppSelector((store) => store.server, shallowEqual); const [uploadLogo, { isSuccess: uploadSuccess }] = useUpdateLogoMutation(); const [updateServer] = useUpdateServerMutation(); const [changed, setChanged] = useState(false); const [serverValues, setServerValues] = useState(server); const handleChange = (evt: ChangeEvent) => { const newValue = evt.target.value; const { type = "" } = evt.target.dataset; setServerValues((prev) => { return { ...prev, [type]: newValue }; }); }; const handleUpdateServer = () => { const { name, description } = serverValues; updateServer({ name, description }); }; const handleReset = () => { setServerValues(server); }; useEffect(() => { if (server) { setServerValues(server); } }, [server]); useEffect(() => { if (uploadSuccess) { toast.success(ct("tip.update")); } }, [uploadSuccess]); useEffect(() => { if (server && serverValues) { const { name, description } = serverValues; const { name: oName, description: oDescription } = server; if (oName !== name || oDescription !== description) { setChanged(true); } else { setChanged(false); } } }, [server, serverValues]); const { name, description, logo } = serverValues; if (!serverValues) return null; return ( <>
{isAdmin && (
{t("overview.upload_desc")}
)}