diff --git a/app/javascript/flavours/glitch/features/ui/components/favourite_modal.jsx b/app/javascript/flavours/glitch/features/ui/components/favourite_modal.jsx
deleted file mode 100644
index 138f44f21c..0000000000
--- a/app/javascript/flavours/glitch/features/ui/components/favourite_modal.jsx
+++ /dev/null
@@ -1,92 +0,0 @@
-import PropTypes from 'prop-types';
-
-import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
-
-import classNames from 'classnames';
-import { withRouter } from 'react-router-dom';
-
-import ImmutablePropTypes from 'react-immutable-proptypes';
-import ImmutablePureComponent from 'react-immutable-pure-component';
-
-import StarIcon from '@/material-icons/400-24px/star-fill.svg?react';
-import AttachmentList from 'flavours/glitch/components/attachment_list';
-import { Avatar } from 'flavours/glitch/components/avatar';
-import { Button } from 'flavours/glitch/components/button';
-import { DisplayName } from 'flavours/glitch/components/display_name';
-import { Icon } from 'flavours/glitch/components/icon';
-import { RelativeTimestamp } from 'flavours/glitch/components/relative_timestamp';
-import StatusContent from 'flavours/glitch/components/status_content';
-import { VisibilityIcon } from 'flavours/glitch/components/visibility_icon';
-import { WithRouterPropTypes } from 'flavours/glitch/utils/react_router';
-
-const messages = defineMessages({
- favourite: { id: 'status.favourite', defaultMessage: 'Favorite' },
-});
-
-class FavouriteModal extends ImmutablePureComponent {
-
- static propTypes = {
- status: ImmutablePropTypes.map.isRequired,
- onFavourite: PropTypes.func.isRequired,
- onClose: PropTypes.func.isRequired,
- intl: PropTypes.object.isRequired,
- ...WithRouterPropTypes,
- };
-
- handleFavourite = () => {
- this.props.onFavourite(this.props.status);
- this.props.onClose();
- };
-
- handleAccountClick = (e) => {
- if (e.button === 0) {
- e.preventDefault();
- this.props.onClose();
- this.props.history.push(`/@${this.props.status.getIn(['account', 'acct'])}`);
- }
- };
-
- render () {
- const { status, intl } = this.props;
-
- return (
-
-
-
-
-
-
-
- {status.get('media_attachments').size > 0 && (
-
- )}
-
-
-
-
-
- );
- }
-
-}
-
-export default withRouter(injectIntl(FavouriteModal));
diff --git a/app/javascript/flavours/glitch/features/ui/components/favourite_modal.tsx b/app/javascript/flavours/glitch/features/ui/components/favourite_modal.tsx
new file mode 100644
index 0000000000..88d8bb91b8
--- /dev/null
+++ b/app/javascript/flavours/glitch/features/ui/components/favourite_modal.tsx
@@ -0,0 +1,90 @@
+import { useCallback } from 'react';
+
+import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
+
+import classNames from 'classnames';
+
+import StarIcon from '@/material-icons/400-24px/star.svg?react';
+import { Button } from 'flavours/glitch/components/button';
+import { Icon } from 'flavours/glitch/components/icon';
+import { EmbeddedStatus } from 'flavours/glitch/features/notifications_v2/components/embedded_status';
+import type { Status } from 'flavours/glitch/models/status';
+
+const messages = defineMessages({
+ favourite: { id: 'status.favourite', defaultMessage: 'Favorite' },
+});
+
+export const FavouriteModal: React.FC<{
+ status: Status;
+ onClose: () => void;
+ onFavourite: (status: Status) => void;
+}> = ({ status, onFavourite, onClose }) => {
+ const intl = useIntl();
+
+ const statusId = status.get('id') as string;
+
+ const handleFavourite = useCallback(() => {
+ onFavourite(status);
+ onClose();
+ }, [onClose, onFavourite, status]);
+
+ const handleCancel = useCallback(() => {
+ onClose();
+ }, [onClose]);
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Shift+
+
+ ),
+ }}
+ />
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
diff --git a/app/javascript/flavours/glitch/features/ui/components/modal_root.jsx b/app/javascript/flavours/glitch/features/ui/components/modal_root.jsx
index 64c6b52c31..83345905be 100644
--- a/app/javascript/flavours/glitch/features/ui/components/modal_root.jsx
+++ b/app/javascript/flavours/glitch/features/ui/components/modal_root.jsx
@@ -41,7 +41,7 @@ import {
} from './confirmation_modals';
import DeprecatedSettingsModal from './deprecated_settings_modal';
import DoodleModal from './doodle_modal';
-import FavouriteModal from './favourite_modal';
+import { FavouriteModal } from './favourite_modal';
import FocalPointModal from './focal_point_modal';
import ImageModal from './image_modal';
import MediaModal from './media_modal';
diff --git a/app/javascript/flavours/glitch/locales/en.json b/app/javascript/flavours/glitch/locales/en.json
index 3faf16c335..3b0439e7ed 100644
--- a/app/javascript/flavours/glitch/locales/en.json
+++ b/app/javascript/flavours/glitch/locales/en.json
@@ -36,7 +36,7 @@
"confirmations.missing_media_description.message": "At least one media attachment is lacking a description. Consider describing all media attachments for the visually impaired before sending your toot.",
"direct.group_by_conversations": "Group by conversation",
"endorsed_accounts_editor.endorsed_accounts": "Featured accounts",
- "favourite_modal.combo": "You can press {combo} to skip this next time",
+ "favourite_modal.favourite": "Favourite post?",
"federation.federated.long": "Allow this post to reach other servers",
"federation.federated.short": "Federated",
"federation.local_only.long": "Prevent this post from reaching other servers",