From ce95773f6c986d969bb64597454274e34f508408 Mon Sep 17 00:00:00 2001 From: Georges KABBOUCHI Date: Sun, 5 Sep 2021 14:01:19 +0300 Subject: [PATCH] Add Heading & Value on Strategy --- .../context/strategy/SidebarStrategy.vue | 20 ++++++-- composables/useStrategy.ts | 6 ++- core/strategies/helpers/index.ts | 23 ++++++--- core/strategies/helpers/strategy.ts | 5 ++ .../protocols/liquity/close-trove.ts | 49 ++++++++++++++++++- .../protocols/liquity/deposit-and-borrow.ts | 1 - 6 files changed, 89 insertions(+), 15 deletions(-) diff --git a/components/sidebar/context/strategy/SidebarStrategy.vue b/components/sidebar/context/strategy/SidebarStrategy.vue index 294df18..f1675c4 100644 --- a/components/sidebar/context/strategy/SidebarStrategy.vue +++ b/components/sidebar/context/strategy/SidebarStrategy.vue @@ -13,7 +13,7 @@
-
+
+ + {{ input.name }} + + +
+ + {{ input.value }} + +
@@ -62,8 +75,6 @@ > {{ activeStrategy.schema.submitText || "Submit" }} - -

Instadapp does not charge a fee for this operation

@@ -80,8 +91,9 @@ import { useStrategy } from "~/composables/useStrategy"; import InputAmount from "~/components/common/input/InputAmount.vue"; import { useToken } from "~/composables/useToken"; import ButtonCTA from "~/components/common/input/ButtonCTA.vue"; +import ValueDisplay from "../components/ValueDisplay.vue"; export default defineComponent({ - components: { InputAmount, ButtonCTA }, + components: { InputAmount, ButtonCTA, ValueDisplay }, props: { protocol: { type: String, diff --git a/composables/useStrategy.ts b/composables/useStrategy.ts index 834421c..7b0373c 100644 --- a/composables/useStrategy.ts +++ b/composables/useStrategy.ts @@ -24,6 +24,7 @@ import { useToken } from "./useToken"; import { useWeb3 } from "./useWeb3"; import { useBigNumber } from "./useBigNumber"; import tokenIdMapping from "~/constant/tokenIdMapping"; +import { useFormatting } from "./useFormatting"; export function useStrategy(defineStrategy: DefineStrategy) { const { web3, networkName, account } = useWeb3(); @@ -33,6 +34,8 @@ export function useStrategy(defineStrategy: DefineStrategy) { const { valInt, getTokenByKey } = useToken(); const { emitEvent } = useEventBus(); const { toBN } = useBigNumber(); + const formatting = useFormatting(); + const { showPendingTransaction, showConfirmedTransaction @@ -91,7 +94,8 @@ export function useStrategy(defineStrategy: DefineStrategy) { toBN, position, positionExtra, - tokenIdMapping + tokenIdMapping, + formatting, }); }); diff --git a/core/strategies/helpers/index.ts b/core/strategies/helpers/index.ts index cb4f0bb..0e6abc3 100644 --- a/core/strategies/helpers/index.ts +++ b/core/strategies/helpers/index.ts @@ -4,14 +4,12 @@ import slugify from "slugify"; import { Strategy } from "./strategy"; import BigNumber from "bignumber.js"; import tokenIdMapping from "~/constant/tokenIdMapping"; - +import { useFormatting } from "~/composables/useFormatting"; export interface IStrategyContext { dsa: DSA; web3: Web3; inputs: IStrategyInput[]; - - // TODO: add types in useStrategy.ts dsaBalances?: { [address: string]: IStrategyToken }; userBalances?: { [address: string]: IStrategyToken }; @@ -23,7 +21,7 @@ export interface IStrategyContext { variables?: { [key: string]: any }; toBN?: (value: any) => BigNumber; tokenIdMapping?: typeof tokenIdMapping; - + formatting?: ReturnType; } export interface IStrategyToken { @@ -38,16 +36,22 @@ export interface IStrategyToken { } export enum StrategyInputType { - INPUT = "input", - INPUT_WITH_TOKEN = "input-with-token" + // INPUT = "input", + INPUT_WITH_TOKEN = "input-with-token", + + HEADING = "heading", + VALUE = "value" } export type StrategyInputParameterMap = { - [StrategyInputType.INPUT]: {}; + // [StrategyInputType.INPUT]: {}; [StrategyInputType.INPUT_WITH_TOKEN]: { token?: IStrategyToken; }; + + [StrategyInputType.HEADING]: {}; + [StrategyInputType.VALUE]: {}; }; export interface IStrategyInput { @@ -68,6 +72,11 @@ export interface IStrategyInput { ) => string | void; defaults?: (context: Omit) => object; + update?: ( + context: IStrategyContext & { + input: IStrategyInput & StrategyInputParameterMap[InputType]; + } + ) => void; value?: any; diff --git a/core/strategies/helpers/strategy.ts b/core/strategies/helpers/strategy.ts index b015a41..425ae7b 100644 --- a/core/strategies/helpers/strategy.ts +++ b/core/strategies/helpers/strategy.ts @@ -177,6 +177,11 @@ export class Strategy { for (const listener of this.listeners) { await listener(this); } + + this.inputs.forEach(input => input.update?.({ + ...this.getContext(), + input + })); } onUpdated(cb) { diff --git a/core/strategies/protocols/liquity/close-trove.ts b/core/strategies/protocols/liquity/close-trove.ts index 45ed839..a0bd742 100644 --- a/core/strategies/protocols/liquity/close-trove.ts +++ b/core/strategies/protocols/liquity/close-trove.ts @@ -1,4 +1,9 @@ -import { defineStrategy, StrategyProtocol } from "../../helpers"; +import { + defineStrategy, + StrategyProtocol, + StrategyInputType, + defineInput +} from "../../helpers"; export default defineStrategy({ protocol: StrategyProtocol.LIQUITY, @@ -14,7 +19,47 @@ export default defineStrategy({
  • Close Trove
  • `, - inputs: [], + inputs: [ + defineInput({ + type: StrategyInputType.HEADING, + name: "Payback" + }), + defineInput({ + type: StrategyInputType.VALUE, + name: "Net Debt", + update: ({ position, positionExtra, input, formatting, toBN }) => { + const troveOverallDetails = positionExtra["troveOverallDetails"]; + + const netDebt = toBN(position.debt).minus( + troveOverallDetails.liquidationReserve + ); + + input.value = `${formatting.formatDecimal(netDebt, 2)} LUSD`; + } + }), + defineInput({ + type: StrategyInputType.HEADING, + name: "Withdraw" + }), + defineInput({ + type: StrategyInputType.VALUE, + name: "Collateral", + update: ({ position, input, formatting }) => { + input.value = `${formatting.formatDecimal(position.collateral, 2)} ETH`; + } + }), + defineInput({ + type: StrategyInputType.VALUE, + name: "Liquidation Reserve", + update: ({ positionExtra, input, formatting }) => { + const troveOverallDetails = positionExtra["troveOverallDetails"]; + input.value = `${formatting.formatDecimal( + troveOverallDetails.liquidationReserve, + 2 + )} LUSD`; + } + }) + ], validate: async ({ position, diff --git a/core/strategies/protocols/liquity/deposit-and-borrow.ts b/core/strategies/protocols/liquity/deposit-and-borrow.ts index edb5707..8185297 100644 --- a/core/strategies/protocols/liquity/deposit-and-borrow.ts +++ b/core/strategies/protocols/liquity/deposit-and-borrow.ts @@ -1,4 +1,3 @@ -import BigNumber from "bignumber.js"; import abis from "~/constant/abis"; import addresses from "~/constant/addresses"; import {