From 0e24016052f00f9175a67d984d883470acd4b038 Mon Sep 17 00:00:00 2001 From: Bojan Mojsilovic Date: Thu, 7 Mar 2024 13:43:54 +0100 Subject: [PATCH] Save user refs for drafts as well --- src/components/NewNote/EditBox/EditBox.tsx | 10 ++++-- src/lib/localStore.ts | 36 ++++++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/src/components/NewNote/EditBox/EditBox.tsx b/src/components/NewNote/EditBox/EditBox.tsx index 4ce0534..953a8a9 100644 --- a/src/components/NewNote/EditBox/EditBox.tsx +++ b/src/components/NewNote/EditBox/EditBox.tsx @@ -2,7 +2,7 @@ import { useIntl } from "@cookbook/solid-intl"; import { Router, useLocation } from "@solidjs/router"; import { nip19 } from "nostr-tools"; import { Component, createEffect, createSignal, For, onCleanup, onMount, Show } from "solid-js"; -import { createStore, unwrap } from "solid-js/store"; +import { createStore, reconcile, unwrap } from "solid-js/store"; import { noteRegex, profileRegex, Kind, editMentionRegex, emojiSearchLimit, profileRegexG } from "../../../constants"; import { useAccountContext } from "../../../contexts/AccountContext"; import { useSearchContext } from "../../../contexts/SearchContext"; @@ -40,7 +40,7 @@ import { useProfileContext } from "../../../contexts/ProfileContext"; import ButtonGhost from "../../Buttons/ButtonGhost"; import EmojiPickPopover from "../../EmojiPickModal/EmojiPickPopover"; import ConfirmAlternativeModal from "../../ConfirmModal/ConfirmAlternativeModal"; -import { readNoteDraft, saveNoteDraft } from "../../../lib/localStore"; +import { readNoteDraft, readNoteDraftUserRefs, saveNoteDraft, saveNoteDraftUserRefs } from "../../../lib/localStore"; import Uploader from "../../Uploader/Uploader"; import { logError } from "../../../lib/logger"; @@ -499,6 +499,9 @@ const EditBox: Component<{ createEffect(() => { if (props.open) { const draft = readNoteDraft(account?.publicKey, props.replyToNote?.post.noteId); + const draftUserRefs = readNoteDraftUserRefs(account?.publicKey, props.replyToNote?.post.noteId); + + setUserRefs(reconcile(draftUserRefs)); setMessage((msg) => { if (msg.length > 0) return msg; @@ -527,6 +530,7 @@ const EditBox: Component<{ // save draft just in case there is an unintended interuption saveNoteDraft(account?.publicKey, message(), props.replyToNote?.post.noteId); + saveNoteDraftUserRefs(account?.publicKey, userRefs, props.replyToNote?.post.noteId); }); const onEscape = (e: KeyboardEvent) => { @@ -575,6 +579,7 @@ const EditBox: Component<{ } saveNoteDraft(account?.publicKey, '', props.replyToNote?.post.noteId); + saveNoteDraftUserRefs(account?.publicKey, {}, props.replyToNote?.post.noteId); clearEditor(); }; @@ -587,6 +592,7 @@ const EditBox: Component<{ const persistNote = (note: string) => { saveNoteDraft(account?.publicKey, note, props.replyToNote?.post.noteId); + saveNoteDraftUserRefs(account?.publicKey, userRefs, props.replyToNote?.post.noteId); clearEditor(); }; diff --git a/src/lib/localStore.ts b/src/lib/localStore.ts index 678a156..e609be0 100644 --- a/src/lib/localStore.ts +++ b/src/lib/localStore.ts @@ -23,6 +23,7 @@ export type LocalStore = { }, emojiHistory: EmojiOption[], noteDraft: Record, + noteDraftUserRefs: Record>, uploadTime: Record, }; @@ -58,6 +59,7 @@ export const emptyStorage = { recomended: { profiles: [], stats: {} }, emojiHistory: [], noteDraft: {}, + noteDraftUserRefs: {}, uploadTime: defaultUploadTime, } @@ -261,6 +263,40 @@ export const readNoteDraft = (pubkey: string | undefined, replyTo?: string) => { return store.noteDraft[key] || ''; } +export const saveNoteDraftUserRefs = (pubkey: string | undefined, refs: Record, replyTo?: string) => { + if (!pubkey) { + return; + } + + const store = getStorage(pubkey); + + const key = replyTo || 'root'; + + if (!store.noteDraftUserRefs || typeof store.noteDraftUserRefs === 'string') { + store.noteDraftUserRefs = {}; + } + + store.noteDraftUserRefs[key] = refs; + + setStorage(pubkey, store); +} + +export const readNoteDraftUserRefs = (pubkey: string | undefined, replyTo?: string) => { + if (!pubkey) { + return {}; + } + + const store = getStorage(pubkey); + + if (!store.noteDraftUserRefs || typeof store.noteDraftUserRefs === 'string') { + store.noteDraftUserRefs = {}; + } + + const key = replyTo || 'root'; + + return store.noteDraftUserRefs[key] || {}; +} + export const saveUploadTime = (pubkey: string | undefined, uploadTime: Record) => { if (!pubkey) { return;