squeaknode/frontend/react-material-admin/src/components/Widget/Widget.js
Jonathan Zernik 4d84dcb90e
Use react material template for frontend (#98)
* Use react material design template for frontend

* Successfully make rpc request inside material design template

* Make rpc request in tables page

* Run react frontend in development mode for now

* successfully get squeaks in tables page

* Use production server in frontend dockerfile

* Update gitignore to ignore generated proto files

* Organize npm package
2020-07-20 19:43:15 -07:00

87 lines
2.2 KiB
JavaScript

import React, { useState } from "react";
import {
Paper,
IconButton,
Menu,
MenuItem,
Typography,
} from "@material-ui/core";
import { MoreVert as MoreIcon } from "@material-ui/icons";
import classnames from "classnames";
// styles
import useStyles from "./styles";
export default function Widget({
children,
title,
noBodyPadding,
bodyClass,
disableWidgetMenu,
header,
...props
}) {
var classes = useStyles();
// local
var [moreButtonRef, setMoreButtonRef] = useState(null);
var [isMoreMenuOpen, setMoreMenuOpen] = useState(false);
return (
<div className={classes.widgetWrapper}>
<Paper className={classes.paper} classes={{ root: classes.widgetRoot }}>
<div className={classes.widgetHeader}>
{header ? (
header
) : (
<React.Fragment>
<Typography variant="h5" color="textSecondary">
{title}
</Typography>
{!disableWidgetMenu && (
<IconButton
color="primary"
classes={{ root: classes.moreButton }}
aria-owns="widget-menu"
aria-haspopup="true"
onClick={() => setMoreMenuOpen(true)}
buttonRef={setMoreButtonRef}
>
<MoreIcon />
</IconButton>
)}
</React.Fragment>
)}
</div>
<div
className={classnames(classes.widgetBody, {
[classes.noPadding]: noBodyPadding,
[bodyClass]: bodyClass,
})}
>
{children}
</div>
</Paper>
<Menu
id="widget-menu"
open={isMoreMenuOpen}
anchorEl={moreButtonRef}
onClose={() => setMoreMenuOpen(false)}
disableAutoFocusItem
>
<MenuItem>
<Typography>Edit</Typography>
</MenuItem>
<MenuItem>
<Typography>Copy</Typography>
</MenuItem>
<MenuItem>
<Typography>Delete</Typography>
</MenuItem>
<MenuItem>
<Typography>Print</Typography>
</MenuItem>
</Menu>
</div>
);
}