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 [disables, setDisables] = useState(GM_getValue<SiteItem["name"][]>("disable", DEF_DIS));
|
||||||
const [multipleNavi, setMultipleNavi] = useState(GM_getValue<boolean>("multipleNavi", true));
|
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 (
|
return (
|
||||||
<>
|
<>
|
||||||
<div class="jop-list">
|
<div class="jop-list">
|
||||||
{siteList
|
{list.map((siteItem) => (
|
||||||
.filter(
|
<SiteBtn
|
||||||
(siteItem) =>
|
siteItem={siteItem}
|
||||||
!disables.includes(siteItem.name) && libItem.name !== siteItem.disableLibItemName,
|
CODE={CODE}
|
||||||
)
|
key={siteItem.name}
|
||||||
.map((siteItem) => (
|
multipleNavi={multipleNavi}
|
||||||
<SiteBtn
|
hiddenError={hiddenError}
|
||||||
siteItem={siteItem}
|
/>
|
||||||
CODE={CODE}
|
))}
|
||||||
key={siteItem.name}
|
|
||||||
multipleNavi={multipleNavi}
|
|
||||||
/>
|
|
||||||
))}
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<Setting
|
<Setting
|
||||||
@@ -44,6 +45,11 @@ const App = memo(function ({ libItem, CODE }: { libItem: LibItem; CODE: string }
|
|||||||
GM_setValue("multipleNavi", multipleNavi);
|
GM_setValue("multipleNavi", multipleNavi);
|
||||||
}}
|
}}
|
||||||
disables={disables}
|
disables={disables}
|
||||||
|
hiddenError={hiddenError}
|
||||||
|
setHiddenError={(v) => {
|
||||||
|
setHiddenError(v);
|
||||||
|
GM_setValue("hiddenError", v);
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -9,9 +9,19 @@ type Props = {
|
|||||||
disables: SiteItem["name"][];
|
disables: SiteItem["name"][];
|
||||||
multipleNavi: boolean;
|
multipleNavi: boolean;
|
||||||
setMultipleNavi: Dispatch<StateUpdater<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 [showSetting, setShowSetting] = useState(true);
|
||||||
|
|
||||||
const hanleListChange = (item: SiteItem, isHidden: boolean) => {
|
const hanleListChange = (item: SiteItem, isHidden: boolean) => {
|
||||||
@@ -27,6 +37,10 @@ const Setting = ({ siteList, setDisables, disables, multipleNavi, setMultipleNav
|
|||||||
GM_setValue("multipleNavi", checked);
|
GM_setValue("multipleNavi", checked);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handlehiddenErrorChange = (checked: boolean) => {
|
||||||
|
setHiddenError(checked);
|
||||||
|
GM_setValue("hiddenError", checked);
|
||||||
|
};
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{!showSetting && (
|
{!showSetting && (
|
||||||
@@ -58,7 +72,11 @@ const Setting = ({ siteList, setDisables, disables, multipleNavi, setMultipleNav
|
|||||||
tip="一个站点内出现多条匹配结果时,打开后跳转搜索结果页"
|
tip="一个站点内出现多条匹配结果时,打开后跳转搜索结果页"
|
||||||
onChange={handleNaviChange}
|
onChange={handleNaviChange}
|
||||||
/>
|
/>
|
||||||
{/* <Checkbox label="简洁模式" value={true} onChange={() => {}} /> */}
|
<Checkbox
|
||||||
|
label="隐藏失败结果"
|
||||||
|
value={hiddenError}
|
||||||
|
onChange={handlehiddenErrorChange}
|
||||||
|
/>
|
||||||
</Group>
|
</Group>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -1,53 +1,42 @@
|
|||||||
import { fetcher } from "@/utils/xhr";
|
import { fetcher, FetchResult } from "@/utils/xhr";
|
||||||
import { SiteItem } from "@/utils/siteList";
|
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 = {
|
type Props = {
|
||||||
siteItem: SiteItem;
|
siteItem: SiteItem;
|
||||||
CODE: string;
|
CODE: string;
|
||||||
multipleNavi?: boolean;
|
multipleNavi?: boolean;
|
||||||
|
hiddenError?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
const SiteBtn = memo(({ siteItem, CODE, multipleNavi }: Props) => {
|
const SiteBtn = ({ siteItem, CODE, multipleNavi, hiddenError }: Props) => {
|
||||||
const { name, codeFormater } = siteItem;
|
const { name, codeFormater } = siteItem;
|
||||||
/** 格式化 CODE */
|
/** 格式化 CODE */
|
||||||
const formatCode = codeFormater ? codeFormater(CODE) : CODE;
|
const formatCode = codeFormater ? codeFormater(CODE) : CODE;
|
||||||
const link = siteItem.url.replace("{{code}}", formatCode);
|
const link = siteItem.url.replace("{{code}}", formatCode);
|
||||||
|
|
||||||
const [status, setStatus] = useState<Status>({
|
const [loading, setLoading] = useState(false);
|
||||||
isSuccess: "pedding",
|
const [fetchRes, setFetchRes] = useState<FetchResult>();
|
||||||
tag: "",
|
|
||||||
resultLink: "",
|
|
||||||
});
|
|
||||||
const { isSuccess, tag, resultLink } = status;
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
setLoading(true);
|
||||||
fetcher({ siteItem, targetLink: link, CODE: formatCode }).then((res) => {
|
fetcher({ siteItem, targetLink: link, CODE: formatCode }).then((res) => {
|
||||||
const resultLink = multipleNavi && res.multipleRes ? res.multipResLink : res.targetLink;
|
setFetchRes(res);
|
||||||
|
setLoading(false);
|
||||||
setStatus({
|
|
||||||
isSuccess: res.isSuccess ? "fulfilled" : "rejected",
|
|
||||||
tag: multipleNavi && res.multipleRes ? "多结果" : res.tag,
|
|
||||||
resultLink,
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}, [fetcher, siteItem, CODE, link, multipleNavi]);
|
}, [fetcher, siteItem, CODE, link]);
|
||||||
|
|
||||||
const colorClass =
|
const tag = multipleNavi && fetchRes?.multipleRes ? "多结果" : fetchRes?.tag;
|
||||||
isSuccess === "pedding"
|
const resultLink = fetchRes?.multipleRes ? fetchRes.multipResLink : fetchRes?.targetLink;
|
||||||
? " "
|
|
||||||
: isSuccess === "fulfilled"
|
|
||||||
? "jop-button_green "
|
|
||||||
: "jop-button_red ";
|
|
||||||
|
|
||||||
|
const colorClass = fetchRes?.isSuccess ? "jop-button_green " : "jop-button_red ";
|
||||||
|
|
||||||
|
if (hiddenError && !fetchRes?.isSuccess) {
|
||||||
|
return <></>;
|
||||||
|
}
|
||||||
return (
|
return (
|
||||||
<a
|
<a
|
||||||
className={"jop-button " + colorClass}
|
className={"jop-button " + (loading ? " " : colorClass)}
|
||||||
target="_blank"
|
target="_blank"
|
||||||
href={resultLink === "" ? link : resultLink}
|
href={resultLink === "" ? link : resultLink}
|
||||||
>
|
>
|
||||||
@@ -58,6 +47,6 @@ const SiteBtn = memo(({ siteItem, CODE, multipleNavi }: Props) => {
|
|||||||
<span>{name}</span>
|
<span>{name}</span>
|
||||||
</a>
|
</a>
|
||||||
);
|
);
|
||||||
});
|
};
|
||||||
|
|
||||||
export default SiteBtn;
|
export default SiteBtn;
|
||||||
|
|||||||
@@ -32,10 +32,7 @@ interface SiteItemBase {
|
|||||||
/** [废弃] 用户定义的 disable */
|
/** [废弃] 用户定义的 disable */
|
||||||
// disable: boolean;
|
// disable: boolean;
|
||||||
|
|
||||||
/** 在指定 LibItem.name 下不显示
|
/** 在指定 LibItem.name 下不显示 */
|
||||||
* 点名:都是针对的 matchList 里的三个,防止出现自己检索自己站。
|
|
||||||
*/
|
|
||||||
disableLibItemName?: string;
|
|
||||||
|
|
||||||
hostname: string;
|
hostname: string;
|
||||||
url: string;
|
url: string;
|
||||||
@@ -277,7 +274,6 @@ export const siteList: SiteItem[] = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "JavBus",
|
name: "JavBus",
|
||||||
disableLibItemName: "javbus",
|
|
||||||
hostname: "javbus.com",
|
hostname: "javbus.com",
|
||||||
url: "https://javbus.com/{{code}}",
|
url: "https://javbus.com/{{code}}",
|
||||||
fetchType: "get",
|
fetchType: "get",
|
||||||
@@ -286,7 +282,6 @@ export const siteList: SiteItem[] = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "JavDB",
|
name: "JavDB",
|
||||||
disableLibItemName: "javdb",
|
|
||||||
hostname: "javdb.com",
|
hostname: "javdb.com",
|
||||||
url: "https://javdb.com/search?q={{code}}",
|
url: "https://javdb.com/search?q={{code}}",
|
||||||
fetchType: "parser",
|
fetchType: "parser",
|
||||||
@@ -297,7 +292,6 @@ export const siteList: SiteItem[] = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "JAVLib",
|
name: "JAVLib",
|
||||||
disableLibItemName: "javlib",
|
|
||||||
hostname: "javlibrary.com",
|
hostname: "javlibrary.com",
|
||||||
url: "https://www.javlibrary.com/cn/vl_searchbyid.php?keyword={{code}}",
|
url: "https://www.javlibrary.com/cn/vl_searchbyid.php?keyword={{code}}",
|
||||||
fetchType: "parser",
|
fetchType: "parser",
|
||||||
|
|||||||
Reference in New Issue
Block a user