35 lines
914 B
Vue
35 lines
914 B
Vue
|
import { defineComponent, ref, watchEffect } from 'vue';
|
||
|
import { collapsePanelProps } from './commonProps';
|
||
|
import classNames from '../_util/classNames';
|
||
|
|
||
|
export default defineComponent({
|
||
|
name: 'PanelContent',
|
||
|
props: collapsePanelProps(),
|
||
|
setup(props, { slots }) {
|
||
|
const rendered = ref(false);
|
||
|
|
||
|
watchEffect(() => {
|
||
|
if (props.isActive || props.forceRender) {
|
||
|
rendered.value = true;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
return () => {
|
||
|
if (!rendered.value) return null;
|
||
|
const { prefixCls, isActive, role } = props;
|
||
|
return (
|
||
|
<div
|
||
|
ref={ref}
|
||
|
class={classNames(`${prefixCls}-content`, {
|
||
|
[`${prefixCls}-content-active`]: isActive,
|
||
|
[`${prefixCls}-content-inactive`]: !isActive,
|
||
|
})}
|
||
|
role={role}
|
||
|
>
|
||
|
<div class={`${prefixCls}-content-box`}>{slots.default?.()}</div>
|
||
|
</div>
|
||
|
);
|
||
|
};
|
||
|
},
|
||
|
});
|