import { useContext, useEffect, useState } from "react"; import { useNavigate } from "react-router-dom"; import { unwrap } from "@snort/shared"; import { FormattedMessage } from "react-intl"; import { SnortContext } from "@snort/system-react"; import { Icon } from "./icon"; import { useStreamProvider } from "@/hooks/stream-provider"; import { NostrStreamProvider, StreamProvider, StreamProviders } from "@/providers"; import { StreamEditor, StreamEditorProps } from "./stream-editor"; import { eventLink } from "@/utils"; import { NostrProviderDialog } from "./nostr-provider-dialog"; import { DefaultButton } from "./buttons"; import Pill from "./pill"; import Modal from "./modal"; function NewStream({ ev, onFinish }: Omit & { onFinish: () => void }) { const system = useContext(SnortContext); const providers = useStreamProvider(); const [currentProvider, setCurrentProvider] = useState(); const navigate = useNavigate(); useEffect(() => { if (!currentProvider) { setCurrentProvider( ev !== undefined ? unwrap(providers.find(a => a.name.toLowerCase() === "manual")) : providers.at(0) ); } }, [providers, currentProvider]); function providerDialog() { if (!currentProvider) return; switch (currentProvider.type) { case StreamProviders.Manual: { return ( { currentProvider.updateStreamInfo(system, ex); if (!ev) { navigate(`/${eventLink(ex)}`, { state: ex, }); onFinish?.(); } else { onFinish?.(); } }} ev={ev} /> ); } case StreamProviders.NostrType: { return ( <> { navigate("/settings/stream"); onFinish?.(); }}> ); } case StreamProviders.Owncast: { return; } } } return ( <>

{providers.map(v => ( setCurrentProvider(v)}> {v.name} ))}
{providerDialog()}
); } interface NewStreamDialogProps { text?: string; btnClassName?: string; } export function NewStreamDialog(props: NewStreamDialogProps & StreamEditorProps) { const [open, setOpen] = useState(false); return ( <> setOpen(true)}> {props.text && props.text} {!props.text && ( <> )} {open && ( setOpen(false)}>
setOpen(false)} />
)} ); }