From 1884b84e96e7321dd1c366961bfdd8e7a52e0999 Mon Sep 17 00:00:00 2001 From: Nikita-Polyakov Date: Mon, 12 Dec 2022 19:45:44 +0300 Subject: [PATCH 01/16] refactoring pool page --- .../components/CalculatorDialog.vue | 12 ++- .../demeterFarming/mixins/PoolMixin.ts | 10 -- src/store/demeterFarming/getters.ts | 3 +- src/store/demeterFarming/mutations.ts | 6 +- src/store/demeterFarming/types.ts | 6 +- src/store/pool/mutations.ts | 2 +- src/store/pool/types.ts | 2 +- src/views/Pool.vue | 99 +++++++++---------- 8 files changed, 65 insertions(+), 75 deletions(-) diff --git a/src/modules/demeterFarming/components/CalculatorDialog.vue b/src/modules/demeterFarming/components/CalculatorDialog.vue index 5cf6ad22e..a78bb6758 100644 --- a/src/modules/demeterFarming/components/CalculatorDialog.vue +++ b/src/modules/demeterFarming/components/CalculatorDialog.vue @@ -66,7 +66,7 @@ import StakeDialogMixin from '../mixins/StakeDialogMixin'; import { lazyComponent } from '@/router'; import { Components, Links } from '@/consts'; -import { isMaxButtonAvailable, getMaxValue } from '@/utils'; +import { getAssetBalance, isMaxButtonAvailable, getMaxValue } from '@/utils'; @Component({ components: { @@ -101,6 +101,16 @@ export default class CalculatorDialog extends Mixins(StakeDialogMixin) { return `${this.rewardAssetSymbol} rewards`; } + get baseAssetDecimals(): number { + return this.baseAsset?.decimals ?? FPNumber.DEFAULT_PRECISION; + } + + get baseAssetBalance(): FPNumber { + if (!this.baseAsset) return FPNumber.ZERO; + + return FPNumber.fromCodecValue(getAssetBalance(this.baseAsset) ?? 0, this.baseAssetDecimals); + } + get isBaseAssetMaxButtonAvailable(): boolean { if (!this.baseAsset) return false; diff --git a/src/modules/demeterFarming/mixins/PoolMixin.ts b/src/modules/demeterFarming/mixins/PoolMixin.ts index 43931bf81..33f53f55f 100644 --- a/src/modules/demeterFarming/mixins/PoolMixin.ts +++ b/src/modules/demeterFarming/mixins/PoolMixin.ts @@ -35,10 +35,6 @@ export default class PoolMixin extends Mixins(AccountPoolMixin, TranslationMixin return this.getAsset(this.pool?.baseAsset); } - get baseAssetDecimals(): number { - return this.baseAsset?.decimals ?? FPNumber.DEFAULT_PRECISION; - } - get poolAsset(): Nullable { return this.getAsset(this.pool?.poolAsset); } @@ -67,12 +63,6 @@ export default class PoolMixin extends Mixins(AccountPoolMixin, TranslationMixin return FPNumber.fromCodecValue(getAssetBalance(this.liquidity, { parseAsLiquidity: true }) ?? 0); } - get baseAssetBalance(): FPNumber { - if (!this.baseAsset) return FPNumber.ZERO; - - return FPNumber.fromCodecValue(getAssetBalance(this.baseAsset) ?? 0, this.baseAssetDecimals); - } - get poolAssetBalance(): FPNumber { if (!this.poolAsset) return FPNumber.ZERO; diff --git a/src/store/demeterFarming/getters.ts b/src/store/demeterFarming/getters.ts index 6beb8130c..ad7b0d190 100644 --- a/src/store/demeterFarming/getters.ts +++ b/src/store/demeterFarming/getters.ts @@ -1,6 +1,5 @@ import { defineGetters } from 'direct-vuex'; import { FPNumber } from '@sora-substrate/math'; -import { XOR } from '@sora-substrate/util/build/assets/consts'; import { demeterFarmingGetterContext } from './index'; @@ -13,7 +12,7 @@ import type { DemeterFarmingState } from './types'; type Pool = DemeterPool | DemeterAccountPool; -const createPoolsDoubleMap = (pools: Array, isFarm = true): DoubleMap => { +const createPoolsDoubleMap = (pools: readonly T[], isFarm = true): DoubleMap => { return pools.reduce((buffer, pool) => { if (pool.isFarm !== isFarm) return buffer; diff --git a/src/store/demeterFarming/mutations.ts b/src/store/demeterFarming/mutations.ts index 22b88dee3..14e805906 100644 --- a/src/store/demeterFarming/mutations.ts +++ b/src/store/demeterFarming/mutations.ts @@ -10,7 +10,7 @@ import type { DemeterFarmingState } from './types'; const mutations = defineMutations()({ setPools(state, pools: Array): void { - state.pools = [...pools]; + state.pools = Object.freeze([...pools]); }, setPoolsUpdates(state, updates: Subscription): void { state.poolsUpdates = updates; @@ -21,7 +21,7 @@ const mutations = defineMutations()({ }, setTokens(state, tokens: Array): void { - state.tokens = [...tokens]; + state.tokens = Object.freeze([...tokens]); }, setTokensUpdates(state, updates: Subscription): void { state.tokensUpdates = updates; @@ -32,7 +32,7 @@ const mutations = defineMutations()({ }, setAccountPools(state, pools: Array): void { - state.accountPools = [...pools]; + state.accountPools = Object.freeze([...pools]); }, setAccountPoolsUpdates(state, updates: Subscription): void { state.accountPoolsUpdates = updates; diff --git a/src/store/demeterFarming/types.ts b/src/store/demeterFarming/types.ts index 7e28ba186..b9c16d2bd 100644 --- a/src/store/demeterFarming/types.ts +++ b/src/store/demeterFarming/types.ts @@ -13,10 +13,10 @@ export type DemeterLiquidityParams = { }; export type DemeterFarmingState = { - pools: Array; + pools: readonly DemeterPool[]; poolsUpdates: Nullable; - tokens: Array; + tokens: readonly DemeterRewardToken[]; tokensUpdates: Nullable; - accountPools: Array; + accountPools: readonly DemeterAccountPool[]; accountPoolsUpdates: Nullable; }; diff --git a/src/store/pool/mutations.ts b/src/store/pool/mutations.ts index 4e7dad9b8..08cc8fd64 100644 --- a/src/store/pool/mutations.ts +++ b/src/store/pool/mutations.ts @@ -20,7 +20,7 @@ const mutations = defineMutations()({ state.accountLiquidityUpdates = null; }, setAccountLiquidity(state, liquidity: Array): void { - state.accountLiquidity = [...liquidity]; // update vuex state by creating new copy of array + state.accountLiquidity = Object.freeze([...liquidity]); // update vuex state by creating new copy of array }, resetAccountLiquidity(state): void { state.accountLiquidity = []; diff --git a/src/store/pool/types.ts b/src/store/pool/types.ts index aeb664fb8..25fe18654 100644 --- a/src/store/pool/types.ts +++ b/src/store/pool/types.ts @@ -2,7 +2,7 @@ import type { Subscription } from 'rxjs'; import type { AccountLiquidity } from '@sora-substrate/util/build/poolXyk/types'; export type PoolState = { - accountLiquidity: Array; + accountLiquidity: readonly AccountLiquidity[]; accountLiquidityList: Nullable; accountLiquidityUpdates: Nullable; }; diff --git a/src/views/Pool.vue b/src/views/Pool.vue index ef2dcc3bd..0bc69d37d 100644 --- a/src/views/Pool.vue +++ b/src/views/Pool.vue @@ -10,22 +10,20 @@