6e13fcfbd3
users see welcome screen once and choose preference SETTINGS moved to redux took steps toward eliminating unwanted analytics in app based on preferences settings page update to privacy controls and copy persist welcome version default tv on cleanup clean up appstrings populate prefs app only wallet custody, app only router settings on startup welcome sync, 3p share sync, emojis bump redux cleanup fix app not building fix sync bug, remove tvWelcomeVersion cleanup disable internalshare setting while signed in
145 lines
4.3 KiB
JavaScript
145 lines
4.3 KiB
JavaScript
import * as ACTIONS from 'constants/action_types';
|
|
import * as APP_SETTINGS from 'constants/settings';
|
|
import moment from 'moment';
|
|
import SUPPORTED_LANGUAGES from 'constants/supported_languages';
|
|
import { ACTIONS as LBRY_REDUX_ACTIONS, SHARED_PREFERENCES, SETTINGS } from 'lbry-redux';
|
|
const reducers = {};
|
|
let settingLanguage = [];
|
|
try {
|
|
let appLanguage = window.localStorage.getItem(SETTINGS.LANGUAGE);
|
|
settingLanguage.push(appLanguage);
|
|
} catch (e) {}
|
|
settingLanguage.push(window.navigator.language.slice(0, 2));
|
|
settingLanguage.push('en');
|
|
|
|
const defaultState = {
|
|
isNight: false,
|
|
loadedLanguages: [...Object.keys(window.i18n_messages), 'en'] || ['en'],
|
|
customWalletServers: [],
|
|
sharedPreferences: {
|
|
[SHARED_PREFERENCES.WALLET_SERVERS]: [],
|
|
},
|
|
daemonSettings: {},
|
|
daemonStatus: {},
|
|
clientSettings: {
|
|
// UX
|
|
[SETTINGS.NEW_USER_ACKNOWLEDGED]: false,
|
|
[SETTINGS.EMAIL_COLLECTION_ACKNOWLEDGED]: false,
|
|
[SETTINGS.ENABLE_SYNC]: true,
|
|
|
|
// UI
|
|
[SETTINGS.LANGUAGE]: settingLanguage.find(language => SUPPORTED_LANGUAGES[language]),
|
|
[SETTINGS.THEME]: __('light'),
|
|
[SETTINGS.THEMES]: [__('light'), __('dark')],
|
|
[SETTINGS.SUPPORT_OPTION]: false,
|
|
[SETTINGS.HIDE_SPLASH_ANIMATION]: false,
|
|
[SETTINGS.HIDE_BALANCE]: false,
|
|
[SETTINGS.OS_NOTIFICATIONS_ENABLED]: true,
|
|
[SETTINGS.AUTOMATIC_DARK_MODE_ENABLED]: false,
|
|
|
|
[APP_SETTINGS.DARK_MODE_TIMES]: {
|
|
from: { hour: '21', min: '00', formattedTime: '21:00' },
|
|
to: { hour: '8', min: '00', formattedTime: '8:00' },
|
|
},
|
|
|
|
// Purchasing
|
|
[SETTINGS.INSTANT_PURCHASE_ENABLED]: false,
|
|
[SETTINGS.INSTANT_PURCHASE_MAX]: {
|
|
currency: 'LBC',
|
|
amount: 0.1,
|
|
},
|
|
|
|
// Content
|
|
[SETTINGS.SHOW_MATURE]: false,
|
|
[SETTINGS.AUTOPLAY]: true,
|
|
[SETTINGS.FLOATING_PLAYER]: true,
|
|
[SETTINGS.AUTO_DOWNLOAD]: true,
|
|
|
|
// OS
|
|
[SETTINGS.AUTO_LAUNCH]: true,
|
|
},
|
|
};
|
|
|
|
reducers[LBRY_REDUX_ACTIONS.DAEMON_SETTINGS_RECEIVED] = (state, action) =>
|
|
Object.assign({}, state, {
|
|
daemonSettings: action.data.settings,
|
|
});
|
|
|
|
reducers[LBRY_REDUX_ACTIONS.DAEMON_STATUS_RECEIVED] = (state, action) =>
|
|
Object.assign({}, state, {
|
|
daemonStatus: action.data.status,
|
|
});
|
|
|
|
reducers[ACTIONS.CLIENT_SETTING_CHANGED] = (state, action) => {
|
|
const { key, value } = action.data;
|
|
const clientSettings = Object.assign({}, state.clientSettings);
|
|
|
|
clientSettings[key] = value;
|
|
|
|
return Object.assign({}, state, {
|
|
clientSettings,
|
|
});
|
|
};
|
|
|
|
reducers[ACTIONS.UPDATE_IS_NIGHT] = state => {
|
|
const { from, to } = state.clientSettings[APP_SETTINGS.DARK_MODE_TIMES];
|
|
const momentNow = moment();
|
|
const startNightMoment = moment(from.formattedTime, 'HH:mm');
|
|
const endNightMoment = moment(to.formattedTime, 'HH:mm');
|
|
const isNight = !(momentNow.isAfter(endNightMoment) && momentNow.isBefore(startNightMoment));
|
|
|
|
return Object.assign({}, state, {
|
|
isNight,
|
|
});
|
|
};
|
|
|
|
reducers[ACTIONS.DOWNLOAD_LANGUAGE_SUCCESS] = (state, action) => {
|
|
const { loadedLanguages } = state;
|
|
const { language } = action.data;
|
|
|
|
if (language && loadedLanguages && !loadedLanguages.includes(language)) {
|
|
return Object.assign({}, state, {
|
|
loadedLanguages: [...loadedLanguages, language],
|
|
});
|
|
} else {
|
|
return state;
|
|
}
|
|
};
|
|
|
|
reducers[LBRY_REDUX_ACTIONS.SHARED_PREFERENCE_SET] = (state, action) => {
|
|
const { key, value } = action.data;
|
|
const sharedPreferences = Object.assign({}, state.sharedPreferences);
|
|
sharedPreferences[key] = value;
|
|
|
|
return Object.assign({}, state, {
|
|
sharedPreferences,
|
|
});
|
|
};
|
|
|
|
reducers[ACTIONS.CLIENT_SETTING_CHANGED] = (state, action) => {
|
|
const { key, value } = action.data;
|
|
const clientSettings = Object.assign({}, state.clientSettings);
|
|
|
|
clientSettings[key] = value;
|
|
|
|
return Object.assign({}, state, {
|
|
clientSettings,
|
|
});
|
|
};
|
|
|
|
reducers[LBRY_REDUX_ACTIONS.USER_STATE_POPULATE] = (state, action) => {
|
|
const { settings: sharedPreferences } = action.data;
|
|
// todo: populate sharedPreferences that match client settings constants
|
|
|
|
return Object.assign({}, state, { sharedPreferences });
|
|
};
|
|
|
|
reducers[LBRY_REDUX_ACTIONS.SAVE_CUSTOM_WALLET_SERVERS] = (state, action) => {
|
|
return Object.assign({}, state, { customWalletServers: action.data });
|
|
};
|
|
|
|
export default function reducer(state = defaultState, action) {
|
|
const handler = reducers[action.type];
|
|
if (handler) return handler(state, action);
|
|
return state;
|
|
}
|