From eb81d247949e220483f74beb83a1c5e31e7d2865 Mon Sep 17 00:00:00 2001 From: Szedann <65607498+Szedann@users.noreply.github.com> Date: Sun, 20 Jul 2025 18:07:19 +0200 Subject: [PATCH] feat: packageitem loader icons (WIP) --- .../src/components/content/PackageItem.tsx | 10 +++- .../src/routes/app/browser/search.tsx | 51 +++++++++---------- 2 files changed, 34 insertions(+), 27 deletions(-) diff --git a/apps/onelauncher/frontend/src/components/content/PackageItem.tsx b/apps/onelauncher/frontend/src/components/content/PackageItem.tsx index a3a9d522..69fa3a53 100644 --- a/apps/onelauncher/frontend/src/components/content/PackageItem.tsx +++ b/apps/onelauncher/frontend/src/components/content/PackageItem.tsx @@ -1,8 +1,13 @@ import type { Provider, SearchResult } from '@/bindings.gen'; -import { abbreviateNumber } from '@/utils'; +import { abbreviateNumber, LOADERS } from '@/utils'; import { Show } from '@onelauncher/common/components'; import { useNavigate } from '@tanstack/react-router'; import { Download01Icon } from '@untitled-theme/icons-react'; +import LoaderIcon from '../launcher/LoaderIcon'; + +function includes(list: { includes: (arg0: TArray) => boolean }, element: T): element is TArray { + return list.includes(element as unknown as TArray); +} export function PackageGrid({ items, provider }: { items: Array; provider: Provider }) { return ( @@ -44,6 +49,9 @@ export function PackageItem({ provider, ...item }: SearchResult & { provider: Pr src={item.icon_url} /> +
+ {item.categories.filter(cat => includes(LOADERS, cat)).map(loader => )} +
diff --git a/apps/onelauncher/frontend/src/routes/app/browser/search.tsx b/apps/onelauncher/frontend/src/routes/app/browser/search.tsx index e31ffb6a..cb84e9b1 100644 --- a/apps/onelauncher/frontend/src/routes/app/browser/search.tsx +++ b/apps/onelauncher/frontend/src/routes/app/browser/search.tsx @@ -1,12 +1,12 @@ +import type { Paginated, SearchResult } from '@/bindings.gen'; +import type { PaginationOptions } from '@/hooks/usePagination'; import { PackageGrid } from '@/components/content/PackageItem'; import { useBrowserContext, useBrowserSearch } from '@/hooks/useBrowser'; +import usePagination from '@/hooks/usePagination'; import { Show } from '@onelauncher/common/components'; import { createFileRoute } from '@tanstack/react-router'; import { useEffect, useMemo, useState } from 'react'; import { BrowserLayout } from './route'; -import type { Paginated, SearchResult } from '@/bindings.gen'; -import type { PaginationOptions } from '@/hooks/usePagination'; -import usePagination from '@/hooks/usePagination'; export const Route = createFileRoute('/app/browser/search')({ component: RouteComponent, @@ -33,40 +33,39 @@ function Search() { return ( <> { - search.data - ? - :

Loading

+ search.data + ? + :

Loading

} ); } -function Results({results}:{results:Paginated}){ +function Results({ results }: { results: Paginated }) { const context = useBrowserContext(); - const [oldTotal, setOldTotal] = useState(results.total) + const [oldTotal, setOldTotal] = useState(results.total); const pagination = usePagination({ itemsCount: results.total as unknown as number, - itemsPerPage: context.query.limit as unknown as number - }) - useEffect(()=>{ - context.setQuery({...context.query, offset: pagination.offset as unknown as bigint}) - },[pagination.page]) - useEffect(()=>{ - if(oldTotal === results.total) return; - pagination.reset() - console.log("pagination reset", results.total) - setOldTotal(results.total) - },[results.total]) + itemsPerPage: context.query.limit as unknown as number, + }); + useEffect(() => { + context.setQuery({ ...context.query, offset: pagination.offset as unknown as bigint }); + }, [pagination.page]); + useEffect(() => { + if (oldTotal === results.total) + return; + pagination.reset(); + setOldTotal(results.total); + }, [results.total]); return (
-
- +
+
- {results.items.length == 0 - ?

No results

- : - } + {results.items.length === 0 + ?

No results

+ : }
- ) + ); }