diff --git a/web/src/AddDialog.js b/web/src/AddDialog.js
new file mode 100644
index 00000000..b8ebe611
--- /dev/null
+++ b/web/src/AddDialog.js
@@ -0,0 +1,55 @@
+import * as React from 'react';
+import Button from '@mui/material/Button';
+import TextField from '@mui/material/TextField';
+import Dialog from '@mui/material/Dialog';
+import DialogActions from '@mui/material/DialogActions';
+import DialogContent from '@mui/material/DialogContent';
+import DialogContentText from '@mui/material/DialogContentText';
+import DialogTitle from '@mui/material/DialogTitle';
+import {useState} from "react";
+import Subscription from "./Subscription";
+
+const defaultBaseUrl = "https://ntfy.sh"
+
+const AddDialog = (props) => {
+ const [topic, setTopic] = useState("");
+ const handleCancel = () => {
+ setTopic('');
+ props.onCancel();
+ }
+ const handleSubmit = () => {
+ const subscription = new Subscription(defaultBaseUrl, topic);
+ props.onSubmit(subscription);
+ setTopic('');
+ }
+ return (
+ <>
+
+ >
+ );
+};
+
+export default AddDialog;
diff --git a/web/src/App.js b/web/src/App.js
index 76f05940..dfadb1c9 100644
--- a/web/src/App.js
+++ b/web/src/App.js
@@ -4,9 +4,8 @@ import Container from '@mui/material/Container';
import Typography from '@mui/material/Typography';
import Box from '@mui/material/Box';
import Link from '@mui/material/Link';
-import Subscription from './Subscription';
import WsConnection from './WsConnection';
-import {createTheme, styled, ThemeProvider} from '@mui/material/styles';
+import {styled, ThemeProvider} from '@mui/material/styles';
import CssBaseline from '@mui/material/CssBaseline';
import MuiDrawer from '@mui/material/Drawer';
import MuiAppBar from '@mui/material/AppBar';
@@ -17,7 +16,6 @@ import Divider from '@mui/material/Divider';
import IconButton from '@mui/material/IconButton';
import Badge from '@mui/material/Badge';
import Grid from '@mui/material/Grid';
-import Paper from '@mui/material/Paper';
import MenuIcon from '@mui/icons-material/Menu';
import ChevronLeftIcon from '@mui/icons-material/ChevronLeft';
import NotificationsIcon from '@mui/icons-material/Notifications';
@@ -28,19 +26,8 @@ import SettingsIcon from "@mui/icons-material/Settings";
import AddIcon from "@mui/icons-material/Add";
import Card from "@mui/material/Card";
import {Button, CardActions, CardContent, Stack} from "@mui/material";
-
-function Copyright(props) {
- return (
-
- {'Copyright © '}
-
- Your Website
- {' '}
- {new Date().getFullYear()}
- {'.'}
-
- );
-}
+import AddDialog from "./AddDialog";
+import theme from "./theme";
const drawerWidth = 240;
@@ -88,32 +75,29 @@ const Drawer = styled(MuiDrawer, { shouldForwardProp: (prop) => prop !== 'open'
}),
);
-const mdTheme = createTheme();
const SubscriptionNav = (props) => {
const subscriptions = props.subscriptions;
return (
-
+ <>
{Object.keys(subscriptions).map(id =>
- props.handleSubscriptionClick(id)}
/>)
}
-
+ >
);
}
-const SubscriptionItem = (props) => {
+const SubscriptionNavItem = (props) => {
const subscription = props.subscription;
return (
-
-
-
-
-
+
+
+
);
}
@@ -136,68 +120,48 @@ const NotificationItem = (props) => {
{notification.time}
{notification.title &&
- title: {notification.title}
+ {notification.title}
}
- msg: {notification.message}
+ {notification.message}
-
-
-
);
}
-const defaultBaseUrl = "https://ntfy.sh"
-
-const SubscriptionAddForm = (props) => {
- const [topic, setTopic] = useState("");
- const handleSubmit = (ev) => {
- ev.preventDefault();
- props.onSubmit(new Subscription(defaultBaseUrl, topic));
- setTopic('');
- }
- return (
-
- );
-}
-
const App = () => {
- const [open, setOpen] = React.useState(true);
+ const [drawerOpen, setDrawerOpen] = useState(true);
const [subscriptions, setSubscriptions] = useState({});
const [selectedSubscription, setSelectedSubscription] = useState(null);
const [connections, setConnections] = useState({});
+ const [addDialogOpen, setAddDialogOpen] = useState(false);
const subscriptionChanged = (subscription) => {
setSubscriptions(prev => ({...prev, [subscription.id]: subscription})); // Fake-replace
};
- const addSubscription = (subscription) => {
+ const handleAddSubmit = (subscription) => {
+ setAddDialogOpen(false);
const connection = new WsConnection(subscription, subscriptionChanged);
setSubscriptions(prev => ({...prev, [subscription.id]: subscription}));
setConnections(prev => ({...prev, [connection.id]: connection}));
connection.start();
};
+ const handleAddCancel = () => {
+ setAddDialogOpen(false);
+ }
const handleSubscriptionClick = (subscriptionId) => {
console.log(`handleSubscriptionClick ${subscriptionId}`)
setSelectedSubscription(subscriptions[subscriptionId]);
};
const notifications = (selectedSubscription !== null) ? selectedSubscription.notifications : [];
const toggleDrawer = () => {
- setOpen(!open);
+ setDrawerOpen(!drawerOpen);
};
return (
-
+
-
+
{
onClick={toggleDrawer}
sx={{
marginRight: '36px',
- ...(open && { display: 'none' }),
+ ...(drawerOpen && { display: 'none' }),
}}
>
@@ -232,7 +196,7 @@ const App = () => {
-
+
{
-
+ setAddDialogOpen(true)}>
@@ -281,21 +245,17 @@ const App = () => {
>
-
-
- {/* Recent Orders */}
-
-
-
-
-
-
+
);
}
diff --git a/web/src/Title.js b/web/src/Title.js
deleted file mode 100644
index d686a1ae..00000000
--- a/web/src/Title.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import * as React from 'react';
-import PropTypes from 'prop-types';
-import Typography from '@mui/material/Typography';
-
-function Title(props) {
- return (
-
- {props.children}
-
- );
-}
-
-Title.propTypes = {
- children: PropTypes.node,
-};
-
-export default Title;
diff --git a/web/src/theme.js b/web/src/theme.js
index 4b65d130..d8565316 100644
--- a/web/src/theme.js
+++ b/web/src/theme.js
@@ -8,7 +8,7 @@ const theme = createTheme({
main: '#338574',
},
secondary: {
- main: '#338574',
+ main: '#6cead0',
},
error: {
main: red.A400,