2023-05-24 00:15:17 +09:00
import PropTypes from 'prop-types' ;
2023-05-23 17:52:27 +09:00
import { PureComponent } from 'react' ;
2023-05-24 00:15:17 +09:00
import { defineMessages , injectIntl , FormattedMessage } from 'react-intl' ;
import { connect } from 'react-redux' ;
2024-01-13 05:16:48 +09:00
import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react' ;
import TuneIcon from 'mastodon/../material-icons/400-24px/tune.svg?react' ;
2020-12-16 02:43:54 +09:00
import { requestBrowserPermission } from 'mastodon/actions/notifications' ;
import { changeSetting } from 'mastodon/actions/settings' ;
2023-10-23 16:43:00 +09:00
import { Button } from 'mastodon/components/button' ;
2023-05-24 00:15:17 +09:00
import { Icon } from 'mastodon/components/icon' ;
import { IconButton } from 'mastodon/components/icon_button' ;
2020-10-15 23:24:47 +09:00
2020-11-11 13:36:29 +09:00
const messages = defineMessages ( {
close : { id : 'lightbox.close' , defaultMessage : 'Close' } ,
} ) ;
2023-05-23 17:52:27 +09:00
class NotificationsPermissionBanner extends PureComponent {
2020-10-15 23:24:47 +09:00
static propTypes = {
dispatch : PropTypes . func . isRequired ,
2020-11-11 13:36:29 +09:00
intl : PropTypes . object . isRequired ,
2020-10-15 23:24:47 +09:00
} ;
handleClick = ( ) => {
this . props . dispatch ( requestBrowserPermission ( ) ) ;
2023-01-30 09:45:35 +09:00
} ;
2020-10-15 23:24:47 +09:00
2020-11-11 13:36:29 +09:00
handleClose = ( ) => {
2020-12-16 02:43:54 +09:00
this . props . dispatch ( changeSetting ( [ 'notifications' , 'dismissPermissionBanner' ] , true ) ) ;
2023-01-30 09:45:35 +09:00
} ;
2020-11-11 13:36:29 +09:00
2020-10-15 23:24:47 +09:00
render ( ) {
2020-11-11 13:36:29 +09:00
const { intl } = this . props ;
2020-10-15 23:24:47 +09:00
return (
< div className = 'notifications-permission-banner' >
2020-11-11 13:36:29 +09:00
< div className = 'notifications-permission-banner__close' >
2023-10-25 02:45:08 +09:00
< IconButton icon = 'times' iconComponent = { CloseIcon } onClick = { this . handleClose } title = { intl . formatMessage ( messages . close ) } / >
2020-11-11 13:36:29 +09:00
< / div >
2020-10-15 23:24:47 +09:00
< h2 > < FormattedMessage id = 'notifications_permission_banner.title' defaultMessage = 'Never miss a thing' / > < / h2 >
2023-10-25 02:45:08 +09:00
< 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' icon = { TuneIcon } / > } } / > < / p >
2020-10-15 23:24:47 +09:00
< Button onClick = { this . handleClick } > < FormattedMessage id = 'notifications_permission_banner.enable' defaultMessage = 'Enable desktop notifications' / > < / Button >
< / div >
) ;
}
}
2023-03-24 11:17:53 +09:00
export default connect ( ) ( injectIntl ( NotificationsPermissionBanner ) ) ;