From b6dbc7db55ac2dd6c2dc2a9dc798a055bb6d9859 Mon Sep 17 00:00:00 2001 From: Jon Staab Date: Tue, 15 Oct 2024 14:00:15 -0700 Subject: [PATCH] Add info pane for events --- src/app/components/ChannelMessage.svelte | 10 +- src/app/components/ChatMessage.svelte | 109 ++++++++++++++-------- src/app/components/ChatMessageMenu.svelte | 23 +++++ src/app/components/EventInfo.svelte | 17 ++++ src/assets/icons/Code.svg | 5 + src/lib/components/Tippy.svelte | 6 +- 6 files changed, 125 insertions(+), 45 deletions(-) create mode 100644 src/app/components/ChatMessageMenu.svelte create mode 100644 src/app/components/EventInfo.svelte create mode 100644 src/assets/icons/Code.svg diff --git a/src/app/components/ChannelMessage.svelte b/src/app/components/ChannelMessage.svelte index 3ae20934..059e6b2e 100644 --- a/src/app/components/ChannelMessage.svelte +++ b/src/app/components/ChannelMessage.svelte @@ -17,7 +17,9 @@ import {slideAndFade} from '@lib/transition' import Icon from "@lib/components/Icon.svelte" import Avatar from "@lib/components/Avatar.svelte" + import Button from "@lib/components/Button.svelte" import Content from "@app/components/Content.svelte" + import EventInfo from "@app/components/EventInfo.svelte" import ChannelThread from "@app/components/ChannelThread.svelte" import ChannelMessageEmojiButton from "@app/components/ChannelMessageEmojiButton.svelte" import {colors, tagRoom, deriveEvent, displayReaction} from "@app/state" @@ -41,6 +43,8 @@ const [colorName, colorValue] = colors[parseInt(hash(event.pubkey)) % colors.length] const ps = throttled(300, derived(publishStatusData, $m => Object.values($m[event.id] || {}))) + const showInfo = () => pushModal(EventInfo, {event}) + const findStatus = ($ps: PublishStatusData[], statuses: PublishStatus[]) => $ps.find(({status}) => statuses.includes(status)) @@ -146,8 +150,8 @@ class="join absolute -top-2 right-0 border border-solid border-neutral text-xs opacity-0 transition-all group-hover:opacity-100" on:click|stopPropagation> - + diff --git a/src/app/components/ChatMessage.svelte b/src/app/components/ChatMessage.svelte index c394df2e..c6926670 100644 --- a/src/app/components/ChatMessage.svelte +++ b/src/app/components/ChatMessage.svelte @@ -1,5 +1,6 @@
-
-
- {#if showPubkey} - - {/if} -
+ + + +
+
+
{#if showPubkey} -
- - {formatTimestampAsTime(event.created_at)} -
+ {/if} -
- - {#if isPending} - - - Sending... - - {:else if failure} - - - Failed to send! - +
+ {#if showPubkey} +
+ + {formatTimestampAsTime(event.created_at)} +
{/if} +
+ + {#if isPending} + + + Sending... + + {:else if failure} + + + Failed to send! + + {/if} +
{#if $reactions.length > 0 || $zaps.length > 0} -
+
{#each groupBy( e => e.content, uniqBy(e => e.pubkey + e.content, $reactions), ).entries() as [content, events]} {@const isOwn = events.some(e => e.pubkey === $pubkey)} {@const onClick = () => onReactionClick(content, events)} @@ -114,12 +148,5 @@ {/each}
{/if} -
diff --git a/src/app/components/ChatMessageMenu.svelte b/src/app/components/ChatMessageMenu.svelte new file mode 100644 index 00000000..c1dd01e2 --- /dev/null +++ b/src/app/components/ChatMessageMenu.svelte @@ -0,0 +1,23 @@ + + +
+ + +
diff --git a/src/app/components/EventInfo.svelte b/src/app/components/EventInfo.svelte new file mode 100644 index 00000000..7f247736 --- /dev/null +++ b/src/app/components/EventInfo.svelte @@ -0,0 +1,17 @@ + + +
+ +
Event Details
+
+ The full details of this event are shown below. +
+
+
{JSON.stringify(event, null, 2)}
+ +
diff --git a/src/assets/icons/Code.svg b/src/assets/icons/Code.svg new file mode 100644 index 00000000..56fce5f5 --- /dev/null +++ b/src/assets/icons/Code.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/lib/components/Tippy.svelte b/src/lib/components/Tippy.svelte index 2fbc0e3e..9d1c61f5 100644 --- a/src/lib/components/Tippy.svelte +++ b/src/lib/components/Tippy.svelte @@ -19,7 +19,11 @@ if (element) { const target = document.createElement("div") - popover = tippy(element, {content: target, animation: "shift-away", ...params}) + popover = tippy(element, { + content: target, + animation: "shift-away", + ...params, + }) instance = new component({target, props})