meta.tsx 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import React, { PureComponent } from 'react';
  2. import PropTypes from 'prop-types';
  3. import { cssClasses } from '@douyinfe/semi-foundation/card/constants';
  4. import cls from 'classnames';
  5. const prefixcls = cssClasses.PREFIX;
  6. export type Shadows = 'hover' | 'show';
  7. export interface MetaProps {
  8. /** Avatar */
  9. avatar?: React.ReactNode;
  10. /** Style class name */
  11. className?: string;
  12. /** Description */
  13. description?: React.ReactNode;
  14. /** Inline style */
  15. style?: React.CSSProperties;
  16. /** Title */
  17. title?: React.ReactNode;
  18. }
  19. class Meta extends PureComponent<MetaProps> {
  20. static propTypes = {
  21. avatar: PropTypes.node,
  22. className: PropTypes.string,
  23. description: PropTypes.node,
  24. style: PropTypes.object,
  25. title: PropTypes.node
  26. };
  27. render() {
  28. const {
  29. avatar,
  30. className,
  31. description,
  32. style,
  33. title,
  34. ...others
  35. } = this.props;
  36. const metaCls = cls(`${prefixcls}-meta`, className);
  37. const avatarNode = avatar && (
  38. <div className={`${prefixcls}-meta-avatar`}>
  39. {avatar}
  40. </div>
  41. );
  42. const titleNode = title && (
  43. <div className={`${prefixcls}-meta-wrapper-title`}>
  44. {title}
  45. </div>
  46. );
  47. const descriptionNode = description && (
  48. <div className={`${prefixcls}-meta-wrapper-description`}>
  49. {description}
  50. </div>
  51. );
  52. const wrapper = title || description ? (
  53. <div className={`${prefixcls}-meta-wrapper`}>
  54. {titleNode}
  55. {descriptionNode}
  56. </div>
  57. ) : null;
  58. return (
  59. <div {...others} className={metaCls} style={style}>
  60. {avatarNode}
  61. {wrapper}
  62. </div>
  63. );
  64. }
  65. }
  66. export default Meta;