From 39b7b34bb742463b90d6f6183ca7c4b1aa1d1f7b Mon Sep 17 00:00:00 2001 From: Ren Amamiya <123083837+reyamir@users.noreply.github.com> Date: Sun, 3 Sep 2023 08:43:08 +0700 Subject: [PATCH] new mention popup in composer --- src-tauri/Cargo.toml | 2 +- src-tauri/tauri.conf.json | 2 + src/shared/composer/composer.tsx | 20 +---- src/shared/composer/{index.tsx => index.ts} | 3 +- src/shared/composer/mention/item.tsx | 32 +++++--- src/shared/composer/mention/list.tsx | 84 --------------------- src/shared/composer/mention/popup.tsx | 39 +++++++++- src/shared/composer/mention/suggestion.tsx | 68 ----------------- src/shared/notes/actions.tsx | 2 +- src/shared/user.tsx | 2 +- 10 files changed, 67 insertions(+), 187 deletions(-) rename src/shared/composer/{index.tsx => index.ts} (60%) delete mode 100644 src/shared/composer/mention/list.tsx delete mode 100644 src/shared/composer/mention/suggestion.tsx diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index e1c3fb9d..a42051bd 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -16,7 +16,7 @@ tauri-build = { version = "1.4.0", features = [] } [dependencies] serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } -tauri = { version = "1.4.0", features = [ +tauri = { version = "1.4.0", features = [ "fs-read-dir", "fs-read-file", "window-start-dragging", "path-all", "http-all", diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 9b4eb01f..6fd9b783 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -32,6 +32,8 @@ "all": false, "removeFile": true, "writeFile": true, + "readDir": true, + "readFile": true, "scope": [ "$APPDATA/*", "$DATA/*", diff --git a/src/shared/composer/composer.tsx b/src/shared/composer/composer.tsx index 8e57356d..ff12d3ab 100644 --- a/src/shared/composer/composer.tsx +++ b/src/shared/composer/composer.tsx @@ -1,16 +1,14 @@ import { message } from '@tauri-apps/api/dialog'; import Image from '@tiptap/extension-image'; -import Mention from '@tiptap/extension-mention'; import Placeholder from '@tiptap/extension-placeholder'; import { EditorContent, useEditor } from '@tiptap/react'; import StarterKit from '@tiptap/starter-kit'; import { convert } from 'html-to-text'; -import { nip19 } from 'nostr-tools'; import { useState } from 'react'; import { twMerge } from 'tailwind-merge'; -import { Suggestion } from '@shared/composer'; -import { CancelIcon, LoaderIcon, MediaIcon, MentionIcon } from '@shared/icons'; +import { MentionPopup } from '@shared/composer'; +import { CancelIcon, LoaderIcon, MediaIcon } from '@shared/icons'; import { MentionNote } from '@shared/notes'; import { useComposer } from '@stores/composer'; @@ -33,12 +31,6 @@ export function Composer() { }, }), Placeholder.configure({ placeholder: 'Type something...' }), - Mention.configure({ - suggestion: Suggestion, - renderLabel({ node }) { - return `nostr:${nip19.npubEncode(node.attrs.id.pubkey)} `; - }, - }), Image.configure({ HTMLAttributes: { class: @@ -164,13 +156,7 @@ export function Composer() { Add media - + - )) - ) : ( -
No result
- )} - - ); - } -); - -MentionList.displayName = 'MentionList'; diff --git a/src/shared/composer/mention/popup.tsx b/src/shared/composer/mention/popup.tsx index 04cccffb..a9004cbb 100644 --- a/src/shared/composer/mention/popup.tsx +++ b/src/shared/composer/mention/popup.tsx @@ -1,7 +1,38 @@ -export function MentionPopup() { +import * as Popover from '@radix-ui/react-popover'; +import { Editor } from '@tiptap/react'; +import { nip19 } from 'nostr-tools'; + +import { useStorage } from '@libs/storage/provider'; + +import { MentionItem } from '@shared/composer'; +import { MentionIcon } from '@shared/icons'; + +export function MentionPopup({ editor }: { editor: Editor }) { + const { db } = useStorage(); + + const insertMention = (pubkey: string) => { + editor.commands.insertContent(`nostr:${nip19.npubEncode(pubkey)}`); + }; + return ( -
-

TODO

-
+ + + + + +
+ {db.account.follows.map((item) => ( + + ))} +
+
+
); } diff --git a/src/shared/composer/mention/suggestion.tsx b/src/shared/composer/mention/suggestion.tsx deleted file mode 100644 index 9eb62391..00000000 --- a/src/shared/composer/mention/suggestion.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import { ReactRenderer } from '@tiptap/react'; -import tippy from 'tippy.js'; - -import { MentionList } from '@shared/composer'; - -export const Suggestion = { - items: async ({ query }) => { - const users = []; - return users - .filter((item) => item.ident.toLowerCase().startsWith(query.toLowerCase())) - .slice(0, 5); - }, - - render: () => { - let component; - let popup; - - return { - onStart: (props) => { - component = new ReactRenderer(MentionList, { - props, - editor: props.editor, - }); - - if (!props.clientRect) { - return; - } - - popup = tippy('body', { - getReferenceClientRect: props.clientRect, - appendTo: () => document.body, - content: component.element, - showOnCreate: true, - interactive: true, - trigger: 'manual', - placement: 'bottom-start', - }); - }, - - onUpdate(props) { - component.updateProps(props); - - if (!props.clientRect) { - return; - } - - popup[0].setProps({ - getReferenceClientRect: props.clientRect, - }); - }, - - onKeyDown(props) { - if (props.event.key === 'Escape') { - popup[0].hide(); - - return true; - } - - return component.ref?.onKeyDown(props); - }, - - onExit() { - popup[0].destroy(); - component.destroy(); - }, - }; - }, -}; diff --git a/src/shared/notes/actions.tsx b/src/shared/notes/actions.tsx index c9bdb62f..7e58fdcf 100644 --- a/src/shared/notes/actions.tsx +++ b/src/shared/notes/actions.tsx @@ -50,7 +50,7 @@ export function NoteActions({ - Open thread + Focus diff --git a/src/shared/user.tsx b/src/shared/user.tsx index a8a3be2d..11587379 100644 --- a/src/shared/user.tsx +++ b/src/shared/user.tsx @@ -88,7 +88,7 @@ export function User({