From de0632748e64acf03f65d800b600239e35b0a208 Mon Sep 17 00:00:00 2001 From: snehasish Date: Wed, 23 Sep 2026 05:04:25 +0000 Subject: [PATCH] feat(mobile): improve model picker header, banner and filter toggles --- .../[projectId]/[sessionId]/models.tsx | 224 +++++++++++++----- 1 file changed, 169 insertions(+), 55 deletions(-) diff --git a/apps/mobile/app/project/[projectId]/[sessionId]/models.tsx b/apps/mobile/app/project/[projectId]/[sessionId]/models.tsx index 6a942d2..ad6ebcf 100644 --- a/apps/mobile/app/project/[projectId]/[sessionId]/models.tsx +++ b/apps/mobile/app/project/[projectId]/[sessionId]/models.tsx @@ -71,6 +71,8 @@ export default function ModelsPage() { const [search, setSearch] = useState("") const [statusFilter, setStatusFilter] = useState("active") const [sort, setSort] = useState("name") + const [filterOpen, setFilterOpen] = useState(false) + const [sortOpen, setSortOpen] = useState(false) const [selectedId, setSelectedId] = useState(currentModelId ?? "") const [selectedProviderId, setSelectedProviderId] = useState(currentProviderId ?? "") const updatingRef = useRef(null) @@ -84,6 +86,11 @@ export default function ModelsPage() { return map }, [providers]) + const currentModel = useMemo( + () => models.find((m) => m.id === selectedId && m.providerID === selectedProviderId) ?? null, + [models, selectedId, selectedProviderId] + ) + useEffect(() => { if (connection) fetchAll(connection.url, connection.token) }, [connection?.id, fetchAll]) @@ -244,17 +251,83 @@ export default function ModelsPage() { Select Model - {selectedId ? ( - - - {providerMap[selectedProviderId] ?? selectedProviderId} - {selectedId ? ` / ${selectedId}` : ""} + + {filtered.length} models + + + + + + + + + + Current model + + {currentModel ? ( + <> + + {currentModel.name} + + + {providerMap[currentModel.providerID] ?? currentModel.providerID} + {currentModel.family ? ` ยท ${currentModel.family}` : ""} + + + ) : ( + + No model selected + + )} + + {currentModel && ( + + + {currentModel.status} - ) : null} + )} - + @@ -269,64 +342,105 @@ export default function ModelsPage() { clearButtonMode="while-editing" /> + setFilterOpen((v) => !v)} + accessible + accessibilityRole="button" + accessibilityLabel="Toggle filters" + accessibilityHint="Shows or hides filter options" + accessibilityState={{ expanded: filterOpen, selected: filterOpen }} + className={cn( + "w-11 h-11 rounded-full border items-center justify-center", + filterOpen ? "bg-primary/10 border-primary" : "border-border" + )} + > + + + setSortOpen((v) => !v)} + accessible + accessibilityRole="button" + accessibilityLabel="Toggle sort options" + accessibilityHint="Shows or hides sort options" + accessibilityState={{ expanded: sortOpen, selected: sortOpen }} + className={cn( + "w-11 h-11 rounded-full border items-center justify-center", + sortOpen ? "bg-primary/10 border-primary" : "border-border" + )} + > + + - - - Filter: - {STATUS_OPTIONS.map((opt) => ( - setStatusFilter(opt.value)} - > - + Filter: + {STATUS_OPTIONS.map((opt) => ( + setStatusFilter(opt.value)} > - {opt.label} - - - ))} - + + {opt.label} + + + ))} + + )} - - - Sort: - {SORT_OPTIONS.map((opt) => ( - setSort(opt.value)} - > - + Sort: + {SORT_OPTIONS.map((opt) => ( + setSort(opt.value)} > - {opt.label} - - - ))} - - {filtered.length} models - - + + {opt.label} + + + ))} + + )} {models.length === 0 ? (