diff --git a/src/components/mobile/MonthRangeSelectionSheet.vue b/src/components/mobile/MonthRangeSelectionSheet.vue new file mode 100644 index 00000000..63d7c724 --- /dev/null +++ b/src/components/mobile/MonthRangeSelectionSheet.vue @@ -0,0 +1,167 @@ + + + + + + {{ title }} + + + {{ hint }} + + {{ beginDateTime }} + - + {{ endDateTime }} + + + + + {{ getMonthShortName(text) }} + + + {{ getMonthShortName(text) }} + + + + + + + + + + + + + + + diff --git a/src/components/mobile/TrendsBarChart.vue b/src/components/mobile/TrendsBarChart.vue new file mode 100644 index 00000000..d688033f --- /dev/null +++ b/src/components/mobile/TrendsBarChart.vue @@ -0,0 +1,243 @@ + + + + + + + + + + + + + Date Range + + + + 0.00 USD + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{ item.displayDateRange }} + + + + + {{ getDisplayCurrency(item.totalAmount, defaultCurrency) }} + + + + + + + + + + + + + + diff --git a/src/mobile-main.js b/src/mobile-main.js index 445c78b4..f5427726 100644 --- a/src/mobile-main.js +++ b/src/mobile-main.js @@ -100,11 +100,13 @@ import MapView from '@/components/common/MapView.vue'; import ItemIcon from '@/components/mobile/ItemIcon.vue'; import PieChart from '@/components/mobile/PieChart.vue'; +import TrendsBarChart from '@/components/mobile/TrendsBarChart.vue'; import PinCodeInputSheet from '@/components/mobile/PinCodeInputSheet.vue'; import PasswordInputSheet from '@/components/mobile/PasswordInputSheet.vue'; import PasscodeInputSheet from '@/components/mobile/PasscodeInputSheet.vue'; import DateTimeSelectionSheet from '@/components/mobile/DateTimeSelectionSheet.vue'; import DateRangeSelectionSheet from '@/components/mobile/DateRangeSelectionSheet.vue'; +import MonthRangeSelectionSheet from '@/components/mobile/MonthRangeSelectionSheet.vue'; import ListItemSelectionSheet from '@/components/mobile/ListItemSelectionSheet.vue'; import TwoColumnListItemSelectionSheet from '@/components/mobile/TwoColumnListItemSelectionSheet.vue'; import TreeViewSelectionSheet from '@/components/mobile/TreeViewSelectionSheet.vue'; @@ -181,11 +183,13 @@ app.component('MapView', MapView); app.component('ItemIcon', ItemIcon); app.component('PieChart', PieChart); +app.component('TrendsBarChart', TrendsBarChart); app.component('PinCodeInputSheet', PinCodeInputSheet); app.component('PasswordInputSheet', PasswordInputSheet); app.component('PasscodeInputSheet', PasscodeInputSheet); app.component('DateTimeSelectionSheet', DateTimeSelectionSheet); app.component('DateRangeSelectionSheet', DateRangeSelectionSheet); +app.component('MonthRangeSelectionSheet', MonthRangeSelectionSheet); app.component('ListItemSelectionSheet', ListItemSelectionSheet); app.component('TwoColumnListItemSelectionSheet', TwoColumnListItemSelectionSheet); app.component('TreeViewSelectionSheet', TreeViewSelectionSheet); diff --git a/src/stores/statistics.js b/src/stores/statistics.js index 200ac755..36d30279 100644 --- a/src/stores/statistics.js +++ b/src/stores/statistics.js @@ -819,21 +819,29 @@ export const useStatisticsStore = defineStore('statistics', { querys.push('type=3'); } - if (this.transactionStatisticsFilter.chartDataType === statisticsConstants.allChartDataTypes.IncomeByAccount.type + if (itemId && (this.transactionStatisticsFilter.chartDataType === statisticsConstants.allChartDataTypes.IncomeByAccount.type || this.transactionStatisticsFilter.chartDataType === statisticsConstants.allChartDataTypes.ExpenseByAccount.type || this.transactionStatisticsFilter.chartDataType === statisticsConstants.allChartDataTypes.AccountTotalAssets.type - || this.transactionStatisticsFilter.chartDataType === statisticsConstants.allChartDataTypes.AccountTotalLiabilities.type) { + || this.transactionStatisticsFilter.chartDataType === statisticsConstants.allChartDataTypes.AccountTotalLiabilities.type)) { querys.push('accountIds=' + itemId); if (!isObjectEmpty(this.transactionStatisticsFilter.filterCategoryIds)) { querys.push('categoryIds=' + getFinalCategoryIdsByFilteredCategoryIds(transactionCategoriesStore.allTransactionCategoriesMap, this.transactionStatisticsFilter.filterCategoryIds)); } - } else if (this.transactionStatisticsFilter.chartDataType === statisticsConstants.allChartDataTypes.IncomeByPrimaryCategory.type + } else if (itemId && (this.transactionStatisticsFilter.chartDataType === statisticsConstants.allChartDataTypes.IncomeByPrimaryCategory.type || this.transactionStatisticsFilter.chartDataType === statisticsConstants.allChartDataTypes.IncomeBySecondaryCategory.type || this.transactionStatisticsFilter.chartDataType === statisticsConstants.allChartDataTypes.ExpenseByPrimaryCategory.type - || this.transactionStatisticsFilter.chartDataType === statisticsConstants.allChartDataTypes.ExpenseBySecondaryCategory.type) { + || this.transactionStatisticsFilter.chartDataType === statisticsConstants.allChartDataTypes.ExpenseBySecondaryCategory.type)) { querys.push('categoryIds=' + itemId); + if (!isObjectEmpty(this.transactionStatisticsFilter.filterAccountIds)) { + querys.push('accountIds=' + getFinalAccountIdsByFilteredAccountIds(accountsStore.allAccountsMap, this.transactionStatisticsFilter.filterAccountIds)); + } + } else if (!itemId) { + if (!isObjectEmpty(this.transactionStatisticsFilter.filterCategoryIds)) { + querys.push('categoryIds=' + getFinalCategoryIdsByFilteredCategoryIds(transactionCategoriesStore.allTransactionCategoriesMap, this.transactionStatisticsFilter.filterCategoryIds)); + } + if (!isObjectEmpty(this.transactionStatisticsFilter.filterAccountIds)) { querys.push('accountIds=' + getFinalAccountIdsByFilteredAccountIds(accountsStore.allAccountsMap, this.transactionStatisticsFilter.filterAccountIds)); } diff --git a/src/styles/mobile/global.css b/src/styles/mobile/global.css index 70420a74..ee2c2c65 100644 --- a/src/styles/mobile/global.css +++ b/src/styles/mobile/global.css @@ -609,3 +609,47 @@ i.icon.la, i.icon.las, i.icon.lab { .dp__main .dp__calendar .dp__calendar_item > .dp__cell_inner { width: 100%; } + +/* statistics-list */ +.statistics-list-item-overview-amount { + margin-top: 2px; + font-size: 1.5em; + overflow: hidden; + text-overflow: ellipsis; + margin-bottom: 6px; +} + +.statistics-list-item-text { + overflow: hidden; + text-overflow: ellipsis; +} + +.statistics-list-item .item-content { + margin-top: 8px; + margin-bottom: 12px; +} + +.statistics-icon { + margin-bottom: -2px; +} + +.statistics-percent { + font-size: 0.7em; + opacity: 0.6; + margin-left: 6px; +} + +.statistics-item-end { + position: absolute; + bottom: 0; + width: 100%; +} + +.statistics-percent-line { + margin-right: calc(var(--f7-list-chevron-icon-area) + var(--f7-list-item-padding-horizontal) + var(--f7-safe-area-right)); +} + +.statistics-percent-line .progressbar { + height: 4px; + --f7-progressbar-bg-color: #f8f8f8; +} diff --git a/src/views/mobile/statistics/SettingsPage.vue b/src/views/mobile/statistics/SettingsPage.vue index 322e4778..491f7470 100644 --- a/src/views/mobile/statistics/SettingsPage.vue +++ b/src/views/mobile/statistics/SettingsPage.vue @@ -62,8 +62,8 @@ - - + {{ $t('Trend Analysis Settings') }} + @@ -74,16 +74,16 @@ - - - - - - - - - - + + + {{ dateRange.displayName }} + + + diff --git a/src/views/mobile/statistics/TransactionPage.vue b/src/views/mobile/statistics/TransactionPage.vue index 13d98fb5..3b641b04 100644 --- a/src/views/mobile/statistics/TransactionPage.vue +++ b/src/views/mobile/statistics/TransactionPage.vue @@ -14,22 +14,39 @@ + v-model:opened="showChartDataTypePopover" + @popover:open="scrollPopoverToSelectedItem"> - - - - - - + + + + + + + + + + + + + + + + - + {{ $t('Sort by') }} @@ -77,7 +94,7 @@ - + @@ -134,7 +151,7 @@ + + + + + + + + {{ $t('Sort by') }} + {{ querySortingTypeName }} + + + + + + + + @@ -187,18 +236,22 @@ - + - {{ dateRangeName() }} + {{ dateRangeName(query) }} - + + + {{ queryTrendDateAggregationTypeName }} + - {{ chartType.displayName }} + {{ chartType.displayName }} @@ -207,15 +260,15 @@ @popover:open="scrollPopoverToSelectedItem"> - + - + {{ queryStartTime }} - @@ -226,6 +279,22 @@ + + + + + + + + + + + + + {{ $t('Filter Accounts') }} @@ -261,10 +337,14 @@ import statisticsConstants from '@/consts/statistics.js'; import { getNameByKeyValue, limitText } from '@/lib/common.js'; import { formatPercent } from '@/lib/numeral.js'; import { + getYearAndMonthFromUnixTime, + getYearMonthFirstUnixTime, + getYearMonthLastUnixTime, getShiftedDateRangeAndDateType, getDateTypeByDateRange, getDateRangeByDateType } from '@/lib/datetime.js'; +import { isChartDataTypeAvailableForAnalysisType } from '@/lib/statistics.js'; import { scrollToSelectedItem } from '@/lib/ui.mobile.js'; export default { @@ -277,10 +357,13 @@ export default { loadingError: null, reloading: false, analysisType: statisticsConstants.allAnalysisTypes.CategoricalAnalysis, + trendDateAggregationType: statisticsConstants.defaultDateAggregationType, showChartDataTypePopover: false, showSortingTypePopover: false, showDatePopover: false, + showDateAggregationPopover: false, showCustomDateRangeSheet: false, + showCustomMonthRangeSheet: false, showMoreActionSheet: false }; }, @@ -289,6 +372,9 @@ export default { defaultCurrency() { return this.userStore.currentUserDefaultCurrency; }, + defaultTrendDateAggregationType() { + return statisticsConstants.defaultDateAggregationType; + }, firstDayOfWeek() { return this.userStore.currentUserFirstDayOfWeek; }, @@ -298,6 +384,20 @@ export default { queryChartDataCategory() { return this.statisticsStore.categoricalAnalysisChartDataCategory; }, + queryChartType: { + get: function () { + if (this.analysisType === statisticsConstants.allAnalysisTypes.CategoricalAnalysis) { + return this.query.categoricalChartType; + } else if (this.analysisType === statisticsConstants.allAnalysisTypes.TrendAnalysis) { + return this.query.trendChartType; + } else { + return null; + } + }, + set: function(value) { + this.setChartType(value); + } + }, queryChartDataTypeName() { const queryChartDataTypeName = getNameByKeyValue(this.allChartDataTypes, this.query.chartDataType, 'type', 'name', 'Statistics'); return this.$t(queryChartDataTypeName); @@ -306,9 +406,23 @@ export default { const querySortingTypeName = getNameByKeyValue(this.allSortingTypes, this.query.sortingType, 'type', 'name', 'System Default'); return this.$t(querySortingTypeName); }, + queryDateType() { + if (this.analysisType === statisticsConstants.allAnalysisTypes.CategoricalAnalysis) { + return this.query.categoricalChartDateType; + } else if (this.analysisType === statisticsConstants.allAnalysisTypes.TrendAnalysis) { + return this.query.trendChartDateType; + } else { + return null; + } + }, + queryTrendDateAggregationTypeName() { + return getNameByKeyValue(this.allDateAggregationTypesArray, this.trendDateAggregationType, 'type', 'displayName', ''); + }, queryStartTime() { if (this.analysisType === statisticsConstants.allAnalysisTypes.CategoricalAnalysis) { return this.$locale.formatUnixTimeToLongDateTime(this.userStore, this.query.categoricalChartStartTime); + } else if (this.analysisType === statisticsConstants.allAnalysisTypes.TrendAnalysis) { + return this.$locale.formatUnixTimeToLongYearMonth(this.userStore, getYearMonthFirstUnixTime(this.query.trendChartStartYearMonth)); } else { return ''; } @@ -316,10 +430,15 @@ export default { queryEndTime() { if (this.analysisType === statisticsConstants.allAnalysisTypes.CategoricalAnalysis) { return this.$locale.formatUnixTimeToLongDateTime(this.userStore, this.query.categoricalChartEndTime); + } else if (this.analysisType === statisticsConstants.allAnalysisTypes.TrendAnalysis) { + return this.$locale.formatUnixTimeToLongYearMonth(this.userStore, getYearMonthLastUnixTime(this.query.trendChartEndYearMonth)); } else { return ''; } }, + allAnalysisTypes() { + return statisticsConstants.allAnalysisTypes; + }, allChartTypes() { if (this.analysisType === statisticsConstants.allAnalysisTypes.CategoricalAnalysis) { return this.$locale.getAllCategoricalChartTypes(); @@ -336,12 +455,17 @@ export default { allSortingTypes() { return statisticsConstants.allSortingTypes; }, + allDateAggregationTypesArray() { + return this.$locale.getAllStatisticsDateAggregationTypes(); + }, allDateRanges() { return datetimeConstants.allDateRanges; }, allDateRangesArray() { if (this.analysisType === statisticsConstants.allAnalysisTypes.CategoricalAnalysis) { return this.$locale.getAllDateRanges(datetimeConstants.allDateRangeScenes.Normal, true); + } else if (this.analysisType === statisticsConstants.allAnalysisTypes.TrendAnalysis) { + return this.$locale.getAllDateRanges(datetimeConstants.allDateRangeScenes.TrendAnalysis, true); } else { return []; } @@ -369,6 +493,14 @@ export default { categoricalAnalysisData() { return this.statisticsStore.categoricalAnalysisData; }, + trendsAnalysisData() { + return this.statisticsStore.trendsAnalysisData; + }, + translateNameInTrendsChart() { + return this.query.chartDataType === this.allChartDataTypes.TotalExpense.type || + this.query.chartDataType === this.allChartDataTypes.TotalIncome.type || + this.query.chartDataType === this.allChartDataTypes.TotalBalance.type; + }, showAmountInChart() { if (!this.showAccountBalance && (this.query.chartDataType === this.allChartDataTypes.AccountTotalAssets.type || this.query.chartDataType === this.allChartDataTypes.AccountTotalLiabilities.type)) { @@ -387,9 +519,15 @@ export default { self.accountsStore.loadAllAccounts({ force: false }), self.transactionCategoriesStore.loadAllCategories({ force: false }) ]).then(() => { - return self.statisticsStore.loadCategoricalAnalysis({ - force: false - }); + if (self.analysisType === statisticsConstants.allAnalysisTypes.CategoricalAnalysis) { + return self.statisticsStore.loadCategoricalAnalysis({ + force: false + }); + } else if (self.analysisType === statisticsConstants.allAnalysisTypes.TrendAnalysis) { + return self.statisticsStore.loadTrendAnalysis({ + force: false + }); + } }).then(() => { self.loading = false; }).catch(error => { @@ -421,10 +559,19 @@ export default { self.query.chartDataType === self.allChartDataTypes.ExpenseBySecondaryCategory.type || self.query.chartDataType === self.allChartDataTypes.IncomeByAccount.type || self.query.chartDataType === self.allChartDataTypes.IncomeByPrimaryCategory.type || - self.query.chartDataType === self.allChartDataTypes.IncomeBySecondaryCategory.type) { - dispatchPromise = self.statisticsStore.loadCategoricalAnalysis({ - force: force - }); + self.query.chartDataType === self.allChartDataTypes.IncomeBySecondaryCategory.type || + self.query.chartDataType === self.allChartDataTypes.TotalExpense.type || + self.query.chartDataType === self.allChartDataTypes.TotalIncome.type || + self.query.chartDataType === self.allChartDataTypes.TotalBalance.type) { + if (self.analysisType === statisticsConstants.allAnalysisTypes.CategoricalAnalysis) { + dispatchPromise = self.statisticsStore.loadCategoricalAnalysis({ + force: force + }); + } else if (self.analysisType === statisticsConstants.allAnalysisTypes.TrendAnalysis) { + dispatchPromise = self.statisticsStore.loadTrendAnalysis({ + force: force + }); + } } else if (self.query.chartDataType === self.allChartDataTypes.AccountTotalAssets.type || self.query.chartDataType === self.allChartDataTypes.AccountTotalLiabilities.type) { dispatchPromise = self.accountsStore.loadAllAccounts({ @@ -459,15 +606,40 @@ export default { } }, setChartType(chartType) { - this.statisticsStore.updateTransactionStatisticsFilter({ - categoricalChartType: chartType - }); + if (this.analysisType === statisticsConstants.allAnalysisTypes.CategoricalAnalysis) { + this.statisticsStore.updateTransactionStatisticsFilter({ + categoricalChartType: chartType + }); + } else if (this.analysisType === statisticsConstants.allAnalysisTypes.TrendAnalysis) { + this.statisticsStore.updateTransactionStatisticsFilter({ + trendChartType: chartType + }); + } }, - setChartDataType(chartDataType) { + setChartDataType(analysisType, chartDataType) { + let analysisTypeChanged = false; + + if (this.analysisType !== analysisType) { + if (!isChartDataTypeAvailableForAnalysisType(this.queryChartDataType, analysisType)) { + this.statisticsStore.updateTransactionStatisticsFilter({ + chartDataType: statisticsConstants.defaultChartDataType + }); + } + + this.analysisType = analysisType; + this.statisticsStore.updateTransactionStatisticsInvalidState(true); + analysisTypeChanged = true; + } + this.statisticsStore.updateTransactionStatisticsFilter({ chartDataType: chartDataType }); + this.showChartDataTypePopover = false; + + if (analysisTypeChanged) { + this.reload(null); + } }, setSortingType(sortingType) { if (sortingType < this.allSortingTypes.Amount.type || sortingType > this.allSortingTypes.Name.type) { @@ -481,6 +653,10 @@ export default { this.showSortingTypePopover = false; }, + setTrendDateAggregationType(aggregationType) { + this.trendDateAggregationType = aggregationType; + this.showDateAggregationPopover = false; + }, setDateFilter(dateType) { if (this.analysisType === statisticsConstants.allAnalysisTypes.CategoricalAnalysis) { if (dateType === this.allDateRanges.Custom.type) { // Custom @@ -490,6 +666,14 @@ export default { } else if (this.query.categoricalChartDateType === dateType) { return; } + } else if (this.analysisType === statisticsConstants.allAnalysisTypes.TrendAnalysis) { + if (dateType === this.allDateRanges.Custom.type) { // Custom + this.showCustomMonthRangeSheet = true; + this.showDatePopover = false; + return; + } else if (this.query.trendChartDateType === dateType) { + return; + } } const dateRange = getDateRangeByDateType(dateType, this.firstDayOfWeek); @@ -506,6 +690,12 @@ export default { categoricalChartStartTime: dateRange.minTime, categoricalChartEndTime: dateRange.maxTime }); + } else if (this.analysisType === statisticsConstants.allAnalysisTypes.TrendAnalysis) { + changed = this.statisticsStore.updateTransactionStatisticsFilter({ + trendChartDateType: dateRange.dateType, + trendChartStartYearMonth: getYearAndMonthFromUnixTime(dateRange.minTime), + trendChartEndYearMonth: getYearAndMonthFromUnixTime(dateRange.maxTime) + }); } this.showDatePopover = false; @@ -531,13 +721,45 @@ export default { }); this.showCustomDateRangeSheet = false; + } else if (this.analysisType === statisticsConstants.allAnalysisTypes.TrendAnalysis) { + const chartDateType = getDateTypeByDateRange(getYearMonthFirstUnixTime(startTime), getYearMonthLastUnixTime(endTime), this.firstDayOfWeek, datetimeConstants.allDateRangeScenes.TrendAnalysis); + + this.statisticsStore.updateTransactionStatisticsFilter({ + trendChartDateType: chartDateType, + trendChartStartYearMonth: startTime, + trendChartEndYearMonth: endTime + }); + + this.showCustomMonthRangeSheet = false; } if (changed) { this.reload(null); } }, - shiftDateRange(scale) { + showCustomDateRange() { + if (this.analysisType === statisticsConstants.allAnalysisTypes.CategoricalAnalysis) { + return this.query.categoricalChartDateType === this.allDateRanges.Custom.type && this.query.categoricalChartStartTime && this.query.categoricalChartEndTime; + } else if (this.analysisType === statisticsConstants.allAnalysisTypes.TrendAnalysis) { + return this.query.trendChartDateType === this.allDateRanges.Custom.type && this.query.trendChartStartYearMonth && this.query.trendChartEndYearMonth; + } else { + return false; + } + }, + canShiftDateRange(query) { + if (query.chartDataType === this.allChartDataTypes.AccountTotalAssets.type || query.chartDataType === this.allChartDataTypes.AccountTotalLiabilities.type) { + return false; + } + + if (this.analysisType === statisticsConstants.allAnalysisTypes.CategoricalAnalysis) { + return query.categoricalChartDateType !== this.allDateRanges.All.type; + } else if (this.analysisType === statisticsConstants.allAnalysisTypes.TrendAnalysis) { + return query.trendChartDateType !== this.allDateRanges.All.type; + } else { + return false; + } + }, + shiftDateRange(query, scale) { if (this.query.categoricalChartDateType === this.allDateRanges.All.type) { return; } @@ -545,33 +767,46 @@ export default { let changed = false; if (this.analysisType === statisticsConstants.allAnalysisTypes.CategoricalAnalysis) { - const newDateRange = getShiftedDateRangeAndDateType(this.query.categoricalChartStartTime, this.query.categoricalChartEndTime, scale, this.firstDayOfWeek, datetimeConstants.allDateRangeScenes.Normal); + const newDateRange = getShiftedDateRangeAndDateType(query.categoricalChartStartTime, query.categoricalChartEndTime, scale, this.firstDayOfWeek, datetimeConstants.allDateRangeScenes.Normal); changed = this.statisticsStore.updateTransactionStatisticsFilter({ categoricalChartDateType: newDateRange.dateType, categoricalChartStartTime: newDateRange.minTime, categoricalChartEndTime: newDateRange.maxTime }); + } else if (this.analysisType === statisticsConstants.allAnalysisTypes.TrendAnalysis) { + const newDateRange = getShiftedDateRangeAndDateType(getYearMonthFirstUnixTime(query.trendChartStartYearMonth), getYearMonthLastUnixTime(query.trendChartEndYearMonth), scale, this.firstDayOfWeek, datetimeConstants.allDateRangeScenes.TrendAnalysis); + + changed = this.statisticsStore.updateTransactionStatisticsFilter({ + trendChartDateType: newDateRange.dateType, + trendChartStartYearMonth: getYearAndMonthFromUnixTime(newDateRange.minTime), + trendChartEndYearMonth: getYearAndMonthFromUnixTime(newDateRange.maxTime) + }); } if (changed) { this.reload(null); } }, - dateRangeName() { + dateRangeName(query) { if (this.query.chartDataType === this.allChartDataTypes.AccountTotalAssets.type || this.query.chartDataType === this.allChartDataTypes.AccountTotalLiabilities.type) { return this.$t(this.allDateRanges.All.name); } if (this.analysisType === statisticsConstants.allAnalysisTypes.CategoricalAnalysis) { - return this.$locale.getDateRangeDisplayName(this.userStore, this.query.categoricalChartDateType, this.query.categoricalChartStartTime, this.query.categoricalChartEndTime); + return this.$locale.getDateRangeDisplayName(this.userStore, query.categoricalChartDateType, query.categoricalChartStartTime, query.categoricalChartEndTime); + } else if (this.analysisType === statisticsConstants.allAnalysisTypes.TrendAnalysis) { + return this.$locale.getDateRangeDisplayName(this.userStore, query.trendChartDateType, getYearMonthFirstUnixTime(query.trendChartStartYearMonth), getYearMonthLastUnixTime(query.trendChartEndYearMonth)); } else { return ''; } }, clickPieChartItem(item) { - this.f7router.navigate(this.getTransactionItemLinkUrl(item)); + this.f7router.navigate(this.getTransactionItemLinkUrl(item.id)); + }, + clickTrendChartItem(item) { + this.f7router.navigate(this.getTransactionItemLinkUrl(item.itemId, item.dateRange)); }, filterAccounts() { this.f7router.navigate('/settings/filter/account?type=statisticsCurrent'); @@ -607,8 +842,8 @@ export default { getDisplayPercent(value, precision, lowPrecisionValue) { return formatPercent(value, precision, lowPrecisionValue); }, - getTransactionItemLinkUrl(item) { - return `/transaction/list?${this.statisticsStore.getTransactionListPageParams(statisticsConstants.allAnalysisTypes.CategoricalAnalysis, item.id)}`; + getTransactionItemLinkUrl(itemId, dateRange) { + return `/transaction/list?${this.statisticsStore.getTransactionListPageParams(this.analysisType, itemId, dateRange)}`; } } }; @@ -649,50 +884,12 @@ export default { transform: translateY(1.5em); } -.statistics-list-item-overview-amount { - margin-top: 2px; - font-size: 1.5em; - overflow: hidden; - text-overflow: ellipsis; - margin-bottom: 6px; -} - -.statistics-list-item-text { - overflow: hidden; - text-overflow: ellipsis; -} - -.statistics-list-item .item-content { - margin-top: 8px; - margin-bottom: 12px; -} - -.statistics-icon { - margin-bottom: -2px; -} - -.statistics-percent { - font-size: 0.7em; - opacity: 0.6; - margin-left: 6px; -} - -.statistics-item-end { - position: absolute; - bottom: 0; - width: 100%; -} - -.statistics-percent-line { - margin-right: calc(var(--f7-list-chevron-icon-area) + var(--f7-list-item-padding-horizontal) + var(--f7-safe-area-right)); -} - -.statistics-percent-line .progressbar { - height: 4px; - --f7-progressbar-bg-color: #f8f8f8; -} - .dark .statistics-percent-line .progressbar { --f7-progressbar-bg-color: #161616; } + +.chart-data-type-popover-menu .popover-inner{ + max-height: 400px; + overflow-y: auto; +}
{{ hint }}
+ {{ beginDateTime }} + - + {{ endDateTime }} +