import { createNamespace } from '../utils'; import Cell from '../cell'; import Icon from '../icon'; import Popup from '../popup'; import { ChildrenMixin } from '../mixins/relation'; const [createComponent, bem] = createNamespace('dropdown-item'); export default createComponent({ mixins: [ChildrenMixin('vanDropdownMenu')], props: { value: null, title: String, disabled: Boolean, titleClass: String, options: { type: Array, default: () => [] } }, data() { return { transition: true, showPopup: false, showWrapper: false }; }, computed: { displayTitle() { if (this.title) { return this.title; } const match = this.options.filter(option => option.value === this.value); return match.length ? match[0].text : ''; } }, methods: { toggle(show = !this.showPopup, options = {}) { if (show === this.showPopup) { return; } this.transition = !options.immediate; this.showPopup = show; if (show) { this.parent.updateOffset(); this.showWrapper = true; } } }, beforeCreate() { const createEmitter = eventName => () => this.$emit(eventName); this.onOpen = createEmitter('open'); this.onClose = createEmitter('close'); this.onOpened = createEmitter('opened'); }, render(h) { const { zIndex, offset, overlay, duration, direction, activeColor, closeOnClickOverlay } = this.parent; const Options = this.options.map(option => { const active = option.value === this.value; return ( { this.showPopup = false; if (option.value !== this.value) { this.$emit('input', option.value); this.$emit('change', option.value); } }} > {active && } ); }); const style = { zIndex }; if (direction === 'down') { style.top = `${offset}px`; } else { style.bottom = `${offset}px`; } return (
{ this.showWrapper = false; this.$emit('closed'); }} > {Options} {this.slots('default')}
); } });