Fix: #154 サークル投稿履歴が遡れない問題 (#156)

This commit is contained in:
KMY(雪あすか) 2023-10-21 10:15:58 +09:00 committed by GitHub
parent 292fbbb70d
commit 89ef448d3a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 21 additions and 26 deletions

View file

@ -380,7 +380,11 @@ export const removeFromCircleAdder = circleId => (dispatch, getState) => {
export function fetchCircleStatuses(circleId) { export function fetchCircleStatuses(circleId) {
return (dispatch, getState) => { 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; return;
} }
@ -422,9 +426,9 @@ export function fetchCircleStatusesFail(id, error) {
export function expandCircleStatuses(circleId) { export function expandCircleStatuses(circleId) {
return (dispatch, getState) => { 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; return;
} }

View file

@ -113,7 +113,7 @@ class CircleStatuses extends ImmutablePureComponent {
}; };
handleLoadMore = debounce(() => { handleLoadMore = debounce(() => {
this.props.dispatch(expandCircleStatuses()); this.props.dispatch(expandCircleStatuses(this.props.params.id));
}, 300, { leading: true }); }, 300, { leading: true });
render () { render () {

View file

@ -32,7 +32,7 @@ class CircleSelect extends PureComponent {
} }
const listOptions = circles.toArray().filter((circle) => circle).map((circle) => { 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); const listValue = listOptions.find((opt) => opt.value === circleId);

View file

@ -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 { import {
CIRCLE_FETCH_SUCCESS, CIRCLE_FETCH_SUCCESS,
@ -18,14 +18,7 @@ import {
COMPOSE_WITH_CIRCLE_SUCCESS, COMPOSE_WITH_CIRCLE_SUCCESS,
} from '../actions/compose'; } from '../actions/compose';
const initialState = ImmutableList(); const initialState = ImmutableMap();
const initialStatusesState = ImmutableMap({
items: ImmutableList(),
isLoading: false,
loaded: true,
next: null,
});
const normalizeCircle = (state, circle) => { const normalizeCircle = (state, circle) => {
const old = state.get(circle.id); const old = state.get(circle.id);
@ -33,13 +26,11 @@ const normalizeCircle = (state, circle) => {
return state; return state;
} }
let s = state.set(circle.id, fromJS(circle)); state = state.set(circle.id, fromJS(circle));
if (old) { if (old) {
s = s.setIn([circle.id, 'statuses'], old.get('statuses')); state = state.setIn([circle.id, 'items'], old.get('items'));
} else {
s = s.setIn([circle.id, 'statuses'], initialStatusesState);
} }
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) => { const normalizeCircles = (state, circles) => {
@ -51,7 +42,7 @@ const normalizeCircles = (state, circles) => {
}; };
const normalizeCircleStatuses = (state, circleId, statuses, next) => { 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('next', next);
map.set('loaded', true); map.set('loaded', true);
map.set('isLoading', false); map.set('isLoading', false);
@ -64,7 +55,7 @@ const appendToCircleStatuses = (state, circleId, statuses, next) => {
}; };
const appendToCircleStatusesById = (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') { if (typeof next !== 'undefined') {
map.set('next', next); map.set('next', next);
} }
@ -79,8 +70,8 @@ const prependToCircleStatusById = (state, circleId, statusId) => {
if (!state.get(circleId)) return state; if (!state.get(circleId)) return state;
return state.updateIn([circleId], circle => circle.withMutations(map => { return state.updateIn([circleId], circle => circle.withMutations(map => {
if (map.getIn(['statuses', 'items'])) { if (map.get('items')) {
map.updateIn(['statuses', 'items'], list => ImmutableOrderedSet([statusId]).union(list)); 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); return state.set(action.id, false);
case CIRCLE_STATUSES_FETCH_REQUEST: case CIRCLE_STATUSES_FETCH_REQUEST:
case CIRCLE_STATUSES_EXPAND_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_FETCH_FAIL:
case CIRCLE_STATUSES_EXPAND_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: case CIRCLE_STATUSES_FETCH_SUCCESS:
return normalizeCircleStatuses(state, action.id, action.statuses, action.next); return normalizeCircleStatuses(state, action.id, action.statuses, action.next);
case CIRCLE_STATUSES_EXPAND_SUCCESS: case CIRCLE_STATUSES_EXPAND_SUCCESS:

View file

@ -156,5 +156,5 @@ export const getBookmarkCategoryStatusList = createSelector([
], (items) => items ? items.toList() : ImmutableList()); ], (items) => items ? items.toList() : ImmutableList());
export const getCircleStatusList = createSelector([ export const getCircleStatusList = createSelector([
(state, circleId) => state.getIn(['circles', circleId, 'statuses', 'items']), (state, circleId) => state.getIn(['circles', circleId, 'items']),
], (items) => items ? items.toList() : ImmutableList()); ], (items) => items ? items.toList() : ImmutableList());