From fe03bb2ce71d74a3c1fd082292c6ea99adb5029f Mon Sep 17 00:00:00 2001 From: Ticruz Date: Thu, 21 Nov 2024 13:35:21 +0100 Subject: [PATCH 1/5] Note Create UX changes --- src/app/views/NoteCreate.svelte | 22 +++++++++++++++++++--- src/partials/Toast.svelte | 18 +++++++++--------- 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/src/app/views/NoteCreate.svelte b/src/app/views/NoteCreate.svelte index 85a129b39..9a93080e2 100644 --- a/src/app/views/NoteCreate.svelte +++ b/src/app/views/NoteCreate.svelte @@ -19,6 +19,7 @@ import NoteContent from "src/app/shared/NoteContent.svelte" import NoteOptions from "src/app/shared/NoteOptions.svelte" import {getEditorOptions} from "src/app/editor" + import {drafts} from "src/app/state" import {router} from "src/app/util/router" import {currencyOptions} from "src/util/i18n" import {getClientTags, publish, sign, tagsFromContent, userSettings} from "src/engine" @@ -60,10 +61,11 @@ } const onSubmit = async ({skipNsecWarning = false} = {}) => { - signaturePending = true // prevent sending before media are uploaded and tags are correctly set if ($loading) return + signaturePending = true + const content = editor.getText({blockSeparator: "\n"}).trim() if (!content) return showWarning("Please provide a description.") @@ -86,17 +88,31 @@ signaturePending = false + drafts.set("notecreate", editor.getHTML()) + + router.clearModals() + const thunk = publish({ event: signedTemplate, relays: ctx.app.router.PublishEvent(signedTemplate).getUrls(), delay: $userSettings.send_delay, }) + thunk.result.finally(() => { + charCount.set(0) + wordCount.set(0) + drafts.delete("notecreate") + }) + if ($userSettings.send_delay > 0) { showToast({ + id: "send-delay", type: "delay", timeout: $userSettings.send_delay / 1000, - onCancel: () => thunk.controller.abort(), + onCancel: () => { + thunk.controller.abort() + router.at("notes/create").open() + }, }) } @@ -106,7 +122,6 @@ Object.values(status).every(s => s.status === PublishStatus.Pending) ) { showPublishInfo(thunk) - router.clearModals() } }) } @@ -130,6 +145,7 @@ onMount(() => { const options = getEditorOptions({ + content: drafts.get("notecreate") || "", submit: onSubmit, element, submitOnEnter: false, diff --git a/src/partials/Toast.svelte b/src/partials/Toast.svelte index 14da61f8f..aa8aa930f 100644 --- a/src/partials/Toast.svelte +++ b/src/partials/Toast.svelte @@ -91,13 +91,13 @@ {#if $toast} -
- {#key $toast.id} + {#key $toast.id} +
- {/key} -
+ + {/key} {/if} From 482cdc0b3177eebb099b5884857045a5bf00f5ea Mon Sep 17 00:00:00 2001 From: Ticruz Date: Thu, 21 Nov 2024 14:57:02 +0100 Subject: [PATCH 2/5] UX improvement in reply --- src/app/shared/Note.svelte | 9 ++++++++- src/app/shared/NoteActions.svelte | 12 ++++++++++++ src/app/shared/NotePending.svelte | 22 ++++++++++++---------- src/app/shared/NoteReply.svelte | 2 ++ 4 files changed, 34 insertions(+), 11 deletions(-) diff --git a/src/app/shared/Note.svelte b/src/app/shared/Note.svelte index 06813bb04..dbe1923cc 100644 --- a/src/app/shared/Note.svelte +++ b/src/app/shared/Note.svelte @@ -32,6 +32,7 @@ import NoteActions from "src/app/shared/NoteActions.svelte" import NoteContent from "src/app/shared/NoteContent.svelte" import NotePending from "src/app/shared/NotePending.svelte" + import {drafts} from "src/app/state" import {router} from "src/app/util/router" import { env, @@ -74,7 +75,12 @@ const addDraftToContext = (event, cb) => { draftEventId = event.id - removeDraft = () => cb() && repository.removeEvent(event.id) + removeDraft = () => { + cb() + repository.removeEvent(event.id) + drafts.set(note.id, event.content) + replyIsActive = false + } } const onClick = e => { @@ -290,6 +296,7 @@ note={event} zapper={$zapper} {replyCtrl} + {replyIsActive} {showHidden} {replies} {likes} diff --git a/src/app/shared/NoteActions.svelte b/src/app/shared/NoteActions.svelte index 16c28aeae..459ba799f 100644 --- a/src/app/shared/NoteActions.svelte +++ b/src/app/shared/NoteActions.svelte @@ -3,6 +3,7 @@ import {nip19} from "nostr-tools" import {onMount} from "svelte" import {derived} from "svelte/store" + import {slide} from "svelte/transition" import {ctx, nth, nthEq, remove, last, sortBy} from "@welshman/lib" import { repository, @@ -60,6 +61,7 @@ export let note: TrustedEvent export let muted export let replyCtrl + export let replyIsActive = false export let showHidden export let replies, likes, zaps export let zapper @@ -229,6 +231,16 @@ class="flex justify-between text-neutral-100" on:click|stopPropagation>
+ {#if replyIsActive} + + {/if}