Skip to content

Commit a06cfe5

Browse files
ClearlyClaireumonaca
authored andcommitted
Merge upstream: Add bookmarks (mastodon#7107)
* Add backend support for bookmarks Bookmarks behave like favourites, except they aren't shared with other users and do not have an associated counter. * Add spec for bookmark endpoints * Add front-end support for bookmarks * Introduce OAuth scopes for bookmarks * Add bookmarks to archive takeout * Fix migration * Coding style fixes * Fix rebase issue * Update bookmarked_statuses to latest UI changes * Update bookmark actions to properly reflect status changes in state * Add bookmarks item to single-column layout * Make active bookmarks red Conflicts: app/javascript/mastodon/actions/interactions.js app/javascript/mastodon/components/status_action_bar.js app/javascript/mastodon/features/bookmarked_statuses/index.js db/migrate/20180831171112_create_bookmarks.rb
1 parent 4c9f6f3 commit a06cfe5

4 files changed

Lines changed: 16 additions & 9 deletions

File tree

app/javascript/mastodon/actions/interactions.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ export function bookmark(status) {
201201

202202
api(getState).post(`/api/v1/statuses/${status.get('id')}/bookmark`).then(function (response) {
203203
dispatch(importFetchedStatus(response.data));
204-
dispatch(bookmarkSuccess(status));
204+
dispatch(bookmarkSuccess(status, response.data));
205205
}).catch(function (error) {
206206
dispatch(bookmarkFail(status, error));
207207
});
@@ -214,7 +214,7 @@ export function unbookmark(status) {
214214

215215
api(getState).post(`/api/v1/statuses/${status.get('id')}/unbookmark`).then(response => {
216216
dispatch(importFetchedStatus(response.data));
217-
dispatch(unbookmarkSuccess(status));
217+
dispatch(unbookmarkSuccess(status, response.data));
218218
}).catch(error => {
219219
dispatch(unbookmarkFail(status, error));
220220
});
@@ -228,10 +228,11 @@ export function bookmarkRequest(status) {
228228
};
229229
};
230230

231-
export function bookmarkSuccess(status) {
231+
export function bookmarkSuccess(status, response) {
232232
return {
233233
type: BOOKMARK_SUCCESS,
234234
status: status,
235+
response: response,
235236
};
236237
};
237238

@@ -250,10 +251,11 @@ export function unbookmarkRequest(status) {
250251
};
251252
};
252253

253-
export function unbookmarkSuccess(status) {
254+
export function unbookmarkSuccess(status, response) {
254255
return {
255256
type: UNBOOKMARK_SUCCESS,
256257
status: status,
258+
response: response,
257259
};
258260
};
259261

app/javascript/mastodon/components/status_action_bar.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,6 @@ class StatusActionBar extends ImmutablePureComponent {
125125
this.props.onBookmark(this.props.status);
126126
}
127127

128-
129128
handleDeleteClick = () => {
130129
this.props.onDelete(this.props.status, this.context.router.history);
131130
}

app/javascript/mastodon/features/bookmarked_statuses/index.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import Column from '../ui/components/column';
77
import ColumnHeader from '../../components/column_header';
88
import { addColumn, removeColumn, moveColumn } from '../../actions/columns';
99
import StatusList from '../../components/status_list';
10-
import { defineMessages, injectIntl } from 'react-intl';
10+
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
1111
import ImmutablePureComponent from 'react-immutable-pure-component';
1212
import { debounce } from 'lodash';
1313

@@ -27,6 +27,7 @@ class Bookmarks extends ImmutablePureComponent {
2727

2828
static propTypes = {
2929
dispatch: PropTypes.func.isRequired,
30+
shouldUpdateScroll: PropTypes.func,
3031
statusIds: ImmutablePropTypes.list.isRequired,
3132
intl: PropTypes.object.isRequired,
3233
columnId: PropTypes.string,
@@ -67,11 +68,13 @@ class Bookmarks extends ImmutablePureComponent {
6768
}, 300, { leading: true })
6869

6970
render () {
70-
const { intl, statusIds, columnId, multiColumn, hasMore, isLoading } = this.props;
71+
const { intl, shouldUpdateScroll, statusIds, columnId, multiColumn, hasMore, isLoading } = this.props;
7172
const pinned = !!columnId;
7273

74+
const emptyMessage = <FormattedMessage id='empty_column.bookmarked_statuses' defaultMessage="You don't have any bookmarked toots yet. When you bookmark one, it will show up here." />;
75+
7376
return (
74-
<Column ref={this.setRef}>
77+
<Column bindToDocument={!multiColumn} ref={this.setRef} label={intl.formatMessage(messages.heading)}>
7578
<ColumnHeader
7679
icon='bookmark'
7780
title={intl.formatMessage(messages.heading)}
@@ -90,6 +93,9 @@ class Bookmarks extends ImmutablePureComponent {
9093
hasMore={hasMore}
9194
isLoading={isLoading}
9295
onLoadMore={this.handleLoadMore}
96+
shouldUpdateScroll={shouldUpdateScroll}
97+
emptyMessage={emptyMessage}
98+
bindToDocument={!multiColumn}
9399
/>
94100
</Column>
95101
);

app/javascript/mastodon/features/ui/components/navigation_panel.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ const NavigationPanel = () => (
1616
<NavLink className='column-link column-link--transparent' to='/timelines/public/local' data-preview-title-id='column.community' data-preview-icon='users' ><Icon className='column-link__icon' id='users' fixedWidth /><FormattedMessage id='tabs_bar.local_timeline' defaultMessage='Local' /></NavLink>
1717
<NavLink className='column-link column-link--transparent' exact to='/timelines/public' data-preview-title-id='column.public' data-preview-icon='globe' ><Icon className='column-link__icon' id='globe' fixedWidth /><FormattedMessage id='tabs_bar.federated_timeline' defaultMessage='Federated' /></NavLink>
1818
<NavLink className='column-link column-link--transparent' to='/timelines/direct'><Icon className='column-link__icon' id='envelope' fixedWidth /><FormattedMessage id='navigation_bar.direct' defaultMessage='Direct messages' /></NavLink>
19-
<NavLink className='column-link column-link--transparent' to='/bookmarks'><Icon className='column-link__icon' id='bookmark' fixedWidth /><FormattedMessage id='navigation_bar.bookmarks' defaultMessage='Bookmarks' /></NavLink>
2019
<NavLink className='column-link column-link--transparent' to='/favourites'><Icon className='column-link__icon' id='star' fixedWidth /><FormattedMessage id='navigation_bar.favourites' defaultMessage='Favourites' /></NavLink>
20+
<NavLink className='column-link column-link--transparent' to='/bookmarks'><Icon className='column-link__icon' id='bookmark' fixedWidth /><FormattedMessage id='navigation_bar.bookmarks' defaultMessage='Bookmarks' /></NavLink>
2121
<NavLink className='column-link column-link--transparent' to='/lists'><Icon className='column-link__icon' id='list-ul' fixedWidth /><FormattedMessage id='navigation_bar.lists' defaultMessage='Lists' /></NavLink>
2222
{profile_directory && <NavLink className='column-link column-link--transparent' to='/directory'><Icon className='column-link__icon' id='address-book-o' fixedWidth /><FormattedMessage id='getting_started.directory' defaultMessage='Profile directory' /></NavLink>}
2323

0 commit comments

Comments
 (0)