From 7e3044a0cf569097e472517dd4e9014dd7f36b6b Mon Sep 17 00:00:00 2001 From: mrbunker Date: Sat, 21 Sep 2024 17:56:26 +0800 Subject: [PATCH] feat: hidden error result --- src/components/App.tsx | 32 +++++++++++++++---------- src/components/Setting.tsx | 22 +++++++++++++++-- src/components/SiteBtn.tsx | 49 +++++++++++++++----------------------- src/utils/siteList.ts | 8 +------ 4 files changed, 59 insertions(+), 52 deletions(-) diff --git a/src/components/App.tsx b/src/components/App.tsx index 6df77a4..4335c5a 100644 --- a/src/components/App.tsx +++ b/src/components/App.tsx @@ -13,23 +13,24 @@ const App = memo(function ({ libItem, CODE }: { libItem: LibItem; CODE: string } ]; const [disables, setDisables] = useState(GM_getValue("disable", DEF_DIS)); const [multipleNavi, setMultipleNavi] = useState(GM_getValue("multipleNavi", true)); + const [hiddenError, setHiddenError] = useState(GM_getValue("hiddenError", false)); + + const list = siteList.filter( + (siteItem) => !disables.includes(siteItem.name) && !siteItem.hostname.includes(libItem.name), + ); return ( <>
- {siteList - .filter( - (siteItem) => - !disables.includes(siteItem.name) && libItem.name !== siteItem.disableLibItemName, - ) - .map((siteItem) => ( - - ))} + {list.map((siteItem) => ( + + ))}
{ + setHiddenError(v); + GM_setValue("hiddenError", v); + }} /> ); diff --git a/src/components/Setting.tsx b/src/components/Setting.tsx index 9b7459e..d56c133 100644 --- a/src/components/Setting.tsx +++ b/src/components/Setting.tsx @@ -9,9 +9,19 @@ type Props = { disables: SiteItem["name"][]; multipleNavi: boolean; setMultipleNavi: Dispatch>; + hiddenError: boolean; + setHiddenError: Dispatch>; }; -const Setting = ({ siteList, setDisables, disables, multipleNavi, setMultipleNavi }: Props) => { +const Setting = ({ + siteList, + setDisables, + disables, + multipleNavi, + setMultipleNavi, + hiddenError, + setHiddenError, +}: Props) => { const [showSetting, setShowSetting] = useState(true); const hanleListChange = (item: SiteItem, isHidden: boolean) => { @@ -27,6 +37,10 @@ const Setting = ({ siteList, setDisables, disables, multipleNavi, setMultipleNav GM_setValue("multipleNavi", checked); }; + const handlehiddenErrorChange = (checked: boolean) => { + setHiddenError(checked); + GM_setValue("hiddenError", checked); + }; return ( <> {!showSetting && ( @@ -58,7 +72,11 @@ const Setting = ({ siteList, setDisables, disables, multipleNavi, setMultipleNav tip="一个站点内出现多条匹配结果时,打开后跳转搜索结果页" onChange={handleNaviChange} /> - {/* {}} /> */} + diff --git a/src/components/SiteBtn.tsx b/src/components/SiteBtn.tsx index 13061c9..4fe7b19 100644 --- a/src/components/SiteBtn.tsx +++ b/src/components/SiteBtn.tsx @@ -1,53 +1,42 @@ -import { fetcher } from "@/utils/xhr"; +import { fetcher, FetchResult } from "@/utils/xhr"; import { SiteItem } from "@/utils/siteList"; -import { memo, useEffect, useState } from "preact/compat"; +import { useEffect, useState } from "preact/compat"; -interface Status { - isSuccess: "pedding" | "rejected" | "fulfilled"; - resultLink?: string; - tag?: string; -} type Props = { siteItem: SiteItem; CODE: string; multipleNavi?: boolean; + hiddenError?: boolean; }; -const SiteBtn = memo(({ siteItem, CODE, multipleNavi }: Props) => { +const SiteBtn = ({ siteItem, CODE, multipleNavi, hiddenError }: Props) => { const { name, codeFormater } = siteItem; /** 格式化 CODE */ const formatCode = codeFormater ? codeFormater(CODE) : CODE; const link = siteItem.url.replace("{{code}}", formatCode); - const [status, setStatus] = useState({ - isSuccess: "pedding", - tag: "", - resultLink: "", - }); - const { isSuccess, tag, resultLink } = status; + const [loading, setLoading] = useState(false); + const [fetchRes, setFetchRes] = useState(); useEffect(() => { + setLoading(true); fetcher({ siteItem, targetLink: link, CODE: formatCode }).then((res) => { - const resultLink = multipleNavi && res.multipleRes ? res.multipResLink : res.targetLink; - - setStatus({ - isSuccess: res.isSuccess ? "fulfilled" : "rejected", - tag: multipleNavi && res.multipleRes ? "多结果" : res.tag, - resultLink, - }); + setFetchRes(res); + setLoading(false); }); - }, [fetcher, siteItem, CODE, link, multipleNavi]); + }, [fetcher, siteItem, CODE, link]); - const colorClass = - isSuccess === "pedding" - ? " " - : isSuccess === "fulfilled" - ? "jop-button_green " - : "jop-button_red "; + const tag = multipleNavi && fetchRes?.multipleRes ? "多结果" : fetchRes?.tag; + const resultLink = fetchRes?.multipleRes ? fetchRes.multipResLink : fetchRes?.targetLink; + const colorClass = fetchRes?.isSuccess ? "jop-button_green " : "jop-button_red "; + + if (hiddenError && !fetchRes?.isSuccess) { + return <>; + } return ( @@ -58,6 +47,6 @@ const SiteBtn = memo(({ siteItem, CODE, multipleNavi }: Props) => { {name} ); -}); +}; export default SiteBtn; diff --git a/src/utils/siteList.ts b/src/utils/siteList.ts index 4682190..4046f94 100644 --- a/src/utils/siteList.ts +++ b/src/utils/siteList.ts @@ -32,10 +32,7 @@ interface SiteItemBase { /** [废弃] 用户定义的 disable */ // disable: boolean; - /** 在指定 LibItem.name 下不显示 - * 点名:都是针对的 matchList 里的三个,防止出现自己检索自己站。 - */ - disableLibItemName?: string; + /** 在指定 LibItem.name 下不显示 */ hostname: string; url: string; @@ -277,7 +274,6 @@ export const siteList: SiteItem[] = [ }, { name: "JavBus", - disableLibItemName: "javbus", hostname: "javbus.com", url: "https://javbus.com/{{code}}", fetchType: "get", @@ -286,7 +282,6 @@ export const siteList: SiteItem[] = [ }, { name: "JavDB", - disableLibItemName: "javdb", hostname: "javdb.com", url: "https://javdb.com/search?q={{code}}", fetchType: "parser", @@ -297,7 +292,6 @@ export const siteList: SiteItem[] = [ }, { name: "JAVLib", - disableLibItemName: "javlib", hostname: "javlibrary.com", url: "https://www.javlibrary.com/cn/vl_searchbyid.php?keyword={{code}}", fetchType: "parser",