diff --git a/frontend/src/ASNsNewManager.jsx b/frontend/src/ASNsNewManager.jsx index f48f29d..28d8651 100644 --- a/frontend/src/ASNsNewManager.jsx +++ b/frontend/src/ASNsNewManager.jsx @@ -45,6 +45,7 @@ function ASNsNewManager() { const [showDeleteModal, setShowDeleteModal] = useState(false); const [itemToDelete, setItemToDelete] = useState(null); const [currentPage, setCurrentPage] = useState(1); + const [totalItems, setTotalItems] = useState(0); const [sortField, setSortField] = useState('asn'); const [sortOrder, setSortOrder] = useState('asc'); const [filterCommunity, setFilterCommunity] = useState(''); @@ -100,11 +101,14 @@ function ASNsNewManager() { const fetchItems = async () => { setLoading(true); try { - const response = await api.get(`/asns`, { params: { offset: 0, limit: 0 } }); - const payload = Array.isArray(response.data?.items) ? response.data.items : (Array.isArray(response.data) ? response.data : []); + const effectiveQ = searchTerm ? searchTerm : (filterCommunity ? filterCommunity : ''); + const response = await api.get(`/asns`, { params: { q: effectiveQ, offset: Math.max(0, (currentPage - 1) * pageSize), limit: pageSize, format: 'std' } }); + const payload = Array.isArray(response.data?.items) ? response.data.items : []; + const total = Number(response.data?.total ?? (Array.isArray(response.data) ? response.data.length : 0)); const mapped = payload.map(item => ({ asn: item.domain, community: item.type })); setItems(mapped); setOriginalItems(mapped); + setTotalItems(Number.isFinite(total) ? total : 0); setEtag(response.headers?.etag || ''); setLastModified(response.headers?.['last-modified'] || ''); const lengthHeader = response.headers?.['content-length-source']; @@ -118,6 +122,11 @@ function ASNsNewManager() { } }; + useEffect(() => { + fetchItems(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [currentPage, searchTerm, filterCommunity]); + const handleAddItem = () => { const asnOk = isValidAsn(newItem.asn); const communityOk = isValidCommunity(newItem.community); @@ -327,14 +336,9 @@ function ASNsNewManager() { ? sortedItems.filter(i => i.community === filterCommunity) : sortedItems; - // Поиск - const filteredItems = filteredByCommunity.filter(i => - i.asn.toLowerCase().includes(searchTerm.toLowerCase()) - ); - - // Пагинация - const totalPages = Math.ceil(filteredItems.length / pageSize); - const paginatedItems = filteredItems.slice((currentPage - 1) * pageSize, currentPage * pageSize); + // Пагинация теперь серверная + const paginatedItems = filteredByCommunity; + const totalPages = Math.max(1, Math.ceil((totalItems || paginatedItems.length) / pageSize)); // Для фильтра - список всех уникальных community const allCommunities = Array.from(new Set(items.map(i => i.community))); @@ -589,7 +593,7 @@ function ASNsNewManager() { {totalPages > 1 && (
- Показано {((currentPage - 1) * pageSize) + 1} - {Math.min(currentPage * pageSize, filteredItems.length)} из {filteredItems.length} + Показано {((currentPage - 1) * pageSize) + 1} - {((currentPage - 1) * pageSize) + paginatedItems.length} из {totalItems || paginatedItems.length}