diff --git a/electron/utils/channel-config.ts b/electron/utils/channel-config.ts index c757aa06c..1e394ce8c 100644 --- a/electron/utils/channel-config.ts +++ b/electron/utils/channel-config.ts @@ -271,6 +271,22 @@ export function deleteChannelConfig(channelType: string): void { delete currentConfig.channels[channelType]; writeOpenClawConfig(currentConfig); console.log(`Deleted channel config for ${channelType}`); + } else if (PLUGIN_CHANNELS.includes(channelType)) { + // Handle plugin channels (like whatsapp) + if (currentConfig.plugins?.entries?.[channelType]) { + delete currentConfig.plugins.entries[channelType]; + + // Cleanup empty objects + if (Object.keys(currentConfig.plugins.entries).length === 0) { + delete currentConfig.plugins.entries; + } + if (currentConfig.plugins && Object.keys(currentConfig.plugins).length === 0) { + delete currentConfig.plugins; + } + + writeOpenClawConfig(currentConfig); + console.log(`Deleted plugin channel config for ${channelType}`); + } } // Special handling for WhatsApp credentials diff --git a/src/pages/Channels/index.tsx b/src/pages/Channels/index.tsx index 4fd1fd2e1..6c35686fc 100644 --- a/src/pages/Channels/index.tsx +++ b/src/pages/Channels/index.tsx @@ -59,17 +59,6 @@ export function Channels() { fetchChannels(); }, [fetchChannels]); - useEffect(() => { - const unsubscribe = window.electron.ipcRenderer.on('gateway:channel-status', () => { - fetchChannels(); - }); - return () => { - if (typeof unsubscribe === 'function') { - unsubscribe(); - } - }; - }, [fetchChannels]); - // Fetch configured channel types from config file const fetchConfiguredTypes = useCallback(async () => { try { @@ -90,6 +79,18 @@ export function Channels() { void fetchConfiguredTypes(); }, [fetchConfiguredTypes]); + useEffect(() => { + const unsubscribe = window.electron.ipcRenderer.on('gateway:channel-status', () => { + fetchChannels(); + fetchConfiguredTypes(); + }); + return () => { + if (typeof unsubscribe === 'function') { + unsubscribe(); + } + }; + }, [fetchChannels, fetchConfiguredTypes]); + // Get channel types to display const displayedChannelTypes = showAllChannels ? getAllChannels() : getPrimaryChannels(); @@ -205,7 +206,9 @@ export function Channels() { channel={channel} onDelete={() => { if (confirm('Are you sure you want to delete this channel?')) { - deleteChannel(channel.id); + deleteChannel(channel.id).then(() => { + fetchConfiguredTypes(); + }); } }} />