From 3119e0ed37c11f4b6f252d3932dcd42e0690cdef Mon Sep 17 00:00:00 2001 From: pompurin404 Date: Thu, 12 Sep 2024 12:10:34 +0800 Subject: [PATCH] filter ignore case #154 --- changelog.md | 1 + src/renderer/src/pages/connections.tsx | 3 ++- src/renderer/src/pages/logs.tsx | 3 ++- src/renderer/src/pages/proxies.tsx | 3 ++- src/renderer/src/pages/rules.tsx | 5 ++++- src/renderer/src/utils/includes.ts | 3 +++ 6 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 src/renderer/src/utils/includes.ts diff --git a/changelog.md b/changelog.md index 63c3e30..4385a8d 100644 --- a/changelog.md +++ b/changelog.md @@ -7,6 +7,7 @@ - 代理组图标支持SVG格式 - 优化覆写启用逻辑 - 覆写支持全局启用 +- 筛选过滤忽略大小写 ### Bug Fixes diff --git a/src/renderer/src/pages/connections.tsx b/src/renderer/src/pages/connections.tsx index 4d81c17..44de7f4 100644 --- a/src/renderer/src/pages/connections.tsx +++ b/src/renderer/src/pages/connections.tsx @@ -10,6 +10,7 @@ import ConnectionDetailModal from '@renderer/components/connections/connection-d import { CgClose } from 'react-icons/cg' import { useAppConfig } from '@renderer/hooks/use-app-config' import { HiSortAscending, HiSortDescending } from 'react-icons/hi' +import { includesIgnoreCase } from '@renderer/utils/includes' let preData: IMihomoConnectionDetail[] = [] @@ -57,7 +58,7 @@ const Connections: React.FC = () => { if (filter === '') return connections return connections?.filter((connection) => { const raw = JSON.stringify(connection) - return raw.includes(filter) + return includesIgnoreCase(raw, filter) }) }, [connections, filter, connectionDirection, connectionOrderBy]) diff --git a/src/renderer/src/pages/logs.tsx b/src/renderer/src/pages/logs.tsx index 6b12ef9..3ea0f13 100644 --- a/src/renderer/src/pages/logs.tsx +++ b/src/renderer/src/pages/logs.tsx @@ -4,6 +4,7 @@ import { useEffect, useMemo, useRef, useState } from 'react' import { Button, Divider, Input } from '@nextui-org/react' import { Virtuoso, VirtuosoHandle } from 'react-virtuoso' import { IoLocationSharp } from 'react-icons/io5' +import { includesIgnoreCase } from '@renderer/utils/includes' const Logs: React.FC = () => { const [logs, setLogs] = useState([]) @@ -14,7 +15,7 @@ const Logs: React.FC = () => { const filteredLogs = useMemo(() => { if (filter === '') return logs return logs.filter((log) => { - return log.payload.includes(filter) || log.type.includes(filter) + return includesIgnoreCase(log.payload, filter) || includesIgnoreCase(log.type, filter) }) }, [logs, filter]) diff --git a/src/renderer/src/pages/proxies.tsx b/src/renderer/src/pages/proxies.tsx index b65f754..5109a5c 100644 --- a/src/renderer/src/pages/proxies.tsx +++ b/src/renderer/src/pages/proxies.tsx @@ -18,6 +18,7 @@ import { IoIosArrowBack } from 'react-icons/io' import { MdOutlineSpeed } from 'react-icons/md' import { useGroups } from '@renderer/hooks/use-groups' import CollapseInput from '@renderer/components/base/collapse-input' +import { includesIgnoreCase } from '@renderer/utils/includes' const Proxies: React.FC = () => { const { groups = [], mutate } = useGroups() @@ -40,7 +41,7 @@ const Proxies: React.FC = () => { groups.forEach((group, index) => { if (isOpen[index]) { let groupProxies = group.all.filter((proxy) => - proxy.name.toLowerCase().includes(searchValue[index].toLowerCase()) + includesIgnoreCase(proxy.name, searchValue[index]) ) const count = Math.floor(groupProxies.length / cols) groupCounts.push(groupProxies.length % cols === 0 ? count : count + 1) diff --git a/src/renderer/src/pages/rules.tsx b/src/renderer/src/pages/rules.tsx index 2c56193..b189f1d 100644 --- a/src/renderer/src/pages/rules.tsx +++ b/src/renderer/src/pages/rules.tsx @@ -4,6 +4,7 @@ import { Virtuoso } from 'react-virtuoso' import { useMemo, useState } from 'react' import { Divider, Input } from '@nextui-org/react' import { useRules } from '@renderer/hooks/use-rules' +import { includesIgnoreCase } from '@renderer/utils/includes' const Rules: React.FC = () => { const { rules } = useRules() @@ -14,7 +15,9 @@ const Rules: React.FC = () => { if (filter === '') return rules.rules return rules.rules.filter((rule) => { return ( - rule.payload.includes(filter) || rule.type.includes(filter) || rule.proxy.includes(filter) + includesIgnoreCase(rule.payload, filter) || + includesIgnoreCase(rule.type, filter) || + includesIgnoreCase(rule.proxy, filter) ) }) }, [rules, filter]) diff --git a/src/renderer/src/utils/includes.ts b/src/renderer/src/utils/includes.ts new file mode 100644 index 0000000..d5fda1e --- /dev/null +++ b/src/renderer/src/utils/includes.ts @@ -0,0 +1,3 @@ +export function includesIgnoreCase(mainStr: string = '', subStr: string = ''): boolean { + return mainStr.toLowerCase().includes(subStr.toLowerCase()) +}