From 8f0a45ef9ab1f968bc6b9ac99e4c7a8f046f6e05 Mon Sep 17 00:00:00 2001 From: yonghyeun Date: Thu, 9 Jan 2025 14:25:46 +0900 Subject: [PATCH 1/3] =?UTF-8?q?refactor[#106]=20:=20TapProvider=20?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EC=9C=A0=ED=9A=A8=ED=95=98=EC=A7=80=20?= =?UTF-8?q?=EC=95=8A=EC=9D=80=20=ED=83=AD=EC=9D=BC=20=EA=B2=BD=EC=9A=B0=20?= =?UTF-8?q?null=EB=A1=9C=20=EC=83=81=ED=83=9C=20=EC=A0=80=EC=9E=A5?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- extension/src/shared/store/tab.tsx | 43 ++++-------------------------- 1 file changed, 5 insertions(+), 38 deletions(-) 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); } }; From e585d5433005823f08b56c6649c2523506bd243f Mon Sep 17 00:00:00 2001 From: yonghyeun Date: Thu, 9 Jan 2025 14:46:27 +0900 Subject: [PATCH 2/3] =?UTF-8?q?refactor[#106]=20:=20isVelogWritePage=20?= =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../features/reference/ui/ConvertToReferenceButton.tsx | 10 +++++----- extension/src/shared/lib/tab.ts | 7 +++++++ 2 files changed, 12 insertions(+), 5 deletions(-) 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"); +}; From bb35ef3b7636d8eeb74f65f10f063f22d13be91b Mon Sep 17 00:00:00 2001 From: yonghyeun Date: Thu, 9 Jan 2025 14:47:06 +0900 Subject: [PATCH 3/3] =?UTF-8?q?feat[#106]=20:=20=EC=9E=90=EB=8F=99=20?= =?UTF-8?q?=EB=B3=80=ED=99=98=20=ED=86=A0=EA=B8=80=EC=97=90=EC=84=9C=20wri?= =?UTF-8?q?tePage=20=EB=A9=B4=EC=84=9C=20=20contentScript=20inject=20?= =?UTF-8?q?=EC=95=88=EB=90=98=EC=97=88=EC=9D=84=20=EA=B2=BD=EC=9A=B0=20?= =?UTF-8?q?=EC=9E=90=EB=8F=99=20=EC=83=88=EB=A1=9C=EA=B3=A0=EC=B9=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 무한 새로고침 버그가 일어날 일은 없는걸까? --- extension/src/background.ts | 4 ---- .../reference/ui/AutoConvertingToggle.tsx | 17 ++++------------- 2 files changed, 4 insertions(+), 17 deletions(-) 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} />