import PropsTypes from '../_util/vue-types' import { initDefaultProps, getComponentFromProp } from '../_util/props-util' import classNames from 'classnames' export const CommentProps = { actions: PropsTypes.array, /** The element to display as the comment author. */ author: PropsTypes.any, /** The element to display as the comment avatar - generally an antd Avatar */ avatar: PropsTypes.any, /** The main content of the comment */ content: PropsTypes.any, /** Comment prefix defaults to '.ant-comment' */ prefixCls: PropsTypes.string, /** A datetime element containing the time to be displayed */ datetime: PropsTypes.any, } const Comment = { name: 'AComment', props: initDefaultProps(CommentProps, { prefixCls: 'ant-comment', }), methods: { getAction (actions) { if (!actions || !actions.length) { return null } const actionList = actions.map((action, index) => <li key={`action-${index}`}>{action}</li>) return actionList }, renderNested (children) { const { prefixCls } = this.$props return <div class={`${prefixCls}-nested`}>{children}</div> }, }, render () { const { prefixCls, } = this.$props const actions = getComponentFromProp(this, 'actions') const author = getComponentFromProp(this, 'author') const avatar = getComponentFromProp(this, 'avatar') const content = getComponentFromProp(this, 'content') const datetime = getComponentFromProp(this, 'datetime') const avatarDom = ( <div class={`${prefixCls}-avatar`}> {typeof avatar === 'string' ? <img src={avatar} /> : avatar} </div> ) const actionDom = actions && actions.length ? ( <ul class={`${prefixCls}-actions`}>{this.getAction(actions)}</ul> ) : null const authorContent = ( <div class={`${prefixCls}-content-author`}> {author && <span class={`${prefixCls}-content-author-name`}>{author}</span>} {datetime && <span class={`${prefixCls}-content-author-time`}>{datetime}</span>} </div> ) const contentDom = ( <div class={`${prefixCls}-content`}> {authorContent} <div class={`${prefixCls}-content-detail`}>{content}</div> {actionDom} </div> ) const comment = ( <div class={`${prefixCls}-inner`}> {avatarDom} {contentDom} </div> ) const children = this.$slots.default return ( <div class={prefixCls} {...{ on: this.$listeners }}> {comment} {children ? this.renderNested(children) : null} </div> ) }, } /* istanbul ignore next */ Comment.install = function (Vue) { Vue.component(Comment.name, Comment) } export default Comment