import { computed } from 'vue'; import { useI18n } from '@/locales/helpers.ts'; import { useSettingsStore } from '@/stores/setting.ts'; import { useTransactionsStore } from '@/stores/transaction.ts'; import { useOverviewStore } from '@/stores/overview.ts'; import { useStatisticsStore } from '@/stores/statistics.ts'; import type { TypeAndDisplayName } from '@/core/base.ts'; import type { LocalizedTimezoneInfo } from '@/core/timezone.ts'; export function useAppSettingPageBase() { const { getAllTimezones, getAllTimezoneTypesUsedForStatistics, getAllCurrencySortingTypes, setTimeZone } = useI18n(); const settingsStore = useSettingsStore(); const transactionsStore = useTransactionsStore(); const overviewStore = useOverviewStore(); const statisticsStore = useStatisticsStore(); const allTimezones = computed(() => getAllTimezones(true)); const allTimezoneTypesUsedForStatistics = computed(() => getAllTimezoneTypesUsedForStatistics()); const allCurrencySortingTypes = computed(() => getAllCurrencySortingTypes()); const timeZone = computed({ get: () => settingsStore.appSettings.timeZone, set: (value) => { settingsStore.setTimeZone(value); setTimeZone(value); transactionsStore.updateTransactionListInvalidState(true); overviewStore.updateTransactionOverviewInvalidState(true); statisticsStore.updateTransactionStatisticsInvalidState(true); } }); const isAutoUpdateExchangeRatesData = computed({ get: () => settingsStore.appSettings.autoUpdateExchangeRatesData, set: (value) => settingsStore.setAutoUpdateExchangeRatesData(value) }); const showAccountBalance = computed({ get: () => settingsStore.appSettings.showAccountBalance, set: (value) => settingsStore.setShowAccountBalance(value) }); const showAmountInHomePage = computed({ get: () => settingsStore.appSettings.showAmountInHomePage, set: (value) => settingsStore.setShowAmountInHomePage(value) }); const timezoneUsedForStatisticsInHomePage = computed({ get: () => settingsStore.appSettings.timezoneUsedForStatisticsInHomePage, set: (value: number) => { settingsStore.setTimezoneUsedForStatisticsInHomePage(value); overviewStore.updateTransactionOverviewInvalidState(true); } }); const showTotalAmountInTransactionListPage = computed({ get: () => settingsStore.appSettings.showTotalAmountInTransactionListPage, set: (value) => settingsStore.setShowTotalAmountInTransactionListPage(value) }); const showTagInTransactionListPage = computed({ get: () => settingsStore.appSettings.showTagInTransactionListPage, set: (value) => settingsStore.setShowTagInTransactionListPage(value) }); const itemsCountInTransactionListPage = computed({ get: () => settingsStore.appSettings.itemsCountInTransactionListPage, set: (value) => settingsStore.setItemsCountInTransactionListPage(value) }); const autoSaveTransactionDraft = computed({ get: () => settingsStore.appSettings.autoSaveTransactionDraft, set: (value: string) => { settingsStore.setAutoSaveTransactionDraft(value); if (value === 'disabled') { transactionsStore.clearTransactionDraft(); } } }); const isAutoGetCurrentGeoLocation = computed({ get: () => settingsStore.appSettings.autoGetCurrentGeoLocation, set: (value) => settingsStore.setAutoGetCurrentGeoLocation(value) }); const currencySortByInExchangeRatesPage = computed({ get: () => settingsStore.appSettings.currencySortByInExchangeRatesPage, set: (value: number) => settingsStore.setCurrencySortByInExchangeRatesPage(value) }); return { // computed states allTimezones, allTimezoneTypesUsedForStatistics, allCurrencySortingTypes, timeZone, isAutoUpdateExchangeRatesData, showAccountBalance, showAmountInHomePage, itemsCountInTransactionListPage, timezoneUsedForStatisticsInHomePage, showTotalAmountInTransactionListPage, showTagInTransactionListPage, autoSaveTransactionDraft, isAutoGetCurrentGeoLocation, currencySortByInExchangeRatesPage }; }