import { useEffect, useState } from "react"; import { Navigate } from "react-router-dom"; import { BookmarkTypes, ZNewBookmarkRequest, zNewBookmarkRequestSchema, } from "@karakeep/shared/types/bookmarks"; import { NEW_BOOKMARK_REQUEST_KEY_NAME } from "./background/protocol"; import Spinner from "./Spinner"; import { api } from "./utils/trpc"; export default function SavePage() { const [error, setError] = useState(undefined); const { data, mutate: createBookmark, status, } = api.bookmarks.createBookmark.useMutation({ onError: (e) => { setError("Something went wrong: " + e.message); }, }); useEffect(() => { async function getNewBookmarkRequestFromBackgroundScriptIfAny(): Promise { 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 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, title: currentTab.title, }; } else { setError("Couldn't find the URL of the current tab"); return; } } createBookmark(newBookmarkRequest); } runSave(); }, [createBookmark]); switch (status) { case "error": { return
{error}
; } case "success": { return ; } case "pending": { return (
Saving Bookmark
); } case "idle": { return
; } } }