Rev 3610 | Rev 3658 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import { useEffect, useState, useCallback } from 'react';import { useApi } from './useApi';import { useAlert } from './useAlert';import { useInfinityScroll } from './useInfinityScroll';import { getMessages } from '@inmail/services';export function usePagination(url) {const [items, setItems] = useState([]);const [page, setPage] = useState(1);const [totalPages, setTotalPages] = useState(1);const { showError } = useAlert();const { data, loading, execute } = useApi(getMessages, {onError: (error) => {showError(error.message);}});const nextPage = useCallback(() => {if (page < totalPages && !loading) {setPage((prevPage) => prevPage + 1);}}, [page, totalPages, loading]);const { elementRef } = useInfinityScroll({onIntersect: nextPage});const resetPagination = useCallback(() => {setItems([]);setPage(1);setTotalPages(1);}, []);useEffect(() => {if (url) {execute(`${url}?page=${page}`);}}, [page, url]);useEffect(() => {resetPagination();}, [url]);useEffect(() => {if (data) {setItems((prevItems) => {if (data.current.page > 1) {return [...prevItems, ...data.current.items];} else {return data.current.items;}});setTotalPages(data.total.pages);}}, [data]);return {items,loading,elementRef,nextPage,resetPagination};}