1- import { useMutation } from "@tanstack/solid-query"
2- import { Component , createEffect , createMemo , on , Show } from "solid-js"
3- import { createStore } from "solid-js/store"
1+ import { useMutation , useQueryClient } from "@tanstack/solid-query"
2+ import { Component , createMemo , Show } from "solid-js"
43import { useSync } from "@/context/sync"
54import { useSDK } from "@/context/sdk"
65import { Dialog } from "@opencode-ai/ui/dialog"
76import { List } from "@opencode-ai/ui/list"
87import { Switch } from "@opencode-ai/ui/switch"
9- import { showToast } from "@opencode-ai/ui/toast"
108import { useLanguage } from "@/context/language"
9+ import { loadMcpQuery } from "@/context/global-sync"
1110
1211const statusLabels = {
1312 connected : "mcp.status.connected" ,
@@ -20,48 +19,7 @@ export const DialogSelectMcp: Component = () => {
2019 const sync = useSync ( )
2120 const sdk = useSDK ( )
2221 const language = useLanguage ( )
23- const [ state , setState ] = createStore ( {
24- done : false ,
25- loading : false ,
26- } )
27-
28- createEffect (
29- on (
30- ( ) => sync . data . mcp_ready ,
31- ( ready , prev ) => {
32- if ( ! ready && prev ) setState ( "done" , false )
33- } ,
34- { defer : true } ,
35- ) ,
36- )
37-
38- createEffect ( ( ) => {
39- if ( state . done || state . loading ) return
40- if ( sync . data . mcp_ready ) {
41- setState ( "done" , true )
42- return
43- }
44-
45- setState ( "loading" , true )
46- void sdk . client . mcp
47- . status ( )
48- . then ( ( result ) => {
49- sync . set ( "mcp" , result . data ?? { } )
50- sync . set ( "mcp_ready" , true )
51- setState ( "done" , true )
52- } )
53- . catch ( ( err ) => {
54- setState ( "done" , true )
55- showToast ( {
56- variant : "error" ,
57- title : language . t ( "common.requestFailed" ) ,
58- description : err instanceof Error ? err . message : String ( err ) ,
59- } )
60- } )
61- . finally ( ( ) => {
62- setState ( "loading" , false )
63- } )
64- } )
22+ const queryClient = useQueryClient ( )
6523
6624 const items = createMemo ( ( ) =>
6725 Object . entries ( sync . data . mcp ?? { } )
@@ -71,16 +29,10 @@ export const DialogSelectMcp: Component = () => {
7129
7230 const toggle = useMutation ( ( ) => ( {
7331 mutationFn : async ( name : string ) => {
74- const status = sync . data . mcp [ name ]
75- if ( status ?. status === "connected" ) {
76- await sdk . client . mcp . disconnect ( { name } )
77- } else {
78- await sdk . client . mcp . connect ( { name } )
79- }
80-
81- const result = await sdk . client . mcp . status ( )
82- if ( result . data ) sync . set ( "mcp" , result . data )
32+ if ( sync . data . mcp [ name ] ?. status === "connected" ) await sdk . client . mcp . disconnect ( { name } )
33+ else await sdk . client . mcp . connect ( { name } )
8334 } ,
35+ onSuccess : ( ) => queryClient . refetchQueries ( { queryKey : loadMcpQuery ( sync . directory ) . queryKey } ) ,
8436 } ) )
8537
8638 const enabledCount = createMemo ( ( ) => items ( ) . filter ( ( i ) => i . status === "connected" ) . length )
0 commit comments