diff --git a/app/javascript/mastodon/components/column_header.tsx b/app/javascript/mastodon/components/column_header.tsx index 3a8d245b2..da80a8647 100644 --- a/app/javascript/mastodon/components/column_header.tsx +++ b/app/javascript/mastodon/components/column_header.tsx @@ -18,7 +18,7 @@ import { useIdentity } from 'mastodon/identity_context'; import { useAppHistory } from './router'; -const messages = defineMessages({ +export const messages = defineMessages({ show: { id: 'column_header.show_settings', defaultMessage: 'Show settings' }, hide: { id: 'column_header.hide_settings', defaultMessage: 'Hide settings' }, moveLeft: { diff --git a/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.jsx b/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.jsx deleted file mode 100644 index 276bcbeba..000000000 --- a/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.jsx +++ /dev/null @@ -1,53 +0,0 @@ -import PropTypes from 'prop-types'; -import { PureComponent } from 'react'; - -import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; - -import { connect } from 'react-redux'; - -import SettingsIcon from '@/material-icons/400-20px/settings.svg?react'; -import CloseIcon from '@/material-icons/400-24px/close.svg?react'; -import { requestBrowserPermission } from 'mastodon/actions/notifications'; -import { changeSetting } from 'mastodon/actions/settings'; -import { Button } from 'mastodon/components/button'; -import { Icon } from 'mastodon/components/icon'; -import { IconButton } from 'mastodon/components/icon_button'; - -const messages = defineMessages({ - close: { id: 'lightbox.close', defaultMessage: 'Close' }, -}); - -class NotificationsPermissionBanner extends PureComponent { - - static propTypes = { - dispatch: PropTypes.func.isRequired, - intl: PropTypes.object.isRequired, - }; - - handleClick = () => { - this.props.dispatch(requestBrowserPermission()); - }; - - handleClose = () => { - this.props.dispatch(changeSetting(['notifications', 'dismissPermissionBanner'], true)); - }; - - render () { - const { intl } = this.props; - - return ( -
-
- -
- -

-

}} />

- -
- ); - } - -} - -export default connect()(injectIntl(NotificationsPermissionBanner)); diff --git a/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.tsx b/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.tsx new file mode 100644 index 000000000..c46178645 --- /dev/null +++ b/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.tsx @@ -0,0 +1,74 @@ +import { useCallback } from 'react'; + +import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; + +import { useAppDispatch } from '@/mastodon/store'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; +import UnfoldMoreIcon from '@/material-icons/400-24px/unfold_more.svg?react'; +import { requestBrowserPermission } from 'mastodon/actions/notifications'; +import { changeSetting } from 'mastodon/actions/settings'; +import { Button } from 'mastodon/components/button'; +import { messages as columnHeaderMessages } from 'mastodon/components/column_header'; +import { Icon } from 'mastodon/components/icon'; +import { IconButton } from 'mastodon/components/icon_button'; + +const messages = defineMessages({ + close: { id: 'lightbox.close', defaultMessage: 'Close' }, +}); + +const NotificationsPermissionBanner: React.FC = () => { + const intl = useIntl(); + const dispatch = useAppDispatch(); + + const handleClick = useCallback(() => { + dispatch(requestBrowserPermission()); + }, [dispatch]); + + const handleClose = useCallback(() => { + dispatch(changeSetting(['notifications', 'dismissPermissionBanner'], true)); + }, [dispatch]); + + return ( +
+
+ +
+ +

+ +

+

+ + ), + }} + /> +

+ +
+ ); +}; + +// eslint-disable-next-line import/no-default-export +export default NotificationsPermissionBanner;