From 17864d332528f7db4c7fc9c403db3eb2164ac990 Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Thu, 2 Apr 2026 13:32:03 +0500 Subject: [PATCH] mobile: add support in editor to fetch internal link data --- .../editor/tiptap/use-editor-events.tsx | 59 +++++++++++++++++-- apps/mobile/package-lock.json | 4 +- packages/editor-mobile/package-lock.json | 2 +- .../editor-mobile/src/components/editor.tsx | 5 ++ .../editor-mobile/src/utils/editor-events.ts | 3 +- 5 files changed, 65 insertions(+), 8 deletions(-) diff --git a/apps/mobile/app/screens/editor/tiptap/use-editor-events.tsx b/apps/mobile/app/screens/editor/tiptap/use-editor-events.tsx index 1ff17d92a..b44d9318d 100644 --- a/apps/mobile/app/screens/editor/tiptap/use-editor-events.tsx +++ b/apps/mobile/app/screens/editor/tiptap/use-editor-events.tsx @@ -20,7 +20,7 @@ along with this program. If not, see . /* eslint-disable no-case-declarations */ /* eslint-disable @typescript-eslint/no-var-requires */ import { isFeatureAvailable, useAreFeaturesAvailable } from "@notesnook/common"; -import { ItemReference } from "@notesnook/core"; +import { ItemReference, parseInternalLink } from "@notesnook/core"; import type { Attachment } from "@notesnook/editor"; import { EditorEvents } from "@notesnook/editor-mobile/src/utils/editor-events"; import { NativeEvents } from "@notesnook/editor-mobile/src/utils/native-events"; @@ -471,9 +471,8 @@ export const useEditorEvents = ( relationType: "from", title: strings.dataTypesPluralCamelCase.reminder(), onAdd: async () => { - const reminderFeature = await isFeatureAvailable( - "activeReminders" - ); + const reminderFeature = + await isFeatureAvailable("activeReminders"); if (!reminderFeature.isAllowed) { ToastManager.show({ type: "info", @@ -533,7 +532,59 @@ export const useEditorEvents = ( downloadAttachment((editorMessage.value as Attachment)?.hash, true); break; } + case EditorEvents.getLinkData: { + const url = (editorMessage.value as any)?.url as string; + const link = parseInternalLink(url); + if (!link) return; + switch (link.type) { + case "note": + case "notebook": + case "tag": { + const table = + link.type === "note" + ? "notes" + : link.type === "notebook" + ? "notebooks" + : "tags"; + const item = await db + .sql() + .selectFrom(table) + .where("id", "=", link.id) + .select("title") + .executeTakeFirst(); + editor.postMessage(NativeEvents.resolve, { + resolverId: editorMessage.resolverId, + data: { + type: link.type, + title: item?.title || "" + } + }); + break; + } + case "color": { + const color = await db + .sql() + .selectFrom("colors") + .where("id", "=", link.id) + .select(["title", "colorCode"]) + .executeTakeFirst(); + + editor.postMessage(NativeEvents.resolve, { + resolverId: editorMessage.resolverId, + data: { + type: "color", + title: color?.title || "", + metadata: { + colorCode: color?.colorCode || "" + } + } + }); + } + } + + break; + } case EditorEvents.getAttachmentData: { const data = (editorMessage.value as any)?.attachment as Attachment; diff --git a/apps/mobile/package-lock.json b/apps/mobile/package-lock.json index 178caacf8..e4b1b2813 100644 --- a/apps/mobile/package-lock.json +++ b/apps/mobile/package-lock.json @@ -1,12 +1,12 @@ { "name": "@notesnook/mobile", - "version": "3.3.17", + "version": "3.3.18", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@notesnook/mobile", - "version": "3.3.17", + "version": "3.3.18", "hasInstallScript": true, "license": "GPL-3.0-or-later", "dependencies": { diff --git a/packages/editor-mobile/package-lock.json b/packages/editor-mobile/package-lock.json index 24441ca6c..7c735f048 100644 --- a/packages/editor-mobile/package-lock.json +++ b/packages/editor-mobile/package-lock.json @@ -68,7 +68,7 @@ "@notesnook/intl": "file:../intl", "@notesnook/theme": "file:../theme", "@notesnook/ui": "file:../ui", - "@social-embed/lib": "^0.1.0-next.7", + "@social-embed/lib": "^0.1.0-next.11", "@tiptap/core": "2.6.6", "@tiptap/extension-blockquote": "^2.6.6", "@tiptap/extension-bullet-list": "^2.6.6", diff --git a/packages/editor-mobile/src/components/editor.tsx b/packages/editor-mobile/src/components/editor.tsx index 697893636..66893f6cf 100644 --- a/packages/editor-mobile/src/components/editor.tsx +++ b/packages/editor-mobile/src/components/editor.tsx @@ -162,6 +162,11 @@ const Tiptap = ({ attachment ) as Promise; }, + getLinkData: (url: string) => { + return postAsyncWithTimeout(EditorEvents.getLinkData, { + url: url + }); + }, createInternalLink(attributes) { return postAsyncWithTimeout(EditorEvents.createInternalLink, { attributes diff --git a/packages/editor-mobile/src/utils/editor-events.ts b/packages/editor-mobile/src/utils/editor-events.ts index 83b8da698..c69673eb9 100644 --- a/packages/editor-mobile/src/utils/editor-events.ts +++ b/packages/editor-mobile/src/utils/editor-events.ts @@ -55,5 +55,6 @@ export const EditorEvents = { goForward: "editor-events:go-forward", saveScroll: "editor-events:save-scroll", newNote: "editor-events:new-note", - downloadCsv: "editor-events:download-csv" + downloadCsv: "editor-events:download-csv", + getLinkData: "editor-events:get-link-data" } as const;