@@ -33,9 +33,10 @@ import type {
3333 IdeConfigRemote ,
3434 IdeConfig ,
3535 McpServerItem ,
36- McpServerPackage ,
36+ McpServerPkg ,
3737 McpServerRemote ,
3838 StackItem ,
39+ StackCtrl ,
3940} from '~/lib/types' ;
4041// import { initOrama, queryOrama, upsertServers } from '~/lib/orama';
4142
@@ -160,42 +161,38 @@ export default function App() {
160161 localStorage . setItem ( 'mcp-registry-stack' , JSON . stringify ( stack ) ) ;
161162 } , [ stack ] ) ;
162163
163- const addToStack = (
164- serverName : string ,
165- type : 'remote' | 'package' ,
166- data : McpServerPackage | McpServerRemote ,
167- index : number ,
168- ideConfig ?: IdeConfig
169- ) => {
170- // const stackKey = `${serverName}-${type}-${index}`;
171- const existingItem = stack . find (
172- ( item ) => item . serverName === serverName && item . type === type && item . index === index
173- ) ;
174- if ( existingItem ) {
175- // If an ideConfig is provided, update the existing item's config
176- if ( ideConfig ) {
177- setStack ( ( prev ) =>
178- prev . map ( ( it ) =>
179- it . serverName === serverName && it . type === type && it . index === index ? { ...it , ideConfig } : it
180- )
181- ) ;
164+ /** Bundle stack manipulation functions to avoid re-defining them inline in props */
165+ const stackCtrl : StackCtrl = {
166+ getFromStack : ( serverName : string , type : 'remote' | 'package' , index : number ) : StackItem | null => {
167+ const found = stack . find ( ( item ) => item . serverName === serverName && item . type === type && item . index === index ) ;
168+ return found || null ;
169+ } ,
170+ addToStack : (
171+ serverName : string ,
172+ type : 'remote' | 'package' ,
173+ data : McpServerPkg | McpServerRemote ,
174+ index : number ,
175+ ideConfig ?: IdeConfig
176+ ) => {
177+ const existingItem = stack . find (
178+ ( item ) => item . serverName === serverName && item . type === type && item . index === index
179+ ) ;
180+ if ( existingItem ) {
181+ // If an ideConfig is provided, update the existing item's config
182+ if ( ideConfig ) {
183+ setStack ( ( prev ) =>
184+ prev . map ( ( it ) =>
185+ it . serverName === serverName && it . type === type && it . index === index ? { ...it , ideConfig } : it
186+ )
187+ ) ;
188+ }
189+ return ;
182190 }
183- return ;
184- }
185- setStack ( ( prev ) => [ ...prev , { serverName, type, data, index, ideConfig } ] ) ;
186- } ;
187-
188- /** Remove item from stack */
189- const removeFromStack = ( serverName : string , type : 'remote' | 'package' , index : number ) => {
190- setStack ( stack . filter ( ( item ) => ! ( item . serverName === serverName && item . type === type && item . index === index ) ) ) ;
191- } ;
192-
193- /** Get item from stack (returns the StackItem.data when present, otherwise null)
194- * Returns McpServerPackage when type='package', McpServerRemote when type='remote', or null.
195- */
196- const getFromStack = ( serverName : string , type : 'remote' | 'package' , index : number ) : StackItem | null => {
197- const found = stack . find ( ( item ) => item . serverName === serverName && item . type === type && item . index === index ) ;
198- return found || null ;
191+ setStack ( ( prev ) => [ ...prev , { serverName, type, data, index, ideConfig } ] ) ;
192+ } ,
193+ removeFromStack : ( serverName : string , type : 'remote' | 'package' , index : number ) => {
194+ setStack ( stack . filter ( ( item ) => ! ( item . serverName === serverName && item . type === type && item . index === index ) ) ) ;
195+ } ,
199196 } ;
200197
201198 /** Check if server has any items in stack */
@@ -214,7 +211,7 @@ export default function App() {
214211 servers [ item . serverName ] =
215212 item . type === 'remote'
216213 ? buildIdeConfigForRemote ( item . data as McpServerRemote )
217- : buildIdeConfigForPkg ( item . data as McpServerPackage ) ;
214+ : buildIdeConfigForPkg ( item . data as McpServerPkg ) ;
218215 }
219216 } ) ;
220217 if ( configType === 'vscode' ) {
@@ -465,7 +462,7 @@ export default function App() {
465462 onClick = { ( e ) => {
466463 e . stopPropagation ( ) ;
467464 e . preventDefault ( ) ;
468- removeFromStack ( item . serverName , item . type , item . index ) ;
465+ stackCtrl . removeFromStack ( item . serverName , item . type , item . index ) ;
469466 } }
470467 className = "p-1 hover:bg-destructive/10 rounded transition-colors"
471468 >
@@ -627,9 +624,10 @@ export default function App() {
627624 < ServerCard
628625 item = { item }
629626 registryUrl = { registryUrl }
630- addToStack = { addToStack }
631- removeFromStack = { removeFromStack }
632- getFromStack = { getFromStack }
627+ stackCtrl = { stackCtrl }
628+ // addToStack={addToStack}
629+ // removeFromStack={removeFromStack}
630+ // getFromStack={getFromStack}
633631 />
634632 </ Card >
635633 ) ) }
0 commit comments