@jswork/react-selection
Version:
Selection component for react.
2 lines • 1.96 kB
JavaScript
var L=Object.defineProperty,K=Object.defineProperties;var O=Object.getOwnPropertyDescriptors;var E=Object.getOwnPropertySymbols;var R=Object.prototype.hasOwnProperty,v=Object.prototype.propertyIsEnumerable;var k=(e,c,t)=>c in e?L(e,c,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[c]=t,y=(e,c)=>{for(var t in c||(c={}))R.call(c,t)&&k(e,t,c[t]);if(E)for(var t of E(c))v.call(c,t)&&k(e,t,c[t]);return e},D=(e,c)=>K(e,O(c)),f=(e,c)=>L(e,"name",{value:c,configurable:!0});var w=(e,c)=>{var t={};for(var s in e)R.call(e,s)&&c.indexOf(s)<0&&(t[s]=e[s]);if(e!=null&&E)for(var s of E(e))c.indexOf(s)<0&&v.call(e,s)&&(t[s]=e[s]);return t};import j,{useState as z,useEffect as B,useCallback as I}from"react";import{ReactList as F,renderSlot as G,getKey as S}from"@jswork/react-list";import H from"fast-deep-equal";var J=f((e,c)=>{let t=e.indexOf(c);return t>-1?e.splice(t,1):e.push(c),e},"toggle"),A;(function(e){e.MAX_LIMIT_EXCEED="MAX_LIMIT_EXCEED"})(A||(A={}));var N=f(e=>{let M=e,{allowDeselect:c=!1,max:t=1e3,value:s,onChange:o,onError:m,multiple:u=!1,valueExtractor:i="value",slots:p}=M,C=w(M,["allowDeselect","max","value","onChange","onError","multiple","valueExtractor","slots"]),[l,x]=z(s||(u?[]:null));B(()=>{let a=H(s,l);s!==void 0&&!a&&(x(s),o==null||o(s))},[s,o,l]);let T=I(a=>{let n=S(a,0,i),d=c&&n===l?null:n;x(d),l!==d&&(o==null||o(d))},[l,c,i,o]),b=I(a=>{let n=J([...l],S(a,0,i)),r=t>0?n.slice(0,t):n;if(n.length>t){m==null||m({code:"MAX_LIMIT_EXCEED"});return}x(r),o==null||o(r)},[l,t,i,m,o]),h=u?b:T,V=I(a=>{let{item:n,index:r,data:d}=a,X=S(n,r,i),_=u?l==null?void 0:l.includes(X):l===X,g=u&&(l==null?void 0:l.length)>=t&&!_,q=f(()=>h(n),"onClick");return G(p.item,{item:n,index:r,data:d,active:_,disabled:g,onClick:q})},[l,u,t,i,h,p.item]);return j.createElement(F,D(y({keyExtractor:i},C),{slots:{item:V,empty:p.empty}}))},"ReactSelection"),Y=N;export{A as ErrorCode,N as ReactSelection,Y as default};
//# sourceMappingURL=index.esm.js.map