@ -4,7 +4,6 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
import { FormattedMessage } from 'react-intl' ;
import ClearColumnButton from './clear_column_button' ;
import SettingToggle from './setting_toggle' ;
import Icon from 'mastodon/components/icon' ;
export default class ColumnSettings extends React . PureComponent {
@ -13,7 +12,7 @@ export default class ColumnSettings extends React.PureComponent {
pushSettings : ImmutablePropTypes . map . isRequired ,
onChange : PropTypes . func . isRequired ,
onClear : PropTypes . func . isRequired ,
onRequestNotificationPermission : PropTypes . func .isRequired ,
onRequestNotificationPermission : PropTypes . func ,
alertsEnabled : PropTypes . bool ,
browserSupport : PropTypes . bool ,
browserPermission : PropTypes . bool ,
@ -24,7 +23,7 @@ export default class ColumnSettings extends React.PureComponent {
}
render ( ) {
const { settings , pushSettings , onChange , onClear , onRequestNotificationPermission, alertsEnabled, browserSupport , browserPermission } = this . props ;
const { settings , pushSettings , onChange , onClear , alertsEnabled, browserSupport , browserPermission } = this . props ;
const filterShowStr = < FormattedMessage id = 'notifications.column_settings.filter_bar.show' defaultMessage = 'Show' / > ;
const filterAdvancedStr = < FormattedMessage id = 'notifications.column_settings.filter_bar.advanced' defaultMessage = 'Display all categories' / > ;
@ -35,37 +34,11 @@ export default class ColumnSettings extends React.PureComponent {
const showPushSettings = pushSettings . get ( 'browserSupport' ) && pushSettings . get ( 'isSubscribed' ) ;
const pushStr = showPushSettings && < FormattedMessage id = 'notifications.column_settings.push' defaultMessage = 'Push notifications' / > ;
const settingsIssues = [ ] ;
if ( alertsEnabled && browserSupport && browserPermission !== 'granted' ) {
if ( browserPermission === 'denied' ) {
settingsIssues . push (
< button
className = 'text-btn column-header__issue-btn'
tabIndex = '0'
onClick = { onRequestNotificationPermission }
>
< Icon id = 'exclamation-circle' / > < FormattedMessage id = 'notifications.permission_denied' defaultMessage = 'Mastodon cannot show notifications because the permission has been denied' / >
< / b u t t o n >
) ;
} else if ( browserPermission === 'default' ) {
settingsIssues . push (
< button
className = 'text-btn column-header__issue-btn'
tabIndex = '0'
onClick = { onRequestNotificationPermission }
>
< Icon id = 'exclamation-circle' / > < FormattedMessage id = 'notifications.request_permission' defaultMessage = 'Enable browser notifications' / >
< / b u t t o n >
) ;
}
}
return (
< div >
{ settingsIssues && (
< div className = 'column-settings__row '>
{ settingsIssues }
{ alertsEnabled && browserSupport && browserPermission === 'denied' && (
< div className = 'column-settings__row column-settings__row--with-margin' >
< span className = 'warning-hint' > < FormattedMessage id = 'notifications.permission_denied' defaultMessage = 'Desktop notifications are unavailable due to previously denied browser permissions request' / > < / s p a n >
< / d i v >
) }
@ -77,6 +50,7 @@ export default class ColumnSettings extends React.PureComponent {
< span id = 'notifications-filter-bar' className = 'column-settings__section' >
< FormattedMessage id = 'notifications.column_settings.filter_bar.category' defaultMessage = 'Quick filter bar' / >
< / s p a n >
< div className = 'column-settings__row' >
< SettingToggle id = 'show-filter-bar' prefix = 'notifications' settings = { settings } settingPath = { [ 'quickFilter' , 'show' ] } onChange = { onChange } label = { filterShowStr } / >
< SettingToggle id = 'show-filter-bar' prefix = 'notifications' settings = { settings } settingPath = { [ 'quickFilter' , 'advanced' ] } onChange = { onChange } label = { filterAdvancedStr } / >
@ -87,7 +61,7 @@ export default class ColumnSettings extends React.PureComponent {
< span id = 'notifications-follow' className = 'column-settings__section' > < FormattedMessage id = 'notifications.column_settings.follow' defaultMessage = 'New followers:' / > < / s p a n >
< div className = 'column-settings__row' >
< SettingToggle prefix= 'notifications_desktop' settings = { settings } settingPath = { [ 'alerts' , 'follow' ] } onChange = { onChange } label = { alertStr } / >
< SettingToggle disabled= { browserPermission !== 'granted' } prefix= 'notifications_desktop' settings = { settings } settingPath = { [ 'alerts' , 'follow' ] } onChange = { onChange } label = { alertStr } / >
{ showPushSettings && < SettingToggle prefix = 'notifications_push' settings = { pushSettings } settingPath = { [ 'alerts' , 'follow' ] } onChange = { this . onPushChange } label = { pushStr } / > }
< SettingToggle prefix = 'notifications' settings = { settings } settingPath = { [ 'shows' , 'follow' ] } onChange = { onChange } label = { showStr } / >
< SettingToggle prefix = 'notifications' settings = { settings } settingPath = { [ 'sounds' , 'follow' ] } onChange = { onChange } label = { soundStr } / >
@ -98,7 +72,7 @@ export default class ColumnSettings extends React.PureComponent {
< span id = 'notifications-follow-request' className = 'column-settings__section' > < FormattedMessage id = 'notifications.column_settings.follow_request' defaultMessage = 'New follow requests:' / > < / s p a n >
< div className = 'column-settings__row' >
< SettingToggle prefix= 'notifications_desktop' settings = { settings } settingPath = { [ 'alerts' , 'follow_request' ] } onChange = { onChange } label = { alertStr } / >
< SettingToggle disabled= { browserPermission !== 'granted' } prefix= 'notifications_desktop' settings = { settings } settingPath = { [ 'alerts' , 'follow_request' ] } onChange = { onChange } label = { alertStr } / >
{ showPushSettings && < SettingToggle prefix = 'notifications_push' settings = { pushSettings } settingPath = { [ 'alerts' , 'follow_request' ] } onChange = { this . onPushChange } label = { pushStr } / > }
< SettingToggle prefix = 'notifications' settings = { settings } settingPath = { [ 'shows' , 'follow_request' ] } onChange = { onChange } label = { showStr } / >
< SettingToggle prefix = 'notifications' settings = { settings } settingPath = { [ 'sounds' , 'follow_request' ] } onChange = { onChange } label = { soundStr } / >
@ -109,7 +83,7 @@ export default class ColumnSettings extends React.PureComponent {
< span id = 'notifications-favourite' className = 'column-settings__section' > < FormattedMessage id = 'notifications.column_settings.favourite' defaultMessage = 'Favourites:' / > < / s p a n >
< div className = 'column-settings__row' >
< SettingToggle prefix= 'notifications_desktop' settings = { settings } settingPath = { [ 'alerts' , 'favourite' ] } onChange = { onChange } label = { alertStr } / >
< SettingToggle disabled= { browserPermission !== 'granted' } prefix= 'notifications_desktop' settings = { settings } settingPath = { [ 'alerts' , 'favourite' ] } onChange = { onChange } label = { alertStr } / >
{ showPushSettings && < SettingToggle prefix = 'notifications_push' settings = { pushSettings } settingPath = { [ 'alerts' , 'favourite' ] } onChange = { this . onPushChange } label = { pushStr } / > }
< SettingToggle prefix = 'notifications' settings = { settings } settingPath = { [ 'shows' , 'favourite' ] } onChange = { onChange } label = { showStr } / >
< SettingToggle prefix = 'notifications' settings = { settings } settingPath = { [ 'sounds' , 'favourite' ] } onChange = { onChange } label = { soundStr } / >
@ -120,7 +94,7 @@ export default class ColumnSettings extends React.PureComponent {
< span id = 'notifications-mention' className = 'column-settings__section' > < FormattedMessage id = 'notifications.column_settings.mention' defaultMessage = 'Mentions:' / > < / s p a n >
< div className = 'column-settings__row' >
< SettingToggle prefix= 'notifications_desktop' settings = { settings } settingPath = { [ 'alerts' , 'mention' ] } onChange = { onChange } label = { alertStr } / >
< SettingToggle disabled= { browserPermission !== 'granted' } prefix= 'notifications_desktop' settings = { settings } settingPath = { [ 'alerts' , 'mention' ] } onChange = { onChange } label = { alertStr } / >
{ showPushSettings && < SettingToggle prefix = 'notifications_push' settings = { pushSettings } settingPath = { [ 'alerts' , 'mention' ] } onChange = { this . onPushChange } label = { pushStr } / > }
< SettingToggle prefix = 'notifications' settings = { settings } settingPath = { [ 'shows' , 'mention' ] } onChange = { onChange } label = { showStr } / >
< SettingToggle prefix = 'notifications' settings = { settings } settingPath = { [ 'sounds' , 'mention' ] } onChange = { onChange } label = { soundStr } / >
@ -131,7 +105,7 @@ export default class ColumnSettings extends React.PureComponent {
< span id = 'notifications-reblog' className = 'column-settings__section' > < FormattedMessage id = 'notifications.column_settings.reblog' defaultMessage = 'Boosts:' / > < / s p a n >
< div className = 'column-settings__row' >
< SettingToggle prefix= 'notifications_desktop' settings = { settings } settingPath = { [ 'alerts' , 'reblog' ] } onChange = { onChange } label = { alertStr } / >
< SettingToggle disabled= { browserPermission !== 'granted' } prefix= 'notifications_desktop' settings = { settings } settingPath = { [ 'alerts' , 'reblog' ] } onChange = { onChange } label = { alertStr } / >
{ showPushSettings && < SettingToggle prefix = 'notifications_push' settings = { pushSettings } settingPath = { [ 'alerts' , 'reblog' ] } onChange = { this . onPushChange } label = { pushStr } / > }
< SettingToggle prefix = 'notifications' settings = { settings } settingPath = { [ 'shows' , 'reblog' ] } onChange = { onChange } label = { showStr } / >
< SettingToggle prefix = 'notifications' settings = { settings } settingPath = { [ 'sounds' , 'reblog' ] } onChange = { onChange } label = { soundStr } / >
@ -142,12 +116,23 @@ export default class ColumnSettings extends React.PureComponent {
< span id = 'notifications-poll' className = 'column-settings__section' > < FormattedMessage id = 'notifications.column_settings.poll' defaultMessage = 'Poll results:' / > < / s p a n >
< div className = 'column-settings__row' >
< SettingToggle prefix= 'notifications_desktop' settings = { settings } settingPath = { [ 'alerts' , 'poll' ] } onChange = { onChange } label = { alertStr } / >
< SettingToggle disabled= { browserPermission !== 'granted' } prefix= 'notifications_desktop' settings = { settings } settingPath = { [ 'alerts' , 'poll' ] } onChange = { onChange } label = { alertStr } / >
{ showPushSettings && < SettingToggle prefix = 'notifications_push' settings = { pushSettings } settingPath = { [ 'alerts' , 'poll' ] } onChange = { this . onPushChange } label = { pushStr } / > }
< SettingToggle prefix = 'notifications' settings = { settings } settingPath = { [ 'shows' , 'poll' ] } onChange = { onChange } label = { showStr } / >
< SettingToggle prefix = 'notifications' settings = { settings } settingPath = { [ 'sounds' , 'poll' ] } onChange = { onChange } label = { soundStr } / >
< / d i v >
< / d i v >
< div role = 'group' aria - labelledby = 'notifications-status' >
< span id = 'notifications-status' className = 'column-settings__section' > < FormattedMessage id = 'notifications.column_settings.status' defaultMessage = 'New toots:' / > < / s p a n >
< div className = 'column-settings__row' >
< SettingToggle disabled = { browserPermission !== 'granted' } prefix = 'notifications_desktop' settings = { settings } settingPath = { [ 'alerts' , 'status' ] } onChange = { onChange } label = { alertStr } / >
{ showPushSettings && < SettingToggle prefix = 'notifications_push' settings = { pushSettings } settingPath = { [ 'alerts' , 'status' ] } onChange = { this . onPushChange } label = { pushStr } / > }
< SettingToggle prefix = 'notifications' settings = { settings } settingPath = { [ 'shows' , 'status' ] } onChange = { onChange } label = { showStr } / >
< SettingToggle prefix = 'notifications' settings = { settings } settingPath = { [ 'sounds' , 'status' ] } onChange = { onChange } label = { soundStr } / >
< / d i v >
< / d i v >
< / d i v >
) ;
}