diff --git a/extension/src/background.ts b/extension/src/background.ts index 7d0efcb..b1d7ce7 100644 --- a/extension/src/background.ts +++ b/extension/src/background.ts @@ -72,10 +72,6 @@ chrome.runtime.onMessage.addListener( case "NotifyError": notifyError(message.data as string, sendResponse); break; - case "ReloadPage": - chrome.tabs.reload(tab.id); - sendResponse({ status: "ok" }); - break; case "NotifyConvertProcessSuccess": const { data } = message as RequestMessage; diff --git a/extension/src/features/reference/ui/AutoConvertingToggle.tsx b/extension/src/features/reference/ui/AutoConvertingToggle.tsx index f905bb8..70f070c 100644 --- a/extension/src/features/reference/ui/AutoConvertingToggle.tsx +++ b/extension/src/features/reference/ui/AutoConvertingToggle.tsx @@ -1,6 +1,7 @@ import { useChromeStorage, useTab } from "@/shared/store"; import styles from "./styles.module.css"; -import { useEffect, useState } from "react"; +import { useEffect } from "react"; +import { isVelogWritePage } from "@/shared/lib"; export const AutoConvertingToggle = () => { const { @@ -8,24 +9,15 @@ export const AutoConvertingToggle = () => { setChromeStorage, } = useChromeStorage(); const tab = useTab(); - const [isAutoConvertingDisabled, setIsAutoConvertingDisabled] = - useState(false); useEffect(() => { if (!tab) { return; } - if (tab.url.includes("https://velog.io/write") && !isContentScriptEnabled) { - setIsAutoConvertingDisabled(true); - setChromeStorage((prev) => ({ - ...prev, - autoConverting: false, - })); - return; + if (isVelogWritePage(tab) && !isContentScriptEnabled) { + chrome.tabs.reload(tab.id); } - - setIsAutoConvertingDisabled(false); }, [tab, isContentScriptEnabled]); return ( @@ -46,7 +38,6 @@ export const AutoConvertingToggle = () => { autoConverting: !prev.autoConverting, })); }} - disabled={isAutoConvertingDisabled} /> diff --git a/extension/src/features/reference/ui/ConvertToReferenceButton.tsx b/extension/src/features/reference/ui/ConvertToReferenceButton.tsx index 6c2cf46..ec4b396 100644 --- a/extension/src/features/reference/ui/ConvertToReferenceButton.tsx +++ b/extension/src/features/reference/ui/ConvertToReferenceButton.tsx @@ -1,13 +1,13 @@ import { Button } from "@/shared/ui/button"; import { useChromeStorage, useTab } from "@/shared/store"; -import { sendMessageToBackground } from "@/shared/lib"; +import { isVelogWritePage, sendMessageToBackground } from "@/shared/lib"; export const ConvertToReferenceButton = () => { - const { chromeStorage } = useChromeStorage(); + const { + chromeStorage: { isContentScriptEnabled }, + } = useChromeStorage(); const tab = useTab(); - const isVelogWritePage = tab?.url.includes("https://velog.io/write"); - const handleClick = async () => { if (!tab) { return; @@ -39,7 +39,7 @@ export const ConvertToReferenceButton = () => { diff --git a/extension/src/shared/lib/tab.ts b/extension/src/shared/lib/tab.ts index 226610d..f1a8b0e 100644 --- a/extension/src/shared/lib/tab.ts +++ b/extension/src/shared/lib/tab.ts @@ -1,2 +1,9 @@ export const isTab = (tab: chrome.tabs.Tab | undefined): tab is Tab => !!tab && !!tab.id && !!tab.url && !!tab.title; + +export const isVelogWritePage = (tab: Tab | null) => { + if (!tab) { + return false; + } + return tab.url.includes("https://velog.io/write"); +}; diff --git a/extension/src/shared/store/tab.tsx b/extension/src/shared/store/tab.tsx index 9e6094a..84399da 100644 --- a/extension/src/shared/store/tab.tsx +++ b/extension/src/shared/store/tab.tsx @@ -1,9 +1,10 @@ import { createContext, useContext, useEffect, useState } from "react"; -import { sendMessageToBackground } from "../lib"; +import { isTab } from "../lib"; type Tab = chrome.tabs.Tab & { id: number; url: string; + title: string; }; const TabContext = createContext(null); @@ -17,53 +18,19 @@ export const TabProvider = ({ children }: TabProviderProps) => { useEffect(() => { chrome.tabs.query({ active: true, currentWindow: true }, ([tab]) => { - try { - if (!tab || !tab.id || !tab.url) { - throw new Error("현재 탭의 정보를 가져올 수 없습니다."); - } - setTab(tab as Tab); - } catch (error) { - sendMessageToBackground({ - message: "NotifyError", - data: (error as Error).message, - }); - - setTab(null); - } + setTab(isTab(tab) ? tab : null); }); const handleHistoryUpdate = (_tabId: number, changeInfo: any, tab: any) => { if (changeInfo.status === "complete") { - try { - if (!tab || !tab.id || !tab.url) { - throw new Error("현재 탭의 정보를 가져올 수 없습니다."); - } - setTab(tab as Tab); - } catch (error) { - sendMessageToBackground({ - message: "NotifyError", - data: (error as Error).message, - }); - setTab(null); - } + setTab(isTab(tab) ? tab : null); } }; const handleWindowUpdate = async ({ tabId }: chrome.tabs.TabActiveInfo) => { const tab = await chrome.tabs.get(tabId); if (tab.status === "complete") { - try { - if (!tab || !tab.id || !tab.url) { - throw new Error("현재 탭의 정보를 가져올 수 없습니다."); - } - setTab(tab as Tab); - } catch (error) { - sendMessageToBackground({ - message: "NotifyError", - data: (error as Error).message, - }); - setTab(null); - } + setTab(isTab(tab) ? tab : null); } };