11/**
22 * ProviderCatalog — the browse surface of the add-provider modal: Accounts /
3- * Free / Paid tabs, home (top rows) and browse (search) views , and account
4- * login rows on the Accounts tab. Presentational: presets/usage arrive via
5- * props; view state (tab, query, view ) lives here; selection lifts up.
3+ * Free / Paid tabs over a single searchable scroll list , and account login
4+ * rows on the Accounts tab. Presentational: presets/usage arrive via props;
5+ * view state (tab, query) lives here; selection lifts up.
66 */
7- import { useMemo , useRef , useState } from "react" ;
7+ import { useMemo , useState } from "react" ;
88import { useT } from "../../i18n" ;
99import {
1010 bucketPresets ,
1111 filterPresets ,
1212 type CatalogPreset ,
1313} from "./provider-presets" ;
1414
15- /** How many rows the home view shows per tab before "browse all". */
16- const HOME_SLOT_COUNT = 6 ;
17-
1815export type AccountLoginStatus = { loggedIn : boolean ; email ?: string ; error ?: string } ;
1916export type AccountLoginRow = {
2017 id : string ;
@@ -55,9 +52,7 @@ export default function ProviderCatalog({
5552} ) {
5653 const t = useT ( ) ;
5754 const [ tier , setTier ] = useState < CatalogTier > ( initialTier ) ;
58- const [ view , setView ] = useState < "home" | "browse" > ( "home" ) ;
5955 const [ query , setQuery ] = useState ( "" ) ;
60- const searchRef = useRef < HTMLInputElement > ( null ) ;
6156
6257 const catalog = useMemo ( ( ) => presets . filter ( p => p . id !== "custom" ) , [ presets ] ) ;
6358
@@ -71,15 +66,7 @@ export default function ProviderCatalog({
7166
7267 const buckets = useMemo ( ( ) => bucketPresets ( ranked ) , [ ranked ] ) ;
7368 const tierList = buckets [ tier ] ;
74- const homeList = tierList . slice ( 0 , HOME_SLOT_COUNT ) ;
75- const browseList = useMemo ( ( ) => filterPresets ( tierList , query ) , [ tierList , query ] ) ;
76- const rows = view === "browse" ? browseList : homeList ;
77-
78- const openBrowse = ( ) => {
79- setView ( "browse" ) ;
80- setQuery ( "" ) ;
81- setTimeout ( ( ) => searchRef . current ?. focus ( ) , 0 ) ;
82- } ;
69+ const rows = useMemo ( ( ) => filterPresets ( tierList , query ) , [ tierList , query ] ) ;
8370
8471 const badges = ( p : CatalogPreset ) => {
8572 const auth = p . codexAccountMode === "direct" ? < span className = "badge badge-green" > { t ( "modal.badge.direct" ) } </ span >
@@ -106,7 +93,7 @@ export default function ProviderCatalog({
10693 role = "tab"
10794 aria-selected = { tier === candidate }
10895 className = { `provider-catalog-tab${ tier === candidate ? " active" : "" } ` }
109- onClick = { ( ) => { setTier ( candidate ) ; setView ( "home" ) ; setQuery ( "" ) ; } }
96+ onClick = { ( ) => { setTier ( candidate ) ; setQuery ( "" ) ; } }
11097 >
11198 { t ( candidate === "accounts" ? "modal.tab.accounts" : candidate === "free" ? "modal.tab.free" : "modal.tab.paid" ) }
11299 </ button >
@@ -120,15 +107,12 @@ export default function ProviderCatalog({
120107 </ div >
121108 ) }
122109
123- { view === "browse" && (
124- < input
125- ref = { searchRef }
126- className = "input provider-catalog-search"
127- value = { query }
128- onChange = { e => setQuery ( e . target . value ) }
129- placeholder = { t ( "modal.search" ) }
130- />
131- ) }
110+ < input
111+ className = "input provider-catalog-search"
112+ value = { query }
113+ onChange = { e => setQuery ( e . target . value ) }
114+ placeholder = { t ( "modal.search" ) }
115+ />
132116
133117 < div className = "provider-catalog-rows" >
134118 { presetsLoading && rows . length === 0 && (
@@ -175,12 +159,6 @@ export default function ProviderCatalog({
175159 </ div >
176160
177161 < div className = "provider-catalog-footer" >
178- { view === "home" && tierList . length > HOME_SLOT_COUNT && (
179- < button className = "link-btn" onClick = { openBrowse } > { t ( "modal.browseAll" , { count : tierList . length } ) } </ button >
180- ) }
181- { view === "browse" && (
182- < button className = "link-btn" onClick = { ( ) => { setView ( "home" ) ; setQuery ( "" ) ; } } > { t ( "modal.browseBack" ) } </ button >
183- ) }
184162 < div style = { { flex : 1 } } />
185163 { tier !== "accounts" && (
186164 < button className = "link-btn" onClick = { onSelectCustom } > { t ( "modal.notListed" ) } </ button >
0 commit comments