From 3e06c3656318da4041bcf730483b04610db645f5 Mon Sep 17 00:00:00 2001 From: Jon Staab Date: Tue, 1 Oct 2024 11:47:21 -0700 Subject: [PATCH] Get threads working reasonably well --- src/app/commands.ts | 6 +- src/app/components/ChatCompose.svelte | 14 ++- src/app/components/ChatMessage.svelte | 90 +++++++++---------- .../components/ChatMessageEmojiButton.svelte | 4 +- src/app/components/ChatMessageReplies.svelte | 1 - src/app/components/ChatMessageReply.svelte | 1 - src/app/components/ChatThread.svelte | 56 ++++++++++++ src/app/modal.ts | 8 +- src/app/state.ts | 2 + src/lib/components/Drawer.svelte | 2 +- src/routes/+layout.svelte | 20 ++++- .../spaces/[nrelay]/[[room]]/+page.svelte | 24 +++-- 12 files changed, 153 insertions(+), 75 deletions(-) delete mode 100644 src/app/components/ChatMessageReplies.svelte delete mode 100644 src/app/components/ChatMessageReply.svelte create mode 100644 src/app/components/ChatThread.svelte diff --git a/src/app/commands.ts b/src/app/commands.ts index f3f67007..9b5f3a7b 100644 --- a/src/app/commands.ts +++ b/src/app/commands.ts @@ -17,7 +17,7 @@ import { tagEvent, tagReactionTo, } from "@welshman/app" -import {ROOM, MEMBERSHIPS, INDEXER_RELAYS} from "@app/state" +import {tagRoom, MEMBERSHIPS, INDEXER_RELAYS} from "@app/state" // Utils @@ -99,7 +99,7 @@ export const addSpaceMembership = (url: string) => export const addRoomMembership = (url: string, room: string) => updateList(MEMBERSHIPS, (tags: string[][]) => - uniqBy(t => t.join(""), [...tags, [ROOM, room, url]]), + uniqBy(t => t.join(""), [...tags, tagRoom(room, url)]), ) export const removeSpaceMembership = (url: string) => @@ -108,7 +108,7 @@ export const removeSpaceMembership = (url: string) => ) export const removeRoomMembership = (url: string, room: string) => - updateList(MEMBERSHIPS, (tags: string[][]) => tags.filter(t => !equals([ROOM, room, url], t))) + updateList(MEMBERSHIPS, (tags: string[][]) => tags.filter(t => !equals(tagRoom(room, url), t))) // Actions diff --git a/src/app/components/ChatCompose.svelte b/src/app/components/ChatCompose.svelte index 80ea61f6..48e6ff74 100644 --- a/src/app/components/ChatCompose.svelte +++ b/src/app/components/ChatCompose.svelte @@ -8,24 +8,21 @@ import Icon from "@lib/components/Icon.svelte" import Button from "@lib/components/Button.svelte" import {getEditorOptions, getEditorTags, addFile} from "@lib/editor" - import {ROOM, MESSAGE, GENERAL} from "@app/state" + import {MESSAGE} from "@app/state" import {getPubkeyHints} from "@app/commands" - export let url - export let room = GENERAL + export let onSubmit const loading = writable(false) let editor: Readable const submit = () => { - const event = createEvent(MESSAGE, { + onSubmit({ content: $editor.getText(), - tags: [[ROOM, room], ...getEditorTags($editor)], + tags: getEditorTags($editor), }) - publishThunk(makeThunk({event, relays: [url]})) - $editor.chain().clearContent().run() } @@ -34,8 +31,7 @@ }) -
+
+ {/each}
{/if} -
- {#if !isReply} - - {/if} + -
-
- -{#if !isReply} - - - - - -{/if} + + diff --git a/src/app/components/ChatMessageEmojiButton.svelte b/src/app/components/ChatMessageEmojiButton.svelte index 8c0d7432..d68f8c25 100644 --- a/src/app/components/ChatMessageEmojiButton.svelte +++ b/src/app/components/ChatMessageEmojiButton.svelte @@ -6,7 +6,7 @@ import Button from "@lib/components/Button.svelte" import Tippy from "@lib/components/Tippy.svelte" import EmojiPicker from "@lib/components/EmojiPicker.svelte" - import {ROOM} from '@app/state' + import {tagRoom} from '@app/state' import {publishReaction} from '@app/commands' export let url, room, event @@ -18,7 +18,7 @@ event, relays: [url], content: emoji.unicode, - tags: [[ROOM, room, url]], + tags: [tagRoom(room, url)], }) popover.hide() diff --git a/src/app/components/ChatMessageReplies.svelte b/src/app/components/ChatMessageReplies.svelte deleted file mode 100644 index 45b983be..00000000 --- a/src/app/components/ChatMessageReplies.svelte +++ /dev/null @@ -1 +0,0 @@ -hi diff --git a/src/app/components/ChatMessageReply.svelte b/src/app/components/ChatMessageReply.svelte deleted file mode 100644 index 45b983be..00000000 --- a/src/app/components/ChatMessageReply.svelte +++ /dev/null @@ -1 +0,0 @@ -hi diff --git a/src/app/components/ChatThread.svelte b/src/app/components/ChatThread.svelte new file mode 100644 index 00000000..d69cd6e9 --- /dev/null +++ b/src/app/components/ChatThread.svelte @@ -0,0 +1,56 @@ + + +
+
+ + {#each sortBy(e => e.created_at, $replies) as reply (reply.id)} + + {/each} +
+
+ +
+
diff --git a/src/app/modal.ts b/src/app/modal.ts index a290f6bf..e3d7efa4 100644 --- a/src/app/modal.ts +++ b/src/app/modal.ts @@ -6,11 +6,15 @@ export const emitter = new Emitter() export const modals = new Map() -export const pushModal = (component: ComponentType, props: Record = {}) => { +export type ModalOptions = { + drawer?: boolean +} + +export const pushModal = (component: ComponentType, props: Record = {}, options: ModalOptions = {}) => { const id = randomId() // TODO: fix memory leak here by listening to history somehow - modals.set(id, {component, props}) + modals.set(id, {component, props, options}) goto("#" + id) return id diff --git a/src/app/state.ts b/src/app/state.ts index 4521c1fd..9f910fb0 100644 --- a/src/app/state.ts +++ b/src/app/state.ts @@ -73,6 +73,8 @@ export const imgproxy = (url: string, {w = 640, h = 1024} = {}) => { export const entityLink = (entity: string) => `https://coracle.social/${entity}` +export const tagRoom = (room: string, url: string) => [ROOM, room, url] + setContext({ net: getDefaultNetContext(), app: getDefaultAppContext({ diff --git a/src/lib/components/Drawer.svelte b/src/lib/components/Drawer.svelte index cf6b9d52..b7e45eb6 100644 --- a/src/lib/components/Drawer.svelte +++ b/src/lib/components/Drawer.svelte @@ -31,7 +31,7 @@
- diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 46236933..1e24e58c 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -1,6 +1,7 @@