import raf from '../_util/raf'; import ListItem from './ListItem'; import PropTypes from '../_util/vue-types'; import getTransitionProps from '../_util/getTransitionProps'; function noop() {} const ListBody = { name: 'ListBody', inheritAttrs: false, props: { prefixCls: PropTypes.string, filteredRenderItems: PropTypes.array.def([]), lazy: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]), selectedKeys: PropTypes.array, disabled: PropTypes.bool, }, data() { return { mounted: false, }; }, computed: { itemsLength() { return this.filteredRenderItems ? this.filteredRenderItems.length : 0; }, }, watch: { itemsLength() { this.$nextTick(() => { const { lazy } = this.$props; if (lazy !== false) { const container = this.$el; raf.cancel(this.lazyId); this.lazyId = raf(() => { if (container) { const scrollEvent = new Event('scroll', { bubbles: true }); container.dispatchEvent(scrollEvent); } }); } }); }, }, mounted() { this.mountId = raf(() => { this.mounted = true; }); }, beforeDestroy() { raf.cancel(this.mountId); raf.cancel(this.lazyId); }, methods: { onItemSelect(item) { const { selectedKeys } = this.$props; const checked = selectedKeys.indexOf(item.key) >= 0; this.$emit('itemSelect', item.key, !checked); }, onScroll(e) { this.$emit('scroll', e); }, }, render() { const { mounted } = this.$data; const { prefixCls, filteredRenderItems, lazy, selectedKeys, disabled: globalDisabled, } = this.$props; const items = filteredRenderItems.map(({ renderedEl, renderedText, item }) => { const { disabled } = item; const checked = selectedKeys.indexOf(item.key) >= 0; return ( ); }); const transitionProps = getTransitionProps( mounted ? `${prefixCls}-content-item-highlight` : '', { tag: 'ul', nativeOn: { scroll: this.onScroll, }, leave: noop, }, ); return ( {items} ); }, }; export default (h, props) => ;