@@ -64,6 +64,7 @@ import type {
6464} from "@/types/electron" ;
6565import { EXTRA_MODELS } from "@/lib/model-catalog" ;
6666import { recommendGpuBackend , gpuBackendNote } from "@/lib/gpu" ;
67+ import { useToast } from "@/components/toast" ;
6768import {
6869 DEFAULT_KEYBINDINGS ,
6970 KEYBINDING_ACTIONS ,
@@ -162,6 +163,7 @@ export default function Settings() {
162163 const [ editDraftName , setEditDraftName ] = useState ( "" ) ;
163164 const [ editDraftPrompt , setEditDraftPrompt ] = useState ( "" ) ;
164165 const { refresh : refreshSessions } = useSessions ( ) ;
166+ const toast = useToast ( ) ;
165167 const activePullCount = useRef ( 0 ) ;
166168
167169 const [ mcpStatuses , setMcpStatuses ] = useState < Record < string , McpServerStatus > > ( { } ) ;
@@ -336,7 +338,8 @@ export default function Settings() {
336338 }
337339
338340 async function handleExportAll ( ) {
339- await window . api . data . exportAll ( ) ;
341+ const result = await window . api . data . exportAll ( ) ;
342+ if ( result . success ) toast . success ( t . toastExportDone ) ;
340343 }
341344
342345 async function handleImport ( ) {
@@ -432,27 +435,35 @@ export default function Settings() {
432435 }
433436
434437 async function saveOpenaiKey ( ) {
435- await window . api . secrets . set ( "openai_api_key" , openaiKeyInput . trim ( ) ) ;
436- setOpenaiKeySet ( ! ! openaiKeyInput . trim ( ) ) ;
438+ const value = openaiKeyInput . trim ( ) ;
439+ await window . api . secrets . set ( "openai_api_key" , value ) ;
440+ setOpenaiKeySet ( ! ! value ) ;
437441 setOpenaiKeyInput ( "" ) ;
442+ toast . success ( value ? t . toastApiKeySaved : t . toastApiKeyCleared ) ;
438443 }
439444
440445 async function saveAnthropicKey ( ) {
441- await window . api . secrets . set ( "anthropic_api_key" , anthropicKeyInput . trim ( ) ) ;
442- setAnthropicKeySet ( ! ! anthropicKeyInput . trim ( ) ) ;
446+ const value = anthropicKeyInput . trim ( ) ;
447+ await window . api . secrets . set ( "anthropic_api_key" , value ) ;
448+ setAnthropicKeySet ( ! ! value ) ;
443449 setAnthropicKeyInput ( "" ) ;
450+ toast . success ( value ? t . toastApiKeySaved : t . toastApiKeyCleared ) ;
444451 }
445452
446453 async function saveFigmaToken ( ) {
447- await window . api . secrets . set ( "figma_token" , figmaTokenInput . trim ( ) ) ;
448- setFigmaTokenSet ( ! ! figmaTokenInput . trim ( ) ) ;
454+ const value = figmaTokenInput . trim ( ) ;
455+ await window . api . secrets . set ( "figma_token" , value ) ;
456+ setFigmaTokenSet ( ! ! value ) ;
449457 setFigmaTokenInput ( "" ) ;
458+ toast . success ( value ? t . toastApiKeySaved : t . toastApiKeyCleared ) ;
450459 }
451460
452461 async function saveGeminiKey ( ) {
453- await window . api . secrets . set ( "gemini_api_key" , geminiKeyInput . trim ( ) ) ;
454- setGeminiKeySet ( ! ! geminiKeyInput . trim ( ) ) ;
462+ const value = geminiKeyInput . trim ( ) ;
463+ await window . api . secrets . set ( "gemini_api_key" , value ) ;
464+ setGeminiKeySet ( ! ! value ) ;
455465 setGeminiKeyInput ( "" ) ;
466+ toast . success ( value ? t . toastApiKeySaved : t . toastApiKeyCleared ) ;
456467 }
457468
458469 function prefillCustomProviderPreset ( preset : { name : string ; baseUrl : string ; modelIds : string [ ] } ) {
@@ -480,6 +491,7 @@ export default function Settings() {
480491 setCustomDraftBaseUrl ( "" ) ;
481492 setCustomDraftModelIds ( "" ) ;
482493 setShowAddCustomProvider ( false ) ;
494+ toast . success ( `${ name } — ${ t . toastProviderAdded } ` ) ;
483495 }
484496
485497 async function removeCustomProvider ( id : string ) {
@@ -488,13 +500,15 @@ export default function Settings() {
488500 customProviders : ( settings . customProviders ?? [ ] ) . filter ( ( p ) => p . id !== id ) ,
489501 } ) ;
490502 setSettings ( updated ) ;
503+ toast . success ( t . toastProviderRemoved ) ;
491504 }
492505
493506 async function saveCustomProviderKey ( id : string ) {
494507 const value = ( customKeyInputs [ id ] ?? "" ) . trim ( ) ;
495508 await window . api . secrets . set ( `custom_${ id } _api_key` , value ) ;
496509 setCustomKeySet ( ( prev ) => ( { ...prev , [ id ] : ! ! value } ) ) ;
497510 setCustomKeyInputs ( ( prev ) => ( { ...prev , [ id ] : "" } ) ) ;
511+ toast . success ( value ? t . toastApiKeySaved : t . toastApiKeyCleared ) ;
498512 }
499513
500514 async function saveOllamaHost ( ) {
@@ -546,6 +560,11 @@ export default function Settings() {
546560 } else {
547561 const result = await window . api . ollama . start ( ) ;
548562 setRunning ( ! result . error ) ;
563+ if ( result . error === "not-installed" ) {
564+ toast . error ( t . toastOllamaNotInstalled ) ;
565+ } else if ( result . error ) {
566+ toast . error ( `${ t . toastOllamaStartFailed } : ${ result . error } ` ) ;
567+ }
549568 }
550569 }
551570
0 commit comments