Skip to content

Commit cc17ba8

Browse files
committed
feat: Add button to clear loaded items
Add a button to the ListPane component that clears loaded items. This will allow the user to clear and reload resources, resource templates, prompts or tools when they expect the available items to have changed.
1 parent 9452991 commit cc17ba8

File tree

5 files changed

+39
-1
lines changed

5 files changed

+39
-1
lines changed

client/src/App.tsx

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -525,10 +525,18 @@ const App = () => {
525525
clearError("resources");
526526
listResources();
527527
}}
528+
clearResources={() => {
529+
setResources([]);
530+
setNextResourceCursor(undefined);
531+
}}
528532
listResourceTemplates={() => {
529533
clearError("resources");
530534
listResourceTemplates();
531535
}}
536+
clearResourceTemplates={() => {
537+
setResourceTemplates([]);
538+
setNextResourceTemplateCursor(undefined);
539+
}}
532540
readResource={(uri) => {
533541
clearError("resources");
534542
readResource(uri);
@@ -549,6 +557,10 @@ const App = () => {
549557
clearError("prompts");
550558
listPrompts();
551559
}}
560+
clearPrompts={() => {
561+
setPrompts([]);
562+
setNextPromptCursor(undefined);
563+
}}
552564
getPrompt={(name, args) => {
553565
clearError("prompts");
554566
getPrompt(name, args);
@@ -568,6 +580,10 @@ const App = () => {
568580
clearError("tools");
569581
listTools();
570582
}}
583+
clearTools={() => {
584+
setTools([]);
585+
setNextToolCursor(undefined);
586+
}}
571587
callTool={(name, params) => {
572588
clearError("tools");
573589
callTool(name, params);

client/src/components/ListPane.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { Button } from "./ui/button";
33
type ListPaneProps<T> = {
44
items: T[];
55
listItems: () => void;
6+
clearItems: () => void;
67
setSelectedItem: (item: T) => void;
78
renderItem: (item: T) => React.ReactNode;
89
title: string;
@@ -13,6 +14,7 @@ type ListPaneProps<T> = {
1314
const ListPane = <T extends object>({
1415
items,
1516
listItems,
17+
clearItems,
1618
setSelectedItem,
1719
renderItem,
1820
title,
@@ -32,6 +34,14 @@ const ListPane = <T extends object>({
3234
>
3335
{buttonText}
3436
</Button>
37+
<Button
38+
variant="outline"
39+
className="w-full mb-4"
40+
onClick={clearItems}
41+
disabled={items.length === 0}
42+
>
43+
Clear
44+
</Button>
3545
<div className="space-y-2 overflow-y-auto max-h-96">
3646
{items.map((item, index) => (
3747
<div

client/src/components/PromptsTab.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export type Prompt = {
2222
const PromptsTab = ({
2323
prompts,
2424
listPrompts,
25+
clearPrompts,
2526
getPrompt,
2627
selectedPrompt,
2728
setSelectedPrompt,
@@ -31,6 +32,7 @@ const PromptsTab = ({
3132
}: {
3233
prompts: Prompt[];
3334
listPrompts: () => void;
35+
clearPrompts: () => void;
3436
getPrompt: (name: string, args: Record<string, string>) => void;
3537
selectedPrompt: Prompt | null;
3638
setSelectedPrompt: (prompt: Prompt) => void;
@@ -55,6 +57,7 @@ const PromptsTab = ({
5557
<ListPane
5658
items={prompts}
5759
listItems={listPrompts}
60+
clearItems={clearPrompts}
5861
setSelectedItem={(prompt) => {
5962
setSelectedPrompt(prompt);
6063
setPromptArgs({});

client/src/components/ResourcesTab.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ const ResourcesTab = ({
1616
resources,
1717
resourceTemplates,
1818
listResources,
19+
clearResources,
1920
listResourceTemplates,
21+
clearResourceTemplates,
2022
readResource,
2123
selectedResource,
2224
setSelectedResource,
@@ -28,7 +30,9 @@ const ResourcesTab = ({
2830
resources: Resource[];
2931
resourceTemplates: ResourceTemplate[];
3032
listResources: () => void;
33+
clearResources: () => void;
3134
listResourceTemplates: () => void;
35+
clearResourceTemplates: () => void;
3236
readResource: (uri: string) => void;
3337
selectedResource: Resource | null;
3438
setSelectedResource: (resource: Resource | null) => void;
@@ -68,6 +72,7 @@ const ResourcesTab = ({
6872
<ListPane
6973
items={resources}
7074
listItems={listResources}
75+
clearItems={clearResources}
7176
setSelectedItem={(resource) => {
7277
setSelectedResource(resource);
7378
readResource(resource.uri);
@@ -90,6 +95,7 @@ const ResourcesTab = ({
9095
<ListPane
9196
items={resourceTemplates}
9297
listItems={listResourceTemplates}
98+
clearItems={clearResourceTemplates}
9399
setSelectedItem={(template) => {
94100
setSelectedTemplate(template);
95101
setSelectedResource(null);

client/src/components/ToolsTab.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { CompatibilityCallToolResult } from "@modelcontextprotocol/sdk/types.js"
1818
const ToolsTab = ({
1919
tools,
2020
listTools,
21+
clearTools,
2122
callTool,
2223
selectedTool,
2324
setSelectedTool,
@@ -27,6 +28,7 @@ const ToolsTab = ({
2728
}: {
2829
tools: Tool[];
2930
listTools: () => void;
31+
clearTools: () => void;
3032
callTool: (name: string, params: Record<string, unknown>) => void;
3133
selectedTool: Tool | null;
3234
setSelectedTool: (tool: Tool) => void;
@@ -50,7 +52,7 @@ const ToolsTab = ({
5052
</pre>
5153
<h4 className="font-semibold mb-2">Errors:</h4>
5254
{parsedResult.error.errors.map((error, idx) => (
53-
<pre
55+
<pre
5456
key={idx}
5557
className="bg-gray-50 dark:bg-gray-800 dark:text-gray-100 p-4 rounded text-sm overflow-auto max-h-64"
5658
>
@@ -108,6 +110,7 @@ const ToolsTab = ({
108110
<ListPane
109111
items={tools}
110112
listItems={listTools}
113+
clearItems={clearTools}
111114
setSelectedItem={setSelectedTool}
112115
renderItem={(tool) => (
113116
<>

0 commit comments

Comments
 (0)