Files
ezbookkeeping/src/lib/settings.js
T

272 lines
7.0 KiB
JavaScript

import currencyConstants from '@/consts/currency.js';
import statisticsConstants from '@/consts/statistics.js';
const settingsLocalStorageKey = 'ebk_app_settings';
const defaultSettings = {
theme: 'auto',
fontSize: 1,
timeZone: '',
debug: false,
applicationLock: false,
applicationLockWebAuthn: false,
autoUpdateExchangeRatesData: true,
autoGetCurrentGeoLocation: false,
thousandsSeparator: true,
currencyDisplayMode: currencyConstants.defaultCurrencyDisplayMode,
showAmountInHomePage: true,
itemsCountInTransactionListPage: 15,
showTotalAmountInTransactionListPage: true,
showAccountBalance: true,
statistics: {
defaultChartType: statisticsConstants.defaultChartType,
defaultChartDataType: statisticsConstants.defaultChartDataType,
defaultDataRangeType: statisticsConstants.defaultDataRangeType,
defaultAccountFilter: {},
defaultTransactionCategoryFilter: {},
defaultSortingType: statisticsConstants.defaultSortingType
},
animate: 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 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);
}
export function isEnableDebug() {
return getOption('debug');
}
export function getTheme() {
return getOption('theme');
}
export function setTheme(value) {
return setOption('theme', value);
}
export function getFontSize() {
return getOption('fontSize');
}
export function setFontSize(value) {
return setOption('fontSize', value);
}
export function getTimeZone() {
return getOption('timeZone');
}
export function setTimeZone(value) {
return setOption('timeZone', value);
}
export function isEnableApplicationLock() {
return getOption('applicationLock');
}
export function setEnableApplicationLock(value) {
return setOption('applicationLock', value);
}
export function isEnableApplicationLockWebAuthn() {
return getOption('applicationLockWebAuthn');
}
export function setEnableApplicationLockWebAuthn(value) {
return setOption('applicationLockWebAuthn', value);
}
export function isAutoUpdateExchangeRatesData() {
return getOption('autoUpdateExchangeRatesData');
}
export function setAutoUpdateExchangeRatesData(value) {
setOption('autoUpdateExchangeRatesData', value);
}
export function isAutoGetCurrentGeoLocation() {
return getOption('autoGetCurrentGeoLocation');
}
export function setAutoGetCurrentGeoLocation(value) {
setOption('autoGetCurrentGeoLocation', value);
}
export function isEnableThousandsSeparator() {
return getOption('thousandsSeparator');
}
export function setEnableThousandsSeparator(value) {
setOption('thousandsSeparator', value);
}
export function getCurrencyDisplayMode() {
return getOption('currencyDisplayMode');
}
export function setCurrencyDisplayMode(value) {
setOption('currencyDisplayMode', value);
}
export function isShowAmountInHomePage() {
return getOption('showAmountInHomePage');
}
export function setShowAmountInHomePage(value) {
setOption('showAmountInHomePage', value);
}
export function getItemsCountInTransactionListPage() {
return getOption('itemsCountInTransactionListPage');
}
export function setItemsCountInTransactionListPage(value) {
setOption('itemsCountInTransactionListPage', value);
}
export function isShowTotalAmountInTransactionListPage() {
return getOption('showTotalAmountInTransactionListPage');
}
export function setShowTotalAmountInTransactionListPage(value) {
setOption('showTotalAmountInTransactionListPage', value);
}
export function isShowAccountBalance() {
return getOption('showAccountBalance');
}
export function setShowAccountBalance(value) {
setOption('showAccountBalance', value);
}
export function getStatisticsDefaultChartType() {
return getSubOption('statistics', 'defaultChartType');
}
export function setStatisticsDefaultChartType(value) {
setSubOption('statistics', 'defaultChartType', value);
}
export function getStatisticsDefaultChartDataType() {
return getSubOption('statistics', 'defaultChartDataType');
}
export function setStatisticsDefaultChartDataType(value) {
setSubOption('statistics', 'defaultChartDataType', value);
}
export function getStatisticsDefaultDateRange() {
return getSubOption('statistics', 'defaultDataRangeType');
}
export function setStatisticsDefaultDateRange(value) {
setSubOption('statistics', 'defaultDataRangeType', value);
}
export function getStatisticsDefaultAccountFilter() {
return getSubOption('statistics', 'defaultAccountFilter');
}
export function setStatisticsDefaultAccountFilter(value) {
setSubOption('statistics', 'defaultAccountFilter', value);
}
export function getStatisticsDefaultTransactionCategoryFilter() {
return getSubOption('statistics', 'defaultTransactionCategoryFilter');
}
export function setStatisticsDefaultTransactionCategoryFilter(value) {
setSubOption('statistics', 'defaultTransactionCategoryFilter', value);
}
export function getStatisticsSortingType() {
return getSubOption('statistics', 'defaultSortingType');
}
export function setStatisticsSortingType(value) {
setSubOption('statistics', 'defaultSortingType', value);
}
export function isEnableAnimate() {
return getOption('animate');
}
export function setEnableAnimate(value) {
return setOption('animate', value);
}
export function clearSettings() {
localStorage.removeItem(settingsLocalStorageKey);
}