import { Box, Container, FormHelperText, InputAdornment, styled } from "@mui/material"; import { useQueryState } from "nuqs"; import { useMemo } from "react"; import { useTranslation } from "react-i18next"; import { CSSTransition, SwitchTransition } from "react-transition-group"; import { QueueType } from "../../../api/dashboard.ts"; import ResponsiveTabs, { Tab } from "../../Common/ResponsiveTabs.tsx"; import Bot from "../../Icons/Bot.tsx"; import Color from "../../Icons/Color.tsx"; import CubeSync from "../../Icons/CubeSync.tsx"; import Currency from "../../Icons/Currency.tsx"; import FilmstripImage from "../../Icons/FilmstripImage.tsx"; import Globe from "../../Icons/Globe.tsx"; import MailOutlined from "../../Icons/MailOutlined.tsx"; import PersonPasskey from "../../Icons/PersonPasskey.tsx"; import SendLogging from "../../Icons/SendLogging.tsx"; import Server from "../../Icons/Server.tsx"; import PageContainer from "../../Pages/PageContainer.tsx"; import PageHeader, { PageTabQuery } from "../../Pages/PageHeader.tsx"; import Appearance from "./Appearance/Appearance.tsx"; import Captcha from "./Captcha/Captcha.tsx"; import Email from "./Email/Email.tsx"; import Events from "./Event/Events.tsx"; import Media from "./Media/Media.tsx"; import Queue from "./Queue/Queue.tsx"; import ServerSetting from "./Server/ServerSetting.tsx"; import SettingsWrapper from "./SettingWrapper.tsx"; import SiteInformation from "./SiteInformation/SiteInformation.tsx"; import UserSession from "./UserSession/UserSession.tsx"; import VAS from "./VAS/VAS.tsx"; export const StyledInputAdornment = styled(InputAdornment)(({ theme }) => ({ fontSize: theme.typography.body2.fontSize, })); export const SettingSection = styled(Box)(({ theme }) => ({ display: "flex", flexDirection: "column", gap: theme.spacing(1), [theme.breakpoints.up("md")]: { padding: theme.spacing(0, 4), }, })); export const SettingSectionContent = styled(Box)(({ theme }) => ({ [theme.breakpoints.up("md")]: { padding: theme.spacing(0, 4), }, display: "flex", flexDirection: "column", gap: theme.spacing(3), })); export const NoMarginHelperText = styled(FormHelperText)(() => ({ marginLeft: 0, marginRight: 0, })); const allQueueSettings = Object.values(QueueType) .map((queue) => [ `queue_${queue}_worker_num`, `queue_${queue}_max_execution`, `queue_${queue}_backoff_factor`, `queue_${queue}_backoff_max_duration`, `queue_${queue}_max_retry`, `queue_${queue}_retry_delay`, ]) .flat(); export enum SettingsPageTab { SiteInformation = "siteInformation", UserSession = "userSession", Captcha = "captcha", FileSystem = "fileSystem", MediaProcessing = "mediaProcessing", VAS = "vas", Email = "email", Queue = "queue", Appearance = "appearance", Events = "events", Server = "server", } const Settings = () => { const { t } = useTranslation("dashboard"); const [tab, setTab] = useQueryState(PageTabQuery); const tabs: Tab[] = useMemo(() => { const res = []; res.push( ...[ { label: t("nav.basicSetting"), value: SettingsPageTab.SiteInformation, icon: , }, { label: t("nav.userSession"), value: SettingsPageTab.UserSession, icon: , }, { label: t("nav.captcha"), value: SettingsPageTab.Captcha, icon: , }, { label: t("nav.mediaProcessing"), value: SettingsPageTab.MediaProcessing, icon: , }, { label: t("vas.vas"), value: SettingsPageTab.VAS, icon: , }, { label: t("nav.email"), value: SettingsPageTab.Email, icon: , }, { label: t("nav.queue"), value: SettingsPageTab.Queue, icon: , }, { label: t("nav.appearance"), value: SettingsPageTab.Appearance, icon: , }, { label: t("nav.events"), value: SettingsPageTab.Events, icon: , }, { label: t("nav.server"), value: SettingsPageTab.Server, icon: , }, ], ); return res; }, [t]); return ( setTab(newValue)} tabs={tabs} /> node.addEventListener("transitionend", done, false)} classNames="fade" key={`${tab}`} > {(!tab || tab === SettingsPageTab.SiteInformation) && ( )} {tab === SettingsPageTab.UserSession && ( )} {tab === SettingsPageTab.Captcha && ( )} {tab === SettingsPageTab.MediaProcessing && ( )} {tab === SettingsPageTab.VAS && ( )} {tab === SettingsPageTab.Email && ( )} {tab === SettingsPageTab.Queue && ( )} {tab === SettingsPageTab.Appearance && ( )} {tab === SettingsPageTab.Events && ( )} {tab === SettingsPageTab.Server && ( )} ); }; export default Settings;