@ebay/ui-core-react
Version:
Skin components build off React
2 lines (1 loc) • 6.13 kB
JavaScript
;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Q=require("../tslib.es6-BW4cJBUu.js"),j=require("classnames"),t=require("react"),te=require("../utils-C9NL3q0j.js"),ne=require("../debounce-BQsYxxOL.js"),J=require("../menu-button-label-CuugnqJs.js"),re=require("../icons/ebay-icon-overflow-horizontal-24/index.js"),ie=require("../forwardRef-DBQKIlPy.js");require("../array.polyfill.flat-5BAolFdk.js");const oe=require("../icons/ebay-icon-arrow-left-16/index.js"),ae=require("../icons/ebay-icon-arrow-right-16/index.js"),se=1,M=9,K=4,V=2,ce=M-V;function le(e,n,a=e,v=null){const f=v==="show-last"||v==="overflow"&&e>M,W=v==="overflow"&&e>M,s=Math.min(a,e),E=Math.max(0,n-Math.ceil((s-1)/2)),b=s<K?n:Math.max(0,n-Math.floor((s-1)/2)),y=(f?b:E)+s,w=y>=e,N=n<=K,g=(l,o)=>{const r=L(e,l,o);return s>2?(r[o-2]="dots",r[o-1]="hidden",r[e-1]="visible"):s>1&&(r[o-1]="dots"),r},C=(l,o)=>{if(N)return g(0,o);if(w){const m=L(e,e-ce,e);return m[0]="visible",m[1]="dots",m}const r=L(e,n-V,n+V+1);return r[0]="visible",r[1]=N?"visible":"dots",r[e-2]="dots",r[e-1]="visible",r};return w&&e<=M?L(e,e-s):f?W?C(b,y):g(b,y):L(e,E,y)}function ue(e,n,a,v="show-range"){if(e===-1)return[];const f=v==="overflow"?M:de(Math.min(a,n),se,M);return le(a,e-1,f,v)}function de(e,n,a){return e<=n?n:e>=a?a:e}function L(e,n,a){return Array(e).fill("hidden").fill("visible",n,a)}function fe(e){if(!e)return 0;e.style.width="100vw";const n=e.offsetWidth;return e.style.width=null,n}const ve=e=>{var{id:n="ebay-pagination",a11yHeadingTag:a="h2",className:v,a11yCurrentText:f="Results Pagination - Page 1",a11yPreviousText:W="Previous page",a11yNextText:s="Next page",variant:E="show-range",fluid:b=!1,onPrevious:y=()=>{},onNext:w=()=>{},onSelect:N=()=>{},children:g}=e,C=Q.__rest(e,["id","a11yHeadingTag","className","a11yCurrentText","a11yPreviousText","a11yNextText","variant","fluid","onPrevious","onNext","onSelect","children"]);const l=t.useRef(null),o=t.useRef([]);o.current=t.Children.map(g,t.createRef);const r=te.filterBy(g,({props:i})=>i.type===void 0||i.type==="page").length,m=()=>{var i,d,c;const x=(d=(i=o.current[0])===null||i===void 0?void 0:i.current)===null||d===void 0?void 0:d.offsetWidth,p=o.current.slice(1).find(q=>{var D;return(D=q.current)===null||D===void 0?void 0:D.offsetWidth}),h=(c=p?.current)===null||c===void 0?void 0:c.offsetWidth;return h?Math.floor((fe(l.current)-x*2)/h):0},[T,z]=t.useState([]),[A,H]=t.useState(0),I=i=>{const d=i||o.current.findIndex(p=>{var h;return((h=p.current)===null||h===void 0?void 0:h.getAttribute("aria-current"))==="page"}),c=m(),x=ue(d,c,r,E);H(d),z(["hidden",...x])};t.useEffect(()=>{const i=ne.debounce(I,16);I();const d=()=>i();window.addEventListener("resize",d);let c=null;return l.current&&typeof IntersectionObserver<"u"&&(c=new IntersectionObserver(x=>{x.forEach(p=>{p.isIntersecting&&I()})},{threshold:0,root:null}),c.observe(l.current)),()=>{window.removeEventListener("resize",d),c?.disconnect()}},[g]);const S=i=>{let d=0;const c=[],x=[],p=[],h=T.indexOf("dots"),q=T.lastIndexOf("dots");return t.Children.map(g,(D,_)=>{const{type:k="page",current:Y,disabled:Z,href:G,children:U}=D.props,B=T[_]==="dots",F=`${n}-item-${_}`,X=T[_]==="hidden",ee={current:Y,disabled:Z,href:G,type:B&&k==="page"?"separator":k,children:B?t.createElement(re.EbayIconOverflowHorizontal24,{focusable:!1}):U,pageIndex:k==="page"?d++:void 0,key:F,hide:X,onPrevious:y,onNext:w,onSelect:N,a11yPreviousText:W,a11yNextText:s,ref:o.current[_]};if((X||B)&&k==="page"){const O=t.createElement(J.EbayFakeMenuButtonItem,{key:F,href:G,onClick:$=>{G||$.preventDefault();const R=$.currentTarget;N($,{value:R?.innerText||"",index:d}),I(Number(R?.innerText))}},U);h===q&&p.push(O),A-2>h&&_<A&&c.push(O),A+2<q&&_>A&&x.push(O)}if(i==="page"&&B&&E==="overflow"){let O=p;return h!==q&&(O=_===2?c:x),t.createElement("li",{key:F},t.createElement("span",{className:"pagination__item",role:"separator"},t.createElement(J.EbayMenuButton,{a11yText:"Menu",borderless:!0,variant:"overflow",noToggleIcon:!0},O)))}return i===k?t.cloneElement(D,ee):null})},P=`${n}-pagination-heading`,u=a;return t.createElement("nav",Object.assign({},C,{role:"navigation",className:j(v,"pagination",{"pagination--fluid":b}),"aria-labelledby":P,ref:l}),t.createElement("span",{"aria-live":"polite",role:"status"},t.createElement(u,{className:"clipped",id:P},f)),S("previous"),t.createElement("ol",{className:"pagination__items"},S("page")),S("next"))},pe=e=>{var{pageIndex:n=0,key:a,current:v,disabled:f,type:W="page",href:s,hide:E,children:b,a11yPreviousText:y="Previous page",a11yNextText:w="Next page",onSelect:N,onNext:g,onPrevious:C,className:l,style:o,forwardedRef:r}=e,m=Q.__rest(e,["pageIndex","key","current","disabled","type","href","hide","children","a11yPreviousText","a11yNextText","onSelect","onNext","onPrevious","className","style","forwardedRef"]);const T=u=>{var i;N(u,{value:((i=u.currentTarget)===null||i===void 0?void 0:i.innerText)||"",index:n})},z=u=>{if(u.currentTarget.getAttribute("aria-disabled")){u.preventDefault();return}g(u)},A=u=>{if(u.currentTarget.getAttribute("aria-disabled")){u.preventDefault();return}C(u)},H=!!s,I=H?"a":"button",S=H?"icon-link":"icon-btn",P=Object.assign(Object.assign({},o),{minWidth:"40px"});switch(W){case"previous":return t.createElement(I,Object.assign({},m,{ref:r,"aria-disabled":f?"true":void 0,"aria-label":y,href:f?void 0:s,className:j(l,S,"pagination__previous"),style:P,onClick:A}),t.createElement(oe.EbayIconArrowLeft16,null));case"next":return t.createElement(I,Object.assign({},m,{ref:r,"aria-disabled":f?"true":void 0,"aria-label":w,href:f?void 0:s,className:j(l,S,"pagination__next"),style:P,onClick:z}),t.createElement(ae.EbayIconArrowRight16,null));case"separator":return t.createElement("span",{key:a,style:o,className:j(l,"pagination__item"),ref:r,role:"separator"},b);default:return t.createElement("li",Object.assign({},m,{hidden:E}),t.createElement(I,{ref:r,"aria-current":v?"page":void 0,href:s,className:j(l,"pagination__item"),style:o,key:a,onClick:T},b))}},he=ie.withForwardRef(pe);exports.EbayPagination=ve;exports.EbayPaginationItem=he;