mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2025-02-28 08:54:13 +01:00
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();
|
|||
|
}
|
|||
|
}
|
|||
|
};
|