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; 
 |