hwc
Version:
A react Headless Week Calendar toolkit to build calendars like Google Calendar.
3 lines (2 loc) • 10 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0});var e,t=require("react"),n=(e=t)&&"object"==typeof e&&"default"in e?e.default:e,r=n.createContext(null),i=function(){var e=n.useContext(r);if(null===e)throw new Error("No WeekPicker Context found. Please Wrap Hwc components in <HwcProvider />");return e};function a(){return(a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function o(e,t){if(null==e)return{};var n,r,i={},a=Object.keys(e);for(r=0;r<a.length;r++)t.indexOf(n=a[r])>=0||(i[n]=e[n]);return i}var u=function(e){var t=c(e),n=t.getMinutes()+60*t.getHours(),r=60*Math.round(n/60*4)/4,i=s(e);return i.setMinutes(r),i},s=function(e){var t=new Date(e);return t.setHours(0,0,0,0),t},c=function(e){var t=new Date(e);return t.setSeconds(0,0),t},d="undefined"!=typeof window?t.useLayoutEffect:t.useEffect,l=["onMouseMove","onMouseDown","style","children"],v=n.forwardRef((function(e,r){var v=e.onMouseMove,f=void 0===v?function(){}:v,m=e.onMouseDown,p=void 0===m?function(){}:m,g=e.style,D=e.children,w=o(e,l),h=i(),y=h.setPos,x=h.date,E=h.setWidth,T=h.setStartDragDate,b=h.addEvent,M=h.shadowEvent,C=h.cellHeight,k=t.useState(null),H=k[0],S=k[1];d((function(){if(H){var e=new ResizeObserver((function(e){var t=e[0];t&&E(t.contentRect.width)}));return e.observe(H),function(){e.disconnect()}}}),[H,E]);var P=t.useRef(),L=t.useCallback((function(e){e.target instanceof Element&&e.target.hasAttribute("week-picker-cell")&&(e.preventDefault(),P.current=x,p(e))}),[x,p]),O=t.useCallback((function(e){var t=e.currentTarget.getBoundingClientRect();y({x:e.clientX-t.left,y:e.clientY-t.top}),f(e),P.current&&!M&&u(P.current).getTime()!==u(x).getTime()&&T(P.current)}),[y,f,M,x,T]);return d((function(){var e=function(){if(P.current)if(M)b(M);else{var e=function(e){var t=c(e),n=t.getMinutes()+60*t.getHours(),r=60*Math.round(n/60*2)/2,i=s(e);return i.setMinutes(r),i}(x);b({startDate:e,endDate:new Date(e.getTime()+72e5)})}P.current=void 0,T(void 0)};return window.addEventListener("mouseup",e),function(){window.removeEventListener("mouseup",e)}}),[T,b,M,x]),n.createElement("div",Object.assign({},w,{style:a({position:"relative",height:24*C+"px"},g),onMouseMove:O,onDrag:function(e){return e.preventDefault()},onMouseDown:L,ref:r||S}),D)})),f=["style","colStyle","renderCell"],m=function(e){return n.createElement("div",{style:e.style})},p=n.forwardRef((function(e,r){var u=e.style,s=e.colStyle,c=e.renderCell,d=void 0===c?m:c,l=o(e,f),v=i(),p=v.startDay,g=v.cellHeight,D=v.cellWidth,w=new Array(v.daysCount).fill(0).map((function(e,t){return new Date(p.getTime()+864e5*t)})),h=new Array(24).fill(0).map((function(e,t){return t}));return n.createElement("div",Object.assign({},l,{ref:r,style:a({position:"absolute",width:"100%",display:"flex"},u)}),w.map((function(e,r){return n.createElement("div",{key:r,style:a({flex:"0 0 1",width:"100%"},s)},h.map((function(i){var a=0===r?"start":r===w.length-1?"end":void 0,o=0===i?"start":i===h.length-1?"end":void 0;return n.createElement(t.Fragment,{key:i},n.Children.map(d({cellHeight:g,cellWidth:D,style:{height:g+"px",borderLeft:"start"===a?void 0:"#aaa solid 1px",borderTop:"start"===o?void 0:"#aaa solid 1px",boxSizing:"border-box"},x:a,y:o,day:e,date:new Date(e.getTime()+36e5*i)}),(function(e){return n.cloneElement(e,{"week-picker-cell":""})})))})))})))})),g=function(e,t){var n=s(e).getTime(),r=n+864e5*t;return function(e){return e.startDate.getTime()<r&&e.endDate.getTime()>n}},D=function(e){for(var t=[],n=e.endDate.getTime(),r=0;r<20;r++){var i=t[t.length-1],o=i?s(i.startDate).getTime()+1728e5:s(e.startDate).getTime()+864e5,u=o<n;if(t.push(a({},e,{startDate:new Date(i?i.endDate:e.startDate),endDate:new Date(u?o:n)})),!u)break}return t},w=function(e){var r=e.event,a=e.index,o=e.position,u=e.renderGrip,s=i().setEventResizing,c=t.useMemo((function(){return{position:"absolute",top:"start"===o?"-4px":void 0,bottom:"end"===o?"-4px":void 0,height:"9px",width:"100%",cursor:"ns-resize"}}),[o]),d=t.useCallback((function(e){e.preventDefault(),e.stopPropagation(),s(a,o)}),[s,a,o]),l=t.useMemo((function(){return{event:r,index:a,position:o,style:c,elProps:{style:c,onMouseDown:d}}}),[r,a,o,c,d]);return u?n.createElement(n.Fragment,null,u(l)):n.createElement("div",Object.assign({},l.elProps))};exports.HwcContext=r,exports.HwcDragPane=v,exports.HwcEventsRenderer=function(e){var r,o,u,c,d,l,v,f=e.renderCard,m=e.renderShadowCard,p=e.renderGrip,h=i().setEventMoving,y=(r=i(),o=r.events,d=r.cellWidth,l=r.cellHeight,v=t.useMemo((function(){return g(u,c)}),[u=r.startDay,c=r.daysCount]),t.useMemo((function(){return o.map((function(e,t){return{event:e,index:t}})).filter((function(e){return v(e.event)})).map((function(e){return D(e.event).map((function(t){return a({},e,{event:t})}))})).map((function(e){return e.map((function(t,n){return a({},t,{isFirst:0===n,isLast:n===e.length-1})}))})).flat().filter((function(e){return v(e.event)})).map((function(e){var t=(s(e.event.startDate).getTime()-s(u).getTime())/864e5,n=e.event.endDate.getTime()-e.event.startDate.getTime(),r=e.event.startDate.getTime()-s(e.event.startDate).getTime(),i={width:d,height:n/36e5*l,left:t*d,top:r/36e5*l};return a({},e,{rect:i,style:{width:i.width+"px",height:i.height+"px"}})}))}),[o,d,u,l,v])),x=function(){var e=i(),n=e.startDay,r=e.daysCount,o=e.shadowEvent,u=e.cellWidth,c=e.cellHeight,d=t.useMemo((function(){return g(n,r)}),[n,r]);return t.useMemo((function(){return(o?[{event:o}]:[]).filter((function(e){return d(e.event)})).map((function(e){return D(e.event).map((function(t){return a({},e,{event:t})}))})).map((function(e){return e.map((function(t,n){return a({},t,{index:n,isFirst:0===n,isLast:n===e.length-1})}))})).flat().filter((function(e){return d(e.event)})).map((function(e){var t=(s(e.event.startDate).getTime()-s(n).getTime())/864e5,r=e.event.endDate.getTime()-e.event.startDate.getTime(),i=e.event.startDate.getTime()-s(e.event.startDate).getTime(),o={width:u,height:r/36e5*c,left:t*u,top:i/36e5*c};return a({},e,{rect:o,style:{width:o.width+"px",height:o.height+"px"}})}))}),[u,n,o,c,d])}();return n.createElement("div",{style:{position:"relative"}},y.map((function(e,t){return n.createElement("div",{key:t,style:a({},e.style,{position:"absolute",left:e.rect.left+"px",top:e.rect.top+"px"}),onMouseDown:function(t){t.preventDefault(),h(e.index)}},f(e),e.isFirst&&n.createElement(w,{position:"start",event:e.event,index:e.index,renderGrip:p}),e.isLast&&n.createElement(w,{position:"end",event:e.event,index:e.index,renderGrip:p}))})),x.map((function(e,t){return n.createElement("div",{key:t,style:a({},e.style,{position:"absolute",left:e.rect.left+"px",top:e.rect.top+"px"})},m(e))})))},exports.HwcGrid=p,exports.HwcHeader=function(e){var t=e.locale,r=e.dateFormatOptions,a=void 0===r?{day:"2-digit",weekday:"short"}:r,o=i(),u=o.startDay,s=new Array(o.daysCount).fill(0).map((function(e,t){return new Date(u.getTime()+864e5*t)}));return n.createElement("div",{style:{display:"flex"}},s.map((function(e,r){return n.createElement("div",{key:r,style:{flex:"0 0 1",width:"100%"}},e.toLocaleDateString(t,a))})))},exports.HwcProvider=function(e){return n.createElement(r.Provider,{value:e.value},e.children)},exports.useHwc=function(e){void 0===e&&(e={});var n=e,r=n.startDay,i=void 0===r?new Date:r,o=n.cellHeight,c=void 0===o?50:o,d=n.daysCount,l=void 0===d?7:d,v=n.events,f=void 0===v?[]:v,m=n.onAddEvent,p=void 0===m?function(){}:m,g=n.onUpdateEvent,D=void 0===g?function(){}:g,w=t.useMemo((function(){return s(i)}),[i]),h=t.useState(0),y=h[0],x=h[1],E=t.useMemo((function(){return y/l}),[y,l]),T=t.useState({x:0,y:0}),b=T[0],M=T[1],C=t.useMemo((function(){return function(e,t,n,r,i){var a=e.y*(60/r),o=Math.trunc(e.x/(t||1)*i);return new Date(n.getTime()+864e5*o+6e4*a)}(b,y,w,c,l)}),[b,y,w,c,l]),k=function(e){var n=t.useState(),r=n[0],i=n[1];return[t.useMemo((function(){if(r){var t=[u(r),u(e)].sort((function(e,t){return e.getTime()-t.getTime()}));return{startDate:t[0],endDate:t[1]}}}),[r,e]),i]}(C),H=k[0],S=k[1],P=t.useCallback((function(e,t){var n=f[e];n.startDate.getTime()===t.startDate.getTime()&&n.endDate.getTime()===t.endDate.getTime()||D(e,a({},n,t),n)}),[f,D]),L=function(e,n){var r=t.useState(),i=r[0],a=r[1],o=t.useCallback((function(t,n){return a(void 0!==t&&void 0!==n?{startEvent:t,evIndex:n,date:e,dragDelta:e.getTime()-t.startDate.getTime()}:void 0)}),[a,e]);return t.useEffect((function(){if(i){var t=u(new Date(i.date.getTime()-e.getTime())).getTime();n(i.evIndex,{startDate:new Date(i.startEvent.startDate.getTime()-t),endDate:new Date(i.startEvent.endDate.getTime()-t)},i.startEvent)}}),[i,e,n]),t.useEffect((function(){i&&window.addEventListener("mouseup",(function e(){window.removeEventListener("mouseup",e),a(void 0)}))}),[i,a]),[o]}(C,P)[0],O=function(e,n){var r=t.useState(),i=r[0],a=r[1],o=t.useCallback((function(t,n,r){return a(void 0!==t&&void 0!==n&&void 0!==r?{event:t,evIndex:n,date:e,grip:r}:void 0)}),[a,e]);return t.useEffect((function(){if(i){var t=u(new Date(i.date.getTime()-e.getTime())).getTime();n(i.evIndex,{startDate:new Date("start"===i.grip?i.event.startDate.getTime()-t:i.event.startDate),endDate:new Date("end"===i.grip?i.event.endDate.getTime()-t:i.event.endDate)})}}),[i,e,n]),t.useEffect((function(){i&&window.addEventListener("mouseup",(function e(){window.removeEventListener("mouseup",e),a(void 0)}))}),[i,a]),[o]}(C,P)[0],j=t.useCallback((function(e){return p(e)}),[p]),R=t.useCallback((function(e,t,n){return D(e,t,n)}),[D]),W=t.useCallback((function(e){L(void 0!==e?f[e]:void 0,e)}),[L,f]),F=t.useCallback((function(e,t){O(void 0!==e?f[e]:void 0,e,void 0!==e?t:void 0)}),[O,f]);return{pos:b,date:C,cellWidth:E,cellHeight:c,startDay:w,daysCount:l,events:f,setPos:M,setWidth:x,setEventMoving:W,setEventResizing:F,shadowEvent:H,setStartDragDate:S,addEvent:j,updateEvent:R}},exports.useHwcContext=i;
//# sourceMappingURL=hwc.cjs.production.min.js.map