diff --git a/PENDING.md b/PENDING.md index d69c5a1862..c9da72bcc8 100644 --- a/PENDING.md +++ b/PENDING.md @@ -1,2 +1,4 @@ +[Fixed] [\#2370](https://github.com/cosmos/lunie/pull/2370) Better inplace updates to validators so the information (like signing info) never hides again once it was once loaded @faboweb +[Fixed] [\#2370](https://github.com/cosmos/lunie/pull/2370) Pages now scroll back to the top on tab changes @faboweb [Changed] [\#2360](https://github.com/cosmos/lunie/issues/2360) disabled token sending on the cosmos hub @faboweb [Changed] Reduced keybase caching timeouts @faboweb \ No newline at end of file diff --git a/app/src/renderer/components/common/TmPage.vue b/app/src/renderer/components/common/TmPage.vue index 5bb72ca8b8..899dd13a84 100644 --- a/app/src/renderer/components/common/TmPage.vue +++ b/app/src/renderer/components/common/TmPage.vue @@ -114,9 +114,14 @@ export default { return refresh ? { connected, refresh } : undefined } }, + watch: { + $route() { + this.scrollContainer.scrollTop = 0 + } + }, async mounted() { - const container = this.$el.querySelector(`.tm-page-main`) - this.perfectScrollbar = new PerfectScrollbar(container) + this.scrollContainer = this.$el.querySelector(`.tm-page-main`) + this.perfectScrollbar = new PerfectScrollbar(this.scrollContainer) } } diff --git a/app/src/renderer/vuex/modules/delegates.js b/app/src/renderer/vuex/modules/delegates.js index d001bc510a..0324d71d22 100644 --- a/app/src/renderer/vuex/modules/delegates.js +++ b/app/src/renderer/vuex/modules/delegates.js @@ -2,8 +2,9 @@ import * as Sentry from "@sentry/browser" import BN from "bignumber.js" import { ratToBigNumber } from "scripts/common" import num from "scripts/num" -import { isEmpty } from "lodash" +import { isEmpty, merge } from "lodash" import b32 from "scripts/b32" +import Vue from "vue" export default ({ node }) => { const emptyState = { @@ -34,8 +35,9 @@ export default ({ node }) => { validator.percent_of_vote = num.percent( validator.voting_power / state.globalPower ) + + upsertValidator(state, validator) }) - state.delegates = validators }, setSelfBond( state, @@ -76,7 +78,12 @@ export default ({ node }) => { const signing_info = await node.getValidatorSigningInfo( validator.consensus_pubkey ) - if (!isEmpty(signing_info)) validator.signing_info = signing_info + if (!isEmpty(signing_info)) { + upsertValidator( + state, + Object.assign({},validator, { signing_info }) + ) + } } } commit(`setDelegates`, validators) @@ -142,3 +149,20 @@ export default ({ node }) => { actions } } + +// incrementally add the validator to the list or update it in place +// "upsert": (computing, databases) An operation that inserts rows into a database table if they do not already exist, or updates them if they do. +function upsertValidator(state, validator) { + const oldValidatorIndex = state.delegates.findIndex((oldValidator) => + oldValidator.operator_address === validator.operator_address + ) + if (oldValidatorIndex === -1) { + state.delegates.push(validator) + return + } + Vue.set( + state.delegates, + oldValidatorIndex, + merge(state.delegates[oldValidatorIndex], validator) + ) +} \ No newline at end of file diff --git a/app/src/renderer/vuex/store.js b/app/src/renderer/vuex/store.js index 52eb982f0e..ff25e7bac8 100644 --- a/app/src/renderer/vuex/store.js +++ b/app/src/renderer/vuex/store.js @@ -58,7 +58,10 @@ export function storeUpdateHandler(mutation, state, pending) { `setProposalDeposits`, `setProposalVotes`, `setProposalTally`, - `setGovParameters` + `setGovParameters`, + `setTotalRewards`, + `setDelegationRewards`, + `setDistributionParameters` ] if (updatingMutations.indexOf(mutation.type) === -1) return @@ -156,6 +159,14 @@ export async function loadPersistedState({ state, commit, dispatch }) { loaded: true, loading: false }, + delegation: { + loaded: true, + loading: false + }, + distribution: { + loaded: true, + loading: false + }, proposals: { loaded: true, loading: false diff --git a/test/unit/specs/components/common/TmPage.spec.js b/test/unit/specs/components/common/TmPage.spec.js index 6405e9364c..d50352d893 100644 --- a/test/unit/specs/components/common/TmPage.spec.js +++ b/test/unit/specs/components/common/TmPage.spec.js @@ -61,4 +61,14 @@ describe(`TmPage`, () => { expect(wrapper.vm.refreshable).toEqual({ connected: true, refresh }) }) + it(`scrolls back to the top on a route change`, () => { + const self = { + scrollContainer: { + scrollTop: 100 + } + } + TmPage.watch.$route.call(self) + expect(self.scrollContainer.scrollTop).toBe(0) + }) + })