mirror of
https://github.com/Instadapp/assembly.git
synced 2024-07-29 22:37:06 +00:00
update
This commit is contained in:
parent
4951b6733b
commit
48602b9d6c
51
components/sidebar/context/strategy/SidebarStrategy.vue
Normal file
51
components/sidebar/context/strategy/SidebarStrategy.vue
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
<template>
|
||||||
|
<SidebarContextContainer class="h-full overflow-hidden">
|
||||||
|
<SidebarContextHeader class="xxl:hidden">Strategy</SidebarContextHeader>
|
||||||
|
|
||||||
|
<div class="h-full overflow-y-scroll scrollbar-hover">
|
||||||
|
<div class="mx-auto" style="max-width: 296px">
|
||||||
|
<div class="py-2 sm:py-4">
|
||||||
|
<pre>{{ $props }}</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</SidebarContextContainer>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { defineComponent } from '@nuxtjs/composition-api'
|
||||||
|
import { useSidebar } from '~/composables/useSidebar';
|
||||||
|
import { protocolStrategies } from '~/core/strategies'
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
props: {
|
||||||
|
protocol: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
strategy: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
setup(props) {
|
||||||
|
const { close } = useSidebar();
|
||||||
|
|
||||||
|
// const strategies = protocolStrategies[props.protocol];
|
||||||
|
|
||||||
|
// if (!strategies) {
|
||||||
|
// close()
|
||||||
|
// }
|
||||||
|
|
||||||
|
// const strategy = strategies.find(strategy => strategy.id === props.strategy);
|
||||||
|
|
||||||
|
// if (!strategy) {
|
||||||
|
// close()
|
||||||
|
// }
|
||||||
|
|
||||||
|
return {
|
||||||
|
// strategy
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
|
</script>
|
|
@ -0,0 +1,56 @@
|
||||||
|
<template>
|
||||||
|
<SidebarContextContainer class="h-full overflow-hidden">
|
||||||
|
<SidebarContextHeader class="xxl:hidden">Strategies</SidebarContextHeader>
|
||||||
|
|
||||||
|
<div class="h-full overflow-y-scroll scrollbar-hover">
|
||||||
|
<div class="mx-auto" style="max-width: 296px">
|
||||||
|
<div class="py-2 sm:py-4">
|
||||||
|
<div
|
||||||
|
v-for="strategy in strategies"
|
||||||
|
:key="strategy.name"
|
||||||
|
@click="selectStrategy(strategy)"
|
||||||
|
class="flex-shrink-0 flex flex-col px-6 py-4 mt-2 bg-background rounded cursor-pointer select-none first:mt-0 sm:mt-6 group hover:bg-selection"
|
||||||
|
>
|
||||||
|
<div class="flex items-start justify-between mb-3">
|
||||||
|
<h4
|
||||||
|
class="font-bold text-17 text-navi-pure-light dark:text-light"
|
||||||
|
>
|
||||||
|
{{ strategy.name }}
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
<div class="font-medium leading-snug text-12 text-grey-pure">
|
||||||
|
{{ strategy.description }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</SidebarContextContainer>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { defineComponent, useRouter } from '@nuxtjs/composition-api'
|
||||||
|
import { protocolStrategies } from '~/core/strategies'
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
props: {
|
||||||
|
protocol: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
setup(props) {
|
||||||
|
const router = useRouter()
|
||||||
|
|
||||||
|
const strategies = protocolStrategies[props.protocol] || [];
|
||||||
|
|
||||||
|
function selectStrategy(strategy) {
|
||||||
|
router.push({
|
||||||
|
hash: `#strategy?protocol=${props.protocol}&strategy=${strategy.id}`
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return { strategies, selectStrategy, protocolStrategies }
|
||||||
|
},
|
||||||
|
})
|
||||||
|
</script>
|
|
@ -35,11 +35,16 @@ import SidebarLiquityTroveWithdraw from '~/components/sidebar/context/liquity/Si
|
||||||
import SidebarLiquityTroveBorrow from '~/components/sidebar/context/liquity/SidebarLiquityTroveBorrow.vue'
|
import SidebarLiquityTroveBorrow from '~/components/sidebar/context/liquity/SidebarLiquityTroveBorrow.vue'
|
||||||
import SidebarLiquityTrovePayback from '~/components/sidebar/context/liquity/SidebarLiquityTrovePayback.vue'
|
import SidebarLiquityTrovePayback from '~/components/sidebar/context/liquity/SidebarLiquityTrovePayback.vue'
|
||||||
|
|
||||||
|
import SidebarStrategySelection from '~/components/sidebar/context/strategy/SidebarStrategySelection.vue'
|
||||||
|
import SidebarStrategy from '~/components/sidebar/context/strategy/SidebarStrategy.vue'
|
||||||
|
|
||||||
const sidebars = {
|
const sidebars = {
|
||||||
"#overview" : {component: SidebarOverview, back : false, close : true },
|
"#overview" : {component: SidebarOverview, back : false, close : true },
|
||||||
"#deposit-overview": {component: SidebarDepositOverview, back: { hash: 'overview' } },
|
"#deposit-overview": {component: SidebarDepositOverview, back: { hash: 'overview' } },
|
||||||
'#withdraw-token': { component: SidebarWithdraw, back: { hash: 'overview' } },
|
'#withdraw-token': { component: SidebarWithdraw, back: { hash: 'overview' } },
|
||||||
|
'#strategies': { component: SidebarStrategySelection },
|
||||||
|
'#strategy': { component: SidebarStrategy },
|
||||||
|
|
||||||
"/aave-v2": { component: null },
|
"/aave-v2": { component: null },
|
||||||
"/aave-v2#supply": { component: SidebarAaveV2Supply },
|
"/aave-v2#supply": { component: SidebarAaveV2Supply },
|
||||||
"/aave-v2#borrow": { component: SidebarAaveV2Borrow },
|
"/aave-v2#borrow": { component: SidebarAaveV2Borrow },
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import DSA from "dsa-connect";
|
import DSA from "dsa-connect";
|
||||||
import Web3 from "web3";
|
import Web3 from "web3";
|
||||||
|
import slugify from "slugify"
|
||||||
export interface IStrategyContext {
|
export interface IStrategyContext {
|
||||||
dsa: typeof DSA;
|
dsa: typeof DSA;
|
||||||
web3: Web3;
|
web3: Web3;
|
||||||
|
@ -22,6 +22,13 @@ export enum StrategyInputType {
|
||||||
INPUT_WITH_TOKEN = "input-with-token"
|
INPUT_WITH_TOKEN = "input-with-token"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// type InputTypes = {
|
||||||
|
// [StrategyInputType.INPUT] : {
|
||||||
|
// token?: IStrategyToken;
|
||||||
|
// value?: any;
|
||||||
|
// };
|
||||||
|
// }
|
||||||
|
|
||||||
export interface IStrategyInput {
|
export interface IStrategyInput {
|
||||||
type: StrategyInputType;
|
type: StrategyInputType;
|
||||||
name: string;
|
name: string;
|
||||||
|
@ -32,9 +39,12 @@ export interface IStrategyInput {
|
||||||
// If type is "input-with-token", this is the token
|
// If type is "input-with-token", this is the token
|
||||||
token?: IStrategyToken;
|
token?: IStrategyToken;
|
||||||
value?: any;
|
value?: any;
|
||||||
|
|
||||||
|
[key: string]: any;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IStrategy {
|
export interface IStrategy {
|
||||||
|
id?: string;
|
||||||
name: string;
|
name: string;
|
||||||
description: string;
|
description: string;
|
||||||
author?: string;
|
author?: string;
|
||||||
|
@ -42,8 +52,15 @@ export interface IStrategy {
|
||||||
inputs: IStrategyInput[];
|
inputs: IStrategyInput[];
|
||||||
|
|
||||||
spells: (context: IStrategyContext) => any;
|
spells: (context: IStrategyContext) => any;
|
||||||
|
|
||||||
|
submitText?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function defineStrategy(strategy: IStrategy): IStrategy {
|
export function defineStrategy(strategy: IStrategy): IStrategy {
|
||||||
|
|
||||||
|
if(! strategy.id){
|
||||||
|
strategy.id = slugify(strategy.name).toLowerCase();
|
||||||
|
}
|
||||||
|
|
||||||
return strategy;
|
return strategy;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import AaveV2 from "./protocols/aave-v2"
|
import AaveV2 from "./protocols/aave-v2"
|
||||||
|
|
||||||
export const strategies = {
|
export const protocolStrategies = {
|
||||||
aaveV2 : AaveV2,
|
aaveV2 : AaveV2,
|
||||||
}
|
}
|
|
@ -16,8 +16,8 @@ export default defineStrategy({
|
||||||
}
|
}
|
||||||
|
|
||||||
if (input.token.balance < input.value) {
|
if (input.token.balance < input.value) {
|
||||||
return "Your amount exceeds your maximum limit.";
|
return "Your amount exceeds your maximum limit.";
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
"dsa-connect": "^0.4.3",
|
"dsa-connect": "^0.4.3",
|
||||||
"nuxt": "^2.15.7",
|
"nuxt": "^2.15.7",
|
||||||
"qrcode": "^1.4.4",
|
"qrcode": "^1.4.4",
|
||||||
|
"slugify": "^1.6.0",
|
||||||
"v-click-outside": "^3.1.2",
|
"v-click-outside": "^3.1.2",
|
||||||
"v-tooltip": "^2.1.3",
|
"v-tooltip": "^2.1.3",
|
||||||
"vue-clipboard2": "^0.3.1",
|
"vue-clipboard2": "^0.3.1",
|
||||||
|
|
|
@ -10410,6 +10410,11 @@ slash@^3.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
|
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
|
||||||
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
|
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
|
||||||
|
|
||||||
|
slugify@^1.6.0:
|
||||||
|
version "1.6.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.6.0.tgz#6bdf8ed01dabfdc46425b67e3320b698832ff893"
|
||||||
|
integrity sha512-FkMq+MQc5hzYgM86nLuHI98Acwi3p4wX+a5BO9Hhw4JdK4L7WueIiZ4tXEobImPqBz2sVcV0+Mu3GRB30IGang==
|
||||||
|
|
||||||
snapdragon-node@^2.0.1:
|
snapdragon-node@^2.0.1:
|
||||||
version "2.1.1"
|
version "2.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
|
resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
|
||||||
|
|
Loading…
Reference in New Issue
Block a user