const MultiSenderWidget = ({ context, NearAPI }) => { // Initialize the state State.init({ tokenContract: "", csvInput: "", isConnected: context.accountId ? true : false, // Check if user is connected }); const handleMultiSend = async () => { const rows = State.csvInput.split(";"); const transactions = rows.map((row) => { const [recipient, amount] = row.split(",").map((item) => item.trim()); return { contractId: State.tokenContract, methodName: "ft_transfer", args: { receiver_id: recipient, amount: NearAPI.utils.format.parseNearAmount(amount), }, gas: "300000000000000", // gas limit deposit: "1", // deposit, in yoctoNEAR }; }); try { for (const tx of transactions) { await context.account.functionCall(tx); } console.log("Tokens sent successfully"); } catch (error) { console.error("Error during multisend:", error); } }; const handleCSVInput = (e) => { State.update({ csvInput: e.target.value }); }; return ( <div> <h1>NEAR Social Multisender</h1> <div> <label>Token Contract:</label> <input type="text" value={State.tokenContract} onChange={(e) => State.update({ tokenContract: e.target.value })} /> </div> <div> <label>CSV Input:</label> <textarea placeholder="wallet1, amount1; wallet2, amount2; ..." value={State.csvInput} onChange={handleCSVInput} /> </div> <div> <button onClick={handleMultiSend}>Send Tokens</button> </div> <div> <h3>CSV Template:</h3> <p>wallet1, amount1; wallet2, amount2; ...</p> </div> </div> ); }; return <MultiSenderWidget />;