UNPKG

amotify

Version:

UI Component for React,NextJS,esbuild

2 lines (1 loc) 16.2 kB
import{b as n,c as p,d as G,e as be}from"../../chunk-C5N2D3ZX.js";import{Fragment as Be,jsx as o,jsxs as $}from"react/jsx-runtime";import u,{useStore as ne,UUID as ge}from"jmini";import me,{useState as Re,useEffect as se}from"react";import{ExtractStyles as X,GenerateHTMLProps as xe,dragEffect as ye,useRemote as ie}from"../../@utils";import{faArrowUp as Te}from"@fortawesome/free-solid-svg-icons/faArrowUp";import{faUpDown as De}from"@fortawesome/free-solid-svg-icons/faUpDown";import{Box as K,Flex as we,FAI as _,Span as ke}from"../../atoms";import{Literal as pe,Row as q,MarkerPen as he}from"../../mols";import{Button as ce}from"../Button";import E from"../Input";import{TableClasses as Ke}from"../../@styles/componentClasses";import{faGripVertical as Se}from"@fortawesome/free-solid-svg-icons/faGripVertical";import{Tips as Ce}from"../Tips";const b={reservedKeys:["row_id","onCheckerDisabled","onDraggerDisabled","columnIdx","isSelected","isFilterMatched","isVisible","draggerIndex","onRowClick"],toSafetyHeader:t=>{let e=!!t.some(l=>l.draggable);return(t==null?void 0:t.map((l,a)=>{var d;return u.isRecord(l)||(l={key:l}),u.isString(l.key)&&(l.key=l.key.replace(/[.\s]/g,"_")),e&&(l.sortable=0,l.filterable=!1),l.columnIdx=(d=l.columnIdx)!=null?d:a,l}).toASC("columnIdx"))||[]},toSafetyBody:t=>t==null?void 0:t.map((e,r)=>{var a;let l={};return Object.entries(e).forEach(([d,c])=>{var i,s;if(u.isOneOf(d,...b.reservedKeys))return;let g=c;u.isNullish(g)||(u.isRecord(g)||(g={data:g}),u.isString(d)&&(d=d.replace(/[.\s]/g,"_")),g.sortKey=(s=(i=g.sortKey)!=null?i:String(g.data))!=null?s:"",l[d]=g)}),l=p(n({},l),{row_id:(a=e.row_id)!=null?a:r,onRowClick:e.onRowClick,isSelected:!!e.isSelected,isFilterMatched:!0,isVisible:!0,onCheckerDisabled:e.onCheckerDisabled,onDraggerDisabled:e.onDraggerDisabled,draggerIndex:r}),l}),toSafetyData:t=>{var l,a;let{header:e=[]}=t,r={datagridID:t.datagridID||ge(),sessionID:ge(),body:b.toSafetyBody(t.body||[]),filter:{keyword:t.defaultSearchKey||"",current:[]},sort:{col:-1,dir:1},paging:{rows:t.maxRows||100,total:1,current:1},draggable:!!e.some(d=>d.draggable)};{let d=e==null?void 0:e.findIndex(c=>c.defSort);d!==-1&&(r.sort.col=d,r.sort.dir=(a=(l=e[d])==null?void 0:l.sortable)!=null?a:1)}return r.draggable&&(r.sort.col=-1,r.sort.dir=0),b.updateRowMeta(r,t)},updateRowMeta:(t,e)=>{var l;let r=n({},t);if(r.sort.col>=0&&r.sort.dir){let a=((l=e.header[r.sort.col])==null?void 0:l.key)||"";r.sort.dir==1?r.body.toASC(a+".sortKey"):r.body.toDESC(a+".sortKey")}{let a=String(r.filter.keyword)||"";r.body.forEach(d=>{if(d.isFilterMatched=!0,!a)return;let c=e.header.some(g=>{var f;let i=d[g.key];return!i||!i.sortKey?!1:!!((f=String(i.sortKey||i.data))!=null&&f.match(new RegExp(a.escapeRegExChar(),"i")))});d.isFilterMatched=c})}{let a=r.paging.rows;r.paging.total=Math.ceil(r.body.filter(i=>i.isFilterMatched).length/a);let d=a*(r.paging.current-1),c=d+a,g=0;r.body.forEach(i=>{i.isVisible=!1,i.isFilterMatched&&(i.isVisible=g>=d&&g<c,g++)})}return r.draggable&&r.body.toASC("draggerIndex"),r},index:t=>{var s,f,H,x;let[e,r]=Re(()=>b.toSafetyData(t));se(()=>{ne.set({["reset-"+e.datagridID]:()=>{r(b.toSafetyData(t))},["refresh-"+e.datagridID]:()=>{r(y=>b.updateRowMeta(p(n({},y),{body:b.toSafetyBody(t.body)}),t))}})},[t]),se(()=>{ne.set({["rows-"+e.datagridID]:e.body}),ie.bridge(e.datagridID,{val_config:e,remoteUpdate:{paging:y=>{r(m=>b.updateRowMeta(p(n({},m),{paging:p(n({},m.paging),{current:Math.max(1,Math.min(m.paging.total,y))})}),t))},maxRow:y=>{r(m=>b.updateRowMeta(p(n({},m),{paging:p(n({},m.paging),{rows:y,current:1})}),t))},searchKey:y=>{u.interval.once(()=>{r(m=>{let w=p(n({},m),{paging:p(n({},m.paging),{current:1}),filter:p(n({},m.filter),{keyword:String(y||"").trim()})});return b.updateRowMeta(w,t)})},300,"InputSearchTime")}}})},[e]);const l=me.useRef(!1);se(()=>{if(t.onSelected){if(!l.current){l.current=!0;return}t.onSelected(e.body.filter(y=>y.isSelected))}},[(s=e==null?void 0:e.body)==null?void 0:s.filter(y=>y.isSelected).length]);const a=me.useRef(!1);se(()=>{if(t.onSorted){if(!a.current){a.current=!0;return}t.onSorted(e.sort.col,e.sort.dir)}},[(f=e==null?void 0:e.sort)==null?void 0:f.col,(H=e==null?void 0:e.sort)==null?void 0:H.dir]);let d={input:t,val_config:e,set_config:r},{className:c,style:g}=xe(t),i=(x=t.colLength)!=null?x:t.header.length;return o(K,{className:c,style:g,children:o(D.Table,{className:Ke("DataGrid"),borderRadius:"inherit",children:$(D.Body,{children:[o(b.Header,n({},d)),o(b.Body,n({},d)),o(b.Footer,n({},d))]})},[i,...t.header.map(y=>y.key),e.sessionID].join("."))})},Checker:t=>o(K,{flexCenter:!0,onClick:e=>{e.stopPropagation()},children:o(E.Checker,p(n({wrapStyles:{display:"inlineBlock"},cellStyles:{gap:0}},t),{label:!1}))}),Header:t=>{var i,s,f,H;let{input:e,val_config:r,set_config:l}=t;if(e.headerless)return null;let a="datagrid-dragger-"+r.datagridID,d=["datagrid",r.datagridID,""].join("-"),c=1+r.body.filter(x=>x.isVisible).length+ +!!e.footer,g=(i=e.colLength)!=null?i:e.header.length;return o(ye.DropArea,p(n({jsxElement:D.Row,id:d},e.rowStyles),{dragInfo:{type:a,id:String(((H=(f=(s=r.body)==null?void 0:s.filter(x=>x.isFilterMatched))==null?void 0:f[0])==null?void 0:H.draggerIndex)||0),marker:"bottom"},children:e.header.toASC("columnIdx").map((x,y)=>{var re,oe,le,k,j,F;let[m,w]=X(x),te=w,{isTH:S,key:C,label:M,onLabelRender:B,columnIdx:Y,checkable:N,draggable:J,defSort:de,sortable:P,filterable:A,isHidden:v}=te,T=G(te,["isTH","key","label","onLabelRender","columnIdx","checkable","draggable","defSort","sortable","filterable","isHidden"]);if(v)return null;let I={rowIdx:0,colIdx:y,topIdx:0,leftIdx:y,rightIdx:g-y-1,bottomIdx:c-1,isHeader:!0,isBody:!1,isFooter:!1},Z=J,V=P!=0,O=y==r.sort.col,Q=u.deepMerge(u.deepCopy(e.cellStyles),fe(I,{}),(re=e.cellStyles)==null?void 0:re.onHeader,!I.leftIdx&&((oe=e.cellStyles)==null?void 0:oe.onLeft),!I.rightIdx&&((le=e.cellStyles)==null?void 0:le.onRight),!I.topIdx&&((k=e.cellStyles)==null?void 0:k.onTop),!I.bottomIdx&&((j=e.cellStyles)==null?void 0:j.onBottom),m);e.onCellStyles&&(Q=e.onCellStyles(I,Q||{}));let U=[],ee=[];if(Z&&U.push(o(ce.Clear.S,{ssSphere:2.5,fontColor:"theme",onMouseOver:h=>{Ce.open(h.currentTarget,$(pe.Mini,{children:[o(_,{icon:Se}),"\u30C9\u30E9\u30C3\u30B0\u3067\u5217\u306E\u9806\u756A\u3092\u5909\u66F4"]}),22)},onMouseLeave:h=>Ce.abort(),onClick:h=>{h.stopPropagation()},children:o(_.QuestionCircle,{})},"drag")),N){let h=o(b.Checker,{value:r.body.every(R=>R.isSelected),onUpdateValue:R=>{l(L=>{let z=n({},L);return z.body.forEach(ae=>{ae.isFilterMatched&&(ae.onCheckerDisabled||(ae.isSelected=!!R))}),z})}},"check");N=="left"?U.push(h):ee.push(h)}return V&&U.push(o(_,{fontSize:"1.mini",fontColor:"theme",opacity:O?"max":"low",transition:"middle",xcss:{transform:O&&r.sort.dir==-1?"rotate(180deg)":"none"},icon:O?Te:De},"sort")),o(D.Cell,p(n(n({isTH:!!S,ssPushable:!!P},X(Q||{})[0]),T),{className:[e.cellClassName,T.className].join(" "),onClick:h=>{T.onClick&&T.onClick(h),e.onCellClick&&e.onCellClick(I,h),V&&l(R=>{let L=n({},R);return L.sort={col:y,dir:O?R.sort.dir*-1:P},b.updateRowMeta(L,e)})},children:$(q.Left,{gap:"1/3",height:1,children:[U,(F=B==null?void 0:B(C))!=null?F:o(K,{flexSizing:0,children:M!=null?M:C}),ee]})}),[y,x.key].join("/"))})}))},Body:t=>{var g,i;let{input:e,val_config:r,set_config:l}=t,a=r.body.filter(s=>s.isVisible),d=+!e.headerless+a.length+ +!!e.footer,c=(g=e.colLength)!=null?g:e.header.length;return a.length?o(Be,{children:a.map((s,f)=>{let{onCheckerDisabled:H,onDraggerDisabled:x}=s,y=f;e.headerless||(y+=1);let m="datagrid-dragger-"+r.datagridID,w=["datagrid",r.datagridID,s.row_id].join("-");return o(ye.DropArea,p(n({jsxElement:D.Row,id:w,ssPushable:!!e.onRowClick||!!s.onRowClick},e.rowStyles),{onClick:S=>{s.onRowClick&&s.onRowClick(S),e.onRowClick&&e.onRowClick(s,S)},dragInfo:{type:m,id:String(s.row_id||""),disabled:!r.draggable,marker:"bottom"},children:e.header.toASC("columnIdx").map((S,C)=>{var U,ee,te,re,oe,le;let M=S.draggable,B=s[S.key];if(!B)return null;let[Y,N]=X(B),Q=N,{isTH:J,sortKey:de,data:P,label:A,onLabelRender:v}=Q,T=G(Q,["isTH","sortKey","data","label","onLabelRender"]),I={rowIdx:y,colIdx:C,topIdx:y,leftIdx:C,rightIdx:c-C-1,bottomIdx:d-y-1,isHeader:!1,isBody:!0,isFooter:!1},Z=u.deepMerge(u.deepCopy(e.cellStyles),fe(I,{}),(U=e.cellStyles)==null?void 0:U.onBody,!I.leftIdx&&((ee=e.cellStyles)==null?void 0:ee.onLeft),!I.rightIdx&&((te=e.cellStyles)==null?void 0:te.onRight),!I.topIdx&&((re=e.cellStyles)==null?void 0:re.onTop),!I.bottomIdx&&((oe=e.cellStyles)==null?void 0:oe.onBottom),Y);e.onCellStyles&&(Z=e.onCellStyles(I,Z||{}));let V=[],O=[];return u.scope(()=>{if(M){if(s.onDraggerDisabled){V.push(s.onDraggerDisabled());return}V.push(o(ce.Clear.S,{tabIndex:-1,isRounded:!0,ssSphere:2.5,fontColor:"6.clear",onPointerDown:k=>{let j=u("#"+w)[0],F=j.cloneNode(!0);F.style.width=j.offsetWidth+"px",ye.Start(m,{dragElement:F,startEvent:k,originId:w,horizontal:!1},h=>be(void 0,null,function*(){if(!h.end||!h.onDropArea)return;let R=[...r.body],L=R.findIndex(W=>W.row_id==s.row_id);if(L==-1)return;let z=R.findIndex(W=>W.row_id==h.id);if(z<L&&z++,L==z)return;let ae=R.splice(L,1)[0];R.splice(z,0,ae),R.forEach((W,Ie)=>{W.draggerIndex=Ie}),e.onDragged&&e.onDragged(R),l(W=>p(n({},W),{body:R}))}))},children:o(q.Center,{gap:"1/4",children:o(_,{icon:Se})})},"drag"))}}),u.scope(()=>{if(!S.checkable)return;let k=o(b.Checker,{override:"force",value:!!s.isSelected,onUpdateValue:j=>{l(F=>p(n({},F),{body:F.body.map(h=>(h.row_id==s.row_id&&(h.isSelected=!!j),h))}))}},"check");s.onCheckerDisabled&&(k=s.onCheckerDisabled()),S.checkable=="left"?V.push(k):O.push(k)}),o(D.Cell,p(n(n({isTH:!!J},X(Z||{})[0]),T),{className:[e.cellClassName,T.className].join(" "),onClick:k=>{T.onClick&&T.onClick(k),e.onCellClick&&e.onCellClick(I,k)},children:$(q.Left,{gap:"1/3",height:1,children:[V,(le=v==null?void 0:v(P))!=null?le:o(K,{flexSizing:0,children:he(A!=null?A:String(P),r.filter.keyword)}),O]})}),[C,S.key].join("/"))})}),[s.row_id,y].join("."))})}):o(D.Row,p(n({},e.rowStyles),{children:o(D.Cell,{colSpan:c,padding:1,children:(i=e.onNoRecordsRender)==null?void 0:i.call(e)})}))},Footer:t=>{var c;let{input:e,val_config:r,set_config:l}=t;if(!e.footer)return null;let a=+!e.headerless+r.body.filter(g=>g.isVisible).length+1,d=(c=e.colLength)!=null?c:e.header.length;return o(D.Row,p(n({},e.rowStyles),{children:e.header.toASC("columnIdx").map((g,i)=>{var Y,N,J,de,P,A,v;let s=e.footer[g.key];if(!s)return null;u.isRecord(s)||(s={data:s});let[f,H]=X(s),B=H,{isTH:x,data:y,label:m,onLabelRender:w}=B,S=G(B,["isTH","data","label","onLabelRender"]),C={rowIdx:a-1,colIdx:i,topIdx:a-1,leftIdx:i,rightIdx:d-i-1,bottomIdx:0,isHeader:!1,isBody:!1,isFooter:!0},M=u.deepMerge(u.deepCopy(e.cellStyles),fe(C,{}),(Y=e.cellStyles)==null?void 0:Y.onBody,(N=e.cellStyles)==null?void 0:N.onFooter,!C.leftIdx&&((J=e.cellStyles)==null?void 0:J.onLeft),!C.rightIdx&&((de=e.cellStyles)==null?void 0:de.onRight),!C.topIdx&&((P=e.cellStyles)==null?void 0:P.onTop),!C.bottomIdx&&((A=e.cellStyles)==null?void 0:A.onBottom),f);return e.onCellStyles&&(M=e.onCellStyles(C,M||{})),o(D.Cell,p(n(n({isTH:!!x},X(M||{})[0]),S),{className:[e.cellClassName,S.className].join(" "),onClick:T=>{S.onClick&&S.onClick(T),e.onCellClick&&e.onCellClick(C,T)},children:o(K,{flexSizing:0,children:(v=w==null?void 0:w(y))!=null?v:he(m!=null?m:String(y),r.filter.keyword)})}),[i,g.key].join("/"))})}))}},fe=(t,e)=>{let r=n({},e);return t.topIdx||(r.borderTop="unset"),t.bottomIdx||(r.borderBottom="unset"),t.rightIdx||(r.borderRight="unset"),t.leftIdx||(r.borderLeft="unset"),t.topIdx||(t.leftIdx||(r.borderTopLeftRadius="inherit"),t.rightIdx||(r.borderTopRightRadius="inherit")),t.bottomIdx||(t.leftIdx||(r.borderBottomLeftRadius="inherit"),t.rightIdx||(r.borderBottomRightRadius="inherit")),r},Me=t=>(t=n({datagridID:ge(),tone:"border",maxRows:100,onNoRecordsRender:()=>o(q.Center,{children:o(pe.Mini,{fontColor:"4.thin",children:"(\u30C7\u30FC\u30BF\u306A\u3057)"})})},t),t.rowStyles=n({backgroundColor:"layer.0"},t.rowStyles),t.cellStyles=n(p(n({},u.scope(()=>{if(!t.tone)return{};let e={};return u.isOneOf(t.tone,"border","border.horizontal")&&(e.borderBottom="2.normal"),u.isOneOf(t.tone,"border","border.vertical")&&(e.borderRight="2.normal"),e})),{position:"relative",padding:["1/3","2/3"],transition:"short"}),t.cellStyles),t.tone&&(t=n({border:!0,borderRadius:"2.tone.secondary",backgroundColor:"layer.1"},t)),t.header=b.toSafetyHeader(t.header||[]),t.header.forEach((e,r)=>{var l;e.sortable=(l=e.sortable)!=null?l:1,e.checkable===!0&&(e.checkable="left")}),o(b.index,n({},t))),ue={getBodyRows:t=>ne.get("rows-"+t)||[],toSafetyBody:b.toSafetyBody,reset:t=>{var e;(e=ne.get("reset-"+t))==null||e()},refreshBody:t=>{var e;(e=ne.get("refresh-"+t))==null||e()},reservedKeys:b.reservedKeys,Table:t=>o(K,p(n({htmlTag:"table",borderRadius:"inherit"},t),{border:t.border})),Head:t=>o(K,n({htmlTag:"thead",borderRadius:"inherit"},t)),Body:t=>o(K,n({htmlTag:"tbody",borderRadius:"inherit"},t)),Row:t=>o(K,n({htmlTag:"tr",borderRadius:"inherit"},t)),TH:t=>o(K,n({htmlTag:"th"},t)),TD:t=>o(K,n({htmlTag:"td"},t)),Cell:t=>{let l=t,{isTH:e}=l,r=G(l,["isTH"]);return e?o(ue.TH,n({},r)):o(ue.TD,n({},r))},RightIndicator:{data:"",label:o(q.Right,{children:o(_.AngleRight,{fontColor:"theme",fontSize:"3.paragraph"})})},SearchInput:t=>{let d=t,{datagridID:e}=d,r=G(d,["datagridID"]),l=ie.catch(t.datagridID);if(!l)return console.warn("[DataGrid] SearchInput must be used inside DataGrid."),null;let{val_config:a}=l;return o(E.TextField,p(n({label:"\u691C\u7D22...",clearButton:!0,padding:["1/2","2/3"],rightIcon:o(E.RightIcon,{ssSphere:2,fontColor:"5.translucent",right:"2/3",children:o(_.Search,{})}),value:a.filter.keyword},r),{onUpdateValidValue:(...c)=>{r.onUpdateValidValue&&r.onUpdateValidValue(...c),l.remoteUpdate.searchKey(c[0])}}))},Info:t=>{let e=ie.catch(t.datagridID);if(!e)return null;let{val_config:r}=e,l=t.totalCount||r.body.length,a=r.body.filter(c=>c.isFilterMatched).length,d=a.toRate(l,1)||0;return $(we,{verticalAlign:"baseline",gap:"1/2",fontSize:"1.mini",fontColor:"3.blur",children:[o(ke,{fontSize:"4.thirdTitle",fontColor:"theme",children:a.toLocaleString()}),"/ ",l.toLocaleString(),"\u4EF6 (",d,"%)"]})},Paging:t=>{let g=t,{datagridID:e}=g,r=G(g,["datagridID"]),l=ie.catch(e);if(!l)return null;let{val_config:a}=l,d=[];for(let i=0;i<a.paging.total;i++)d.push({value:i+1,label:(i+1).toString()});const c=i=>{let s=Math.min(Math.max(1,i),a.paging.total),f=n({},a);f.paging.current=s,l.remoteUpdate.paging(s)};return o(E.Select,p(n({emptySelect:!1,padding:["1/3","2/3"],override:"force",gap:0},r),{leftIcon:o(E.LeftIcon,{xcss:{left:2,pointerEvents:"all"},children:o(ce.Sub.S,{color:"cloud",fontColor:"4.thin",ssSquare:2.5,unitWidth:2,onClick:()=>{if(a.paging.current==1){c(a.paging.total);return}c(a.paging.current-1)},children:o(_.ChevronLeft,{})})}),rightIcon:o(E.RightIcon,{xcss:{right:2,pointerEvents:"all"},children:o(ce.Sub.S,{color:"cloud",fontColor:"4.thin",ssSquare:2.5,unitWidth:2,onClick:()=>{if(a.paging.current==a.paging.total){c(1);return}c(a.paging.current+1)},children:o(_.ChevronRight,{})})}),options:d.map(i=>({value:i.value||0,label:$(q.Left,{gap:"1/3",verticalAlign:"baseline",children:[i.label,$(pe.Micro,{fontColor:"4.thin",children:["/ ",a.paging.total]})]})})),value:a.paging.current,onUpdateValidValue:i=>{c(i)}}))},RowCount:t=>{let s=t,{datagridID:e}=s,r=G(s,["datagridID"]),l=ie.catch(e);if(!l)return null;let{val_config:a}=l,d=a.body.filter(f=>f.isFilterMatched).length,c=a.paging.rows,g=0,i=t.options.map(f=>(g|=+(f==c),{value:f,label:f.toString()}));return g||i.push({value:c,label:c.toString()}),o(q.Center,{gap:"1/2",children:o(E.Select,p(n({emptySelect:!1,override:"force",padding:"1/3",paddingLeft:3,paddingRight:2,pickerStyles:{xcss:{minWidth:12*9}},pickerPosition:4,leftIcon:o(E.LeftIcon,{fontSize:"0.xs",fontColor:"4.thin",xcss:{left:6},children:"\u8868\u793A"}),rightIcon:o(E.RightIcon,{fontSize:"0.xs",fontColor:"4.thin",xcss:{right:6},children:"\u4EF6"})},r),{value:a.paging.rows,options:i.toASC("value"),onUpdateValidValue:f=>{l.remoteUpdate.maxRow(Number(f))}}))})}},D=Object.assign(Me,ue);export{D as DataGrid,D as default,fe as onDefaultCellStyles};