123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- /* eslint-disable react/prop-types */
- import { FaTrash } from 'react-icons/fa';
- interface ChatSession {
- id: string;
- title: string;
- createdAt: number;
- }
- interface ChatHistoryListProps {
- sessions: ChatSession[];
- onSessionSelect: (sessionId: string) => void;
- onSessionDelete: (sessionId: string) => void;
- visible: boolean;
- isDarkMode?: boolean;
- }
- const ChatHistoryList: React.FC<ChatHistoryListProps> = ({
- sessions,
- onSessionSelect,
- onSessionDelete,
- visible,
- isDarkMode = false,
- }) => {
- if (!visible) return null;
- const formatDate = (timestamp: number) => {
- const date = new Date(timestamp);
- return date.toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric' });
- };
- return (
- <div className="h-full overflow-y-auto p-4">
- <h2 className={`mb-4 text-lg font-semibold ${isDarkMode ? 'text-gray-200' : 'text-gray-800'}`}>Chat History</h2>
- {sessions.length === 0 ? (
- <div
- className={`rounded-lg ${isDarkMode ? 'bg-slate-800 text-gray-400' : 'bg-white/30 text-gray-500'} p-4 text-center backdrop-blur-sm`}>
- No chat history available
- </div>
- ) : (
- <div className="space-y-2">
- {sessions.map(session => (
- <div
- key={session.id}
- className={`group relative rounded-lg ${
- isDarkMode ? 'bg-slate-800 hover:bg-slate-700' : 'bg-white/50 hover:bg-white/70'
- } p-3 transition-all backdrop-blur-sm`}>
- <button onClick={() => onSessionSelect(session.id)} className="w-full text-left" type="button">
- <h3 className={`text-sm font-medium ${isDarkMode ? 'text-gray-200' : 'text-gray-900'}`}>
- {session.title}
- </h3>
- <p className={`mt-1 text-xs ${isDarkMode ? 'text-gray-400' : 'text-gray-500'}`}>
- {formatDate(session.createdAt)}
- </p>
- </button>
- <button
- onClick={e => {
- e.stopPropagation();
- onSessionDelete(session.id);
- }}
- className={`absolute right-2 top-2 rounded p-1 opacity-0 transition-opacity group-hover:opacity-100 ${
- isDarkMode
- ? 'bg-slate-700 text-red-400 hover:bg-slate-600'
- : 'bg-white text-red-500 hover:bg-gray-100'
- }`}
- aria-label="Delete session"
- type="button">
- <FaTrash size={14} />
- </button>
- </div>
- ))}
- </div>
- )}
- </div>
- );
- };
- export default ChatHistoryList;
|