aboutsummaryrefslogtreecommitdiffstats
path: root/apps/browser-extension/src/SavePage.tsx
diff options
context:
space:
mode:
authorkamtschatka <simon.schatka@gmx.at>2024-08-18 20:52:51 +0200
committerGitHub <noreply@github.com>2024-08-18 21:52:51 +0300
commit0710147ab1a3274b517acefffdaa17ece7cdd744 (patch)
tree127ecb3521e4df8a2ee849dc9a466a8c8857e3e1 /apps/browser-extension/src/SavePage.tsx
parentc7f9febf04541ac9b68a4cb6cb48251e41b51d05 (diff)
downloadkarakeep-0710147ab1a3274b517acefffdaa17ece7cdd744.tar.zst
[extension] Add context menu item in the browser extension. Fixes #155 (#278)
* Add context menu item in the browser extension #155 Added a context menu entry to add links directly to hoarder * Formalize protocol between extension and service worker, add support for text/images beside links * fix build --------- Co-authored-by: MohamedBassem <me@mbassem.com>
Diffstat (limited to 'apps/browser-extension/src/SavePage.tsx')
-rw-r--r--apps/browser-extension/src/SavePage.tsx50
1 files changed, 35 insertions, 15 deletions
diff --git a/apps/browser-extension/src/SavePage.tsx b/apps/browser-extension/src/SavePage.tsx
index c6f85b3b..06530f9d 100644
--- a/apps/browser-extension/src/SavePage.tsx
+++ b/apps/browser-extension/src/SavePage.tsx
@@ -1,7 +1,13 @@
import { useEffect, useState } from "react";
import { Navigate } from "react-router-dom";
-import { BookmarkTypes } from "../../../packages/shared/types/bookmarks";
+import {
+ BookmarkTypes,
+ ZNewBookmarkRequest,
+ zNewBookmarkRequestSchema,
+} from "@hoarder/shared/types/bookmarks";
+
+import { NEW_BOOKMARK_REQUEST_KEY_NAME } from "./background/protocol";
import Spinner from "./Spinner";
import { api } from "./utils/trpc";
@@ -19,23 +25,37 @@ export default function SavePage() {
});
useEffect(() => {
+ async function getNewBookmarkRequestFromBackgroundScriptIfAny(): Promise<ZNewBookmarkRequest | null> {
+ const { [NEW_BOOKMARK_REQUEST_KEY_NAME]: req } =
+ await chrome.storage.session.get(NEW_BOOKMARK_REQUEST_KEY_NAME);
+ if (!req) {
+ return null;
+ }
+ // Delete the request immediately to avoid issues with lingering values
+ await chrome.storage.session.remove(NEW_BOOKMARK_REQUEST_KEY_NAME);
+ return zNewBookmarkRequestSchema.parse(req);
+ }
+
async function runSave() {
- let currentUrl;
- const [currentTab] = await chrome.tabs.query({
- active: true,
- lastFocusedWindow: true,
- });
- if (currentTab?.url) {
- currentUrl = currentTab.url;
- } else {
- setError("Couldn't find the URL of the current tab");
- return;
+ let newBookmarkRequest =
+ await getNewBookmarkRequestFromBackgroundScriptIfAny();
+ if (!newBookmarkRequest) {
+ const [currentTab] = await chrome.tabs.query({
+ active: true,
+ lastFocusedWindow: true,
+ });
+ if (currentTab?.url) {
+ newBookmarkRequest = {
+ type: BookmarkTypes.LINK,
+ url: currentTab.url,
+ };
+ } else {
+ setError("Couldn't find the URL of the current tab");
+ return;
+ }
}
- createBookmark({
- type: BookmarkTypes.LINK,
- url: currentUrl,
- });
+ createBookmark(newBookmarkRequest);
}
runSave();
}, [createBookmark]);