import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { Button, Switch, Textarea } from "@mui/joy"; import * as api from "../../helpers/api"; import toastHelper from "../Toast"; import "../../less/settings/system-section.less"; interface State { dbSize: number; allowSignUp: boolean; additionalStyle: string; additionalScript: string; } const formatBytes = (bytes: number) => { if (bytes <= 0) return "0 Bytes"; const k = 1024, dm = 2, sizes = ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"], i = Math.floor(Math.log(bytes) / Math.log(k)); return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + sizes[i]; }; const SystemSection = () => { const { t } = useTranslation(); const [state, setState] = useState({ dbSize: 0, allowSignUp: false, additionalStyle: "", additionalScript: "", }); useEffect(() => { api.getSystemStatus().then(({ data }) => { const { data: status } = data; setState({ dbSize: status.dbSize, allowSignUp: status.allowSignUp, additionalStyle: status.additionalStyle, additionalScript: status.additionalScript, }); }); }, []); const handleAllowSignUpChanged = async (value: boolean) => { setState({ ...state, allowSignUp: value, }); await api.upsertSystemSetting({ name: "allowSignUp", value: JSON.stringify(value), }); }; const handleAdditionalStyleChanged = (value: string) => { setState({ ...state, additionalStyle: value, }); }; const handleVacuumBtnClick = async () => { try { await api.vacuumDatabase(); const { data: status } = (await api.getSystemStatus()).data; setState({ dbSize: status.dbSize, allowSignUp: status.allowSignUp, additionalStyle: status.additionalStyle, additionalScript: status.additionalScript, }); } catch (error) { console.error(error); return; } toastHelper.success("Succeed to vacuum database"); }; const handleSaveAdditionalStyle = async () => { try { await api.upsertSystemSetting({ name: "additionalStyle", value: JSON.stringify(state.additionalStyle), }); } catch (error) { console.error(error); return; } toastHelper.success("Succeed to update additional style"); }; const handleAdditionalScriptChanged = (value: string) => { setState({ ...state, additionalScript: value, }); }; const handleSaveAdditionalScript = async () => { try { await api.upsertSystemSetting({ name: "additionalScript", value: JSON.stringify(state.additionalScript), }); } catch (error) { console.error(error); return; } toastHelper.success("Succeed to update additional script"); }; return (

{t("common.basic")}

{t("sidebar.setting")}

{t("setting.system-section.additional-style")}