diff --git a/src/components/status-action-bar.tsx b/src/components/status-action-bar.tsx index 31136b4d9..c15ac3eeb 100644 --- a/src/components/status-action-bar.tsx +++ b/src/components/status-action-bar.tsx @@ -38,6 +38,8 @@ const messages = defineMessages({ blockAndReport: { id: 'confirmations.block.block_and_report', defaultMessage: 'Block & Report' }, blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' }, bookmark: { id: 'status.bookmark', defaultMessage: 'Bookmark' }, + bookmarkSetFolder: { id: 'status.bookmark_folder', defaultMessage: 'Set bookmark folder' }, + bookmarkChangeFolder: { id: 'status.bookmark_folder_change', defaultMessage: 'Change bookmark folder' }, cancel_reblog_private: { id: 'status.cancel_reblog_private', defaultMessage: 'Un-repost' }, cannot_reblog: { id: 'status.cannot_reblog', defaultMessage: 'This post cannot be reposted' }, chat: { id: 'status.chat', defaultMessage: 'Chat with @{name}' }, @@ -112,6 +114,7 @@ interface IStatusActionBar { expandable?: boolean; space?: 'sm' | 'md' | 'lg'; statusActionButtonTheme?: 'default' | 'inverse'; + fromBookmarks?: boolean; } const StatusActionBar: React.FC = ({ @@ -120,6 +123,7 @@ const StatusActionBar: React.FC = ({ expandable = true, space = 'sm', statusActionButtonTheme = 'default', + fromBookmarks = false, }) => { const intl = useIntl(); const history = useHistory(); @@ -201,6 +205,12 @@ const StatusActionBar: React.FC = ({ dispatch(toggleBookmark(status)); }; + const handleBookmarkFolderClick = () => { + dispatch(openModal('SELECT_BOOKMARK_FOLDER', { + statusId: status.id, + })); + }; + const handleExternalClick = () => { window.open(status.uri, '_blank'); }; @@ -453,6 +463,14 @@ const StatusActionBar: React.FC = ({ }); } + if (features.bookmarkFolders && fromBookmarks) { + menu.push({ + text: intl.formatMessage(status.pleroma.get('bookmark_folder') ? messages.bookmarkChangeFolder : messages.bookmarkSetFolder), + action: handleBookmarkFolderClick, + icon: require('@tabler/icons/outline/folders.svg'), + }); + } + if (features.federating && !account.local) { const { hostname: domain } = new URL(status.uri); menu.push({ diff --git a/src/components/status-list.tsx b/src/components/status-list.tsx index 621a659f0..838997435 100644 --- a/src/components/status-list.tsx +++ b/src/components/status-list.tsx @@ -129,6 +129,7 @@ const StatusList: React.FC = ({ contextType={timelineId} showGroup={showGroup} variant={divideType === 'border' ? 'slim' : 'rounded'} + fromBookmarks={other.scrollKey === 'bookmarked_statuses'} /> ); }; diff --git a/src/components/status.tsx b/src/components/status.tsx index 507e499f5..cd9e53301 100644 --- a/src/components/status.tsx +++ b/src/components/status.tsx @@ -50,6 +50,7 @@ export interface IStatus { variant?: 'default' | 'rounded' | 'slim'; showGroup?: boolean; accountAction?: React.ReactElement; + fromBookmarks?: boolean; } const Status: React.FC = (props) => { @@ -69,6 +70,7 @@ const Status: React.FC = (props) => { hideActionBar, variant = 'rounded', showGroup = true, + fromBookmarks = false, } = props; const intl = useIntl(); @@ -478,7 +480,7 @@ const Status: React.FC = (props) => { {(!hideActionBar && !isUnderReview) && (
- +
)} diff --git a/src/locales/en.json b/src/locales/en.json index 6d661b2f2..b3aa5d72d 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -1481,6 +1481,8 @@ "status.approval.rejected": "Rejected", "status.bookmark": "Bookmark", "status.bookmark.select_folder": "Select folder", + "status.bookmark_folder": "Set bookmark folder", + "status.bookmark_folder_change": "Change bookmark folder", "status.bookmark_folder_changed": "Changed folder", "status.bookmarked": "Bookmark added.", "status.cancel_reblog_private": "Un-repost",