diff --git a/src/pages/network.tsx b/src/pages/network.tsx index ea17b59f..8040e891 100644 --- a/src/pages/network.tsx +++ b/src/pages/network.tsx @@ -1,4 +1,5 @@ import { Input, Typography } from '@mui/material'; +import { SorobanRpc } from '@stellar/stellar-sdk'; import { useState } from 'react'; import { Divider } from '../components/common/Divider'; import { OpaqueButton } from '../components/common/OpaqueButton'; @@ -8,29 +9,42 @@ import { useStore } from '../store/store'; import theme from '../theme'; export default function NetworkPage() { - const { walletAddress, getNetworkDetails, walletId } = useWallet(); + const { getNetworkDetails, walletId } = useWallet(); const { network, setNetwork } = useStore((state) => state); - const [newNetworkRPCUrl, setNewNetworkRPCUrl] = useState(); - const [newHorizonUrl, setNewHorizonUrl] = useState(''); - const [newNetworkPassphrase, setNewNetworkPassphrase] = useState(); const loadBlendData = useStore((state) => state.loadBlendData); + + const [newNetworkRPCUrl, setNewNetworkRPCUrl] = useState(''); + const [newHorizonUrl, setNewHorizonUrl] = useState(''); + const [newOpts, setNewOpts] = useState(undefined); + function fetchFromWallet() { getNetworkDetails().then((networkDetails) => { if (networkDetails.rpc) { - setNewNetworkPassphrase(networkDetails.passphrase); - setNewNetworkRPCUrl(networkDetails.rpc); + handleChangeRpcUrl(networkDetails.rpc); setNewHorizonUrl(networkDetails.horizonUrl); } }); } function handleUpdateNetworkClick() { - if (newNetworkRPCUrl && newNetworkPassphrase) { - setNetwork(newNetworkRPCUrl, newNetworkPassphrase, newHorizonUrl); + if (newNetworkRPCUrl && newHorizonUrl) { + setNetwork(newNetworkRPCUrl, newHorizonUrl, newOpts); + setNewHorizonUrl(''); + setNewNetworkRPCUrl(''); + setNewOpts(undefined); loadBlendData(true); } } + function handleChangeRpcUrl(rpcUrl: string) { + if (rpcUrl.startsWith('http://')) { + setNewOpts({ allowHttp: true }); + } else { + setNewOpts(undefined); + } + setNewNetworkRPCUrl(rpcUrl); + } + return ( <> <> @@ -49,10 +63,6 @@ export default function NetworkPage() { {network.horizonUrl} - Passphrase - - {network.passphrase} - )} @@ -72,7 +82,7 @@ export default function NetworkPage() { placeholder="Input RPC Url" type="text" value={newNetworkRPCUrl} - onChange={(e) => setNewNetworkRPCUrl(e.target.value)} + onChange={(e) => handleChangeRpcUrl(e.target.value)} /> setNewHorizonUrl(e.target.value)} /> - setNewNetworkPassphrase(e.target.value)} - /> {walletId === 'freighter' && ( SorobanRpc.Server; - setNetwork: ( - rpcUrl: string, - newPassphrase: string, - newHorizonUrl: string, - opts?: SorobanRpc.Server.Options - ) => void; - + setNetwork: (rpcUrl: string, newHorizonUrl: string, opts?: SorobanRpc.Server.Options) => void; horizonServer: () => Horizon.Server; } export const createRPCSlice: StateCreator = (set, get) => ({ network: { - rpc: process.env.NEXT_PUBLIC_RPC_URL || 'https://soroban-testnet.stellar.org', - passphrase: process.env.NEXT_PUBLIC_PASSPHRASE || 'Test SDF Network ; September 2015', + rpc: DEFAULT_RPC, + passphrase: DEFAULT_PASSPHRASE, opts: undefined, - horizonUrl: process.env.NEXT_PUBLIC_HORIZON_URL || 'https://horizon-testnet.stellar.org', + horizonUrl: DEFAULT_HORIZON, }, rpcServer: () => { let network = get().network; return new SorobanRpc.Server(network.rpc, network.opts); }, - setNetwork: (newUrl, newPassphrase, horizonUrl: string, newOpts) => - set({ network: { rpc: newUrl, passphrase: newPassphrase, opts: newOpts, horizonUrl } }), + setNetwork: (newUrl: string, newHorizonUrl: string, newOpts?: SorobanRpc.Server.Options) => + set({ + network: { + rpc: newUrl, + passphrase: DEFAULT_PASSPHRASE, + opts: newOpts, + horizonUrl: newHorizonUrl, + }, + }), horizonServer: () => { let network = get().network; return new Horizon.Server(network.horizonUrl, network.opts);