| /* |
| * MIT License |
| |
| * Copyright (c) 2019 Alipay.inc |
| |
| * Permission is hereby granted, free of charge, to any person obtaining a copy |
| * of this software and associated documentation files (the "Software"), to deal |
| * in the Software without restriction, including without limitation the rights |
| * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
| * copies of the Software, and to permit persons to whom the Software is |
| * furnished to do so, subject to the following conditions: |
| |
| * The above copyright notice and this permission notice shall be included in all |
| * copies or substantial portions of the Software. |
| |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
| * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
| * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
| * SOFTWARE. |
| */ |
| import { Avatar, List } from 'antd'; |
| import classNames from 'classnames'; |
| import React from 'react'; |
| |
| import styles from './NoticeList.less'; |
| |
| export type NoticeIconTabProps = { |
| count?: number; |
| name?: string; |
| showClear?: boolean; |
| showViewMore?: boolean; |
| style?: React.CSSProperties; |
| title: string; |
| tabKey: string; |
| data?: API.NoticeIconData[]; |
| onClick?: (item: API.NoticeIconData) => void; |
| onClear?: () => void; |
| emptyText?: string; |
| clearText?: string; |
| viewMoreText?: string; |
| list: API.NoticeIconData[]; |
| onViewMore?: (e: any) => void; |
| }; |
| const NoticeList: React.SFC<NoticeIconTabProps> = ({ |
| data = [], |
| onClick, |
| onClear, |
| title, |
| onViewMore, |
| emptyText, |
| showClear = true, |
| clearText, |
| viewMoreText, |
| showViewMore = false, |
| }) => { |
| if (data.length === 0) { |
| return ( |
| <div className={styles.notFound}> |
| <img |
| src="https://gw.alipayobjects.com/zos/rmsportal/sAuJeJzSKbUmHfBQRzmZ.svg" |
| alt="not found" |
| /> |
| <div>{emptyText}</div> |
| </div> |
| ); |
| } |
| return ( |
| <div> |
| <List<API.NoticeIconData> |
| className={styles.list} |
| dataSource={data} |
| renderItem={(item, i) => { |
| const itemCls = classNames(styles.item, { |
| [styles.read]: item.read, |
| }); |
| // eslint-disable-next-line no-nested-ternary |
| const leftIcon = item.avatar ? ( |
| typeof item.avatar === 'string' ? ( |
| <Avatar className={styles.avatar} src={item.avatar} /> |
| ) : ( |
| <span className={styles.iconElement}>{item.avatar}</span> |
| ) |
| ) : null; |
| |
| return ( |
| <List.Item |
| className={itemCls} |
| key={item.key || i} |
| onClick={() => onClick && onClick(item)} |
| > |
| <List.Item.Meta |
| className={styles.meta} |
| avatar={leftIcon} |
| title={ |
| <div className={styles.title}> |
| {item.title} |
| <div className={styles.extra}>{item.extra}</div> |
| </div> |
| } |
| description={ |
| <div> |
| <div className={styles.description}>{item.description}</div> |
| <div className={styles.datetime}>{item.datetime}</div> |
| </div> |
| } |
| /> |
| </List.Item> |
| ); |
| }} |
| /> |
| <div className={styles.bottomBar}> |
| {showClear ? ( |
| <div onClick={onClear}> |
| {clearText} {title} |
| </div> |
| ) : null} |
| {showViewMore ? ( |
| <div |
| onClick={(e) => { |
| if (onViewMore) { |
| onViewMore(e); |
| } |
| }} |
| > |
| {viewMoreText} |
| </div> |
| ) : null} |
| </div> |
| </div> |
| ); |
| }; |
| |
| export default NoticeList; |