import { useState, useCallback, useEffect } from 'react'; import { Modal, Input, List, Typography, Space, Pagination, Spin, Button } from 'antd'; import { SearchOutlined, CheckOutlined } from '@ant-design/icons'; import { paperlessApi } from '../api/paperless'; import { getEnv } from '../utils/env'; import { AuthImage } from '../utils/auth-resource'; import dayjs from 'dayjs'; const { Text } = Typography; interface Props { open: boolean; onCancel: () => void; onSelect: (doc: any) => void; } export default function DocumentSearchModal({ open, onCancel, onSelect }: Props) { const [loading, setLoading] = useState(false); const [search, setSearch] = useState(''); const [data, setData] = useState([]); const [total, setTotal] = useState(0); const [page, setPage] = useState(1); const [pageSize] = useState(10); const load = useCallback(async (q: string, p: number) => { setLoading(true); try { const response = await paperlessApi.searchDocuments({ search: q, page: p, pageSize: pageSize, }); setData(response.results); setTotal(response.count); } catch (e) { console.error("Error searching documents", e); } finally { setLoading(false); } }, [pageSize]); useEffect(() => { if (open) { load(search, page); } }, [open, page, load]); // We don't trigger on search immediately to allow 'Search' button or Enter const handleSearch = (val: string) => { setSearch(val); setPage(1); load(val, 1); }; return (
} onSearch={handleSearch} loading={loading} allowClear />
( } onClick={() => onSelect(doc)} > Auswählen ]} > } title={doc.title} description={ ID: {doc.id} | ASN: {doc.archive_serial_number || 'Keine'} Erstellt: {dayjs(doc.created).format('DD.MM.YYYY')} } /> )} /> {total > pageSize && (
setPage(p)} size="small" />
)}
); }