Merge pull request #54 from Mikunj/fixes

Fixes
This commit is contained in:
Mikunj Varsani 2019-04-26 08:47:32 +10:00 committed by GitHub
commit 5e15c6a719
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 86 additions and 116 deletions

View File

@ -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;
}
}
}

View File

@ -548,15 +548,6 @@ footer,
}
}
.service-node-staking {
.address-type {
color: $loki-green-solid;
&.not-ours {
color: goldenrod;
}
}
}
.service-node-registration {
.description{
color: #b7b7b7;

View File

@ -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 || {}) })

View File

@ -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: {

View File

@ -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: {

View File

@ -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"