import { Tab, Tabs } from '@heroui/tabs' import { useLocalStorage } from '@uidotdev/usehooks' import { useEffect } from 'react' import { useForm } from 'react-hook-form' import toast from 'react-hot-toast' import { useMediaQuery } from 'react-responsive' import key from '@/const/key' import useConfig from '@/hooks/use-config' import useMusic from '@/hooks/use-music' import OneBotConfigCard from './onebot' import WebUIConfigCard from './webui' export default function ConfigPage() { const { config, saveConfigWithoutNetwork, refreshConfig } = useConfig() const { control: onebotControl, handleSubmit: handleOnebotSubmit, formState: { isSubmitting: isOnebotSubmitting }, setValue: setOnebotValue } = useForm({ defaultValues: { musicSignUrl: '', enableLocalFile2Url: false, parseMultMsg: false } }) const { control: webuiControl, handleSubmit: handleWebuiSubmit, formState: { isSubmitting: isWebuiSubmitting }, setValue: setWebuiValue } = useForm({ defaultValues: { background: '', musicListID: '', customIcons: {} } }) const isMediumUp = useMediaQuery({ minWidth: 768 }) const [b64img, setB64img] = useLocalStorage(key.backgroundImage, '') const [customIcons, setCustomIcons] = useLocalStorage>( key.customIcons, {} ) const { setListId, listId } = useMusic() const resetOneBot = () => { setOnebotValue('musicSignUrl', config.musicSignUrl) setOnebotValue('enableLocalFile2Url', config.enableLocalFile2Url) setOnebotValue('parseMultMsg', config.parseMultMsg) } const resetWebUI = () => { setWebuiValue('musicListID', listId) setWebuiValue('customIcons', customIcons) setWebuiValue('background', b64img) } const onOneBotSubmit = handleOnebotSubmit((data) => { try { saveConfigWithoutNetwork(data) toast.success('保存成功') } catch (error) { const msg = (error as Error).message toast.error(`保存失败: ${msg}`) } }) const onWebuiSubmit = handleWebuiSubmit((data) => { try { setListId(data.musicListID) setCustomIcons(data.customIcons) setB64img(data.background) toast.success('保存成功') } catch (error) { const msg = (error as Error).message toast.error(`保存失败: ${msg}`) } }) const onRefresh = async () => { try { await refreshConfig() toast.success('刷新成功') } catch (error) { const msg = (error as Error).message toast.error(`刷新失败: ${msg}`) } } useEffect(() => { resetOneBot() resetWebUI() }, [config]) return (
) }