MCPcopy Create free account
hub / github.com/Zoo-Code-Org/Zoo-Code / handler

Function handler

webview-ui/src/components/modes/ModesView.tsx:537–594  ·  view source on GitHub ↗
(event: MessageEvent)

Source from the content-addressed store, hash-verified

535
536 useEffect(() => {
537 const handler = (event: MessageEvent) => {
538 const message = event.data
539 if (message.type === "systemPrompt") {
540 if (message.text) {
541 setSelectedPromptContent(message.text)
542 setSelectedPromptTitle(`System Prompt (${message.mode} mode)`)
543 setIsDialogOpen(true)
544 }
545 } else if (message.type === "exportModeResult") {
546 setIsExporting(false)
547
548 if (!message.success) {
549 // Show error message
550 console.error("Failed to export mode:", message.error)
551 }
552 } else if (message.type === "importModeResult") {
553 setIsImporting(false)
554 setShowImportDialog(false)
555
556 if (message.success) {
557 const { slug } = message as ImportModeResult
558 if (slug) {
559 // Try switching using the freshest mode list available
560 const all = getAllModes(customModesRef.current)
561 const importedMode = all.find((m) => m.slug === slug)
562 if (importedMode) {
563 handleModeSwitchRef.current(importedMode)
564 } else {
565 // Fallback: slug not yet in state (race condition) - select default mode
566 setVisualMode(defaultModeSlug)
567 switchModeRef.current?.(defaultModeSlug)
568 }
569 }
570 } else {
571 // Only log error if it's not a cancellation
572 if (message.error !== "cancelled") {
573 console.error("Failed to import mode:", message.error)
574 }
575 }
576 // Note: Auto-select after import will be handled by PR #9003
577 } else if (message.type === "checkRulesDirectoryResult") {
578 setHasRulesToExport((prev) => ({
579 ...prev,
580 [message.slug]: message.hasContent,
581 }))
582 } else if (message.type === "deleteCustomModeCheck") {
583 // Handle the check response
584 // Use the ref to get the current modeToDelete value
585 const currentModeToDelete = modeToDeleteRef.current
586 if (message.slug && currentModeToDelete && currentModeToDelete.slug === message.slug) {
587 setModeToDelete({
588 ...currentModeToDelete,
589 rulesFolderPath: message.rulesFolderPath,
590 })
591 setShowDeleteConfirm(true)
592 }
593 }
594 }

Callers 2

notifyStateChangeMethod · 0.50
transitionMethod · 0.50

Calls 2

getAllModesFunction · 0.90
errorMethod · 0.65

Tested by

no test coverage detected