import React from "react";
import { Handler } from "@gelatonetwork/limit-orders-lib";
export * from "@gelatonetwork/limit-orders-lib";
import { CurrencyAmount } from "@uniswap/sdk-core";
import { gelatoReducers, GELATO_PERSISTED_KEYS } from "./state";
import ApplicationUpdater from "./state/gapplication/updater";
import ListsUpdater from "./state/glists/updater";
import MulticallUpdater from "./state/gmulticall/updater";
import TransactionUpdater from "./state/gtransactions/updater";
import { clearAllTransactions } from "./state/gtransactions/actions";
import { tryParseAmount } from "./state/gorder/hooks";
import {
useGelatoLimitOrders,
useGelatoLimitOrdersHandlers,
} from "./hooks/gelato";
import useGelatoLimitOrdersHistory from "./hooks/gelato/useGelatoLimitOrdersHistory";
import useGelatoLimitOrdersLib from "./hooks/gelato/useGelatoLimitOrdersLib";
import GelatoLimitOrderPanel from "./components/GelatoLimitOrder";
import GelatoLimitOrdersHistoryPanel from "./components/LimitOrdersHistory";
import { Web3Provider } from "./web3";
import useGasPrice from "./hooks/useGasPrice";
import useGasOverhead from "./hooks/useGasOverhead";
import { useUSDCValue } from "./hooks/useUSDCPrice";
import { useCurrency } from "./hooks/Tokens";
import { useCurrencyBalances } from "./hooks/Balances";
import { useTradeExactOut, useTradeExactIn } from "./hooks/useTrade";
import ThemeProvider, { ThemedGlobalStyle } from "./theme";
import {
ApprovalState,
useApproveCallbackFromInputCurrencyAmount,
} from "./hooks/useApproveCallback";
import { useTransactionAdder } from "./state/gtransactions/hooks";
import { clearOrdersLocalStorage } from "./utils/localStorageOrders";
import TradePrice from "./components/order/TradePrice";
import { buildBasesToCheckTradesAgainst } from "./utils";
export function GelatoProvider({
chainId,
library,
children,
account,
handler,
bases,
toggleWalletModal,
useDefaultTheme = true,
useDarkMode = true,
tokenListURLs = [],
}: {
chainId: number | undefined;
library: any | undefined;
account: string | undefined;
handler?: Handler;
bases?: {
chainId: number;
address: string;
decimals: number;
name: string;
symbol: string;
}[];
toggleWalletModal?: () => void;
useDefaultTheme?: boolean;
useDarkMode?: boolean;
children?: React.ReactNode;
tokenListURLs?: string[];
}) {
const basesToCheckTradesAgainst =
bases && bases.length > 0
? buildBasesToCheckTradesAgainst(bases)
: undefined;
if (basesToCheckTradesAgainst) {
for (const base of basesToCheckTradesAgainst) {
if (base.chainId !== chainId) {
throw new Error(
`Invalid base chainId for token ${base.name}/${base.symbol}: ${base.address}. Required chainId: ${chainId}`
);
}
}
}
return useDefaultTheme ? (
{children}
) : (
{children}
);
}
export {
useGelatoLimitOrders,
useGelatoLimitOrdersHandlers,
useGelatoLimitOrdersHistory,
useGelatoLimitOrdersLib,
useGasPrice,
useGasOverhead,
CurrencyAmount,
TradePrice,
GelatoLimitOrderPanel,
GelatoLimitOrdersHistoryPanel,
gelatoReducers,
GELATO_PERSISTED_KEYS,
clearAllTransactions,
useUSDCValue,
useCurrency,
useCurrencyBalances,
useTradeExactOut,
useTradeExactIn,
tryParseAmount,
ApprovalState,
useApproveCallbackFromInputCurrencyAmount,
useTransactionAdder,
clearOrdersLocalStorage,
};