From 0e0580f95c0fe05747e9a4bec78c4ae2a8ee72b9 Mon Sep 17 00:00:00 2001 From: Serhii Dziupin Date: Wed, 12 Aug 2026 10:30:49 +0000 Subject: [PATCH] fix(integrations): remove unnecessary Refresh control Data already reloads on mount, after mutations, and after Apply & Restart, so the section Refresh button was redundant noise. Co-authored-by: Serhii Dziupin --- .../ThirdPartyIntegrationsSection.tsx | 60 +++++-------------- .../messages/third-party-integrations.i18n.ts | 11 ---- 2 files changed, 14 insertions(+), 57 deletions(-) diff --git a/packages/ui/src/components/sections/integrations/ThirdPartyIntegrationsSection.tsx b/packages/ui/src/components/sections/integrations/ThirdPartyIntegrationsSection.tsx index da26acc7..91940b91 100644 --- a/packages/ui/src/components/sections/integrations/ThirdPartyIntegrationsSection.tsx +++ b/packages/ui/src/components/sections/integrations/ThirdPartyIntegrationsSection.tsx @@ -52,7 +52,6 @@ export const ThirdPartyIntegrationsSection: React.FC ({ entries: state.entries, registryInfo: state.registryInfo, - isLoadingRegistry: state.isLoadingRegistry, loadPlugins: state.loadPlugins, loadRegistryInfo: state.loadRegistryInfo, createEntry: state.createEntry, @@ -71,7 +69,6 @@ export const ThirdPartyIntegrationsSection: React.FC>(() => new Set()); const refresh = React.useCallback(async () => { - setIsRefreshing(true); - try { - const pluginsLoaded = await loadPlugins({ force: true }); - if (!pluginsLoaded) { - setRegistryLoadFailed(true); - return; - } - - const latestEntries = usePluginsStore.getState().entries; - const specs = new Set(THIRD_PARTY_PLUGINS.map((plugin) => plugin.packageName)); - for (const entry of latestEntries) { - if (THIRD_PARTY_PLUGINS.some((plugin) => entry.spec === plugin.packageName || entry.spec.startsWith(`${plugin.packageName}@`))) { - specs.add(entry.spec); - } - } - const registryLoaded = await loadRegistryInfo({ specs: [...specs], force: true }); - setRegistryLoadFailed(!registryLoaded); - } finally { - setIsRefreshing(false); + const pluginsLoaded = await loadPlugins({ force: true }); + if (!pluginsLoaded) { + setRegistryLoadFailed(true); + return; } + + const latestEntries = usePluginsStore.getState().entries; + const specs = new Set(THIRD_PARTY_PLUGINS.map((plugin) => plugin.packageName)); + for (const entry of latestEntries) { + if (THIRD_PARTY_PLUGINS.some((plugin) => entry.spec === plugin.packageName || entry.spec.startsWith(`${plugin.packageName}@`))) { + specs.add(entry.spec); + } + } + const registryLoaded = await loadRegistryInfo({ specs: [...specs], force: true }); + setRegistryLoadFailed(!registryLoaded); }, [loadPlugins, loadRegistryInfo]); React.useEffect(() => { @@ -383,18 +375,6 @@ export const ThirdPartyIntegrationsSection: React.FC - {registryUnavailable ? ( - - ) : null} - )} contentClassName="space-y-3" > {THIRD_PARTY_PLUGINS.map(renderPlugin)} diff --git a/packages/ui/src/lib/i18n/messages/third-party-integrations.i18n.ts b/packages/ui/src/lib/i18n/messages/third-party-integrations.i18n.ts index d9fc4adf..b4c1b59f 100644 --- a/packages/ui/src/lib/i18n/messages/third-party-integrations.i18n.ts +++ b/packages/ui/src/lib/i18n/messages/third-party-integrations.i18n.ts @@ -15,7 +15,6 @@ export const thirdPartyIntegrationI18n = { 'settings.integrations.thirdParty.actions.update': 'Update', 'settings.integrations.thirdParty.actions.setup': 'Set up', 'settings.integrations.thirdParty.actions.remove': 'Remove', - 'settings.integrations.thirdParty.actions.refresh': 'Refresh', 'settings.integrations.thirdParty.actions.docs': 'Docs', 'settings.integrations.thirdParty.actions.managePlugins': 'Manage plugins', 'settings.integrations.thirdParty.status.notInstalled': 'Not installed', @@ -57,7 +56,6 @@ export const thirdPartyIntegrationI18n = { 'settings.integrations.thirdParty.actions.update': 'Aktualisieren', 'settings.integrations.thirdParty.actions.setup': 'Einrichten', 'settings.integrations.thirdParty.actions.remove': 'Entfernen', - 'settings.integrations.thirdParty.actions.refresh': 'Aktualisieren', 'settings.integrations.thirdParty.actions.docs': 'Dokumentation', 'settings.integrations.thirdParty.actions.managePlugins': 'Plugins verwalten', 'settings.integrations.thirdParty.status.notInstalled': 'Nicht installiert', @@ -99,7 +97,6 @@ export const thirdPartyIntegrationI18n = { 'settings.integrations.thirdParty.actions.update': 'Mettre à jour', 'settings.integrations.thirdParty.actions.setup': 'Configurer', 'settings.integrations.thirdParty.actions.remove': 'Supprimer', - 'settings.integrations.thirdParty.actions.refresh': 'Actualiser', 'settings.integrations.thirdParty.actions.docs': 'Documentation', 'settings.integrations.thirdParty.actions.managePlugins': 'Gérer les plugins', 'settings.integrations.thirdParty.status.notInstalled': 'Non installé', @@ -141,7 +138,6 @@ export const thirdPartyIntegrationI18n = { 'settings.integrations.thirdParty.actions.update': 'Actualizar', 'settings.integrations.thirdParty.actions.setup': 'Configurar', 'settings.integrations.thirdParty.actions.remove': 'Quitar', - 'settings.integrations.thirdParty.actions.refresh': 'Actualizar', 'settings.integrations.thirdParty.actions.docs': 'Documentación', 'settings.integrations.thirdParty.actions.managePlugins': 'Administrar plugins', 'settings.integrations.thirdParty.status.notInstalled': 'No instalado', @@ -183,7 +179,6 @@ export const thirdPartyIntegrationI18n = { 'settings.integrations.thirdParty.actions.update': '更新', 'settings.integrations.thirdParty.actions.setup': '設定', 'settings.integrations.thirdParty.actions.remove': '削除', - 'settings.integrations.thirdParty.actions.refresh': '再読み込み', 'settings.integrations.thirdParty.actions.docs': 'ドキュメント', 'settings.integrations.thirdParty.actions.managePlugins': 'プラグインを管理', 'settings.integrations.thirdParty.status.notInstalled': '未インストール', @@ -225,7 +220,6 @@ export const thirdPartyIntegrationI18n = { 'settings.integrations.thirdParty.actions.update': '업데이트', 'settings.integrations.thirdParty.actions.setup': '설정', 'settings.integrations.thirdParty.actions.remove': '제거', - 'settings.integrations.thirdParty.actions.refresh': '새로 고침', 'settings.integrations.thirdParty.actions.docs': '문서', 'settings.integrations.thirdParty.actions.managePlugins': '플러그인 관리', 'settings.integrations.thirdParty.status.notInstalled': '설치되지 않음', @@ -267,7 +261,6 @@ export const thirdPartyIntegrationI18n = { 'settings.integrations.thirdParty.actions.update': 'Aktualizuj', 'settings.integrations.thirdParty.actions.setup': 'Skonfiguruj', 'settings.integrations.thirdParty.actions.remove': 'Usuń', - 'settings.integrations.thirdParty.actions.refresh': 'Odśwież', 'settings.integrations.thirdParty.actions.docs': 'Dokumentacja', 'settings.integrations.thirdParty.actions.managePlugins': 'Zarządzaj wtyczkami', 'settings.integrations.thirdParty.status.notInstalled': 'Nie zainstalowano', @@ -309,7 +302,6 @@ export const thirdPartyIntegrationI18n = { 'settings.integrations.thirdParty.actions.update': 'Atualizar', 'settings.integrations.thirdParty.actions.setup': 'Configurar', 'settings.integrations.thirdParty.actions.remove': 'Remover', - 'settings.integrations.thirdParty.actions.refresh': 'Atualizar', 'settings.integrations.thirdParty.actions.docs': 'Documentação', 'settings.integrations.thirdParty.actions.managePlugins': 'Gerenciar plugins', 'settings.integrations.thirdParty.status.notInstalled': 'Não instalado', @@ -351,7 +343,6 @@ export const thirdPartyIntegrationI18n = { 'settings.integrations.thirdParty.actions.update': 'Оновити', 'settings.integrations.thirdParty.actions.setup': 'Налаштувати', 'settings.integrations.thirdParty.actions.remove': 'Видалити', - 'settings.integrations.thirdParty.actions.refresh': 'Оновити', 'settings.integrations.thirdParty.actions.docs': 'Документація', 'settings.integrations.thirdParty.actions.managePlugins': 'Керувати плагінами', 'settings.integrations.thirdParty.status.notInstalled': 'Не встановлено', @@ -393,7 +384,6 @@ export const thirdPartyIntegrationI18n = { 'settings.integrations.thirdParty.actions.update': '更新', 'settings.integrations.thirdParty.actions.setup': '设置', 'settings.integrations.thirdParty.actions.remove': '移除', - 'settings.integrations.thirdParty.actions.refresh': '刷新', 'settings.integrations.thirdParty.actions.docs': '文档', 'settings.integrations.thirdParty.actions.managePlugins': '管理插件', 'settings.integrations.thirdParty.status.notInstalled': '未安装', @@ -435,7 +425,6 @@ export const thirdPartyIntegrationI18n = { 'settings.integrations.thirdParty.actions.update': '更新', 'settings.integrations.thirdParty.actions.setup': '設定', 'settings.integrations.thirdParty.actions.remove': '移除', - 'settings.integrations.thirdParty.actions.refresh': '重新整理', 'settings.integrations.thirdParty.actions.docs': '文件', 'settings.integrations.thirdParty.actions.managePlugins': '管理外掛', 'settings.integrations.thirdParty.status.notInstalled': '未安裝',