From 224a92c907cb3a799ea4464e705fdcb8a2e26cf6 Mon Sep 17 00:00:00 2001
From: Alex Barnsley <8069294+alexbarnsley@users.noreply.github.com>
Date: Wed, 11 Sep 2019 13:57:40 +0100
Subject: [PATCH 01/15] refactor: remove redundant properties from transaction
forms (#1439)
* refactor: rename error variable
* refactor: move stuff to mixin
* refactor: move validation to mixin
* fix: build vote transaction
* fix: when to call postSubmit
* fix: delegate username validation
---
.../TransactionFormDelegateRegistration.vue | 158 +++++-----------
.../TransactionFormSecondSignature.vue | 136 +++-----------
.../TransactionFormTransfer.vue | 157 ++++++----------
.../TransactionForm/TransactionFormVote.vue | 160 ++++-------------
.../TransactionForm/mixin-on-submit.js | 35 ----
.../Transaction/TransactionForm/mixin.js | 170 ++++++++++++++++++
6 files changed, 326 insertions(+), 490 deletions(-)
delete mode 100644 src/renderer/components/Transaction/TransactionForm/mixin-on-submit.js
create mode 100644 src/renderer/components/Transaction/TransactionForm/mixin.js
diff --git a/src/renderer/components/Transaction/TransactionForm/TransactionFormDelegateRegistration.vue b/src/renderer/components/Transaction/TransactionForm/TransactionFormDelegateRegistration.vue
index 13d742c982..de1f05dde7 100644
--- a/src/renderer/components/Transaction/TransactionForm/TransactionFormDelegateRegistration.vue
+++ b/src/renderer/components/Transaction/TransactionForm/TransactionFormDelegateRegistration.vue
@@ -18,9 +18,9 @@
@@ -95,15 +95,13 @@
+
+
diff --git a/src/renderer/components/Button/ButtonModal.vue b/src/renderer/components/Button/ButtonModal.vue
index a7391eb930..6e2274a9fd 100644
--- a/src/renderer/components/Button/ButtonModal.vue
+++ b/src/renderer/components/Button/ButtonModal.vue
@@ -51,6 +51,12 @@ export default {
label: {
type: String,
required: true
+ },
+
+ disabled: {
+ type: Boolean,
+ required: false,
+ default: false
}
},
@@ -62,7 +68,12 @@ export default {
emitToggle () {
this.$emit('toggle', this.isOpen)
},
+
toggle () {
+ if (this.disabled) {
+ return
+ }
+
this.isOpen = !this.isOpen
this.emitToggle()
}
diff --git a/src/renderer/components/Button/index.js b/src/renderer/components/Button/index.js
index f755aed50a..1c2b4cf6f0 100644
--- a/src/renderer/components/Button/index.js
+++ b/src/renderer/components/Button/index.js
@@ -8,9 +8,13 @@ import ButtonReload from './ButtonReload'
import ButtonSwitch from './ButtonSwitch'
import ButtonLayout from './ButtonLayout'
+// Last because of order
+import ButtonDropdown from './ButtonDropdown'
+
export {
ButtonClipboard,
ButtonClose,
+ ButtonDropdown,
ButtonGeneric,
ButtonIconGeneric,
ButtonLetter,
diff --git a/src/renderer/components/Input/InputAddress.vue b/src/renderer/components/Input/InputAddress.vue
index 06507377cd..7518952c60 100644
--- a/src/renderer/components/Input/InputAddress.vue
+++ b/src/renderer/components/Input/InputAddress.vue
@@ -16,6 +16,7 @@
:is-disabled="isDisabled"
:is-focused="isFocused"
:is-invalid="invalid"
+ :warning-text="warningText"
class="InputAddress text-left"
>
wallet && !!wallet.address)
const addresses = map(source, (wallet) => {
const address = {
@@ -197,7 +208,7 @@ export default {
})
const results = orderBy(addresses, (object) => {
- return object.name || object.address.toLowerCase()
+ return (object.name || object.address).toLowerCase()
})
return results.reduce((wallets, wallet, index) => {
@@ -370,13 +381,27 @@ export default {
this.$nextTick(() => {
this.$refs.input.setSelectionRange(this.inputValue.length, this.dropdownValue.length)
})
+ },
+
+ reset () {
+ this.model = ''
+ this.$nextTick(() => {
+ this.$v.$reset()
+ })
}
},
validations: {
model: {
- required,
+ required (value) {
+ return this.isRequired ? required(value) : true
+ },
+
isValid (value) {
+ if (!this.isRequired && value.replace(/\s+/, '') === '') {
+ return true
+ }
+
return WalletService.validateAddress(value, this.pubKeyHash)
}
}
diff --git a/src/renderer/components/Input/InputCurrency.vue b/src/renderer/components/Input/InputCurrency.vue
index 9fbee70291..4b7b94a152 100644
--- a/src/renderer/components/Input/InputCurrency.vue
+++ b/src/renderer/components/Input/InputCurrency.vue
@@ -40,7 +40,6 @@
import { includes, isString } from 'lodash'
import { required } from 'vuelidate/lib/validators'
import { MARKET } from '@config'
-import store from '@/store'
import InputField from './InputField'
import BigNumber from '@/plugins/bignumber'
@@ -365,7 +364,7 @@ export default {
* @return {Boolean}
*/
currencyValidator (currency) {
- const currentNetwork = this.walletNetwork || store.getters['session/network']
+ const currentNetwork = this.walletNetwork || this.$store.getters['session/network']
const currencies = [
currentNetwork.token,
currentNetwork.subunit,
@@ -374,6 +373,13 @@ export default {
...Object.values(MARKET.currencies).map(currency => currency.symbol)
]
return includes(currencies, currency)
+ },
+
+ reset () {
+ this.inputValue = ''
+ this.$nextTick(() => {
+ this.$v.model.$reset()
+ })
}
},
diff --git a/src/renderer/components/Input/InputDelegate.vue b/src/renderer/components/Input/InputDelegate.vue
index 91a60ac2b8..76aeafd227 100644
--- a/src/renderer/components/Input/InputDelegate.vue
+++ b/src/renderer/components/Input/InputDelegate.vue
@@ -66,7 +66,7 @@ import { MenuDropdown } from '@/components/Menu'
import Cycled from 'cycled'
import InputField from './InputField'
import truncate from '@/filters/truncate'
-import { includes, isEmpty, map, orderBy } from 'lodash'
+import { isEmpty, orderBy } from 'lodash'
export default {
name: 'InputDelegate',
@@ -120,7 +120,7 @@ export default {
},
delegates () {
- return this.$store.getters['delegate/bySessionNetwork']
+ return Object.values(this.$store.getters['delegate/bySessionNetwork'] || {}).filter(delegate => !delegate.isResigned)
},
error () {
@@ -168,7 +168,7 @@ export default {
return []
}
- const delegates = map(this.delegates, (object) => {
+ const delegates = this.delegates.map(object => {
const delegate = {
name: null,
username: object.username,
@@ -187,7 +187,7 @@ export default {
return results.reduce((delegates, delegate, index) => {
Object.values(delegate).forEach(prop => {
- if (includes(prop.toLowerCase(), this.inputValue.toLowerCase())) {
+ if (prop.toLowerCase().includes(this.inputValue.toLowerCase())) {
delegates[delegate.username] = delegate.name
}
})
@@ -243,7 +243,7 @@ export default {
// Verifies that the element that generated the blur was a dropdown item
if (evt.relatedTarget) {
const classList = evt.relatedTarget.classList || []
- const isDropdownItem = includes(classList, 'MenuDropdownItem__button')
+ const isDropdownItem = classList.includes('MenuDropdownItem__button')
if (!isDropdownItem) {
this.closeDropdown()
diff --git a/src/renderer/components/Input/InputEditableList.vue b/src/renderer/components/Input/InputEditableList.vue
new file mode 100644
index 0000000000..13361c9be6
--- /dev/null
+++ b/src/renderer/components/Input/InputEditableList.vue
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+
diff --git a/src/renderer/components/Input/InputFee.vue b/src/renderer/components/Input/InputFee.vue
index 585cb2b9d8..b77446af3a 100644
--- a/src/renderer/components/Input/InputFee.vue
+++ b/src/renderer/components/Input/InputFee.vue
@@ -92,6 +92,12 @@ export default {
required: true
},
+ transactionGroup: {
+ type: Number,
+ required: false,
+ default: 1
+ },
+
showInsufficientFunds: {
type: Boolean,
required: false,
@@ -145,8 +151,8 @@ export default {
return this.$t('INPUT_FEE.ERROR.NOT_VALID')
},
maxV1fee () {
- const defaultMaxV1Fee = V1.fees[this.transactionType]
- const staticFee = this.$store.getters['transaction/staticFee'](this.transactionType)
+ const defaultMaxV1Fee = V1.fees[`GROUP_${this.transactionGroup}`][this.transactionType]
+ const staticFee = this.$store.getters['transaction/staticFee'](this.transactionType, this.transactionGroup)
return staticFee || defaultMaxV1Fee
},
isStaticFee () {
@@ -167,9 +173,19 @@ export default {
}
const { feeStatistics } = this.feeNetwork
- const transactionStatistics = feeStatistics.find(feeConfig => feeConfig.type === this.transactionType)
- if (transactionStatistics) {
- return transactionStatistics.fees
+ if (feeStatistics) {
+ let transactionStatistics
+ if (feeStatistics[0]) {
+ transactionStatistics = Object.values(feeStatistics).find(feeConfig => feeConfig.type === this.transactionType)
+ } else if (feeStatistics[this.transactionGroup]) {
+ transactionStatistics = Object.values(feeStatistics[this.transactionGroup]).find(feeConfig => {
+ return feeConfig.type === this.transactionType
+ })
+ }
+
+ if (transactionStatistics) {
+ return transactionStatistics.fees
+ }
}
return {
diff --git a/src/renderer/components/Input/InputPublicKey.vue b/src/renderer/components/Input/InputPublicKey.vue
new file mode 100644
index 0000000000..c8a87a25f5
--- /dev/null
+++ b/src/renderer/components/Input/InputPublicKey.vue
@@ -0,0 +1,111 @@
+
+
+
+
+
diff --git a/src/renderer/components/Input/InputText.vue b/src/renderer/components/Input/InputText.vue
index 93da552198..9f640d47e1 100644
--- a/src/renderer/components/Input/InputText.vue
+++ b/src/renderer/components/Input/InputText.vue
@@ -171,6 +171,13 @@ export default {
blur () {
this.$refs.input.blur()
+ },
+
+ reset () {
+ this.model = ''
+ this.$nextTick(() => {
+ this.$v.$reset()
+ })
}
},
diff --git a/src/renderer/components/Input/index.js b/src/renderer/components/Input/index.js
index 8d202da211..c02e0a6ce9 100644
--- a/src/renderer/components/Input/index.js
+++ b/src/renderer/components/Input/index.js
@@ -1,10 +1,12 @@
import InputAddress from './InputAddress'
import InputCurrency from './InputCurrency'
import InputDelegate from './InputDelegate'
+import InputEditableList from './InputEditableList'
import InputFee from './InputFee'
import InputField from './InputField'
import InputLanguage from './InputLanguage'
import InputPassword from './InputPassword'
+import InputPublicKey from './InputPublicKey'
import InputSelect from './InputSelect'
import InputSwitch from './InputSwitch'
import InputText from './InputText'
@@ -16,10 +18,12 @@ export {
InputAddress,
InputCurrency,
InputDelegate,
+ InputEditableList,
InputFee,
InputField,
InputLanguage,
InputPassword,
+ InputPublicKey,
InputSelect,
InputSwitch,
InputText
diff --git a/src/renderer/components/Menu/MenuDropdown/MenuDropdownAlternativeHandler.vue b/src/renderer/components/Menu/MenuDropdown/MenuDropdownAlternativeHandler.vue
index 96e2a803f6..0ea4f1e1b0 100644
--- a/src/renderer/components/Menu/MenuDropdown/MenuDropdownAlternativeHandler.vue
+++ b/src/renderer/components/Menu/MenuDropdown/MenuDropdownAlternativeHandler.vue
@@ -8,7 +8,7 @@
'rotate-vertical': isOpen
}"
name="arrow-dropdown"
- view-box="0 0 18 18"
+ view-box="0 0 8 8"
class="transition align-middle"
/>
diff --git a/src/renderer/components/Menu/MenuDropdown/MenuDropdownHandler.vue b/src/renderer/components/Menu/MenuDropdown/MenuDropdownHandler.vue
index e19b732d83..0688e42f7b 100644
--- a/src/renderer/components/Menu/MenuDropdown/MenuDropdownHandler.vue
+++ b/src/renderer/components/Menu/MenuDropdown/MenuDropdownHandler.vue
@@ -19,7 +19,7 @@
diff --git a/src/renderer/components/Menu/MenuTab/MenuTab.vue b/src/renderer/components/Menu/MenuTab/MenuTab.vue
index 9418f6f520..0aeba59dfb 100644
--- a/src/renderer/components/Menu/MenuTab/MenuTab.vue
+++ b/src/renderer/components/Menu/MenuTab/MenuTab.vue
@@ -1,7 +1,7 @@