import Vue from 'vue' import filter from 'lodash/filter' import isEmpty from 'lodash/isEmpty' import { getComponentProps } from '../../services/component_utils/component_utils' import './with_load_more.scss' const withLoadMore = ({ fetch, // function to fetch entries and return a promise select, // function to select data from store destroy, // function called at "destroyed" lifecycle childPropName = 'entries', // name of the prop to be passed into the wrapped component additionalPropNames = [] // additional prop name list of the wrapper component }) => (WrappedComponent) => { const originalProps = Object.keys(getComponentProps(WrappedComponent)) const props = filter(originalProps, v => v !== childPropName).concat(additionalPropNames) return Vue.component('withLoadMore', { render (createElement) { const props = { props: { ...this.$props, [childPropName]: this.entries }, on: this.$listeners, scopedSlots: this.$scopedSlots } const children = Object.entries(this.$slots).map(([key, value]) => createElement('template', { slot: key }, value)) return (