From c19eddb1d4ae251250726a4545329f782f21750c Mon Sep 17 00:00:00 2001 From: Tdxdxoz Date: Tue, 28 Mar 2023 22:13:27 +0800 Subject: [PATCH] use news bot for explore news timeline --- .../glitch/features/explore/index.jsx | 20 +++++-- .../features/explore/news_bot_statuses.jsx | 55 +++++++++++++++++++ .../flavours/glitch/initial_state.js | 4 ++ app/serializers/initial_state_serializer.rb | 1 + config/initializers/new_feature.rb | 1 + 5 files changed, 76 insertions(+), 5 deletions(-) create mode 100644 app/javascript/flavours/glitch/features/explore/news_bot_statuses.jsx diff --git a/app/javascript/flavours/glitch/features/explore/index.jsx b/app/javascript/flavours/glitch/features/explore/index.jsx index 4f6730438..bff70746e 100644 --- a/app/javascript/flavours/glitch/features/explore/index.jsx +++ b/app/javascript/flavours/glitch/features/explore/index.jsx @@ -5,7 +5,7 @@ import PropTypes from 'prop-types'; import Column from 'flavours/glitch/components/column'; import ColumnHeader from 'flavours/glitch/components/column_header'; import { NavLink, Switch, Route } from 'react-router-dom'; -import Links from './links'; +import NewsBotStatuses from './news_bot_statuses'; import Tags from './tags'; import Statuses from './statuses'; import Suggestions from './suggestions'; @@ -13,6 +13,7 @@ import Search from 'flavours/glitch/features/compose/containers/search_container import SearchResults from './results'; import { showTrends } from 'flavours/glitch/initial_state'; import { Helmet } from 'react-helmet'; +import { newsBotId } from '../../initial_state' const messages = defineMessages({ title: { id: 'explore.title', defaultMessage: 'Explore' }, @@ -74,9 +75,11 @@ class Explore extends React.PureComponent { - - - + {newsBotId ? ( + + + + ) : null} {signedIn && ( @@ -86,7 +89,14 @@ class Explore extends React.PureComponent { - + {newsBotId ? ( + + + + ) : null} diff --git a/app/javascript/flavours/glitch/features/explore/news_bot_statuses.jsx b/app/javascript/flavours/glitch/features/explore/news_bot_statuses.jsx new file mode 100644 index 000000000..d1efe605c --- /dev/null +++ b/app/javascript/flavours/glitch/features/explore/news_bot_statuses.jsx @@ -0,0 +1,55 @@ +import React from 'react'; +import { connect } from 'react-redux'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import PropTypes from 'prop-types'; +import { expandAccountTimeline } from 'flavours/glitch/actions/timelines'; +import StatusList from '../../components/status_list'; +import { List as ImmutableList } from 'immutable'; + +const mapStateToProps = (state, { accountId }) => { + + return { + statusIds: state.getIn(['timelines', `account:${accountId}`, 'items'], ImmutableList()), + isLoading: state.getIn(['timelines', `account:${accountId}`, 'isLoading']), + hasMore: state.getIn(['timelines', `account:${accountId}`, 'hasMore']), + }; +}; + + +export default @connect(mapStateToProps) +class NewsBotStatuses extends React.PureComponent { + + static propTypes = { + accountId: PropTypes.string.isRequired, + dispatch: PropTypes.func.isRequired, + statusIds: ImmutablePropTypes.list, + isLoading: PropTypes.bool, + hasMore: PropTypes.bool, + multiColumn: PropTypes.bool, + }; + + componentDidMount () { + this.props.dispatch(expandAccountTimeline(this.props.accountId)); + } + + handleLoadMore = maxId => { + this.props.dispatch(expandAccountTimeline(this.props.accountId, { maxId })); + }; + + render () { + const { statusIds, isLoading, hasMore, multiColumn } = this.props; + + return ( + + ); + } + +} diff --git a/app/javascript/flavours/glitch/initial_state.js b/app/javascript/flavours/glitch/initial_state.js index c31e0c32d..0542e9c93 100644 --- a/app/javascript/flavours/glitch/initial_state.js +++ b/app/javascript/flavours/glitch/initial_state.js @@ -82,6 +82,7 @@ * @property {string} version * @property {boolean} translation_enabled * @property {object} local_settings + * @property {string} news_bot_id */ /** @@ -150,4 +151,7 @@ export const pollLimits = (initialState && initialState.poll_limits); export const defaultContentType = getMeta('default_content_type'); export const useSystemEmojiFont = getMeta('system_emoji_font'); +// Closed-social-specific settings +export const newsBotId = getMeta('news_bot_id'); + export default initialState; diff --git a/app/serializers/initial_state_serializer.rb b/app/serializers/initial_state_serializer.rb index 45ee06e12..e6994615e 100644 --- a/app/serializers/initial_state_serializer.rb +++ b/app/serializers/initial_state_serializer.rb @@ -46,6 +46,7 @@ class InitialStateSerializer < ActiveModel::Serializer single_user_mode: Rails.configuration.x.single_user_mode, trends_as_landing_page: Setting.trends_as_landing_page, status_page_url: Setting.status_page_url, + news_bot_id: Rails.configuration.x.news_bot_id, } if object.current_account diff --git a/config/initializers/new_feature.rb b/config/initializers/new_feature.rb index 6beb571e7..b79f69347 100644 --- a/config/initializers/new_feature.rb +++ b/config/initializers/new_feature.rb @@ -7,4 +7,5 @@ Rails.application.configure do config.x.anon.acc = ENV.fetch('ANON_ACC', nil) config.x.anon.namelist = ENV['ANON_NAME_LIST'] ? File.readlines(ENV['ANON_NAME_LIST']).collect(&:strip) : ['Alice', 'Bob', 'Carol', 'Dave'] config.x.anon.salt = (1..42).map { ('a'..'z').to_a.sample }.join + config.x.news_bot_id = ENV.fetch('NEWS_BOT', nil) end