@nocobase/plugin-gantt 1.2.8-alpha → 1.2.10-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -243,7 +243,7 @@
243
243
  pointerEvents: none,
244
244
  },
245
245
  }
246
- }`})),fo=e=>{const{styles:t}=uo(),{task:r,arrowIndent:o,isDelete:n,taskHeight:a,isSelected:s,rtl:i,onEventStart:l}=H({},e),u=b.useRef(null),[g,y]=b.useState(c.jsx("div",{})),[D,w]=b.useState(!0),C=r.typeInternal==="project";b.useEffect(()=>{switch(r.typeInternal){case"milestone":y(c.jsx(so,H({},e)));break;case"project":y(c.jsx(co,H({},e)));break;case"smalltask":y(c.jsx(oo,H({},e)));break;default:y(c.jsx(ro,H({},e)));break}},[r,s]),b.useEffect(()=>{u.current&&w(u.current.getBBox().width<r.x2-r.x1)},[u,r]);const k=()=>{const m=r.x2-r.x1,p=r.barChildren.length>0;return D?r.x1+m*.5:i&&u.current?r.x1-u.current.getBBox().width-o*+p-o*.2:r.x1+m+o*+p+o*.2};return c.jsxs("g",{className:M.cx(t.nbganttTaskitem),onKeyDown:m=>{switch(m.key){case"Delete":{n&&l("delete",r,m);break}}m.stopPropagation()},onMouseEnter:m=>{l("mouseenter",r,m)},onMouseLeave:m=>{l("mouseleave",r,m)},onDoubleClick:m=>{l("dblclick",r,m)},onClick:m=>{l("click",r,m)},onFocus:()=>{l("select",r)},children:[g,c.jsx("text",{x:C?r.x1:k(),y:C?r.y-8:r.y+a*.65,className:C?M.cx("projectLabel"):D?M.cx("barLabel"):M.cx("barLabelOutside"),ref:u,children:C&&Te(r.start)&&Te(r.end)?`${r.name}: ${Te(r.start)} ~ ${Te(r.end)}`:r.name})]})};let at=null,Ae=null;const po=({tasks:e,dates:t,ganttEvent:r,selectedTask:o,rowHeight:n,columnWidth:a,timeStep:s,svg:i,taskHeight:l,arrowColor:u,arrowIndent:g,fontFamily:y,fontSize:D,rtl:w,setGanttEvent:C,setFailedTask:k,setSelectedTask:m,onDateChange:p,onProgressChange:v,onDoubleClick:N,onClick:x,onDelete:h})=>{var je;const f=(je=i==null?void 0:i.current)==null?void 0:je.createSVGPoint(),[S,P]=b.useState(0),[L,_]=b.useState(0),[ve,Z]=b.useState(!1);b.useEffect(()=>{var z,q,X,oe;const F=((z=t[1])==null?void 0:z.getTime())-((q=t[0])==null?void 0:q.getTime())-((X=t[1])==null?void 0:X.getTimezoneOffset())*60*1e3+((oe=t[0])==null?void 0:oe.getTimezoneOffset())*60*1e3,G=s*a/F;P(G)},[a,t,s]),b.useEffect(()=>{const F=z=>R(this,null,function*(){var Me;if(!r.changedTask||!f||!(i!=null&&i.current))return;z.preventDefault(),f.x=z.clientX;const q=f.matrixTransform((Me=i==null?void 0:i.current.getScreenCTM())==null?void 0:Me.inverse()),{isChanged:X,changedTask:oe}=wt(q.x,r.action,r.changedTask,S,s,L,w);X&&C({action:r.action,changedTask:oe})}),G=z=>R(this,null,function*(){var qe;const{action:q,originalSelectedTask:X,changedTask:oe}=r;if(!oe||!f||!(i!=null&&i.current)||!X)return;z.preventDefault(),f.x=z.clientX;const Me=f.matrixTransform((qe=i==null?void 0:i.current.getScreenCTM())==null?void 0:qe.inverse()),{changedTask:U}=wt(Me.x,q,oe,S,s,L,w),W=X.start!==U.start||X.end!==U.end||X.progress!==U.progress;i.current.removeEventListener("mousemove",F),i.current.removeEventListener("mouseup",G),C({action:""}),Z(!1);let ce=!0;if((q==="move"||q==="end"||q==="start")&&p&&W)try{const ne=yield p(U,U.barChildren);ne!==void 0&&(ce=ne)}catch(ne){ce=!1}else if(v&&W)try{const ne=yield v(U,U.barChildren);ne!==void 0&&(ce=ne)}catch(ne){ce=!1}ce||k(X)});!ve&&(r.action==="move"||r.action==="end"||r.action==="start"||r.action==="progress")&&(i!=null&&i.current)&&(i.current.addEventListener("mousemove",F),i.current.addEventListener("mouseup",G),Z(!0))},[r,S,L,v,s,p,i,ve,f,w,k,C]);const $e=(F,G,z)=>R(this,null,function*(){var q;if(!z)F==="select"&&m(G.id);else if(Mr(z)){if(F==="delete"&&h)try{const X=yield h(G);X!==void 0&&X&&C({action:F,changedTask:G})}catch(X){console.error("Error on Delete. "+X)}}else if(F==="mouseenter")r.action||C({action:F,changedTask:G,originalSelectedTask:G});else if(F==="mouseleave")r.action==="mouseenter"&&setTimeout(()=>{C({action:""})},300);else if(F==="dblclick")N&&N(G);else if(F==="click")z.target.tagName==="rect"&&x&&x(G);else if(F==="move"){if(!(i!=null&&i.current)||!f)return;f.x=z.clientX;const X=f.matrixTransform((q=i.current.getScreenCTM())==null?void 0:q.inverse());_(X.x-G.x1),C({action:F,changedTask:G,originalSelectedTask:G})}else C({action:F,changedTask:G,originalSelectedTask:G})}),st=(F,G,z)=>{["click"].includes(F)?(!["start","end","progress"].includes(at)&&(!Ae||Ae===G.start)&&$e(F,G,z),at=null,Ae=null):["move","select"].includes(F)?(Ae=G.start,$e(F,G,z)):(Ae=G.start,at=F,$e(F,G,z))};return c.jsxs("g",{className:"content",children:[c.jsx("g",{className:"arrows",fill:u,stroke:u,children:e.map(F=>F.barChildren.map(G=>c.jsx(Zr,{taskFrom:F,taskTo:e[G.index],rowHeight:n,taskHeight:l,arrowIndent:g,rtl:w},`Arrow from ${F.id} to ${e[G.index].id}`)))}),c.jsx("g",{className:"bar",fontFamily:y,fontSize:D,children:e.map(F=>c.jsx(fo,{task:F,arrowIndent:g,taskHeight:l,isProgressChangeable:!!v&&!F.isDisabled,isDateChangeable:!!p&&!F.isDisabled,isDelete:!F.isDisabled,onEventStart:st,isSelected:!!o&&F.id===o.id,rtl:w},F.id))})]})},Ht=b.forwardRef(({gridProps:e,calendarProps:t,barProps:r,ganttHeight:o,scrollY:n,scrollX:a},s)=>{const i=b.useRef(null),l=b.useRef(null),u=Ce(H({},r),{svg:i}),{styles:g}=Pt();return b.useEffect(()=>{l.current&&(l.current.scrollTop=n)},[n]),b.useEffect(()=>{s.current&&(s.current.scrollLeft=a)},[a]),c.jsxs("div",{className:g.ganttverticalcontainer,ref:s,dir:"ltr",children:[c.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:e.svgWidth,height:t.headerHeight,fontFamily:r.fontFamily,className:"ganttHeader",children:c.jsx(Ur,H({},t))}),c.jsx(Ge.Spin,{spinning:r==null?void 0:r.loading,children:c.jsx("div",{ref:l,className:g.horizontalcontainer,style:o?{maxHeight:o,width:e.svgWidth}:{width:e.svgWidth},children:c.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:e.svgWidth,height:r.rowHeight*r.tasks.length||166,fontFamily:r.fontFamily,ref:i,className:"ganttBody",children:[c.jsx(Jr,H({},e)),c.jsx(po,H({},u))]})})})]})});Ht.displayName="TaskGantt";const ho=(e,t)=>t/e>50?Math.floor(t/e)+20:50,go=b.createContext({close:()=>{}}),mo=e=>{const{visible:t,setVisible:r,record:o}=e,{t:n}=me.useTranslation(),a=d.useCollection(),s=d.useCollectionParentRecordData(),l=A.useFieldSchema().properties.detail,u=b.useCallback(()=>{r(!1)},[]);return l&&c.jsx(go.Provider,{value:{close:u},children:c.jsx(d.ActionContextProvider,{value:{visible:t,setVisible:r},children:c.jsx(d.RecordProvider,{record:o,parent:s,children:c.jsx(d.DeclareVariable,{name:"$nPopupRecord",title:n("Current popup record"),value:o,collection:a,children:c.jsx(A.RecursionField,{schema:l,name:l.name})})})})})},bo=pt.debounce((e,t,r,o,n)=>R(this,null,function*(){yield t.update({filterByTk:e.id,values:{[r.start]:e.start,[r.end]:e.end}}),Ge.message.success(n("Saved successfully")),yield o==null?void 0:o.refresh()}),300),xo=pt.debounce((e,t,r,o,n)=>R(this,null,function*(){yield t.update({filterByTk:e.id,values:{[r.progress]:e.progress/100}}),Ge.message.success(n("Saved successfully")),yield o==null?void 0:o.refresh()}),300),Ne=d.withDynamicSchemaProps(e=>{var Rt,er,tr;const{styles:t}=Pt(),{token:r}=d.useToken(),o=d.useAPIClient(),n=(Rt=JSON.parse(o.auth.getOption("theme")))==null?void 0:Rt.uid,{listCellWidth:a="155px",ganttHeight:s=0,preStepsCount:i=1,barFill:l=60,barCornerRadius:u=r.borderRadiusXS,barProgressColor:g=r.colorPrimary,barProgressSelectedColor:y=r.colorPrimary,barBackgroundColor:D=r.colorPrimary,barBackgroundSelectedColor:w=r.colorPrimary,projectProgressColor:C=r.colorPrimary,projectProgressSelectedColor:k=r.colorPrimary,projectBackgroundColor:m=r.colorPrimary,projectBackgroundSelectedColor:p=r.colorPrimary,milestoneBackgroundColor:v="#f1c453",milestoneBackgroundSelectedColor:N="#f29e4c",rtl:x=!1,handleWidth:h=8,timeStep:f=3e5,arrowColor:S="grey",fontFamily:P="-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",fontSize:L=r.fontSize,arrowIndent:_=20,todayColor:ve="rgba(252, 248, 227, 0.5)",viewDate:Z,TooltipContent:$e=Ar,onDoubleClick:st,onDelete:je,onSelect:F,onExpanderClick:G,tasks:z,expandAndCollapseAll:q,fieldNames:X,loading:oe}=d.useProps(e),{designable:Me}=d.useDesignable(),U=n!=null&&n.includes("compact")?45:Me?65:55,W=n!=null&&n.includes("compact")?45:65,ce=J(),qe=d.useCurrentAppInfo(),{t:ne}=me.useTranslation(),yo=(er=qe.data)==null?void 0:er.lang,it=d.useTableBlockContext(),{resource:Xt,service:Ie}=d.useBlockRequestContext(),Yt=A.useFieldSchema(),ae=X.range||"day",Se=b.useRef(null),lt=b.useRef(null),jt=b.useRef(null),vo=b.useRef(null),[de,So]=b.useState(()=>{const[T,V]=Nt(z,ae,i);return{viewMode:ae,dates:Mt(T,V,ae)}}),[Co,qt]=b.useState(!1),[wo,To]=b.useState({}),[ke,Wt]=b.useState(void 0),[We,Ut]=b.useState(0),[No,Mo]=b.useState(0),[Do,_t]=b.useState(s),[se,Ue]=b.useState([]),[Le,Qt]=b.useState({action:""}),ct=b.useMemo(()=>W*l/100,[W,l]),[dt,Bo]=b.useState(),[_e,Kt]=b.useState(null),[ge,ut]=b.useState(0),[ue,Ve]=b.useState(-1),[Jt,De]=b.useState(!1),te=ho(de.dates.length,(tr=jt.current)==null?void 0:tr.clientWidth),fe=de.dates.length*te,Be=se.length*W,{expandFlag:Zt}=it,[Po,Fo]=b.useState([]);b.useEffect(()=>{it.field.onExpandClick=Lo,it.field.onRowSelect=Vo},[]),b.useEffect(()=>{q==null||q(!Zt)},[Zt]),b.useEffect(()=>{let T;G?T=Dr(z):T=z,T=T.sort(Br);const[V,B]=Nt(T,ae,i);let $=Mt(V,B,ae);x&&($=$.reverse(),ue===-1&&Ve($.length*te)),So({dates:$,viewMode:ae}),Ue(hr(T,$,te,W,ct,u,h,x,g,y,D,w,C,k,m,p,v,N))},[z,ae,i,W,u,te,ct,h,g,y,D,w,C,k,m,p,v,N,x,ue]),b.useEffect(()=>{if(ae===de.viewMode&&(Z&&!ke||Z&&(ke==null?void 0:ke.valueOf())!==Z.valueOf())){const T=de.dates,V=T.findIndex((B,$)=>Z.valueOf()>=B.valueOf()&&$+1!==T.length&&Z.valueOf()<T[$+1].valueOf());if(V===-1)return;Wt(Z),Ve(te*V)}},[Z,te,de.dates,de.viewMode,ae,ke,Wt]),b.useEffect(()=>{const{changedTask:T,action:V}=Le;if(T){if(V==="delete")Qt({action:""}),Ue(se.filter(B=>B.id!==T.id));else if(V==="move"||V==="end"||V==="start"||V==="progress"){const B=se.find($=>$.id===T.id);if(B&&B.start&&B.end&&(B.start.getTime()!==T.start.getTime()||B.end.getTime()!==T.end.getTime()||B.progress!==T.progress)){const $=se.map(K=>K.id===T.id?T:K);Ue($)}}}},[Le,se]),b.useEffect(()=>{_e&&(Ue(se.map(T=>T.id!==_e.id?T:_e)),Kt(null))},[_e,se]),b.useEffect(()=>{a||Ut(0),lt.current&&Ut(lt.current.offsetWidth)},[lt,a]),b.useEffect(()=>{Se.current&&Mo(Se.current.offsetWidth-We)},[Se,We]),b.useEffect(()=>{_t(s?s+U:z.length*W+U)},[s,z,U,W]),b.useEffect(()=>{var V;const T=B=>{if(B.shiftKey||B.deltaX){const $=B.deltaX?B.deltaX:B.deltaY;let K=ue+$;K<0?K=0:K>fe&&(K=fe),Ve(K),B.preventDefault()}else if(s){let $=ge+B.deltaY;$<0?$=0:$>Be-s&&($=Be-s),$!==ge&&(ut($),B.preventDefault())}De(!0)};return(V=Se.current)==null||V.addEventListener("wheel",T,{passive:!1}),()=>{var B;(B=Se.current)==null||B.removeEventListener("wheel",T)}},[Se,ge,ue,s,fe,x,Be]);const Ao=T=>{ge!==T.currentTarget.scrollTop&&!Jt?(ut(T.currentTarget.scrollTop),De(!0)):De(!1)},$o=T=>{ue!==T.currentTarget.scrollLeft&&!Jt?(Ve(T.currentTarget.scrollLeft),De(!0)):De(!1)},Io=T=>{T.preventDefault();let V=ge,B=ue,$=!0;switch(T.key){case"Down":case"ArrowDown":V+=W,$=!1;break;case"Up":case"ArrowUp":V-=W,$=!1;break;case"Left":case"ArrowLeft":B-=te;break;case"Right":case"ArrowRight":B+=te;break}$?(B<0?B=0:B>fe&&(B=fe),Ve(B)):(V<0?V=0:V>Be-s&&(V=Be-s),ut(V)),De(!0)},ko=T=>{const V=se.find($=>$.id===T),B=se.find($=>!!dt&&$.id===dt.id);F&&(B&&F(B,!1),V&&F(V,!0)),Bo(V)},Lo=(T,V)=>{var $;const B=($=ce==null?void 0:ce.field)==null?void 0:$.data.find(K=>K.id===V.id+"");G&&V.children.length&&G(Ce(H({},B),{hideChildren:!T}))},Vo=T=>{Fo(T)},Go=T=>R(this,null,function*(){xo(T,Xt,X,Ie,ne)}),Eo=T=>R(this,null,function*(){bo(T,Xt,X,Ie,ne)}),Ho=T=>{var K;const V=ft=>ft.reduce((rr,Qe)=>Qe.children?rr.concat([Qe,...V(Qe.children)]):rr.concat(Qe),[]),B=V((K=Ie==null?void 0:Ie.data)==null?void 0:K.data),$=B==null?void 0:B.find(ft=>ft.id===+T.id);$&&(To($),qt(!0))},Oo={columnWidth:te,svgWidth:fe,tasks:z,rowHeight:W,dates:de.dates,todayColor:ve,rtl:x,selectedRowKeys:Po},zo={dateSetup:de,locale:yo,viewMode:ae,headerHeight:U,columnWidth:te,fontFamily:P,fontSize:L,rtl:x},Xo={tasks:se,dates:de.dates,ganttEvent:Le,selectedTask:dt,rowHeight:W,taskHeight:ct,columnWidth:te,arrowColor:S,timeStep:f,fontFamily:P,fontSize:L,arrowIndent:_,svgWidth:fe,rtl:x,setGanttEvent:Qt,setFailedTask:Kt,setSelectedTask:ko,onDateChange:Eo,onProgressChange:X.progress&&Go,onDoubleClick:st,onClick:Ho,onDelete:je,loading:oe};return c.jsxs("div",{className:M.cx(M.css`
246
+ }`})),fo=e=>{const{styles:t}=uo(),{task:r,arrowIndent:o,isDelete:n,taskHeight:a,isSelected:s,rtl:i,onEventStart:l}=H({},e),u=b.useRef(null),[g,y]=b.useState(c.jsx("div",{})),[D,w]=b.useState(!0),C=r.typeInternal==="project";b.useEffect(()=>{switch(r.typeInternal){case"milestone":y(c.jsx(so,H({},e)));break;case"project":y(c.jsx(co,H({},e)));break;case"smalltask":y(c.jsx(oo,H({},e)));break;default:y(c.jsx(ro,H({},e)));break}},[r,s]),b.useEffect(()=>{u.current&&w(u.current.getBBox().width<r.x2-r.x1)},[u,r]);const k=()=>{const m=r.x2-r.x1,p=r.barChildren.length>0;return D?r.x1+m*.5:i&&u.current?r.x1-u.current.getBBox().width-o*+p-o*.2:r.x1+m+o*+p+o*.2};return c.jsxs("g",{className:M.cx(t.nbganttTaskitem),onKeyDown:m=>{switch(m.key){case"Delete":{n&&l("delete",r,m);break}}m.stopPropagation()},onMouseEnter:m=>{l("mouseenter",r,m)},onMouseLeave:m=>{l("mouseleave",r,m)},onDoubleClick:m=>{l("dblclick",r,m)},onClick:m=>{l("click",r,m)},onFocus:()=>{l("select",r)},children:[g,c.jsx("text",{x:C?r.x1:k(),y:C?r.y-8:r.y+a*.65,className:C?M.cx("projectLabel"):D?M.cx("barLabel"):M.cx("barLabelOutside"),ref:u,children:C&&Te(r.start)&&Te(r.end)?`${r.name}: ${Te(r.start)} ~ ${Te(r.end)}`:r.name})]})};let at=null,Ae=null;const po=({tasks:e,dates:t,ganttEvent:r,selectedTask:o,rowHeight:n,columnWidth:a,timeStep:s,svg:i,taskHeight:l,arrowColor:u,arrowIndent:g,fontFamily:y,fontSize:D,rtl:w,setGanttEvent:C,setFailedTask:k,setSelectedTask:m,onDateChange:p,onProgressChange:v,onDoubleClick:N,onClick:x,onDelete:h})=>{var je;const f=(je=i==null?void 0:i.current)==null?void 0:je.createSVGPoint(),[S,P]=b.useState(0),[L,_]=b.useState(0),[ve,Z]=b.useState(!1);b.useEffect(()=>{var z,q,X,oe;const F=((z=t[1])==null?void 0:z.getTime())-((q=t[0])==null?void 0:q.getTime())-((X=t[1])==null?void 0:X.getTimezoneOffset())*60*1e3+((oe=t[0])==null?void 0:oe.getTimezoneOffset())*60*1e3,G=s*a/F;P(G)},[a,t,s]),b.useEffect(()=>{const F=z=>R(this,null,function*(){var Me;if(!r.changedTask||!f||!(i!=null&&i.current))return;z.preventDefault(),f.x=z.clientX;const q=f.matrixTransform((Me=i==null?void 0:i.current.getScreenCTM())==null?void 0:Me.inverse()),{isChanged:X,changedTask:oe}=wt(q.x,r.action,r.changedTask,S,s,L,w);X&&C({action:r.action,changedTask:oe})}),G=z=>R(this,null,function*(){var qe;const{action:q,originalSelectedTask:X,changedTask:oe}=r;if(!oe||!f||!(i!=null&&i.current)||!X)return;z.preventDefault(),f.x=z.clientX;const Me=f.matrixTransform((qe=i==null?void 0:i.current.getScreenCTM())==null?void 0:qe.inverse()),{changedTask:U}=wt(Me.x,q,oe,S,s,L,w),W=X.start!==U.start||X.end!==U.end||X.progress!==U.progress;i.current.removeEventListener("mousemove",F),i.current.removeEventListener("mouseup",G),C({action:""}),Z(!1);let ce=!0;if((q==="move"||q==="end"||q==="start")&&p&&W)try{const ne=yield p(U,U.barChildren);ne!==void 0&&(ce=ne)}catch(ne){ce=!1}else if(v&&W)try{const ne=yield v(U,U.barChildren);ne!==void 0&&(ce=ne)}catch(ne){ce=!1}ce||k(X)});!ve&&(r.action==="move"||r.action==="end"||r.action==="start"||r.action==="progress")&&(i!=null&&i.current)&&(i.current.addEventListener("mousemove",F),i.current.addEventListener("mouseup",G),Z(!0))},[r,S,L,v,s,p,i,ve,f,w,k,C]);const $e=(F,G,z)=>R(this,null,function*(){var q;if(!z)F==="select"&&m(G.id);else if(Mr(z)){if(F==="delete"&&h)try{const X=yield h(G);X!==void 0&&X&&C({action:F,changedTask:G})}catch(X){console.error("Error on Delete. "+X)}}else if(F==="mouseenter")r.action||C({action:F,changedTask:G,originalSelectedTask:G});else if(F==="mouseleave")r.action==="mouseenter"&&setTimeout(()=>{C({action:""})},300);else if(F==="dblclick")N&&N(G);else if(F==="click")z.target.tagName==="rect"&&x&&x(G);else if(F==="move"){if(!(i!=null&&i.current)||!f)return;f.x=z.clientX;const X=f.matrixTransform((q=i.current.getScreenCTM())==null?void 0:q.inverse());_(X.x-G.x1),C({action:F,changedTask:G,originalSelectedTask:G})}else C({action:F,changedTask:G,originalSelectedTask:G})}),st=(F,G,z)=>{["click"].includes(F)?(!["start","end","progress"].includes(at)&&(!Ae||Ae===G.start)&&$e(F,G,z),at=null,Ae=null):["move","select"].includes(F)?(Ae=G.start,$e(F,G,z)):(Ae=G.start,at=F,$e(F,G,z))};return c.jsxs("g",{className:"content",children:[c.jsx("g",{className:"arrows",fill:u,stroke:u,children:e.map(F=>F.barChildren.map(G=>c.jsx(Zr,{taskFrom:F,taskTo:e[G.index],rowHeight:n,taskHeight:l,arrowIndent:g,rtl:w},`Arrow from ${F.id} to ${e[G.index].id}`)))}),c.jsx("g",{className:"bar",fontFamily:y,fontSize:D,children:e.map(F=>c.jsx(fo,{task:F,arrowIndent:g,taskHeight:l,isProgressChangeable:!!v&&!F.isDisabled,isDateChangeable:!!p&&!F.isDisabled,isDelete:!F.isDisabled,onEventStart:st,isSelected:!!o&&F.id===o.id,rtl:w},F.id))})]})},Ht=b.forwardRef(({gridProps:e,calendarProps:t,barProps:r,ganttHeight:o,scrollY:n,scrollX:a},s)=>{const i=b.useRef(null),l=b.useRef(null),u=Ce(H({},r),{svg:i}),{styles:g}=Pt();return b.useEffect(()=>{l.current&&(l.current.scrollTop=n)},[n]),b.useEffect(()=>{s.current&&(s.current.scrollLeft=a)},[a]),c.jsxs("div",{className:g.ganttverticalcontainer,ref:s,dir:"ltr",children:[c.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:e.svgWidth,height:t.headerHeight,fontFamily:r.fontFamily,className:"ganttHeader",children:c.jsx(Ur,H({},t))}),c.jsx(Ge.Spin,{spinning:r==null?void 0:r.loading,children:c.jsx("div",{ref:l,className:g.horizontalcontainer,style:o?{maxHeight:o,width:e.svgWidth}:{width:e.svgWidth},children:c.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:e.svgWidth,height:r.rowHeight*r.tasks.length||166,fontFamily:r.fontFamily,ref:i,className:"ganttBody",children:[c.jsx(Jr,H({},e)),c.jsx(po,H({},u))]})})})]})});Ht.displayName="TaskGantt";const ho=(e,t)=>t/e>50?Math.floor(t/e)+20:50,go=b.createContext({close:()=>{}}),mo=e=>{const{visible:t,setVisible:r,record:o}=e;me.useTranslation();const n=d.useCollection(),a=d.useCollectionParentRecordData(),i=A.useFieldSchema().properties.detail,l=b.useCallback(()=>{r(!1)},[]);return i&&c.jsx(go.Provider,{value:{close:l},children:c.jsx(d.ActionContextProvider,{value:{visible:t,setVisible:r},children:c.jsx(d.RecordProvider,{record:o,parent:a,children:c.jsx(d.VariablePopupRecordProvider,{recordData:o,collection:n,children:c.jsx(A.RecursionField,{schema:i,name:i.name})})})})})},bo=pt.debounce((e,t,r,o,n)=>R(this,null,function*(){yield t.update({filterByTk:e.id,values:{[r.start]:e.start,[r.end]:e.end}}),Ge.message.success(n("Saved successfully")),yield o==null?void 0:o.refresh()}),300),xo=pt.debounce((e,t,r,o,n)=>R(this,null,function*(){yield t.update({filterByTk:e.id,values:{[r.progress]:e.progress/100}}),Ge.message.success(n("Saved successfully")),yield o==null?void 0:o.refresh()}),300),Ne=d.withDynamicSchemaProps(e=>{var Rt,er,tr;const{styles:t}=Pt(),{token:r}=d.useToken(),o=d.useAPIClient(),n=(Rt=JSON.parse(o.auth.getOption("theme")))==null?void 0:Rt.uid,{listCellWidth:a="155px",ganttHeight:s=0,preStepsCount:i=1,barFill:l=60,barCornerRadius:u=r.borderRadiusXS,barProgressColor:g=r.colorPrimary,barProgressSelectedColor:y=r.colorPrimary,barBackgroundColor:D=r.colorPrimary,barBackgroundSelectedColor:w=r.colorPrimary,projectProgressColor:C=r.colorPrimary,projectProgressSelectedColor:k=r.colorPrimary,projectBackgroundColor:m=r.colorPrimary,projectBackgroundSelectedColor:p=r.colorPrimary,milestoneBackgroundColor:v="#f1c453",milestoneBackgroundSelectedColor:N="#f29e4c",rtl:x=!1,handleWidth:h=8,timeStep:f=3e5,arrowColor:S="grey",fontFamily:P="-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",fontSize:L=r.fontSize,arrowIndent:_=20,todayColor:ve="rgba(252, 248, 227, 0.5)",viewDate:Z,TooltipContent:$e=Ar,onDoubleClick:st,onDelete:je,onSelect:F,onExpanderClick:G,tasks:z,expandAndCollapseAll:q,fieldNames:X,loading:oe}=d.useProps(e),{designable:Me}=d.useDesignable(),U=n!=null&&n.includes("compact")?45:Me?65:55,W=n!=null&&n.includes("compact")?45:65,ce=J(),qe=d.useCurrentAppInfo(),{t:ne}=me.useTranslation(),yo=(er=qe.data)==null?void 0:er.lang,it=d.useTableBlockContext(),{resource:Xt,service:Ie}=d.useBlockRequestContext(),Yt=A.useFieldSchema(),ae=X.range||"day",Se=b.useRef(null),lt=b.useRef(null),jt=b.useRef(null),vo=b.useRef(null),[de,So]=b.useState(()=>{const[T,V]=Nt(z,ae,i);return{viewMode:ae,dates:Mt(T,V,ae)}}),[Co,qt]=b.useState(!1),[wo,To]=b.useState({}),[ke,Wt]=b.useState(void 0),[We,Ut]=b.useState(0),[No,Mo]=b.useState(0),[Do,_t]=b.useState(s),[se,Ue]=b.useState([]),[Le,Qt]=b.useState({action:""}),ct=b.useMemo(()=>W*l/100,[W,l]),[dt,Bo]=b.useState(),[_e,Kt]=b.useState(null),[ge,ut]=b.useState(0),[ue,Ve]=b.useState(-1),[Jt,De]=b.useState(!1),te=ho(de.dates.length,(tr=jt.current)==null?void 0:tr.clientWidth),fe=de.dates.length*te,Be=se.length*W,{expandFlag:Zt}=it,[Po,Fo]=b.useState([]);b.useEffect(()=>{it.field.onExpandClick=Lo,it.field.onRowSelect=Vo},[]),b.useEffect(()=>{q==null||q(!Zt)},[Zt]),b.useEffect(()=>{let T;G?T=Dr(z):T=z,T=T.sort(Br);const[V,B]=Nt(T,ae,i);let $=Mt(V,B,ae);x&&($=$.reverse(),ue===-1&&Ve($.length*te)),So({dates:$,viewMode:ae}),Ue(hr(T,$,te,W,ct,u,h,x,g,y,D,w,C,k,m,p,v,N))},[z,ae,i,W,u,te,ct,h,g,y,D,w,C,k,m,p,v,N,x,ue]),b.useEffect(()=>{if(ae===de.viewMode&&(Z&&!ke||Z&&(ke==null?void 0:ke.valueOf())!==Z.valueOf())){const T=de.dates,V=T.findIndex((B,$)=>Z.valueOf()>=B.valueOf()&&$+1!==T.length&&Z.valueOf()<T[$+1].valueOf());if(V===-1)return;Wt(Z),Ve(te*V)}},[Z,te,de.dates,de.viewMode,ae,ke,Wt]),b.useEffect(()=>{const{changedTask:T,action:V}=Le;if(T){if(V==="delete")Qt({action:""}),Ue(se.filter(B=>B.id!==T.id));else if(V==="move"||V==="end"||V==="start"||V==="progress"){const B=se.find($=>$.id===T.id);if(B&&B.start&&B.end&&(B.start.getTime()!==T.start.getTime()||B.end.getTime()!==T.end.getTime()||B.progress!==T.progress)){const $=se.map(K=>K.id===T.id?T:K);Ue($)}}}},[Le,se]),b.useEffect(()=>{_e&&(Ue(se.map(T=>T.id!==_e.id?T:_e)),Kt(null))},[_e,se]),b.useEffect(()=>{a||Ut(0),lt.current&&Ut(lt.current.offsetWidth)},[lt,a]),b.useEffect(()=>{Se.current&&Mo(Se.current.offsetWidth-We)},[Se,We]),b.useEffect(()=>{_t(s?s+U:z.length*W+U)},[s,z,U,W]),b.useEffect(()=>{var V;const T=B=>{if(B.shiftKey||B.deltaX){const $=B.deltaX?B.deltaX:B.deltaY;let K=ue+$;K<0?K=0:K>fe&&(K=fe),Ve(K),B.preventDefault()}else if(s){let $=ge+B.deltaY;$<0?$=0:$>Be-s&&($=Be-s),$!==ge&&(ut($),B.preventDefault())}De(!0)};return(V=Se.current)==null||V.addEventListener("wheel",T,{passive:!1}),()=>{var B;(B=Se.current)==null||B.removeEventListener("wheel",T)}},[Se,ge,ue,s,fe,x,Be]);const Ao=T=>{ge!==T.currentTarget.scrollTop&&!Jt?(ut(T.currentTarget.scrollTop),De(!0)):De(!1)},$o=T=>{ue!==T.currentTarget.scrollLeft&&!Jt?(Ve(T.currentTarget.scrollLeft),De(!0)):De(!1)},Io=T=>{T.preventDefault();let V=ge,B=ue,$=!0;switch(T.key){case"Down":case"ArrowDown":V+=W,$=!1;break;case"Up":case"ArrowUp":V-=W,$=!1;break;case"Left":case"ArrowLeft":B-=te;break;case"Right":case"ArrowRight":B+=te;break}$?(B<0?B=0:B>fe&&(B=fe),Ve(B)):(V<0?V=0:V>Be-s&&(V=Be-s),ut(V)),De(!0)},ko=T=>{const V=se.find($=>$.id===T),B=se.find($=>!!dt&&$.id===dt.id);F&&(B&&F(B,!1),V&&F(V,!0)),Bo(V)},Lo=(T,V)=>{var $;const B=($=ce==null?void 0:ce.field)==null?void 0:$.data.find(K=>K.id===V.id+"");G&&V.children.length&&G(Ce(H({},B),{hideChildren:!T}))},Vo=T=>{Fo(T)},Go=T=>R(this,null,function*(){xo(T,Xt,X,Ie,ne)}),Eo=T=>R(this,null,function*(){bo(T,Xt,X,Ie,ne)}),Ho=T=>{var K;const V=ft=>ft.reduce((rr,Qe)=>Qe.children?rr.concat([Qe,...V(Qe.children)]):rr.concat(Qe),[]),B=V((K=Ie==null?void 0:Ie.data)==null?void 0:K.data),$=B==null?void 0:B.find(ft=>ft.id===+T.id);$&&(To($),qt(!0))},Oo={columnWidth:te,svgWidth:fe,tasks:z,rowHeight:W,dates:de.dates,todayColor:ve,rtl:x,selectedRowKeys:Po},zo={dateSetup:de,locale:yo,viewMode:ae,headerHeight:U,columnWidth:te,fontFamily:P,fontSize:L,rtl:x},Xo={tasks:se,dates:de.dates,ganttEvent:Le,selectedTask:dt,rowHeight:W,taskHeight:ct,columnWidth:te,arrowColor:S,timeStep:f,fontFamily:P,fontSize:L,arrowIndent:_,svgWidth:fe,rtl:x,setGanttEvent:Qt,setFailedTask:Kt,setSelectedTask:ko,onDateChange:Eo,onProgressChange:X.progress&&Go,onDoubleClick:st,onClick:Ho,onDelete:je,loading:oe};return c.jsxs("div",{className:M.cx(M.css`
247
247
  .ant-table-container::after {
248
248
  box-shadow: none !important;
249
249
  }
@@ -8,7 +8,7 @@
8
8
  */
9
9
 
10
10
  module.exports = {
11
- "@nocobase/client": "1.2.8-alpha",
11
+ "@nocobase/client": "1.2.10-alpha",
12
12
  "react": "18.2.0",
13
13
  "@formily/react": "2.3.0",
14
14
  "@ant-design/icons": "5.2.6",
@@ -16,10 +16,10 @@ module.exports = {
16
16
  "react-i18next": "11.18.6",
17
17
  "lodash": "4.17.21",
18
18
  "@formily/shared": "2.3.0",
19
- "@nocobase/server": "1.2.8-alpha",
20
- "@nocobase/test": "1.2.8-alpha",
19
+ "@nocobase/server": "1.2.10-alpha",
20
+ "@nocobase/test": "1.2.10-alpha",
21
21
  "@emotion/css": "11.11.2",
22
22
  "antd-style": "3.4.5",
23
23
  "antd": "5.12.8",
24
- "@nocobase/utils": "1.2.8-alpha"
24
+ "@nocobase/utils": "1.2.10-alpha"
25
25
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nocobase/plugin-gantt",
3
- "version": "1.2.8-alpha",
3
+ "version": "1.2.10-alpha",
4
4
  "displayName": "Block: Gantt",
5
5
  "displayName.zh-CN": "区块:甘特图",
6
6
  "description": "Provides Gantt block.",
@@ -17,7 +17,7 @@
17
17
  "@nocobase/server": "1.x",
18
18
  "@nocobase/test": "1.x"
19
19
  },
20
- "gitHead": "23132ae9e60c152ea61b77a6371a41c684d4041a",
20
+ "gitHead": "378bfb33c8d124ef79074e5474c1cf2199aeb8da",
21
21
  "keywords": [
22
22
  "Blocks"
23
23
  ]