1 |
- "use strict";var _baseComponent=_interopRequireDefault(require("../helpers/baseComponent")),_classNames=_interopRequireDefault(require("../helpers/libs/classNames")),_styleToCssString=_interopRequireDefault(require("../helpers/libs/styleToCssString")),_debounce=require("../helpers/shared/debounce"),_useDOM=require("../helpers/hooks/useDOM"),_utils=require("./utils");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ownKeys(t,e){var n,r=Object.keys(t);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(t),e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)),r}function _objectSpread(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?ownKeys(Object(n),!0).forEach(function(e){_defineProperty(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ownKeys(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function _defineProperty(e,t,n){return(t=_toPropertyKey(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _toPropertyKey(e){e=_toPrimitive(e,"string");return"symbol"==_typeof(e)?e:String(e)}function _toPrimitive(e,t){if("object"!=_typeof(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0===n)return("string"===t?String:Number)(e);n=n.call(e,t||"default");if("object"!=_typeof(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}(0,_baseComponent.default)({relations:{"../virtual-item/index":{type:"descendant",observer:function(){this.callDebounceFn(this.updated)}}},properties:{prefixCls:{type:String,value:"wux-virtual-list"},itemHeight:{type:Number,value:50},itemBuffer:{type:Number,value:0},scrollToIndex:{type:Number,value:0},upperThreshold:{type:Number,value:50},lowerThreshold:{type:Number,value:50},scrollWithAnimation:{type:Boolean,value:!1},enableBackToTop:{type:Boolean,value:!1},disableScroll:{type:Boolean,value:!1},enablePageScroll:{type:Boolean,value:!1},height:{type:Number,value:300},debounce:{type:Number,value:0}},data:{wrapStyle:"",scrollOffset:0,innerScrollOffset:0,startIndex:0,endIndex:-1},computed:{classes:["prefixCls",function(e){return{wrap:(0,_classNames.default)(e),mask:"".concat(e,"__mask"),scrollView:"".concat(e,"__scroll-view"),scrollArea:"".concat(e,"__scroll-area")}}]},observers:_defineProperty(_defineProperty({itemHeight:function(e){this.updated(e)},height:function(e){this.updatedStyle(e)},debounce:function(e){this.setScrollHandler(e)}},"enablePageScroll, height, itemHeight, itemBuffer",function(){this.firstRendered&&this.onChange(this.data.scrollOffset,!0)}),"scrollToIndex",function(e){this.firstRendered&&this.scrollToIndex(e)}),methods:{updated:function(){var n=0<arguments.length&&void 0!==arguments[0]?arguments[0]:this.data.itemHeight,r=this.data.startIndex,e=this.getRelationsByName("../virtual-item/index");0<e.length&&e.forEach(function(e,t){e.updated(r+t,n)})},updatedStyle:function(e){this.setValue((0,_styleToCssString.default)({height:e}),"wrapStyle")},setValue:function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:"scrollOffset";this.data[t]===e&&!(2<arguments.length?arguments[2]:void 0)||this.setData(_defineProperty({},t,e))},loadData:function(e){var t=this,n=this.data,r=n.itemHeight,i=n.startIndex,o=n.endIndex,s=n.scrollOffset,n={items:this.items,itemHeight:r},l={startIndex:i,endIndex:o},a=(0,_utils.mapVirtualToProps)(n,l);this.setData(a,function(){"function"==typeof e&&e.call(t,_objectSpread(_objectSpread(_objectSpread({},a),l),{},{scrollOffset:s}))})},onChange:function(t,n,r){var i=this,e=this.data,o=e.itemHeight,s=e.height,l=e.itemBuffer,a=e.startIndex,u=e.endIndex,c=e.offsetTop,e=e.enablePageScroll,d=Math.max(0,this.items.length-1),e=t-(e?c:0),c=(0,_utils.getVisibleItemBounds)(e,s,d,o,l),d=c.startIndex!==a||c.endIndex!==u,f=t>this.data.scrollOffset?"Down":"Up";void 0===c||c.startIndex>c.endIndex||((d&&("Up"==f&&e<a*o||"Down"==f&&u*o-s<e)||n)&&this.setData(c,function(){i.loadData(function(e){n&&i.setValue(t,"innerScrollOffset",!0),i.triggerEvent("change",_objectSpread(_objectSpread({},e),{},{direction:f,scrollOffset:t})),"function"==typeof r&&r.call(i,_objectSpread(_objectSpread({},e),{},{direction:f,scrollOffset:t}))})}),this.setValue(t))},onScroll:function(e){this.onChange(e.detail.scrollTop),this.triggerEvent("scroll",e.detail)},onScrollToUpper:function(e){this.triggerEvent("scrolltoupper",e.detail)},onScrollToLower:function(e){this.triggerEvent("scrolltolower",e.detail)},getOffsetForIndex:function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:this.data.itemHeight,n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:this.items.length;return Math.max(0,Math.min(e,n-1))*t},render:function(e,t){var n=this,r=this.data.scrollOffset;Array.isArray(e)&&(this.items=e),this.firstRendered||(this.firstRendered=!0,r=this.getOffsetForIndex(this.data.scrollToIndex)),this.getBoundingClientRect(function(){return n.onChange(r,!0,t)})},scrollTo:function(e,t){"number"==typeof e&&(e=Math.max(0,Math.min(e,this.items.length*this.data.itemHeight)),this.onChange(e,!0,t))},scrollToIndex:function(e,t){"number"==typeof e&&this.onChange(this.getOffsetForIndex(e),!0,t)},setScrollHandler:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:this.data.debounce;this.scrollHandler=e?(0,_debounce.debounce)(this.onScroll.bind(this),e,{leading:!0,maxWait:e,trailing:!0}):this.onScroll},noop:function(){},getBoundingClientRect:function(t,e){var n=this;void 0===this.data.offsetTop||e?(0,_useDOM.useRect)(".".concat(this.data.prefixCls),this).then(function(e){e&&n.setData({offsetTop:e.top},t)}):t.call(this)}},created:function(){this.items=[],this.firstRendered=!1},ready:function(){var e=this.data,t=e.height,e=e.debounce;this.updatedStyle(t),this.setScrollHandler(e),this.getBoundingClientRect(),this.loadData()}});
|