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