import * as React from 'react'; import ButtonGroup from '@mui/material/ButtonGroup'; import Button from '@mui/material/Button'; import Avatar from '@mui/material/Avatar'; import { Grid, Card, CardContent, CardActions, Typography, Box, Chip, Dialog, DialogTitle, DialogContent, DialogActions, TextField } from "@mui/material"; import ServerIcon from '@mui/icons-material/Dns'; import SignalCellularAltIcon from '@mui/icons-material/SignalCellularAlt'; import AttachMoneyIcon from '@mui/icons-material/AttachMoney'; import StarIcon from '@mui/icons-material/Star'; import Rating from '@mui/material/Rating'; import useAuth from '~/hooks/useAuth'; import { signMessage } from './Metamask/Connections'; import axios from 'axios'; interface Node { ip: string; traffic: number; price : number; rating : number; } function NodeItem({node}: {node: Node}) { const { auth } = useAuth(); const [ratingOpen, setRatingOpen] = React.useState(false); const [ratingValue, setRatingValue] = React.useState(null); const [submittingRating, setSubmittingRating] = React.useState(false); const connect = async ({ip}: {ip: string}) => { const res = await signMessage(auth.providerWithInfo.provider, auth.accounts[0]); try { const res_string = res?.publicKey + '\n' + res?.sign; let response = await axios.post('http://' + ip + ":8080/connect", res_string); console.log(response.data); // Log the response from the server } catch (error) { console.error('Error:', error); } } const disconnect = ({ip}: {ip: string}) => { setRatingOpen(true); } const handleCloseRating = () => { setRatingOpen(false); setRatingValue(null); }; const handleSubmitRating = async () => { if (ratingValue == null) { return; } setSubmittingRating(true); try { await axios.post('http://' + node.ip + ":8080/rate", { rating: ratingValue, }, { headers: { "Content-Type": "application/json" } }); console.log('Rating submitted'); } catch (err) { console.error('Failed to submit rating', err); } finally { setSubmittingRating(false); handleCloseRating(); } } return ( {node.ip} Traffic Load: 5 ? "warning" : "success"} variant="outlined" /> Price: 15 ? "warning" : "success"} variant="outlined" /> Rating: 3 ? "success" : "warning"} variant="outlined" /> Rate this server Your rating: setRatingValue(newValue)} /> ); } export default function FolderList() { const [nodes, setNodes] = React.useState([ { ip: "57.158.82.48", traffic: 5, price: 10, rating: 3 }, { ip: "8.210.33.199", traffic: 3, price: 15, rating: 4 }, { ip: "45.77.12.5", traffic: 7, price: 20, rating: 5 }, { ip: "203.120.45.78", traffic: 2, price: 8, rating: 2 }, { ip: "91.189.88.25", traffic: 6, price: 12, rating: 4 }, { ip: "132.148.9.201", traffic: 9, price: 18, rating: 5 }, { ip: "60.12.180.99", traffic: 4, price: 14, rating: 3 }, { ip: "199.59.243.100", traffic: 1, price: 6, rating: 1 }, { ip: "34.216.77.3", traffic: 8, price: 22, rating: 5 }, { ip: "185.199.108.153", traffic: 5, price: 11, rating: 4 }, { ip: "13.107.21.200", traffic: 7, price: 16, rating: 4 }, { ip: "216.58.214.14", traffic: 3, price: 9, rating: 2 }, { ip: "104.21.44.33", traffic: 10, price: 25, rating: 5 }, { ip: "47.90.12.201", traffic: 2, price: 7, rating: 1 }, { ip: "23.45.67.89", traffic: 6, price: 13, rating: 3 }, { ip: "192.0.2.123", traffic: 4, price: 17, rating: 4 }, ]); return ( Available Servers {nodes.map((node, index) => ( ))} ); }