From 3dd2570c2d3d1aa8b1eef991fd93259992018f32 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 4 Aug 2026 17:17:05 +0300 Subject: [PATCH 01/22] cherry-pick this into 2.11.3 fixes --- src/components/moderation_tools/moderation_tools.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/moderation_tools/moderation_tools.js b/src/components/moderation_tools/moderation_tools.js index ca4852ab3..ba13afc8b 100644 --- a/src/components/moderation_tools/moderation_tools.js +++ b/src/components/moderation_tools/moderation_tools.js @@ -405,7 +405,7 @@ const ModerationTools = { ) }, isAdmin() { - this.$store.state.users.currentUser.role === 'admin' + return this.$store.state.users.currentUser.role === 'admin' }, }, methods: { From ab2a011183f6c4808acad62f7ed65ba37ebd076c Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 4 Aug 2026 17:22:33 +0300 Subject: [PATCH 02/22] also cherry-pick? --- .../notifications_fetcher/notifications_fetcher.service.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/services/notifications_fetcher/notifications_fetcher.service.js b/src/services/notifications_fetcher/notifications_fetcher.service.js index 8530c468c..0e0bc0277 100644 --- a/src/services/notifications_fetcher/notifications_fetcher.service.js +++ b/src/services/notifications_fetcher/notifications_fetcher.service.js @@ -66,7 +66,8 @@ const fetchAndUpdate = ({ store, credentials, older = false, sinceId }) => { const unreadNotifsIds = notifications .filter((n) => !n.seen) .map((n) => n.id) - if (readNotifsIds.length > 0 && readNotifsIds.length > 0) { + + if (readNotifsIds.length > 0 && unreadNotifsIds.length > 0) { const minId = Math.min(...unreadNotifsIds) // Oldest known unread notification if (minId !== Infinity) { args.sinceId = null // Don't use since_id since it sorta conflicts with min_id From 4c8b5fe68b911621b4dde49de2041147c8a9da33 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 4 Aug 2026 17:32:02 +0300 Subject: [PATCH 03/22] fix domain unmuting --- changelog.d/fix-domain-mute.fix | 1 + changelog.d/moderation-tools.fix | 1 + src/modules/users.js | 6 ++++-- 3 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 changelog.d/fix-domain-mute.fix create mode 100644 changelog.d/moderation-tools.fix diff --git a/changelog.d/fix-domain-mute.fix b/changelog.d/fix-domain-mute.fix new file mode 100644 index 000000000..1cb910d22 --- /dev/null +++ b/changelog.d/fix-domain-mute.fix @@ -0,0 +1 @@ +domain mute fixedw diff --git a/changelog.d/moderation-tools.fix b/changelog.d/moderation-tools.fix new file mode 100644 index 000000000..1417048a5 --- /dev/null +++ b/changelog.d/moderation-tools.fix @@ -0,0 +1 @@ +fix moderation tools button possibly not appearing for admins diff --git a/src/modules/users.js b/src/modules/users.js index b58566859..0ecee269f 100644 --- a/src/modules/users.js +++ b/src/modules/users.js @@ -40,6 +40,8 @@ import { muteUser as apiMuteUser, unblockUser as apiUnblockUser, unmuteUser as apiUnmuteUser, + muteDomain as apiMuteDomain, + unmuteDomain as apiUnmuteDomain, fetchBlocks, fetchDomainMutes, fetchMutes, @@ -170,14 +172,14 @@ const showReblogs = (store, userId) => { } const muteDomain = (store, domain) => { - return muteDomain({ + return apiMuteDomain({ domain, credentials: useOAuthStore().token, }).then(() => store.commit('addDomainMute', domain)) } const unmuteDomain = (store, domain) => { - return unmuteDomain({ + return apiUnmuteDomain({ domain, credentials: useOAuthStore().token, }).then(() => store.commit('removeDomainMute', domain)) From 69da111951a1df3191077f48c89e96d74bf20947 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 5 Aug 2026 18:39:49 +0300 Subject: [PATCH 04/22] fix #3525 --- src/components/image_cropper/image_cropper.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/components/image_cropper/image_cropper.js b/src/components/image_cropper/image_cropper.js index c8529c8e6..c7a213a4f 100644 --- a/src/components/image_cropper/image_cropper.js +++ b/src/components/image_cropper/image_cropper.js @@ -70,6 +70,9 @@ const ImageCropper = { ) }, onCropperSelectionChange(event) { + if (!this.$refs.cropperCanvas) { + return // Cropper sends even before component is fully initialized + } const cropperCanvas = this.$refs.cropperCanvas const cropperCanvasRect = cropperCanvas.getBoundingClientRect() const selection = event.detail From 15a59100656e79ae3acc60cabca431a030d76ba4 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 5 Aug 2026 18:40:53 +0300 Subject: [PATCH 05/22] changelog --- changelog.d/avatar_upload.fix | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/avatar_upload.fix diff --git a/changelog.d/avatar_upload.fix b/changelog.d/avatar_upload.fix new file mode 100644 index 000000000..b5dd9ee56 --- /dev/null +++ b/changelog.d/avatar_upload.fix @@ -0,0 +1 @@ +fix image cropper error preventing avatar upload From 05d3fdd62ca5f90b15ec6bfb86c9c87f15b1ff84 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 5 Aug 2026 19:13:07 +0300 Subject: [PATCH 06/22] fix third column setting change not affecting UI immideately --- src/App.js | 24 ++++++++++++------- src/components/notifications/notifications.js | 6 +++-- .../settings_modal/helpers/setting.js | 5 +++- .../settings_modal/tabs/layout_tab.js | 6 +++++ .../settings_modal/tabs/layout_tab.vue | 1 + 5 files changed, 30 insertions(+), 12 deletions(-) diff --git a/src/App.js b/src/App.js index 4ce6f1abc..c5b38d958 100644 --- a/src/App.js +++ b/src/App.js @@ -74,6 +74,8 @@ export default { }, data: () => ({ mobileActivePanel: 'timeline', + updateMobileState: null, + updateScrollState: null, }), provide() { return { @@ -211,22 +213,26 @@ export default { hideShoutbox() { return this.isChats || useMergedConfigStore().mergedConfig.hideShoutbox }, + thirdColumnMode() { + return this.mergedConfig.thirdColumnMode + }, + reverseSetting() { + return this.mergedConfig.sidebarRight + }, reverseLayout() { - const { thirdColumnMode, sidebarRight: reverseSetting } = - useMergedConfigStore().mergedConfig if (this.layoutType !== 'wide') { - return reverseSetting + return this.reverseSetting } else { - return thirdColumnMode === 'notifications' - ? reverseSetting - : !reverseSetting + return this.thirdColumnMode === 'notifications' + ? this.reverseSetting + : !this.reverseSetting } }, noSticky() { - return useMergedConfigStore().mergedConfig.disableStickyHeaders + return this.mergedConfig.disableStickyHeaders }, showScrollbars() { - return useMergedConfigStore().mergedConfig.showScrollbars + return this.mergedConfig.showScrollbars }, scrollParent() { return window /* this.$refs.appContentRef */ @@ -234,7 +240,7 @@ export default { showInstanceSpecificPanel() { return ( this.instanceSpecificPanelPresent && - !useMergedConfigStore().mergedConfig.hideISP + !this.mergedConfig.hideISP ) }, ...mapState(useMergedConfigStore, ['mergedConfig']), diff --git a/src/components/notifications/notifications.js b/src/components/notifications/notifications.js index 393aef639..5ae6014bc 100644 --- a/src/components/notifications/notifications.js +++ b/src/components/notifications/notifications.js @@ -134,12 +134,11 @@ const Notifications = { return this.minimalMode || layoutType === 'mobile' }, teleportTarget() { - const { layoutType } = useInterfaceStore() const map = { wide: '#notifs-column', mobile: '#mobile-notifications', } - return map[layoutType] || '#notifs-sidebar' + return map[this.layoutType] || '#notifs-sidebar' }, popoversZLayer() { const { layoutType } = useInterfaceStore() @@ -162,6 +161,9 @@ const Notifications = { }, ...mapState(useAnnouncementsStore, ['unreadAnnouncementCount']), ...mapState(useChatsStore, ['unreadChatsCount']), + ...mapState(useInterfaceStore, [ + 'layoutType', + ]), }, mounted() { this.scrollerRef = this.$refs.root.closest('.column.-scrollable') diff --git a/src/components/settings_modal/helpers/setting.js b/src/components/settings_modal/helpers/setting.js index c2f5279f6..6b7f33925 100644 --- a/src/components/settings_modal/helpers/setting.js +++ b/src/components/settings_modal/helpers/setting.js @@ -113,6 +113,7 @@ export default { localDraft: null, } }, + emits: ['update:modelValue'], created() { if ( this.realDraftMode && @@ -244,7 +245,7 @@ export default { }, configSink() { if (this.path == null) { - return (k, v) => this.$emit('update:modelValue', v) + return () => {} } switch (this.realSource) { @@ -385,11 +386,13 @@ export default { if (this.realDraftMode) { this.draft = this.getValue(e) } else { + this.$emit('update:modelValue', this.getValue(e)) this.configSink(this.path, this.getValue(e)) } }, commitDraft() { if (this.realDraftMode) { + this.$emit('update:modelValue', v) this.configSink(this.path, this.draft) } }, diff --git a/src/components/settings_modal/tabs/layout_tab.js b/src/components/settings_modal/tabs/layout_tab.js index fc56e1392..c1a3cd3b4 100644 --- a/src/components/settings_modal/tabs/layout_tab.js +++ b/src/components/settings_modal/tabs/layout_tab.js @@ -7,6 +7,7 @@ import UnitSetting from '../helpers/unit_setting.vue' import { useInstanceCapabilitiesStore } from 'src/stores/instance_capabilities.js' import { useMergedConfigStore } from 'src/stores/merged_config.js' +import { useInterfaceStore } from 'src/stores/interface.js' const GeneralTab = { data() { @@ -46,6 +47,11 @@ const GeneralTab = { }, ...SharedComputedObject(), }, + methods: { + updateLayout() { + useInterfaceStore().setLayoutWidth() + }, + }, } export default GeneralTab diff --git a/src/components/settings_modal/tabs/layout_tab.vue b/src/components/settings_modal/tabs/layout_tab.vue index 0035f3a11..b649572fb 100644 --- a/src/components/settings_modal/tabs/layout_tab.vue +++ b/src/components/settings_modal/tabs/layout_tab.vue @@ -105,6 +105,7 @@ id="thirdColumnMode" path="thirdColumnMode" :options="thirdColumnModeOptions" + @change="updateLayout" > {{ $t('settings.third_column_mode') }} From 5b6f55e15ed578d643f63eb370500993a00b597b Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 5 Aug 2026 19:13:58 +0300 Subject: [PATCH 07/22] changelog --- changelog.d/third_column.fix | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/third_column.fix diff --git a/changelog.d/third_column.fix b/changelog.d/third_column.fix new file mode 100644 index 000000000..191e914d5 --- /dev/null +++ b/changelog.d/third_column.fix @@ -0,0 +1 @@ +Fixed layout selector (third column/reverse) not working immideately upon change From b4c00f4263d56f4dfe035b6e912fe486020968cf Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 5 Aug 2026 19:15:37 +0300 Subject: [PATCH 08/22] lint --- src/App.js | 5 +---- src/components/notifications/notifications.js | 4 +--- src/components/settings_modal/helpers/setting.js | 4 ++-- src/components/settings_modal/tabs/layout_tab.js | 2 +- 4 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/App.js b/src/App.js index c5b38d958..d7a63bd8a 100644 --- a/src/App.js +++ b/src/App.js @@ -238,10 +238,7 @@ export default { return window /* this.$refs.appContentRef */ }, showInstanceSpecificPanel() { - return ( - this.instanceSpecificPanelPresent && - !this.mergedConfig.hideISP - ) + return this.instanceSpecificPanelPresent && !this.mergedConfig.hideISP }, ...mapState(useMergedConfigStore, ['mergedConfig']), ...mapState(useInterfaceStore, [ diff --git a/src/components/notifications/notifications.js b/src/components/notifications/notifications.js index 5ae6014bc..feb59857e 100644 --- a/src/components/notifications/notifications.js +++ b/src/components/notifications/notifications.js @@ -161,9 +161,7 @@ const Notifications = { }, ...mapState(useAnnouncementsStore, ['unreadAnnouncementCount']), ...mapState(useChatsStore, ['unreadChatsCount']), - ...mapState(useInterfaceStore, [ - 'layoutType', - ]), + ...mapState(useInterfaceStore, ['layoutType']), }, mounted() { this.scrollerRef = this.$refs.root.closest('.column.-scrollable') diff --git a/src/components/settings_modal/helpers/setting.js b/src/components/settings_modal/helpers/setting.js index 6b7f33925..92d36b207 100644 --- a/src/components/settings_modal/helpers/setting.js +++ b/src/components/settings_modal/helpers/setting.js @@ -245,7 +245,7 @@ export default { }, configSink() { if (this.path == null) { - return () => {} + return () => {/* no-op */} } switch (this.realSource) { @@ -392,7 +392,7 @@ export default { }, commitDraft() { if (this.realDraftMode) { - this.$emit('update:modelValue', v) + this.$emit('update:modelValue', this.draft) this.configSink(this.path, this.draft) } }, diff --git a/src/components/settings_modal/tabs/layout_tab.js b/src/components/settings_modal/tabs/layout_tab.js index c1a3cd3b4..50761fa43 100644 --- a/src/components/settings_modal/tabs/layout_tab.js +++ b/src/components/settings_modal/tabs/layout_tab.js @@ -6,8 +6,8 @@ import SharedComputedObject from '../helpers/shared_computed_object.js' import UnitSetting from '../helpers/unit_setting.vue' import { useInstanceCapabilitiesStore } from 'src/stores/instance_capabilities.js' -import { useMergedConfigStore } from 'src/stores/merged_config.js' import { useInterfaceStore } from 'src/stores/interface.js' +import { useMergedConfigStore } from 'src/stores/merged_config.js' const GeneralTab = { data() { From fbcfbb757c35ec17c954e5c2c9205976541d14e1 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 5 Aug 2026 19:18:33 +0300 Subject: [PATCH 09/22] lint --- src/components/settings_modal/helpers/setting.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/settings_modal/helpers/setting.js b/src/components/settings_modal/helpers/setting.js index 92d36b207..f7cd1ca91 100644 --- a/src/components/settings_modal/helpers/setting.js +++ b/src/components/settings_modal/helpers/setting.js @@ -245,7 +245,9 @@ export default { }, configSink() { if (this.path == null) { - return () => {/* no-op */} + return () => { + /* no-op */ + } } switch (this.realSource) { From 0fbf6704f27b62ce9210a8f03cdfe5d66ee13571 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 5 Aug 2026 19:56:57 +0300 Subject: [PATCH 10/22] fix cjk pinned display --- src/components/status/status.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/status/status.scss b/src/components/status/status.scss index 1214d8b12..1b0e3cf3e 100644 --- a/src/components/status/status.scss +++ b/src/components/status/status.scss @@ -119,6 +119,7 @@ display: flex; flex-shrink: 0; align-self: baseline; + word-break: keep-all; .button-unstyled { padding: 0.2em; From d64daed77de1fad69ec4cdae32a85fd6bbae912e Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 5 Aug 2026 19:57:34 +0300 Subject: [PATCH 11/22] changelog --- changelog.d/cjk.fix | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/cjk.fix diff --git a/changelog.d/cjk.fix b/changelog.d/cjk.fix new file mode 100644 index 000000000..861c6cb91 --- /dev/null +++ b/changelog.d/cjk.fix @@ -0,0 +1 @@ +fix pinned indicator looking wrong on CJK locales From 4786358a83a24950e0cbd18170e48ccb1c2db7ef Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 11 Aug 2026 11:35:42 +0300 Subject: [PATCH 12/22] lint --- src/modules/users.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/users.js b/src/modules/users.js index 0ecee269f..f5d84f365 100644 --- a/src/modules/users.js +++ b/src/modules/users.js @@ -37,11 +37,11 @@ import { import { blockUser as apiBlockUser, editUserNote as apiEditUserNote, + muteDomain as apiMuteDomain, muteUser as apiMuteUser, unblockUser as apiUnblockUser, - unmuteUser as apiUnmuteUser, - muteDomain as apiMuteDomain, unmuteDomain as apiUnmuteDomain, + unmuteUser as apiUnmuteUser, fetchBlocks, fetchDomainMutes, fetchMutes, From 26a5a3fd0bd7b681b402a7e4e6247063a322afbf Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 11 Aug 2026 11:41:07 +0300 Subject: [PATCH 13/22] fix occasional bug with notifications needsMute --- src/modules/notifications.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/modules/notifications.js b/src/modules/notifications.js index b77683811..40e589b99 100644 --- a/src/modules/notifications.js +++ b/src/modules/notifications.js @@ -85,6 +85,10 @@ export const notifications = { return true }) + commit('addNewUsers', validNotifications.map( + (notification) => notification.from_profile, + )) + const statusNotifications = validNotifications.filter( (notification) => isStatusNotification(notification.type) && notification.status, From 9c7ff2ab6135ea51b09f3d36a1d898e0f86a709a Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 11 Aug 2026 13:21:30 +0300 Subject: [PATCH 14/22] fix extra items tap --- changelog.d/actions-extra-tap.fix | 1 + src/components/status_action_buttons/action_button.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 changelog.d/actions-extra-tap.fix diff --git a/changelog.d/actions-extra-tap.fix b/changelog.d/actions-extra-tap.fix new file mode 100644 index 000000000..cb54c2e35 --- /dev/null +++ b/changelog.d/actions-extra-tap.fix @@ -0,0 +1 @@ +fixed tapping "Mute..." and "Change visiblity" (admin action) in extra status actions closing the dropdown diff --git a/src/components/status_action_buttons/action_button.js b/src/components/status_action_buttons/action_button.js index 1a5b85301..91984caea 100644 --- a/src/components/status_action_buttons/action_button.js +++ b/src/components/status_action_buttons/action_button.js @@ -168,7 +168,7 @@ export default { setTimeout(() => { this.animationState = false }, 500) - close() + if(!this.button.dropdown) close() } }, }, From a1822a59105d99dfd0198481ed45070173442a6d Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 11 Aug 2026 13:45:14 +0300 Subject: [PATCH 15/22] fix themes v3 not loading --- changelog.d/themes3.fix | 1 + src/api/helpers.js | 5 +++-- src/services/style_setter/style_setter.js | 5 ++++- 3 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 changelog.d/themes3.fix diff --git a/changelog.d/themes3.fix b/changelog.d/themes3.fix new file mode 100644 index 000000000..a3192b263 --- /dev/null +++ b/changelog.d/themes3.fix @@ -0,0 +1 @@ +Fixed themes 3 not loading in appearance tab diff --git a/src/api/helpers.js b/src/api/helpers.js index cb2f2bdd5..b033d80b8 100644 --- a/src/api/helpers.js +++ b/src/api/helpers.js @@ -71,6 +71,7 @@ export const promisedRequest = async ({ url, payload, formData, + forceContentType, cache, credentials, headers = {}, @@ -79,7 +80,7 @@ export const promisedRequest = async ({ method, credentials: 'same-origin', headers: { - Accept: 'application/json', + Accept: forceContentType ?? 'application/json', ...headers, }, } @@ -114,7 +115,7 @@ export const promisedRequest = async ({ ) if (contentLength === 0) return null - switch (contentType) { + switch (forceContentType ?? contentType) { case 'text/plain': return await response.text() case 'application/json': diff --git a/src/services/style_setter/style_setter.js b/src/services/style_setter/style_setter.js index cb445d2c1..43eaeb3e5 100644 --- a/src/services/style_setter/style_setter.js +++ b/src/services/style_setter/style_setter.js @@ -307,7 +307,9 @@ export const applyStyleConfig = (input) => { adoptStyleSheets() } -export const getResourcesIndex = async (url, parser = (x) => x) => { +const noop = (x) => x + +export const getResourcesIndex = async (url, parser = noop) => { const cache = 'no-store' const customUrl = url.replace(/\.(\w+)$/, '.custom.$1') let builtin @@ -324,6 +326,7 @@ export const getResourcesIndex = async (url, parser = (x) => x) => { promisedRequest({ url: v, cache, + forceContentType: parser === noop ? null : 'text/plain', }) .then(({ data: text }) => parser(text)) .catch((e) => { From 65c6cb1d0e6cbe6de2d491c86c015a254a1b434c Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 11 Aug 2026 13:49:06 +0300 Subject: [PATCH 16/22] fix themes 2 fonts --- changelog.d/themes2-font.fix | 1 + src/services/theme_data/theme2_to_theme3.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 changelog.d/themes2-font.fix diff --git a/changelog.d/themes2-font.fix b/changelog.d/themes2-font.fix new file mode 100644 index 000000000..0842fae8a --- /dev/null +++ b/changelog.d/themes2-font.fix @@ -0,0 +1 @@ +Fix Themes 2.0 applying incorrect fonts diff --git a/src/services/theme_data/theme2_to_theme3.js b/src/services/theme_data/theme2_to_theme3.js index 5bab4818c..51dc3e2c4 100644 --- a/src/services/theme_data/theme2_to_theme3.js +++ b/src/services/theme_data/theme2_to_theme3.js @@ -262,7 +262,7 @@ export const convertTheme2To3 = (data) => { Object.keys(data.fonts || {}).forEach((key) => { if (!fontsKeys.has(key)) return if (!data.fonts[key]) return - const originalFont = data.fonts[key] + const originalFont = data.fonts[key].family const rule = { source: '2to3' } switch (key) { From d175e6d4e68c24671e6beb9b646ee73ea780b86d Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 11 Aug 2026 13:51:50 +0300 Subject: [PATCH 17/22] lint --- src/components/status_action_buttons/action_button.js | 2 +- src/modules/notifications.js | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/components/status_action_buttons/action_button.js b/src/components/status_action_buttons/action_button.js index 91984caea..68c10efa2 100644 --- a/src/components/status_action_buttons/action_button.js +++ b/src/components/status_action_buttons/action_button.js @@ -168,7 +168,7 @@ export default { setTimeout(() => { this.animationState = false }, 500) - if(!this.button.dropdown) close() + if (!this.button.dropdown) close() } }, }, diff --git a/src/modules/notifications.js b/src/modules/notifications.js index 40e589b99..eb73b2024 100644 --- a/src/modules/notifications.js +++ b/src/modules/notifications.js @@ -85,9 +85,10 @@ export const notifications = { return true }) - commit('addNewUsers', validNotifications.map( - (notification) => notification.from_profile, - )) + commit( + 'addNewUsers', + validNotifications.map((notification) => notification.from_profile), + ) const statusNotifications = validNotifications.filter( (notification) => From ce9325c257a68517f4042d772b343446a78ee918 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 11 Aug 2026 14:19:58 +0300 Subject: [PATCH 18/22] fix quoted users not appearing in store --- src/modules/statuses.js | 2 +- src/modules/users.js | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/modules/statuses.js b/src/modules/statuses.js index ee5e50a39..03469a68c 100644 --- a/src/modules/statuses.js +++ b/src/modules/statuses.js @@ -881,7 +881,7 @@ const statuses = { 'addNewUsers', data.statuses.map((s) => s.user).filter((u) => u), ) - store.commit('addNewStatuses', { + store.dispatch('addNewStatuses', { statuses: data.statuses, }) diff --git a/src/modules/users.js b/src/modules/users.js index f5d84f365..fcbc623bd 100644 --- a/src/modules/users.js +++ b/src/modules/users.js @@ -619,8 +619,11 @@ const users = { addNewStatuses(store, { statuses }) { const users = map(statuses, 'user') const retweetedUsers = compact(map(statuses, 'retweeted_status.user')) + const quotedUsers = compact(map(statuses, 'quote.user')) + store.commit('addNewUsers', users) store.commit('addNewUsers', retweetedUsers) + store.commit('addNewUsers', quotedUsers) each(statuses, (status) => { // Reconnect users to statuses From 4f2aa72abdb30e2942eadcdb0ad524d7404f335d Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 11 Aug 2026 14:20:56 +0300 Subject: [PATCH 19/22] fix error related to fetching chats --- src/modules/api.js | 4 ++-- src/modules/users.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/modules/api.js b/src/modules/api.js index e26336c05..3d223d6cc 100644 --- a/src/modules/api.js +++ b/src/modules/api.js @@ -212,7 +212,7 @@ const api = { if (state.mastoUserSocketStatus !== WSConnectionStatus.ERROR) { dispatch('startFetchingTimeline', { timeline: 'friends' }) dispatch('startFetchingNotifications') - dispatch('startFetchingChats') + useChatsStore().startFetchingChats() useInterfaceStore().pushGlobalNotice({ level: 'error', messageKey: 'timeline.socket_broke', @@ -234,7 +234,7 @@ const api = { stopMastoUserSocket({ state, dispatch }) { dispatch('startFetchingTimeline', { timeline: 'friends' }) dispatch('startFetchingNotifications') - dispatch('startFetchingChats') + useChatsStore().startFetchingChats() state.mastoUserSocket.close() }, diff --git a/src/modules/users.js b/src/modules/users.js index fcbc623bd..a145a80e0 100644 --- a/src/modules/users.js +++ b/src/modules/users.js @@ -798,7 +798,7 @@ const users = { if (useInstanceCapabilitiesStore().pleromaChatMessagesAvailable) { // Start fetching chats - dispatch('startFetchingChats') + useChatsStore().startFetchingChats() } } From 23b65d25ca36ec4d2689c9c1126ee60e998ef495 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 11 Aug 2026 14:30:44 +0300 Subject: [PATCH 20/22] don't close user popover on moderation confirmation --- changelog.d/moderation.fix | 1 + src/components/moderation_tools/moderation_tools.js | 3 +-- src/components/moderation_tools/moderation_tools.vue | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 changelog.d/moderation.fix diff --git a/changelog.d/moderation.fix b/changelog.d/moderation.fix new file mode 100644 index 000000000..c206a5ea8 --- /dev/null +++ b/changelog.d/moderation.fix @@ -0,0 +1 @@ +Fixed moderation actions requiring confirmation closing user popover diff --git a/src/components/moderation_tools/moderation_tools.js b/src/components/moderation_tools/moderation_tools.js index ba13afc8b..886ae9e0c 100644 --- a/src/components/moderation_tools/moderation_tools.js +++ b/src/components/moderation_tools/moderation_tools.js @@ -516,8 +516,7 @@ const ModerationTools = { setOpen(value) { this.open = value }, - maybeShowConfirm(close, { group, name, action, value }) { - close() + maybeShowConfirm({ group, name, action, value }) { this.confirmDialogName = name this.confirmDialogGroup = group this.confirmDialogAction = () => action() diff --git a/src/components/moderation_tools/moderation_tools.vue b/src/components/moderation_tools/moderation_tools.vue index 4da0be0ee..0d631fc5b 100644 --- a/src/components/moderation_tools/moderation_tools.vue +++ b/src/components/moderation_tools/moderation_tools.vue @@ -26,7 +26,7 @@ >