From 452d9d37f416c26eacbf042b3a1e15da8b851968 Mon Sep 17 00:00:00 2001 From: Jonathan Zernik Date: Tue, 4 Aug 2020 19:03:45 -0700 Subject: [PATCH] Add delete peer dialog (#221) * Add delete peer dialog * Got delete peer button working --- .../DeletePeerDialog/DeletePeerDialog.js | 118 ++++++++++++++++++ .../components/DeletePeerDialog/package.json | 6 + .../src/components/DeletePeerDialog/styles.js | 43 +++++++ .../src/pages/peer/Peer.js | 47 +++++++ 4 files changed, 214 insertions(+) create mode 100644 frontend/squeak-node-frontend/src/components/DeletePeerDialog/DeletePeerDialog.js create mode 100644 frontend/squeak-node-frontend/src/components/DeletePeerDialog/package.json create mode 100644 frontend/squeak-node-frontend/src/components/DeletePeerDialog/styles.js diff --git a/frontend/squeak-node-frontend/src/components/DeletePeerDialog/DeletePeerDialog.js b/frontend/squeak-node-frontend/src/components/DeletePeerDialog/DeletePeerDialog.js new file mode 100644 index 00000000..f0eac813 --- /dev/null +++ b/frontend/squeak-node-frontend/src/components/DeletePeerDialog/DeletePeerDialog.js @@ -0,0 +1,118 @@ +import React, {useState, useEffect} from 'react'; +import { + Paper, + IconButton, + Menu, + MenuItem, + Typography, + Grid, + Box, + Link, + Dialog, + DialogTitle, + DialogContent, + DialogContentText, + TextField, + DialogActions, + Button, + FormControl, + InputLabel, + Select, +} from "@material-ui/core"; +import { MoreVert as MoreIcon } from "@material-ui/icons"; +import {useHistory} from "react-router-dom"; +import classnames from "classnames"; + +// styles +import useStyles from "./styles"; + +import Widget from "../../components/Widget"; + +import { + DeletePeerRequest, +} from "../../proto/squeak_admin_pb" +import {SqueakAdminClient} from "../../proto/squeak_admin_grpc_web_pb" + +var client = new SqueakAdminClient('http://' + window.location.hostname + ':8080') + +export default function DeletePeerDialog({ + open, + handleClose, + peer, + ...props +}) { + var classes = useStyles(); + const history = useHistory(); + + const deletePeer = (peerId) => { + console.log("called deleteSqueak"); + + var deletePeerRequest = new DeletePeerRequest() + deletePeerRequest.setPeerId(peerId); + console.log(deletePeerRequest); + + client.deletePeer(deletePeerRequest, {}, (err, response) => { + if (err) { + console.log(err.message); + alert('Error deleting peer: ' + err.message); + return; + } + + console.log(response); + reloadRoute(); + }); + }; + + const reloadRoute = () => { + history.go(0); + }; + + function handleSubmit(event) { + event.preventDefault(); + console.log( 'peer:', peer); + var peerId = peer.getPeerId(); + console.log( 'peerId:', peerId); + deletePeer(peerId); + handleClose(); + } + + function MakeCancelButton() { + return ( + + ) + } + + function DeletePeerButton() { + return ( + + ) + } + + return ( + + Delete peer +
+ + Are you sure you want to delete this peer? + + + {MakeCancelButton()} + {DeletePeerButton()} + +
+
+ ) +} diff --git a/frontend/squeak-node-frontend/src/components/DeletePeerDialog/package.json b/frontend/squeak-node-frontend/src/components/DeletePeerDialog/package.json new file mode 100644 index 00000000..f3b036c3 --- /dev/null +++ b/frontend/squeak-node-frontend/src/components/DeletePeerDialog/package.json @@ -0,0 +1,6 @@ +{ + "name": "DeletePeerDialog", + "version": "0.0.0", + "private": true, + "main": "DeletePeerDialog.js" +} diff --git a/frontend/squeak-node-frontend/src/components/DeletePeerDialog/styles.js b/frontend/squeak-node-frontend/src/components/DeletePeerDialog/styles.js new file mode 100644 index 00000000..f2d64da1 --- /dev/null +++ b/frontend/squeak-node-frontend/src/components/DeletePeerDialog/styles.js @@ -0,0 +1,43 @@ +import { makeStyles } from "@material-ui/styles"; + +export default makeStyles(theme => ({ + widgetWrapper: { + display: "flex", + minHeight: "100%", + }, + widgetHeader: { + padding: theme.spacing(3), + paddingBottom: theme.spacing(1), + display: "flex", + justifyContent: "space-between", + alignItems: "center", + }, + widgetRoot: { + boxShadow: theme.customShadows.widget, + }, + widgetBody: { + paddingBottom: theme.spacing(3), + paddingRight: theme.spacing(3), + paddingLeft: theme.spacing(3), + }, + noPadding: { + padding: 0, + }, + paper: { + display: "flex", + flexDirection: "column", + flexGrow: 1, + overflow: "hidden", + }, + moreButton: { + margin: -theme.spacing(1), + padding: 0, + width: 40, + height: 40, + color: theme.palette.text.hint, + "&:hover": { + backgroundColor: theme.palette.primary.main, + color: "rgba(255, 255, 255, 0.35)", + }, + }, +})); diff --git a/frontend/squeak-node-frontend/src/pages/peer/Peer.js b/frontend/squeak-node-frontend/src/pages/peer/Peer.js index fa4ca36f..1ffd9af4 100644 --- a/frontend/squeak-node-frontend/src/pages/peer/Peer.js +++ b/frontend/squeak-node-frontend/src/pages/peer/Peer.js @@ -8,6 +8,7 @@ import { FormControlLabel, FormHelperText, Switch, + Button, } from "@material-ui/core"; // styles @@ -16,6 +17,7 @@ import useStyles from "./styles"; // components import PageTitle from "../../components/PageTitle"; import Widget from "../../components/Widget"; +import DeletePeerDialog from "../../components/DeletePeerDialog"; import { GetPeerRequest, @@ -30,6 +32,7 @@ export default function PeerPage() { var classes = useStyles(); const { id } = useParams(); const [peer, setPeer] = useState(null); + const [deleteDialogOpen, setDeleteDialogOpen] = useState(false); const getPeer = (id) => { console.log("called getPeer with peerId: " + id); @@ -37,6 +40,10 @@ export default function PeerPage() { getPeerRequest.setPeerId(id); console.log(getPeerRequest); client.getPeer(getPeerRequest, {}, (err, response) => { + if (err) { + console.log(err.message); + return; + } console.log(response); setPeer(response.getSqueakPeer()) }); @@ -68,6 +75,15 @@ export default function PeerPage() { getPeer(id) },[id]); + const handleClickOpenDeleteDialog = () => { + setDeleteDialogOpen(true); + console.log("deleteDialogOpen: " + deleteDialogOpen); + }; + + const handleCloseDeleteDialog = () => { + setDeleteDialogOpen(false); + }; + const handleSettingsDownloadingChange = (event) => { console.log("Downloading changed for peer id: " + id); console.log("Downloading changed to: " + event.target.checked); @@ -95,6 +111,7 @@ export default function PeerPage() { Peer name: {peer.getPeerName()}

{PeerSettingsForm()} + {DeletePeerButton()} ) } @@ -117,6 +134,35 @@ export default function PeerPage() { ) } + function DeletePeerButton() { + return ( + <> + +
+ +
+
+ + ) + } + + function DeletePeerDialogContent() { + return ( + <> + + + ) + } + return ( <> @@ -126,6 +172,7 @@ export default function PeerPage() { : NoPeerContent() } + {DeletePeerDialogContent()} ); }