diff --git a/webview-ui/src/components/prompts/PromptsView.tsx b/webview-ui/src/components/prompts/PromptsView.tsx index caef1cf94e..9d0aea6236 100644 --- a/webview-ui/src/components/prompts/PromptsView.tsx +++ b/webview-ui/src/components/prompts/PromptsView.tsx @@ -66,7 +66,6 @@ const PromptsView = ({ onDone }: PromptsViewProps) => { const [isToolsEditMode, setIsToolsEditMode] = useState(false) const [isCreateModeDialogOpen, setIsCreateModeDialogOpen] = useState(false) const [activeSupportTab, setActiveSupportTab] = useState("ENHANCE") - const [selectedModeTab, setSelectedModeTab] = useState(mode) // Direct update functions const updateAgentPrompt = useCallback( @@ -112,23 +111,26 @@ const PromptsView = ({ onDone }: PromptsViewProps) => { text: slug, }) }, []) - // Handle mode tab selection without actually switching modes + + // Handle mode switching with explicit state initialization const handleModeSwitch = useCallback( (modeConfig: ModeConfig) => { - if (modeConfig.slug === selectedModeTab) return // Prevent unnecessary updates + if (modeConfig.slug === mode) return // Prevent unnecessary updates - // Update selected tab and reset tools edit mode - setSelectedModeTab(modeConfig.slug) + // First switch the mode + switchMode(modeConfig.slug) + + // Exit tools edit mode when switching modes setIsToolsEditMode(false) }, - [selectedModeTab, setIsToolsEditMode], + [mode, switchMode, setIsToolsEditMode], ) // Helper function to get current mode's config const getCurrentMode = useCallback((): ModeConfig | undefined => { - const findMode = (m: ModeConfig): boolean => m.slug === selectedModeTab + const findMode = (m: ModeConfig): boolean => m.slug === mode return customModes?.find(findMode) || modes.find(findMode) - }, [selectedModeTab, customModes, modes]) + }, [mode, customModes, modes]) // Helper function to safely access mode properties const getModeProperty = ( @@ -154,11 +156,6 @@ const PromptsView = ({ onDone }: PromptsViewProps) => { } }, [isCreateModeDialogOpen]) - // Keep selected tab in sync with actual mode - useEffect(() => { - setSelectedModeTab(mode) - }, [mode]) - // Helper function to generate a unique slug from a name const generateSlug = useCallback((name: string, attempt = 0): string => { const baseSlug = name @@ -188,6 +185,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => { groups: newModeGroups, } updateCustomMode(newModeSlug, newMode) + switchMode(newModeSlug) setIsCreateModeDialogOpen(false) setNewModeName("") setNewModeSlug("") @@ -478,7 +476,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => { padding: "4px 0", }}> {modes.map((modeConfig) => { - const isActive = selectedModeTab === modeConfig.slug + const isActive = mode === modeConfig.slug return (