diff --git a/app/javascript/mastodon/features/bookmark_categories/index.jsx b/app/javascript/mastodon/features/bookmark_categories/index.jsx index c3f53b8a73..b70b843061 100644 --- a/app/javascript/mastodon/features/bookmark_categories/index.jsx +++ b/app/javascript/mastodon/features/bookmark_categories/index.jsx @@ -30,7 +30,7 @@ const getOrderedCategories = createSelector([state => state.get('bookmark_catego return categories; } - return categories.toList().filter(item => !!item).sort((a, b) => a.get('title').localeCompare(b.get('title'))); + return categories.toList().filter(item => !!item && typeof item.get('title') !== 'undefined' && item.get('title') !== null).sort((a, b) => a.get('title').localeCompare(b.get('title'))); }); const mapStateToProps = state => ({ diff --git a/app/javascript/mastodon/features/bookmark_category_statuses/index.jsx b/app/javascript/mastodon/features/bookmark_category_statuses/index.jsx index 0b431b334d..a322263596 100644 --- a/app/javascript/mastodon/features/bookmark_category_statuses/index.jsx +++ b/app/javascript/mastodon/features/bookmark_category_statuses/index.jsx @@ -68,7 +68,8 @@ class BookmarkCategoryStatuses extends ImmutablePureComponent { if (columnId) { dispatch(removeColumn(columnId)); } else { - dispatch(addColumn('BOOKMARKS_EX', {})); + dispatch(addColumn('BOOKMARKS_EX', { id: this.props.params.id })); + this.context.router.history.push('/'); } }; diff --git a/app/javascript/mastodon/features/compose/components/action_bar.jsx b/app/javascript/mastodon/features/compose/components/action_bar.jsx index 3255cbaf45..4c9622fb94 100644 --- a/app/javascript/mastodon/features/compose/components/action_bar.jsx +++ b/app/javascript/mastodon/features/compose/components/action_bar.jsx @@ -49,7 +49,7 @@ class ActionBar extends PureComponent { menu.push({ text: intl.formatMessage(messages.pins), to: '/pinned' }); menu.push(null); menu.push({ text: intl.formatMessage(messages.follow_requests), to: '/follow_requests' }); - menu.push({ text: intl.formatMessage(messages.bookmarks), to: '/bookmarks' }); + menu.push({ text: intl.formatMessage(messages.bookmarks), to: '/bookmark_categories' }); menu.push({ text: intl.formatMessage(messages.favourites), to: '/favourites' }); menu.push({ text: intl.formatMessage(messages.emoji_reactions), to: '/emoji_reactions' }); menu.push({ text: intl.formatMessage(messages.lists), to: '/lists' }); diff --git a/app/javascript/mastodon/features/getting_started/index.jsx b/app/javascript/mastodon/features/getting_started/index.jsx index f0cd70d7a1..9410938fe5 100644 --- a/app/javascript/mastodon/features/getting_started/index.jsx +++ b/app/javascript/mastodon/features/getting_started/index.jsx @@ -38,6 +38,8 @@ const messages = defineMessages({ mutes: { id: 'navigation_bar.mutes', defaultMessage: 'Muted users' }, pins: { id: 'navigation_bar.pins', defaultMessage: 'Pinned posts' }, lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' }, + antennas: { id: 'navigation_bar.antennas', defaultMessage: 'Antennas' }, + circles: { id: 'navigation_bar.circles', defaultMessage: 'Circles' }, discover: { id: 'navigation_bar.discover', defaultMessage: 'Discover' }, personal: { id: 'navigation_bar.personal', defaultMessage: 'Personal' }, security: { id: 'navigation_bar.security', defaultMessage: 'Security' }, @@ -116,9 +118,11 @@ class GettingStarted extends ImmutablePureComponent { , , , - , + , , , + , + , ); if (myAccount.get('locked') || unreadFollowRequests > 0) { diff --git a/app/javascript/mastodon/features/ui/components/columns_area.jsx b/app/javascript/mastodon/features/ui/components/columns_area.jsx index 47eae61fbe..af549d21ed 100644 --- a/app/javascript/mastodon/features/ui/components/columns_area.jsx +++ b/app/javascript/mastodon/features/ui/components/columns_area.jsx @@ -21,6 +21,9 @@ import { BookmarkedStatuses, ListTimeline, Directory, + BookmarkCategoryStatuses, + AntennaSetting, + AntennaTimeline, } from '../util/async-components'; import BundleColumnError from './bundle_column_error'; @@ -41,6 +44,9 @@ const componentMap = { 'FAVOURITES': FavouritedStatuses, 'EMOJI_REACTIONS': EmojiReactedStatuses, 'BOOKMARKS': BookmarkedStatuses, + 'BOOKMARKS_EX': BookmarkCategoryStatuses, + 'ANTENNA': AntennaSetting, + 'ANTENNA_TIMELINE': AntennaTimeline, 'LIST': ListTimeline, 'DIRECTORY': Directory, }; diff --git a/app/javascript/mastodon/reducers/settings.js b/app/javascript/mastodon/reducers/settings.js index 23e1195e9b..98e2bb843f 100644 --- a/app/javascript/mastodon/reducers/settings.js +++ b/app/javascript/mastodon/reducers/settings.js @@ -1,6 +1,7 @@ import { Map as ImmutableMap, fromJS } from 'immutable'; import { ANTENNA_DELETE_SUCCESS, ANTENNA_FETCH_FAIL } from 'mastodon/actions/antennas'; +import { BOOKMARK_CATEGORY_DELETE_SUCCESS, BOOKMARK_CATEGORY_FETCH_FAIL } from 'mastodon/actions/bookmark_categories'; import { CIRCLE_DELETE_SUCCESS, CIRCLE_FETCH_FAIL } from 'mastodon/actions/circles'; import { COLUMN_ADD, COLUMN_REMOVE, COLUMN_MOVE, COLUMN_PARAMS_CHANGE } from '../actions/columns'; @@ -145,7 +146,9 @@ const updateFrequentLanguages = (state, language) => state.update('frequentlyUse const filterDeadListColumns = (state, listId) => state.update('columns', columns => columns.filterNot(column => column.get('id') === 'LIST' && column.get('params').get('id') === listId)); -const filterDeadAntennaColumns = (state, antennaId) => state.update('columns', columns => columns.filterNot(column => column.get('id') === 'ANTENNA' && column.get('params').get('id') === antennaId)); +const filterDeadBookmarkCategoryColumns = (state, bookmarkCategoryId) => state.update('columns', columns => columns.filterNot(column => column.get('id') === 'BOOKMARKS_EX' && column.get('params').get('id') === bookmarkCategoryId)); + +const filterDeadAntennaColumns = (state, antennaId) => state.update('columns', columns => columns.filterNot(column => (column.get('id') === 'ANTENNA' || column.get('id') === 'ANTENNA_TIMELINE') && column.get('params').get('id') === antennaId)); const filterDeadCircleColumns = (state, circleId) => state.update('columns', columns => columns.filterNot(column => column.get('id') === 'CIRCLE' && column.get('params').get('id') === circleId)); @@ -180,6 +183,10 @@ export default function settings(state = initialState, action) { return action.error.response.status === 404 ? filterDeadListColumns(state, action.id) : state; case LIST_DELETE_SUCCESS: return filterDeadListColumns(state, action.id); + case BOOKMARK_CATEGORY_FETCH_FAIL: + return action.error.response.status === 404 ? filterDeadBookmarkCategoryColumns(state, action.id) : state; + case BOOKMARK_CATEGORY_DELETE_SUCCESS: + return filterDeadBookmarkCategoryColumns(state, action.id); case ANTENNA_FETCH_FAIL: return action.error.response.status === 404 ? filterDeadAntennaColumns(state, action.id) : state; case ANTENNA_DELETE_SUCCESS: