This commit is contained in:
2025-02-09 22:52:50 +02:00
parent 1f7ece6265
commit 2b02a96daa
2 changed files with 19 additions and 14 deletions

View File

@@ -1,4 +1,4 @@
import { useEffect, useMemo, useState } from 'react';
import { useCallback, useEffect, useMemo, useState } from 'react';
import { CategoryDefinition } from '~/types';
async function getCategories(): Promise<CategoryDefinition[]> {
@@ -13,5 +13,17 @@ export function useCategories() {
}, []);
const apps = useMemo(() => categories.flatMap((c) => c.apps), [categories]);
return { categories, apps };
const filteredApps = useCallback(
(term: string) =>
apps?.filter(
({ name, url }) =>
name.toLowerCase().includes(term.toLowerCase()) ||
url.toLowerCase().includes(term.toLowerCase())
) ?? [],
[apps]
);
return { categories, apps, filteredApps };
}

View File

@@ -14,7 +14,7 @@ import { useLoadingTimeout } from '~/hooks/use-loading-timeout';
import style from './index-page.module.css';
export function IndexPage() {
const { categories, apps } = useCategories();
const { categories, apps, filteredApps } = useCategories();
const searchProviders = useSearchProviders();
const { showImageDetails } = useAtomValue(settingsAtom);
@@ -28,17 +28,10 @@ export function IndexPage() {
const { activeCategory: activeCategoryName, selectCategory, resetCategory } = useActiveCategory();
const activeCategory = categories?.find((c) => c.name === activeCategoryName);
const searchResults = useMemo(() => {
if (!shouldSearchLocally || !apps) {
return [];
}
return apps.filter(
({ name, url }) =>
name.toLowerCase().includes(searchTerm.toLowerCase()) ||
url.toLowerCase().includes(searchTerm.toLowerCase())
);
}, [apps, searchTerm, shouldSearchLocally]);
const searchResults = useMemo(
() => (shouldSearchLocally ? filteredApps(searchTerm) : []),
[searchTerm, shouldSearchLocally, filteredApps]
);
useEffect(() => {
parent.addEventListener('keydown', handleKeypress);