mirror of
				https://github.com/Instadapp/assembly.git
				synced 2024-07-29 22:37:06 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			168 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import {
 | |
|   computed,
 | |
|   nextTick,
 | |
|   ref,
 | |
|   useContext,
 | |
|   useRouter,
 | |
|   watch
 | |
| } from "@nuxtjs/composition-api";
 | |
| 
 | |
| import { useDSA } from "./useDSA";
 | |
| import { useWeb3 } from "./useWeb3";
 | |
| import SidebarAaveV2Supply from "~/components/sidebar/context/aaveV2/SidebarAaveV2Supply.vue";
 | |
| import SidebarAaveV2Withdraw from '~/components/sidebar/context/aaveV2/SidebarAaveV2Withdraw.vue'
 | |
| import SidebarAaveV2Borrow from '~/components/sidebar/context/aaveV2/SidebarAaveV2Borrow.vue'
 | |
| import SidebarAaveV2Payback from '~/components/sidebar/context/aaveV2/SidebarAaveV2Payback.vue'
 | |
| 
 | |
| import SidebarOverview from '~/components/sidebar/context/overview/SidebarOverview.vue'
 | |
| import SidebarDepositOverview from '~/components/sidebar/context/SidebarDepositOverview.vue'
 | |
| import SidebarWithdraw from '~/components/sidebar/context/SidebarWithdraw.vue'
 | |
| 
 | |
| import SidebarCompoundWithdraw from '~/components/sidebar/context/compound/SidebarCompoundWithdraw.vue'
 | |
| import SidebarCompoundSupply from '~/components/sidebar/context/compound/SidebarCompoundSupply.vue'
 | |
| import SidebarCompoundBorrow from '~/components/sidebar/context/compound/SidebarCompoundBorrow.vue'
 | |
| import SidebarCompoundPayback from '~/components/sidebar/context/compound/SidebarCompoundPayback.vue'
 | |
| 
 | |
| import SidebarMakerdaoCollateral from '~/components/sidebar/context/makerdao/SidebarMakerdaoCollateral.vue'
 | |
| import SidebarMakerdaoSupply from '~/components/sidebar/context/makerdao/SidebarMakerdaoSupply.vue'
 | |
| import SidebarMakerdaoWithdraw from '~/components/sidebar/context/makerdao/SidebarMakerdaoWithdraw.vue'
 | |
| import SidebarMakerdaoBorrow from '~/components/sidebar/context/makerdao/SidebarMakerdaoBorrow.vue'
 | |
| import SidebarMakerdaoPayback from '~/components/sidebar/context/makerdao/SidebarMakerdaoPayback.vue'
 | |
| 
 | |
| import SidebarLiquityTroveOpenNew from '~/components/sidebar/context/liquity/SidebarLiquityTroveOpenNew.vue'
 | |
| import SidebarLiquityTroveSupply from '~/components/sidebar/context/liquity/SidebarLiquityTroveSupply.vue'
 | |
| import SidebarLiquityTroveWithdraw from '~/components/sidebar/context/liquity/SidebarLiquityTroveWithdraw.vue'
 | |
| import SidebarLiquityTroveBorrow from '~/components/sidebar/context/liquity/SidebarLiquityTroveBorrow.vue'
 | |
| import SidebarLiquityTrovePayback from '~/components/sidebar/context/liquity/SidebarLiquityTrovePayback.vue'
 | |
| 
 | |
| import SidebarReflexerCollateral from '~/components/sidebar/context/reflexer/SidebarReflexerCollateral.vue'
 | |
| import SidebarReflexerSupply from '~/components/sidebar/context/reflexer/SidebarReflexerSupply.vue'
 | |
| import SidebarReflexerWithdraw from '~/components/sidebar/context/reflexer/SidebarReflexerWithdraw.vue'
 | |
| import SidebarReflexerBorrow from '~/components/sidebar/context/reflexer/SidebarReflexerBorrow.vue'
 | |
| import SidebarReflexerPayback from '~/components/sidebar/context/reflexer/SidebarReflexerPayback.vue'
 | |
| 
 | |
| 
 | |
| const sidebars = {
 | |
|   "#overview" :  {component: SidebarOverview, back : false, close : true },
 | |
|   "#deposit-overview": {component: SidebarDepositOverview, back: { hash: 'overview' }  },
 | |
|   '#withdraw-token': { component: SidebarWithdraw, back: { hash: 'overview' } },
 | |
|   "/aave-v2": { component: null },
 | |
|   "/aave-v2#supply": { component: SidebarAaveV2Supply },
 | |
|   "/aave-v2#borrow": { component: SidebarAaveV2Borrow },
 | |
|   "/aave-v2#payback": { component: SidebarAaveV2Payback },
 | |
|   "/aave-v2#withdraw": { component: SidebarAaveV2Withdraw },
 | |
| 
 | |
|   "/mainnet/compound": { component: null },
 | |
|   "/mainnet/compound#withdraw": { component: SidebarCompoundWithdraw },
 | |
|   "/mainnet/compound#supply": { component: SidebarCompoundSupply },
 | |
|   "/mainnet/compound#borrow": { component: SidebarCompoundBorrow },
 | |
|   "/mainnet/compound#payback": { component: SidebarCompoundPayback },
 | |
| 
 | |
|   "/mainnet/maker": { component: null },
 | |
|   '/mainnet/maker#collateral': { component: SidebarMakerdaoCollateral },
 | |
|   "/mainnet/maker#supply": { component: SidebarMakerdaoSupply },
 | |
|   "/mainnet/maker#withdraw": { component: SidebarMakerdaoWithdraw },
 | |
|   "/mainnet/maker#borrow": { component: SidebarMakerdaoBorrow },
 | |
|   "/mainnet/maker#payback": { component: SidebarMakerdaoPayback },
 | |
| 
 | |
|   '/mainnet/liquity#trove-new': { component: SidebarLiquityTroveOpenNew },
 | |
|   '/mainnet/liquity#trove-supply': { component: SidebarLiquityTroveSupply },
 | |
|   '/mainnet/liquity#trove-withdraw': { component: SidebarLiquityTroveWithdraw },
 | |
|   '/mainnet/liquity#trove-borrow': { component: SidebarLiquityTroveBorrow },
 | |
|   '/mainnet/liquity#trove-payback': { component: SidebarLiquityTrovePayback },
 | |
| 
 | |
|   "/mainnet/reflexer": { component: null },
 | |
|   '/mainnet/reflexer#collateral': { component: SidebarReflexerCollateral },
 | |
|   "/mainnet/reflexer#supply": { component: SidebarReflexerSupply },
 | |
|   "/mainnet/reflexer#withdraw": { component: SidebarReflexerWithdraw },
 | |
|   "/mainnet/reflexer#borrow": { component: SidebarReflexerBorrow },
 | |
|   "/mainnet/reflexer#payback": { component: SidebarReflexerPayback },
 | |
| };
 | |
| 
 | |
| const sidebar = ref(null);
 | |
| const props = ref(null);
 | |
| 
 | |
| export function init() {
 | |
|   const { route } = useContext();
 | |
|   const router = useRouter()
 | |
|   const { active } = useWeb3();
 | |
|   const { dsa } = useDSA();
 | |
| 
 | |
|   watch(
 | |
|     [route, active, dsa],
 | |
|     async ([route, active, dsa], [oldRoute, oldActive, oldDsa]) => {
 | |
|       await nextTick();
 | |
| 
 | |
|       //@ts-ignore
 | |
|       const hasPathChanged = !oldRoute || route.path !== oldRoute.path;
 | |
|       const hasIsLoggedInChanged = active !== oldActive;
 | |
|       const hasDsaChanged = dsa !== oldDsa;
 | |
| 
 | |
|       //@ts-ignore
 | |
|       const [hash, params] = route.hash.split("?");
 | |
|       
 | |
|       if (hasPathChanged){
 | |
|         router.push({ hash: null })
 | |
|         return
 | |
|       }
 | |
| 
 | |
|        //@ts-ignore
 | |
|       sidebar.value = sidebars[route.path + hash] || sidebars[hash];
 | |
|         
 | |
|       if (!sidebar.value) {
 | |
|         props.value = {};
 | |
|         return;
 | |
|       }
 | |
| 
 | |
|       if (!params) {
 | |
|         props.value = {};
 | |
|         return;
 | |
|       }
 | |
| 
 | |
|       // parse url params (example: `prop1=value1&prop2=value2`)
 | |
|       props.value = params.split("&").reduce((props, entry) => {
 | |
|         const [key, value] = entry.split("=");
 | |
|         props[key] = value;
 | |
|         return props;
 | |
|       }, {});
 | |
|     },
 | |
|     { immediate: true }
 | |
|   );
 | |
| }
 | |
| 
 | |
| export function useSidebar() {
 | |
|   const { route } = useContext();
 | |
|   const router = useRouter();
 | |
| 
 | |
|   function close() {
 | |
|     router.push({ hash: null });
 | |
|   }
 | |
| 
 | |
|   function back() {
 | |
|     const location = sidebar.value?.back || { hash: null };
 | |
| 
 | |
|     router.push(location);
 | |
|   }
 | |
| 
 | |
|   const component = computed(() => sidebar.value?.component);
 | |
| 
 | |
|   const isOpen = computed(() => {
 | |
|     if (!route.value.hash) return false;
 | |
| 
 | |
|     return !!component.value;
 | |
|   });
 | |
| 
 | |
|   const showSidebarBalances = () => {
 | |
|     router.push({ hash: 'overview' });
 | |
|   }
 | |
| 
 | |
|   return {
 | |
|     close,
 | |
|     back,
 | |
|     component,
 | |
|     props,
 | |
|     isOpen,
 | |
|     showSidebarBalances
 | |
|   };
 | |
| }
 | 
