diff --git a/wavefront/client/src/api/knowledge-base-service.ts b/wavefront/client/src/api/knowledge-base-service.ts index 95ba6002..2adc22e2 100644 --- a/wavefront/client/src/api/knowledge-base-service.ts +++ b/wavefront/client/src/api/knowledge-base-service.ts @@ -9,22 +9,26 @@ export interface NewKnowledgeBasePayload { vector_size: number; } +// Interface for partially updating a knowledge base +export interface UpdateKnowledgeBasePayload { + name?: string; + description?: string; + type?: string; +} + export interface KbData { id: string; name: string; description: string; + type: string; created_at: string; updated_at: string; } -// Interface for knowledge base data -export interface KnowledgeBaseData { - data: KbData; -} export type KnowledgeBaseDetail = IApiResponse; // Interface for a single knowledge base response -export type KnowledgeBaseDetailResponse = IApiResponse; +export type KnowledgeBaseDetailResponse = IApiResponse; // Interface for listing knowledge bases export interface KnowledgeBaseListData { @@ -96,6 +100,14 @@ export class KnowledgeBaseService { return response; } + async updateKnowledgeBase(kbId: string, payload: UpdateKnowledgeBasePayload): Promise { + const response: KnowledgeBaseDetailResponse = await this.http.patch( + `/v1/:appId/floware/v1/knowledge-bases/${kbId}`, + payload + ); + return response; + } + async listKnowledgeBases(offset: number = 0, limit: number = 10): Promise { const response: KnowledgeBaseListResponse = await this.http.get(`/v1/:appId/floware/v1/knowledge-bases`, { params: { offset, limit }, diff --git a/wavefront/client/src/components/KnowledgeBaseCard.tsx b/wavefront/client/src/components/KnowledgeBaseCard.tsx index b244a307..5cd34997 100644 --- a/wavefront/client/src/components/KnowledgeBaseCard.tsx +++ b/wavefront/client/src/components/KnowledgeBaseCard.tsx @@ -6,9 +6,10 @@ interface KnowledgeBaseCardProps { kb: KbData; onClick: (kbId: string) => void; onDeleteClick: (e: React.MouseEvent, kb: KbData) => void; + onEditClick?: (e: React.MouseEvent, kb: KbData) => void; } -const KnowledgeBaseCard: React.FC = ({ kb, onClick, onDeleteClick }) => { +const KnowledgeBaseCard: React.FC = ({ kb, onClick, onDeleteClick, onEditClick }) => { const metadata: ResourceCardMetadata[] = [ { label: 'Knowledge Base ID', @@ -24,7 +25,9 @@ const KnowledgeBaseCard: React.FC = ({ kb, onClick, onDe metadata={metadata} onClick={() => onClick(kb.id)} onDeleteClick={(e) => onDeleteClick(e, kb)} + onEditClick={onEditClick ? (e) => onEditClick(e, kb) : undefined} deleteTitle="Delete knowledge base" + editTitle="Edit knowledge base" /> ); }; diff --git a/wavefront/client/src/components/ResourceCard.tsx b/wavefront/client/src/components/ResourceCard.tsx index 50c84183..13c6ae5f 100644 --- a/wavefront/client/src/components/ResourceCard.tsx +++ b/wavefront/client/src/components/ResourceCard.tsx @@ -1,4 +1,4 @@ -import { TrashIcon } from 'lucide-react'; +import { Pencil, TrashIcon } from 'lucide-react'; import React from 'react'; export interface ResourceCardMetadata { @@ -14,7 +14,9 @@ interface ResourceCardProps { metadata: ResourceCardMetadata[]; onClick: () => void; onDeleteClick: (e: React.MouseEvent) => void; + onEditClick?: (e: React.MouseEvent) => void; deleteTitle?: string; + editTitle?: string; } const ResourceCard: React.FC = ({ @@ -23,7 +25,9 @@ const ResourceCard: React.FC = ({ metadata, onClick, onDeleteClick, + onEditClick, deleteTitle = 'Delete', + editTitle = 'Edit', }) => { return (
= ({ {title}
+ {onEditClick && ( + + )}