import { get, set } from 'lodash' export const settingsMapGet = { 'defaultScope': 'source.privacy', 'defaultNSFW': 'source.sensitive', // BROKEN: pleroma/pleroma#2837 'stripRichContent': 'source.pleroma.no_rich_content', // Privacy 'locked': 'locked', 'acceptChatMessages': 'pleroma.accepts_chat_messages', 'allowFollowingMove': 'pleroma.allow_following_move', 'discoverable': 'source.discoverable', 'hideFavorites': 'pleroma.hide_favorites', 'hideFollowers': 'pleroma.hide_followers', 'hideFollows': 'pleroma.hide_follows', 'hideFollowersCount': 'pleroma.hide_followers_count', 'hideFollowsCount': 'pleroma.hide_follows_count', // NotificationSettingsAPIs 'webPushHideContents': 'pleroma.notification_settings.hide_notification_contents', 'blockNotificationsFromStrangers': 'pleroma.notification_settings.block_from_strangers' } export const settingsMapSet = { 'defaultScope': 'source.privacy', 'defaultNSFW': 'source.sensitive', 'stripRichContent': 'source.pleroma.no_rich_content', // Privacy 'locked': 'locked', 'acceptChatMessages': 'accepts_chat_messages', 'allowFollowingMove': 'allow_following_move', 'discoverable': 'source.discoverable', 'hideFavorites': 'hide_favorites', 'hideFollowers': 'hide_followers', 'hideFollows': 'hide_follows', 'hideFollowersCount': 'hide_followers_count', 'hideFollowsCount': 'hide_follows_count', // NotificationSettingsAPIs 'webPushHideContents': 'hide_notification_contents', 'blockNotificationsFromStrangers': 'block_from_strangers' } export const customAPIs = { __defaultApi: 'updateProfile', 'webPushHideContents': 'updateNotificationSettings', 'blockNotificationsFromStrangers': 'updateNotificationSettings' } export const defaultState = Object.fromEntries(Object.keys(settingsMapGet).map(key => [key, undefined])) const serverSideConfig = { state: { ...defaultState }, mutations: { confirmServerSideOption (state, { name, value }) { set(state, name, value) }, wipeServerSideOption (state, { name }) { set(state, name, undefined) }, // Set the settings based on their path location setCurrentUser (state, user) { Object.entries(settingsMapGet).forEach(([name, path]) => { set(state, name, get(user._original, path)) }) } }, actions: { setServerSideOption ({ rootState, state, commit, dispatch }, { name, value }) { const oldValue = get(state, name) const params = {} const path = settingsMapSet[name] if (!path) throw new Error('Invalid server-side setting') commit('wipeServerSideOption', { name }) const customAPIName = customAPIs[name] || customAPIs.__defaultApi const api = rootState.api.backendInteractor[customAPIName] let prefix = '' switch (customAPIName) { case 'updateNotificationSettings': prefix = 'settings.' break default: prefix = 'params.' break } set(params, prefix + path, value) api(params) .then((result) => { switch (customAPIName) { case 'updateNotificationSettings': console.log(result) if (result.status === 'success') { commit('confirmServerSideOption', { name, value }) } else { commit('confirmServerSideOption', { name, value: oldValue }) } break default: commit('addNewUsers', [result]) commit('setCurrentUser', result) break } console.log(state) }) .catch((e) => { console.warn('Error setting server-side option:', e) commit('confirmServerSideOption', { name, value: oldValue }) }) } } } export default serverSideConfig