176 lines
6.7 KiB
JavaScript
176 lines
6.7 KiB
JavaScript
import Cookies from 'js-cookie';
|
|
|
|
import currencyConstants from '../consts/currency.js';
|
|
import statisticsConstants from '../consts/statistics.js';
|
|
|
|
const settingsLocalStorageKey = 'ebk_app_settings';
|
|
const serverSettingsCookieKey = 'ebk_server_settings';
|
|
|
|
const defaultSettings = {
|
|
lang: 'en',
|
|
timeZone: '',
|
|
debug: false,
|
|
applicationLock: false,
|
|
applicationLockWebAuthn: false,
|
|
autoUpdateExchangeRatesData: true,
|
|
autoGetCurrentGeoLocation: false,
|
|
thousandsSeparator: true,
|
|
currencyDisplayMode: currencyConstants.defaultCurrencyDisplayMode,
|
|
showAmountInHomePage: true,
|
|
showTotalAmountInTransactionListPage: true,
|
|
showAccountBalance: true,
|
|
statistics: {
|
|
defaultChartType: statisticsConstants.defaultChartType,
|
|
defaultChartDataType: statisticsConstants.defaultChartDataType,
|
|
defaultDataRangeType: statisticsConstants.defaultDataRangeType,
|
|
defaultAccountFilter: {},
|
|
defaultTransactionCategoryFilter: {},
|
|
defaultSortingType: statisticsConstants.defaultSortingType
|
|
},
|
|
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() {
|
|
const originalSettings = getOriginalSettings();
|
|
|
|
for (let key in originalSettings) {
|
|
if (!Object.prototype.hasOwnProperty.call(originalSettings, key)) {
|
|
continue;
|
|
}
|
|
|
|
if (typeof(defaultSettings[key]) === 'object') {
|
|
originalSettings[key] = Object.assign({}, defaultSettings[key], originalSettings[key]);
|
|
}
|
|
}
|
|
|
|
return Object.assign({}, defaultSettings, originalSettings);
|
|
}
|
|
|
|
function setSettings(settings) {
|
|
const storageData = JSON.stringify(settings);
|
|
return localStorage.setItem(settingsLocalStorageKey, storageData);
|
|
}
|
|
|
|
function getOriginalOption(key) {
|
|
return getOriginalSettings()[key];
|
|
}
|
|
|
|
function getOption(key) {
|
|
return getFinalSettings()[key];
|
|
}
|
|
|
|
function getSubOption(key, subKey) {
|
|
const options = getFinalSettings()[key] || {};
|
|
return options[subKey];
|
|
}
|
|
|
|
function setOption(key, value) {
|
|
if (!Object.prototype.hasOwnProperty.call(defaultSettings, key)) {
|
|
return;
|
|
}
|
|
|
|
const settings = getFinalSettings();
|
|
settings[key] = value;
|
|
|
|
return setSettings(settings);
|
|
}
|
|
|
|
function setSubOption(key, subKey, value) {
|
|
if (!Object.prototype.hasOwnProperty.call(defaultSettings, key)) {
|
|
return;
|
|
}
|
|
|
|
if (!Object.prototype.hasOwnProperty.call(defaultSettings[key], subKey)) {
|
|
return;
|
|
}
|
|
|
|
const settings = getFinalSettings();
|
|
let options = settings[key];
|
|
|
|
if (!options) {
|
|
options = {};
|
|
}
|
|
|
|
options[subKey] = value;
|
|
settings[key] = options;
|
|
|
|
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;
|
|
}
|
|
|
|
function clearSettings() {
|
|
localStorage.removeItem(settingsLocalStorageKey);
|
|
}
|
|
|
|
export default {
|
|
isProduction: () => process.env.NODE_ENV === 'production',
|
|
getLanguage: () => getOriginalOption('lang'),
|
|
setLanguage: value => setOption('lang', value),
|
|
getTimezone: () => getOption('timeZone'),
|
|
setTimezone: value => setOption('timeZone', value),
|
|
isEnableDebug: () => getOption('debug'),
|
|
setEnableDebug: value => setOption('debug', value),
|
|
isEnableApplicationLock: () => getOption('applicationLock'),
|
|
setEnableApplicationLock: value => setOption('applicationLock', value),
|
|
isEnableApplicationLockWebAuthn: () => getOption('applicationLockWebAuthn'),
|
|
setEnableApplicationLockWebAuthn: value => setOption('applicationLockWebAuthn', value),
|
|
isAutoUpdateExchangeRatesData: () => getOption('autoUpdateExchangeRatesData'),
|
|
setAutoUpdateExchangeRatesData: value => setOption('autoUpdateExchangeRatesData', value),
|
|
isAutoGetCurrentGeoLocation: () => getOption('autoGetCurrentGeoLocation'),
|
|
setAutoGetCurrentGeoLocation: value => setOption('autoGetCurrentGeoLocation', value),
|
|
isEnableThousandsSeparator: () => getOption('thousandsSeparator'),
|
|
setEnableThousandsSeparator: value => setOption('thousandsSeparator', value),
|
|
getCurrencyDisplayMode: () => getOption('currencyDisplayMode'),
|
|
setCurrencyDisplayMode: value => setOption('currencyDisplayMode', value),
|
|
isShowAmountInHomePage: () => getOption('showAmountInHomePage'),
|
|
setShowAmountInHomePage: value => setOption('showAmountInHomePage', value),
|
|
isShowTotalAmountInTransactionListPage: () => getOption('showTotalAmountInTransactionListPage'),
|
|
setShowTotalAmountInTransactionListPage: value => setOption('showTotalAmountInTransactionListPage', value),
|
|
isShowAccountBalance: () => getOption('showAccountBalance'),
|
|
setShowAccountBalance: value => setOption('showAccountBalance', value),
|
|
getStatisticsDefaultChartType: () => getSubOption('statistics', 'defaultChartType'),
|
|
setStatisticsDefaultChartType: value => setSubOption('statistics', 'defaultChartType', value),
|
|
getStatisticsDefaultChartDataType: () => getSubOption('statistics', 'defaultChartDataType'),
|
|
setStatisticsDefaultChartDataType: value => setSubOption('statistics', 'defaultChartDataType', value),
|
|
getStatisticsDefaultDateRange: () => getSubOption('statistics', 'defaultDataRangeType'),
|
|
setStatisticsDefaultDateRange: value => setSubOption('statistics', 'defaultDataRangeType', value),
|
|
getStatisticsDefaultAccountFilter: () => getSubOption('statistics', 'defaultAccountFilter'),
|
|
setStatisticsDefaultAccountFilter: value => setSubOption('statistics', 'defaultAccountFilter', value),
|
|
getStatisticsDefaultTransactionCategoryFilter: () => getSubOption('statistics', 'defaultTransactionCategoryFilter'),
|
|
setStatisticsDefaultTransactionCategoryFilter: value => setSubOption('statistics', 'defaultTransactionCategoryFilter', value),
|
|
getStatisticsSortingType: () => getSubOption('statistics', 'defaultSortingType'),
|
|
setStatisticsSortingType: value => setSubOption('statistics', 'defaultSortingType', value),
|
|
isEnableAnimate: () => getOption('animate'),
|
|
setEnableAnimate: value => setOption('animate', value),
|
|
isEnableAutoDarkMode: () => getOption('autoDarkMode'),
|
|
setEnableAutoDarkMode: value => setOption('autoDarkMode', value),
|
|
isUserRegistrationEnabled: () => getServerSetting('r') === '1',
|
|
isDataExportingEnabled: () => getServerSetting('e') === '1',
|
|
clearSettings: clearSettings
|
|
};
|