From f12789ec33d619c8c406b295a65c35b341a74805 Mon Sep 17 00:00:00 2001 From: ChaosExAnima Date: Fri, 11 Sep 2026 18:20:46 +0200 Subject: [PATCH] adds isLoading to translation state --- .../mastodon/components/status/content.stories.tsx | 1 + app/javascript/mastodon/components/status_content.jsx | 2 +- app/javascript/mastodon/models/status.ts | 4 +++- app/javascript/mastodon/reducers/statuses.js | 5 ++++- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/javascript/mastodon/components/status/content.stories.tsx b/app/javascript/mastodon/components/status/content.stories.tsx index 1789861d6ce..4f8d0f19d30 100644 --- a/app/javascript/mastodon/components/status/content.stories.tsx +++ b/app/javascript/mastodon/components/status/content.stories.tsx @@ -29,6 +29,7 @@ const meta = { spoilerHtml: '', language: args.translatedTo, detected_source_language: 'en', + isLoading: false, } satisfies StatusTranslation; } diff --git a/app/javascript/mastodon/components/status_content.jsx b/app/javascript/mastodon/components/status_content.jsx index eb2149a290b..54471a1073b 100644 --- a/app/javascript/mastodon/components/status_content.jsx +++ b/app/javascript/mastodon/components/status_content.jsx @@ -41,7 +41,7 @@ class TranslateButton extends PureComponent { render () { const { translation, onClick } = this.props; - if (translation) { + if (translation && !translation.get('isLoading')) { const language = preloadedLanguages.find(lang => lang[0] === translation.get('detected_source_language')); const languageName = language ? language[1] : translation.get('detected_source_language'); const provider = translation.get('provider'); diff --git a/app/javascript/mastodon/models/status.ts b/app/javascript/mastodon/models/status.ts index 8999f19c0fb..33d1a8e97f7 100644 --- a/app/javascript/mastodon/models/status.ts +++ b/app/javascript/mastodon/models/status.ts @@ -156,4 +156,6 @@ export type FilterResult = Omit & { filter: string; }; -export type StatusTranslation = Omit; +export type StatusTranslation = Omit & { + isLoading: boolean; +}; diff --git a/app/javascript/mastodon/reducers/statuses.js b/app/javascript/mastodon/reducers/statuses.js index cf17c066c37..bf3698a5c3e 100644 --- a/app/javascript/mastodon/reducers/statuses.js +++ b/app/javascript/mastodon/reducers/statuses.js @@ -24,6 +24,7 @@ import { STATUS_REVEAL, STATUS_HIDE, STATUS_COLLAPSE, + STATUS_TRANSLATE_REQUEST, STATUS_TRANSLATE_SUCCESS, STATUS_TRANSLATE_UNDO, STATUS_FETCH_REQUEST, @@ -46,7 +47,7 @@ const deleteStatus = (state, id, references) => { const statusTranslateSuccess = (state, id, translation) => { return state.withMutations(map => { - map.setIn([id, 'translation'], fromJS(normalizeStatusTranslation(translation, map.get(id)))); + map.setIn([id, 'translation'], fromJS(normalizeStatusTranslation(translation, map.get(id))).set('isLoading', false)); const list = map.getIn([id, 'media_attachments']); if (translation.media_attachments && list) { @@ -146,6 +147,8 @@ export default function statuses(state = initialState, action) { return state.setIn([action.id, 'collapsed'], action.isCollapsed); case timelineDelete.type: return deleteStatus(state, action.payload.statusId, action.payload.references); + case STATUS_TRANSLATE_REQUEST: + return state.setIn([action.id, 'translation', 'isLoading'], true); case STATUS_TRANSLATE_SUCCESS: return statusTranslateSuccess(state, action.id, action.translation); case STATUS_TRANSLATE_UNDO: