mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-08-14 22:40:59 +00:00
perf: Add "Select All" checkbox to Plugin and MCP Server selection dialogs (#1790)
* Initial plan * Add "Select All" checkbox to Plugin and MCP Server selection dialogs Co-authored-by: RockChinQ <45992437+RockChinQ@users.noreply.github.com> * Make "Select All" text clickable by adding onClick handler to container Co-authored-by: RockChinQ <45992437+RockChinQ@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: RockChinQ <45992437+RockChinQ@users.noreply.github.com>
This commit is contained in:
@@ -146,6 +146,26 @@ export default function PipelineExtension({
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleToggleAllPlugins = () => {
|
||||||
|
if (tempSelectedPluginIds.length === allPlugins.length) {
|
||||||
|
// Deselect all
|
||||||
|
setTempSelectedPluginIds([]);
|
||||||
|
} else {
|
||||||
|
// Select all
|
||||||
|
setTempSelectedPluginIds(allPlugins.map((p) => getPluginId(p)));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleToggleAllMCPServers = () => {
|
||||||
|
if (tempSelectedMCPIds.length === allMCPServers.length) {
|
||||||
|
// Deselect all
|
||||||
|
setTempSelectedMCPIds([]);
|
||||||
|
} else {
|
||||||
|
// Select all
|
||||||
|
setTempSelectedMCPIds(allMCPServers.map((s) => s.uuid || ''));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const handleConfirmPluginSelection = async () => {
|
const handleConfirmPluginSelection = async () => {
|
||||||
const newSelected = allPlugins.filter((p) =>
|
const newSelected = allPlugins.filter((p) =>
|
||||||
tempSelectedPluginIds.includes(getPluginId(p)),
|
tempSelectedPluginIds.includes(getPluginId(p)),
|
||||||
@@ -330,6 +350,23 @@ export default function PipelineExtension({
|
|||||||
<DialogHeader>
|
<DialogHeader>
|
||||||
<DialogTitle>{t('pipelines.extensions.selectPlugins')}</DialogTitle>
|
<DialogTitle>{t('pipelines.extensions.selectPlugins')}</DialogTitle>
|
||||||
</DialogHeader>
|
</DialogHeader>
|
||||||
|
{allPlugins.length > 0 && (
|
||||||
|
<div
|
||||||
|
className="flex items-center gap-3 px-1 py-2 border-b cursor-pointer"
|
||||||
|
onClick={handleToggleAllPlugins}
|
||||||
|
>
|
||||||
|
<Checkbox
|
||||||
|
checked={
|
||||||
|
tempSelectedPluginIds.length === allPlugins.length &&
|
||||||
|
allPlugins.length > 0
|
||||||
|
}
|
||||||
|
onCheckedChange={handleToggleAllPlugins}
|
||||||
|
/>
|
||||||
|
<span className="text-sm font-medium">
|
||||||
|
{t('pipelines.extensions.selectAll')}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
<div className="flex-1 overflow-y-auto space-y-2 pr-2">
|
<div className="flex-1 overflow-y-auto space-y-2 pr-2">
|
||||||
{allPlugins.length === 0 ? (
|
{allPlugins.length === 0 ? (
|
||||||
<div className="flex h-full items-center justify-center">
|
<div className="flex h-full items-center justify-center">
|
||||||
@@ -404,6 +441,23 @@ export default function PipelineExtension({
|
|||||||
{t('pipelines.extensions.selectMCPServers')}
|
{t('pipelines.extensions.selectMCPServers')}
|
||||||
</DialogTitle>
|
</DialogTitle>
|
||||||
</DialogHeader>
|
</DialogHeader>
|
||||||
|
{allMCPServers.length > 0 && (
|
||||||
|
<div
|
||||||
|
className="flex items-center gap-3 px-1 py-2 border-b cursor-pointer"
|
||||||
|
onClick={handleToggleAllMCPServers}
|
||||||
|
>
|
||||||
|
<Checkbox
|
||||||
|
checked={
|
||||||
|
tempSelectedMCPIds.length === allMCPServers.length &&
|
||||||
|
allMCPServers.length > 0
|
||||||
|
}
|
||||||
|
onCheckedChange={handleToggleAllMCPServers}
|
||||||
|
/>
|
||||||
|
<span className="text-sm font-medium">
|
||||||
|
{t('pipelines.extensions.selectAll')}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
<div className="flex-1 overflow-y-auto space-y-2 pr-2">
|
<div className="flex-1 overflow-y-auto space-y-2 pr-2">
|
||||||
{allMCPServers.length === 0 ? (
|
{allMCPServers.length === 0 ? (
|
||||||
<div className="flex h-full items-center justify-center">
|
<div className="flex h-full items-center justify-center">
|
||||||
|
|||||||
@@ -484,6 +484,7 @@ const enUS = {
|
|||||||
toolCount: '{{count}} tools',
|
toolCount: '{{count}} tools',
|
||||||
noPluginsInstalled: 'No installed plugins',
|
noPluginsInstalled: 'No installed plugins',
|
||||||
noMCPServersConfigured: 'No configured MCP servers',
|
noMCPServersConfigured: 'No configured MCP servers',
|
||||||
|
selectAll: 'Select All',
|
||||||
},
|
},
|
||||||
debugDialog: {
|
debugDialog: {
|
||||||
title: 'Pipeline Chat',
|
title: 'Pipeline Chat',
|
||||||
|
|||||||
@@ -487,6 +487,7 @@ const jaJP = {
|
|||||||
toolCount: '{{count}}個のツール',
|
toolCount: '{{count}}個のツール',
|
||||||
noPluginsInstalled: 'インストールされているプラグインがありません',
|
noPluginsInstalled: 'インストールされているプラグインがありません',
|
||||||
noMCPServersConfigured: '設定されているMCPサーバーがありません',
|
noMCPServersConfigured: '設定されているMCPサーバーがありません',
|
||||||
|
selectAll: 'すべて選択',
|
||||||
},
|
},
|
||||||
debugDialog: {
|
debugDialog: {
|
||||||
title: 'パイプラインのチャット',
|
title: 'パイプラインのチャット',
|
||||||
|
|||||||
@@ -466,6 +466,7 @@ const zhHans = {
|
|||||||
toolCount: '{{count}} 个工具',
|
toolCount: '{{count}} 个工具',
|
||||||
noPluginsInstalled: '无已安装的插件',
|
noPluginsInstalled: '无已安装的插件',
|
||||||
noMCPServersConfigured: '无已配置的 MCP 服务器',
|
noMCPServersConfigured: '无已配置的 MCP 服务器',
|
||||||
|
selectAll: '全选',
|
||||||
},
|
},
|
||||||
debugDialog: {
|
debugDialog: {
|
||||||
title: '流水线对话',
|
title: '流水线对话',
|
||||||
|
|||||||
@@ -464,6 +464,7 @@ const zhHant = {
|
|||||||
toolCount: '{{count}} 個工具',
|
toolCount: '{{count}} 個工具',
|
||||||
noPluginsInstalled: '無已安裝的插件',
|
noPluginsInstalled: '無已安裝的插件',
|
||||||
noMCPServersConfigured: '無已配置的 MCP 伺服器',
|
noMCPServersConfigured: '無已配置的 MCP 伺服器',
|
||||||
|
selectAll: '全選',
|
||||||
},
|
},
|
||||||
debugDialog: {
|
debugDialog: {
|
||||||
title: '流程線對話',
|
title: '流程線對話',
|
||||||
|
|||||||
Reference in New Issue
Block a user