NoticeList.jsx 2.4KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import { Avatar, List } from 'antd';
  2. import React from 'react';
  3. import classNames from 'classnames';
  4. import styles from './NoticeList.less';
  5. const NoticeList = ({
  6. data = [],
  7. onClick,
  8. onClear,
  9. title,
  10. onViewMore,
  11. emptyText,
  12. showClear = true,
  13. clearText,
  14. viewMoreText,
  15. showViewMore = false,
  16. }) => {
  17. if (!data || data.length === 0) {
  18. return (
  19. <div className={styles.notFound}>
  20. <img
  21. src="https://gw.alipayobjects.com/zos/rmsportal/sAuJeJzSKbUmHfBQRzmZ.svg"
  22. alt="not found"
  23. />
  24. <div>{emptyText}</div>
  25. </div>
  26. );
  27. }
  28. return (
  29. <div>
  30. <List
  31. className={styles.list}
  32. dataSource={data}
  33. renderItem={(item, i) => {
  34. const itemCls = classNames(styles.item, {
  35. [styles.read]: item.read,
  36. });
  37. // eslint-disable-next-line no-nested-ternary
  38. const leftIcon = item.avatar ? (
  39. typeof item.avatar === 'string' ? (
  40. <Avatar className={styles.avatar} src={item.avatar} />
  41. ) : (
  42. <span className={styles.iconElement}>{item.avatar}</span>
  43. )
  44. ) : null;
  45. return (
  46. <List.Item
  47. className={itemCls}
  48. key={item.key || i}
  49. onClick={() => {
  50. onClick?.(item);
  51. }}
  52. >
  53. <List.Item.Meta
  54. className={styles.meta}
  55. avatar={leftIcon}
  56. title={
  57. <div className={styles.title}>
  58. {item.title}
  59. <div className={styles.extra}>{item.extra}</div>
  60. </div>
  61. }
  62. description={
  63. <div>
  64. <div className={styles.description}>{item.description}</div>
  65. <div className={styles.datetime}>{item.datetime}</div>
  66. </div>
  67. }
  68. />
  69. </List.Item>
  70. );
  71. }}
  72. />
  73. <div className={styles.bottomBar}>
  74. {showClear ? (
  75. <div onClick={onClear}>
  76. {clearText} {title}
  77. </div>
  78. ) : null}
  79. {showViewMore ? (
  80. <div
  81. onClick={(e) => {
  82. if (onViewMore) {
  83. onViewMore(e);
  84. }
  85. }}
  86. >
  87. {viewMoreText}
  88. </div>
  89. ) : null}
  90. </div>
  91. </div>
  92. );
  93. };
  94. export default NoticeList;