From 0492a8d6a057b8a82f668bf466dd6c13b23b0128 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 7 Jan 2026 16:45:10 +0200 Subject: [PATCH 1/7] fix actor type not setting --- changelog.d/actor-type.fix | 1 + src/components/user_card/user_card.js | 6 ++++-- src/components/user_card/user_card.vue | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 changelog.d/actor-type.fix diff --git a/changelog.d/actor-type.fix b/changelog.d/actor-type.fix new file mode 100644 index 000000000..a2c873c1a --- /dev/null +++ b/changelog.d/actor-type.fix @@ -0,0 +1 @@ +fixed being unable to set actor type from profile page diff --git a/src/components/user_card/user_card.js b/src/components/user_card/user_card.js index 7daee4b76..5e387d38b 100644 --- a/src/components/user_card/user_card.js +++ b/src/components/user_card/user_card.js @@ -122,6 +122,8 @@ export default { data () { const user = this.$store.getters.findUser(this.userId) + console.log('LOL', JSON.parse(JSON.stringify(user))) + return { followRequestInProgress: false, muteExpiryAmount: 0, @@ -466,8 +468,8 @@ export default { show_birthday: !!this.newShowBirthday, } - if (this.actorType) { - params.actor_type = this.actorType + if (this.newActorType) { + params.actor_type = this.newActorType } if (this.newAvatarFile !== null) { diff --git a/src/components/user_card/user_card.vue b/src/components/user_card/user_card.vue index d6edc021f..e3b1b0175 100644 --- a/src/components/user_card/user_card.vue +++ b/src/components/user_card/user_card.vue @@ -208,7 +208,7 @@ {{ $t('user_card.group') }} From 03b6178d17614c9b38c970cee219a0a52525f5ee Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 7 Jan 2026 21:01:34 +0200 Subject: [PATCH 2/7] fix missing string --- src/i18n/en.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/i18n/en.json b/src/i18n/en.json index 05a2d5ae5..099a31f64 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -1684,6 +1684,7 @@ "muted": "Muted", "mute_confirm_title": "Mute confirmation", "mute_confirm": "Do you really want to mute {user}?", + "mute_domain_confirm": "Do you really want to mute entire {domain}?", "mute_confirm_accept_button": "Mute", "mute_confirm_cancel_button": "Do not mute", "mute_or": "or", From 949aa90faaf7fa1a00714dd0cf1e013efb853c3b Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 7 Jan 2026 21:09:01 +0200 Subject: [PATCH 3/7] fixed being unable to mute/unmute domains from status context menu --- src/components/confirm_modal/mute_confirm.js | 8 ++++---- .../status_action_buttons/action_button_container.js | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/confirm_modal/mute_confirm.js b/src/components/confirm_modal/mute_confirm.js index a279dc716..b7aa5a68b 100644 --- a/src/components/confirm_modal/mute_confirm.js +++ b/src/components/confirm_modal/mute_confirm.js @@ -19,9 +19,9 @@ export default { }, keypath () { if (this.type === 'domain') { - return 'status.mute_domain_confirm' + return 'user_card.mute_domain_confirm' } else if (this.type === 'conversation') { - return 'status.mute_conversation_confirm' + return 'user_card.mute_conversation_confirm' } }, conversationIsMuted () { @@ -62,9 +62,9 @@ export default { switch (this.type) { case 'domain': { if (!this.domainIsMuted) { - this.$store.dispatch('muteDomain', { id: this.domain }) + this.$store.dispatch('muteDomain', this.domain) } else { - this.$store.dispatch('unmuteDomain', { id: this.domain }) + this.$store.dispatch('unmuteDomain', this.domain) } break } diff --git a/src/components/status_action_buttons/action_button_container.js b/src/components/status_action_buttons/action_button_container.js index a8f20800b..5ea8db013 100644 --- a/src/components/status_action_buttons/action_button_container.js +++ b/src/components/status_action_buttons/action_button_container.js @@ -65,7 +65,7 @@ export default { return this.$store.dispatch('unmuteConversation', { id: this.status.id }) }, unmuteDomain () { - return this.$store.dispatch('unmuteDomain', this.user.id) + return this.$store.dispatch('unmuteDomain', this.domain) }, toggleUserMute () { if (this.userIsMuted) { From 0dc8305e95412426d6123f4361c328ff5dfcee94 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 7 Jan 2026 23:15:23 +0200 Subject: [PATCH 4/7] don't display muted label on profile since backend doesn't work this way improve display logic for mute/block cards --- src/components/block_card/block_card.js | 4 ++-- src/components/mute_card/mute_card.js | 4 ++-- src/components/user_card/user_card.js | 10 +++------- src/components/user_card/user_card.vue | 12 ------------ .../entity_normalizer/entity_normalizer.service.js | 10 ++++++++-- 5 files changed, 15 insertions(+), 25 deletions(-) diff --git a/src/components/block_card/block_card.js b/src/components/block_card/block_card.js index 9a618db3f..2d4b17ef8 100644 --- a/src/components/block_card/block_card.js +++ b/src/components/block_card/block_card.js @@ -15,10 +15,10 @@ const BlockCard = { return this.relationship.blocking }, blockExpiryAvailable () { - return this.user.block_expires_at !== undefined + return Object.hasOwn(this.user, 'block_expires_at') }, blockExpiry () { - return this.user.block_expires_at == null + return this.user.block_expires_at === false ? this.$t('user_card.block_expires_forever') : this.$t('user_card.block_expires_at', [new Date(this.user.mute_expires_at).toLocaleString()]) }, diff --git a/src/components/mute_card/mute_card.js b/src/components/mute_card/mute_card.js index 895586888..592df8dfe 100644 --- a/src/components/mute_card/mute_card.js +++ b/src/components/mute_card/mute_card.js @@ -14,10 +14,10 @@ const MuteCard = { return this.relationship.muting }, muteExpiryAvailable () { - return this.user.mute_expires_at !== undefined + return Object.hasOwn(this.user, 'mute_expires_at') }, muteExpiry () { - return this.user.mute_expires_at == null + return this.user.mute_expires_at === false ? this.$t('user_card.mute_expires_forever') : this.$t('user_card.mute_expires_at', [new Date(this.user.mute_expires_at).toLocaleString()]) } diff --git a/src/components/user_card/user_card.js b/src/components/user_card/user_card.js index 5e387d38b..ccc03b414 100644 --- a/src/components/user_card/user_card.js +++ b/src/components/user_card/user_card.js @@ -122,12 +122,8 @@ export default { data () { const user = this.$store.getters.findUser(this.userId) - console.log('LOL', JSON.parse(JSON.stringify(user))) - return { followRequestInProgress: false, - muteExpiryAmount: 0, - muteExpiryUnit: 'minutes', // Editable stuff editImage: false, @@ -261,15 +257,15 @@ export default { return 'note' in this.relationship }, muteExpiryAvailable () { - return this.user.mute_expires_at !== undefined + return Object.hasOwn(this.user, 'mute_expires_at') }, muteExpiry () { - return this.user.mute_expires_at == null + return this.user.mute_expires_at === false ? this.$t('user_card.mute_expires_forever') : this.$t('user_card.mute_expires_at', [new Date(this.user.mute_expires_at).toLocaleString()]) }, blockExpiryAvailable () { - return this.user.block_expires_at !== undefined + return Object.hasOwn(this.user, 'block_expires_at') }, blockExpiry () { return this.user.block_expires_at == null diff --git a/src/components/user_card/user_card.vue b/src/components/user_card/user_card.vue index e3b1b0175..66529f59b 100644 --- a/src/components/user_card/user_card.vue +++ b/src/components/user_card/user_card.vue @@ -212,18 +212,6 @@ > {{ $t('user_card.group') }} - - {{ muteExpiry }} - - - {{ blockExpiry }} - diff --git a/src/services/entity_normalizer/entity_normalizer.service.js b/src/services/entity_normalizer/entity_normalizer.service.js index 28f1bc2aa..36b42dd47 100644 --- a/src/services/entity_normalizer/entity_normalizer.service.js +++ b/src/services/entity_normalizer/entity_normalizer.service.js @@ -51,8 +51,14 @@ export const parseUser = (data) => { output.screen_name = data.acct output.fqn = data.fqn output.statusnet_profile_url = data.url - output.mute_expires_at = data.mute_expires_at - output.block_expires_at = data.block_expires_at + + if (Object.hasOwn(data, 'mute_expires_at')) { + output.mute_expires_at = data.mute_expires_at == null ? false : data.mute_expires_at + } + + if (Object.hasOwn(data, 'block_expires_at')) { + output.block_expires_at = data.block_expires_at == null ? false : data.block_expires_at + } // There's nothing else to get if (mastoShort) { From 1e08616b1f38f926821d86b32515fe5889ef9b08 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Thu, 8 Jan 2026 19:14:58 +0200 Subject: [PATCH 5/7] unescape --- src/components/user_card/user_card.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/user_card/user_card.js b/src/components/user_card/user_card.js index f81d23842..0786e5b35 100644 --- a/src/components/user_card/user_card.js +++ b/src/components/user_card/user_card.js @@ -1,6 +1,6 @@ import isEqual from 'lodash/isEqual' import merge from 'lodash/merge' -import unescape from 'lodash/unescape' +import ldUnescape from 'lodash/unescape' import { mapGetters } from 'vuex' import Checkbox from 'src/components/checkbox/checkbox.vue' @@ -128,7 +128,7 @@ export default { newName: user.name_unescaped, editingName: false, - newBio: unescape(user.description), + newBio: ldUnescape(user.description), editingBio: false, newAvatar: null, @@ -156,7 +156,7 @@ export default { computed: { somethingToSave() { if (this.newName !== this.user.name_unescaped) return true - if (this.newBio !== unescape(this.user.description)) return true + if (this.newBio !== ldUnescape(this.user.description)) return true if (this.newAvatar !== null) return true if (this.newBanner !== null) return true if (this.newActorType !== this.user.actor_type) return true @@ -498,7 +498,7 @@ export default { const user = this.$store.state.users.currentUser this.newName = user.name_unescaped - this.newBio = unescape(user.description) + this.newBio = ldUnescape(user.description) this.newAvatar = null this.newAvatarFile = null From 69edded5b0320e64b0be5c7713953ef78a6d3070 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Thu, 8 Jan 2026 22:09:18 +0200 Subject: [PATCH 6/7] fix error when clicking mute.. item --- src/components/status_action_buttons/status_action_buttons.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/status_action_buttons/status_action_buttons.js b/src/components/status_action_buttons/status_action_buttons.js index d53ef3271..8473a0db1 100644 --- a/src/components/status_action_buttons/status_action_buttons.js +++ b/src/components/status_action_buttons/status_action_buttons.js @@ -98,7 +98,7 @@ const StatusActionButtons = { }, doActionReal(button) { button - .action(this.funcArg) + .action?.(this.funcArg) .then(() => this.$emit('onSuccess')) .catch((err) => this.$emit('onError', err.error.error)) }, From 320899c9a2a04913bfcbb567b122a25cee892a4c Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Mon, 12 Jan 2026 22:09:32 +0200 Subject: [PATCH 7/7] more changelogs --- changelog.d/error-mute.fix | 1 + changelog.d/mute-domain.fix | 1 + 2 files changed, 2 insertions(+) create mode 100644 changelog.d/error-mute.fix create mode 100644 changelog.d/mute-domain.fix diff --git a/changelog.d/error-mute.fix b/changelog.d/error-mute.fix new file mode 100644 index 000000000..31e7bed12 --- /dev/null +++ b/changelog.d/error-mute.fix @@ -0,0 +1 @@ +fixed error when clicking mute menu itself (instead of submenu items) diff --git a/changelog.d/mute-domain.fix b/changelog.d/mute-domain.fix new file mode 100644 index 000000000..9f5b378bb --- /dev/null +++ b/changelog.d/mute-domain.fix @@ -0,0 +1 @@ +fixed mute -> domain status submenu not working