index.js 3.62 KB
'use strict';

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.CommentProps = undefined;

var _babelHelperVueJsxMergeProps = require('babel-helper-vue-jsx-merge-props');

var _babelHelperVueJsxMergeProps2 = _interopRequireDefault(_babelHelperVueJsxMergeProps);

var _vueTypes = require('../_util/vue-types');

var _vueTypes2 = _interopRequireDefault(_vueTypes);

var _propsUtil = require('../_util/props-util');

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

var CommentProps = exports.CommentProps = {
  actions: _vueTypes2['default'].array,
  /** The element to display as the comment author. */
  author: _vueTypes2['default'].any,
  /** The element to display as the comment avatar - generally an antd Avatar */
  avatar: _vueTypes2['default'].any,
  /** The main content of the comment */
  content: _vueTypes2['default'].any,
  /** Comment prefix defaults to '.ant-comment' */
  prefixCls: _vueTypes2['default'].string,
  /** A datetime element containing the time to be displayed */
  datetime: _vueTypes2['default'].any
};

var Comment = {
  name: 'AComment',
  props: (0, _propsUtil.initDefaultProps)(CommentProps, {
    prefixCls: 'ant-comment'
  }),
  methods: {
    getAction: function getAction(actions) {
      var h = this.$createElement;

      if (!actions || !actions.length) {
        return null;
      }
      var actionList = actions.map(function (action, index) {
        return h(
          'li',
          { key: 'action-' + index },
          [action]
        );
      });
      return actionList;
    },
    renderNested: function renderNested(children) {
      var h = this.$createElement;
      var prefixCls = this.$props.prefixCls;


      return h(
        'div',
        { 'class': prefixCls + '-nested' },
        [children]
      );
    }
  },

  render: function render() {
    var h = arguments[0];
    var prefixCls = this.$props.prefixCls;


    var actions = (0, _propsUtil.getComponentFromProp)(this, 'actions');
    var author = (0, _propsUtil.getComponentFromProp)(this, 'author');
    var avatar = (0, _propsUtil.getComponentFromProp)(this, 'avatar');
    var content = (0, _propsUtil.getComponentFromProp)(this, 'content');
    var datetime = (0, _propsUtil.getComponentFromProp)(this, 'datetime');

    var avatarDom = h(
      'div',
      { 'class': prefixCls + '-avatar' },
      [typeof avatar === 'string' ? h('img', {
        attrs: { src: avatar }
      }) : avatar]
    );

    var actionDom = actions && actions.length ? h(
      'ul',
      { 'class': prefixCls + '-actions' },
      [this.getAction(actions)]
    ) : null;

    var authorContent = h(
      'div',
      { 'class': prefixCls + '-content-author' },
      [author && h(
        'span',
        { 'class': prefixCls + '-content-author-name' },
        [author]
      ), datetime && h(
        'span',
        { 'class': prefixCls + '-content-author-time' },
        [datetime]
      )]
    );

    var contentDom = h(
      'div',
      { 'class': prefixCls + '-content' },
      [authorContent, h(
        'div',
        { 'class': prefixCls + '-content-detail' },
        [content]
      ), actionDom]
    );

    var comment = h(
      'div',
      { 'class': prefixCls + '-inner' },
      [avatarDom, contentDom]
    );
    var children = this.$slots['default'];
    return h(
      'div',
      (0, _babelHelperVueJsxMergeProps2['default'])([{ 'class': prefixCls }, { on: this.$listeners }]),
      [comment, children ? this.renderNested(children) : null]
    );
  }
};

/* istanbul ignore next */
Comment.install = function (Vue) {
  Vue.component(Comment.name, Comment);
};
exports['default'] = Comment;