feat: hidden error result
This commit is contained in:
@@ -13,23 +13,24 @@ const App = memo(function ({ libItem, CODE }: { libItem: LibItem; CODE: string }
|
||||
];
|
||||
const [disables, setDisables] = useState(GM_getValue<SiteItem["name"][]>("disable", DEF_DIS));
|
||||
const [multipleNavi, setMultipleNavi] = useState(GM_getValue<boolean>("multipleNavi", true));
|
||||
const [hiddenError, setHiddenError] = useState(GM_getValue<boolean>("hiddenError", false));
|
||||
|
||||
const list = siteList.filter(
|
||||
(siteItem) => !disables.includes(siteItem.name) && !siteItem.hostname.includes(libItem.name),
|
||||
);
|
||||
|
||||
return (
|
||||
<>
|
||||
<div class="jop-list">
|
||||
{siteList
|
||||
.filter(
|
||||
(siteItem) =>
|
||||
!disables.includes(siteItem.name) && libItem.name !== siteItem.disableLibItemName,
|
||||
)
|
||||
.map((siteItem) => (
|
||||
<SiteBtn
|
||||
siteItem={siteItem}
|
||||
CODE={CODE}
|
||||
key={siteItem.name}
|
||||
multipleNavi={multipleNavi}
|
||||
/>
|
||||
))}
|
||||
{list.map((siteItem) => (
|
||||
<SiteBtn
|
||||
siteItem={siteItem}
|
||||
CODE={CODE}
|
||||
key={siteItem.name}
|
||||
multipleNavi={multipleNavi}
|
||||
hiddenError={hiddenError}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
|
||||
<Setting
|
||||
@@ -44,6 +45,11 @@ const App = memo(function ({ libItem, CODE }: { libItem: LibItem; CODE: string }
|
||||
GM_setValue("multipleNavi", multipleNavi);
|
||||
}}
|
||||
disables={disables}
|
||||
hiddenError={hiddenError}
|
||||
setHiddenError={(v) => {
|
||||
setHiddenError(v);
|
||||
GM_setValue("hiddenError", v);
|
||||
}}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
|
||||
@@ -9,9 +9,19 @@ type Props = {
|
||||
disables: SiteItem["name"][];
|
||||
multipleNavi: boolean;
|
||||
setMultipleNavi: Dispatch<StateUpdater<boolean>>;
|
||||
hiddenError: boolean;
|
||||
setHiddenError: Dispatch<StateUpdater<boolean>>;
|
||||
};
|
||||
|
||||
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}
|
||||
/>
|
||||
{/* <Checkbox label="简洁模式" value={true} onChange={() => {}} /> */}
|
||||
<Checkbox
|
||||
label="隐藏失败结果"
|
||||
value={hiddenError}
|
||||
onChange={handlehiddenErrorChange}
|
||||
/>
|
||||
</Group>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -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<Status>({
|
||||
isSuccess: "pedding",
|
||||
tag: "",
|
||||
resultLink: "",
|
||||
});
|
||||
const { isSuccess, tag, resultLink } = status;
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [fetchRes, setFetchRes] = useState<FetchResult>();
|
||||
|
||||
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 (
|
||||
<a
|
||||
className={"jop-button " + colorClass}
|
||||
className={"jop-button " + (loading ? " " : colorClass)}
|
||||
target="_blank"
|
||||
href={resultLink === "" ? link : resultLink}
|
||||
>
|
||||
@@ -58,6 +47,6 @@ const SiteBtn = memo(({ siteItem, CODE, multipleNavi }: Props) => {
|
||||
<span>{name}</span>
|
||||
</a>
|
||||
);
|
||||
});
|
||||
};
|
||||
|
||||
export default SiteBtn;
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user