mirror of
https://github.com/Instadapp/assembly.git
synced 2024-07-29 22:37:06 +00:00
108 lines
2.5 KiB
TypeScript
108 lines
2.5 KiB
TypeScript
|
import { ref, computed, useContext } from "@nuxtjs/composition-api";
|
||
|
import { useSidebarBlockData } from "~/composables/useSidebarBlockData";
|
||
|
|
||
|
export function useCustomBlocks() {
|
||
|
const { app, store } = useContext();
|
||
|
const { getBlockData } = useSidebarBlockData();
|
||
|
const search = ref("");
|
||
|
|
||
|
const filteredBlocks = computed(() => {
|
||
|
if (!search.value) return protocolsList.value;
|
||
|
|
||
|
const arrCopy = JSON.parse(JSON.stringify(protocolsList.value));
|
||
|
const result = [];
|
||
|
const term = search.value.toLowerCase();
|
||
|
const re = new RegExp(term, "i");
|
||
|
|
||
|
arrCopy.forEach(protocol => {
|
||
|
const filteredBlocks = protocol.blocks.filter(block =>
|
||
|
re.test(block.name)
|
||
|
);
|
||
|
|
||
|
if (filteredBlocks.length) {
|
||
|
protocol.blocks = filteredBlocks;
|
||
|
result.push(protocol);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
return result;
|
||
|
});
|
||
|
|
||
|
function startNewBlockSetup(protocol, block) {
|
||
|
createNewBlock(protocol, block);
|
||
|
openBlockSetupSidebar(block.type);
|
||
|
}
|
||
|
|
||
|
function startBlockEdit(block) {
|
||
|
store.dispatch("custom-strategy/setSelectedBlock", {
|
||
|
type: block.type,
|
||
|
blockData: block
|
||
|
});
|
||
|
openBlockSetupSidebar(block.type);
|
||
|
}
|
||
|
|
||
|
function createNewBlock(protocol, block) {
|
||
|
const blockData = { protocol, id: -1 };
|
||
|
store.dispatch("custom-strategy/setSelectedBlock", {
|
||
|
type: block.type,
|
||
|
blockData
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function openBlockSetupSidebar(type) {
|
||
|
const blockData = getBlockData(type);
|
||
|
if (blockData && blockData.hash) {
|
||
|
app.router.push({
|
||
|
hash: blockData.hash
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const protocolsList = ref([
|
||
|
{
|
||
|
name: "Uniswap",
|
||
|
tokenKey: "uni",
|
||
|
blocks: [
|
||
|
{ name: "Swap Token", type: "swap-token" },
|
||
|
{ name: "Add Liqudity" },
|
||
|
{ name: "Remove Liquidity" }
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
name: "Aave",
|
||
|
tokenKey: "aave",
|
||
|
blocks: [
|
||
|
{ name: "Flash Loan", type: "flashloan" },
|
||
|
{ name: "Deposit" },
|
||
|
{ name: "Withdraw" }
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
name: "Makerdao",
|
||
|
tokenKey: "mkr",
|
||
|
blocks: [
|
||
|
{ name: "Swap Token", type: "swap-token" },
|
||
|
{ name: "Add Liqudity" },
|
||
|
{ name: "Remove Liquidity" }
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
name: "Compound",
|
||
|
tokenKey: "comp",
|
||
|
blocks: [
|
||
|
{ name: "Flash Loan", type: "flashloan" },
|
||
|
{ name: "Deposit" },
|
||
|
{ name: "Withdraw" }
|
||
|
]
|
||
|
}
|
||
|
]);
|
||
|
|
||
|
return {
|
||
|
search,
|
||
|
filteredBlocks,
|
||
|
startNewBlockSetup,
|
||
|
openBlockSetupSidebar,
|
||
|
startBlockEdit
|
||
|
};
|
||
|
}
|