item.tsx 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import React, { PureComponent } from 'react';
  2. import PropTypes from 'prop-types';
  3. import { cssClasses } from '@douyinfe/semi-foundation/descriptions/constants';
  4. import '@douyinfe/semi-foundation/descriptions/descriptions.scss';
  5. import DescriptionsContext from './descriptions-context';
  6. export interface DescriptionsItemProps {
  7. hidden?: boolean;
  8. className?: string;
  9. style?: React.CSSProperties;
  10. itemKey: string | number;
  11. }
  12. const prefixCls = cssClasses.PREFIX;
  13. const keyCls = `${prefixCls}-key`;
  14. const valCls = `${prefixCls}-value`;
  15. export default class Item extends PureComponent<DescriptionsItemProps> {
  16. static propTypes = {
  17. itemKey: PropTypes.node,
  18. hidden: PropTypes.bool,
  19. className: PropTypes.string,
  20. style: PropTypes.object
  21. };
  22. static contextType = DescriptionsContext;
  23. render() {
  24. const { itemKey, hidden, className, style, children } = this.props;
  25. const { align } = this.context;
  26. if (hidden) {
  27. return null;
  28. }
  29. const item = align === 'plain' ?
  30. (
  31. <tr className={className} style={style}>
  32. <td className={`${prefixCls}-item`}>
  33. <span className={keyCls}>
  34. {`${itemKey}:`}
  35. </span>
  36. <span className={valCls}>
  37. {typeof children === 'function' ? children() : children}
  38. </span>
  39. </td>
  40. </tr>
  41. ) :
  42. (
  43. <tr className={className} style={style}>
  44. <th className={`${prefixCls}-item ${prefixCls}-item-th`}>
  45. <span className={keyCls}>
  46. {itemKey}
  47. </span>
  48. </th>
  49. <td className={`${prefixCls}-item ${prefixCls}-item-td`}>
  50. <span className={valCls}>
  51. {typeof children === 'function' ? children() : children}
  52. </span>
  53. </td>
  54. </tr>
  55. );
  56. return item;
  57. }
  58. }