@orderly.network/react-app
Version:
Create React App with Orderly Network components
1 lines • 50.4 kB
Source Map (JSON)
{"version":3,"sources":["../src/provider/orderlyAppProvider.tsx","../src/hooks/useBootstrap.ts","../src/provider/appContext.tsx","../src/hooks/useWalletStateHandle.ts","../src/hooks/useLinkDevice.ts","../src/hooks/useWalletEvent.ts","../src/hooks/useSettleEvent.ts","../src/hooks/useWalletConnectError.ts","../src/hooks/useCurrentChainId.ts","../src/provider/configContext.tsx","../src/hooks/useExecutionReport.tsx","../src/hooks/getOrderExecutionReportMsg.ts","../src/hooks/useUILocale.ts","../src/hooks/useDataTap.ts","../src/common/useOrderEntryFormErrorMsg.ts"],"names":["UILocaleProvider","ModalProvider","OrderlyThemeProvider","Toaster","TooltipProvider","useEffect","useBootstrap","refCode","OrderlyConfigProvider","useTrack","createContext","useContext","useState","useMemo","useRef","useConfig","useEventEmitter","useAccount","useChains","useKeyStore","useWalletConnector","parseChainIdToNumber","praseChainIdToNumber","windowGuard","AccountStatusEnum","SDKError","ChainNamespace","EnumTrackerKeys","parseJSON","useLocalStorage","useScreen","WALLET_KEY","useLinkDevice","connectedChain","disconnect","_","setLinkDeviceStorage","account","isMobile","configStore","onDisconnect","label","linkData","getLinkDeviceData","walletInfo","linkDevice","address","secretKey","chainId","chainNamespace","url","decodedUrl","autoLinkDevice","getLinkDeviceStorage","orderlyKey","accountId","linkDeviceStorage","link","decodeBase64","base64","data","currentTime","expiredTime","useWalletStateHandle","options","connectedWallet","connect","namespace","ee","isManualConnect","brokerId","accountState","keyStore","networkId","chains","checkChainSupport","unsupported","setUnsupported","track","setTrackUserId","currentWalletAddress","currentChain","id","isSupported","localAddress","res","error","walletState","wallet","status","toast","capitalizeString","useSessionStorage","useWalletSubscription","useTranslation","useWalletEvent","t","recordRef","record","setRecord","side","transStatus","showToast","isPushOnce","msg","useSettleSubscription","useSettleEvent","modal","useStorageLedgerAddress","useWalletConnectError","setLedgerAddress","useRestrictedInfo","useTrackingInstance","useStorageChain","useCurrentChainId","defaultChain","storageChain","setStorageChain","currentChainId","setCurrentChainId","fallbackChain","firstChain","jsx","AppContext","useAppContext","AppStateProvider","props","showAnnouncement","setShowAnnouncement","connectWallet","wrongNetwork","restrictedInfo","disabledConnect","AppConfigContext","useAppConfig","AppConfigProvider","transSymbolformString","OrderStatus","AlgoOrderRootType","parseNumber","i18n","getDisplaySide","getOrderExecutionReportMsg","symbolsInfo","symbol","quantity","total_executed_quantity","getSymbolInfo","base_dp","displaySide","displaySymbol","displayQuantity","title","displayTotalExecutedQuantity","useSymbolsInfo","useDebouncedCallback","jsxs","useExecutionReport","symbolsInfoRef","handler","useLocaleCode","LocaleEnum","enUS","zhCN","useUILocale","localeCode","calendarLocale","OrderlyAppProvider","components","appIcons","onChainChanged","configProps","uiLocale","useDataTap","state","useOrderEntryFormErrorMsg","errors","getMessage","key","value","type"],"mappings":"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","sourcesContent":["import { PropsWithChildren } from \"react\";\nimport { OrderlyAppConfig } from \"../types\";\nimport {\n LocaleProvider as UILocaleProvider,\n ModalProvider,\n OrderlyThemeProvider,\n Toaster,\n TooltipProvider,\n} from \"@orderly.network/ui\";\nimport { useBootstrap } from \"../hooks/useBootstrap\";\nimport {\n ConfigProviderProps,\n OrderlyConfigProvider,\n useTrack,\n} from \"@orderly.network/hooks\";\nimport { AppStateProvider, AppStateProviderProps } from \"./appContext\";\nimport { AppConfigProvider } from \"./configContext\";\nimport { useExecutionReport } from \"../hooks/useExecutionReport\";\nimport { useUILocale } from \"../hooks/useUILocale\";\nimport { OrderlyThemeProviderProps } from \"@orderly.network/ui\";\n\nexport type OrderlyAppProviderProps = PropsWithChildren<\n OrderlyAppConfig & AppStateProviderProps & OrderlyThemeProviderProps\n>;\n\nconst OrderlyAppProvider = (props: OrderlyAppProviderProps) => {\n const {\n // dateFormatting,\n components,\n appIcons,\n onChainChanged,\n defaultChain,\n ...configProps\n } = props;\n\n useTrack();\n useBootstrap();\n useExecutionReport();\n const uiLocale = useUILocale();\n\n return (\n <AppConfigProvider appIcons={appIcons} brokerName={props.brokerName!}>\n <OrderlyThemeProvider\n // dateFormatting={dateFormatting}\n components={components}\n overrides={props.overrides}\n >\n <OrderlyConfigProvider {...(configProps as ConfigProviderProps)}>\n <AppStateProvider\n onChainChanged={onChainChanged}\n defaultChain={defaultChain}\n restrictedInfo={props.restrictedInfo}\n >\n <UILocaleProvider locale={uiLocale}>\n <TooltipProvider delayDuration={300}>\n <ModalProvider>{props.children}</ModalProvider>\n </TooltipProvider>\n </UILocaleProvider>\n </AppStateProvider>\n <Toaster />\n </OrderlyConfigProvider>\n </OrderlyThemeProvider>\n </AppConfigProvider>\n );\n};\n\nOrderlyAppProvider.displayName = \"OrderlyAppProvider\";\n\nexport { OrderlyAppProvider };\n","import { useEffect } from \"react\";\nimport { useAccount, useWalletConnector } from \"@orderly.network/hooks\";\n\nexport const useBootstrap = () => {\n useEffect(() => {\n const searchParams = new URLSearchParams(window.location.search);\n const refCode = searchParams.get(\"ref\");\n if (refCode) {\n localStorage.setItem(\"referral_code\", refCode);\n }\n }, []);\n};\n","import {\n FC,\n createContext,\n PropsWithChildren,\n useContext,\n useState,\n} from \"react\";\nimport { useWalletStateHandle } from \"../hooks/useWalletStateHandle\";\nimport { useWalletEvent } from \"../hooks/useWalletEvent\";\nimport { useSettleEvent } from \"../hooks/useSettleEvent\";\nimport { useWalletConnectError } from \"../hooks/useWalletConnectError\";\nimport {\n RestrictedInfoOptions,\n useRestrictedInfo,\n RestrictedInfoReturns,\n useTrackingInstance,\n} from \"@orderly.network/hooks\";\nimport { useLinkDevice } from \"../hooks/useLinkDevice\";\nimport { DefaultChain, useCurrentChainId } from \"../hooks/useCurrentChainId\";\n\ntype AppContextState = {\n connectWallet: ReturnType<typeof useWalletStateHandle>[\"connectWallet\"];\n /**\n * Whether the current network is not supported\n */\n wrongNetwork: boolean;\n disabledConnect: boolean;\n currentChainId: number | undefined;\n setCurrentChainId: (chainId: number | undefined) => void;\n onChainChanged?: (\n chainId: number,\n state: { isTestnet: boolean; isWalletConnected: boolean }\n ) => void;\n // networkStatus: ReturnType<typeof useAppState>[\"networkStatus\"];\n restrictedInfo: RestrictedInfoReturns;\n showAnnouncement: boolean;\n setShowAnnouncement: (show: boolean) => void;\n};\n\nconst AppContext = createContext<AppContextState>({} as AppContextState);\n\nexport const useAppContext = () => {\n return useContext(AppContext);\n};\n\nexport type AppStateProviderProps = {\n defaultChain?: DefaultChain;\n restrictedInfo?: RestrictedInfoOptions;\n} & Pick<AppContextState, \"onChainChanged\">;\n\nexport const AppStateProvider: FC<PropsWithChildren<AppStateProviderProps>> = (\n props\n) => {\n const [showAnnouncement, setShowAnnouncement] = useState(false);\n const [currentChainId, setCurrentChainId] = useCurrentChainId(\n props.defaultChain\n );\n useLinkDevice();\n useTrackingInstance();\n\n const { connectWallet, wrongNetwork } = useWalletStateHandle({\n // onChainChanged: props.onChainChanged,\n currentChainId,\n });\n\n useWalletEvent();\n useSettleEvent();\n useWalletConnectError();\n\n const restrictedInfo = useRestrictedInfo(props.restrictedInfo);\n\n const disabledConnect = restrictedInfo.restrictedOpen;\n\n return (\n <AppContext.Provider\n value={{\n connectWallet,\n wrongNetwork,\n currentChainId,\n setCurrentChainId,\n onChainChanged: props.onChainChanged,\n disabledConnect,\n restrictedInfo,\n showAnnouncement,\n setShowAnnouncement,\n }}\n >\n {props.children}\n </AppContext.Provider>\n );\n};\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useConfig, useEventEmitter, useTrack, WalletState } from \"@orderly.network/hooks\";\nimport {\n useAccount,\n useChains,\n useKeyStore,\n useWalletConnector,\n} from \"@orderly.network/hooks\";\nimport {\n parseChainIdToNumber,\n praseChainIdToNumber,\n windowGuard,\n} from \"@orderly.network/utils\";\nimport {\n AccountStatusEnum,\n SDKError,\n ChainNamespace,\n NetworkId,\n EnumTrackerKeys,\n} from \"@orderly.network/types\";\nimport { getLinkDeviceData } from \"./useLinkDevice\";\n\nconst WALLET_KEY = \"orderly:wallet-info\";\nconst CHAIN_NAMESPACE = \"orderly:chain-namespace\";\n\nexport const useWalletStateHandle = (options: {\n // onChainChanged?: (chainId: number, isTestnet: boolean) => void;\n currentChainId?: number;\n}) => {\n const {\n wallet: connectedWallet,\n connect,\n connectedChain,\n disconnect,\n namespace,\n } = useWalletConnector();\n //\n // console.log(\"🔗 wallet state handle\", {\n // connectedWallet,\n // connectedChain,\n // namespace,\n // });\n\n if (typeof connect !== \"function\") {\n throw new SDKError(\"Please provide a wallet connector provider\");\n }\n\n const ee = useEventEmitter();\n const isManualConnect = useRef<boolean>(false);\n const brokerId = useConfig(\"brokerId\");\n const { account, state: accountState } = useAccount();\n const keyStore = useKeyStore();\n const networkId = useConfig(\"networkId\") as NetworkId;\n const [chains, { checkChainSupport }] = useChains();\n\n\n const [unsupported, setUnsupported] = useState(false);\n const { track, setTrackUserId } = useTrack();\n\n // current connected wallet address\n const currentWalletAddress = useMemo<string | undefined>(() => {\n return connectedWallet?.accounts?.[0]?.address;\n }, [connectedWallet]);\n\n // current connected chain id\n const currentChain = useMemo<\n { id: number; namespace: string } | undefined\n >(() => {\n const id = connectedWallet?.chains?.[0]?.id;\n const namespace = connectedWallet?.chains?.[0]?.namespace as string;\n if (typeof id === \"undefined\") return undefined;\n return {\n id: parseChainIdToNumber(id),\n namespace,\n };\n }, [connectedWallet]);\n\n useEffect(() => {\n if (accountState.status >= AccountStatusEnum.EnableTrading && account.accountId) {\n setTrackUserId( account.accountId!);\n }\n }, [account, accountState]);\n\n useEffect(() => {\n if (!connectedChain) {\n setUnsupported(false);\n return;\n }\n\n let isSupported = checkChainSupport(\n connectedChain.id,\n networkId\n // networkId === \"testnet\" ? chains.testnet : chains.mainnet\n );\n\n setUnsupported(!isSupported);\n }, [connectedChain, chains, checkChainSupport, networkId]);\n\n useEffect(() => {\n // if (unsupported) return;\n\n windowGuard(() => {\n const localAddress = keyStore.getAddress();\n const walletInfo = JSON.parse(localStorage.getItem(WALLET_KEY) ?? \"{}\");\n\n /**\n * if locale address is exist, restore account state\n */\n if (connectedChain?.namespace === ChainNamespace.solana) {\n return;\n }\n if (\n localAddress &&\n account.address !== localAddress &&\n walletInfo.label\n ) {\n connect({\n autoSelect: {\n label: walletInfo.label,\n disableModals: true,\n },\n }).then(\n (res) => {\n console.log(\"silent connect wallet successes\", res);\n },\n (error) => console.log(\"connect error\", error)\n );\n }\n });\n }, [connectedWallet, account.address]);\n\n /**\n * handle wallet connection\n */\n useEffect(() => {\n if (\n connectedWallet === null &&\n accountState.status > AccountStatusEnum.NotConnected &&\n !accountState.validating\n ) {\n account.disconnect();\n return;\n }\n\n if (unsupported || !connectedChain) return;\n if (isManualConnect.current) return;\n\n const linkData = getLinkDeviceData();\n\n // updateAccount(currentWalletAddress!, connectedWallet!, currentChainId!);\n /**\n * switch account\n */\n if (\n !!currentWalletAddress &&\n currentWalletAddress !== account.address &&\n !linkData\n ) {\n account.setAddress(currentWalletAddress, {\n provider: connectedWallet?.provider,\n chain: {\n id: praseChainIdToNumber(currentChain!.id),\n namespace: currentChain!.namespace.toUpperCase() as ChainNamespace,\n },\n wallet: {\n name: connectedWallet?.label ?? \"\",\n },\n });\n track(EnumTrackerKeys.walletConnect, {\n wallet: connectedWallet?.label ?? \"\",\n network: currentChain!.namespace.toUpperCase() as ChainNamespace,\n });\n\n // save wallet connector info to local storage\n windowGuard(() => {\n localStorage.setItem(\n WALLET_KEY,\n JSON.stringify({\n label: connectedWallet?.label ?? \"\",\n })\n );\n });\n }\n\n /**\n * switch chainId\n */\n if (currentChain?.id !== account.chainId) {\n account.switchChainId(currentChain?.id!);\n\n // emit chain changed event\n // options.onChainChanged?.(currentChainId!, isTestnet(networkId));\n }\n }, [\n connectedWallet,\n connectedChain,\n currentWalletAddress,\n currentChain,\n account.address,\n accountState,\n account.chainId,\n unsupported,\n ]);\n\n /**\n * User manually connects to wallet\n */\n const connectWallet = async (): Promise<{\n wallet?: WalletState;\n status?: AccountStatusEnum;\n wrongNetwork?: boolean;\n } | null> => {\n isManualConnect.current = true;\n // const walletState = await connect();\n\n return connect({ chainId: options.currentChainId })\n .then(async (walletState) => {\n if (\n Array.isArray(walletState) &&\n walletState.length > 0 &&\n walletState[0] &&\n walletState[0].accounts.length > 0\n ) {\n const wallet = walletState[0];\n const chainId = praseChainIdToNumber(wallet.chains[0].id);\n\n if (!checkChainSupport(chainId, networkId)) {\n return {\n wrongNetwork: true,\n };\n }\n\n //\n if (!account) {\n throw new Error(\"account is not initialized\");\n }\n console.log(\"-- aaaaa wallet\", wallet);\n // clear link device data when connect wallt\n if (\n accountState.status ===\n AccountStatusEnum.EnableTradingWithoutConnected\n ) {\n localStorage.removeItem(\"orderly_link_device\");\n await account.disconnect();\n }\n\n const status = await account.setAddress(wallet.accounts[0].address, {\n provider: wallet.provider,\n chain: {\n id: praseChainIdToNumber(wallet.chains[0].id),\n namespace:\n wallet.chains[0].namespace.toUpperCase() as ChainNamespace,\n },\n wallet: {\n name: wallet.label,\n },\n // label: ,\n });\n track(EnumTrackerKeys.walletConnect, {\n wallet: wallet.label,\n network: wallet.chains[0].namespace.toUpperCase() as ChainNamespace,\n });\n console.log(\"-- xxxxxx status\", status);\n\n return { wallet, status, wrongNetwork: false };\n }\n\n return null;\n })\n .finally(() => {\n isManualConnect.current = false;\n });\n };\n\n return {\n connectWallet,\n wrongNetwork: unsupported,\n };\n};\n","import { useCallback, useEffect } from \"react\";\nimport {\n parseJSON,\n useAccount,\n useConfig,\n useLocalStorage,\n useWalletConnector,\n} from \"@orderly.network/hooks\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { ChainNamespace } from \"@orderly.network/types\";\n\ntype DecodedData = {\n /** secret key */\n k: string;\n /* timestamp */\n t: number;\n /** address */\n a: string;\n /** chain id */\n i: number;\n /** chain namespace */\n n: ChainNamespace;\n};\n\ntype LinkDeviceStorage = { chainId: number; chainNamespace: ChainNamespace };\n\nconst WALLET_KEY = \"orderly:wallet-info\";\n\nexport function useLinkDevice() {\n const { connectedChain, disconnect } = useWalletConnector();\n const [_, setLinkDeviceStorage] = useLocalStorage(\n \"orderly_link_device\",\n {} as LinkDeviceStorage\n );\n\n const { account } = useAccount();\n const { isMobile } = useScreen();\n const configStore = useConfig();\n\n const onDisconnect = async (label: string) => {\n // The cache must be cleared first, otherwise it will be auto connect wallet\n localStorage.removeItem(WALLET_KEY);\n await account.disconnect();\n await disconnect({ label });\n };\n\n useEffect(() => {\n const linkData = getLinkDeviceData();\n const walletInfo = JSON.parse(localStorage.getItem(WALLET_KEY) ?? \"{}\");\n if (linkData && walletInfo) {\n // clear connect data when link device\n onDisconnect(walletInfo.label);\n }\n }, []);\n\n const linkDevice = async () => {\n const linkData = getLinkDeviceData();\n if (!linkData) return;\n\n const { address, secretKey, chainId, chainNamespace } = linkData;\n const isSuccess = await account.importOrderlyKey({\n address,\n secretKey,\n chainNamespace,\n });\n if (!isSuccess) return;\n setLinkDeviceStorage({\n chainId,\n chainNamespace,\n });\n\n const url = new URL(window.location.href);\n url.searchParams.delete(\"link\");\n const decodedUrl = decodeURIComponent(url.toString());\n history.replaceState(null, \"\", decodedUrl);\n };\n\n useEffect(() => {\n if (isMobile && !connectedChain) {\n linkDevice();\n }\n }, [account, connectedChain, isMobile]);\n\n const autoLinkDevice = async () => {\n // this can't use the value returned by useLocalStorage here, because it will trigger extra state change\n const { chainId, chainNamespace } = getLinkDeviceStorage() || {};\n if (isMobile && !connectedChain && chainId && chainNamespace) {\n const address = account.keyStore.getAddress();\n const orderlyKey = account.keyStore.getOrderlyKey();\n const accountId = account.keyStore.getAccountId(address!);\n const res = await account.checkOrderlyKey(\n address!,\n orderlyKey!,\n accountId!\n );\n if (res) {\n configStore.set(\"chainNamespace\", chainNamespace);\n }\n }\n };\n\n // persist status when refresh page\n useEffect(() => {\n autoLinkDevice();\n }, [account, isMobile, connectedChain]);\n\n return { linkDevice };\n}\n\nfunction getLinkDeviceStorage() {\n try {\n const linkDeviceStorage = localStorage.getItem(\"orderly_link_device\");\n const json = linkDeviceStorage ? parseJSON(linkDeviceStorage) : null;\n return json as LinkDeviceStorage;\n } catch (err) {\n console.error(\"getLinkDeviceStorage\", err);\n }\n}\n\nexport function getLinkDeviceData() {\n const url = new URL(window.location.href);\n const link = url.searchParams.get(\"link\");\n\n if (!link) return;\n\n const {\n a: address,\n k: secretKey,\n i: chainId,\n n: chainNamespace,\n } = decodeBase64(link) || {};\n\n if (address && secretKey && chainId && chainNamespace) {\n return {\n address,\n secretKey,\n chainId,\n chainNamespace,\n };\n }\n}\n\nfunction decodeBase64(base64: string) {\n try {\n const data = JSON.parse(window.atob(base64)) as DecodedData;\n console.log(\"decodeBase64\", data);\n const currentTime = Math.floor(Date.now() / 1000);\n const expiredTime = data.t;\n\n if (!expiredTime || currentTime > expiredTime) {\n console.error(\"Orderly key has expired.\");\n return;\n }\n\n return data;\n } catch (error) {\n console.error(\"Invalid or expired orderly key.\");\n }\n}\n","import { useRef } from \"react\";\nimport { toast } from \"@orderly.network/ui\";\nimport { capitalizeString } from \"@orderly.network/utils\";\nimport {\n useEventEmitter,\n useSessionStorage,\n useWalletSubscription,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport function useWalletEvent() {\n const { t } = useTranslation();\n const ee = useEventEmitter();\n\n const recordRef = useRef<Record<number, boolean>>({});\n\n const [record, setRecord] = useSessionStorage(\n \"orderly_wallet_change_id\",\n {} as Record<number, boolean>\n );\n\n recordRef.current = record;\n\n useWalletSubscription({\n onMessage: (data: any) => {\n console.log(\"wallet:changed\", data);\n const { id, side, transStatus } = data;\n let showToast = true;\n\n // DEPOSIT and WITHDRAW will push twice COMPLETED and FAILED event\n if (\n [\"DEPOSIT\", \"WITHDRAW\"].includes(side) &&\n [\"COMPLETED\", \"FAILED\"].includes(transStatus)\n ) {\n const isPushOnce = recordRef.current[id];\n setRecord({\n ...record,\n [id]: isPushOnce ? undefined : true,\n });\n\n showToast = !isPushOnce;\n }\n\n if (transStatus === \"COMPLETED\" && showToast) {\n let msg = `${capitalizeString(side)} completed`;\n\n if (side === \"DEPOSIT\") {\n msg = t(\"transfer.deposit.completed\");\n } else if (side === \"WITHDRAW\") {\n msg = t(\"transfer.withdraw.completed\");\n }\n\n toast.success(msg);\n } else if (transStatus === \"FAILED\" && showToast) {\n let msg = `${capitalizeString(side)} failed`;\n\n if (side === \"DEPOSIT\") {\n msg = t(\"transfer.deposit.failed\");\n } else if (side === \"WITHDRAW\") {\n msg = t(\"transfer.withdraw.failed\");\n }\n toast.error(msg);\n }\n\n ee.emit(\"wallet:changed\", data);\n },\n });\n}\n","import { useSettleSubscription } from \"@orderly.network/hooks\";\nimport { toast } from \"@orderly.network/ui\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport function useSettleEvent() {\n const { t } = useTranslation();\n\n useSettleSubscription({\n onMessage: (data: any) => {\n const { status } = data;\n\n // console.log(\"settle ws: \", data);\n\n switch (status) {\n case \"COMPLETED\":\n toast.success(t(\"settle.settlement.completed\"));\n break;\n case \"FAILED\":\n toast.error(t(\"settle.settlement.failed\"));\n break;\n default:\n break;\n }\n },\n });\n}\n","import { useEventEmitter } from \"@orderly.network/hooks\";\nimport { useEffect } from \"react\";\nimport { modal, toast } from \"@orderly.network/ui\";\nimport { LedgerWalletKey } from \"@orderly.network/types\";\nimport { useStorageLedgerAddress } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport function useWalletConnectError() {\n const { t } = useTranslation();\n const ee = useEventEmitter();\n const { setLedgerAddress } = useStorageLedgerAddress();\n\n useEffect(() => {\n ee.on(\"wallet:connect-error\", (data) => {\n toast.error(data.message);\n });\n ee.on(\n \"wallet:sign-message-with-ledger-error\",\n (data: { userAddress: string; message: string }) => {\n window.setTimeout(() => {\n modal\n .confirm({\n title: t(\"connector.ledger.signMessageFailed\"),\n content: t(\"connector.ledger.signMessageFailed.description\"),\n size: \"sm\",\n onOk: async () => {\n console.log(\"-- use ledger\", true);\n setLedgerAddress(data.userAddress);\n\n return Promise.resolve();\n },\n okLabel: t(\"common.ok\"),\n onCancel: async () => {\n toast.error(data.message);\n return Promise.resolve();\n },\n cancelLabel: t(\"common.no\"),\n })\n .then((res) => {\n console.log(\"-- dialog res\", res);\n });\n });\n }\n );\n }, [ee, t]);\n\n return {};\n}\n","import { useEffect, useState } from \"react\";\nimport {\n Chains,\n useChains,\n useConfig,\n useStorageChain,\n useWalletConnector,\n} from \"@orderly.network/hooks\";\nimport { Chain, NetworkId } from \"@orderly.network/types\";\ntype ReturnChain = Pick<Chain, \"id\"> & Partial<Omit<Chain, \"id\">>;\n\nexport type DefaultChain =\n | {\n mainnet?: ReturnChain;\n testnet?: ReturnChain;\n }\n | ((networkId: NetworkId, chains: Chains) => ReturnChain)\n | undefined;\n\nexport function useCurrentChainId(defaultChain?: DefaultChain) {\n const { storageChain, setStorageChain } = useStorageChain();\n const [currentChainId, setCurrentChainId] = useState<number | undefined>();\n\n const [chains] = useChains();\n const networkId = useConfig(\"networkId\") as NetworkId;\n\n const { connectedChain } = useWalletConnector();\n\n useEffect(() => {\n if (connectedChain) {\n setCurrentChainId?.(\n typeof connectedChain.id === \"number\"\n ? connectedChain.id\n : parseInt(connectedChain.id)\n );\n } else {\n if (!!currentChainId) return;\n let fallbackChain: Partial<Chain> | undefined;\n\n const firstChain =\n networkId === \"mainnet\" ? chains.mainnet?.[0] : chains.testnet?.[0];\n\n if (typeof defaultChain === \"function\") {\n fallbackChain = defaultChain(networkId, chains);\n } else if (typeof defaultChain === \"object\") {\n fallbackChain =\n networkId === \"mainnet\"\n ? defaultChain?.mainnet\n : defaultChain?.testnet;\n }\n\n const chainId = fallbackChain?.id || firstChain?.network_infos?.chain_id;\n if (!chainId) return;\n\n if (storageChain) {\n setCurrentChainId?.(storageChain.chainId);\n } else {\n setStorageChain(chainId);\n setCurrentChainId?.(chainId);\n \n }\n }\n }, [\n connectedChain,\n chains,\n currentChainId,\n networkId,\n setCurrentChainId,\n defaultChain,\n ]);\n\n return [currentChainId, setCurrentChainId] as const;\n}\n","import { createContext, PropsWithChildren, useContext } from \"react\";\nimport { AppLogos } from \"../types\";\n\nexport type ThemeContextState = {\n appIcons?: AppLogos;\n brokerName: string;\n};\n\nconst AppConfigContext = createContext<ThemeContextState>(\n {} as ThemeContextState\n);\n\nexport const useAppConfig = () => {\n return useContext(AppConfigContext);\n};\n\nexport const AppConfigProvider = (\n props: PropsWithChildren<{\n appIcons?: AppLogos;\n brokerName: string;\n }>\n) => {\n return (\n <AppConfigContext.Provider value={props}>\n {props.children}\n </AppConfigContext.Provider>\n );\n};\n","import { useEffect, useRef } from \"react\";\nimport { getOrderExecutionReportMsg } from \"./getOrderExecutionReportMsg\";\nimport {\n useSymbolsInfo,\n useEventEmitter,\n useDebouncedCallback,\n} from \"@orderly.network/hooks\";\nimport { toast } from \"@orderly.network/ui\";\n\nexport function useExecutionReport() {\n const ee = useEventEmitter();\n\n const symbolsInfo = useSymbolsInfo();\n const symbolsInfoRef = useRef({});\n\n useEffect(() => {\n symbolsInfoRef.current = symbolsInfo;\n }, [symbolsInfo]);\n\n const handler = useDebouncedCallback((data: any) => {\n const showToast = (data: any) => {\n const { title, msg } = getOrderExecutionReportMsg(\n data,\n symbolsInfoRef.current\n );\n\n if (title && msg) {\n toast.success(\n <div>\n {title}\n <br />\n <div className=\"orderly-text-white/[0.54] orderly-text-xs\">\n {msg}\n </div>\n </div>\n );\n }\n };\n\n showToast(data);\n }, 100);\n\n useEffect(() => {\n ee.on(\"orders:changed\", handler);\n\n return () => {\n ee.off(\"orders:changed\", handler);\n };\n }, []);\n}\n","import {\n capitalizeString,\n transSymbolformString,\n} from \"@orderly.network/utils\";\nimport { API, OrderStatus } from \"@orderly.network/types\";\nimport { AlgoOrderRootType } from \"@orderly.network/types\";\nimport { parseNumber } from \"@orderly.network/ui\";\nimport { i18n } from \"@orderly.network/i18n\";\n\nfunction getDisplaySide(side: string) {\n if (side === \"BUY\") {\n return i18n.t(\"common.buy\");\n } else if (side === \"SELL\") {\n return i18n.t(\"common.sell\");\n }\n return capitalizeString(side);\n}\n\nexport function getOrderExecutionReportMsg(\n data: API.AlgoOrder | API.Order,\n symbolsInfo: any\n) {\n const { symbol, side, quantity } = data;\n const total_executed_quantity =\n \"total_executed_quantity\" in data ? data.total_executed_quantity : 0;\n const status = \"status\" in data ? data.status : data.algo_status;\n const getSymbolInfo = symbolsInfo[symbol];\n const base_dp = getSymbolInfo(\"base_dp\");\n const displaySide = getDisplaySide(side);\n const displaySymbol = transSymbolformString(symbol);\n const displayQuantity =\n \"algo_type\" in data && data.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL\n ? i18n.t(\"tpsl.entirePosition\")\n : base_dp === undefined\n ? quantity\n : parseNumber(quantity, { dp: base_dp });\n\n let title = \"\";\n let msg = \"\";\n switch (status) {\n case OrderStatus.NEW:\n title = i18n.t(\"orders.status.opened.toast.title\");\n msg = `${displaySide} ${displaySymbol} ${displayQuantity}`;\n break;\n case OrderStatus.FILLED:\n case OrderStatus.PARTIAL_FILLED:\n const displayTotalExecutedQuantity =\n base_dp === undefined\n ? total_executed_quantity\n : parseNumber(total_executed_quantity, { dp: base_dp });\n title = i18n.t(\"orders.status.filled.toast.title\");\n msg = `${displaySide} ${displaySymbol} ${displayTotalExecutedQuantity} / ${displayQuantity}`;\n break;\n case OrderStatus.CANCELLED:\n title = i18n.t(\"orders.status.canceled.toast.title\");\n msg = `${displaySide} ${displaySymbol} ${displayQuantity}`;\n break;\n case OrderStatus.REJECTED:\n title = i18n.t(\"orders.status.rejected.toast.title\");\n msg = `${displaySide} ${displaySymbol} ${displayQuantity}`;\n break;\n case OrderStatus.REPLACED:\n title = i18n.t(\"orders.status.replaced.toast.title\");\n msg = `${side} ${displaySymbol} ${total_executed_quantity} / ${displayQuantity}`;\n break;\n default:\n break;\n }\n\n return {\n title,\n msg,\n };\n}\n","import { useMemo } from \"react\";\nimport {\n useTranslation,\n useLocaleCode,\n LocaleEnum,\n} from \"@orderly.network/i18n\";\nimport { Locale } from \"@orderly.network/ui\";\nimport { enUS, zhCN, ja, es, ko, vi, de, fr, nl } from \"date-fns/locale\";\n\nexport function useUILocale() {\n const { t } = useTranslation();\n const localeCode = useLocaleCode();\n\n return useMemo<Locale>(() => {\n const calendarLocale = {\n [LocaleEnum.en]: enUS,\n [LocaleEnum.zh]: zhCN,\n // [LocaleEnum.ja]: ja,\n // [LocaleEnum.es]: es,\n // [LocaleEnum.ko]: ko,\n // [LocaleEnum.vi]: vi,\n // [LocaleEnum.de]: de,\n // [LocaleEnum.fr]: fr,\n // [LocaleEnum.nl]: nl,\n };\n return {\n locale: localeCode,\n dialog: {\n ok: t(\"common.ok\"),\n cancel: t(\"common.cancel\"),\n },\n modal: {\n confirm: t(\"common.confirm\"),\n cancel: t(\"common.cancel\"),\n },\n pagination: {\n morePages: t(\"ui.pagination.morePages\"),\n rowsPerPage: t(\"ui.pagination.rowsPerPage\"),\n },\n picker: {\n selectDate: t(\"ui.picker.selectDate\"),\n dayPicker: calendarLocale[localeCode as keyof typeof calendarLocale],\n },\n empty: {\n description: t(\"ui.empty.description\"),\n },\n } as const;\n }, [t, localeCode]);\n}\n","import { AccountStatusEnum } from \"@orderly.network/types\";\nimport { useAppContext } from \"../provider/appContext\";\nimport { useAccount } from \"@orderly.network/hooks\";\n\nexport const useDataTap = <T = any>(\n data: T,\n options?: {\n skip?: false;\n fallbackData?: T;\n accountStatus?: AccountStatusEnum;\n }\n): T | null => {\n const { wrongNetwork, disabledConnect } = useAppContext();\n const { state } = useAccount();\n /**\n * ignore\n */\n if (options?.skip) return data;\n\n if (wrongNetwork || disabledConnect) {\n return typeof options?.fallbackData !== \"undefined\"\n ? options.fallbackData\n : null;\n }\n\n if (typeof options?.accountStatus !== \"undefined\") {\n if (state.status < options.accountStatus) {\n return typeof options?.fallbackData !== \"undefined\"\n ? options.fallbackData\n : null;\n }\n }\n\n // return wrongNetwork\n // ? typeof options?.fallbackData !== \"undefined\"\n // ? options.fallbackData\n // : null\n // : data;\n //\n return data;\n};\n","import {\n OrderValidationItem,\n OrderValidationResult,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\ntype Keys =\n | \"quantity\"\n | \"order_quantity\"\n | \"order_price\"\n | \"trigger_price\"\n | \"total\"\n | \"tp_trigger_price\"\n | \"sl_trigger_price\";\n\nexport function useOrderEntryFormErrorMsg(\n errors: OrderValidationResult | null\n) {\n const { t } = useTranslation();\n\n const getMessage = (\n key: Keys,\n value?: number | string,\n type?: OrderValidationItem[\"type\"]\n ) => {\n const map = {\n quantity: {\n required: t(\"orderEntry.orderQuantity.error.required\"),\n min: t(\"orderEntry.orderQuantity.error.min\", { value }),\n max: t(\"orderEntry.orderQuantity.error.max\", { value }),\n },\n order_quantity: {\n required: t(\"orderEntry.orderQuantity.error.required\"),\n min: t(\"orderEntry.orderQuantity.error.min\", { value }),\n max: t(\"orderEntry.orderQuantity.error.max\", { value }),\n },\n order_price: {\n required: t(\"orderEntry.orderPrice.error.required\"),\n min: t(\"orderEntry.orderPrice.error.min\", { value }),\n max: t(\"orderEntry.orderPrice.error.max\", { value }),\n },\n trigger_price: {\n required: t(\"orderEntry.triggerPrice.error.required\"),\n min: t(\"orderEntry.triggerPrice.error.min\", { value }),\n max: t(\"orderEntry.triggerPrice.error.max\", { value }),\n },\n tp_trigger_price: {\n min: t(\"orderEntry.tpTriggerPrice.error.min\", { value }),\n max: t(\"orderEntry.tpTriggerPrice.error.max\", { value }),\n },\n sl_trigger_price: {\n min: t(\"orderEntry.slTriggerPrice.error.min\", { value }),\n max: t(\"orderEntry.slTriggerPrice.error.max\", { val