import React, { useCallback, useEffect, useState } from 'react'; import type { ConversationTagsResponse, TConversationTag } from 'librechat-data-provider'; import { Table, TableHeader, TableBody, TableRow, TableCell, Input, Button } from '~/components/ui'; import { BookmarkContext, useBookmarkContext } from '~/Providers/BookmarkContext'; import BookmarkTableRow from './BookmarkTableRow'; import { useLocalize } from '~/hooks'; const BookmarkTable = () => { const localize = useLocalize(); const [rows, setRows] = useState([]); const [pageIndex, setPageIndex] = useState(0); const [searchQuery, setSearchQuery] = useState(''); const pageSize = 10; const { bookmarks } = useBookmarkContext(); useEffect(() => { setRows(bookmarks?.map((item) => ({ id: item.tag, ...item })) || []); }, [bookmarks]); const moveRow = useCallback((dragIndex: number, hoverIndex: number) => { setRows((prevTags: TConversationTag[]) => { const updatedRows = [...prevTags]; const [movedRow] = updatedRows.splice(dragIndex, 1); updatedRows.splice(hoverIndex, 0, movedRow); return updatedRows; }); }, []); const renderRow = useCallback((row: TConversationTag, position: number) => { return ; }, []); const filteredRows = rows.filter((row) => row.tag.toLowerCase().includes(searchQuery.toLowerCase()), ); const currentRows = filteredRows.slice(pageIndex * pageSize, (pageIndex + 1) * pageSize); return (
setSearchQuery(e.target.value)} className="w-full dark:border-gray-700" />
{localize('com_ui_bookmarks_title')}
{localize('com_ui_bookmarks_count')}
{currentRows.map((row, i) => renderRow(row, i))}
{localize('com_ui_showing')} {pageIndex * pageSize + 1} -{' '} {Math.min((pageIndex + 1) * pageSize, filteredRows.length)} {localize('com_ui_of')}{' '} {filteredRows.length}
); }; export default BookmarkTable;