import React from "react" import * as antd from "antd" import { Translation } from "react-i18next" import PageTransition from "@components/PageTransition" import { createIconRender } from "@components/Icons" import config from "@config" import useUrlQueryActiveKey from "@hooks/useUrlQueryActiveKey" import useUserRemoteConfig from "@hooks/useUserRemoteConfig" import { composedSettingsByGroups as settings } from "@/settings" import menuGroupsDecorators from "@config/settingsMenuGroupsDecorators" import SettingTab from "./components/SettingTab" import "./index.less" const extraMenuItems = [ { key: "donate", label:
{createIconRender("Heart")} Support us
, }, { key: "logout", label:
{createIconRender("MdOutlineLogout")} Logout
, danger: true, } ] const menuEvents = { "donate": () => { if (config.fundingLink) { window.open(config.fundingLink, "_blank") } }, "logout": () => { app.eventBus.emit("app.logout_request") } } const generateMenuItems = () => { return settings.map((entry, index) => { const children = entry.groupModule.map((item) => { return { key: item.id, type: "item", label:
{createIconRender(item.icon ?? "Settings")} {item.label}
, danger: item.danger, disabled: item.disabled, } }) if (index !== settings.length - 1) { children.push({ type: "divider", }) } return { key: entry.group, type: "group", children: children, label: entry.group === "bottom" ? null : <> { menuGroupsDecorators[entry.group]?.icon && createIconRender(menuGroupsDecorators[groupKey]?.icon ?? "Settings") } { t => t(menuGroupsDecorators[entry.group]?.label ?? entry.group) } } }) } export default () => { const [config, setConfig, loading] = useUserRemoteConfig() const [activeKey, setActiveKey] = useUrlQueryActiveKey({ defaultKey: "general", queryKey: "tab" }) const onChangeTab = (event) => { if (typeof menuEvents[event.key] === "function") { return menuEvents[event.key]() } app.cores.sfx.play("settings.navigation") setActiveKey(event.key) } const menuItems = React.useMemo(() => { const items = generateMenuItems() extraMenuItems.forEach((item) => { items[settings.length - 1].children.push(item) }) return items }, []) function handleOnUpdate(key, value) { setConfig({ ...config, [key]: value }) } React.useEffect(() => { if (app.layout.tools_bar) { app.layout.tools_bar.toggleVisibility(false) } }, [activeKey]) React.useEffect(() => { return () => { if (app.layout.tools_bar) { app.layout.tools_bar.toggleVisibility(true) } } }, []) return
{ loading && } { !loading && }
}