+
+
-
-
-
-
- {item=> {item.name}}
-
-
-
-
+
)
}
-function Author({author}:{author:ManagedUser}){
+function Author({ author }: { author: ManagedUser }) {
//TODO: onclick and fallback avatar url
return (
-
{if(author.url) openUrl(author.url)}}
- >
-
-
+
+
)
}
-function downloadPackage(cluster: ClusterModel, provider:Provider, version: ManagedVersion, skipCompatibility = false){
+function downloadPackage(cluster: ClusterModel, provider: Provider, version: ManagedVersion, skipCompatibility = false) {
return bindings.core.downloadPackage(provider, version.project_id, version.version_id, cluster.id, skipCompatibility)
}
diff --git a/apps/onelauncher/frontend/src/routes/app/browser/search.tsx b/apps/onelauncher/frontend/src/routes/app/browser/search.tsx
index d02f5caa..e31ffb6a 100644
--- a/apps/onelauncher/frontend/src/routes/app/browser/search.tsx
+++ b/apps/onelauncher/frontend/src/routes/app/browser/search.tsx
@@ -2,8 +2,11 @@ import { PackageGrid } from '@/components/content/PackageItem';
import { useBrowserContext, useBrowserSearch } from '@/hooks/useBrowser';
import { Show } from '@onelauncher/common/components';
import { createFileRoute } from '@tanstack/react-router';
-import { useEffect } from 'react';
+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,
@@ -31,9 +34,39 @@ function Search() {
<>
{
search.data
- ?
+ ?
: Loading
}
>
);
}
+
+function Results({results}:{results:Paginated}){
+ const context = useBrowserContext();
+ 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])
+ return (
+
+
+ {results.items.length == 0
+ ?
No results
+ :
+ }
+
+
+ )
+}
diff --git a/apps/onelauncher/frontend/src/styles/global.css b/apps/onelauncher/frontend/src/styles/global.css
index 06a0ee4a..33ed62d6 100644
--- a/apps/onelauncher/frontend/src/styles/global.css
+++ b/apps/onelauncher/frontend/src/styles/global.css
@@ -29,4 +29,8 @@
mask: linear-gradient(270deg, transparent, black 50%);
background: linear-gradient(270deg, transparent, rgba(0, 0, 0, 0.85) 80%);
-}
\ No newline at end of file
+}
+
+@utility text-trim{
+ text-box: trim-both cap alphabetic
+}