UNPKG

@lifi/widget

Version:

LI.FI Widget for cross-chain bridging and swapping. It will drive your multi-chain strategy and attract new users from everywhere.

37 lines (36 loc) 1.53 kB
import microdiff from 'microdiff'; export const isRouteDone = (route) => { return route.steps.every((step) => step.execution?.status === 'DONE'); }; export const isRoutePartiallyDone = (route) => { return route.steps.some((step) => step.execution?.process.some((process) => process.substatus === 'PARTIAL')); }; export const isRouteRefunded = (route) => { return route.steps.some((step) => step.execution?.process.some((process) => process.substatus === 'REFUNDED')); }; export const isRouteFailed = (route) => { return route.steps.some((step) => step.execution?.status === 'FAILED'); }; export const isRouteActive = (route) => { if (!route) { return false; } const isDone = isRouteDone(route); const isFailed = isRouteFailed(route); const alreadyStarted = route.steps.some((step) => step.execution); return !isDone && !isFailed && alreadyStarted; }; export const doesRouteHaveCustomTool = (route) => { return route.steps.some((step) => step.tool === 'custom' || step.toolDetails.key === 'custom'); }; export const getUpdatedProcess = (currentRoute, updatedRoute) => { const processDiff = microdiff(currentRoute, updatedRoute).find((diff) => diff.path.includes('process')); if (!processDiff) { return undefined; } // e.g. ['steps', 0, 'execution', 'process', 0] const process = processDiff.path .slice(0, processDiff.path.findIndex((path) => path === 'process') + 2) .reduce((obj, path) => obj[path], updatedRoute); return process; };