UNPKG

react-calendar-z

Version:

React hook calendar (lib). Ultimate calendar

2 lines (1 loc) 17 kB
import e,{useRef as a,useState as t,useEffect as n}from"react";import r from"joinclass";import{When as l,Ifz as o}from"react-if-vz";import{FadeInAnimate as c}from"react-wrap-animate-z";import i from"react-dropdown-z";var s=function(a){var t=a.value,n=a.className,l=a.disabled,o=a.display,c=a.isSelected,i=a.neighbor,s=a.setSelected;return e.createElement("span",{className:r("picker-cell month-year-cell",n,l&&"disabled-over-range-time",c&&"date-is-selected",i&&"date-neighbor-target"),onClick:function(){l||s(t)},"aria-hidden":!0},e.createElement("span",{className:"date-cell-value"},null!=o?o:t),e.createElement("div",{className:"date-cell-bullet"}),e.createElement("div",{tabIndex:!l&&c?0:-1,className:"date-cell-box"}))},m=new Date,d=m.getDate(),u=m.getMonth(),h=m.getFullYear(),f=function(e){return null==e},y=function(e,a,t){return d===t&&u===a&&h===e},v=function(e){var a=e.minYear,t=e.maxYear,n=e.notBeforeTime,r=e.notAfterTime,l=new Date,o=l.getFullYear();if(a||(a=o-100),t||(t=o+100),n){var c=n.getFullYear();a=a<c?c:a}else n=new Date(a,0,1);if(r){var i=r.getFullYear();t=t>i?i:t}else r=new Date(t,11,31);return a>t&&(a=t),!e.minimumDayCanLargeThanToday&&a>o&&(a=o,n=l),{minYear:a,maxYear:t,minMonth:n.getMonth(),maxMonth:r.getMonth(),notBeforeTime:n,notAfterTime:r,beforeYearMonth:Y([n.getFullYear(),n.getMonth()]),afterYearMonth:Y([r.getFullYear(),r.getMonth()]),beforeAll:C(n.getFullYear(),n.getMonth(),n.getDate()),afterAll:C(r.getFullYear(),r.getMonth(),r.getDate())}},N=function(e,a){return(a||D)[e]||""},p=function(e){return"0".concat(e).slice(-2)},b=function(e,a){return e.reduce((function(e,t,n){return(n%a==0?e.push([t]):e[e.length-1].push(t))&&e}),[])},g=function(e,a){return a>11?(e++,a=0):a<0&&(e--,a=11),[e,a]},k=function(e,a,t,n,r){if(!n&&!r)return!1;var l=C(e,a,t);return n>0&&r>0?l<n||l>r:r>0?l>r:n>0&&l<n},E=function(e){return[31,e%4==0&&e%100!=0||e%400==0?29:28,31,30,31,30,31,31,30,31,30,31]},M=function(e,a){var t=g(e,a),n=t[0],r=t[1];return{year:n,month:r,maxDayOfMonth:E(n)[r],otherMonth:!0}},C=function(e,a,t){return Number(e+p(a)+p(t))},Y=function(e){return Number(e[0]+p(e[1]))},w=function(e,a){return p(e)+p(a)},x=function(e){var a=10*Math.floor(e/10);return[a,a+9]},D=["January","February","March","April","May","June","July","August","September","October","November","December"],S=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],T=[{name:"Sunday",shortName:"Su",dateClassName:"date-cell-sunday",keyName:"sun",number:0},{name:"Monday",shortName:"Mo",dateClassName:"date-cell-monday",keyName:"mon",number:6},{name:"Tuesday",shortName:"Tu",dateClassName:"date-cell-tuesday",keyName:"tue",number:5},{name:"Wednesday",shortName:"We",dateClassName:"date-cell-wednesday",keyName:"wed",number:4},{name:"Thursday",shortName:"Th",dateClassName:"date-cell-thursday",keyName:"thu",number:3},{name:"Friday",shortName:"Fr",dateClassName:"date-cell-friday",keyName:"fri",number:2},{name:"Saturday",shortName:"Sa",dateClassName:"date-cell-saturday",keyName:"sat",number:1}],F=T.map((function(e){return e.dateClassName})),O={sunday:[0,6,5,4,3,2,1],monday:[6,5,4,3,2,1,0],friday:[2,1,0,6,5,4,3],saturday:[1,0,6,5,4,3,2]},B=function(a){var t=a.weekLabels,n=void 0===t?[]:t,o=a.dayOfWeeks,c=void 0===o?[]:o,i=a.readOnly,s=a.neighborMonthClassName,m=a.showToday,d=a.todayClassName,u=a.selectedClassName,h=a.handleChangeDate,f=a.formatDayValue;return e.createElement(e.Fragment,null,c.map((function(a,t){return e.createElement("div",{key:t,className:"date-row date-line",role:"row"},a.map((function(a,t){var o,c=a.showOnlyCurrentMonthDays||i,y=a.isSelected&&!c,v=a.isOverRange&&!c,N=a.isToday&&m,p=r("picker-cell date-cell","date-cell-".concat(S[a.month]),null===(o=n[t])||void 0===o?void 0:o.dateClassName,"date-cell-".concat(w(a.month+1,a.dayDisplay)),"date-cell-".concat(C(a.year,a.month+1,a.dayDisplay)),a.isBookmark&&"date-is-bookmark",a.bookmarkClassName,a.otherMonth&&"date-neighbor-target",a.otherMonth&&s,N&&"date-is-today",N&&d,y&&"date-is-selected",y&&u,c&&"read-only",v&&"disabled-over-range-time");return e.createElement("span",{key:t,className:p,onClick:function(){c||a.isOverRange||h(a)},"aria-hidden":!0},e.createElement(l,{condition:!a.showOnlyCurrentMonthDays},e.createElement("span",{className:"date-cell-value"},f?f(a.dayDisplay):a.dayDisplay)),e.createElement("div",{className:"date-cell-bullet"}),e.createElement("div",{tabIndex:y?0:-1,className:"date-cell-box"}))})))})))},A=function(a){var t=a.decadeData,n=a.selected,r=a.minYear,l=a.maxYear,o=a.setSelected,c=void 0===o?function(){}:o,i=t[0],m=t[1],d=b(Array.from({length:m-i+3},(function(e,a){return i-1+a})),3);return e.createElement(e.Fragment,null,d.map((function(a,t){return e.createElement("div",{key:t,className:"date-row",role:"row"},a.map((function(a,t){return e.createElement(s,{key:t,className:"year-cell-".concat(a),disabled:r>a||l<a,neighbor:a<i||a>m,isSelected:a===n,value:a,setSelected:c})})))})))},V=function(a){var t=a.labelMonths,n=a.selected,l=a.isSameYear,o=a.year,c=a.minYearMonth,i=a.maxYearMonth,m=a.setSelected,d=void 0===m?function(){}:m,u=b(t||D,3);return e.createElement(e.Fragment,null,u.map((function(a,t){return e.createElement("div",{key:t,className:"date-row",role:"row"},a.map((function(a,m){var u=3*t+m,h=Y(g(o,u));return e.createElement(s,{key:m,className:r("month-year-cell-".concat(h),"month-cell-".concat(S[u])),disabled:c>h||i<h,isSelected:u===n&&l,display:a,value:u,setSelected:d})})))})))},L=function(a){var t=a.weekLabels,n=a.weekClassName,l=a.dayOfWeeks,o=void 0===l?[]:l,c=a.readOnly,i=a.neighborMonthClassName,s=a.showToday,m=a.todayClassName,d=a.selectedClassName,u=a.onClickWeekLabel,h=void 0===u?function(){}:u,f=a.handleChangeDate,y=a.formatDayValue;return e.createElement(e.Fragment,null,e.createElement("div",{className:"date-row date-label",role:"row"},t.map((function(a,t){return e.createElement("span",{key:t,className:r("week-label date-cell",a.dateClassName,n),onClick:function(){return h(a)},"aria-hidden":!0},e.createElement("span",null,a.shortName||a.name),e.createElement("div",{className:"week-cell-box"}))}))),e.createElement(B,{weekLabels:t,dayOfWeeks:o,readOnly:c,neighborMonthClassName:i,showToday:s,todayClassName:m,selectedClassName:d,formatDayValue:y,handleChangeDate:f}))},W=function(a){var t=a.children,n=a.className,l=a.disabled,o=a.isVisible,c=a.index,i=a.handleNextBack;return o?e.createElement("span",{className:r("date-picker2-nav-button",n,l&&"button-disabled"),onClick:function(){l||i(c)}},t||e.createElement("span",{className:"date-picker2-arrow-inner"})):null},I=function(a){var t=a.showXClose,n=void 0===t||t,r=a.xCloseIcon,o=a.showFooter,c=a.selectedValue,i=a.resetSelectionValue;return e.createElement(l,{condition:o},e.createElement("div",{className:"date-picker2-footer"},e.createElement("div",{className:"date-picker2-footer-content"},e.createElement("div",{className:"date-picker2-calendar-selected"},c),e.createElement("div",{className:"date-picker2-calendar-close"},e.createElement(l,{condition:Boolean(r)},e.createElement("div",{className:"date-picker2-calendar-close-icon date-picker2-calendar-your-icon",onClick:i},r)),e.createElement(l,{condition:n&&Boolean(!r)},e.createElement("div",{className:"date-picker2-calendar-close-icon date-picker2-calendar-close-x-icon",onClick:i}))))))},H=function(){return H=Object.assign||function(e){for(var a,t=1,n=arguments.length;t<n;t++)for(var r in a=arguments[t])Object.prototype.hasOwnProperty.call(a,r)&&(e[r]=a[r]);return e},H.apply(this,arguments)};function j(e,a,t){if(t||2===arguments.length)for(var n,r=0,l=a.length;r<l;r++)!n&&r in a||(n||(n=Array.prototype.slice.call(a,0,r)),n[r]=a[r]);return e.concat(n||Array.prototype.slice.call(a))}"function"==typeof SuppressedError&&SuppressedError;var R,z=function(a){var t=a.currentDate,n=a.minYear,l=a.maxYear,o=a.minMonth,c=a.maxMonth,s=a.valueMonth,m=a.valueYear,d=a.className,u=a.maxHeightSelectMonth,h=a.maxHeightSelectYear,y=a.i18nLabelMonth,v=a.minimumDayCanLargeThanToday,N=a.handleChange;if(f(s)||f(m))return null;var p=function(e,a,t,n,r,l){return a===l?e.slice(0,n+1):a===r?e.slice(t):e}(y||D,m,o,c,n,l).map((function(e,a){return{label:e,value:a}})),b=function(e,a,t,n){var r=e.getFullYear(),l=a>t?[t,a]:[a,t],o=l[0],c=l[1];return(n&&o<r||r<o)&&(o=r),Array.from({length:c-o+1},(function(e,a){return o+a})).map((function(e,t){return{label:"".concat(a+t),value:a+t}})).reverse()}(t,n,l,v||!1);return e.createElement("span",{className:r("date-picker2-select-month-year date-picker2-title-month-year",d)},e.createElement("span",{className:"date-picker2-select-month"},e.createElement(i,{width:"112px",fullWidth:!0,className:"date-picker2-select-month-control",value:s,keyName:"value",labelName:"label",options:p,spacingVerticalOffset:4,dropdownHeight:u,handleSelection:function(e){N(m,Number(e))}})),e.createElement("span",{className:"date-picker2-select-split"}),e.createElement("span",{className:"date-picker2-select-year"},e.createElement(i,{width:"80px",fullWidth:!0,className:"date-picker2-select-year-control",value:m,keyName:"value",labelName:"label",options:b,spacingVerticalOffset:4,dropdownHeight:h,handleSelection:function(e){N(Number(e),s)}})))},J=((R={8:1,7:0})[-1]=6,R),X={monday:{numberWeek:1,plus:-1},sunday:{numberWeek:0,plus:0},saturday:{numberWeek:-1,plus:1},friday:{numberWeek:-2,plus:2}},P=function(i){var s=i.className,m=i.todayClassName,d=i.selectedClassName,u=i.neighborMonthClassName,h=i.labelMonthYearClassName,f=i.weekClassName,y=i.width,p=i.height,b=i.readOnly,k=i.isVisible,C=void 0===k||k,Y=i.showAnchor,w=i.labelNext,D=i.labelBack,B=i.weekStart,R=void 0===B?"sunday":B,P=i.showOnlyCurrentMonthDays,G=i.notBeforeTime,U=i.notAfterTime,Z=i.value,$=i.bookmarkDates,_=i.showToday,ee=void 0===_||_,ae=i.i18nLabelWeek,te=i.i18nLabelMonth,ne=i.minYear,re=i.maxYear,le=i.minimumDayCanLargeThanToday,oe=i.showMonthYearSelection,ce=i.showNextBack,ie=void 0===ce||ce,se=i.rightNextBack,me=i.maxHeightSelectMonth,de=i.maxHeightSelectYear,ue=i.showFooter,he=i.showXClose,fe=void 0===he||he,ye=i.xCloseIcon,ve=i.refsResetCalendar,Ne=i.onSelectedValue,pe=void 0===Ne?function(){}:Ne,be=i.onChangeView,ge=void 0===be?function(){}:be,ke=i.onClickWeekLabel,Ee=void 0===ke?function(){}:ke,Me=i.formatTittleYearMonth,Ce=i.formatDayValue,Ye=i.formatSelectedDate,we=a(!0),xe=a({}),De=t(Z||new Date),Se=De[0],Te=De[1],Fe=t([]),Oe=Fe[0],Be=Fe[1],Ae=t([]),Ve=Ae[0],Le=Ae[1],We=t([]),Ie=We[0],He=We[1],je=t("date"),Re=je[0],ze=je[1],Je=t([]),Xe=Je[0],Pe=Je[1],qe=t(),Ge=qe[0],Ke=qe[1],Qe="date"===Re,Ue="month"===Re,Ze="year"===Re;n((function(){xe.current=v({maxYear:re,minYear:ne,notAfterTime:U,notBeforeTime:G,minimumDayCanLargeThanToday:le});var e=Z||new Date,a=!Z&&le,t=Z&&!le&&e<xe.current.notBeforeTime;a&&(we.current=!1,e=new Date(xe.current.minYear,xe.current.minMonth,1)),t&&(we.current=!1,e=xe.current.notBeforeTime),ra(e.getFullYear(),e.getMonth(),e),ve&&(ve.current=la)}),[Z,ee,G,U,te,b,P,le,oe,R,ae,$]),n((function(){var e=Array.isArray(ae)&&7===ae.length?ae:T,a=new Map;e.forEach((function(e,t){var n="object"==typeof e?H({},e):{shortName:e};a.set(T[t].number,H(H({},n),{dateClassName:F[t]}))}));var t=(O[R]||O.sunday).map((function(e){return H({},a.get(e))}));Be(t)}),[R,ae]),n((function(){(C||oe)&&la()}),[C,oe,R,$]);var $e,_e,ea=q(Ze,Qe,Xe,Ie,xe),aa=ea.disabledBack,ta=ea.disabledNext,na=function(e){if(!(aa&&-1===e||ta&&1===e)){Ke(e);var a=Xe[0],t=Xe[1];if(Ze){var n=a+10*e;return He(x(n)),void Pe([n,t])}var r=Qe||oe?g(a,t+e):g(a+e,t),l=r[0],o=r[1];ra(l,o)}},ra=function(e,a,t){void 0===t&&(t=Se),function(e,a,t,n,r,l,o,c,i,s,m){var d,u;void 0===s&&(s=[]);for(var h=function(e,a){var t;if("sunday"!==a&&X[a]){var n=e+X[a].plus;return null!==(t=J[n])&&void 0!==t?t:n}return e}(new Date(e,a,1).getDay(),l),f=E(e)[a],y=n&&null!==(d=Q(n))&&void 0!==d?d:0,v=r&&null!==(u=Q(r))&&void 0!==u?u:0,N=M(e,a-1),p=M(e,a+1),b=[],g=[],k=function(){7===g.length&&(b.push(j([],g,!0)),g=[])},C=function(e,a){return K(H(H({},e),{dayDisplay:a}),t,s,y,v,e.year,e.month,a,o,m)},Y=N.maxDayOfMonth-h+1;Y<=N.maxDayOfMonth;Y++)g.push(C(N,Y));k();for(Y=1;Y<=f;Y++)g.push(C({year:e,month:a},Y)),k();var w=b.flat().length+g.length,x=42-w;for(Y=1;Y<=x;Y++)g.push(C(p,Y)),k();g.length>0&&b.push(j([],g,!0));c(b),i([e,a])}(e,a,t,xe.current.notBeforeTime,xe.current.notAfterTime,R,Boolean(P),Le,Pe,$,we.current)},la=function(){ze("date"),ge("date"),ra(Se.getFullYear(),Se.getMonth())};return C?e.createElement("div",{style:{width:y,height:p},className:r("date-picker2",s)},e.createElement("div",{className:"date-picker2-header"},e.createElement(l,{condition:!se},e.createElement(W,{index:-1,isVisible:ie,className:"button-left",disabled:aa,handleNextBack:na},D)),e.createElement(l,{condition:Y},e.createElement("span",{className:"date-picker2-anchor left-label"})),e.createElement(o,null,e.createElement(o.If,{condition:oe},e.createElement(z,{className:h,currentDate:Se,maxYear:xe.current.maxYear,minYear:xe.current.minYear,minMonth:xe.current.minMonth,maxMonth:xe.current.maxMonth,valueYear:Xe[0],valueMonth:Xe[1],maxHeightSelectMonth:me,maxHeightSelectYear:de,i18nLabelMonth:te,minimumDayCanLargeThanToday:le,handleChange:ra})),e.createElement(o.Else,null,e.createElement(c,{key:Ge,duration:"100ms",delay:"0ms",tagName:"span",className:r("date-picker2-title-month-year",Qe&&"date-picker2-title-month",Ue&&"date-picker2-title-year",Ze&&"date-picker2-title-decade",h)},e.createElement("span",{className:"date-picker2-label-month-year",onClick:function(){var e="date";Ue?(He(x(Xe[0])),e="year"):Qe&&(e="month"),Ke(0),ze(e),ge(e)},"aria-hidden":!0},($e=Xe[0],_e=Xe[1],Me?Ue?Me($e,-1):Ze?Me(-1,-1,Ie):Me($e,_e+1):Ue?$e||"":Ze?"".concat(Ie[0]," - ").concat(Ie[1]):"".concat(N(_e,te)," ").concat($e||"").trim()))))),e.createElement(l,{condition:Y},e.createElement("span",{className:"date-picker2-anchor right-label"})),e.createElement(l,{condition:se},e.createElement(W,{index:-1,isVisible:ie,className:"button-left",disabled:aa,handleNextBack:na},D)),e.createElement(W,{index:1,isVisible:ie,className:"button-right",disabled:ta,handleNextBack:na},w)),e.createElement("div",{className:"date-picker2-content"},e.createElement("div",{className:r("date-picker2-calendar","date-picker2-calendar-month-".concat(S[Xe[1]])),role:"grid"},e.createElement(o,null,e.createElement(o.If,{condition:Qe},e.createElement(L,{weekLabels:Oe,weekClassName:f,dayOfWeeks:Ve,readOnly:b,showToday:ee,todayClassName:m,selectedClassName:d,neighborMonthClassName:u,onClickWeekLabel:Ee,handleChangeDate:function(e){if(!b){we.current=!0;var a=e.year,t=e.month,n=e.dayDisplay,r=new Date(a,t,n);Te(r),pe(r),ra(a,t,r)}},formatDayValue:Ce})),e.createElement(o.ElseIf,{condition:Ue},e.createElement(V,{year:Xe[0],labelMonths:te,minYearMonth:xe.current.beforeYearMonth,maxYearMonth:xe.current.afterYearMonth,selected:Se.getMonth(),isSameYear:Se.getFullYear()===Xe[0],setSelected:function(e){var a=g(Xe[0],e),t=a[0],n=a[1];ra(t,n),ze("date"),ge("date")}})),e.createElement(o.ElseIf,{condition:Ze},e.createElement(l,{condition:Ze},e.createElement(A,{decadeData:Ie,selected:Se.getFullYear(),minYear:xe.current.minYear,maxYear:xe.current.maxYear,setSelected:function(e){Pe([e,Xe[1]]),ze("month"),ge("month")}})))))),e.createElement(I,{showXClose:fe,xCloseIcon:ye,showFooter:ue,selectedValue:function(){var e=Z||Se;if(Ye)return Ye(e);var a=N(e.getMonth(),te),t=e.getDate(),n=e.getFullYear();return"".concat(a," ").concat(t,", ").concat(n)}(),resetSelectionValue:la})):e.createElement(e.Fragment,null)},q=function(e,a,t,n,r){var l=t[0],o=t[1];if(e)return{disabledBack:n[0]<=r.current.minYear,disabledNext:n[1]>=r.current.maxYear};if(a){var c=E(l)[o],i=C(l,o,1),s=C(l,o,c);return{disabledBack:r.current.beforeAll>=i,disabledNext:r.current.afterAll<=s}}var m=g(l,0),d=m[0],u=m[1],h=g(l,11),f=h[0],y=h[1],v=Y([d,u]),N=Y([f,y]);return{disabledBack:r.current.beforeYearMonth>=v,disabledNext:r.current.afterYearMonth<=N}},G=function(e,a,t,n){return t===n.getDate()&&a===n.getMonth()&&e===n.getFullYear()},K=function(e,a,t,n,r,l,o,c,i,s){void 0===t&&(t=[]),void 0===c&&(c=0),void 0===s&&(s=!1);var m=function(e,a,t,n){return void 0===n&&(n=[]),n.find((function(n){var r=n.date;return r.getFullYear()===e&&r.getMonth()===a&&r.getDate()===t}))||{}}(l,o,c,t);return H(H({},e),{dayDisplay:c,isToday:y(l,o,c),isSelected:G(l,o,c,a)&&s,isOverRange:k(l,o,c,n,r),showOnlyCurrentMonthDays:i,isBookmark:Boolean(m.className),bookmarkClassName:m.className})};function Q(e){return e?C(e.getFullYear(),e.getMonth(),e.getDate()):void 0}export{s as CalendarCell,B as CalendarDayOfWeeks,A as CalendarDecade,I as CalendarFooter,V as CalendarMonth,W as CalendarNav,L as CalendarWeek,F as datesClassName,P as default,w as fmtMonthDay,x as getDecadesFromYear,E as getMaxDayOfMonth,v as getMiMaxYear,N as getMonthName,M as getPreNextOfMonth,g as getRealYearMonth,f as isNil,k as isOverCompareDate,y as isToday,S as keyMonths,D as labelMonths,T as labelWeekDays,p as padZero,C as parseYearMonthDateToNumber,Y as parseYearMonthToNumber,O as startWeekDays,b as toMatrix};