logo

pleroma-fe

My custom branche(s) on git.pleroma.social/pleroma/pleroma-fe git clone https://hacktivis.me/git/pleroma-fe.git
commit: 5930b667a147a194993dba604dd617f926bb9d31
parent 726fdbea15009e930ce47faed1e4001b16234a46
Author: Henry Jameson <me@hjkos.com>
Date:   Sun, 13 Mar 2022 11:30:38 +0200

reduce the copypaste by making it more functional-style

Diffstat:

Msrc/modules/serverSideConfig.js160++++++++++++++++++++++++++++++++++++++++++++-----------------------------------
1 file changed, 89 insertions(+), 71 deletions(-)

diff --git a/src/modules/serverSideConfig.js b/src/modules/serverSideConfig.js @@ -1,50 +1,95 @@ import { get, set } from 'lodash' -export const settingsMapGet = { - 'defaultScope': 'source.privacy', - 'defaultNSFW': 'source.sensitive', // BROKEN: pleroma/pleroma#2837 - 'stripRichContent': 'source.pleroma.no_rich_text', - // 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' +const defaultApi = ({ rootState, commit }, { path, value }) => { + const params = {} + set(params, path, value) + return rootState + .api + .backendInteractor + .updateProfile({ params }) + .then(result => { + commit('addNewUsers', [result]) + commit('setCurrentUser', result) + }) } -export const settingsMapSet = { +const notificationsApi = ({ rootState, commit }, { path, value, oldValue }) => { + const settings = {} + set(settings, path, value) + return rootState + .api + .backendInteractor + .updateNotificationSettings({ settings }) + .then(result => { + if (result.status === 'success') { + commit('confirmServerSideOption', { name, value }) + } else { + commit('confirmServerSideOption', { name, value: oldValue }) + } + }) +} + +/** + * Map that stores relation between path for reading (from user profile), + * for writing (into API) an what API to use. + * + * Shorthand - instead of { get, set, api? } object it's possible to use string + * in case default api is used and get = set + * + * If no api is specified, defaultApi is used (see above) + */ +export const settingsMap = { 'defaultScope': 'source.privacy', - 'defaultNSFW': 'source.sensitive', - 'stripRichContent': 'no_rich_text', + 'defaultNSFW': 'source.sensitive', // BROKEN: pleroma/pleroma#2837 + 'stripRichContent': { + get: 'source.pleroma.no_rich_text', + set: 'no_rich_text' + }, // Privacy 'locked': 'locked', - 'acceptChatMessages': 'accepts_chat_messages', - 'allowFollowingMove': 'allow_following_move', + 'acceptChatMessages': { + get: 'pleroma.accepts_chat_messages', + set: 'accepts_chat_messages' + }, + 'allowFollowingMove': { + get: 'pleroma.allow_following_move', + set: 'allow_following_move' + }, 'discoverable': 'source.discoverable', - 'hideFavorites': 'hide_favorites', - 'hideFollowers': 'hide_followers', - 'hideFollows': 'hide_follows', - 'hideFollowersCount': 'hide_followers_count', - 'hideFollowsCount': 'hide_follows_count', + 'hideFavorites': { + get: 'pleroma.hide_favorites', + set: 'hide_favorites' + }, + 'hideFollowers': { + get: 'pleroma.hide_followers', + set: 'hide_followers' + }, + 'hideFollows': { + get: 'pleroma.hide_follows', + set: 'hide_follows' + }, + 'hideFollowersCount': { + get: 'pleroma.hide_followers_count', + set: 'hide_followers_count' + }, + 'hideFollowsCount': { + get: 'pleroma.hide_follows_count', + set: 'hide_follows_count' + }, // NotificationSettingsAPIs - 'webPushHideContents': 'hide_notification_contents', - 'blockNotificationsFromStrangers': 'block_from_strangers' -} - -export const customAPIs = { - __defaultApi: 'updateProfile', - 'webPushHideContents': 'updateNotificationSettings', - 'blockNotificationsFromStrangers': 'updateNotificationSettings' + 'webPushHideContents': { + get: 'pleroma.notification_settings.hide_notification_contents', + set: 'hide_notification_contents', + api: notificationsApi + }, + 'blockNotificationsFromStrangers': { + get: 'pleroma.notification_settings.block_from_strangers', + set: 'block_from_strangers', + api: notificationsApi + } } -export const defaultState = Object.fromEntries(Object.keys(settingsMapGet).map(key => [key, null])) +export const defaultState = Object.fromEntries(Object.keys(settingsMap).map(key => [key, null])) const serverSideConfig = { state: { ...defaultState }, @@ -56,13 +101,15 @@ const serverSideConfig = { set(state, name, null) }, wipeAllServerSideOptions (state) { - Object.keys(settingsMapGet).forEach(key => { + Object.keys(settingsMap).forEach(key => { set(state, key, null) }) }, // Set the settings based on their path location setCurrentUser (state, user) { - Object.entries(settingsMapGet).forEach(([name, path]) => { + Object.entries(settingsMap).forEach((map) => { + const [name, value] = map + const { get: path = value } = value set(state, name, get(user._original, path)) }) } @@ -70,41 +117,12 @@ const serverSideConfig = { 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') + const map = settingsMap[name] + if (!map) throw new Error('Invalid server-side setting') + const { set: path = map, api = defaultApi } = map 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) - }) + api({ rootState, commit }, { path, value, oldValue }) .catch((e) => { console.warn('Error setting server-side option:', e) commit('confirmServerSideOption', { name, value: oldValue })