mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2024-11-20 18:51:18 +01:00
4b976c13c1
* Disable shapeshift and use changelly * UI to manage changelly payment method * wip on changelly api * Add in Vue component for changelly and remove target currency from payment method * add changelly merhcant id * Small fixes to get Conversion to load * wip fixing the component * fix merge conflict * fixes to UI * remove debug, fix fee calc and move changelly to own partials * Update ChangellyController.cs * move original vue setup back to checkout * Update core.js * Extracting Changelly component to js file * Proposal for loading spinner * remove zone * imrpove changelly ui * add in changelly config checks * try new method to calculate amount + remove to currency from list * abstract changelly lofgic to provider and reduce dependency on js component * Add UTs for Changelly * refactor changelly backend * fix failing UT * add shitcoin tax * pr changes * pr changes * WIP: getting rid of changelly dependency * client caching, compiling code, cleaner code * Cleaner changelly * fiat! * updat i18n, css and error styler * default keys * pr changes part 1 * part2 * fix tests * fix loader alignment and retry button responsiveness * final pr change
132 lines
5.2 KiB
JavaScript
132 lines
5.2 KiB
JavaScript
var ChangellyComponent =
|
|
{
|
|
props: ["storeId", "toCurrency", "toCurrencyDue", "toCurrencyAddress", "merchantId"],
|
|
data: function () {
|
|
return {
|
|
currencies: [],
|
|
isLoading: true,
|
|
calculatedAmount: 0,
|
|
selectedFromCurrency: "",
|
|
prettyDropdownInstance: null,
|
|
calculateError: false,
|
|
currenciesError: false
|
|
};
|
|
},
|
|
computed: {
|
|
url: function () {
|
|
if (this.calculatedAmount && this.selectedFromCurrency && !this.isLoading) {
|
|
return "https://changelly.com/widget/v1?auth=email" +
|
|
"&from=" +
|
|
this.selectedFromCurrency +
|
|
"&to=" +
|
|
this.toCurrency +
|
|
"&address=" +
|
|
this.toCurrencyAddress +
|
|
"&amount=" +
|
|
this.calculatedAmount +
|
|
(this.merchantId ? "&merchant_id=" + this.merchantId + "&ref_id=" + this.merchantId : "");
|
|
}
|
|
return null;
|
|
}
|
|
},
|
|
watch: {
|
|
selectedFromCurrency: function (val) {
|
|
if (val) {
|
|
this.calculateAmount();
|
|
} else {
|
|
this.calculateAmount = 0;
|
|
}
|
|
}
|
|
},
|
|
mounted: function () {
|
|
this.prettyDropdownInstance = initDropdown(this.$refs.changellyCurrenciesDropdown);
|
|
this.loadCurrencies();
|
|
},
|
|
methods: {
|
|
getUrl: function () {
|
|
return window.location.origin + "/changelly/" + this.storeId;
|
|
},
|
|
loadCurrencies: function () {
|
|
this.isLoading = true;
|
|
this.currenciesError = false;
|
|
$.ajax(
|
|
{
|
|
context: this,
|
|
url: this.getUrl() + "/currencies",
|
|
dataType: "json",
|
|
success: function (result) {
|
|
|
|
for (i = 0; i < result.length; i++) {
|
|
if (result[i].enabled &&
|
|
result[i].name.toLowerCase() !== this.toCurrency.toLowerCase()) {
|
|
this.currencies.push(result[i]);
|
|
}
|
|
}
|
|
var self = this;
|
|
Vue.nextTick(function () {
|
|
self.prettyDropdownInstance
|
|
.refresh()
|
|
.on("change",
|
|
function (event) {
|
|
self.onCurrencyChange(self.$refs.changellyCurrenciesDropdown.value);
|
|
});
|
|
});
|
|
|
|
},
|
|
error: function(){
|
|
this.currenciesError = true;
|
|
},
|
|
complete: function () {
|
|
this.isLoading = false;
|
|
}
|
|
});
|
|
},
|
|
calculateAmount: function () {
|
|
this.isLoading = true;
|
|
this.calculateError = false;
|
|
$.ajax(
|
|
{
|
|
url: this.getUrl() + "/calculate",
|
|
dataType: "json",
|
|
data: {
|
|
fromCurrency: this.selectedFromCurrency,
|
|
toCurrency: this.toCurrency,
|
|
toCurrencyAmount: this.toCurrencyDue
|
|
},
|
|
context: this,
|
|
success: function (result) {
|
|
this.calculatedAmount = result;
|
|
},
|
|
error: function(){
|
|
this.calculateError = true;
|
|
},
|
|
complete: function () {
|
|
this.isLoading = false;
|
|
}
|
|
});
|
|
},
|
|
retry: function(type){
|
|
if(type=="loadCurrencies"){
|
|
this.loadCurrencies();
|
|
}else if(type=="calculateAmount"){
|
|
this.calculateAmount();
|
|
}
|
|
},
|
|
onCurrencyChange: function (value) {
|
|
this.selectedFromCurrency = value;
|
|
this.calculatedAmount = 0;
|
|
},
|
|
openDialog: function (e) {
|
|
if (e && e.preventDefault) {
|
|
e.preventDefault();
|
|
}
|
|
|
|
var changellyWindow = window.open(
|
|
this.url,
|
|
'Changelly',
|
|
'width=600,height=470,toolbar=0,menubar=0,location=0,status=1,scrollbars=1,resizable=0,left=0,top=0');
|
|
changellyWindow.focus();
|
|
}
|
|
}
|
|
};
|