NoticeList.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import React from 'react';
  2. import { Avatar, List } from 'antd';
  3. import classNames from 'classnames';
  4. import styles from './NoticeList.less';
  5. export default function NoticeList({
  6. data = [], onClick, onClear, title, locale, emptyText, emptyImage,
  7. }) {
  8. if (data.length === 0) {
  9. return (
  10. <div className={styles.notFound}>
  11. {emptyImage ? (
  12. <img src={emptyImage} alt="not found" />
  13. ) : null}
  14. <div>{emptyText || locale.emptyText}</div>
  15. </div>
  16. );
  17. }
  18. return (
  19. <div>
  20. <List className={styles.list}>
  21. {data.map((item, i) => {
  22. const itemCls = classNames(styles.item, {
  23. [styles.read]: item.read,
  24. });
  25. return (
  26. <List.Item className={itemCls} key={item.key || i} onClick={() => onClick(item)}>
  27. <List.Item.Meta
  28. className={styles.meta}
  29. avatar={item.avatar ? <Avatar className={styles.avatar} src={item.avatar} /> : null}
  30. title={
  31. <div className={styles.title}>
  32. {item.title}
  33. <div className={styles.extra}>{item.extra}</div>
  34. </div>
  35. }
  36. description={
  37. <div>
  38. <div className={styles.description} title={item.description}>
  39. {item.description}
  40. </div>
  41. <div className={styles.datetime}>{item.datetime}</div>
  42. </div>
  43. }
  44. />
  45. </List.Item>
  46. );
  47. })}
  48. </List>
  49. <div className={styles.clear} onClick={onClear}>
  50. {locale.clear}{title}
  51. </div>
  52. </div>
  53. );
  54. }