import { Label } from '@radix-ui/react-label' import { Textarea } from '@/components/ui/textarea' import { FRPCFormProps } from './frpc_form' import { useMutation } from '@tanstack/react-query' import { useEffect, useState } from 'react' import { Button } from '@/components/ui/button' import { updateFRPC } from '@/api/frp' import { useToast } from '@/components/ui/use-toast' import { RespCode } from '@/lib/pb/common' import { useTranslation } from 'react-i18next' export const FRPCEditor: React.FC = ({ clientID, serverID, client, refetchClient }) => { const { t } = useTranslation() const { toast } = useToast() const [configContent, setConfigContent] = useState('{}') const [clientComment, setClientComment] = useState('') const updateFrpc = useMutation({ mutationFn: updateFRPC }) const [editorValue, setEditorValue] = useState('') const handleSubmit = async () => { try { let res = await updateFrpc.mutateAsync({ clientId: clientID, //@ts-ignore config: Buffer.from(editorValue), serverId: serverID, comment: clientComment, }) if (res.status?.code !== RespCode.SUCCESS) { toast({ title: t('client.operation.update_failed') }) return } toast({ title: t('client.operation.update_success') }) } catch (error) { toast({ title: t('client.operation.update_failed') }) } } useEffect(() => { refetchClient().then((cliData) => { setConfigContent( JSON.stringify( JSON.parse( //@ts-ignore cliData?.data?.client?.config == undefined ? '{}' || cliData?.data?.client?.config == '' : cliData?.data?.client?.config, ), null, 2, ), ) setEditorValue( JSON.stringify( JSON.parse( cliData?.data?.client?.config == undefined || cliData?.data?.client?.config == '' ? '{}' : cliData?.data?.client?.config, ), null, 2, ), ) setClientComment(cliData?.data?.client?.comment || '') }).catch(() => { setConfigContent('{}') setEditorValue('{}') setClientComment('') }) }, [clientID, refetchClient]) return (