@guruhotel/aura-hooks
Version:
🪝 Hooks library designed by the Guruhotel team for Aura UI
1 lines • 731 B
JavaScript
import{useMemo as t}from"react";import{useUncontrolled as e}from"../use-uncontrolled/use-uncontrolled";import{range as n}from"../utils";export const DOTS="dots";export function usePagination({total:r,siblings:o=1,boundaries:a=1,page:i,initialPage:u=1,onChange:s}){const[l,f]=e({value:i,onChange:s,defaultValue:u,finalValue:u}),c=t=>{f(t<=0?1:t>r?r:t)};return{range:t((()=>{if(2*o+3+2*a>=r)return n(1,r);const t=Math.max(l-o,a),e=Math.min(l+o,r-a),i=t>a+2,u=e<r-(a+1);if(!i&&u){return[...n(1,2*o+a+2),DOTS,...n(r-(a-1),r)]}if(i&&!u){const t=a+1+2*o;return[...n(1,a),DOTS,...n(r-t,r)]}return[...n(1,a),DOTS,...n(t,e),DOTS,...n(r-a+1,r)]}),[r,o,l]),active:l,setPage:c,next:()=>c(l+1),previous:()=>c(l-1),first:()=>c(1),last:()=>c(r)}}