import PanelContent from './PanelContent'; import { initDefaultProps, getComponent, getSlot } from '../../_util/props-util'; import { panelProps } from './commonProps'; import { defineComponent } from 'vue'; import BaseMixin from '../../_util/BaseMixin'; import Transition from '../../_util/transition'; export default defineComponent({ name: 'Panel', mixins: [BaseMixin], props: initDefaultProps(panelProps(), { showArrow: true, isActive: false, destroyInactivePanel: false, headerClass: '', forceRender: false, }), methods: { handleItemClick() { this.__emit('itemClick', this.panelKey); }, handleKeyPress(e) { if (e.key === 'Enter' || e.keyCode === 13 || e.which === 13) { this.handleItemClick(); } }, }, render() { const { prefixCls, headerClass, isActive, showArrow, destroyInactivePanel, disabled, openAnimation, accordion, forceRender, expandIcon, extra, } = this.$props; const transitionProps = { appear: true, css: false, ...openAnimation, }; const headerCls = { [`${prefixCls}-header`]: true, [headerClass]: headerClass, }; const header = getComponent(this, 'header'); const itemCls = { [`${prefixCls}-item`]: true, [`${prefixCls}-item-active`]: isActive, [`${prefixCls}-item-disabled`]: disabled, }; let icon = ; if (showArrow && typeof expandIcon === 'function') { icon = expandIcon(this.$props); } const panelContent = ( {getSlot(this)} ); return (
{showArrow && icon} {header} {extra &&
{extra}
}
{panelContent}
); }, });