From 314fa2877359f2a9902710b4e4c7e0a7380ed9f5 Mon Sep 17 00:00:00 2001 From: amsyarasyiq <82711525+amsyarasyiq@users.noreply.github.com> Date: Wed, 28 Feb 2024 21:43:55 +0800 Subject: [PATCH] (test) use fuzzysort --- package.json | 1 + pnpm-lock.yaml | 7 +++++++ src/core/ui/components/AddonPage.tsx | 15 ++++++++++++++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index f72a1b4..f8ad616 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ }, "dependencies": { "@swc/helpers": "0.5.0", + "fuzzysort": "^2.0.4", "spitroast": "^1.4.3" }, "pnpm": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0f58f9d..c162e22 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ dependencies: '@swc/helpers': specifier: 0.5.0 version: 0.5.0 + fuzzysort: + specifier: ^2.0.4 + version: 2.0.4 spitroast: specifier: ^1.4.3 version: 1.4.3 @@ -488,6 +491,10 @@ packages: '@esbuild/win32-x64': 0.17.19 dev: true + /fuzzysort@2.0.4: + resolution: {integrity: sha512-Api1mJL+Ad7W7vnDZnWq5pGaXJjyencT+iKGia2PlHUcSsSzWwIQ3S1isiMpwpavjYtGd2FzhUIhnnhOULZgDw==} + dev: false + /invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} dependencies: diff --git a/src/core/ui/components/AddonPage.tsx b/src/core/ui/components/AddonPage.tsx index b3bc533..988bb11 100644 --- a/src/core/ui/components/AddonPage.tsx +++ b/src/core/ui/components/AddonPage.tsx @@ -8,6 +8,7 @@ import { HTTP_REGEX_MULTI } from "@/lib/utils/constants"; import { showInputAlert } from "@ui/alerts"; import { getAssetIDByName } from "@/lib/api/assets"; import { Strings, formatString } from "@/core/i18n"; +import fuzzysort from "fuzzysort"; interface AddonPageProps { title: string; @@ -18,6 +19,18 @@ interface AddonPageProps { card: React.ComponentType>; } +function getItemsByQuery(items: T[], query: string): T[] { + if (!query) return items; + + return fuzzysort.go(query, items, { keys: [ + "id", + "manifest.name", + "manifest.description", + "manifest.authors.0.name", + "manifest.authors.1.name" + ]}).map(r => r.obj); +} + const reanimated = findByProps("useSharedValue"); const { FloatingActionButton } = findByProps("FloatingActionButton"); @@ -52,7 +65,7 @@ export default function AddonPage({ title, fetchFunction, items, safeModeMess onMomentumScrollEnd={() => collapseText.value = 0} style={{ paddingHorizontal: 10, paddingTop: 10 }} contentContainerStyle={{ paddingBottom: 70 }} - data={Object.values(items).filter(i => i.id?.toLowerCase().includes(search))} + data={getItemsByQuery(Object.values(items), search)} renderItem={({ item, index }) => } />