From 769e0936635f9998a342ace24652605c2bd23d97 Mon Sep 17 00:00:00 2001 From: Kieran Date: Sun, 18 Jun 2023 14:14:34 +0100 Subject: [PATCH] Live event page --- packages/app/src/Element/LiveChat.css | 11 ++++ packages/app/src/Element/LiveChat.tsx | 63 ++++++++++++++++++++ packages/app/src/Element/LiveEvent.tsx | 30 +++++++--- packages/app/src/Element/LiveVideoPlayer.tsx | 10 ++-- packages/app/src/Element/MediaElement.tsx | 2 +- packages/app/src/Feed/LiveChatFeed.tsx | 19 ++++++ packages/app/src/Pages/Layout.tsx | 7 ++- packages/app/src/Pages/LivePage.css | 8 +++ packages/app/src/Pages/LivePage.tsx | 29 +++++++++ packages/app/src/index.css | 2 +- packages/app/src/index.tsx | 5 ++ 11 files changed, 168 insertions(+), 18 deletions(-) create mode 100644 packages/app/src/Element/LiveChat.css create mode 100644 packages/app/src/Element/LiveChat.tsx create mode 100644 packages/app/src/Feed/LiveChatFeed.tsx create mode 100644 packages/app/src/Pages/LivePage.css create mode 100644 packages/app/src/Pages/LivePage.tsx diff --git a/packages/app/src/Element/LiveChat.css b/packages/app/src/Element/LiveChat.css new file mode 100644 index 0000000..5423adf --- /dev/null +++ b/packages/app/src/Element/LiveChat.css @@ -0,0 +1,11 @@ +.live-chat { + height: calc(100vh - 73px); + display: flex; + flex-direction: column; +} + +.live-chat > div:nth-child(1) { + flex-grow: 1; + display: flex; + flex-direction: column-reverse; +} diff --git a/packages/app/src/Element/LiveChat.tsx b/packages/app/src/Element/LiveChat.tsx new file mode 100644 index 0000000..306dc9c --- /dev/null +++ b/packages/app/src/Element/LiveChat.tsx @@ -0,0 +1,63 @@ +import "./LiveChat.css"; +import { NostrLink, TaggedRawEvent } from "@snort/system"; +import { useUserProfile } from "@snort/system-react"; +import { useState } from "react"; +import Textarea from "./Textarea"; +import { useLiveChatFeed } from "Feed/LiveChatFeed"; +import useEventPublisher from "Feed/EventPublisher"; +import { System } from "index"; +import { getDisplayName } from "Element/ProfileImage"; + +export function LiveChat({ ev, link }: { ev: TaggedRawEvent; link: NostrLink }) { + const [chat, setChat] = useState(""); + const messages = useLiveChatFeed(link); + const pub = useEventPublisher(); + + async function sendChatMessage() { + const reply = await pub?.note(chat, eb => { + return eb.tag(["a", `${link.kind}:${link.author}:${link.id}`]); + }); + if (reply) { + console.debug(reply); + System.BroadcastEvent(reply); + } + setChat(""); + } + return ( +
+
+ {[...(messages.data ?? [])] + .sort((a, b) => b.created_at - a.created_at) + .map(a => ( + + ))} +
+
+