From 89ef448d3a0b21e6d97533598873b41a594f4450 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?KMY=EF=BC=88=E9=9B=AA=E3=81=82=E3=81=99=E3=81=8B=EF=BC=89?= Date: Sat, 21 Oct 2023 10:15:58 +0900 Subject: [PATCH] =?UTF-8?q?Fix:=20#154=20=E3=82=B5=E3=83=BC=E3=82=AF?= =?UTF-8?q?=E3=83=AB=E6=8A=95=E7=A8=BF=E5=B1=A5=E6=AD=B4=E3=81=8C=E9=81=A1?= =?UTF-8?q?=E3=82=8C=E3=81=AA=E3=81=84=E5=95=8F=E9=A1=8C=20(#156)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/javascript/mastodon/actions/circles.js | 10 ++++-- .../features/circle_statuses/index.jsx | 2 +- .../compose/components/circle_select.jsx | 2 +- app/javascript/mastodon/reducers/circles.js | 31 +++++++------------ app/javascript/mastodon/selectors/index.js | 2 +- 5 files changed, 21 insertions(+), 26 deletions(-) diff --git a/app/javascript/mastodon/actions/circles.js b/app/javascript/mastodon/actions/circles.js index a497b27d5d..7ed41b4045 100644 --- a/app/javascript/mastodon/actions/circles.js +++ b/app/javascript/mastodon/actions/circles.js @@ -380,7 +380,11 @@ export const removeFromCircleAdder = circleId => (dispatch, getState) => { export function fetchCircleStatuses(circleId) { return (dispatch, getState) => { - if (getState().getIn(['circles', circleId, 'statuses', 'isLoading'])) { + if (getState().getIn(['circles', circleId, 'isLoading'])) { + return; + } + const items = getState().getIn(['circles', circleId, 'items']); + if (items && items.size > 0) { return; } @@ -422,9 +426,9 @@ export function fetchCircleStatusesFail(id, error) { export function expandCircleStatuses(circleId) { return (dispatch, getState) => { - const url = getState().getIn(['circles', circleId, 'statuses', 'next'], null); + const url = getState().getIn(['circles', circleId, 'next'], null); - if (url === null || getState().getIn(['circles', circleId, 'statuses', 'isLoading'])) { + if (url === null || getState().getIn(['circles', circleId, 'isLoading'])) { return; } diff --git a/app/javascript/mastodon/features/circle_statuses/index.jsx b/app/javascript/mastodon/features/circle_statuses/index.jsx index 95f82521a8..3e1d1dbbd6 100644 --- a/app/javascript/mastodon/features/circle_statuses/index.jsx +++ b/app/javascript/mastodon/features/circle_statuses/index.jsx @@ -113,7 +113,7 @@ class CircleStatuses extends ImmutablePureComponent { }; handleLoadMore = debounce(() => { - this.props.dispatch(expandCircleStatuses()); + this.props.dispatch(expandCircleStatuses(this.props.params.id)); }, 300, { leading: true }); render () { diff --git a/app/javascript/mastodon/features/compose/components/circle_select.jsx b/app/javascript/mastodon/features/compose/components/circle_select.jsx index 722137d081..28b53b83e5 100644 --- a/app/javascript/mastodon/features/compose/components/circle_select.jsx +++ b/app/javascript/mastodon/features/compose/components/circle_select.jsx @@ -32,7 +32,7 @@ class CircleSelect extends PureComponent { } const listOptions = circles.toArray().filter((circle) => circle).map((circle) => { - return { value: circle.get('id'), label: circle.get('title') }; + return { value: circle[1].get('id'), label: circle[1].get('title') }; }); const listValue = listOptions.find((opt) => opt.value === circleId); diff --git a/app/javascript/mastodon/reducers/circles.js b/app/javascript/mastodon/reducers/circles.js index ea82493ab3..6b27712a49 100644 --- a/app/javascript/mastodon/reducers/circles.js +++ b/app/javascript/mastodon/reducers/circles.js @@ -1,4 +1,4 @@ -import { List as ImmutableList, Map as ImmutableMap, OrderedSet as ImmutableOrderedSet, fromJS } from 'immutable'; +import { Map as ImmutableMap, OrderedSet as ImmutableOrderedSet, fromJS } from 'immutable'; import { CIRCLE_FETCH_SUCCESS, @@ -18,14 +18,7 @@ import { COMPOSE_WITH_CIRCLE_SUCCESS, } from '../actions/compose'; -const initialState = ImmutableList(); - -const initialStatusesState = ImmutableMap({ - items: ImmutableList(), - isLoading: false, - loaded: true, - next: null, -}); +const initialState = ImmutableMap(); const normalizeCircle = (state, circle) => { const old = state.get(circle.id); @@ -33,13 +26,11 @@ const normalizeCircle = (state, circle) => { return state; } - let s = state.set(circle.id, fromJS(circle)); + state = state.set(circle.id, fromJS(circle)); if (old) { - s = s.setIn([circle.id, 'statuses'], old.get('statuses')); - } else { - s = s.setIn([circle.id, 'statuses'], initialStatusesState); + state = state.setIn([circle.id, 'items'], old.get('items')); } - return s.setIn([circle.id, 'isLoading'], false).setIn([circle.id, 'isLoaded'], true); + return state.setIn([circle.id, 'isLoading'], false).setIn([circle.id, 'isLoaded'], true); }; const normalizeCircles = (state, circles) => { @@ -51,7 +42,7 @@ const normalizeCircles = (state, circles) => { }; const normalizeCircleStatuses = (state, circleId, statuses, next) => { - return state.updateIn([circleId, 'statuses'], listMap => listMap.withMutations(map => { + return state.update(circleId, listMap => listMap.withMutations(map => { map.set('next', next); map.set('loaded', true); map.set('isLoading', false); @@ -64,7 +55,7 @@ const appendToCircleStatuses = (state, circleId, statuses, next) => { }; const appendToCircleStatusesById = (state, circleId, statuses, next) => { - return state.updateIn([circleId, 'statuses'], listMap => listMap.withMutations(map => { + return state.update(circleId, listMap => listMap.withMutations(map => { if (typeof next !== 'undefined') { map.set('next', next); } @@ -79,8 +70,8 @@ const prependToCircleStatusById = (state, circleId, statusId) => { if (!state.get(circleId)) return state; return state.updateIn([circleId], circle => circle.withMutations(map => { - if (map.getIn(['statuses', 'items'])) { - map.updateIn(['statuses', 'items'], list => ImmutableOrderedSet([statusId]).union(list)); + if (map.get('items')) { + map.update('items', list => ImmutableOrderedSet([statusId]).union(list)); } })); }; @@ -98,10 +89,10 @@ export default function circles(state = initialState, action) { return state.set(action.id, false); case CIRCLE_STATUSES_FETCH_REQUEST: case CIRCLE_STATUSES_EXPAND_REQUEST: - return state.setIn([action.id, 'statuses', 'isLoading'], true); + return state.setIn([action.id, 'isLoading'], true); case CIRCLE_STATUSES_FETCH_FAIL: case CIRCLE_STATUSES_EXPAND_FAIL: - return state.setIn([action.id, 'statuses', 'isLoading'], false); + return state.setIn([action.id, 'isLoading'], false); case CIRCLE_STATUSES_FETCH_SUCCESS: return normalizeCircleStatuses(state, action.id, action.statuses, action.next); case CIRCLE_STATUSES_EXPAND_SUCCESS: diff --git a/app/javascript/mastodon/selectors/index.js b/app/javascript/mastodon/selectors/index.js index 6c5891ca57..1635280aee 100644 --- a/app/javascript/mastodon/selectors/index.js +++ b/app/javascript/mastodon/selectors/index.js @@ -156,5 +156,5 @@ export const getBookmarkCategoryStatusList = createSelector([ ], (items) => items ? items.toList() : ImmutableList()); export const getCircleStatusList = createSelector([ - (state, circleId) => state.getIn(['circles', circleId, 'statuses', 'items']), + (state, circleId) => state.getIn(['circles', circleId, 'items']), ], (items) => items ? items.toList() : ImmutableList());