import { Table, TableBody, TableCell, TableContainer, TableRow, Typography, IconButton, Box, makeStyles, Tooltip, Switch, } from "@material-ui/core"; import InfoBox from "renderer/components/modal/swap/InfoBox"; import { resetSettings, setElectrumRpcUrl, setMoneroNodeUrl, } from "store/features/settingsSlice"; import { useAppDispatch, useSettings } from "store/hooks"; import ValidatedTextField from "renderer/components/other/ValidatedTextField"; import RefreshIcon from "@material-ui/icons/Refresh"; import HelpIcon from '@material-ui/icons/HelpOutline'; import { ReactNode } from "react"; const PLACEHOLDER_ELECTRUM_RPC_URL = "ssl://blockstream.info:700"; const PLACEHOLDER_MONERO_NODE_URL = "http://xmr-node.cakewallet.com:18081"; const useStyles = makeStyles((theme) => ({ title: { display: "flex", alignItems: "center", gap: theme.spacing(1), } })); export default function SettingsBox() { const dispatch = useAppDispatch(); const classes = useStyles(); return ( Settings { dispatch(resetSettings()); }} > } additionalContent={
} mainContent={ Some of these settings require a restart to take effect. } icon={null} loading={false} /> ); } // URL validation function, forces the URL to be in the format of "protocol://host:port/" function isValidUrl(url: string, allowedProtocols: string[]): boolean { const urlPattern = new RegExp(`^(${allowedProtocols.join("|")})://[^\\s]+:\\d+/?$`); return urlPattern.test(url); } function ElectrumRpcUrlSetting() { const electrumRpcUrl = useSettings((s) => s.electrum_rpc_url); const dispatch = useAppDispatch(); function isValid(url: string): boolean { return isValidUrl(url, ["ssl", "tcp"]); } return ( { dispatch(setElectrumRpcUrl(value)); }} fullWidth placeholder={PLACEHOLDER_ELECTRUM_RPC_URL} allowEmpty /> ); } function SettingLabel({ label, tooltip }: { label: ReactNode, tooltip: string | null }) { return {label} } function MoneroNodeUrlSetting() { const moneroNodeUrl = useSettings((s) => s.monero_node_url); const dispatch = useAppDispatch(); function isValid(url: string): boolean { return isValidUrl(url, ["http"]); } return ( { dispatch(setMoneroNodeUrl(value)); }} fullWidth placeholder={PLACEHOLDER_MONERO_NODE_URL} allowEmpty /> ); }