@lifi/widget 1.16.0 → 1.17.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AppDrawer.d.ts +3 -3
- package/AppProvider.d.ts +0 -4
- package/AppProvider.js +2 -10
- package/README.md +1 -1
- package/cjs/AppDrawer.d.ts +3 -3
- package/cjs/AppProvider.d.ts +0 -4
- package/cjs/AppProvider.js +3 -12
- package/cjs/components/AppContainer.js +2 -2
- package/cjs/components/ChainSelect/ChainSelect.style.js +4 -4
- package/cjs/components/ChainSelect/useChainSelect.d.ts +2 -2
- package/cjs/components/GasSufficiencyMessage/GasSufficiencyMessage.js +3 -3
- package/cjs/components/Header/useHeaderActionStore.d.ts +0 -2
- package/cjs/components/Header/useHeaderActionStore.js +1 -5
- package/cjs/components/SelectChainAndToken.js +5 -5
- package/cjs/components/SwapButton/SwapButton.js +3 -23
- package/cjs/components/TokenList/TokenList.js +1 -1
- package/cjs/components/TokenList/TokenList.style.js +4 -3
- package/cjs/components/TokenList/TokenListItem.js +1 -1
- package/cjs/components/TokenList/TokenNotFound.d.ts +2 -1
- package/cjs/components/TokenList/TokenNotFound.js +12 -2
- package/cjs/components/TokenList/types.d.ts +2 -2
- package/cjs/config/version.d.ts +1 -1
- package/cjs/config/version.js +1 -1
- package/cjs/hooks/useChains.js +23 -10
- package/cjs/hooks/useFeaturedTokens.d.ts +1 -1
- package/cjs/hooks/useFeaturedTokens.js +6 -3
- package/cjs/hooks/useGasSufficiency.d.ts +1 -1
- package/cjs/hooks/useGasSufficiency.js +39 -28
- package/cjs/hooks/useInitializer.js +6 -0
- package/cjs/hooks/useRouteExecution.js +28 -12
- package/cjs/hooks/useSwapRoutes.js +10 -11
- package/cjs/hooks/useToken.d.ts +0 -1
- package/cjs/hooks/useToken.js +1 -2
- package/cjs/hooks/useTokenBalances.d.ts +1 -2
- package/cjs/hooks/useTokenBalances.js +5 -6
- package/cjs/hooks/useTokenSearch.js +3 -2
- package/cjs/hooks/useTokens.d.ts +1 -2
- package/cjs/hooks/useTokens.js +32 -9
- package/cjs/hooks/useTools.js +11 -5
- package/cjs/hooks/useWidgetEvents.d.ts +3 -3
- package/cjs/hooks/useWidgetEvents.js +2 -2
- package/cjs/i18n/en/translation.json +2 -3
- package/cjs/i18n/index.d.ts +1 -2
- package/cjs/index.d.ts +2 -1
- package/cjs/pages/MainPage/MainSwapButton.js +1 -1
- package/cjs/pages/SettingsPage/AdvancedPreferences.js +1 -1
- package/cjs/pages/SettingsPage/GasPriceSelect.js +1 -1
- package/cjs/pages/SettingsPage/RoutePrioritySelect.js +1 -1
- package/cjs/pages/SettingsPage/ShowDestinationWallet.js +1 -1
- package/cjs/pages/SettingsPage/SlippageInput.js +1 -1
- package/cjs/pages/SwapDetailsPage/SwapDetailsPage.js +2 -3
- package/cjs/pages/SwapHistoryPage/SwapHistoryPage.js +2 -3
- package/cjs/pages/SwapPage/SwapPage.js +11 -2
- package/cjs/pages/SwapRoutesPage/SwapRoutesPage.js +4 -3
- package/cjs/providers/SDKProvider/SDKProvider.d.ts +4 -0
- package/cjs/providers/SDKProvider/SDKProvider.js +27 -0
- package/cjs/providers/SDKProvider/index.d.ts +1 -0
- package/cjs/providers/SDKProvider/index.js +17 -0
- package/cjs/providers/SwapFormProvider/SwapFormProvider.js +4 -58
- package/cjs/providers/SwapFormProvider/types.d.ts +5 -5
- package/cjs/providers/TelemetryProvider/TelemetryProvider.d.ts +4 -0
- package/cjs/providers/TelemetryProvider/TelemetryProvider.js +11 -0
- package/cjs/providers/TelemetryProvider/index.d.ts +1 -0
- package/cjs/providers/TelemetryProvider/index.js +17 -0
- package/cjs/providers/WalletProvider/WalletProvider.d.ts +1 -4
- package/cjs/providers/WalletProvider/WalletProvider.js +59 -1
- package/cjs/providers/WidgetProvider/WidgetProvider.js +1 -12
- package/cjs/providers/WidgetProvider/index.d.ts +1 -0
- package/cjs/providers/WidgetProvider/index.js +1 -0
- package/cjs/providers/WidgetProvider/utils.d.ts +4 -0
- package/cjs/providers/WidgetProvider/utils.js +13 -0
- package/cjs/providers/index.d.ts +2 -0
- package/cjs/providers/index.js +2 -0
- package/cjs/stores/chains/index.d.ts +0 -1
- package/cjs/stores/chains/index.js +0 -1
- package/cjs/stores/chains/types.d.ts +1 -1
- package/cjs/stores/chains/useChainOrderStore.js +17 -14
- package/cjs/stores/route/utils.d.ts +2 -1
- package/cjs/stores/route/utils.js +17 -1
- package/cjs/stores/settings/index.d.ts +0 -1
- package/cjs/stores/settings/index.js +0 -1
- package/cjs/stores/settings/useAppearance.js +3 -1
- package/cjs/types/events.d.ts +15 -3
- package/cjs/types/events.js +4 -3
- package/cjs/types/widget.d.ts +29 -22
- package/cjs/utils/colors.d.ts +1 -1
- package/components/AppContainer.js +1 -1
- package/components/ChainSelect/ChainSelect.style.js +4 -4
- package/components/ChainSelect/useChainSelect.d.ts +2 -2
- package/components/GasSufficiencyMessage/GasSufficiencyMessage.js +3 -3
- package/components/Header/useHeaderActionStore.d.ts +0 -2
- package/components/Header/useHeaderActionStore.js +0 -3
- package/components/SelectChainAndToken.js +1 -1
- package/components/SwapButton/SwapButton.js +5 -25
- package/components/TokenList/TokenList.js +1 -1
- package/components/TokenList/TokenList.style.js +4 -3
- package/components/TokenList/TokenListItem.js +1 -1
- package/components/TokenList/TokenNotFound.d.ts +2 -1
- package/components/TokenList/TokenNotFound.js +12 -2
- package/components/TokenList/types.d.ts +2 -2
- package/config/version.d.ts +1 -1
- package/config/version.js +1 -1
- package/hooks/useChains.js +24 -11
- package/hooks/useFeaturedTokens.d.ts +1 -1
- package/hooks/useFeaturedTokens.js +6 -3
- package/hooks/useGasSufficiency.d.ts +1 -1
- package/hooks/useGasSufficiency.js +35 -24
- package/hooks/useInitializer.js +6 -0
- package/hooks/useRouteExecution.js +28 -12
- package/hooks/useSwapRoutes.js +3 -4
- package/hooks/useToken.d.ts +0 -1
- package/hooks/useToken.js +1 -2
- package/hooks/useTokenBalances.d.ts +1 -2
- package/hooks/useTokenBalances.js +4 -5
- package/hooks/useTokenSearch.js +3 -2
- package/hooks/useTokens.d.ts +1 -2
- package/hooks/useTokens.js +32 -9
- package/hooks/useTools.js +11 -5
- package/hooks/useWidgetEvents.d.ts +3 -3
- package/hooks/useWidgetEvents.js +2 -2
- package/i18n/en/translation.json +2 -3
- package/i18n/index.d.ts +1 -2
- package/index.d.ts +2 -1
- package/package.json +9 -8
- package/pages/MainPage/MainSwapButton.js +1 -1
- package/pages/SettingsPage/AdvancedPreferences.js +2 -2
- package/pages/SettingsPage/GasPriceSelect.js +2 -2
- package/pages/SettingsPage/RoutePrioritySelect.js +2 -2
- package/pages/SettingsPage/ShowDestinationWallet.js +2 -2
- package/pages/SettingsPage/SlippageInput.js +2 -2
- package/pages/SwapDetailsPage/SwapDetailsPage.js +3 -4
- package/pages/SwapHistoryPage/SwapHistoryPage.js +3 -4
- package/pages/SwapPage/SwapPage.js +11 -2
- package/pages/SwapRoutesPage/SwapRoutesPage.js +5 -4
- package/providers/SDKProvider/SDKProvider.d.ts +4 -0
- package/providers/SDKProvider/SDKProvider.js +19 -0
- package/providers/SDKProvider/index.d.ts +1 -0
- package/providers/SDKProvider/index.js +1 -0
- package/providers/SwapFormProvider/SwapFormProvider.js +4 -58
- package/providers/SwapFormProvider/types.d.ts +5 -5
- package/providers/TelemetryProvider/TelemetryProvider.d.ts +4 -0
- package/providers/TelemetryProvider/TelemetryProvider.js +7 -0
- package/providers/TelemetryProvider/index.d.ts +1 -0
- package/providers/TelemetryProvider/index.js +1 -0
- package/providers/WalletProvider/WalletProvider.d.ts +1 -4
- package/providers/WalletProvider/WalletProvider.js +59 -1
- package/providers/WidgetProvider/WidgetProvider.js +3 -14
- package/providers/WidgetProvider/index.d.ts +1 -0
- package/providers/WidgetProvider/index.js +1 -0
- package/providers/WidgetProvider/utils.d.ts +4 -0
- package/providers/WidgetProvider/utils.js +9 -0
- package/providers/index.d.ts +2 -0
- package/providers/index.js +2 -0
- package/stores/chains/index.d.ts +0 -1
- package/stores/chains/index.js +0 -1
- package/stores/chains/types.d.ts +1 -1
- package/stores/chains/useChainOrderStore.js +17 -14
- package/stores/route/utils.d.ts +2 -1
- package/stores/route/utils.js +12 -0
- package/stores/settings/index.d.ts +0 -1
- package/stores/settings/index.js +0 -1
- package/stores/settings/useAppearance.js +3 -1
- package/tsconfig.cjs.tsbuildinfo +1 -1
- package/types/events.d.ts +15 -3
- package/types/events.js +4 -3
- package/types/widget.d.ts +29 -22
- package/utils/colors.d.ts +1 -1
- package/cjs/config/lifi.d.ts +0 -4
- package/cjs/config/lifi.js +0 -14
- package/cjs/stores/chains/useInitializeChainOrder.d.ts +0 -1
- package/cjs/stores/chains/useInitializeChainOrder.js +0 -12
- package/cjs/stores/settings/useSetSettings.d.ts +0 -5
- package/cjs/stores/settings/useSetSettings.js +0 -12
- package/config/lifi.d.ts +0 -4
- package/config/lifi.js +0 -7
- package/stores/chains/useInitializeChainOrder.d.ts +0 -1
- package/stores/chains/useInitializeChainOrder.js +0 -5
- package/stores/settings/useSetSettings.d.ts +0 -5
- package/stores/settings/useSetSettings.js +0 -5
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect } from 'react';
|
|
3
3
|
import { useLocation, useNavigate } from 'react-router-dom';
|
|
4
|
-
import {
|
|
4
|
+
import { useHeaderActionStore } from '../../components/Header';
|
|
5
5
|
import { ProgressToNextUpdate } from '../../components/ProgressToNextUpdate';
|
|
6
6
|
import { SwapRouteCard, SwapRouteCardSkeleton, SwapRouteNotFoundCard, } from '../../components/SwapRouteCard';
|
|
7
7
|
import { useSwapRoutes } from '../../hooks';
|
|
@@ -11,7 +11,6 @@ import { Stack } from './SwapRoutesPage.style';
|
|
|
11
11
|
export const SwapRoutesPage = () => {
|
|
12
12
|
const navigate = useNavigate();
|
|
13
13
|
const { pathname } = useLocation();
|
|
14
|
-
const setHeaderAction = useSetHeaderAction();
|
|
15
14
|
const { routes: swapRoutes, isLoading, isFetching, dataUpdatedAt, refetchTime, refetch, } = useSwapRoutes();
|
|
16
15
|
const setExecutableRoute = useSetExecutableRoute();
|
|
17
16
|
const handleRouteClick = (route) => {
|
|
@@ -28,8 +27,10 @@ export const SwapRoutesPage = () => {
|
|
|
28
27
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
29
28
|
}, []);
|
|
30
29
|
useEffect(() => {
|
|
31
|
-
return
|
|
32
|
-
|
|
30
|
+
return useHeaderActionStore
|
|
31
|
+
.getState()
|
|
32
|
+
.setAction(_jsx(ProgressToNextUpdate, { updatedAt: dataUpdatedAt || new Date().getTime(), timeToUpdate: refetchTime, isLoading: isFetching, onClick: () => refetch(), sx: { marginRight: -1 }, size: "medium", edge: "end" }));
|
|
33
|
+
}, [dataUpdatedAt, isFetching, refetch, refetchTime]);
|
|
33
34
|
const routeNotFound = !(swapRoutes === null || swapRoutes === void 0 ? void 0 : swapRoutes.length) && !isLoading && !isFetching;
|
|
34
35
|
return (_jsx(Stack, Object.assign({ direction: "column", spacing: 2, flex: 1 }, { children: routeNotFound ? (_jsx(SwapRouteNotFoundCard, {})) : isLoading || isFetching ? (Array.from({ length: 3 }).map((_, index) => (_jsx(SwapRouteCardSkeleton, {}, index)))) : (swapRoutes === null || swapRoutes === void 0 ? void 0 : swapRoutes.map((route) => (_jsx(SwapRouteCard, { route: route, onClick: () => handleRouteClick(route) }, route.id)))) })));
|
|
35
36
|
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import LIFI from '@lifi/sdk';
|
|
3
|
+
import { createContext, useContext, useMemo } from 'react';
|
|
4
|
+
import { useWidgetConfig } from '../WidgetProvider';
|
|
5
|
+
let lifi;
|
|
6
|
+
const SDKContext = createContext(null);
|
|
7
|
+
export const useLiFi = () => useContext(SDKContext);
|
|
8
|
+
export const SDKProvider = ({ children, }) => {
|
|
9
|
+
const { sdkConfig, integrator } = useWidgetConfig();
|
|
10
|
+
const value = useMemo(() => {
|
|
11
|
+
const config = Object.assign(Object.assign({}, sdkConfig), { defaultRouteOptions: Object.assign(Object.assign({}, sdkConfig === null || sdkConfig === void 0 ? void 0 : sdkConfig.defaultRouteOptions), { integrator: integrator !== null && integrator !== void 0 ? integrator : window.location.hostname }) });
|
|
12
|
+
if (!lifi) {
|
|
13
|
+
lifi = new LIFI(Object.assign({ disableVersionCheck: true }, config));
|
|
14
|
+
}
|
|
15
|
+
lifi.setConfig(config);
|
|
16
|
+
return lifi;
|
|
17
|
+
}, [integrator, sdkConfig]);
|
|
18
|
+
return _jsx(SDKContext.Provider, Object.assign({ value: value }, { children: children }));
|
|
19
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './SDKProvider';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './SDKProvider';
|
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { ChainId } from '@lifi/sdk';
|
|
3
|
-
import { useEffect } from 'react';
|
|
4
2
|
import { FormProvider, useForm } from 'react-hook-form';
|
|
5
|
-
import { useChainOrderStore, useSetChainOrder } from '../../stores/chains';
|
|
6
|
-
import { useWallet } from '../WalletProvider';
|
|
7
3
|
import { useWidgetConfig } from '../WidgetProvider';
|
|
8
4
|
import { SwapFormKey } from './types';
|
|
9
5
|
export const formDefaultValues = {
|
|
@@ -12,64 +8,14 @@ export const formDefaultValues = {
|
|
|
12
8
|
[SwapFormKey.TokenSearchFilter]: '',
|
|
13
9
|
};
|
|
14
10
|
export const SwapFormProvider = ({ children, }) => {
|
|
15
|
-
const [setChain] = useSetChainOrder();
|
|
16
|
-
const { account } = useWallet();
|
|
17
11
|
const { fromChain, fromToken, fromAmount, toChain, toToken, toAddress } = useWidgetConfig();
|
|
18
12
|
const methods = useForm({
|
|
19
|
-
defaultValues: Object.assign(Object.assign({}, formDefaultValues), { fromChain
|
|
13
|
+
defaultValues: Object.assign(Object.assign({}, formDefaultValues), { fromChain,
|
|
14
|
+
fromToken, fromAmount: (typeof fromAmount === 'number'
|
|
20
15
|
? fromAmount === null || fromAmount === void 0 ? void 0 : fromAmount.toPrecision()
|
|
21
|
-
: fromAmount) || formDefaultValues.fromAmount, toChain
|
|
16
|
+
: fromAmount) || formDefaultValues.fromAmount, toChain,
|
|
17
|
+
toToken,
|
|
22
18
|
toAddress }),
|
|
23
19
|
});
|
|
24
|
-
// Set wallet chain as default if no chains are provided by config and if they were not changed during widget usage
|
|
25
|
-
useEffect(() => {
|
|
26
|
-
if (!account.isActive || !account.chainId) {
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
const [fromChainValue, toChainValue] = methods.getValues([
|
|
30
|
-
SwapFormKey.FromChain,
|
|
31
|
-
SwapFormKey.ToChain,
|
|
32
|
-
]);
|
|
33
|
-
const { isDirty: isFromChainDirty } = methods.getFieldState(SwapFormKey.FromChain, methods.formState);
|
|
34
|
-
const { isDirty: isToChainDirty } = methods.getFieldState(SwapFormKey.ToChain, methods.formState);
|
|
35
|
-
const { isDirty: isFromTokenDirty } = methods.getFieldState(SwapFormKey.FromToken, methods.formState);
|
|
36
|
-
const { isDirty: isToTokenDirty } = methods.getFieldState(SwapFormKey.ToToken, methods.formState);
|
|
37
|
-
// Users can switch chains in the wallet.
|
|
38
|
-
// If we don't have a chain in the ordered chain list we should add it.
|
|
39
|
-
setChain(account.chainId);
|
|
40
|
-
// If we ran out of slots for the ordered chain list and the current chain isn't there
|
|
41
|
-
// we should make a recently switched chain as current.
|
|
42
|
-
const { chainOrder } = useChainOrderStore.getState();
|
|
43
|
-
const hasFromChainInOrderedList = chainOrder.includes(fromChainValue);
|
|
44
|
-
const hasToChainInOrderedList = chainOrder.includes(toChainValue);
|
|
45
|
-
if ((!fromChain && !isFromChainDirty && !isFromTokenDirty) ||
|
|
46
|
-
!hasFromChainInOrderedList) {
|
|
47
|
-
methods.setValue(SwapFormKey.FromChain, account.chainId, {
|
|
48
|
-
shouldDirty: false,
|
|
49
|
-
});
|
|
50
|
-
methods.setValue(SwapFormKey.FromToken, '', {
|
|
51
|
-
shouldDirty: false,
|
|
52
|
-
});
|
|
53
|
-
methods.setValue(SwapFormKey.FromAmount, '', {
|
|
54
|
-
shouldDirty: false,
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
if ((!toChain && !isToChainDirty && !isToTokenDirty) ||
|
|
58
|
-
!hasToChainInOrderedList) {
|
|
59
|
-
methods.setValue(SwapFormKey.ToChain, account.chainId, {
|
|
60
|
-
shouldDirty: false,
|
|
61
|
-
});
|
|
62
|
-
methods.setValue(SwapFormKey.ToToken, '', {
|
|
63
|
-
shouldDirty: false,
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
}, [
|
|
67
|
-
account.chainId,
|
|
68
|
-
account.isActive,
|
|
69
|
-
fromChain,
|
|
70
|
-
methods,
|
|
71
|
-
setChain,
|
|
72
|
-
toChain,
|
|
73
|
-
]);
|
|
74
20
|
return _jsx(FormProvider, Object.assign({}, methods, { children: children }));
|
|
75
21
|
};
|
|
@@ -16,12 +16,12 @@ export declare type SwapFormValues = {
|
|
|
16
16
|
[SwapFormKey.ToToken]: string;
|
|
17
17
|
[SwapFormKey.ToAddress]: string;
|
|
18
18
|
};
|
|
19
|
-
export declare type
|
|
19
|
+
export declare type SwapFormType = 'from' | 'to';
|
|
20
20
|
export declare const SwapFormKeyHelper: {
|
|
21
|
-
getChainKey: (formType:
|
|
22
|
-
getTokenKey: (formType:
|
|
23
|
-
getAmountKey: (formType:
|
|
21
|
+
getChainKey: (formType: SwapFormType) => 'fromChain' | 'toChain';
|
|
22
|
+
getTokenKey: (formType: SwapFormType) => 'fromToken' | 'toToken';
|
|
23
|
+
getAmountKey: (formType: SwapFormType) => 'fromAmount' | 'toAmount';
|
|
24
24
|
};
|
|
25
25
|
export interface SwapFormTypeProps {
|
|
26
|
-
formType:
|
|
26
|
+
formType: SwapFormType;
|
|
27
27
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { useWidgetConfig } from '..';
|
|
2
|
+
import { useTelemetry } from '../../hooks';
|
|
3
|
+
export const TelemetryProvider = ({ children }) => {
|
|
4
|
+
const config = useWidgetConfig();
|
|
5
|
+
useTelemetry(config === null || config === void 0 ? void 0 : config.disableTelemetry);
|
|
6
|
+
return children;
|
|
7
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './TelemetryProvider';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './TelemetryProvider';
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import type { Signer } from 'ethers';
|
|
2
2
|
import type { FC, PropsWithChildren } from 'react';
|
|
3
|
-
import type { WidgetWalletManagement } from '../../types';
|
|
4
3
|
import type { WalletContextProps } from './types';
|
|
5
4
|
export declare const useWallet: () => WalletContextProps;
|
|
6
|
-
export declare const WalletProvider: FC<PropsWithChildren
|
|
7
|
-
walletManagement?: WidgetWalletManagement;
|
|
8
|
-
}>>;
|
|
5
|
+
export declare const WalletProvider: FC<PropsWithChildren>;
|
|
9
6
|
export declare const extractAccountFromSigner: (signer?: Signer) => Promise<{
|
|
10
7
|
address: string | undefined;
|
|
11
8
|
isActive: boolean;
|
|
@@ -10,6 +10,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
11
11
|
import { addChain as walletAddChain, switchChain as walletSwitchChain, switchChainAndAddToken, useLiFiWalletManagement, } from '@lifi/wallet-management';
|
|
12
12
|
import { createContext, useCallback, useContext, useEffect, useMemo, useState, } from 'react';
|
|
13
|
+
import { useFormContext } from 'react-hook-form';
|
|
14
|
+
import { useChainOrderStore } from '../../stores/chains';
|
|
15
|
+
import { SwapFormKey } from '../SwapFormProvider';
|
|
16
|
+
import { isItemAllowed, useWidgetConfig } from '../WidgetProvider';
|
|
13
17
|
const stub = () => {
|
|
14
18
|
throw new Error('You forgot to wrap your component in <WalletProvider>.');
|
|
15
19
|
};
|
|
@@ -23,7 +27,9 @@ const initialContext = {
|
|
|
23
27
|
};
|
|
24
28
|
const WalletContext = createContext(initialContext);
|
|
25
29
|
export const useWallet = () => useContext(WalletContext);
|
|
26
|
-
export const WalletProvider = ({ children
|
|
30
|
+
export const WalletProvider = ({ children }) => {
|
|
31
|
+
const { walletManagement, fromChain, toChain, chains, disabledChains } = useWidgetConfig();
|
|
32
|
+
const methods = useFormContext();
|
|
27
33
|
const { connect: walletManagementConnect, disconnect: walletManagementDisconnect, signer, provider, } = useLiFiWalletManagement();
|
|
28
34
|
const [account, setAccount] = useState({});
|
|
29
35
|
const connect = useCallback((wallet) => __awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -88,6 +94,58 @@ export const WalletProvider = ({ children, walletManagement }) => {
|
|
|
88
94
|
account,
|
|
89
95
|
provider,
|
|
90
96
|
}), [account, addChain, addToken, connect, disconnect, provider, switchChain]);
|
|
97
|
+
// Set wallet chain as default if no chains are provided by config and if they were not changed during widget usage
|
|
98
|
+
useEffect(() => {
|
|
99
|
+
const chainAllowed = account.chainId && isItemAllowed(account.chainId, chains, disabledChains);
|
|
100
|
+
if (!account.isActive || !account.chainId || !chainAllowed) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const [fromChainValue, toChainValue] = methods.getValues([
|
|
104
|
+
SwapFormKey.FromChain,
|
|
105
|
+
SwapFormKey.ToChain,
|
|
106
|
+
]);
|
|
107
|
+
const { isDirty: isFromChainDirty } = methods.getFieldState(SwapFormKey.FromChain, methods.formState);
|
|
108
|
+
const { isDirty: isToChainDirty } = methods.getFieldState(SwapFormKey.ToChain, methods.formState);
|
|
109
|
+
const { isDirty: isFromTokenDirty } = methods.getFieldState(SwapFormKey.FromToken, methods.formState);
|
|
110
|
+
const { isDirty: isToTokenDirty } = methods.getFieldState(SwapFormKey.ToToken, methods.formState);
|
|
111
|
+
const { chainOrder, setChain } = useChainOrderStore.getState();
|
|
112
|
+
// Users can switch chains in the wallet.
|
|
113
|
+
// If we don't have a chain in the ordered chain list we should add it.
|
|
114
|
+
setChain(account.chainId);
|
|
115
|
+
// If we ran out of slots for the ordered chain list and the current chain isn't there
|
|
116
|
+
// we should make a recently switched chain as current.
|
|
117
|
+
const hasFromChainInOrderedList = chainOrder.includes(fromChainValue);
|
|
118
|
+
const hasToChainInOrderedList = chainOrder.includes(toChainValue);
|
|
119
|
+
if ((!fromChain && !isFromChainDirty && !isFromTokenDirty) ||
|
|
120
|
+
!hasFromChainInOrderedList) {
|
|
121
|
+
methods.setValue(SwapFormKey.FromChain, account.chainId, {
|
|
122
|
+
shouldDirty: false,
|
|
123
|
+
});
|
|
124
|
+
methods.setValue(SwapFormKey.FromToken, '', {
|
|
125
|
+
shouldDirty: false,
|
|
126
|
+
});
|
|
127
|
+
methods.setValue(SwapFormKey.FromAmount, '', {
|
|
128
|
+
shouldDirty: false,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
if ((!toChain && !isToChainDirty && !isToTokenDirty) ||
|
|
132
|
+
!hasToChainInOrderedList) {
|
|
133
|
+
methods.setValue(SwapFormKey.ToChain, account.chainId, {
|
|
134
|
+
shouldDirty: false,
|
|
135
|
+
});
|
|
136
|
+
methods.setValue(SwapFormKey.ToToken, '', {
|
|
137
|
+
shouldDirty: false,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}, [
|
|
141
|
+
account.chainId,
|
|
142
|
+
account.isActive,
|
|
143
|
+
chains,
|
|
144
|
+
disabledChains,
|
|
145
|
+
fromChain,
|
|
146
|
+
methods,
|
|
147
|
+
toChain,
|
|
148
|
+
]);
|
|
91
149
|
return (_jsx(WalletContext.Provider, Object.assign({ value: value }, { children: children })));
|
|
92
150
|
};
|
|
93
151
|
export const extractAccountFromSigner = (signer) => __awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -10,20 +10,15 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
10
10
|
return t;
|
|
11
11
|
};
|
|
12
12
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
-
import {
|
|
14
|
-
import { createContext, useContext,
|
|
15
|
-
import { updateLiFiConfig } from '../../config/lifi';
|
|
16
|
-
import { name, version } from '../../config/version';
|
|
17
|
-
const stub = () => {
|
|
18
|
-
throw new Error('You forgot to wrap your component in <WidgetProvider>.');
|
|
19
|
-
};
|
|
13
|
+
import { getChainByKey } from '@lifi/sdk';
|
|
14
|
+
import { createContext, useContext, useMemo } from 'react';
|
|
20
15
|
const initialContext = {
|
|
21
16
|
disabledChains: [],
|
|
22
17
|
};
|
|
23
18
|
const WidgetContext = createContext(initialContext);
|
|
24
19
|
export const useWidgetConfig = () => useContext(WidgetContext);
|
|
25
20
|
export const WidgetProvider = (_a) => {
|
|
26
|
-
var { children } = _a, _b = _a.config, _c = _b === void 0 ? {} : _b, { fromChain, fromToken, toChain, toToken, fromAmount
|
|
21
|
+
var { children } = _a, _b = _a.config, _c = _b === void 0 ? {} : _b, { fromChain, fromToken, toChain, toToken, fromAmount } = _c, config = __rest(_c, ["fromChain", "fromToken", "toChain", "toToken", "fromAmount"]);
|
|
27
22
|
const value = useMemo(() => {
|
|
28
23
|
var _a, _b, _c, _d;
|
|
29
24
|
try {
|
|
@@ -53,11 +48,5 @@ export const WidgetProvider = (_a) => {
|
|
|
53
48
|
return config;
|
|
54
49
|
}
|
|
55
50
|
}, [config, fromAmount, fromChain, fromToken, toChain, toToken]);
|
|
56
|
-
useEffect(() => {
|
|
57
|
-
updateLiFiConfig(Object.assign(Object.assign({}, sdkConfig), { defaultRouteOptions: Object.assign(Object.assign({}, sdkConfig === null || sdkConfig === void 0 ? void 0 : sdkConfig.defaultRouteOptions), { integrator: integrator !== null && integrator !== void 0 ? integrator : window.location.hostname }) }));
|
|
58
|
-
}, [integrator, sdkConfig]);
|
|
59
|
-
useEffect(() => {
|
|
60
|
-
checkPackageUpdates(name, version);
|
|
61
|
-
}, []);
|
|
62
51
|
return (_jsx(WidgetContext.Provider, Object.assign({ value: value }, { children: children })));
|
|
63
52
|
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export const isItemAllowed = (chainId, chains,
|
|
2
|
+
/** @deprecated Remove in the next major release */
|
|
3
|
+
disabledChains) => {
|
|
4
|
+
var _a, _b;
|
|
5
|
+
if ((_a = chains === null || chains === void 0 ? void 0 : chains.allow) === null || _a === void 0 ? void 0 : _a.length) {
|
|
6
|
+
return chains.allow.includes(chainId);
|
|
7
|
+
}
|
|
8
|
+
return !((disabledChains === null || disabledChains === void 0 ? void 0 : disabledChains.includes(chainId)) || ((_b = chains === null || chains === void 0 ? void 0 : chains.deny) === null || _b === void 0 ? void 0 : _b.includes(chainId)));
|
|
9
|
+
};
|
package/providers/index.d.ts
CHANGED
package/providers/index.js
CHANGED
package/stores/chains/index.d.ts
CHANGED
package/stores/chains/index.js
CHANGED
package/stores/chains/types.d.ts
CHANGED
|
@@ -3,22 +3,25 @@ import create from 'zustand';
|
|
|
3
3
|
import { persist } from 'zustand/middleware';
|
|
4
4
|
import { immer } from 'zustand/middleware/immer';
|
|
5
5
|
export const maxChainToOrder = 9;
|
|
6
|
-
export const useChainOrderStore = create()(persist(immer((set) => ({
|
|
6
|
+
export const useChainOrderStore = create()(persist(immer((set, get) => ({
|
|
7
7
|
chainOrder: [],
|
|
8
8
|
availableChains: [],
|
|
9
|
-
initializeChains: (chainIds) =>
|
|
10
|
-
state
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
9
|
+
initializeChains: (chainIds) => {
|
|
10
|
+
set((state) => {
|
|
11
|
+
state.availableChains = chainIds;
|
|
12
|
+
state.chainOrder = state.chainOrder.filter((chainId) => chainIds.includes(chainId));
|
|
13
|
+
const chainsToAdd = chainIds.filter((chainId) => !state.chainOrder.includes(chainId));
|
|
14
|
+
if (state.chainOrder.length === maxChainToOrder ||
|
|
15
|
+
!chainsToAdd.length) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const chainsToAddLength = maxChainToOrder - state.chainOrder.length;
|
|
19
|
+
for (let index = 0; index < chainsToAddLength; index++) {
|
|
20
|
+
state.chainOrder.push(chainsToAdd[index]);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
return get().chainOrder;
|
|
24
|
+
},
|
|
22
25
|
setChain: (chainId) => set((state) => {
|
|
23
26
|
if (state.chainOrder.includes(chainId) ||
|
|
24
27
|
!state.availableChains.includes(chainId)) {
|
package/stores/route/utils.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { Route } from '@lifi/sdk';
|
|
1
|
+
import type { Process, Route } from '@lifi/sdk';
|
|
2
2
|
export declare const isRouteCompleted: (route: Route) => boolean;
|
|
3
3
|
export declare const isRouteFailed: (route: Route) => boolean;
|
|
4
4
|
export declare const isRouteActive: (route?: Route) => boolean;
|
|
5
|
+
export declare const getUpdatedProcess: (currentRoute: Route, updatedRoute: Route) => Process | undefined;
|
package/stores/route/utils.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import microdiff from 'microdiff';
|
|
1
2
|
export const isRouteCompleted = (route) => {
|
|
2
3
|
return route.steps.every((step) => { var _a; return ((_a = step.execution) === null || _a === void 0 ? void 0 : _a.status) === 'DONE'; });
|
|
3
4
|
};
|
|
@@ -13,3 +14,14 @@ export const isRouteActive = (route) => {
|
|
|
13
14
|
const alreadyStarted = route.steps.some((step) => step.execution);
|
|
14
15
|
return !isDone && !isFailed && alreadyStarted;
|
|
15
16
|
};
|
|
17
|
+
export const getUpdatedProcess = (currentRoute, updatedRoute) => {
|
|
18
|
+
const processDiff = microdiff(currentRoute, updatedRoute).find((diff) => diff.path.includes('process'));
|
|
19
|
+
if (!processDiff) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
// e.g. ['steps', 0, 'execution', 'process', 0]
|
|
23
|
+
const process = processDiff.path
|
|
24
|
+
.slice(0, processDiff.path.findIndex((path) => path === 'process') + 2)
|
|
25
|
+
.reduce((obj, path) => obj[path], updatedRoute);
|
|
26
|
+
return process;
|
|
27
|
+
};
|
package/stores/settings/index.js
CHANGED
|
@@ -2,6 +2,8 @@ import shallow from 'zustand/shallow';
|
|
|
2
2
|
import { useSettingsStore } from './useSettingsStore';
|
|
3
3
|
export const useAppearance = () => {
|
|
4
4
|
const [appearance, setValue] = useSettingsStore((state) => [state.appearance, state.setValue], shallow);
|
|
5
|
-
const setAppearance = (appearance) =>
|
|
5
|
+
const setAppearance = (appearance) => {
|
|
6
|
+
setValue('appearance', appearance);
|
|
7
|
+
};
|
|
6
8
|
return [appearance, setAppearance];
|
|
7
9
|
};
|