diff --git a/lightrag_webui/src/components/retrieval/QuerySettings.tsx b/lightrag_webui/src/components/retrieval/QuerySettings.tsx index cae20637..4ffebbb1 100644 --- a/lightrag_webui/src/components/retrieval/QuerySettings.tsx +++ b/lightrag_webui/src/components/retrieval/QuerySettings.tsx @@ -31,6 +31,12 @@ export default function QuerySettings() { handleChange('user_prompt', prompt) }, [handleChange]) + const handleDeleteFromHistory = useCallback((index: number) => { + const newHistory = [...userPromptHistory] + newHistory.splice(index, 1) + useSettingsStore.getState().setUserPromptHistory(newHistory) + }, [userPromptHistory]) + // Default values for reset functionality const defaultValues = useMemo(() => ({ mode: 'mix' as QueryMode, @@ -96,6 +102,7 @@ export default function QuerySettings() { value={querySettings.user_prompt || ''} onChange={(value) => handleChange('user_prompt', value)} onSelectFromHistory={handleSelectFromHistory} + onDeleteFromHistory={handleDeleteFromHistory} history={userPromptHistory} placeholder={t('retrievePanel.querySettings.userPromptPlaceholder')} className="h-9" diff --git a/lightrag_webui/src/components/ui/UserPromptInputWithHistory.tsx b/lightrag_webui/src/components/ui/UserPromptInputWithHistory.tsx index 941415b2..3e6640a2 100644 --- a/lightrag_webui/src/components/ui/UserPromptInputWithHistory.tsx +++ b/lightrag_webui/src/components/ui/UserPromptInputWithHistory.tsx @@ -1,5 +1,5 @@ import React, { useState, useRef, useEffect, useCallback } from 'react' -import { ChevronDown } from 'lucide-react' +import { ChevronDown, X } from 'lucide-react' import { cn } from '@/lib/utils' import Input from './Input' @@ -11,6 +11,7 @@ interface UserPromptInputWithHistoryProps { id?: string history: string[] onSelectFromHistory: (prompt: string) => void + onDeleteFromHistory?: (index: number) => void } export default function UserPromptInputWithHistory({ @@ -20,7 +21,8 @@ export default function UserPromptInputWithHistory({ className, id, history, - onSelectFromHistory + onSelectFromHistory, + onDeleteFromHistory }: UserPromptInputWithHistoryProps) { const [isOpen, setIsOpen] = useState(false) const [selectedIndex, setSelectedIndex] = useState(-1) @@ -111,6 +113,25 @@ export default function UserPromptInputWithHistory({ setIsHovered(false) } + // Handle delete history item with boundary cases + const handleDeleteHistoryItem = useCallback((index: number, e: React.MouseEvent) => { + e.stopPropagation() // Prevent triggering item selection + onDeleteFromHistory?.(index) + + // Handle boundary cases + if (history.length === 1) { + // Deleting the last item, close dropdown + setIsOpen(false) + setSelectedIndex(-1) + } else if (selectedIndex === index) { + // Deleting currently selected item, adjust selection + setSelectedIndex(prev => prev > 0 ? prev - 1 : -1) + } else if (selectedIndex > index) { + // Deleting item before selected item, adjust index + setSelectedIndex(prev => prev - 1) + } + }, [onDeleteFromHistory, history.length, selectedIndex]) + return (
@@ -144,23 +165,36 @@ export default function UserPromptInputWithHistory({ {/* Dropdown */} {isOpen && history.length > 0 && ( -
+
{history.map((prompt, index) => ( -
- + + {onDeleteFromHistory && ( + + )} +
))}
)} diff --git a/lightrag_webui/src/stores/settings.ts b/lightrag_webui/src/stores/settings.ts index e5761fc1..123a15db 100644 --- a/lightrag_webui/src/stores/settings.ts +++ b/lightrag_webui/src/stores/settings.ts @@ -220,9 +220,9 @@ const useSettingsStoreBase = create()( // Add to beginning newHistory.unshift(prompt) - // Keep only last 10 items - if (newHistory.length > 10) { - newHistory.splice(10) + // Keep only last 8 items + if (newHistory.length > 8) { + newHistory.splice(8) } return { userPromptHistory: newHistory }