import React, { useState } from "react"; import { RqbitDesktopConfig } from "./configuration"; import { Button, Form, Modal, Tab, Tabs } from "react-bootstrap"; import { ErrorComponent } from "./rqbit-webui-src/rqbit-web"; import { invokeAPI } from "./api"; import { ErrorDetails } from "./rqbit-webui-src/api-types"; export const ConfigModal: React.FC<{ handleOk: (config: RqbitDesktopConfig) => void, initialConfig: RqbitDesktopConfig, }> = ({ handleOk, initialConfig }) => { const [config, setConfig] = useState(initialConfig); const [error, setError] = useState(null); const handleInputChange = (e: any) => { const name: string = e.target.name; const value: any = e.target.value; const [mainField, subField] = name.split('.', 2); if (subField) { setConfig((prevConfig: any) => ({ ...prevConfig, [mainField]: { ...prevConfig[mainField], [subField]: value, }, })); } else { setConfig((prevConfig) => ({ ...prevConfig, [name]: value, })); } }; const handleToggleChange = (e: any) => { const name: string = e.target.name; const [mainField, subField] = name.split('.', 2); if (subField) { setConfig((prevConfig: any) => ({ ...prevConfig, [mainField]: { ...prevConfig[mainField], [subField]: !prevConfig[mainField][subField], }, })); } else { setConfig((prevConfig: any) => ({ ...prevConfig, [name]: !prevConfig[name], })); } }; const handleOkClick = () => { setError(null); invokeAPI<{}>("config_change", { config }).then( () => handleOk(config), (e: ErrorDetails) => { setError({ text: "Error saving configuration", details: e, }); } ) }; return ( Configure Rqbit desktop Default download folder DHT config Persistence Filename TCP Listener config Min port Max Port Session persistence Persistence Filename Peer connection options Connect timeout Read/write timeout HTTP API config HTTP API Listen Address ); };