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}) => { // TODO check code 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: "57.158.82.47", traffic: 3, price: 15, rating: 4},{ip: "57.158.82.49", traffic: 7, price: 20, rating: 5}]); return ( Available Servers {nodes.map((node, index) => ( ))} ); }