UNPKG

@usj/vue-components

Version:

VueJS components used internally by USJ

72 lines (59 loc) 1.73 kB
import UsjListItemButton from './usjListItemButton.vue' import UsjListItemLink from './usjListItemLink.vue' import UsjListItemRouter from './usjListItemRouter.vue' import usjListItemExpand from './usjListItemExpand.vue' import UsjListItemDefault from './usjListItemDefault.vue' export default { functional: true, props: { href: String, disabled: Boolean }, render(createElement, { children, data, props }) { const getItemComponent = () => { const on = data.on const interactionEvents = [ 'contextmenu', 'dblclick', 'dragend', 'mousedown', 'touchstart', 'click' ] let childrenCount = children.length if (props.href) { return UsjListItemLink } if (on) { let counter = interactionEvents.length while (counter--) { if (on[interactionEvents[counter]]) { return UsjListItemButton } } } while (childrenCount--) { const options = children[childrenCount].componentOptions if (options) { if (options.tag === 'usj-list-expand') { const expandComponent = children[childrenCount] data.scopedSlots = { expand: () => expandComponent } children.splice(childrenCount, 1) return usjListItemExpand } else if (options.tag === 'router-link') { children[childrenCount].data.staticClass = 'usj-list-item-container' return UsjListItemRouter } } } return UsjListItemDefault } return createElement( getItemComponent(), Object.assign({ props }, data), children ) } }