diff --git a/src/locales/en.js b/src/locales/en.js index 1e20ac41..2b5208e1 100644 --- a/src/locales/en.js +++ b/src/locales/en.js @@ -812,6 +812,8 @@ export default { 'This Year': 'This Year', 'Monthly income': 'Monthly income', 'Unable to get transaction overview': 'Unable to get transaction overview', + 'Data is up to date': 'Data is up to date', + 'Data has been updated': 'Data has been updated', 'Net assets': 'Net assets', 'Total assets': 'Total assets', 'Total liabilities': 'Total liabilities', @@ -826,6 +828,8 @@ export default { 'Receivables': 'Receivables', 'Investment Account': 'Investment Account', 'Unable to get account list': 'Unable to get account list', + 'Account list is up to date': 'Account list is up to date', + 'Account list has been updated': 'Account list has been updated', 'No available account': 'No available account', 'Add Account': 'Add Account', 'Edit Account': 'Edit Account', @@ -989,6 +993,8 @@ export default { 'Device & Sessions': 'Device & Sessions', 'Logout All': 'Logout All', 'Unable to get session list': 'Unable to get session list', + 'Session list is up to date': 'Session list is up to date', + 'Session list has been updated': 'Session list has been updated', 'Current': 'Current', 'Other Device': 'Other Device', 'Unknown Device': 'Unknown Device', @@ -1008,6 +1014,8 @@ export default { 'Add Default Categories': 'Add Default Categories', 'Default Categories': 'Default Categories', 'Unable to get category list': 'Unable to get category list', + 'Category list is up to date': 'Category list is up to date', + 'Category list has been updated': 'Category list has been updated', 'Unable to move category': 'Unable to move category', 'Unable to hide this category': 'Unable to hide this category', 'Unable to unhide this category': 'Unable to unhide this category', @@ -1035,6 +1043,8 @@ export default { 'Tag Title': 'Tag Title', 'No available tag': 'No available tag', 'Unable to get tag list': 'Unable to get tag list', + 'Tag list is up to date': 'Tag list is up to date', + 'Tag list has been updated': 'Tag list has been updated', 'Unable to add tag': 'Unable to add tag', 'Unable to save tag': 'Unable to save tag', 'Unable to move tag': 'Unable to move tag', diff --git a/src/locales/zh_Hans.js b/src/locales/zh_Hans.js index b871e0d2..1e4ebcf9 100644 --- a/src/locales/zh_Hans.js +++ b/src/locales/zh_Hans.js @@ -812,6 +812,8 @@ export default { 'This Year': '今年', 'Monthly income': '当月收入', 'Unable to get transaction overview': '无法获取交易概要', + 'Data is up to date': '数据已是最新', + 'Data has been updated': '数据已更新', 'Net assets': '净资产', 'Total assets': '总资产', 'Total liabilities': '总负债', @@ -826,6 +828,8 @@ export default { 'Receivables': '应收款项', 'Investment Account': '投资账户', 'Unable to get account list': '无法获取账户列表', + 'Account list is up to date': '账户列表已是最新', + 'Account list has been updated': '账户列表已更新', 'No available account': '没有可用的账户', 'Add Account': '添加账户', 'Edit Account': '编辑账户', @@ -989,6 +993,8 @@ export default { 'Device & Sessions': '设备和会话', 'Logout All': '注销全部', 'Unable to get session list': '无法获取会话列表', + 'Session list is up to date': '会话列表已是最新', + 'Session list has been updated': '会话列表已更新', 'Current': '当前', 'Other Device': '其他设备', 'Unknown Device': '未知设备', @@ -1008,6 +1014,8 @@ export default { 'Add Default Categories': '添加默认分类', 'Default Categories': '默认分类', 'Unable to get category list': '无法获取分类列表', + 'Category list is up to date': '分类列表已是最新', + 'Category list has been updated': '分类列表已更新', 'Unable to move category': '无法移动分类', 'Unable to hide this category': '无法隐藏该分类', 'Unable to unhide this category': '无法取消隐藏该分类', @@ -1035,6 +1043,8 @@ export default { 'Tag Title': '标签标题', 'No available tag': '没有可用的标签', 'Unable to get tag list': '无法获取标签列表', + 'Tag list is up to date': '标签列表已是最新', + 'Tag list has been updated': '标签列表已更新', 'Unable to add tag': '无法添加标签', 'Unable to save tag': '无法保存标签', 'Unable to move tag': '无法移动标签', diff --git a/src/stores/account.js b/src/stores/account.js index 48c888c6..ea361097 100644 --- a/src/stores/account.js +++ b/src/stores/account.js @@ -6,7 +6,7 @@ import { useExchangeRatesStore } from './exchangeRates.js'; import accountConstants from '@/consts/account.js'; import services from '@/lib/services.js'; import logger from '@/lib/logger.js'; -import { isNumber } from '@/lib/common.js'; +import { isNumber, isEquals } from '@/lib/common.js'; import { getCategorizedAccounts, getAllFilteredAccountsBalance } from '@/lib/account.js'; function loadAccountList(state, accounts) { @@ -537,12 +537,17 @@ export const useAccountsStore = defineStore('accounts', { return; } - loadAccountList(self, data.result); - if (self.accountListStateInvalid) { self.updateAccountListInvalidState(false); } + if (force && data.result && isEquals(self.allAccounts, data.result)) { + reject({ message: 'Account list is up to date' }); + return; + } + + loadAccountList(self, data.result); + resolve(data.result); }).catch(error => { if (force) { diff --git a/src/stores/exchangeRates.js b/src/stores/exchangeRates.js index 63939ec0..05b4179f 100644 --- a/src/stores/exchangeRates.js +++ b/src/stores/exchangeRates.js @@ -81,7 +81,7 @@ export const useExchangeRatesStore = defineStore('exchangeRates', { const currentData = getExchangeRatesFromLocalStorage(); - if (currentData && currentData.data && isEquals(currentData.data, data.result)) { + if (force && currentData && currentData.data && isEquals(currentData.data, data.result)) { reject({ message: 'Exchange rates data is up to date' }); return; } diff --git a/src/stores/overview.js b/src/stores/overview.js index 20c7e0f9..5878865f 100644 --- a/src/stores/overview.js +++ b/src/stores/overview.js @@ -2,9 +2,9 @@ import { defineStore } from 'pinia'; import { useExchangeRatesStore } from './exchangeRates.js'; +import { isNumber, isEquals } from '@/lib/common.js'; import services from '@/lib/services.js'; import logger from '@/lib/logger.js'; -import { isNumber } from '@/lib/common.js'; export const useOverviewStore = defineStore('overview', { state: () => ({ @@ -91,12 +91,17 @@ export const useOverviewStore = defineStore('overview', { item.incompleteExpenseAmount = hasUnCalculatedTotalExpense; } - self.transactionOverview = overview; - if (self.transactionOverviewStateInvalid) { self.updateTransactionOverviewInvalidState(false); } + if (force && overview && isEquals(self.transactionOverview, overview)) { + reject({ message: 'Data is up to date' }); + return; + } + + self.transactionOverview = overview; + resolve(overview); }).catch(error => { if (force) { diff --git a/src/stores/transactionCategory.js b/src/stores/transactionCategory.js index 1d33c8dc..d87d9d61 100644 --- a/src/stores/transactionCategory.js +++ b/src/stores/transactionCategory.js @@ -1,6 +1,7 @@ import { defineStore } from 'pinia'; import categoryConstants from '@/consts/category.js'; +import { isEquals } from '@/lib/common.js'; import services from '@/lib/services.js'; import logger from '@/lib/logger.js'; @@ -179,12 +180,17 @@ export const useTransactionCategoriesStore = defineStore('transactionCategories' } } - loadTransactionCategoryList(self, data.result); - if (self.transactionCategoryListStateInvalid) { self.updateTransactionCategoryListInvalidState(false); } + if (force && data.result && isEquals(self.allTransactionCategories, data.result)) { + reject({ message: 'Category list is up to date' }); + return; + } + + loadTransactionCategoryList(self, data.result); + resolve(data.result); }).catch(error => { if (force) { diff --git a/src/stores/transactionTag.js b/src/stores/transactionTag.js index f5da03d7..81904cd3 100644 --- a/src/stores/transactionTag.js +++ b/src/stores/transactionTag.js @@ -1,5 +1,6 @@ import { defineStore } from 'pinia'; +import { isEquals } from '@/lib/common.js'; import services from '@/lib/services.js'; import logger from '@/lib/logger.js'; @@ -85,12 +86,17 @@ export const useTransactionTagsStore = defineStore('transactionTags', { return; } - loadTransactionTagList(self, data.result); - if (self.transactionTagListStateInvalid) { self.updateTransactionTagListInvalidState(false); } + if (force && data.result && isEquals(self.allTransactionTags, data.result)) { + reject({ message: 'Tag list is up to date' }); + return; + } + + loadTransactionTagList(self, data.result); + resolve(data.result); }).catch(error => { if (force) { diff --git a/src/views/mobile/HomePage.vue b/src/views/mobile/HomePage.vue index 199e86c6..b0fb0166 100644 --- a/src/views/mobile/HomePage.vue +++ b/src/views/mobile/HomePage.vue @@ -353,15 +353,20 @@ export default { }, reload(done) { const self = this; + const force = !!done; self.overviewStore.loadTransactionOverview({ defaultCurrency: self.defaultCurrency, dateRange: self.dateRange, - force: true + force: force }).then(() => { if (done) { done(); } + + if (force) { + self.$toast('Data has been updated'); + } }).catch(error => { if (done) { done(); diff --git a/src/views/mobile/accounts/ListPage.vue b/src/views/mobile/accounts/ListPage.vue index 6c3e8126..9defb83e 100644 --- a/src/views/mobile/accounts/ListPage.vue +++ b/src/views/mobile/accounts/ListPage.vue @@ -267,13 +267,18 @@ export default { } const self = this; + const force = !!done; self.accountsStore.loadAllAccounts({ - force: true + force: force }).then(() => { if (done) { done(); } + + if (force) { + self.$toast('Account list has been updated'); + } }).catch(error => { if (done) { done(); diff --git a/src/views/mobile/categories/AllPage.vue b/src/views/mobile/categories/AllPage.vue index 67efb2a4..88603de7 100644 --- a/src/views/mobile/categories/AllPage.vue +++ b/src/views/mobile/categories/AllPage.vue @@ -58,13 +58,18 @@ export default { }, reload(done) { const self = this; + const force = !!done; self.transactionCategoriesStore.loadAllCategories({ - force: true + force: force }).then(() => { if (done) { done(); } + + if (force) { + self.$toast('Category list has been updated'); + } }).catch(error => { if (done) { done(); diff --git a/src/views/mobile/categories/ListPage.vue b/src/views/mobile/categories/ListPage.vue index b512855c..8013a9db 100644 --- a/src/views/mobile/categories/ListPage.vue +++ b/src/views/mobile/categories/ListPage.vue @@ -242,13 +242,18 @@ export default { } const self = this; + const force = !!done; self.transactionCategoriesStore.loadAllCategories({ - force: true + force: force }).then(() => { if (done) { done(); } + + if (force) { + self.$toast('Category list has been updated'); + } }).catch(error => { if (done) { done(); diff --git a/src/views/mobile/statistics/TransactionPage.vue b/src/views/mobile/statistics/TransactionPage.vue index b52f8955..cc78a617 100644 --- a/src/views/mobile/statistics/TransactionPage.vue +++ b/src/views/mobile/statistics/TransactionPage.vue @@ -496,6 +496,7 @@ export default { }, reload(done) { const self = this; + const force = !!done; let dispatchPromise = null; if (self.query.chartDataType === self.allChartDataTypes.ExpenseByAccount.type || @@ -510,7 +511,7 @@ export default { } else if (self.query.chartDataType === self.allChartDataTypes.AccountTotalAssets.type || self.query.chartDataType === self.allChartDataTypes.AccountTotalLiabilities.type) { dispatchPromise = self.accountsStore.loadAllAccounts({ - force: true + force: force }); } @@ -519,6 +520,10 @@ export default { if (done) { done(); } + + if (force) { + self.$toast('Data has been updated'); + } }).catch(error => { if (done) { done(); diff --git a/src/views/mobile/tags/ListPage.vue b/src/views/mobile/tags/ListPage.vue index e873e0c7..3dea1561 100644 --- a/src/views/mobile/tags/ListPage.vue +++ b/src/views/mobile/tags/ListPage.vue @@ -238,13 +238,18 @@ export default { } const self = this; + const force = !!done; self.transactionTagsStore.loadAllTags({ - force: true + force: force }).then(() => { if (done) { done(); } + + if (force) { + self.$toast('Tag list has been updated'); + } }).catch(error => { if (done) { done(); diff --git a/src/views/mobile/transactions/ListPage.vue b/src/views/mobile/transactions/ListPage.vue index 3e5b8715..e81dc15e 100644 --- a/src/views/mobile/transactions/ListPage.vue +++ b/src/views/mobile/transactions/ListPage.vue @@ -590,6 +590,7 @@ export default { }, reload(done) { const self = this; + const force = !!done; if (!done) { self.loading = true; @@ -601,6 +602,7 @@ export default { ]).then(() => { return self.transactionsStore.loadTransactions({ reload: true, + force: force, autoExpand: true, defaultCurrency: self.defaultCurrency }); @@ -609,6 +611,10 @@ export default { done(); } + if (force) { + self.$toast('Data has been updated'); + } + self.loading = false; }).catch(error => { if (error.processed || done) { diff --git a/src/views/mobile/users/SessionListPage.vue b/src/views/mobile/users/SessionListPage.vue index 73002aeb..e058c74f 100644 --- a/src/views/mobile/users/SessionListPage.vue +++ b/src/views/mobile/users/SessionListPage.vue @@ -48,6 +48,7 @@ import { useUserStore } from '@/stores/user.js'; import { useTokensStore } from '@/stores/token.js'; import iconConstants from '@/consts/icon.js'; +import { isEquals } from '@/lib/common.js'; import { parseDeviceInfo, parseUserAgent } from '@/lib/misc.js'; import { onSwipeoutDeleted } from '@/lib/ui.mobile.js'; @@ -118,6 +119,12 @@ export default { done(); } + if (isEquals(self.tokens, tokens)) { + self.$toast('Session list is up to date'); + } else { + self.$toast('Session list has been updated'); + } + self.tokens = tokens; }).catch(error => { if (done) {