From bb389ad429c92ea8771f122b342b7bdd2d464f74 Mon Sep 17 00:00:00 2001 From: Steven Date: Tue, 8 Aug 2023 20:53:15 +0800 Subject: [PATCH] feat: update popup initial state handler --- .../src/components/PullShortcutsButton.tsx | 20 ++++++++---- extension/src/helpers/api.ts | 15 +++++---- extension/src/options.tsx | 9 ++---- extension/src/popup.tsx | 31 +++++++++++++++++-- 4 files changed, 51 insertions(+), 24 deletions(-) diff --git a/extension/src/components/PullShortcutsButton.tsx b/extension/src/components/PullShortcutsButton.tsx index 9e7fa9f..0b10d8c 100644 --- a/extension/src/components/PullShortcutsButton.tsx +++ b/extension/src/components/PullShortcutsButton.tsx @@ -1,19 +1,25 @@ import { Button } from "@mui/joy"; import { useStorage } from "@plasmohq/storage/hook"; import axios from "axios"; -import { useState } from "react"; +import { useEffect, useState } from "react"; import { toast } from "react-hot-toast"; import { Shortcut } from "@/types/proto/api/v2/shortcut_service_pb"; import "../style.css"; import Icon from "./Icon"; -function PullShortcutsButton() { +const PullShortcutsButton = () => { const [domain] = useStorage("domain"); const [accessToken] = useStorage("access_token"); const [, setShortcuts] = useStorage("shortcuts"); const [isPulling, setIsPulling] = useState(false); - const handlePullShortcuts = async () => { + useEffect(() => { + if (domain && accessToken) { + handlePullShortcuts(true); + } + }, [domain, accessToken]); + + const handlePullShortcuts = async (silence = false) => { try { setIsPulling(true); const { data } = await axios.get(`${domain}/api/v1/shortcut`, { @@ -22,7 +28,9 @@ function PullShortcutsButton() { }, }); setShortcuts(data); - toast.success("Shortcuts pulled"); + if (!silence) { + toast.success("Shortcuts pulled"); + } } catch (error) { toast.error("Failed to pull shortcuts, error: " + error.message); } @@ -30,10 +38,10 @@ function PullShortcutsButton() { }; return ( - ); -} +}; export default PullShortcutsButton; diff --git a/extension/src/helpers/api.ts b/extension/src/helpers/api.ts index d6b96dc..9b7c7c1 100644 --- a/extension/src/helpers/api.ts +++ b/extension/src/helpers/api.ts @@ -1,15 +1,14 @@ -import type { Shortcut } from "@/types/proto/api/v2/shortcut_service_pb"; import { Storage } from "@plasmohq/storage"; import axios from "axios"; const storage = new Storage(); -export const getShortcutList = () => { - const queryList = []; - return axios.get(`/api/v1/shortcut?${queryList.join("&")}`); -}; - export const getUrlFavicon = async (url: string) => { - const domain = await storage.getItem("domain"); - return axios.get(`${domain}/api/v1/url/favicon?url=${url}`); + const domain = await storage.getItem("domain"); + const accessToken = await storage.getItem("access_token"); + return axios.get(`${domain}/api/v1/url/favicon?url=${url}`, { + headers: { + Authorization: `Bearer ${accessToken}`, + }, + }); }; diff --git a/extension/src/options.tsx b/extension/src/options.tsx index 4f38cf8..7fef656 100644 --- a/extension/src/options.tsx +++ b/extension/src/options.tsx @@ -10,7 +10,7 @@ interface SettingState { accessToken: string; } -function IndexOptions() { +const IndexOptions = () => { const [domain, setDomain] = useStorage("domain", (v) => (v ? v : "")); const [accessToken, setAccessToken] = useStorage("access_token", (v) => (v ? v : "")); const [settingState, setSettingState] = useState({ @@ -33,11 +33,6 @@ function IndexOptions() { }; const handleSaveSetting = () => { - if (!settingState.domain || !settingState.accessToken) { - toast.error("Domain and access token are required"); - return; - } - setDomain(settingState.domain); setAccessToken(settingState.accessToken); toast.success("Setting saved"); @@ -89,6 +84,6 @@ function IndexOptions() { ); -} +}; export default IndexOptions; diff --git a/extension/src/popup.tsx b/extension/src/popup.tsx index a0cd63a..0716cf1 100644 --- a/extension/src/popup.tsx +++ b/extension/src/popup.tsx @@ -7,7 +7,7 @@ import PullShortcutsButton from "./components/PullShortcutsButton"; import ShortcutsContainer from "./components/ShortcutsContainer"; import "./style.css"; -function IndexPopup() { +const IndexPopup = () => { const [domain] = useStorage("domain", ""); const [accessToken] = useStorage("access_token", ""); const [shortcuts] = useStorage("shortcuts", []); @@ -17,6 +17,10 @@ function IndexPopup() { chrome.runtime.openOptionsPage(); }; + const handleRefreshButtonClick = () => { + chrome.runtime.reload(); + }; + return ( <>
@@ -41,13 +45,34 @@ function IndexPopup() {
- + {isInitialized ? ( + shortcuts.length !== 0 ? ( + + ) : ( +
+

No shortcut found.

+
+ ) + ) : ( +
+

No domain and access token found.

+
+ + Or + +
+
+ )}
); -} +}; export default IndexPopup;