diff --git a/mock/notices.js b/mock/notices.js index 76ab162e249eecd4c2dc6a371d89ab6aa7e8adf3..505088e0da17ba556961e2d1f3ed1159d561cae2 100644 --- a/mock/notices.js +++ b/mock/notices.js @@ -43,6 +43,7 @@ const getNotices = (req, res) => description: '描述信息描述信息描述信息', datetime: '2017-08-07', type: 'message', + clickClose: true, }, { id: '000000007', @@ -51,6 +52,7 @@ const getNotices = (req, res) => description: '这种模板用于提醒谁与你发生了互动,左侧放『谁』的头像', datetime: '2017-08-07', type: 'message', + clickClose: true, }, { id: '000000008', @@ -59,6 +61,7 @@ const getNotices = (req, res) => description: '这种模板用于提醒谁与你发生了互动,左侧放『谁』的头像', datetime: '2017-08-07', type: 'message', + clickClose: true, }, { id: '000000009', diff --git a/src/components/GlobalHeader/RightContent.js b/src/components/GlobalHeader/RightContent.js index 45bb2042932051934dac418dfe3cc91039100819..260f38b1fceba7f6936f064b31f0ee004a8bf4dc 100644 --- a/src/components/GlobalHeader/RightContent.js +++ b/src/components/GlobalHeader/RightContent.js @@ -116,6 +116,7 @@ export default class GlobalHeaderRight extends PureComponent { onPopupVisibleChange={onNoticeVisibleChange} loading={fetchingNotices} popupAlign={{ offset: [20, -16] }} + clearClose > void; popupVisible?: boolean; locale?: { emptyText: string; clear: string }; + clearClose?: boolean; } export default class NoticeIcon extends React.Component { diff --git a/src/components/NoticeIcon/index.js b/src/components/NoticeIcon/index.js index 61f56b92506602146df249891a66e842641d5271..284bde72c804ba9b02c3dc832e637e6ebe3ebe67 100644 --- a/src/components/NoticeIcon/index.js +++ b/src/components/NoticeIcon/index.js @@ -1,4 +1,5 @@ import React, { PureComponent } from 'react'; +import ReactDOM from 'react-dom'; import { Popover, Icon, Tabs, Badge, Spin } from 'antd'; import classNames from 'classnames'; import List from './NoticeList'; @@ -15,6 +16,7 @@ export default class NoticeIcon extends PureComponent { onTabChange: () => {}, onClear: () => {}, loading: false, + clearClose: false, locale: { emptyText: 'No notifications', clear: 'Clear', @@ -24,16 +26,28 @@ export default class NoticeIcon extends PureComponent { onItemClick = (item, tabProps) => { const { onItemClick } = this.props; + const { clickClose } = item; onItemClick(item, tabProps); + if (clickClose) { + this.popover.click(); + } }; + onClear = (name) => { + const { onClear, clearClose } = this.props; + onClear(name) + if (clearClose) { + this.popover.click(); + } + } + onTabChange = tabType => { const { onTabChange } = this.props; onTabChange(tabType); }; getNotificationBox() { - const { children, loading, locale, onClear } = this.props; + const { children, loading, locale } = this.props; if (!children) { return null; } @@ -48,7 +62,7 @@ export default class NoticeIcon extends PureComponent { {...child.props} data={child.props.list} onClick={item => this.onItemClick(item, child.props)} - onClear={() => onClear(child.props.name)} + onClear={() => this.onClear(child.props.name)} title={child.props.title} locale={locale} /> @@ -93,6 +107,7 @@ export default class NoticeIcon extends PureComponent { popupAlign={popupAlign} onVisibleChange={onPopupVisibleChange} {...popoverProps} + ref={node => { this.popover = ReactDOM.findDOMNode(node)}} // eslint-disable-line > {trigger}