From 6e6d2c3cbc860d0024e9631b01eeef55b47933a5 Mon Sep 17 00:00:00 2001 From: MohamedBassem Date: Mon, 12 Feb 2024 20:50:12 +0000 Subject: WIP: Implement saving page functionality in browser extension --- packages/browser-extension/src/App.tsx | 29 ++++++++++++-- packages/browser-extension/src/SavePage.tsx | 40 +++++++++++++++++++ packages/browser-extension/src/SettingsPage.tsx | 53 +++++++++++++++++++++++++ packages/browser-extension/src/main.tsx | 33 +++++++++++---- packages/browser-extension/src/settings.ts | 13 ++++++ 5 files changed, 158 insertions(+), 10 deletions(-) create mode 100644 packages/browser-extension/src/SavePage.tsx create mode 100644 packages/browser-extension/src/SettingsPage.tsx create mode 100644 packages/browser-extension/src/settings.ts (limited to 'packages/browser-extension/src') diff --git a/packages/browser-extension/src/App.tsx b/packages/browser-extension/src/App.tsx index 7daedc37..21fec92f 100644 --- a/packages/browser-extension/src/App.tsx +++ b/packages/browser-extension/src/App.tsx @@ -1,8 +1,31 @@ +import { redirect } from "react-router-dom"; +import SavePage from "./SavePage"; +import usePluginSettings from "./settings"; +import { useNavigate } from "react-router-dom"; + function App() { + const navigate = useNavigate(); + const [settings, _1, _2, _3, isInit] = usePluginSettings(); + + if (!isInit) { + return
Loading ...
; + } + + if (!settings.apiKey || !settings.address) { + navigate("/settings"); + return; + } + return ( - <> -
Test
- +
+ +
+
+ +
+
); } diff --git a/packages/browser-extension/src/SavePage.tsx b/packages/browser-extension/src/SavePage.tsx new file mode 100644 index 00000000..c66cc0ad --- /dev/null +++ b/packages/browser-extension/src/SavePage.tsx @@ -0,0 +1,40 @@ +import { useEffect, useState } from "react"; +import { Settings } from "./settings"; + +export default function SavePage({ settings }: { settings: Settings }) { + const [loading, setLoading] = useState(true); + const [error, setError] = useState(undefined); + + async function runFetch() { + const resp = await fetch( + `${settings.address}/api/trpc/bookmarks.bookmarkLink`, + { + method: "POST", + }, + ); + + if (!resp.ok) { + setError("Something went wrong: " + (await resp.json())); + } + setLoading(false); + } + + useEffect(() => { + runFetch(); + }, []); + + if (loading) { + return
Loading ...
; + } + + if (error) { + return
{error} ...
; + } + + return ( +
+ SAVED! + +
+ ); +} diff --git a/packages/browser-extension/src/SettingsPage.tsx b/packages/browser-extension/src/SettingsPage.tsx new file mode 100644 index 00000000..bae870ac --- /dev/null +++ b/packages/browser-extension/src/SettingsPage.tsx @@ -0,0 +1,53 @@ +import { useRef } from "react"; +import usePluginSettings from "./settings"; +import { useNavigate } from "react-router-dom"; + +export default function SettingsPage() { + const navigate = useNavigate(); + const [settings, setSettings, _1, _2, _3] = usePluginSettings(); + + const apiKeyRef = useRef(null); + const addressRef = useRef(null); + + const onSave = () => { + setSettings({ + apiKey: apiKeyRef.current?.value || "", + address: addressRef.current?.value || "", + }); + }; + + return ( +
+ Settings +
+
+ + +
+
+ + +
+ + +
+ ); +} diff --git a/packages/browser-extension/src/main.tsx b/packages/browser-extension/src/main.tsx index 3d7150da..298ab388 100644 --- a/packages/browser-extension/src/main.tsx +++ b/packages/browser-extension/src/main.tsx @@ -1,10 +1,29 @@ -import React from 'react' -import ReactDOM from 'react-dom/client' -import App from './App.tsx' -import './index.css' +import React from "react"; +import ReactDOM from "react-dom/client"; +import App from "./App.tsx"; +import "./index.css"; +import { createBrowserRouter, Navigate, RouterProvider } from "react-router-dom"; +import SettingsPage from "./SettingsPage.tsx"; -ReactDOM.createRoot(document.getElementById('root')!).render( +const router = createBrowserRouter([ + { + path: "/index.html", + element: , + }, + { + path: "/", + element: , + }, + { + path: "/settings", + element: , + }, +]); + +ReactDOM.createRoot(document.getElementById("root")!).render( - +
+ +
, -) +); diff --git a/packages/browser-extension/src/settings.ts b/packages/browser-extension/src/settings.ts new file mode 100644 index 00000000..ee7f0722 --- /dev/null +++ b/packages/browser-extension/src/settings.ts @@ -0,0 +1,13 @@ +import { useChromeStorageSync } from "use-chrome-storage"; + +export type Settings = { + apiKey: string; + address: string; +}; + +export default function usePluginSettings() { + return useChromeStorageSync("settings", { + apiKey: "", + address: "", + } as Settings); +} -- cgit v1.2.3-70-g09d2