diff --git a/src/filters/exchangeRate.js b/src/filters/exchangeRate.js
index b886e200..9e98ad3c 100644
--- a/src/filters/exchangeRate.js
+++ b/src/filters/exchangeRate.js
@@ -1,32 +1,18 @@
-export default function (oldRate, currentCurrency, allExchangeRates) {
- const exchangeRateMap = {};
+export default function (rate) {
+ const rateStr = rate.toString();
- for (let i = 0; i < allExchangeRates.length; i++) {
- const exchangeRate = allExchangeRates[i];
- exchangeRateMap[exchangeRate.currency] = exchangeRate;
- }
-
- const toCurrencyExchangeRate = exchangeRateMap[currentCurrency];
-
- if (!toCurrencyExchangeRate) {
- return '';
- }
-
- const newRate = parseFloat(oldRate) / parseFloat(toCurrencyExchangeRate.rate);
- const newRateStr = newRate.toString();
-
- if (newRateStr.indexOf('.') < 0) {
- return newRateStr;
+ if (rateStr.indexOf('.') < 0) {
+ return rateStr;
} else {
let firstNonZeroPos = 0;
- for (let i = 0; i < newRateStr.length; i++) {
- if (newRateStr.charAt(i) !== '.' && newRateStr.charAt(i) !== '0') {
- firstNonZeroPos = Math.min(i + 4, newRateStr.length);
+ for (let i = 0; i < rateStr.length; i++) {
+ if (rateStr.charAt(i) !== '.' && rateStr.charAt(i) !== '0') {
+ firstNonZeroPos = Math.min(i + 4, rateStr.length);
break;
}
}
- return newRateStr.substr(0, Math.max(6, Math.max(firstNonZeroPos, newRateStr.indexOf('.') + 2)));
+ return rateStr.substr(0, Math.max(6, Math.max(firstNonZeroPos, rateStr.indexOf('.') + 2)));
}
}
diff --git a/src/lib/utils.js b/src/lib/utils.js
index 236a3ea8..b0057101 100644
--- a/src/lib/utils.js
+++ b/src/lib/utils.js
@@ -508,6 +508,16 @@ function stringCurrencyToNumeric(str) {
}
}
+function getExchangedAmount(amount, fromRate, toRate) {
+ const exchangeRate = parseFloat(toRate) / parseFloat(fromRate);
+
+ if (!isNumber(exchangeRate)) {
+ return null;
+ }
+
+ return amount * exchangeRate;
+}
+
function base64encode(arrayBuffer) {
if (!arrayBuffer || arrayBuffer.length === 0) {
return null;
@@ -684,6 +694,7 @@ export default {
appendThousandsSeparator,
numericCurrencyToString,
stringCurrencyToNumeric,
+ getExchangedAmount,
base64encode,
arrayBufferToString,
stringToArrayBuffer,
diff --git a/src/locales/en.js b/src/locales/en.js
index 008709fc..19c4949c 100644
--- a/src/locales/en.js
+++ b/src/locales/en.js
@@ -993,6 +993,8 @@ export default {
'Are you sure you want to re-login?': 'Are you sure you want to re-login?',
'Exchange Rates Data': 'Exchange Rates Data',
'Base Currency': 'Base Currency',
+ 'Base Amount': 'Base Amount',
+ 'Set As Baseline': 'Set As Baseline',
'Last Updated': 'Last Updated',
'Data source': 'Data source',
'No exchange rates data': 'No exchange rates data',
diff --git a/src/locales/zh_Hans.js b/src/locales/zh_Hans.js
index 2a31bd9c..be498d74 100644
--- a/src/locales/zh_Hans.js
+++ b/src/locales/zh_Hans.js
@@ -993,6 +993,8 @@ export default {
'Are you sure you want to re-login?': '您确定要重新登录?',
'Exchange Rates Data': '汇率数据',
'Base Currency': '基准货币',
+ 'Base Amount': '基准金额',
+ 'Set As Baseline': '设置为基准',
'Last Updated': '最后更新',
'Data source': '数据来源',
'No exchange rates data': '没有汇率数据',
diff --git a/src/store/exchangeRates.js b/src/store/exchangeRates.js
index 2b2541e0..4d06332c 100644
--- a/src/store/exchangeRates.js
+++ b/src/store/exchangeRates.js
@@ -81,13 +81,7 @@ export function getExchangedAmount(state) {
return null;
}
- const exchangeRate = parseFloat(toCurrencyExchangeRate.rate) / parseFloat(fromCurrencyExchangeRate.rate);
-
- if (!utils.isNumber(exchangeRate)) {
- return null;
- }
-
- return amount * exchangeRate;
+ return utils.getExchangedAmount(amount, fromCurrencyExchangeRate.rate, toCurrencyExchangeRate.rate)
};
}
diff --git a/src/views/mobile/ExchangeRates.vue b/src/views/mobile/ExchangeRates.vue
index 9320eb9f..6f250ab0 100644
--- a/src/views/mobile/ExchangeRates.vue
+++ b/src/views/mobile/ExchangeRates.vue
@@ -4,7 +4,7 @@
-
+
@@ -12,14 +12,31 @@
+ class="list-item-with-header-and-title list-item-no-item-after"
+ :header="$t('Base Currency')"
+ :title="`currency.${baseCurrency}` | localized"
+ smart-select :smart-select-params="{ openIn: 'popup', pageTitle: $t('Base Currency'), searchbar: true, searchbarPlaceholder: $t('Currency Name'), searchbarDisableText: $t('Cancel'), closeOnSelect: true, popupCloseLinkText: $t('Done'), scrollToSelectedItem: true }"
+ >
+
+
+
@@ -34,7 +51,12 @@
+ :after="getConvertedAmount(exchangeRate) | exchangeRate"
+ swipeout>
+
+
+
+
@@ -47,6 +69,17 @@
{{ exchangeRatesData.dataSource }}
+
+
+
+
+ {{ $t('Update') }}
+
+
+
+ {{ $t('Cancel') }}
+
+
@@ -57,13 +90,30 @@ export default {
return {
baseCurrency: self.$store.getters.currentUserDefaultCurrency,
- updating: false
+ baseAmount: 100,
+ updating: false,
+ showMoreActionSheet: false,
+ showBaseAmountSheet: false
};
},
computed: {
exchangeRatesData() {
return this.$store.state.latestExchangeRates.data;
},
+ exchangeRateMap() {
+ const exchangeRateMap = {};
+
+ if (!this.exchangeRatesData.exchangeRates) {
+ return exchangeRateMap;
+ }
+
+ for (let i = 0; i < this.exchangeRatesData.exchangeRates.length; i++) {
+ const exchangeRate = this.exchangeRatesData.exchangeRates[i];
+ exchangeRateMap[exchangeRate.currency] = exchangeRate;
+ }
+
+ return exchangeRateMap;
+ },
availableExchangeRates() {
if (!this.exchangeRatesData || !this.exchangeRatesData.exchangeRates) {
return [];
@@ -86,6 +136,9 @@ export default {
})
return availableExchangeRates;
+ },
+ baseAmountFontSize() {
+ return this.getFontSizeByAmount(this.baseAmount);
}
},
created() {
@@ -144,7 +197,43 @@ export default {
self.$toast(error.message || error);
}
});
+ },
+ getConvertedAmount(toExchangeRate) {
+ const fromExchangeRate = this.exchangeRateMap[this.baseCurrency];
+
+ if (!fromExchangeRate) {
+ return '';
+ }
+
+ return this.$utilities.getExchangedAmount(this.baseAmount / 100, fromExchangeRate.rate, toExchangeRate.rate);
+ },
+ setAsBaseline(currency, amount) {
+ if (!this.$utilities.isNumber(amount)) {
+ amount = '';
+ }
+
+ this.baseCurrency = currency;
+ this.baseAmount = this.$utilities.stringCurrencyToNumeric(amount.toString());
+ },
+ getFontSizeByAmount(amount) {
+ if (amount >= 100000000 || amount <= -100000000) {
+ return 32;
+ } else if (amount >= 1000000 || amount <= -1000000) {
+ return 36;
+ } else {
+ return 40;
+ }
}
}
}
+
+