2020-10-15 14:24:47 +00:00
import React from 'react' ;
import Icon from 'mastodon/components/icon' ;
import Button from 'mastodon/components/button' ;
2020-11-11 04:36:29 +00:00
import IconButton from 'mastodon/components/icon_button' ;
2020-12-15 17:43:54 +00:00
import { requestBrowserPermission } from 'mastodon/actions/notifications' ;
import { changeSetting } from 'mastodon/actions/settings' ;
2020-10-15 14:24:47 +00:00
import { connect } from 'react-redux' ;
import PropTypes from 'prop-types' ;
2020-11-11 04:36:29 +00:00
import { defineMessages , injectIntl , FormattedMessage } from 'react-intl' ;
2020-10-15 14:24:47 +00:00
2020-11-11 04:36:29 +00:00
const messages = defineMessages ( {
close : { id : 'lightbox.close' , defaultMessage : 'Close' } ,
} ) ;
export default @ connect ( )
@ injectIntl
2020-10-15 14:24:47 +00:00
class NotificationsPermissionBanner extends React . PureComponent {
static propTypes = {
dispatch : PropTypes . func . isRequired ,
2020-11-11 04:36:29 +00:00
intl : PropTypes . object . isRequired ,
2020-10-15 14:24:47 +00:00
} ;
handleClick = ( ) => {
this . props . dispatch ( requestBrowserPermission ( ) ) ;
}
2020-11-11 04:36:29 +00:00
handleClose = ( ) => {
2020-12-15 17:43:54 +00:00
this . props . dispatch ( changeSetting ( [ 'notifications' , 'dismissPermissionBanner' ] , true ) ) ;
2020-11-11 04:36:29 +00:00
}
2020-10-15 14:24:47 +00:00
render ( ) {
2020-11-11 04:36:29 +00:00
const { intl } = this . props ;
2020-10-15 14:24:47 +00:00
return (
< div className = 'notifications-permission-banner' >
2020-11-11 04:36:29 +00:00
< div className = 'notifications-permission-banner__close' >
< IconButton icon = 'times' onClick = { this . handleClose } title = { intl . formatMessage ( messages . close ) } / >
< / d i v >
2020-10-15 14:24:47 +00:00
< h2 > < FormattedMessage id = 'notifications_permission_banner.title' defaultMessage = 'Never miss a thing' / > < / h 2 >
< p > < FormattedMessage id = 'notifications_permission_banner.how_to_control' defaultMessage = "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled." values = { { icon : < Icon id = 'sliders' / > } } / > < / p >
< Button onClick = { this . handleClick } > < FormattedMessage id = 'notifications_permission_banner.enable' defaultMessage = 'Enable desktop notifications' / > < / B u t t o n >
< / d i v >
) ;
}
}