| var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { | 
|     var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; | 
|     if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); | 
|     else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; | 
|     return c > 3 && r && Object.defineProperty(target, key, r), r; | 
| }; | 
| import { SuperComponent, wxComponent } from '../common/src/index'; | 
| import config from '../common/config'; | 
| import props from './props'; | 
| import { unitConvert } from '../common/utils'; | 
| const { prefix } = config; | 
| const name = `${prefix}-pull-down-refresh`; | 
| let PullDownRefresh = class PullDownRefresh extends SuperComponent { | 
|     constructor() { | 
|         super(...arguments); | 
|         this.pixelRatio = 1; | 
|         this.startPoint = null; | 
|         this.isPulling = false; | 
|         this.loadingBarHeight = 100; | 
|         this.maxRefreshAnimateTimeFlag = 0; | 
|         this.closingAnimateTimeFlag = 0; | 
|         this.externalClasses = [`${prefix}-class`, `${prefix}-class-loading`, `${prefix}-class-text`, `${prefix}-class-indicator`]; | 
|         this.options = { | 
|             multipleSlots: true, | 
|         }; | 
|         this.relations = { | 
|             '../back-top/back-top': { | 
|                 type: 'descendant', | 
|             }, | 
|         }; | 
|         this.properties = props; | 
|         this.data = { | 
|             prefix, | 
|             classPrefix: name, | 
|             barHeight: 0, | 
|             refreshStatus: -1, | 
|             loosing: false, | 
|             enableToRefresh: true, | 
|             scrollTop: 0, | 
|         }; | 
|         this.lifetimes = { | 
|             attached() { | 
|                 const { screenWidth } = wx.getSystemInfoSync(); | 
|                 const { loadingBarHeight, loadingTexts } = this.properties; | 
|                 this.setData({ | 
|                     loadingTexts: Array.isArray(loadingTexts) && loadingTexts.length >= 4 | 
|                         ? loadingTexts | 
|                         : ['下拉刷新', '松手刷新', '正在刷新', '刷新完成'], | 
|                 }); | 
|                 this.pixelRatio = 750 / screenWidth; | 
|                 Object.defineProperty(this, 'maxBarHeight', { | 
|                     get() { | 
|                         return unitConvert(this.data.maxBarHeight); | 
|                     }, | 
|                 }); | 
|                 Object.defineProperty(this, 'loadingBarHeight', { | 
|                     get() { | 
|                         return unitConvert(this.data.loadingBarHeight); | 
|                     }, | 
|                 }); | 
|                 if (loadingBarHeight) { | 
|                     this.setData({ | 
|                         computedLoadingBarHeight: unitConvert(loadingBarHeight), | 
|                     }); | 
|                 } | 
|             }, | 
|             detached() { | 
|                 clearTimeout(this.maxRefreshAnimateTimeFlag); | 
|                 clearTimeout(this.closingAnimateTimeFlag); | 
|             }, | 
|         }; | 
|         this.observers = { | 
|             value(val) { | 
|                 if (!val) { | 
|                     clearTimeout(this.maxRefreshAnimateTimeFlag); | 
|                     if (this.data.refreshStatus > 0) { | 
|                         this.setData({ | 
|                             refreshStatus: 3, | 
|                         }); | 
|                     } | 
|                     this.setData({ barHeight: 0 }); | 
|                 } | 
|                 else { | 
|                     this.doRefresh(); | 
|                 } | 
|             }, | 
|         }; | 
|         this.methods = { | 
|             onScrollToBottom() { | 
|                 this.triggerEvent('scrolltolower'); | 
|             }, | 
|             onScrollToTop() { | 
|                 this.setData({ | 
|                     enableToRefresh: true, | 
|                 }); | 
|             }, | 
|             onScroll(e) { | 
|                 const { scrollTop } = e.detail; | 
|                 this.setData({ | 
|                     enableToRefresh: scrollTop === 0, | 
|                 }); | 
|                 this.triggerEvent('scroll', { scrollTop }); | 
|             }, | 
|             onTouchStart(e) { | 
|                 if (this.isPulling || !this.data.enableToRefresh) | 
|                     return; | 
|                 const { touches } = e; | 
|                 if (touches.length !== 1) | 
|                     return; | 
|                 const { pageX, pageY } = touches[0]; | 
|                 this.setData({ loosing: false }); | 
|                 this.startPoint = { pageX, pageY }; | 
|                 this.isPulling = true; | 
|             }, | 
|             onTouchMove(e) { | 
|                 if (!this.startPoint) | 
|                     return; | 
|                 const { touches } = e; | 
|                 if (touches.length !== 1) | 
|                     return; | 
|                 const { pageY } = touches[0]; | 
|                 const offset = pageY - this.startPoint.pageY; | 
|                 if (offset > 0) { | 
|                     this.setRefreshBarHeight(offset); | 
|                 } | 
|             }, | 
|             onTouchEnd(e) { | 
|                 if (!this.startPoint) | 
|                     return; | 
|                 const { changedTouches } = e; | 
|                 if (changedTouches.length !== 1) | 
|                     return; | 
|                 const { pageY } = changedTouches[0]; | 
|                 const barHeight = pageY - this.startPoint.pageY; | 
|                 this.startPoint = null; | 
|                 this.isPulling = false; | 
|                 this.setData({ loosing: true }); | 
|                 if (barHeight > this.loadingBarHeight) { | 
|                     this._trigger('change', { value: true }); | 
|                     this.triggerEvent('refresh'); | 
|                 } | 
|                 else { | 
|                     this.setData({ barHeight: 0 }); | 
|                 } | 
|             }, | 
|             doRefresh() { | 
|                 this.setData({ | 
|                     barHeight: this.loadingBarHeight, | 
|                     refreshStatus: 2, | 
|                     loosing: true, | 
|                 }); | 
|                 this.maxRefreshAnimateTimeFlag = setTimeout(() => { | 
|                     this.maxRefreshAnimateTimeFlag = null; | 
|                     if (this.data.refreshStatus === 2) { | 
|                         this.triggerEvent('timeout'); | 
|                         this._trigger('change', { value: false }); | 
|                     } | 
|                 }, this.properties.refreshTimeout); | 
|             }, | 
|             setRefreshBarHeight(value) { | 
|                 const barHeight = Math.min(value, this.maxBarHeight); | 
|                 const data = { barHeight }; | 
|                 if (barHeight >= this.loadingBarHeight) { | 
|                     data.refreshStatus = 1; | 
|                 } | 
|                 else { | 
|                     data.refreshStatus = 0; | 
|                 } | 
|                 return new Promise((resolve) => { | 
|                     this.setData(data, () => resolve(barHeight)); | 
|                 }); | 
|             }, | 
|             setScrollTop(scrollTop) { | 
|                 this.setData({ scrollTop }); | 
|             }, | 
|             scrollToTop() { | 
|                 this.setScrollTop(0); | 
|             }, | 
|         }; | 
|     } | 
| }; | 
| PullDownRefresh = __decorate([ | 
|     wxComponent() | 
| ], PullDownRefresh); | 
| export default PullDownRefresh; |