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 (
);
}
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;