UNPKG

@lspriv/wx-calendar

Version:

微信小程序日历

1 lines 7.17 kB
"use strict";var a=this&&this.__awaiter||function(e,s,c,h){return new(c=c||Promise)(function(a,t){function n(e){try{i(h.next(e))}catch(e){t(e)}}function r(e){try{i(h.throw(e))}catch(e){t(e)}}function i(e){var t;e.done?a(e.value):((t=e.value)instanceof c?t:new c(function(e){e(t)})).then(n,r)}i((h=h.apply(e,s||[])).next())})};Object.defineProperty(exports,"__esModule",{value:!0}),exports.PanelTool=void 0;let e=require("../interface/component"),i=require("./layout"),_=require("./constants"),y=require("./tools"),s=require("../utils/calc"),r=require("../utils/shared"),k=require("../interface/calendar");class t extends e.CalendarHandler{createMonthPanels(n){let r=this._instance_.data.current,{year:i,month:s,day:c}=n;return Array.from({length:_.CALENDAR_PANELS},(e,t)=>{var a=(0,k.inMonthDate)(i,s+t-r,c);return this.createPanel(a,t,this.calcWeekOffset((0,k.offsetDate)(n,7*(t-r))))})}createWeekPanels(t){var a=this._instance_.data.current,n=[];for(let e=0;e<_.CALENDAR_PANELS;e++){var r=(0,k.offsetDate)(t,7*(e-a));n.push(this.createPanel(r,e,this.calcWeekOffset(r),n))}return n}createAnnualPanels(a){let n=this._instance_.data.current;return Array.from({length:_.CALENDAR_PANELS},(e,t)=>this.createAnnualPanel(a.year+t-n,t))}refreshPanels(t){var{current:a,checked:n}=t,r=this._instance_._view_&_.View.week,i=!this.skyline&&!!r,s=[];for(let e=0;e<_.CALENDAR_PANELS;e++){var c=this._instance_.data.panels[e],h=(0,y.circularDiff)(e,a),o=(0,k.offsetDate)(n,7*h),[l,d]=this.calcWeekOffset(o),o=r?o:(0,k.inMonthDate)(n.year,n.month+h,n.day);c.year!==o.year||c.month!==o.month?(h=this.createPanel(o,e,[l,d],s),t[`panels[${e}]`]=h,s.push(h),i&&(t.offsetChange=!0)):c.offset!==d&&(t[`panels[${e}].offset`]=d,t[`panels[${e}].wdx`]=l,i)&&(t.offsetChange=!0)}}refresh(i,s,c,h){return a(this,void 0,void 0,function*(){var e,t,a=this._instance_,n=a._view_&_.View.week,r=(a.data.current+i)%_.CALENDAR_PANELS,r=(c=null!=c?c:0<=r?r:r+_.CALENDAR_PANELS,s||({year:r,month:e,day:t}=a.data.checked,s=n?(0,k.normalDate)(r,e,t+7*i):(0,k.inMonthDate)(r,e+i,t)),{current:c,info:(0,k.getDateInfo)(s,a.data.weekstart,n),checked:s});this.refreshPanels(r),a._pointer_.update(r,h),a.setData(r),yield this.update()})}refreshView(s){return a(this,void 0,void 0,function*(){var e=this._instance_,{current:t,checked:a,weekstart:n}=e.data,r=(e._view_=s,(0,y.flagView)(s)),i=s&_.View.week,r={currView:r,info:(0,k.getDateInfo)(a,n,i),checked:a,current:t};this.refreshPanels(r),e.setData(r),yield this.update()})}refreshOffsets(t,e,a){var n,r,i,s=this._instance_,c=Array.isArray(e),h=null!=(h=t.current)?h:s.data.current,o=null!=(o=t.checked)?o:s.data.checked,l=!c&&null!=e?e:h,d=!c&&a||o,u=c?e:[],f=!this.skyline&&!!(s._view_&_.View.week);for(let e=0;e<_.CALENDAR_PANELS;e++)u.includes(e)||(n=this._instance_.data.panels[e],r=(0,y.circularDiff)(e,l),[r,i]=this.calcWeekOffset((0,k.offsetDate)(d,7*r)),n.offset!==i&&(t[`panels[${e}].offset`]=i,t[`panels[${e}].wdx`]=r,f)&&(t.offsetChange=!0))}refreshAnnualPanels(e,t){return a(this,arguments,void 0,function*(e,t,a=!1){var n=this._instance_,r=null!=(r=n.data.annualCurr)?r:(0,y.middle)(_.CALENDAR_PANELS),i=n.data.years[r].year+e,r=(r+e)%_.CALENDAR_PANELS,s=null!=t?t:0<=r?r:r+_.CALENDAR_PANELS,c={annualCurr:s},h=(a&&(c.annualDuration=0),[]);for(let e=0;e<_.CALENDAR_PANELS;e++){var o=n.data.years[e],l=i+(0,y.circularDiff)(e,s);o.year!==l&&(o=this.createAnnualPanel(l,e),c[`years[${e}]`]={key:o.key,year:o.year,subinfo:o.subinfo},n._years_.splice(e,1,{year:o.year,months:o.months,marks:o.marks}),h.push(e))}n.setData(c),yield(0,y.nextTick)(),n._printer_.update(h)})}createPanel(t,r,i,s=[]){var e=this._instance_,r="panel_"+r,[i,c]=i,s=[...e.data.panels,...s].find(e=>e.year===t.year&&e.month===t.month);if(s){let{year:e,month:t,weeks:a,count:n}=s;return{year:e,month:t,weeks:a,count:n,key:r,offset:c,wdx:i}}s=e.data.weekstart;let a=e._calendar_.createMonth({year:t.year,month:t.month},s);return Object.assign(Object.assign({},a),{key:r,offset:c,wdx:i})}createAnnualPanel(e,t){var a=this._instance_,n=a.data.weekstart,a=a._calendar_.createYear(e,n);return Object.assign(Object.assign({},a),{key:"y_"+t})}findWeekPanelIdx(e){var{checked:t,current:a,weekstart:n}=this._instance_.data,r=new Date(e.year,e.month-1,e.day);for(let e=0;e<_.CALENDAR_PANELS;e++){var i=(0,y.circularDiff)(e,a),[i,s]=(0,k.weekRange)((0,k.offsetDate)(t,7*i),n);if(i<=r&&r<=s)return e}return-1}toDate(e){return a(this,void 0,void 0,function*(){let i=this._instance_,s=(0,k.normalDate)(e);return i._calendar_.service.interceptEvent("manual",s,()=>a(this,void 0,void 0,function*(){var e,{current:t,panels:a,checked:n,weekstart:r}=i.data;(0,k.isSameDate)(s,n)||((e=(n=i._view_&_.View.week)?this.findWeekPanelIdx(s):a.findIndex(e=>e.year===s.year&&e.month===s.month))===t?n?(a=(0,k.findInWeeks)(a[e].weeks,e=>(0,k.isSameDate)(e,s)))&&(yield this.toWeekAdjoin(a,!1)):(a={info:(0,k.getDateInfo)(s,r,n),checked:s},this.refreshOffsets(a,t,s),i._pointer_.update(a),i.setData(a),yield this.update()):(yield i._pointer_.resetOffsetY(s),r=i.data.panels[t],n=(0,k.monthDiff)(r,{year:s.year,month:s.month}),yield this.refresh(n,s,0<=e?e:t)),i.trigger("change",{checked:s,source:"manual"}))}))})}toWeekAdjoin(e){return a(this,arguments,void 0,function*(e,t=!0){var a=this._instance_,n=a.data.current,r={info:(0,k.getDateInfo)(e,a.data.weekstart,!0),checked:e},i=this.calcWeekOffset(e);r[`panels[${n}]`]=this.createPanel(e,n,i),a._pointer_.update(r,!1,a.data.checked,!0),this.skyline||(r.offsetChange=!0),a.setData(r),yield(0,y.nextTick)(),yield this.update(),a._pointer_.update(void 0,t)})}toAnnualMonth(e){return a(this,arguments,void 0,function*(t,e=!0){var a=this._instance_,{checked:n,current:r,panels:i,weekstart:s}=a.data,c=i[r];c.year===t.year&&c.month===t.month&&(a._view_&_.View.month||!e)||(c=(0,k.inMonthDate)(t.year,t.month,n.day),i={current:0<=(i=i.findIndex(e=>e.year===t.year&&e.month===t.month))?i:r,checked:c},!e||a._view_&_.View.month||(r=(0,y.flagView)(_.View.month),i.currView=r,i.info=(0,k.getDateInfo)(c,s,!1),this.skyline?null!=(e=a._dragger_)&&e.toView(_.View.month,!1):i.initView=_.VIEWS.MONTH,a._view_=_.View.month),this.refreshPanels(i),a._pointer_.update(i,!1,void 0,!0),a.setData(i),yield this.update(),(0,k.isSameDate)(c,n))||a.trigger("change",{checked:c,source:"annual"})})}toYear(t){var e=this._instance_,a=null!=(a=e.data.annualCurr)?a:(0,y.middle)(_.CALENDAR_PANELS),n=e.data.years[a];return(0,r.nonNullable)(e.data.annualCurr)&&n.year===t?Promise.resolve():(e=e.data.years.findIndex(e=>e.year===t),n=t-n.year,this.refreshAnnualPanels(n,0<=e?e:a,!this.skyline))}getFullYear(e){return Object.assign(Object.assign({},this._instance_.data.years[e]),this._instance_._years_[e])}update(){return a(this,void 0,void 0,function*(){yield(0,y.nextTick)(),this.skyline&&this._instance_._dragger_.update()})}calcWeekOffset(e){return this.skyline?[0,0]:t.calcPanelOffset(e,this._instance_.data.weekstart)}static calcPanelOffset(e,t){var{year:e,month:a,day:n}=e,r=new Date(e,a-1,1),r=Math.abs(r.getDay()+7-t)%7,t=(0,k.getMonthDays)({year:e,month:a}),e=Math.ceil((r+t)/7),a=Math.ceil((n+r)/7)-1;return[a,(0,s.mul)(a,(0,s.div)(i.Layout.layout.mainHeight,e))]}}exports.PanelTool=t;