item.tsx 2.3 KB

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