commit
5e15c6a719
|
@ -10,19 +10,7 @@
|
|||
/>
|
||||
</LokiField>
|
||||
|
||||
<div class="q-mt-md col">
|
||||
<LokiField :label="$t('fieldLabels.awardRecepientAddress')" :error="$v.service_node.award_address.$error">
|
||||
<q-input v-model="service_node.award_address"
|
||||
:dark="theme=='dark'"
|
||||
@blur="$v.service_node.award_address.$touch"
|
||||
:placeholder="address_placeholder"
|
||||
hide-underline
|
||||
/>
|
||||
</LokiField>
|
||||
<div class="address-type" :class="[addressType]">( {{ addressType | addressTypeString }} )</div>
|
||||
</div>
|
||||
|
||||
<LokiField :label="$t('fieldLabels.amount')" class="q-mt-md" :error="$v.service_node.amount.$error">
|
||||
<LokiField :label="$t('fieldLabels.amount')" class="q-mt-md" :error="$v.service_node.amount.$error">
|
||||
<q-input v-model="service_node.amount"
|
||||
:dark="theme=='dark'"
|
||||
type="number"
|
||||
|
@ -39,15 +27,18 @@
|
|||
|
||||
|
||||
|
||||
<q-field class="q-pt-sm">
|
||||
<q-field class="buttons q-pt-sm">
|
||||
<q-btn
|
||||
:disable="!is_able_to_send"
|
||||
color="primary" @click="stake()" :label="$t('buttons.stake')" />
|
||||
<q-btn
|
||||
:disable="!is_able_to_send"
|
||||
color="secondary" @click="sweepAll()" :label="$t('buttons.sweepAll')" />
|
||||
</q-field>
|
||||
|
||||
</div>
|
||||
|
||||
<q-inner-loading :visible="stake_status.sending" :dark="theme=='dark'">
|
||||
<q-inner-loading :visible="stake_status.sending || tx_status.sending" :dark="theme=='dark'">
|
||||
<q-spinner color="primary" :size="30" />
|
||||
</q-inner-loading>
|
||||
</div>
|
||||
|
@ -69,8 +60,9 @@ export default {
|
|||
theme: state => state.gateway.app.config.appearance.theme,
|
||||
unlocked_balance: state => state.gateway.wallet.info.unlocked_balance,
|
||||
info: state => state.gateway.wallet.info,
|
||||
address_list: state => state.gateway.wallet.address_list,
|
||||
stake_status: state => state.gateway.service_node_status.stake,
|
||||
tx_status: state => state.gateway.tx_status,
|
||||
award_address: state => state.gateway.wallet.info.address,
|
||||
is_ready (state) {
|
||||
return this.$store.getters["gateway/isReady"]
|
||||
},
|
||||
|
@ -82,45 +74,15 @@ export default {
|
|||
const prefix = (wallet && wallet.address && wallet.address[0]) || "L";
|
||||
return `${prefix}..`;
|
||||
},
|
||||
addressType (state) {
|
||||
const address = this.service_node.award_address;
|
||||
const inArray = (array) => array.map(o => o.address).includes(address);
|
||||
|
||||
const { primary, used, unused } = this.address_list
|
||||
if (inArray(primary)) {
|
||||
return "primary"
|
||||
} else if (inArray(used)) {
|
||||
return "used"
|
||||
} else if (inArray(unused)) {
|
||||
return "unsued"
|
||||
} else {
|
||||
return "not-ours"
|
||||
}
|
||||
},
|
||||
}),
|
||||
data () {
|
||||
return {
|
||||
service_node: {
|
||||
key: "",
|
||||
amount: 0,
|
||||
award_address: "",
|
||||
},
|
||||
}
|
||||
},
|
||||
filters: {
|
||||
addressTypeString: function (value) {
|
||||
switch (value) {
|
||||
case "primary":
|
||||
return i18n.t("strings.addresses.yourPrimaryAddress")
|
||||
case "used":
|
||||
return i18n.t("strings.addresses.yourUsedAddress")
|
||||
case "ununsed":
|
||||
return i18n.t("strings.addresses.yourUnusedAddress")
|
||||
default:
|
||||
return i18n.t("strings.addresses.notYourAddress")
|
||||
}
|
||||
}
|
||||
},
|
||||
validations: {
|
||||
service_node: {
|
||||
key: { required, service_node_key },
|
||||
|
@ -129,18 +91,6 @@ export default {
|
|||
decimal,
|
||||
greater_than_zero,
|
||||
},
|
||||
award_address: {
|
||||
required,
|
||||
isAddress(value) {
|
||||
if (value === '') return true
|
||||
|
||||
return new Promise(resolve => {
|
||||
address(value, this.$gateway)
|
||||
.then(() => resolve(true))
|
||||
.catch(e => resolve(false))
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
|
@ -156,7 +106,6 @@ export default {
|
|||
})
|
||||
this.$v.$reset();
|
||||
this.service_node = {
|
||||
...this.service_node,
|
||||
key: "",
|
||||
amount: 0,
|
||||
}
|
||||
|
@ -172,22 +121,57 @@ export default {
|
|||
},
|
||||
deep: true
|
||||
},
|
||||
},
|
||||
created () {
|
||||
const { address } = this.info;
|
||||
if (!this.service_node.award_address || this.service_node.award_address === "") {
|
||||
this.service_node.award_address = address || ""
|
||||
}
|
||||
tx_status: {
|
||||
handler(val, old){
|
||||
if(val.code == old.code) return
|
||||
switch(this.tx_status.code) {
|
||||
case 0:
|
||||
this.$q.notify({
|
||||
type: "positive",
|
||||
timeout: 1000,
|
||||
message: this.tx_status.message
|
||||
})
|
||||
break;
|
||||
case -1:
|
||||
this.$q.notify({
|
||||
type: "negative",
|
||||
timeout: 1000,
|
||||
message: this.tx_status.message
|
||||
})
|
||||
break;
|
||||
}
|
||||
},
|
||||
deep: true
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
isOurAddress (address) {
|
||||
const { primary, used, unused } = this.address_list
|
||||
const addresses = [...primary, ...used, ...unused].map(o => o.address);
|
||||
console.log(addresses);
|
||||
return addresses.includes(address);
|
||||
sweepAll: function () {
|
||||
const { unlocked_balance } = this.info;
|
||||
|
||||
const tx = {
|
||||
amount: unlocked_balance / 1e9,
|
||||
address: this.award_address,
|
||||
priority: 0
|
||||
};
|
||||
|
||||
this.showPasswordConfirmation({
|
||||
title: this.$t("dialog.sweepAll.title"),
|
||||
noPasswordMessage: this.$t("dialog.sweepAll.message"),
|
||||
ok: {
|
||||
label: this.$t("dialog.sweepAll.ok")
|
||||
},
|
||||
}).then(password => {
|
||||
this.$store.commit("gateway/set_tx_status", {
|
||||
code: 1,
|
||||
message: "Sweeping all",
|
||||
sending: true
|
||||
})
|
||||
const newTx = objectAssignDeep.noMutate(tx, {password})
|
||||
this.$gateway.send("wallet", "transfer", newTx)
|
||||
}).catch(() => {
|
||||
})
|
||||
},
|
||||
stake: function () {
|
||||
|
||||
this.$v.service_node.$touch()
|
||||
|
||||
if (this.$v.service_node.key.$error) {
|
||||
|
@ -199,15 +183,6 @@ export default {
|
|||
return
|
||||
}
|
||||
|
||||
if (this.$v.service_node.award_address.$error) {
|
||||
this.$q.notify({
|
||||
type: "negative",
|
||||
timeout: 1000,
|
||||
message: this.$t("notification.errors.invalidAddress")
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
if(this.service_node.amount < 0) {
|
||||
this.$q.notify({
|
||||
type: "negative",
|
||||
|
@ -252,11 +227,12 @@ export default {
|
|||
sending: true
|
||||
}
|
||||
})
|
||||
const service_node = objectAssignDeep.noMutate(this.service_node, {password})
|
||||
this.$gateway.send("wallet", "stake", {
|
||||
...service_node,
|
||||
destination: service_node.award_address,
|
||||
const service_node = objectAssignDeep.noMutate(this.service_node, {
|
||||
password,
|
||||
destination: this.award_address
|
||||
})
|
||||
|
||||
this.$gateway.send("wallet", "stake", service_node)
|
||||
}).catch(() => {
|
||||
})
|
||||
}
|
||||
|
@ -270,13 +246,9 @@ export default {
|
|||
|
||||
<style lang="scss">
|
||||
.service-node-staking {
|
||||
.address-type {
|
||||
margin-top: 4px;
|
||||
font-size: 13px;
|
||||
font-weight: 400;
|
||||
text-align: right;
|
||||
&.not-ours {
|
||||
font-weight: bold;
|
||||
.buttons {
|
||||
.q-btn:not(:first-child) {
|
||||
margin-left: 8px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -548,15 +548,6 @@ footer,
|
|||
}
|
||||
}
|
||||
|
||||
.service-node-staking {
|
||||
.address-type {
|
||||
color: $loki-green-solid;
|
||||
&.not-ours {
|
||||
color: goldenrod;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.service-node-registration {
|
||||
.description{
|
||||
color: #b7b7b7;
|
||||
|
|
|
@ -135,9 +135,19 @@ export class Gateway extends EventEmitter {
|
|||
this.app.store.dispatch("gateway/resetWalletStatus")
|
||||
break
|
||||
|
||||
case "set_tx_status":
|
||||
this.app.store.commit("gateway/set_tx_status", decrypted_data.data)
|
||||
case "set_tx_status": {
|
||||
const data = { ...decrypted_data.data }
|
||||
|
||||
if (data.i18n) {
|
||||
if (typeof data.i18n === "string") {
|
||||
data.message = i18n.t(data.i18n)
|
||||
} else if (Array.isArray(data.i18n)) {
|
||||
data.message = i18n.t(...data.i18n)
|
||||
}
|
||||
}
|
||||
this.app.store.commit("gateway/set_tx_status", data)
|
||||
break
|
||||
}
|
||||
|
||||
case "set_snode_status":
|
||||
this.app.store.commit("gateway/set_snode_status", decrypted_data.data)
|
||||
|
@ -155,7 +165,7 @@ export class Gateway extends EventEmitter {
|
|||
this.confirmClose(i18n.t("dialog.restart.message"), true)
|
||||
break
|
||||
|
||||
case "show_notification":
|
||||
case "show_notification": {
|
||||
let notification = {
|
||||
type: "positive",
|
||||
timeout: 1000,
|
||||
|
@ -173,6 +183,7 @@ export class Gateway extends EventEmitter {
|
|||
|
||||
Notify.create(Object.assign(notification, data))
|
||||
break
|
||||
}
|
||||
|
||||
case "show_loading":
|
||||
Loading.show({ ...(decrypted_data.data || {}) })
|
||||
|
|
|
@ -32,6 +32,7 @@ export default {
|
|||
showQRCode: "SHOW QR CODE",
|
||||
showTxDetails: "SHOW TX DETAILS",
|
||||
stake: "STAKE",
|
||||
sweepAll: "SWEEP ALL",
|
||||
unlockServiceNode: "UNLOCK SERVICE NODE",
|
||||
viewOnExplorer: "VIEW ON EXPLORER"
|
||||
},
|
||||
|
@ -112,6 +113,11 @@ export default {
|
|||
message: "Do you want to stake?",
|
||||
ok: "STAKE"
|
||||
},
|
||||
sweepAll: {
|
||||
title: "Sweep All",
|
||||
message: "Do you want to sweep all?",
|
||||
ok: "SWEEP ALL"
|
||||
},
|
||||
switchWallet: {
|
||||
title: "Switch wallet",
|
||||
closeMessage: "Are you sure you want to close the current wallet?",
|
||||
|
@ -141,7 +147,6 @@ export default {
|
|||
// Field labels are also all uppercased
|
||||
address: "ADDRESS",
|
||||
amount: "AMOUNT",
|
||||
awardRecepientAddress: "AWARD RECEPIENT ADDRESS",
|
||||
confirmPassword: "CONFIRM PASSWORD",
|
||||
daemonLogLevel: "DAEMON LOG LEVEL",
|
||||
daemonP2pPort: "DAEMON P2P PORT",
|
||||
|
@ -313,13 +318,9 @@ export default {
|
|||
myPrimaryAddress: "My primary address",
|
||||
myUnusedAddresses: "My unused addresses",
|
||||
myUsedAddresses: "My used addresses",
|
||||
notYourAddress: "Not your address!",
|
||||
primaryAddress: "Primary address",
|
||||
subAddress: "Sub-address",
|
||||
subAddressIndex: "Index {index}",
|
||||
yourPrimaryAddress: "Your primary address",
|
||||
yourUnusedAddress: "Your unused address",
|
||||
yourUsedAddress: "Your used address"
|
||||
subAddressIndex: "Index {index}"
|
||||
},
|
||||
advancedOptions: "Advanced Options",
|
||||
bannedPeers: {
|
||||
|
|
|
@ -141,7 +141,6 @@ export default {
|
|||
// Field labels are also all uppercased
|
||||
address: "АДРЕС",
|
||||
amount: "СУММА",
|
||||
awardRecepientAddress: "АДРЕС ПОЛУЧАТЕЛЯ ВОЗНАГРАЖДЕНИЯ",
|
||||
confirmPassword: "ПОДТВЕРЖДЕНИЕ ПАРОЛЯ",
|
||||
daemonLogLevel: "УРОВЕНЬ ЛОГА ДЕМОНА",
|
||||
daemonP2pPort: "P2P ПОРТ ДЕМОНА",
|
||||
|
@ -313,13 +312,9 @@ export default {
|
|||
myPrimaryAddress: "Мой основной адрес",
|
||||
myUnusedAddresses: "Мои неиспользованные адреса",
|
||||
myUsedAddresses: "Мои использованные адреса",
|
||||
notYourAddress: "Не ваш адрес!",
|
||||
primaryAddress: "Основной адрес",
|
||||
subAddress: "Суб-адрес",
|
||||
subAddressIndex: "Индекс {index}",
|
||||
yourPrimaryAddress: "Ваш основной адрес",
|
||||
yourUnusedAddress: "Ваш неиспользованный адрес",
|
||||
yourUsedAddress: "Ваш использованный адрес"
|
||||
subAddressIndex: "Индекс {index}"
|
||||
},
|
||||
advancedOptions: "Расширенные настройки",
|
||||
bannedPeers: {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<template>
|
||||
<q-page class="service-node-page">
|
||||
<div class="header row items-center justify-center q-mt-md">
|
||||
<div class="header row items-center justify-center q-pt-md">
|
||||
<q-btn-toggle
|
||||
v-model="screen"
|
||||
toggle-color="primary"
|
||||
|
|
Loading…
Reference in New Issue