12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- import { useMemo } from "react";
- import delayManager from "@/services/delay";
- const regex1 = /delay([=<>])(\d+|timeout|error)/i;
- const regex2 = /type=(.*)/i;
- /**
- * filter the proxy
- * according to the regular conditions
- */
- export default function useFilterProxy(
- proxies: ApiType.ProxyItem[],
- groupName: string,
- filterText: string
- ) {
- return useMemo(() => {
- if (!proxies) return [];
- if (!filterText) return proxies;
- const res1 = regex1.exec(filterText);
- if (res1) {
- const symbol = res1[1];
- const symbol2 = res1[2].toLowerCase();
- const value =
- symbol2 === "error" ? 1e5 : symbol2 === "timeout" ? 3000 : +symbol2;
- return proxies.filter((p) => {
- const delay = delayManager.getDelay(p.name, groupName);
- if (delay < 0) return false;
- if (symbol === "=" && symbol2 === "error") return delay >= 1e5;
- if (symbol === "=" && symbol2 === "timeout")
- return delay < 1e5 && delay >= 3000;
- if (symbol === "=") return delay == value;
- if (symbol === "<") return delay <= value;
- if (symbol === ">") return delay >= value;
- return false;
- });
- }
- const res2 = regex2.exec(filterText);
- if (res2) {
- const type = res2[1].toLowerCase();
- return proxies.filter((p) => p.type.toLowerCase().includes(type));
- }
- return proxies.filter((p) => p.name.includes(filterText.trim()));
- }, [proxies, groupName, filterText]);
- }
|