import { extend, warn, isObject, isFunction } from 'core/util/index' import VNode from 'core/vdom/vnode' /** * Runtime helper for rendering */ export function renderSlot( name: string, fallbackRender: ((() => Array) | Array) | null, props: Record | null, bindObject: object | null ): Array | null { const scopedSlotFn = this.$scopedSlots[name] let nodes if (scopedSlotFn) { // scoped slot props = props || {} if (bindObject) { if (__DEV__ && !isObject(bindObject)) { warn('slot v-bind without argument expects an Object', this) } props = extend(extend({}, bindObject), props) } nodes = scopedSlotFn(props) || (isFunction(fallbackRender) ? fallbackRender() : fallbackRender) } else { nodes = this.$slots[name] || (isFunction(fallbackRender) ? fallbackRender() : fallbackRender) } const target = props && props.slot if (target) { return this.$createElement('template', { slot: target }, nodes) } else { return nodes } }