Merge pull request #98 from heuperman/add-button-to-clear-items

Add button to clear loaded items
This commit is contained in:
Ashwin Bhat
2024-12-01 11:08:32 -05:00
committed by GitHub
5 changed files with 39 additions and 1 deletions

View File

@@ -525,10 +525,18 @@ const App = () => {
clearError("resources"); clearError("resources");
listResources(); listResources();
}} }}
clearResources={() => {
setResources([]);
setNextResourceCursor(undefined);
}}
listResourceTemplates={() => { listResourceTemplates={() => {
clearError("resources"); clearError("resources");
listResourceTemplates(); listResourceTemplates();
}} }}
clearResourceTemplates={() => {
setResourceTemplates([]);
setNextResourceTemplateCursor(undefined);
}}
readResource={(uri) => { readResource={(uri) => {
clearError("resources"); clearError("resources");
readResource(uri); readResource(uri);
@@ -549,6 +557,10 @@ const App = () => {
clearError("prompts"); clearError("prompts");
listPrompts(); listPrompts();
}} }}
clearPrompts={() => {
setPrompts([]);
setNextPromptCursor(undefined);
}}
getPrompt={(name, args) => { getPrompt={(name, args) => {
clearError("prompts"); clearError("prompts");
getPrompt(name, args); getPrompt(name, args);
@@ -568,6 +580,10 @@ const App = () => {
clearError("tools"); clearError("tools");
listTools(); listTools();
}} }}
clearTools={() => {
setTools([]);
setNextToolCursor(undefined);
}}
callTool={(name, params) => { callTool={(name, params) => {
clearError("tools"); clearError("tools");
callTool(name, params); callTool(name, params);

View File

@@ -3,6 +3,7 @@ import { Button } from "./ui/button";
type ListPaneProps<T> = { type ListPaneProps<T> = {
items: T[]; items: T[];
listItems: () => void; listItems: () => void;
clearItems: () => void;
setSelectedItem: (item: T) => void; setSelectedItem: (item: T) => void;
renderItem: (item: T) => React.ReactNode; renderItem: (item: T) => React.ReactNode;
title: string; title: string;
@@ -13,6 +14,7 @@ type ListPaneProps<T> = {
const ListPane = <T extends object>({ const ListPane = <T extends object>({
items, items,
listItems, listItems,
clearItems,
setSelectedItem, setSelectedItem,
renderItem, renderItem,
title, title,
@@ -32,6 +34,14 @@ const ListPane = <T extends object>({
> >
{buttonText} {buttonText}
</Button> </Button>
<Button
variant="outline"
className="w-full mb-4"
onClick={clearItems}
disabled={items.length === 0}
>
Clear
</Button>
<div className="space-y-2 overflow-y-auto max-h-96"> <div className="space-y-2 overflow-y-auto max-h-96">
{items.map((item, index) => ( {items.map((item, index) => (
<div <div

View File

@@ -22,6 +22,7 @@ export type Prompt = {
const PromptsTab = ({ const PromptsTab = ({
prompts, prompts,
listPrompts, listPrompts,
clearPrompts,
getPrompt, getPrompt,
selectedPrompt, selectedPrompt,
setSelectedPrompt, setSelectedPrompt,
@@ -31,6 +32,7 @@ const PromptsTab = ({
}: { }: {
prompts: Prompt[]; prompts: Prompt[];
listPrompts: () => void; listPrompts: () => void;
clearPrompts: () => void;
getPrompt: (name: string, args: Record<string, string>) => void; getPrompt: (name: string, args: Record<string, string>) => void;
selectedPrompt: Prompt | null; selectedPrompt: Prompt | null;
setSelectedPrompt: (prompt: Prompt) => void; setSelectedPrompt: (prompt: Prompt) => void;
@@ -55,6 +57,7 @@ const PromptsTab = ({
<ListPane <ListPane
items={prompts} items={prompts}
listItems={listPrompts} listItems={listPrompts}
clearItems={clearPrompts}
setSelectedItem={(prompt) => { setSelectedItem={(prompt) => {
setSelectedPrompt(prompt); setSelectedPrompt(prompt);
setPromptArgs({}); setPromptArgs({});

View File

@@ -16,7 +16,9 @@ const ResourcesTab = ({
resources, resources,
resourceTemplates, resourceTemplates,
listResources, listResources,
clearResources,
listResourceTemplates, listResourceTemplates,
clearResourceTemplates,
readResource, readResource,
selectedResource, selectedResource,
setSelectedResource, setSelectedResource,
@@ -28,7 +30,9 @@ const ResourcesTab = ({
resources: Resource[]; resources: Resource[];
resourceTemplates: ResourceTemplate[]; resourceTemplates: ResourceTemplate[];
listResources: () => void; listResources: () => void;
clearResources: () => void;
listResourceTemplates: () => void; listResourceTemplates: () => void;
clearResourceTemplates: () => void;
readResource: (uri: string) => void; readResource: (uri: string) => void;
selectedResource: Resource | null; selectedResource: Resource | null;
setSelectedResource: (resource: Resource | null) => void; setSelectedResource: (resource: Resource | null) => void;
@@ -68,6 +72,7 @@ const ResourcesTab = ({
<ListPane <ListPane
items={resources} items={resources}
listItems={listResources} listItems={listResources}
clearItems={clearResources}
setSelectedItem={(resource) => { setSelectedItem={(resource) => {
setSelectedResource(resource); setSelectedResource(resource);
readResource(resource.uri); readResource(resource.uri);
@@ -90,6 +95,7 @@ const ResourcesTab = ({
<ListPane <ListPane
items={resourceTemplates} items={resourceTemplates}
listItems={listResourceTemplates} listItems={listResourceTemplates}
clearItems={clearResourceTemplates}
setSelectedItem={(template) => { setSelectedItem={(template) => {
setSelectedTemplate(template); setSelectedTemplate(template);
setSelectedResource(null); setSelectedResource(null);

View File

@@ -18,6 +18,7 @@ import { CompatibilityCallToolResult } from "@modelcontextprotocol/sdk/types.js"
const ToolsTab = ({ const ToolsTab = ({
tools, tools,
listTools, listTools,
clearTools,
callTool, callTool,
selectedTool, selectedTool,
setSelectedTool, setSelectedTool,
@@ -27,6 +28,7 @@ const ToolsTab = ({
}: { }: {
tools: Tool[]; tools: Tool[];
listTools: () => void; listTools: () => void;
clearTools: () => void;
callTool: (name: string, params: Record<string, unknown>) => void; callTool: (name: string, params: Record<string, unknown>) => void;
selectedTool: Tool | null; selectedTool: Tool | null;
setSelectedTool: (tool: Tool) => void; setSelectedTool: (tool: Tool) => void;
@@ -50,7 +52,7 @@ const ToolsTab = ({
</pre> </pre>
<h4 className="font-semibold mb-2">Errors:</h4> <h4 className="font-semibold mb-2">Errors:</h4>
{parsedResult.error.errors.map((error, idx) => ( {parsedResult.error.errors.map((error, idx) => (
<pre <pre
key={idx} key={idx}
className="bg-gray-50 dark:bg-gray-800 dark:text-gray-100 p-4 rounded text-sm overflow-auto max-h-64" className="bg-gray-50 dark:bg-gray-800 dark:text-gray-100 p-4 rounded text-sm overflow-auto max-h-64"
> >
@@ -108,6 +110,7 @@ const ToolsTab = ({
<ListPane <ListPane
items={tools} items={tools}
listItems={listTools} listItems={listTools}
clearItems={clearTools}
setSelectedItem={setSelectedTool} setSelectedItem={setSelectedTool}
renderItem={(tool) => ( renderItem={(tool) => (
<> <>