import * as React from 'react'; 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 {useEffect, useState} from "react"; import Subscription from './Subscription'; import WsConnection from './WsConnection'; const SubscriptionList = (props) => { const subscriptions = props.subscriptions; return (
{Object.keys(subscriptions).map(id => props.handleSubscriptionClick(id)} />) }
); } const SubscriptionItem = (props) => { const subscription = props.subscription; return ( <>
{subscription.shortUrl()}
); } const NotificationList = (props) => { return (
{props.notifications.map(notification => )}
); } const NotificationItem = (props) => { const notification = props.notification; return ( <>
{notification.time}
{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 (
setTopic(ev.target.value)} placeholder="Topic name, e.g. phil_alerts" required />
); } const App = () => { const [subscriptions, setSubscriptions] = useState({}); const [selectedSubscription, setSelectedSubscription] = useState(null); const [connections, setConnections] = useState({}); const subscriptionChanged = (subscription) => { setSubscriptions(prev => ({...prev, [subscription.id]: subscription})); // Fake-replace }; const addSubscription = (subscription) => { const connection = new WsConnection(subscription, subscriptionChanged); setSubscriptions(prev => ({...prev, [subscription.id]: subscription})); setConnections(prev => ({...prev, [connection.id]: connection})); connection.start(); }; const handleSubscriptionClick = (subscriptionId) => { console.log(`handleSubscriptionClick ${subscriptionId}`) setSelectedSubscription(subscriptions[subscriptionId]); }; const notifications = (selectedSubscription !== null) ? selectedSubscription.notifications : []; return ( ntfy ); } export default App;