diff --git a/app/controllers/api/v1/directories_controller.rb b/app/controllers/api/v1/directories_controller.rb deleted file mode 100644 index 1109435507..0000000000 --- a/app/controllers/api/v1/directories_controller.rb +++ /dev/null @@ -1,55 +0,0 @@ -# frozen_string_literal: true - -class Api::V1::DirectoriesController < Api::BaseController - before_action :require_enabled! - before_action :set_accounts - - def show - cache_if_unauthenticated! - render json: @accounts, each_serializer: REST::AccountSerializer - end - - private - - def require_enabled! - return not_found unless Setting.profile_directory - end - - def set_accounts - @accounts = accounts_scope.offset(params[:offset]).limit(limit_param(DEFAULT_ACCOUNTS_LIMIT)) - end - - def accounts_scope - Account.discoverable.tap do |scope| - scope.merge!(account_order_scope) - scope.merge!(local_account_scope) if local_accounts? - scope.merge!(account_exclusion_scope) if current_account - scope.merge!(account_domain_block_scope) if current_account && !local_accounts? - end - end - - def local_accounts? - truthy_param?(:local) - end - - def account_order_scope - case params[:order] - when 'new' - Account.order(id: :desc) - when 'active', nil - Account.by_recent_status - end - end - - def local_account_scope - Account.local - end - - def account_exclusion_scope - Account.not_excluded_by_account(current_account) - end - - def account_domain_block_scope - Account.not_domain_blocked_by_account(current_account) - end -end diff --git a/app/javascript/mastodon/features/directory/index.jsx b/app/javascript/mastodon/features/directory/index.jsx deleted file mode 100644 index df25331966..0000000000 --- a/app/javascript/mastodon/features/directory/index.jsx +++ /dev/null @@ -1,183 +0,0 @@ -import PropTypes from 'prop-types'; -import { PureComponent } from 'react'; - -import { defineMessages, injectIntl } from 'react-intl'; - -import { Helmet } from 'react-helmet'; - -import { List as ImmutableList } from 'immutable'; -import ImmutablePropTypes from 'react-immutable-proptypes'; -import { connect } from 'react-redux'; - -import { addColumn, removeColumn, moveColumn, changeColumnParams } from 'mastodon/actions/columns'; -import { fetchDirectory, expandDirectory } from 'mastodon/actions/directory'; -import Column from 'mastodon/components/column'; -import ColumnHeader from 'mastodon/components/column_header'; -import { LoadMore } from 'mastodon/components/load_more'; -import { LoadingIndicator } from 'mastodon/components/loading_indicator'; -import { RadioButton } from 'mastodon/components/radio_button'; -import ScrollContainer from 'mastodon/containers/scroll_container'; - -import AccountCard from './components/account_card'; - -const messages = defineMessages({ - title: { id: 'column.directory', defaultMessage: 'Browse profiles' }, - recentlyActive: { id: 'directory.recently_active', defaultMessage: 'Recently active' }, - newArrivals: { id: 'directory.new_arrivals', defaultMessage: 'New arrivals' }, - local: { id: 'directory.local', defaultMessage: 'From {domain} only' }, - federated: { id: 'directory.federated', defaultMessage: 'From known fediverse' }, -}); - -const mapStateToProps = state => ({ - accountIds: state.getIn(['user_lists', 'directory', 'items'], ImmutableList()), - isLoading: state.getIn(['user_lists', 'directory', 'isLoading'], true), - domain: state.getIn(['meta', 'domain']), -}); - -class Directory extends PureComponent { - - static contextTypes = { - router: PropTypes.object, - }; - - static propTypes = { - isLoading: PropTypes.bool, - accountIds: ImmutablePropTypes.list.isRequired, - dispatch: PropTypes.func.isRequired, - columnId: PropTypes.string, - intl: PropTypes.object.isRequired, - multiColumn: PropTypes.bool, - domain: PropTypes.string.isRequired, - params: PropTypes.shape({ - order: PropTypes.string, - local: PropTypes.bool, - }), - }; - - state = { - order: null, - local: null, - }; - - handlePin = () => { - const { columnId, dispatch } = this.props; - - if (columnId) { - dispatch(removeColumn(columnId)); - } else { - dispatch(addColumn('DIRECTORY', this.getParams(this.props, this.state))); - } - }; - - getParams = (props, state) => ({ - order: state.order === null ? (props.params.order || 'active') : state.order, - local: state.local === null ? (props.params.local || false) : state.local, - }); - - handleMove = dir => { - const { columnId, dispatch } = this.props; - dispatch(moveColumn(columnId, dir)); - }; - - handleHeaderClick = () => { - this.column.scrollTop(); - }; - - componentDidMount () { - const { dispatch } = this.props; - dispatch(fetchDirectory(this.getParams(this.props, this.state))); - } - - componentDidUpdate (prevProps, prevState) { - const { dispatch } = this.props; - const paramsOld = this.getParams(prevProps, prevState); - const paramsNew = this.getParams(this.props, this.state); - - if (paramsOld.order !== paramsNew.order || paramsOld.local !== paramsNew.local) { - dispatch(fetchDirectory(paramsNew)); - } - } - - setRef = c => { - this.column = c; - }; - - handleChangeOrder = e => { - const { dispatch, columnId } = this.props; - - if (columnId) { - dispatch(changeColumnParams(columnId, ['order'], e.target.value)); - } else { - this.setState({ order: e.target.value }); - } - }; - - handleChangeLocal = e => { - const { dispatch, columnId } = this.props; - - if (columnId) { - dispatch(changeColumnParams(columnId, ['local'], e.target.value === '1')); - } else { - this.setState({ local: e.target.value === '1' }); - } - }; - - handleLoadMore = () => { - const { dispatch } = this.props; - dispatch(expandDirectory(this.getParams(this.props, this.state))); - }; - - render () { - const { isLoading, accountIds, intl, columnId, multiColumn, domain } = this.props; - const { order, local } = this.getParams(this.props, this.state); - const pinned = !!columnId; - - const scrollableArea = ( -
-
-
- - -
- -
- - -
-
- -
- {isLoading ? : accountIds.map(accountId => ( - - ))} -
- - -
- ); - - return ( - - - - {multiColumn && !pinned ? {scrollableArea} : scrollableArea} - - - {intl.formatMessage(messages.title)} - - - - ); - } - -} - -export default connect(mapStateToProps)(injectIntl(Directory)); diff --git a/app/javascript/mastodon/features/directory/components/account_card.jsx b/app/javascript/mastodon/features/explore/components/account_card.jsx similarity index 100% rename from app/javascript/mastodon/features/directory/components/account_card.jsx rename to app/javascript/mastodon/features/explore/components/account_card.jsx diff --git a/app/javascript/mastodon/features/explore/suggestions.jsx b/app/javascript/mastodon/features/explore/suggestions.jsx index f2907cdb22..15b53bb454 100644 --- a/app/javascript/mastodon/features/explore/suggestions.jsx +++ b/app/javascript/mastodon/features/explore/suggestions.jsx @@ -8,7 +8,8 @@ import { connect } from 'react-redux'; import { fetchSuggestions } from 'mastodon/actions/suggestions'; import { LoadingIndicator } from 'mastodon/components/loading_indicator'; -import AccountCard from 'mastodon/features/directory/components/account_card'; + +import AccountCard from './components/account_card'; const mapStateToProps = state => ({ suggestions: state.getIn(['suggestions', 'items']), diff --git a/app/javascript/mastodon/features/ui/components/columns_area.jsx b/app/javascript/mastodon/features/ui/components/columns_area.jsx index 672f28fb7d..5ce5bfa9fa 100644 --- a/app/javascript/mastodon/features/ui/components/columns_area.jsx +++ b/app/javascript/mastodon/features/ui/components/columns_area.jsx @@ -19,7 +19,6 @@ import { FavouritedStatuses, BookmarkedStatuses, ListTimeline, - Directory, } from '../util/async-components'; import BundleColumnError from './bundle_column_error'; @@ -40,7 +39,6 @@ const componentMap = { 'FAVOURITES': FavouritedStatuses, 'BOOKMARKS': BookmarkedStatuses, 'LIST': ListTimeline, - 'DIRECTORY': Directory, }; export default class ColumnsArea extends ImmutablePureComponent { diff --git a/app/javascript/mastodon/features/ui/components/link_footer.jsx b/app/javascript/mastodon/features/ui/components/link_footer.jsx index 7aaa887ac6..251a88b639 100644 --- a/app/javascript/mastodon/features/ui/components/link_footer.jsx +++ b/app/javascript/mastodon/features/ui/components/link_footer.jsx @@ -8,7 +8,7 @@ import { Link } from 'react-router-dom'; import { connect } from 'react-redux'; import { openModal } from 'mastodon/actions/modal'; -import { domain, version, source_url, statusPageUrl, profile_directory as profileDirectory } from 'mastodon/initial_state'; +import { domain, version, source_url, statusPageUrl } from 'mastodon/initial_state'; import { PERMISSION_INVITE_USERS } from 'mastodon/permissions'; import { logOut } from 'mastodon/utils/log_out'; @@ -57,7 +57,6 @@ class LinkFooter extends PureComponent { const { multiColumn } = this.props; const canInvite = signedIn && ((permissions & PERMISSION_INVITE_USERS) === PERMISSION_INVITE_USERS); - const canProfileDirectory = profileDirectory; const DividingCircle = {' ยท '}; @@ -79,12 +78,6 @@ class LinkFooter extends PureComponent { )} - {canProfileDirectory && ( - <> - {DividingCircle} - - - )} {DividingCircle}

diff --git a/app/javascript/mastodon/features/ui/index.jsx b/app/javascript/mastodon/features/ui/index.jsx index 55ccde72f5..028fbe0094 100644 --- a/app/javascript/mastodon/features/ui/index.jsx +++ b/app/javascript/mastodon/features/ui/index.jsx @@ -57,7 +57,6 @@ import { Mutes, PinnedStatuses, Lists, - Directory, Explore, Onboarding, About, @@ -207,7 +206,6 @@ class SwitchingColumnsArea extends PureComponent { - diff --git a/app/javascript/mastodon/features/ui/util/async-components.js b/app/javascript/mastodon/features/ui/util/async-components.js index 7b968204be..e4a01e4d1a 100644 --- a/app/javascript/mastodon/features/ui/util/async-components.js +++ b/app/javascript/mastodon/features/ui/util/async-components.js @@ -150,10 +150,6 @@ export function Audio () { return import(/* webpackChunkName: "features/audio" */'../../audio'); } -export function Directory () { - return import(/* webpackChunkName: "features/directory" */'../../directory'); -} - export function Onboarding () { return import(/* webpackChunkName: "features/onboarding" */'../../onboarding'); } diff --git a/app/javascript/mastodon/initial_state.js b/app/javascript/mastodon/initial_state.js index 11cd2a1673..06d909ee77 100644 --- a/app/javascript/mastodon/initial_state.js +++ b/app/javascript/mastodon/initial_state.js @@ -63,7 +63,6 @@ * @property {string=} me * @property {string=} moved_to_account_id * @property {string=} owner - * @property {boolean} profile_directory * @property {boolean} registrations_open * @property {boolean} reduce_motion * @property {string} repository @@ -124,7 +123,6 @@ export const mascot = getMeta('mascot'); export const me = getMeta('me'); export const movedToAccountId = getMeta('moved_to_account_id'); export const owner = getMeta('owner'); -export const profile_directory = getMeta('profile_directory'); export const reduceMotion = getMeta('reduce_motion'); export const registrationsOpen = getMeta('registrations_open'); export const repository = getMeta('repository'); diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb index 7be026d85f..15539a4cbc 100644 --- a/app/models/form/admin_settings.rb +++ b/app/models/form/admin_settings.rb @@ -21,7 +21,6 @@ class Form::AdminSettings peers_api_enabled preview_sensitive_media custom_css - profile_directory thumbnail mascot trends @@ -50,7 +49,6 @@ class Form::AdminSettings activity_api_enabled peers_api_enabled preview_sensitive_media - profile_directory trends trends_as_landing_page trendable_by_default diff --git a/app/serializers/initial_state_serializer.rb b/app/serializers/initial_state_serializer.rb index 56d45c588e..1d60cf86d2 100644 --- a/app/serializers/initial_state_serializer.rb +++ b/app/serializers/initial_state_serializer.rb @@ -26,7 +26,6 @@ class InitialStateSerializer < ActiveModel::Serializer version: instance_presenter.version, limited_federation_mode: Rails.configuration.x.limited_federation_mode, mascot: instance_presenter.mascot&.file&.url, - profile_directory: Setting.profile_directory, trends_enabled: Setting.trends, registrations_open: Setting.registrations_mode != 'none' && !Rails.configuration.x.single_user_mode, timeline_preview: Setting.timeline_preview, diff --git a/app/views/admin/settings/discovery/show.html.haml b/app/views/admin/settings/discovery/show.html.haml index 62011d5c56..c8f4a8e878 100644 --- a/app/views/admin/settings/discovery/show.html.haml +++ b/app/views/admin/settings/discovery/show.html.haml @@ -49,10 +49,5 @@ .fields-group = f.input :bootstrap_timeline_accounts, wrapper: :with_block_label - %h4= t('admin.settings.discovery.profile_directory') - - .fields-group - = f.input :profile_directory, as: :boolean, wrapper: :with_label - .actions = f.button :button, t('generic.save_changes'), type: :submit diff --git a/config/routes.rb b/config/routes.rb index 5de8562a8c..9a7377bdf3 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -20,7 +20,6 @@ Rails.application.routes.draw do /bookmarks /pinned /start - /directory /explore/(*any) /search /publish diff --git a/config/routes/api.rb b/config/routes/api.rb index 66eb82f59a..bb1fcaffc8 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -135,8 +135,6 @@ namespace :api, format: false do resource :domain_blocks, only: [:show, :create, :destroy] - resource :directory, only: [:show] - resources :follow_requests, only: [:index] do member do post :authorize