(event: MessageEvent)
| 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 | } |
no test coverage detected