UNPKG

@lspriv/wc-plugin-multiple

Version:

小程序日历组件多选插件

2 lines (1 loc) 5.14 kB
"use strict";var t=require("@lspriv/wx-calendar/lib");const e=e=>[...e].map((t=>{const[e,s,i]=t.split("-");return{year:+e,month:+s,day:+i}})).sort(((e,s)=>t.timestamp(e)-t.timestamp(s)));class s{constructor(t){this._range_=[],this.options=this.formOptions(t),this.checked=new Set,this.formBaseStyle()}formOptions(t){return{type:(null==t?void 0:t.type)||"range",bgColor:(null==t?void 0:t.bgColor)||{light:"#409EFF",dark:"#409EFF"},textColor:(null==t?void 0:t.textColor)||{light:"#FFF",dark:"#E5E5E5"},borderRadius:(null==t?void 0:t.borderRadius)||50}}formBaseStyle(){const e=t.themeStyle(this.options.textColor);this.baseStyle={"--wc-date-color":e,"--wc-solar-color":e,"--wc-mark-color":e,"--wc-dot-color":e,"--wc-today-color":e,backgroundColor:t.themeStyle(this.options.bgColor),borderRadius:this.options.borderRadius,overflow:"hidden",transition:"background-color .3s ease"}}PLUGIN_INITIALIZE(t){this.service=t}PLUGIN_ON_ATTACH(e,s){s.pointer&&(s.pointer.show=!1);let i=s.areaHideCls||"";i=t.addLayoutHideCls(i,"subinfo"),i=t.addLayoutHideCls(i,"today"),s.areaHideCls=i,e.component._pointer_.show=!1,e.component._printer_.renderCheckedBg=!1}PLUGIN_CATCH_TAP(t){t.component._pointer_.show=!1}PLUGIN_ON_CLICK(t,s){const{year:i,month:a,day:o}=s.checked,h=`${i}-${a}-${o}`,r=[];"multi"===this.options.type?this.checked.has(h)?(this.dispatchSet("delete",h),r.push({year:i,month:a,day:o})):this.dispatchSet("add",h):((this.checked.has(h)||2===this.checked.size)&&(r.push(...e(this.checked)),this.dispatchSet("clear"),this.emitChange([])),this.dispatchSet("add",h));const n=e(this.checked);"multi"!==this.options.type&&2!==this.checked.size||this.emitChange(n),this.updateDates([r,n])}PLUGIN_TRACK_DATE(e){let s=null;if(!this.checked.size)return null;const i=`${e.year}-${e.month}-${e.day}`;if("multi"===this.options.type)this.checked.has(i)&&(s={style:{...this.baseStyle,width:"100rpx"}});else if(1===this.checked.size)this.checked.has(i)&&(s={style:{...this.baseStyle}});else{const i=t.timestamp(e);if(i<this._range_[0]||i>this._range_[1])return null;s={style:{...this.baseStyle}};const a=this.options.borderRadius;i===this._range_[0]?s.style.borderRadius=`${a}rpx 0 0 ${a}rpx`:i===this._range_[1]?s.style.borderRadius=`0 ${a}rpx ${a}rpx 0`:s.style.borderRadius="0"}return s}PLUGIN_TRACK_YEAR(e){const s=new Map;for(let i=0;i<12;i++){const a=1===i&&t.isLeapYear(e.year)?t.GREGORIAN_MONTH_DAYS[i]+1:t.GREGORIAN_MONTH_DAYS[i];for(let o=0;o<a;o++){const a={year:e.year,month:i+1,day:o+1},h=`${e.year}-${a.month}-${a.day}`,r=t.getAnnualMarkKey({month:a.month,day:a.day});if("multi"===this.options.type){if(this.checked.has(h)){const t={},e=this.options.borderRadius;t.style={color:{...this.options.textColor},bgColor:{...this.options.bgColor},bgTLRadius:{light:e,dark:e},bgTRRadius:{light:e,dark:e},bgBLRadius:{light:e,dark:e},bgBRRadius:{light:e,dark:e}},s.set(r,t)}}else{const e=t.timestamp(a);if(e>=this._range_[0]&&e<=this._range_[1]){const t={},i=this.options.borderRadius;t.style={color:{...this.options.textColor},bgColor:{...this.options.bgColor},bgWidth:{light:"dateCol",dark:"dateCol"}},e===this._range_[0]?(t.style.bgTLRadius={light:i,dark:i},t.style.bgBLRadius={light:i,dark:i}):e===this._range_[1]&&(t.style.bgTRRadius={light:i,dark:i},t.style.bgBRRadius={light:i,dark:i}),s.set(r,t)}}}}return s.size?{marks:s}:null}PLUGIN_ON_CHANGE(t,e,s){s.cancel()}select(t,s=!1){if("multi"===this.options.type){let i=[];s&&(i=[...this.checked],this.dispatchSet("clear"));const a=t.map((t=>`${t.year}-${t.month}-${t.day}`));this.checked=new Set([...this.checked,...a]);const o=e(this.checked);this.emitChange(o),this.updateDates([e(new Set([...i,...a]))])}else{if(1===t.length)throw new Error("参数[dates]数组长度不合法");const s=[...e(this.checked)];if(this.dispatchSet("clear"),t.length){const i=t[0],a=t[1];this.dispatchSet("add",`${i.year}-${i.month}-${i.day}`),this.dispatchSet("add",`${a.year}-${a.month}-${a.day}`);const o=e(this.checked);this.emitChange(o),this.updateDates([s,o])}else this.emitChange([]),this.updateDates([s])}}dispatchSet(t,e){"add"===t?this.checked.add(e):"delete"===t?this.checked.delete(e):"clear"===t&&this.checked.clear(),"range"===this.options.type&&this.updatePluginRange()}updatePluginRange(){this._range_=[...this.checked].map((e=>{const[s,i,a]=e.split("-");return t.timestamp({year:+s,month:+i,day:+a})})).sort()}emitChange(t){this.service.component.triggerEvent("change",{checked:t,validDates:this.filterDates(t)})}updateDates(t){if("multi"===this.options.type){const e=t.flatMap((t=>t)),s=[...new Set(e.map((t=>t.year)))];this.service.updateDates(e),this.service.updateAnnuals(s)}else{const e=t.filter((t=>t.length)),s=[...new Set(e.flatMap((t=>{if(t.length>1){const e=[];for(let s=t[0].year;s<=t[1].year;s++)e.push(s);return e}return t[0].year})))];this.service.updateRange(e),this.service.updateAnnuals(s)}}filterDates(t){if(!t.length)return[];let e="multi"===this.options.type?t:[[t[0],t[1]]];return this.service.traversePlugins((t=>{t.PLUGIN_DATES_FILTER&&(e=t.PLUGIN_DATES_FILTER(this.service,e))})),e}}s.KEY="wc-plugin-multiple";const i=s.KEY;exports.MULTI_PLUGIN_KEY=i,exports.MultiPlugin=s;