diff --git a/src/app/components/ChannelMessage.svelte b/src/app/components/ChannelMessage.svelte index add15b0c..b89379b7 100644 --- a/src/app/components/ChannelMessage.svelte +++ b/src/app/components/ChannelMessage.svelte @@ -4,6 +4,7 @@ import type {TrustedEvent} from "@welshman/util" import {deriveProfile, deriveProfileDisplay, formatTimestampAsTime, pubkey} from "@welshman/app" import type {Thunk} from "@welshman/app" + import {isMobile} from "@lib/html" import {slideAndFade, conditionalTransition} from "@lib/transition" import Delay from "@lib/components/Delay.svelte" import Avatar from "@lib/components/Avatar.svelte" @@ -15,9 +16,10 @@ import ChannelThread from "@app/components/ChannelThread.svelte" import ChannelMessageEmojiButton from "@app/components/ChannelMessageEmojiButton.svelte" import ChannelMessageMenuButton from "@app/components/ChannelMessageMenuButton.svelte" + import ChannelMessageMenuMobile from "@app/components/ChannelMessageMenuMobile.svelte" import {colors, tagRoom, deriveEvent, pubkeyLink} from "@app/state" import {publishDelete, publishReaction} from "@app/commands" - import {pushDrawer} from "@app/modal" + import {pushDrawer, pushModal} from "@app/modal" export let url, room export let event: TrustedEvent @@ -35,10 +37,14 @@ const transition = conditionalTransition(thunk, slideAndFade) - const openThread = () => { - const root = $rootEvent || event + const onClick = () => { + if (isMobile) { + pushModal(ChannelMessageMenuMobile, {url, event}) + } else { + const root = $rootEvent || event - pushDrawer(ChannelThread, {url, room, event: root}) + pushDrawer(ChannelThread, {url, room, event: root}) + } } const onReactionClick = (content: string, events: TrustedEvent[]) => { @@ -60,7 +66,7 @@ + + + {#if event.pubkey === $pubkey} + + {/if} + diff --git a/src/app/components/ChatMessageEmojiButton.svelte b/src/app/components/ChatMessageEmojiButton.svelte index af34d098..7db1743d 100644 --- a/src/app/components/ChatMessageEmojiButton.svelte +++ b/src/app/components/ChatMessageEmojiButton.svelte @@ -1,6 +1,7 @@ - + + + diff --git a/src/app/components/ConfirmDelete.svelte b/src/app/components/ConfirmDelete.svelte new file mode 100644 index 00000000..032b8a4b --- /dev/null +++ b/src/app/components/ConfirmDelete.svelte @@ -0,0 +1,19 @@ + + + diff --git a/src/app/components/ContentQuote.svelte b/src/app/components/ContentQuote.svelte index b76186ba..cd1e015f 100644 --- a/src/app/components/ContentQuote.svelte +++ b/src/app/components/ContentQuote.svelte @@ -2,11 +2,11 @@ import {nip19} from "nostr-tools" import {nthEq} from "@welshman/lib" import {Address} from "@welshman/util" - import {trackerStore} from "@welshman/app" + import type {TrustedEvent} from "@welshman/util" import Link from "@lib/components/Link.svelte" import Spinner from "@lib/components/Spinner.svelte" import NoteCard from "@app/components/NoteCard.svelte" - import {deriveEvent, entityLink, userMembership, getMembershipUrls, COMMENT} from "@app/state" + import {deriveEvent, entityLink, MESSAGE, THREAD} from "@app/state" import {makeThreadPath} from "@app/routes" export let value @@ -18,13 +18,26 @@ const event = deriveEvent(idOrAddress, relays) const entity = id ? nip19.neventEncode({id, relays}) : addr.toNaddr() + const getLocalHref = (e: TrustedEvent) => { + const url = e.tags.find(nthEq(0, "~"))?.[2] + console.log(e, url) + + if (!url) return + if ([MESSAGE, THREAD].includes(e.kind)) return makeThreadPath(url, e.id) + + const kind = e.tags.find(nthEq(0, "K"))?.[1] + const id = e.tags.find(nthEq(0, "E"))?.[1] + + if (!id || !kind) return + if ([MESSAGE, THREAD].includes(parseInt(kind))) return makeThreadPath(url, id) + } + // If we found this event on a relay that the user is a member of, redirect internally - $: url = getMembershipUrls($userMembership).find(url => $trackerStore.hasRelay($event?.id, url)) - $: root = $event?.kind === COMMENT ? $event.tags.find(nthEq(0, "E"))?.[1] : $event?.id - $: href = url && root ? makeThreadPath(url, root) : entityLink(entity) + $: localHref = getLocalHref($event) + $: href = localHref || entityLink(entity) - + {#if $event} diff --git a/src/app/components/MenuSpace.svelte b/src/app/components/MenuSpace.svelte index 05a49648..bf3684c9 100644 --- a/src/app/components/MenuSpace.svelte +++ b/src/app/components/MenuSpace.svelte @@ -41,7 +41,7 @@ pushModal( ProfileList, {pubkeys: members, title: `Members of`, subtitle: displayRelayUrl(url)}, - {replaceState} + {replaceState}, ) const createInvite = () => pushModal(SpaceInvite, {url}, {replaceState}) @@ -72,7 +72,7 @@ $: members = $memberships.filter(l => hasMembershipUrl(l, url)).map(l => l.event.pubkey) onMount(async () => { - replaceState = Boolean(element.closest('.drawer')) + replaceState = Boolean(element.closest(".drawer")) const error = (await checkRelayConnection(url)) || (await checkRelayAuth(url)) diff --git a/src/app/components/ReactionSummary.svelte b/src/app/components/ReactionSummary.svelte index 1a5b40f5..882260f6 100644 --- a/src/app/components/ReactionSummary.svelte +++ b/src/app/components/ReactionSummary.svelte @@ -25,7 +25,7 @@ class:border={isOwn} class:border-solid={isOwn} class:border-primary={isOwn} - on:click={onClick}> + on:click|stopPropagation={onClick}> {displayReaction(content)} {#if events.length > 1} {events.length} diff --git a/src/app/components/ThreadActions.svelte b/src/app/components/ThreadActions.svelte index 1c263175..98e0a58a 100644 --- a/src/app/components/ThreadActions.svelte +++ b/src/app/components/ThreadActions.svelte @@ -62,7 +62,9 @@ {/if} diff --git a/src/lib/components/EmojiPicker.svelte b/src/lib/components/EmojiPicker.svelte index 3ca9d4d1..b038d7d8 100644 --- a/src/lib/components/EmojiPicker.svelte +++ b/src/lib/components/EmojiPicker.svelte @@ -1,3 +1,13 @@ + +