From 18b4b4369d734f1c7cab1a3e444fa62015589db3 Mon Sep 17 00:00:00 2001 From: KMY Date: Sun, 24 Sep 2023 12:00:40 +0900 Subject: [PATCH] Add circle post to history in web ui when post --- app/javascript/mastodon/actions/compose.js | 15 +++++++++++++++ .../features/ui/components/columns_area.jsx | 2 ++ app/javascript/mastodon/reducers/circles.js | 15 +++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/app/javascript/mastodon/actions/compose.js b/app/javascript/mastodon/actions/compose.js index 1f682d1321b0c6..efe4c564066dc8 100644 --- a/app/javascript/mastodon/actions/compose.js +++ b/app/javascript/mastodon/actions/compose.js @@ -28,6 +28,8 @@ export const COMPOSE_DIRECT = 'COMPOSE_DIRECT'; export const COMPOSE_MENTION = 'COMPOSE_MENTION'; export const COMPOSE_RESET = 'COMPOSE_RESET'; +export const COMPOSE_WITH_CIRCLE_SUCCESS = 'COMPOSE_WITH_CIRCLE_SUCCESS'; + export const COMPOSE_UPLOAD_REQUEST = 'COMPOSE_UPLOAD_REQUEST'; export const COMPOSE_UPLOAD_SUCCESS = 'COMPOSE_UPLOAD_SUCCESS'; export const COMPOSE_UPLOAD_FAIL = 'COMPOSE_UPLOAD_FAIL'; @@ -174,6 +176,7 @@ export function submitCompose(routerHistory) { const status = getState().getIn(['compose', 'text'], ''); const media = getState().getIn(['compose', 'media_attachments']); const statusId = getState().getIn(['compose', 'id'], null); + const circleId = getState().getIn(['compose', 'circle_id'], null); if ((!status || !status.length) && media.size === 0) { return; @@ -253,6 +256,10 @@ export function submitCompose(routerHistory) { insertIfOnline(`account:${response.data.account.id}`); } + if (statusId === null && circleId !== null && circleId !== 0) { + dispatch(submitComposeWithCircleSuccess({ ...response.data }, circleId)); + } + dispatch(showAlert({ message: statusId === null ? messages.published : messages.saved, action: messages.open, @@ -278,6 +285,14 @@ export function submitComposeSuccess(status) { }; } +export function submitComposeWithCircleSuccess(status, circleId) { + return { + type: COMPOSE_WITH_CIRCLE_SUCCESS, + status, + circleId, + } +} + export function submitComposeFail(error) { return { type: COMPOSE_SUBMIT_FAIL, diff --git a/app/javascript/mastodon/features/ui/components/columns_area.jsx b/app/javascript/mastodon/features/ui/components/columns_area.jsx index af549d21edd749..280330f5309cf2 100644 --- a/app/javascript/mastodon/features/ui/components/columns_area.jsx +++ b/app/javascript/mastodon/features/ui/components/columns_area.jsx @@ -24,6 +24,7 @@ import { BookmarkCategoryStatuses, AntennaSetting, AntennaTimeline, + CircleStatuses, } from '../util/async-components'; import BundleColumnError from './bundle_column_error'; @@ -45,6 +46,7 @@ const componentMap = { 'EMOJI_REACTIONS': EmojiReactedStatuses, 'BOOKMARKS': BookmarkedStatuses, 'BOOKMARKS_EX': BookmarkCategoryStatuses, + 'CIRCLE_STATUSES': CircleStatuses, 'ANTENNA': AntennaSetting, 'ANTENNA_TIMELINE': AntennaTimeline, 'LIST': ListTimeline, diff --git a/app/javascript/mastodon/reducers/circles.js b/app/javascript/mastodon/reducers/circles.js index 53277e035f1890..96237219d9065c 100644 --- a/app/javascript/mastodon/reducers/circles.js +++ b/app/javascript/mastodon/reducers/circles.js @@ -14,6 +14,9 @@ import { CIRCLE_STATUSES_EXPAND_SUCCESS, CIRCLE_STATUSES_EXPAND_FAIL, } from '../actions/circles'; +import { + COMPOSE_WITH_CIRCLE_SUCCESS, +} from '../actions/compose'; const initialState = ImmutableList(); @@ -71,6 +74,16 @@ const appendToCircleStatusesById = (state, circleId, statuses, next) => { })); }; +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)); + } + })); +} + export default function circles(state = initialState, action) { switch(action.type) { case CIRCLE_FETCH_SUCCESS: @@ -92,6 +105,8 @@ export default function circles(state = initialState, action) { return normalizeCircleStatuses(state, action.id, action.statuses, action.next); case CIRCLE_STATUSES_EXPAND_SUCCESS: return appendToCircleStatuses(state, action.id, action.statuses, action.next); + case COMPOSE_WITH_CIRCLE_SUCCESS: + return prependToCircleStatusById(state, action.circleId, action.status.id); default: return state; }