Updated Gab Trends api, redux, panel
• Updated: - Gab Trends api, redux, panel - GabTrendsController takes in query string for feed type
This commit is contained in:
parent
24ad9b6ff4
commit
4a23c62ec8
@ -6,20 +6,26 @@ class Api::V1::GabTrendsController < Api::BaseController
|
||||
skip_before_action :set_cache_headers
|
||||
|
||||
def index
|
||||
body = Redis.current.get("gabtrends")
|
||||
|
||||
if body.nil?
|
||||
uri = URI("https://trends.gab.com/trend-feed/json")
|
||||
uri.query = URI.encode_www_form({})
|
||||
type = params[:type]
|
||||
if type == 'feed'
|
||||
body = Redis.current.get("gabtrends")
|
||||
|
||||
if body.nil?
|
||||
uri = URI("https://trends.gab.com/trend-feed/json")
|
||||
uri.query = URI.encode_www_form({})
|
||||
|
||||
res = Net::HTTP.get_response(uri)
|
||||
if res.is_a?(Net::HTTPSuccess)
|
||||
body = res.body
|
||||
Redis.current.set("gabtrends", res.body)
|
||||
Redis.current.expire("gabtrends", 1.hour.seconds)
|
||||
res = Net::HTTP.get_response(uri)
|
||||
if res.is_a?(Net::HTTPSuccess)
|
||||
body = res.body
|
||||
Redis.current.set("gabtrends", res.body)
|
||||
Redis.current.expire("gabtrends", 1.hour.seconds)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
render json: body
|
||||
render json: body
|
||||
else
|
||||
raise GabSocial::NotPermittedError
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
@ -5,34 +5,37 @@ export const GAB_TRENDS_RESULTS_FETCH_REQUEST = 'GAB_TRENDS_RESULTS_FETCH_REQUES
|
||||
export const GAB_TRENDS_RESULTS_FETCH_SUCCESS = 'GAB_TRENDS_RESULTS_FETCH_SUCCESS'
|
||||
export const GAB_TRENDS_RESULTS_FETCH_FAIL = 'GAB_TRENDS_RESULTS_FETCH_FAIL'
|
||||
|
||||
export const fetchGabTrends = () => {
|
||||
export const fetchGabTrends = (feedType) => {
|
||||
return function (dispatch, getState) {
|
||||
dispatch(fetchGabTrendsRequest())
|
||||
dispatch(fetchGabTrendsRequest(feedType))
|
||||
|
||||
api(getState).get('/api/v1/gab_trends').then(response => {
|
||||
dispatch(fetchGabTrendsSuccess(response.data.items))
|
||||
api(getState).get(`/api/v1/gab_trends?type=${feedType}`).then(response => {
|
||||
dispatch(fetchGabTrendsSuccess(response.data.items, feedType))
|
||||
}).catch(function (error) {
|
||||
dispatch(fetchGabTrendsFail(error))
|
||||
dispatch(fetchGabTrendsFail(error, feedType))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
function fetchGabTrendsRequest() {
|
||||
function fetchGabTrendsRequest(feedType) {
|
||||
return {
|
||||
type: GAB_TRENDS_RESULTS_FETCH_REQUEST,
|
||||
feedType,
|
||||
}
|
||||
}
|
||||
|
||||
function fetchGabTrendsSuccess(items) {
|
||||
function fetchGabTrendsSuccess(items, feedType) {
|
||||
return {
|
||||
type: GAB_TRENDS_RESULTS_FETCH_SUCCESS,
|
||||
items,
|
||||
feedType,
|
||||
}
|
||||
}
|
||||
|
||||
function fetchGabTrendsFail(error) {
|
||||
function fetchGabTrendsFail(error, feedType) {
|
||||
return {
|
||||
type: GAB_TRENDS_RESULTS_FETCH_FAIL,
|
||||
error,
|
||||
feedType,
|
||||
}
|
||||
}
|
@ -11,34 +11,47 @@ const messages = defineMessages({
|
||||
})
|
||||
|
||||
const mapStateToProps = (state) => ({
|
||||
gabtrends: state.getIn(['gab_trends', 'items']),
|
||||
isError: state.getIn(['gab_trends', 'feed', 'isError']),
|
||||
isLoading: state.getIn(['gab_trends', 'feed', 'isLoading']),
|
||||
items: state.getIn(['gab_trends', 'feed', 'items']),
|
||||
})
|
||||
|
||||
const mapDispatchToProps = (dispatch) => ({
|
||||
onFetchGabTrends: () => dispatch(fetchGabTrends()),
|
||||
onfetchGabTrends: () => dispatch(fetchGabTrends('feed')),
|
||||
})
|
||||
|
||||
export default
|
||||
@connect(mapStateToProps, mapDispatchToProps)
|
||||
@injectIntl
|
||||
@connect(mapStateToProps, mapDispatchToProps)
|
||||
class TrendsPanel extends ImmutablePureComponent {
|
||||
|
||||
static propTypes = {
|
||||
intl: PropTypes.object.isRequired,
|
||||
gabtrends: ImmutablePropTypes.list.isRequired,
|
||||
onFetchGabTrends: PropTypes.func.isRequired,
|
||||
isError: PropTypes.bool,
|
||||
isLoading: PropTypes.bool,
|
||||
items: ImmutablePropTypes.list.isRequired,
|
||||
onfetchGabTrends: PropTypes.func.isRequired,
|
||||
}
|
||||
|
||||
updateOnProps = [
|
||||
'gabtrends',
|
||||
'items',
|
||||
'isLoading',
|
||||
'isError',
|
||||
]
|
||||
|
||||
componentDidMount() {
|
||||
this.props.onFetchGabTrends()
|
||||
this.props.onfetchGabTrends()
|
||||
}
|
||||
|
||||
render() {
|
||||
const { intl, gabtrends } = this.props
|
||||
const {
|
||||
intl,
|
||||
isError,
|
||||
isLoading,
|
||||
items,
|
||||
} = this.props
|
||||
|
||||
if (isError) return null
|
||||
|
||||
return (
|
||||
<PanelLayout
|
||||
@ -46,11 +59,11 @@ class TrendsPanel extends ImmutablePureComponent {
|
||||
title={intl.formatMessage(messages.title)}
|
||||
>
|
||||
<ScrollableList
|
||||
showLoading={gabtrends.size == 0}
|
||||
isLoading={isLoading}
|
||||
scrollKey='trending-items'
|
||||
>
|
||||
{
|
||||
gabtrends.slice(0, 8).map((trend, i) => (
|
||||
items.slice(0, 8).map((trend, i) => (
|
||||
<TrendsItem
|
||||
key={`gab-trend-${i}`}
|
||||
index={i + 1}
|
||||
|
@ -6,30 +6,41 @@ import {
|
||||
import {
|
||||
Map as ImmutableMap,
|
||||
List as ImmutableList,
|
||||
fromJS
|
||||
fromJS,
|
||||
} from 'immutable'
|
||||
|
||||
const initialState = ImmutableMap({
|
||||
items: ImmutableList(),
|
||||
loading: false,
|
||||
error: false,
|
||||
feed: ImmutableMap({
|
||||
items: ImmutableList(),
|
||||
isLoading: false,
|
||||
isError: false,
|
||||
}),
|
||||
})
|
||||
|
||||
const normalizeList = (state, type, items) => {
|
||||
return state.set(type, ImmutableMap({
|
||||
items: fromJS(items),
|
||||
isLoading: false,
|
||||
isError: false,
|
||||
}))
|
||||
}
|
||||
|
||||
const setListFailed = (state, type) => {
|
||||
return state.set(type, ImmutableMap({
|
||||
items: ImmutableList(),
|
||||
isLoading: false,
|
||||
isError: true,
|
||||
}))
|
||||
}
|
||||
|
||||
export default function (state = initialState, action) {
|
||||
switch (action.type) {
|
||||
case GAB_TRENDS_RESULTS_FETCH_REQUEST:
|
||||
return state.set('loading', true)
|
||||
return state.setIn([action.feedType, 'isLoading'], true);
|
||||
case GAB_TRENDS_RESULTS_FETCH_SUCCESS:
|
||||
return state.withMutations(map => {
|
||||
map.set('items', fromJS(action.items));
|
||||
map.set('error', false);
|
||||
map.set('loading', false);
|
||||
});
|
||||
return normalizeList(state, action.feedType, action.items)
|
||||
case GAB_TRENDS_RESULTS_FETCH_FAIL:
|
||||
return state.withMutations(map => {
|
||||
map.set('error', !!action.error);
|
||||
map.set('loading', false);
|
||||
});
|
||||
return setListFailed(state, action.feedType)
|
||||
default:
|
||||
return state
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user