1 line
5.6 KiB
JavaScript
1 line
5.6 KiB
JavaScript
import{j as t}from"./jsx-runtime.9YwcPWTT.js";import{r as f}from"./index.LFf77hJu.js";import{s as v,a as y}from"./index.675e42cf.fVIVoRGp.js";var N=(e=>(e[e.Next=0]="Next",e[e.Prev=1]="Prev",e[e.First=2]="First",e[e.Last=3]="Last",e[e.To=4]="To",e))(N||{});function F({items:e,limit:n=30}){const c=(h,d)=>{switch(d.type){case"update":return{...h,[d.name]:d.value};default:return h}},[s,a]=f.useReducer(c,{offset:0,total:0,limit:n}),o=(h,d=1)=>{let u=0;switch(h){case 0:u=s.offset+s.limit;break;case 1:u=s.offset-s.limit;break;case 2:u=0;break;case 3:u=e.length-s.limit;break;case 4:u=(d-1)*s.limit;break}u<0||u>e.length-s.limit||a({type:"update",name:"offset",value:u})};function m(){const d=Math.ceil(s.offset/s.limit)+1,u=Math.ceil(e.length/s.limit),g=Math.max(d-5-1,0),k=Math.min(d+5,u);return Array.from({length:k-g},(r,l)=>{const i=l+1+g;return{page:i,current:i===d}})}return{changeOffset:o,getPaginationRange:m,items:e.slice(s.offset,s.offset+s.limit)}}var j=(e=>(e[e.Index=0]="Index",e[e.String=1]="String",e[e.Number=2]="Number",e[e.Select=3]="Select",e[e.Multiple=4]="Multiple",e))(j||{});function w({options:e,isMultiple:n=!1,onChange:c,value:s=[]}){const[a,o]=f.useState([]),[m,h]=f.useState([]),[d,u]=f.useState(!1),g=f.useRef(null);f.useEffect(()=>{h(e)},[e]),f.useEffect(()=>{if(a.length===0){c(null);return}c(n?a:a[0])},[a]);const k=()=>{u(!0),g.current?.focus()},r=p=>{o(x=>n?[...x,p]:[p]),u(!1),g.current!==null&&(g.current.value="")},l=p=>{u(!1),o(x=>(x.splice(p,1),[...x]))},i=p=>{p.currentTarget.contains(p.relatedTarget)||u(!1)},b=({target:p})=>{if(p.value===""){h(e);return}const x=e.filter(S=>S.label.toLowerCase().search(p.value.toLowerCase())!==-1);h(x)};return t.jsxs("div",{className:v.wrapper,onBlur:i,children:[t.jsxs("div",{className:v.input,onClick:()=>{k()},children:[a.map((p,x)=>t.jsxs("div",{className:v.selectedItem+" hstack",children:[t.jsx("div",{children:p}),t.jsx("div",{className:v.deleteItem,onClick:()=>{l(x)},children:"X"})]},x)),t.jsx("input",{ref:g,className:v.realInput,type:"text",onChange:b})]}),t.jsx("button",{onClick:()=>{c(null),o([])},children:"X"}),t.jsx("div",{className:v.optionList,hidden:!d,children:m.map((p,x)=>t.jsx("button",{className:v.optionItem,disabled:a.includes(p.value),onClick:()=>{r(p.value)},children:p.label},x))})]})}function C({data:e,keyData:n,isMultiple:c=!1,onChange:s}){const a=f.useMemo(()=>{let o=[];return c?o=e.flatMap(m=>m[n]):o=e.map(m=>m[n]),o=[...new Set(o)],o=o.map(m=>({label:m,value:m})),o},[e,n]);return t.jsx(w,{options:a,isMultiple:c,onChange:s})}function I({keyData:e,onChange:n}){const[c,s]=f.useState(""),[a,o]=f.useState("=");return f.useEffect(()=>{n([a,c===""?null:parseFloat(c)])},[c,a]),t.jsxs("div",{className:"hstack",children:[t.jsxs("select",{name:`number-select-${e}`,id:`number-select-${e}`,defaultValue:"=",onChange:({target:m})=>{o(m.value)},children:[t.jsx("option",{value:"=",children:"="}),t.jsx("option",{value:">",children:">"}),t.jsx("option",{value:"<",children:"<"}),t.jsx("option",{value:">=",children:">="}),t.jsx("option",{value:"<=",children:"<="})]}),t.jsx("input",{name:`number-input-${e}`,id:"foo",type:"number",placeholder:"1",onChange:({target:m})=>{s(m.value)}})]})}const M=(e,n)=>n.toLowerCase().search(e.toLowerCase())!==-1,L=(e,n)=>{if(!Array.isArray(e))throw new Error("Value should be an array in the form of [operator: string, value: number]");const[c,s]=e;if(s===null)return!0;switch(c){case"=":return n===s;case"<":return n<s;case">":return n>s;case"<=":return n<=s;case">=":return n>=s;default:return n===s}},P=(e,n)=>n===e,E=(e,n)=>e===null?!0:typeof e=="string"||typeof e=="number"?n.includes(e):e.every(c=>n.includes(c)),R=(e,n)=>{switch(e.type){case j.String:return M(e.value,n);case j.Number:return L(e.value,n);case j.Select:return P(e.value,n);case j.Multiple:return E(e.value,n)}return!0};function $({data:e,headers:n}){const[c,s]=f.useState({}),a=f.useRef(crypto.randomUUID()),o=f.useMemo(()=>e.filter(r=>Object.entries(c).every(([l,i])=>R(i,r[l]))),[e,c]),{items:m,changeOffset:h,getPaginationRange:d}=F({items:o,limit:10}),u=(r,l,i)=>{s(b=>i===null?(delete b[r],{...b}):{...b,[r]:{value:i,type:l}})};function g(r,l){return l.hasCustomCell?t.jsx("div",{dangerouslySetInnerHTML:{__html:r.customCell}}):l.type===j.Multiple?t.jsx("ul",{className:"text-start",children:r[l.key].map((i,b)=>t.jsx("li",{children:i},b))}):r[l.key]}function k(r){const l={key:r.key+a.current,keyData:r.key,value:c[r.key]?.value,onChange:i=>{u(r.key,r.type,i)}};switch(r.type){case j.String:return t.jsx("input",{onChange:i=>{l.onChange(i.target.value)}},l.key);case j.Number:return t.jsx(I,{...l,onChange:i=>{u(r.key,r.type,i)}});case j.Select:return t.jsx(C,{data:e,...l});case j.Multiple:return t.jsx(C,{...l,isMultiple:!0,data:e})}return t.jsx(t.Fragment,{})}return t.jsxs(t.Fragment,{children:[t.jsx("section",{className:"hstack",children:t.jsx("button",{className:"ml-auto",onClick:()=>{s({}),a.current=crypto.randomUUID()},children:"Clear Filters"})}),t.jsx("section",{className:"mt-1 overflow-scroll",children:t.jsxs("table",{className:y.table,children:[t.jsx("thead",{children:t.jsx("tr",{children:n.map((r,l)=>t.jsx("th",{children:t.jsxs("div",{className:"vstack",children:[r.header,k(r)]})},l))})}),t.jsx("tbody",{children:m.map((r,l)=>t.jsx("tr",{children:n.map((i,b)=>t.jsx("td",{children:g(r,i)},b))},l))})]})}),t.jsxs("section",{className:"mt-1",children:[t.jsx("button",{onClick:()=>{h(N.First)},children:"First"}),t.jsx("button",{onClick:()=>{h(N.Prev)},children:"Prev"}),d().map(r=>t.jsx("button",{className:r.current?"btn-primary":"",onClick:()=>{h(N.To,r.page)},children:r.page},r.page)),t.jsx("button",{onClick:()=>{h(N.Next)},children:"Next"}),t.jsx("button",{onClick:()=>{h(N.Last)},children:"Last"})]})]})}export{$ as default};
|