/**
 * Allow to wrap a component with a list of components + props. This is a render
 * function instead of a template to avoid extra div and improve performances.
 */
export default {
  name: 'RecursiveWrapper',
  functional: true,
  props: {
    components: {
      type: Array,
      required: true,
    },
    firstComponentClass: { type: String, required: false, default: null },
  },
  render(h, context) {
    const rec = ([first, ...rest], firstComponentClass = null) => {
      if (first) {
        return h(
          first.component,
          { props: first.props, class: firstComponentClass },
          rec(rest)
        )
      } else {
        return context.slots().default
      }
    }

    return rec(context.props.components, context.props.firstComponentClass)
  },
}