Files
ezbookkeeping/src/lib/settings.js
T

70 lines
1.8 KiB
JavaScript

import Cookies from 'js-cookie'
const settingsLocalStorageKey = 'lab_user_settings';
const serverSettingsCookieKey = 'ACP_SETTINGS';
const defaultSettings = {
lang: 'en',
animate: true,
autoDarkMode: true
};
function getOriginalSettings() {
try {
const storageData = localStorage.getItem(settingsLocalStorageKey) || '{}';
return JSON.parse(storageData);
} catch (ex) {
console.warn('settings in local storage is invalid', ex);
return {};
}
}
function getFinalSettings() {
return Object.assign({}, defaultSettings, getOriginalSettings());
}
function setSettings(settings) {
const storageData = JSON.stringify(settings);
return localStorage.setItem(settingsLocalStorageKey, storageData);
}
function getOriginalOption(key) {
return getOriginalSettings()[key];
}
function setOption(key, value) {
if (!Object.prototype.hasOwnProperty.call(defaultSettings, key)) {
return;
}
const settings = getFinalSettings();
settings[key] = value;
return setSettings(settings);
}
function getServerSetting(key) {
const settings = Cookies.get(serverSettingsCookieKey) || '';
const settingsArr = settings.split('_');
for (let i = 0; i < settingsArr.length; i++) {
const pairs = settingsArr[i].split('.');
if (pairs[0] === key) {
return pairs[1];
}
}
return undefined;
}
export default {
getLanguage: () => getOriginalOption('lang'),
setLanguage: value => setOption('lang', value),
isEnableAnimate: () => getOriginalOption('animate'),
setEnableAnimate: value => setOption('animate', value),
isEnableAutoDarkMode: () => getOriginalOption('autoDarkMode'),
setEnableAutoDarkMode: value => setOption('autoDarkMode', value),
isUserRegistrationEnabled: () => getServerSetting('r') === '1'
};