add: search tools by name

This commit is contained in:
h z
2025-05-16 16:25:01 +01:00
parent 9a307f5d16
commit 633708d0b5

View File

@@ -41,6 +41,7 @@ const ToolsTab = ({
}) => { }) => {
const [params, setParams] = useState<Record<string, unknown>>({}); const [params, setParams] = useState<Record<string, unknown>>({});
const [isToolRunning, setIsToolRunning] = useState(false); const [isToolRunning, setIsToolRunning] = useState(false);
const [filterText, setFilterText] = useState("");
useEffect(() => { useEffect(() => {
const params = Object.entries( const params = Object.entries(
@@ -52,6 +53,12 @@ const ToolsTab = ({
setParams(Object.fromEntries(params)); setParams(Object.fromEntries(params));
}, [selectedTool]); }, [selectedTool]);
const filteredTools = filterText
? tools.filter((tool) =>
tool.name.toLowerCase().includes(filterText.toLowerCase())
)
: tools;
const renderToolResult = () => { const renderToolResult = () => {
if (!toolResult) return null; if (!toolResult) return null;
@@ -124,27 +131,34 @@ const ToolsTab = ({
return ( return (
<TabsContent value="tools"> <TabsContent value="tools">
<div className="grid grid-cols-2 gap-4"> <div className="grid grid-cols-2 gap-4">
<ListPane <div className="space-y-2">
items={tools} <Input
listItems={listTools} placeholder="Filter tools by name..."
clearItems={() => { value={filterText}
clearTools(); onChange={(e) => setFilterText(e.target.value)}
setSelectedTool(null); className="w-full"
}} />
setSelectedItem={setSelectedTool} <ListPane
renderItem={(tool) => ( items={filteredTools}
<div className="flex flex-col items-start"> listItems={listTools}
<span className="flex-1">{tool.name}</span> clearItems={() => {
<span className="text-sm text-gray-500 text-left"> clearTools();
{tool.description} setSelectedTool(null);
</span> }}
</div> setSelectedItem={setSelectedTool}
)} renderItem={(tool) => (
title="Tools" <div className="flex flex-col items-start">
buttonText={nextCursor ? "List More Tools" : "List Tools"} <span className="flex-1">{tool.name}</span>
isButtonDisabled={!nextCursor && tools.length > 0} <span className="text-sm text-gray-500 text-left">
/> {tool.description}
</span>
</div>
)}
title="Tools"
buttonText={nextCursor ? "List More Tools" : "List Tools"}
isButtonDisabled={!nextCursor && tools.length > 0}
/>
</div>
<div className="bg-card rounded-lg shadow"> <div className="bg-card rounded-lg shadow">
<div className="p-4 border-b border-gray-200 dark:border-gray-800"> <div className="p-4 border-b border-gray-200 dark:border-gray-800">
<h3 className="font-semibold"> <h3 className="font-semibold">