even more getter fixes

This commit is contained in:
Henry Jameson 2026-02-23 20:14:39 +02:00
commit ca0da60bcd
24 changed files with 93 additions and 56 deletions

View file

@ -1,9 +1,6 @@
import { throttle } from 'lodash'
import { mapState } from 'pinia'
import { defineAsyncComponent } from 'vue'
import { mapGetters } from 'vuex'
import messages from 'src/i18n/messages'
import localeService from 'src/services/locale/locale.service.js'
import DesktopNav from './components/desktop_nav/desktop_nav.vue'
import EditStatusModal from './components/edit_status_modal/edit_status_modal.vue'
@ -24,14 +21,17 @@ import WhoToFollowPanel from './components/who_to_follow_panel/who_to_follow_pan
import { getOrCreateServiceWorker } from './services/sw/sw'
import { windowHeight, windowWidth } from './services/window_utils/window_utils'
import { useI18nStore } from 'src/stores/i18n.js'
import { useEmojiStore } from 'src/stores/emoji.js'
import { useI18nStore } from 'src/stores/i18n.js'
import { useInstanceStore } from 'src/stores/instance.js'
import { useInstanceCapabilitiesStore } from 'src/stores/instance_capabilities.js'
import { useInterfaceStore } from 'src/stores/interface.js'
import { useShoutStore } from 'src/stores/shout.js'
import { useSyncConfigStore } from 'src/stores/sync_config.js'
import messages from 'src/i18n/messages'
import localeService from 'src/services/locale/locale.service.js'
export default {
name: 'app',
components: {
@ -142,7 +142,9 @@ export default {
return this.currentUser.background_image
},
instanceBackground() {
return useSyncConfigStore().mergedConfig.hideInstanceWallpaper ? null : this.instanceBackgroundUrl
return useSyncConfigStore().mergedConfig.hideInstanceWallpaper
? null
: this.instanceBackgroundUrl
},
background() {
return this.userBackground || this.instanceBackground
@ -203,7 +205,7 @@ export default {
!useSyncConfigStore().mergedConfig.hideISP
)
},
...mapGetters(['mergedConfig']),
...mapState(useSyncConfigStore, ['mergedConfig']),
...mapState(useInterfaceStore, [
'themeApplied',
'styleDataUsed',

View file

@ -32,9 +32,9 @@ import { useI18nStore } from 'src/stores/i18n'
import { useInstanceStore } from 'src/stores/instance.js'
import { useInstanceCapabilitiesStore } from 'src/stores/instance_capabilities.js'
import { useInterfaceStore } from 'src/stores/interface.js'
import { useLocalConfigStore } from 'src/stores/local_config.js'
import { useOAuthStore } from 'src/stores/oauth'
import { useSyncConfigStore } from 'src/stores/sync_config.js'
import { useLocalConfigStore } from 'src/stores/local_config.js'
import VBodyScrollLock from 'src/directives/body_scroll_lock'
import {

View file

@ -1,4 +1,4 @@
import { mapGetters } from 'vuex'
import { mapState } from 'pinia'
import nsfwImage from '../../assets/nsfw.png'
import fileTypeService from '../../services/file_type/file_type.service.js'
@ -140,7 +140,7 @@ const Attachment = {
videoTag() {
return this.useModal ? 'button' : 'span'
},
...mapGetters(['mergedConfig']),
...mapState(useSyncConfigStore, ['mergedConfig']),
},
watch: {
'attachment.description'(newVal) {

View file

@ -12,6 +12,7 @@ import UserAvatar from '../user_avatar/user_avatar.vue'
import { useInstanceStore } from 'src/stores/instance.js'
import { useInterfaceStore } from 'src/stores/interface'
import { useSyncConfigStore } from 'src/stores/sync_config.js'
import { library } from '@fortawesome/fontawesome-svg-core'
import { faEllipsisH, faTimes } from '@fortawesome/free-solid-svg-icons'
@ -85,7 +86,7 @@ const ChatMessage = {
return { left: 50 }
}
},
...mapGetters(['mergedConfig', 'findUser']),
...mapPiniaState(useSyncConfigStore, ['mergedConfig', 'findUser']),
},
data() {
return {

View file

@ -1,6 +1,6 @@
import { clone, filter, findIndex, get, reduce } from 'lodash'
import { mapState as mapPiniaState } from 'pinia'
import { mapGetters, mapState } from 'vuex'
import { mapState } from 'vuex'
import { WSConnectionStatus } from '../../services/api/api.service.js'
import QuickFilterSettings from '../quick_filter_settings/quick_filter_settings.vue'
@ -393,7 +393,7 @@ const conversation = {
maybeHighlight() {
return this.isExpanded ? this.highlight : null
},
...mapGetters(['mergedConfig']),
...mapPiniaState(useSyncConfigStore, ['mergedConfig']),
...mapState({
mastoUserSocketStatus: (state) => state.api.mastoUserSocketStatus,
}),

View file

@ -3,6 +3,7 @@ import { mapGetters } from 'vuex'
import { useAnnouncementsStore } from 'src/stores/announcements.js'
import { useInterfaceStore } from 'src/stores/interface.js'
import { useSyncConfigStore } from 'src/stores/sync_config.js'
import { library } from '@fortawesome/fontawesome-svg-core'
import {

View file

@ -1,7 +1,6 @@
import { mapState as mapPiniaState } from 'pinia'
import { defineAsyncComponent } from 'vue'
import { mapGetters, mapState } from 'vuex'
import { mapState as mapPiniaState } from 'pinia'
import { useSyncConfigStore } from 'src/stores/sync_config.js'
import {
highlightClass,
@ -10,6 +9,8 @@ import {
import UnicodeDomainIndicator from '../unicode_domain_indicator/unicode_domain_indicator.vue'
import UserAvatar from '../user_avatar/user_avatar.vue'
import { useSyncConfigStore } from 'src/stores/sync_config.js'
import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'
import { library } from '@fortawesome/fontawesome-svg-core'

View file

@ -412,7 +412,7 @@ const PostStatusForm = {
)
)
},
...mapGetters(['mergedConfig']),
...mapState(useSyncConfigStore, ['mergedConfig']),
...mapState(useInterfaceStore, {
mobileLayout: (store) => store.mobileLayout,
}),

View file

@ -1,9 +1,9 @@
import { mapState } from 'pinia'
import { mapGetters } from 'vuex'
import Popover from '../popover/popover.vue'
import { useInterfaceStore } from 'src/stores/interface.js'
import { useSyncConfigStore } from 'src/stores/sync_config.js'
import { library } from '@fortawesome/fontawesome-svg-core'
import { faFilter, faFont, faWrench } from '@fortawesome/free-solid-svg-icons'
@ -31,7 +31,7 @@ const QuickFilterSettings = {
},
},
computed: {
...mapGetters(['mergedConfig']),
...mapState(useSyncConfigStore, ['mergedConfig']),
...mapState(useInterfaceStore, {
mobileLayout: (state) => state.layoutType === 'mobile',
}),
@ -87,7 +87,10 @@ const QuickFilterSettings = {
},
set() {
const value = !this.hideMedia
useSyncConfigStore().setSimplePrefAndSave({ path: 'hideAttachments', value })
useSyncConfigStore().setSimplePrefAndSave({
path: 'hideAttachments',
value,
})
useSyncConfigStore().setSimplePrefAndSave({
path: 'hideAttachmentsInConv',
value,
@ -112,7 +115,10 @@ const QuickFilterSettings = {
},
set() {
const value = !this.muteBotStatuses
useSyncConfigStore().setSimplePrefAndSave({ path: 'muteBotStatuses', value })
useSyncConfigStore().setSimplePrefAndSave({
path: 'muteBotStatuses',
value,
})
},
},
muteSensitiveStatuses: {

View file

@ -259,7 +259,10 @@ export default {
const writePath = `simple.${readPath}`
if (!this.timedApplyMode) {
useSyncConfigStore().setSimplePrefAndSave({ path: writePath, value })
useSyncConfigStore().setSimplePrefAndSave({
path: writePath,
value,
})
useSyncConfigStore().pushSyncConfig()
} else {
if (useInterfaceStore().temporaryChangesTimeoutId !== null) {

View file

@ -10,8 +10,8 @@ import SharedComputedObject from '../helpers/shared_computed_object.js'
import UnitSetting from '../helpers/unit_setting.vue'
import { useInstanceStore } from 'src/stores/instance.js'
import { useSyncConfigStore } from 'src/stores/sync_config.js'
import { useInstanceCapabilitiesStore } from 'src/stores/instance_capabilities.js'
import { useSyncConfigStore } from 'src/stores/sync_config.js'
import localeService from 'src/services/locale/locale.service.js'

View file

@ -5,6 +5,8 @@ import IntegerSetting from '../helpers/integer_setting.vue'
import ProfileSettingIndicator from '../helpers/profile_setting_indicator.vue'
import SharedComputedObject from '../helpers/shared_computed_object.js'
import { useSyncConfigStore } from 'src/stores/sync_config.js'
const GeneralTab = {
data() {
return {

View file

@ -10,8 +10,8 @@ import { useAnnouncementsStore } from 'src/stores/announcements'
import { useInstanceStore } from 'src/stores/instance.js'
import { useInstanceCapabilitiesStore } from 'src/stores/instance_capabilities.js'
import { useInterfaceStore } from 'src/stores/interface'
import { useSyncConfigStore } from 'src/stores/sync_config.js'
import { useShoutStore } from 'src/stores/shout'
import { useSyncConfigStore } from 'src/stores/sync_config.js'
import { library } from '@fortawesome/fontawesome-svg-core'
import {

View file

@ -1,9 +1,9 @@
import { useEditStatusStore } from 'src/stores/editStatus.js'
import { useInstanceStore } from 'src/stores/instance.js'
import { useSyncConfigStore } from 'src/stores/sync_config.js'
import { useInstanceCapabilitiesStore } from 'src/stores/instance_capabilities.js'
import { useReportsStore } from 'src/stores/reports.js'
import { useStatusHistoryStore } from 'src/stores/statusHistory.js'
import { useSyncConfigStore } from 'src/stores/sync_config.js'
const PRIVATE_SCOPES = new Set(['private', 'direct'])
const PUBLIC_SCOPES = new Set(['public', 'unlisted'])

View file

@ -1,7 +1,9 @@
import { mapGetters } from 'vuex'
import { mapState } from 'pinia'
import RichContent from 'src/components/rich_content/rich_content.jsx'
import { useSyncConfigStore } from 'src/stores/sync_config.js'
import fileType from 'src/services/file_type/file_type.service'
import { library } from '@fortawesome/fontawesome-svg-core'
@ -110,7 +112,7 @@ const StatusBody = {
collapsedStatus() {
return this.status.raw_html.replace(/(\n|<br\s?\/?>)/g, ' ')
},
...mapGetters(['mergedConfig']),
...mapState(useSyncConfigStore, ['mergedConfig']),
},
components: {
RichContent,

View file

@ -1,3 +1,4 @@
import { mapState as mapPiniaState } from 'pinia'
import { mapGetters, mapState } from 'vuex'
import StatusBody from 'src/components/status_body/status_body.vue'
@ -123,7 +124,7 @@ const StatusContent = {
maxThumbnails() {
return this.mergedConfig.maxThumbnails
},
...mapGetters(['mergedConfig']),
...mapPiniaState(useSyncConfigStore, ['mergedConfig']),
...mapState({
currentUser: (state) => state.users.currentUser,
}),

View file

@ -1,8 +1,8 @@
import { useSyncConfigStore } from 'src/stores/sync_config.js'
import * as DateUtils from 'src/services/date_utils/date_utils.js'
import localeService from 'src/services/locale/locale.service.js'
import { useSyncConfigStore } from 'src/stores/sync_config.js'
export default {
name: 'Timeago',
props: ['time', 'autoUpdate', 'longFormat', 'nowThreshold', 'templateKey'],

View file

@ -1,7 +1,7 @@
import isEqual from 'lodash/isEqual'
import merge from 'lodash/merge'
import ldUnescape from 'lodash/unescape'
import { mapGetters } from 'vuex'
import { mapState } from 'pinia'
import Checkbox from 'src/components/checkbox/checkbox.vue'
import ColorInput from 'src/components/color_input/color_input.vue'
@ -243,7 +243,7 @@ export default {
})
}
},
...mapGetters(['mergedConfig']),
...mapState(useSyncConfigStore, ['mergedConfig']),
},
userHighlightColor: {
get() {
@ -391,7 +391,7 @@ export default {
],
})
},
...mapGetters(['mergedConfig']),
...mapState(useSyncConfigStore, ['mergedConfig']),
},
methods: {
muteUser() {

View file

@ -27,7 +27,6 @@ const mastoApiNotificationTypes = new Set([
const fetchAndUpdate = ({ store, credentials, older = false, since }) => {
const args = { credentials }
const { getters } = store
const rootState = store.rootState || store.state
const timelineData = rootState.notifications
const hideMutedPosts = useSyncConfigStore().mergedConfig.hideMutedPosts

View file

@ -45,7 +45,6 @@ const fetchAndUpdate = ({
}) => {
const args = { timeline, credentials }
const rootState = store.rootState || store.state
const { getters } = store
const timelineData = rootState.statuses.timelines[camelCase(timeline)]
const { hideMutedPosts, replyVisibility } = useSyncConfigStore().mergedConfig
const loggedIn = !!rootState.users.currentUser

View file

@ -1,7 +1,8 @@
import Cookies from 'js-cookie'
import { defineStore } from 'pinia'
import messages from 'src/i18n/messages'
import localeService from 'src/services/locale/locale.service.js'
import { defineStore } from 'pinia'
const BACKEND_LANGUAGE_COOKIE_NAME = 'userLanguage'
@ -21,6 +22,6 @@ export const useI18nStore = defineStore('i18n', {
BACKEND_LANGUAGE_COOKIE_NAME,
localeService.internalToBackendLocaleMulti(value),
)
}
},
},
})

View file

@ -252,7 +252,10 @@ export const useInterfaceStore = defineStore('interface', {
this.resetThemeV3Palette()
this.resetThemeV2()
useSyncConfigStore().setPreference({ path: 'simple.paletteCustomData', value })
useSyncConfigStore().setPreference({
path: 'simple.paletteCustomData',
value,
})
useSyncConfigStore().pushSyncConfig()
this.applyTheme({ recompile: true })
@ -292,7 +295,10 @@ export const useInterfaceStore = defineStore('interface', {
this.resetThemeV2()
this.resetThemeV3Palette()
useSyncConfigStore().setPreference({ path: 'simple.styleCustomData', value })
useSyncConfigStore().setPreference({
path: 'simple.styleCustomData',
value,
})
useSyncConfigStore().pushSyncConfig()
this.useStylePalette = true
@ -330,18 +336,27 @@ export const useInterfaceStore = defineStore('interface', {
this.resetThemeV2()
useSyncConfigStore().setPreference({ path: 'simple.customTheme', value })
useSyncConfigStore().setPreference({ path: 'simple.customThemeSource', value })
useSyncConfigStore().setPreference({
path: 'simple.customThemeSource',
value,
})
useSyncConfigStore().pushSyncConfig()
this.applyTheme({ recompile: true })
},
resetThemeV3() {
useSyncConfigStore().setPreference({ path: 'simple.style', value: null })
useSyncConfigStore().setPreference({ path: 'simple.styleCustomData', value: null })
useSyncConfigStore().setPreference({
path: 'simple.styleCustomData',
value: null,
})
useSyncConfigStore().pushSyncConfig()
},
resetThemeV3Palette() {
useSyncConfigStore().setPreference({ path: 'simple.palette', value: null })
useSyncConfigStore().setPreference({
path: 'simple.palette',
value: null,
})
useSyncConfigStore().setPreference({
path: 'simple.paletteCustomData',
value: null,
@ -350,7 +365,10 @@ export const useInterfaceStore = defineStore('interface', {
},
resetThemeV2() {
useSyncConfigStore().setPreference({ path: 'simple.theme', value: null })
useSyncConfigStore().setPreference({ path: 'simple.customTheme', value: null })
useSyncConfigStore().setPreference({
path: 'simple.customTheme',
value: null,
})
useSyncConfigStore().setPreference({
path: 'simple.customThemeSource',
value: null,

View file

@ -1,7 +1,4 @@
import {
cloneDeep,
set,
} from 'lodash'
import { cloneDeep, set } from 'lodash'
import { defineStore } from 'pinia'
import { toRaw } from 'vue'
@ -12,7 +9,7 @@ import { defaultState as configDefaultState } from 'src/modules/default_config_s
export const defaultState = {
prefsStorage: {
...configDefaultState,
}
},
}
export const useLocalConfigStore = defineStore('local_config', {

View file

@ -97,14 +97,18 @@ const _verifyPrefs = (state) => {
if (typeof v === 'undefined') return
if (typeof v === 'number' || typeof v === 'boolean') return
if (typeof v === 'object') return
console.warn(`Preference simple.${k} as invalid type ${typeof v}, reinitializing`)
console.warn(
`Preference simple.${k} as invalid type ${typeof v}, reinitializing`,
)
set(state.prefsStorage.simple, k, defaultState.prefsStorage.simple[k])
})
// Collections
Object.entries(defaultState.prefsStorage.collections).forEach(([k, v]) => {
if (Array.isArray(v)) return
console.warn(`Preference collections.${k} as invalid type ${typeof v}, reinitializing`)
console.warn(
`Preference collections.${k} as invalid type ${typeof v}, reinitializing`,
)
set(
state.prefsStorage.collections,
k,
@ -306,7 +310,9 @@ export const _mergePrefs = (recent, stale) => {
break
case 'addToCollection':
if (!path.startsWith('collections')) {
return console.error('Illegal operation "addToCollection" on a non-collection')
return console.error(
'Illegal operation "addToCollection" on a non-collection',
)
}
set(
resultOutput,
@ -316,7 +322,9 @@ export const _mergePrefs = (recent, stale) => {
break
case 'removeFromCollection': {
if (!path.startsWith('collections')) {
return console.error('Illegal operation "removeFromCollection" on a non-collection')
return console.error(
'Illegal operation "removeFromCollection" on a non-collection',
)
}
const newSet = new Set(get(resultOutput, path))
newSet.delete(args[0])
@ -438,9 +446,7 @@ export const useSyncConfigStore = defineStore('sync_config', {
`Tried to edit internal (starts with _) field '${path}', ignoring.`,
)
}
if (
path.startsWith('collections')
) {
if (path.startsWith('collections')) {
throw new Error(
`Invalid operation 'set' for collection field '${path}', ignoring.`,
)
@ -468,9 +474,7 @@ export const useSyncConfigStore = defineStore('sync_config', {
`Tried to edit internal (starts with _) field '${path}', ignoring.`,
)
}
if (
path.startsWith('collections')
) {
if (path.startsWith('collections')) {
throw new Error(
`Invalid operation 'unset' for collection field '${path}', ignoring.`,
)