@orderly.network/react-app 2.0.0-alpha.2 → 2.0.1-alpha.0
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/dist/index.d.mts +18 -14
- package/dist/index.d.ts +18 -14
- package/dist/index.js +5 -8
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +7 -10
- package/dist/index.mjs.map +1 -1
- package/package.json +6 -9
package/dist/index.d.mts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import {
|
|
3
|
-
import { ConfigProviderProps, WalletState } from '@orderly.network/hooks';
|
|
2
|
+
import { ReactNode, ComponentType, PropsWithChildren } from 'react';
|
|
3
|
+
import { ConfigProviderProps, ConfigProviderExclusionProps, WalletState } from '@orderly.network/hooks';
|
|
4
4
|
import { ExtensionPosition } from '@orderly.network/ui';
|
|
5
5
|
import { AccountStatusEnum } from '@orderly.network/types';
|
|
6
|
+
import { OrderlyThemeProviderProps } from '@orderly.network/ui/src/provider/orderlyThemeProvider';
|
|
6
7
|
|
|
7
8
|
type Logo = {
|
|
8
9
|
img?: string;
|
|
@@ -13,15 +14,17 @@ type AppLogos = Partial<{
|
|
|
13
14
|
main: Logo;
|
|
14
15
|
secondary: Logo;
|
|
15
16
|
}>;
|
|
16
|
-
|
|
17
|
+
type OrderlyAppConfig = {
|
|
17
18
|
appIcons?: AppLogos;
|
|
18
19
|
dateFormatting?: string;
|
|
19
20
|
components?: {
|
|
20
21
|
[position in ExtensionPosition]: ComponentType;
|
|
21
22
|
};
|
|
22
|
-
}
|
|
23
|
+
} & Partial<Omit<ConfigProviderProps, "brokerId" | "brokerName" | "configStore" | "networkId">> & ConfigProviderExclusionProps;
|
|
23
24
|
|
|
24
|
-
declare const useWalletStateHandle: (options: {
|
|
25
|
+
declare const useWalletStateHandle: (options: {
|
|
26
|
+
currentChainId?: number;
|
|
27
|
+
}) => {
|
|
25
28
|
connectWallet: () => Promise<{
|
|
26
29
|
wallet?: WalletState;
|
|
27
30
|
status?: AccountStatusEnum;
|
|
@@ -36,6 +39,8 @@ type AppContextState = {
|
|
|
36
39
|
* Whether the current network is not supported
|
|
37
40
|
*/
|
|
38
41
|
wrongNetwork: boolean;
|
|
42
|
+
currentChainId: number | undefined;
|
|
43
|
+
setCurrentChainId: (chainId: number | undefined) => void;
|
|
39
44
|
onChainChanged?: (chainId: number, state: {
|
|
40
45
|
isTestnet: boolean;
|
|
41
46
|
isWalletConnected: boolean;
|
|
@@ -49,10 +54,9 @@ type AppStateProviderProps = {
|
|
|
49
54
|
}) => void;
|
|
50
55
|
};
|
|
51
56
|
|
|
52
|
-
type
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
(props: PropsWithChildren<OptionalConfig & AppStateProviderProps>): react_jsx_runtime.JSX.Element;
|
|
57
|
+
type OrderlyAppProviderProps = PropsWithChildren<OrderlyAppConfig & AppStateProviderProps & OrderlyThemeProviderProps>;
|
|
58
|
+
declare const OrderlyAppProvider: {
|
|
59
|
+
(props: OrderlyAppProviderProps): react_jsx_runtime.JSX.Element;
|
|
56
60
|
displayName: string;
|
|
57
61
|
};
|
|
58
62
|
|
|
@@ -63,9 +67,9 @@ type ThemeContextState = {
|
|
|
63
67
|
declare const useAppConfig: () => ThemeContextState;
|
|
64
68
|
|
|
65
69
|
declare const useDataTap: <T = any>(data: T, options?: {
|
|
66
|
-
skip?: false
|
|
67
|
-
fallbackData?: T
|
|
68
|
-
accountStatus?: AccountStatusEnum
|
|
69
|
-
}
|
|
70
|
+
skip?: false;
|
|
71
|
+
fallbackData?: T;
|
|
72
|
+
accountStatus?: AccountStatusEnum;
|
|
73
|
+
}) => T | null;
|
|
70
74
|
|
|
71
|
-
export {
|
|
75
|
+
export { type AppLogos, type AppStateProviderProps, OrderlyAppProvider, type OrderlyAppProviderProps, useAppConfig, useAppContext, useDataTap };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import {
|
|
3
|
-
import { ConfigProviderProps, WalletState } from '@orderly.network/hooks';
|
|
2
|
+
import { ReactNode, ComponentType, PropsWithChildren } from 'react';
|
|
3
|
+
import { ConfigProviderProps, ConfigProviderExclusionProps, WalletState } from '@orderly.network/hooks';
|
|
4
4
|
import { ExtensionPosition } from '@orderly.network/ui';
|
|
5
5
|
import { AccountStatusEnum } from '@orderly.network/types';
|
|
6
|
+
import { OrderlyThemeProviderProps } from '@orderly.network/ui/src/provider/orderlyThemeProvider';
|
|
6
7
|
|
|
7
8
|
type Logo = {
|
|
8
9
|
img?: string;
|
|
@@ -13,15 +14,17 @@ type AppLogos = Partial<{
|
|
|
13
14
|
main: Logo;
|
|
14
15
|
secondary: Logo;
|
|
15
16
|
}>;
|
|
16
|
-
|
|
17
|
+
type OrderlyAppConfig = {
|
|
17
18
|
appIcons?: AppLogos;
|
|
18
19
|
dateFormatting?: string;
|
|
19
20
|
components?: {
|
|
20
21
|
[position in ExtensionPosition]: ComponentType;
|
|
21
22
|
};
|
|
22
|
-
}
|
|
23
|
+
} & Partial<Omit<ConfigProviderProps, "brokerId" | "brokerName" | "configStore" | "networkId">> & ConfigProviderExclusionProps;
|
|
23
24
|
|
|
24
|
-
declare const useWalletStateHandle: (options: {
|
|
25
|
+
declare const useWalletStateHandle: (options: {
|
|
26
|
+
currentChainId?: number;
|
|
27
|
+
}) => {
|
|
25
28
|
connectWallet: () => Promise<{
|
|
26
29
|
wallet?: WalletState;
|
|
27
30
|
status?: AccountStatusEnum;
|
|
@@ -36,6 +39,8 @@ type AppContextState = {
|
|
|
36
39
|
* Whether the current network is not supported
|
|
37
40
|
*/
|
|
38
41
|
wrongNetwork: boolean;
|
|
42
|
+
currentChainId: number | undefined;
|
|
43
|
+
setCurrentChainId: (chainId: number | undefined) => void;
|
|
39
44
|
onChainChanged?: (chainId: number, state: {
|
|
40
45
|
isTestnet: boolean;
|
|
41
46
|
isWalletConnected: boolean;
|
|
@@ -49,10 +54,9 @@ type AppStateProviderProps = {
|
|
|
49
54
|
}) => void;
|
|
50
55
|
};
|
|
51
56
|
|
|
52
|
-
type
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
(props: PropsWithChildren<OptionalConfig & AppStateProviderProps>): react_jsx_runtime.JSX.Element;
|
|
57
|
+
type OrderlyAppProviderProps = PropsWithChildren<OrderlyAppConfig & AppStateProviderProps & OrderlyThemeProviderProps>;
|
|
58
|
+
declare const OrderlyAppProvider: {
|
|
59
|
+
(props: OrderlyAppProviderProps): react_jsx_runtime.JSX.Element;
|
|
56
60
|
displayName: string;
|
|
57
61
|
};
|
|
58
62
|
|
|
@@ -63,9 +67,9 @@ type ThemeContextState = {
|
|
|
63
67
|
declare const useAppConfig: () => ThemeContextState;
|
|
64
68
|
|
|
65
69
|
declare const useDataTap: <T = any>(data: T, options?: {
|
|
66
|
-
skip?: false
|
|
67
|
-
fallbackData?: T
|
|
68
|
-
accountStatus?: AccountStatusEnum
|
|
69
|
-
}
|
|
70
|
+
skip?: false;
|
|
71
|
+
fallbackData?: T;
|
|
72
|
+
accountStatus?: AccountStatusEnum;
|
|
73
|
+
}) => T | null;
|
|
70
74
|
|
|
71
|
-
export {
|
|
75
|
+
export { type AppLogos, type AppStateProviderProps, OrderlyAppProvider, type OrderlyAppProviderProps, useAppConfig, useAppContext, useDataTap };
|
package/dist/index.js
CHANGED
|
@@ -6,15 +6,12 @@ var hooks = require('@orderly.network/hooks');
|
|
|
6
6
|
var utils = require('@orderly.network/utils');
|
|
7
7
|
var types = require('@orderly.network/types');
|
|
8
8
|
var jsxRuntime = require('react/jsx-runtime');
|
|
9
|
-
var defaultEvmAdapter = require('@orderly.network/default-evm-adapter');
|
|
10
|
-
var defaultSolanaAdapter = require('@orderly.network/default-solana-adapter');
|
|
11
|
-
var web3ProviderEthers = require('@orderly.network/web3-provider-ethers');
|
|
12
9
|
|
|
13
|
-
var
|
|
10
|
+
var x=()=>{react.useEffect(()=>{let e=new URLSearchParams(window.location.search).get("ref");e&&localStorage.setItem("referral_code",e);},[]);};var I="orderly:wallet-info";var T=t=>{let{wallet:e,connect:n,connectedChain:r,disconnect:c,namespace:f}=hooks.useWalletConnector();if(typeof n!="function")throw new types.SDKError("Please provide a wallet connector provider");let d=react.useRef(!1),{account:o,state:s}=hooks.useAccount(),a=hooks.useKeyStore(),m=hooks.useConfig("networkId"),[h,{checkChainSupport:p}]=hooks.useChains(),[u,y]=react.useState(!1),P=react.useMemo(()=>e?.accounts?.[0]?.address,[e]),g=react.useMemo(()=>{let i=e?.chains?.[0]?.id,l=e?.chains?.[0]?.namespace;if(!(typeof i>"u"))return {id:utils.parseChainIdToNumber(i),namespace:l}},[e]);return react.useEffect(()=>{if(!r)return;let i=p(r.id,m);y(!i);},[r,h,p,m]),react.useEffect(()=>{utils.windowGuard(()=>{let i=a.getAddress(),l=JSON.parse(localStorage.getItem(I)??"{}");r?.namespace!==types.ChainNamespace.solana&&i&&o.address!==i&&l.label&&n({autoSelect:{label:l.label,disableModals:!0}}).then(A=>{},A=>{});});},[e,o.address]),react.useEffect(()=>{if(e===null&&s.status>types.AccountStatusEnum.NotConnected&&!s.validating){o.disconnect();return}u||!r||d.current||(P&&P!==o.address&&(o.setAddress(P,{provider:e?.provider,chain:{id:utils.praseChainIdToNumber(g.id),namespace:g.namespace.toUpperCase()},wallet:{name:e.label}}),utils.windowGuard(()=>{localStorage.setItem(I,JSON.stringify({label:e.label}));})),g?.id!==o.chainId&&o.switchChainId(g?.id));},[e,r,P,g,o.address,s,o.chainId,u]),{connectWallet:async()=>(d.current=!0,n({chainId:t.currentChainId}).then(async i=>{if(Array.isArray(i)&&i.length>0&&i[0]&&i[0].accounts.length>0){let l=i[0],A=utils.praseChainIdToNumber(l.chains[0].id);if(!p(A,m))return {wrongNetwork:!0};if(!o)throw new Error("account is not initialized");let K=await o.setAddress(l.accounts[0].address,{provider:l.provider,chain:{id:utils.praseChainIdToNumber(l.chains[0].id),namespace:l.chains[0].namespace.toUpperCase()},wallet:{name:l.label}});return {wallet:l,status:K,wrongNetwork:!1}}return null}).finally(()=>{d.current=!1;})),wrongNetwork:u}};function W(){let t=hooks.useEventEmitter(),e=react.useRef({}),[n,r]=hooks.useSessionStorage("orderly_wallet_change_id",{});e.current=n,hooks.useWalletSubscription({onMessage:c=>{let{id:f,side:d,transStatus:o}=c,s=!0;if(["DEPOSIT","WITHDRAW"].includes(d)&&["COMPLETED","FAILED"].includes(o)){let a=e.current[f];r({...n,[f]:a?void 0:!0}),s=!a;}if(o==="COMPLETED"&&s){let a=`${utils.capitalizeString(d)} completed`;ui.toast.success(a);}else if(o==="FAILED"&&s){let a=`${utils.capitalizeString(d)} failed`;ui.toast.error(a);}t.emit("wallet:changed",c);}});}function D(){hooks.useSettleSubscription({onMessage:t=>{let{status:e}=t;switch(e){case"COMPLETED":ui.toast.success("Settlement completed");break;case"FAILED":ui.toast.error("Settlement failed");break;}}});}function L(){let t=hooks.useEventEmitter();return react.useEffect(()=>{t.on("wallet:connect-error",e=>{ui.toast.error(e.message);});},[t]),{}}var R=react.createContext({}),v=()=>react.useContext(R),_=t=>{let[e,n]=react.useState(),{connectWallet:r,wrongNetwork:c}=T({currentChainId:e});return W(),D(),L(),jsxRuntime.jsx(R.Provider,{value:{connectWallet:r,wrongNetwork:c,currentChainId:e,setCurrentChainId:n,onChainChanged:t.onChainChanged},children:t.children})};var $=react.createContext({}),Pe=()=>react.useContext($),M=t=>jsxRuntime.jsx($.Provider,{value:t,children:t.children});function H(t,e){let{symbol:n,side:r,quantity:c}=t,f="total_executed_quantity"in t?t.total_executed_quantity:0,d="status"in t?t.status:t.algo_status,o=e[n],s=o("base_dp"),a=utils.capitalizeString(r),m=utils.transSymbolformString(n),h="algo_type"in t&&t.algo_type===types.AlgoOrderRootType.POSITIONAL_TP_SL?"Entire position":s===void 0?c:ui.parseNumber(c,{dp:s}),p="",u="";switch(d){case"NEW":p="Order opened",u=`${a} ${m} ${h}`;break;case"FILLED":case"PARTIAL_FILLED":let y=s===void 0?f:ui.parseNumber(f,{dp:s});p="Order filled",u=`${a} ${m} ${y} / ${h}`;break;case"CANCELLED":p="Order cancelled",u=`${a} ${m} ${h}`;break;case"REJECTED":p="Order rejected",u=`${a} ${m} ${h}`;break;case"REPLACED":p="Order edited",u=`${r} ${m} ${f} / ${h}`;break;}return {title:p,msg:u}}function z(){let t=hooks.useEventEmitter(),e=hooks.useSymbolsInfo(),n=react.useRef({});react.useEffect(()=>{n.current=e;},[e]);let r=hooks.useDebouncedCallback(c=>{(d=>{let{title:o,msg:s}=H(d,n.current);o&&s&&ui.toast.success(jsxRuntime.jsxs("div",{children:[o,jsxRuntime.jsx("br",{}),jsxRuntime.jsx("div",{className:"orderly-text-white/[0.54] orderly-text-xs",children:s})]}));})(c);},100);react.useEffect(()=>(t.on("orders:changed",r),()=>{t.off("orders:changed",r);}),[]);}var J=t=>{let{onChainChanged:e,components:n,appIcons:r,...c}=t;return x(),z(),jsxRuntime.jsx(M,{appIcons:r,brokerName:t.brokerName,children:jsxRuntime.jsx(ui.OrderlyThemeProvider,{components:n,overrides:t.overrides,children:jsxRuntime.jsxs(hooks.OrderlyConfigProvider,{...c,children:[jsxRuntime.jsx(_,{onChainChanged:e,children:jsxRuntime.jsx(ui.TooltipProvider,{delayDuration:300,children:jsxRuntime.jsx(ui.ModalProvider,{children:t.children})})}),jsxRuntime.jsx(ui.Toaster,{})]})})})};J.displayName="OrderlyAppProvider";var _e=(t,e)=>{let{wrongNetwork:n}=v(),{state:r}=hooks.useAccount();return e?.skip?t:n||typeof e?.accountStatus<"u"&&r.status<e.accountStatus?typeof e?.fallbackData<"u"?e.fallbackData:null:t};
|
|
14
11
|
|
|
15
|
-
exports.
|
|
16
|
-
exports.useAppConfig =
|
|
17
|
-
exports.useAppContext =
|
|
18
|
-
exports.useDataTap =
|
|
12
|
+
exports.OrderlyAppProvider = J;
|
|
13
|
+
exports.useAppConfig = Pe;
|
|
14
|
+
exports.useAppContext = v;
|
|
15
|
+
exports.useDataTap = _e;
|
|
19
16
|
//# sourceMappingURL=out.js.map
|
|
20
17
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/orderlyApp.tsx","../src/hooks/useBootstrap.ts","../src/provider/appContext.tsx","../src/hooks/useWalletStateHandle.ts","../src/hooks/useWalletEvent.ts","../src/hooks/useSettleEvent.ts","../src/provider/configContext.tsx","../src/hooks/useDataTap.ts"],"names":["ModalProvider","OrderlyThemeProvider","Toaster","TooltipProvider","useEffect","useBootstrap","refCode","OrderlyConfigProvider","createContext","useContext","useMemo","useRef","useState","OrderlyContext","useAccount","useChains","useKeyStore","useWalletConnector","parseChainIdToNumber","praseChainIdToNumber","windowGuard","SDKError","WALLET_KEY","useWalletStateHandle","options","connectedWallet","connect","connectedChain","isManualConnect","account","keyStore","networkId","chains","checkChainSupport","unsupported","setUnsupported","currentWalletAddress","currentChain","id","namespace","isSupported","localAddress","walletInfo","res","error","walletState","wallet","chainId","status","toast","capitalizeString","useEventEmitter","useWalletSubscription","useWalletEvent","ee","data","side","transStatus","msg","useSettleSubscription","useSettleEvent","jsx","AppContext","useAppContext","AppStateProvider","props","connectWallet","wrongNetwork","AppConfigContext","useAppConfig","AppConfigProvider","DefaultEVMAdapterWalletAdapter","DefaultSolanaWalletAdapter","EthersProvider","jsxs","evmWalletAdapter","solanaWalletAdapter","OrderlyApp","onChainChanged","dateFormatting","components","appIcons","configProps","useDataTap","state"],"mappings":"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","sourcesContent":["import { PropsWithChildren, useEffect } from \"react\";\nimport { OrderlyAppConfig } from \"./types\";\nimport {\n ModalProvider,\n OrderlyThemeProvider,\n Toaster,\n TooltipProvider,\n} from \"@orderly.network/ui\";\nimport { useBootstrap } from \"./hooks/useBootstrap\";\nimport { OrderlyConfigProvider } from \"@orderly.network/hooks\";\nimport { AppStateProvider, AppStateProviderProps } from \"./provider/appContext\";\nimport { AppConfigProvider } from \"./provider/configContext\";\nimport { DefaultEVMAdapterWalletAdapter } from \"@orderly.network/default-evm-adapter\";\nimport {DefaultSolanaWalletAdapter} from \"@orderly.network/default-solana-adapter\";\nimport { EthersProvider } from \"@orderly.network/web3-provider-ethers\";\n\ntype Optional<T, K extends keyof T> = Omit<T, K> & Partial<T>;\ntype OptionalConfig = Optional<OrderlyAppConfig, \"walletAdapters\">;\n\nconst evmWalletAdapter = new DefaultEVMAdapterWalletAdapter(\n new EthersProvider()\n);\nconst solanaWalletAdapter = new DefaultSolanaWalletAdapter();\n\nconst OrderlyApp = (\n props: PropsWithChildren<OptionalConfig & AppStateProviderProps>\n) => {\n const {\n onChainChanged,\n dateFormatting,\n components,\n appIcons,\n ...configProps\n } = props;\n\n useBootstrap();\n\n return (\n <AppConfigProvider appIcons={appIcons} brokerName={props.brokerName}>\n <OrderlyThemeProvider\n dateFormatting={dateFormatting}\n components={components}\n >\n <OrderlyConfigProvider\n {...configProps}\n walletAdapters={[evmWalletAdapter, solanaWalletAdapter]}\n >\n <AppStateProvider onChainChanged={onChainChanged}>\n <TooltipProvider>\n <ModalProvider>{props.children}</ModalProvider>\n </TooltipProvider>\n </AppStateProvider>\n <Toaster />\n </OrderlyConfigProvider>\n </OrderlyThemeProvider>\n </AppConfigProvider>\n );\n};\n\nOrderlyApp.displayName = \"OrderlyApp\";\n\nexport { OrderlyApp };\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 { FC, createContext, PropsWithChildren, useContext } from \"react\";\nimport { useWalletStateHandle } from \"../hooks/useWalletStateHandle\";\nimport { useAppState } from \"../hooks/useAppState\";\nimport { useWalletEvent } from \"../hooks/useWalletEvent\";\nimport { useSettleEvent } from \"../hooks/useSettleEvent\";\n\ntype AppContextState = {\n connectWallet: ReturnType<typeof useWalletStateHandle>[\"connectWallet\"];\n /**\n * Whether the current network is not supported\n */\n wrongNetwork: boolean;\n onChainChanged?: (\n chainId: number,\n state: { isTestnet: boolean; isWalletConnected: boolean }\n ) => void;\n // networkStatus: ReturnType<typeof useAppState>[\"networkStatus\"];\n};\n\nconst AppContext = createContext<AppContextState>({} as AppContextState);\n\nexport const useAppContext = () => {\n return useContext(AppContext);\n};\n\nexport type AppStateProviderProps = {\n onChainChanged?: (\n chainId: number,\n state: { isTestnet: boolean; isWalletConnected: boolean }\n ) => void;\n};\n\nexport const AppStateProvider: FC<PropsWithChildren<AppStateProviderProps>> = (\n props\n) => {\n const { connectWallet, wrongNetwork } = useWalletStateHandle({\n // onChainChanged: props.onChainChanged,\n });\n\n useWalletEvent();\n useSettleEvent();\n\n // const { networkStatus } = useAppState();\n\n return (\n <AppContext.Provider\n value={{\n connectWallet,\n wrongNetwork,\n onChainChanged: props.onChainChanged,\n }}\n >\n {props.children}\n </AppContext.Provider>\n );\n};\n","import { useContext, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n OrderlyContext,\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 { AccountStatusEnum, SDKError } from \"@orderly.network/types\";\nimport type { WalletState } from \"@orderly.network/hooks\";\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}) => {\n const {\n wallet: connectedWallet,\n connect,\n connectedChain,\n } = useWalletConnector();\n\n // console.log(\"🔗 wallet state handle\", connectedWallet);\n\n if (typeof connect !== \"function\") {\n throw new SDKError(\"Please provide a wallet connector provider\");\n }\n\n const isManualConnect = useRef<boolean>(false);\n\n const { account } = useAccount();\n const keyStore = useKeyStore();\n const { networkId } = useContext<any>(OrderlyContext);\n const [chains, { checkChainSupport }] = useChains();\n\n const [unsupported, setUnsupported] = useState(false);\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;\n if (typeof id === \"undefined\") return undefined;\n return {\n id: parseChainIdToNumber(id),\n namespace,\n };\n }, [connectedWallet]);\n\n useEffect(() => {\n if (!connectedChain) return;\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 (\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 // console.log(\"🔗 wallet state changed\", connectedWallet);\n //\n if (unsupported || !connectedChain) return;\n if (isManualConnect.current) return;\n\n // updateAccount(currentWalletAddress!, connectedWallet!, currentChainId!);\n /**\n * switch account\n */\n if (!!currentWalletAddress && currentWalletAddress !== account.address) {\n account.setAddress(currentWalletAddress, {\n provider: connectedWallet?.provider,\n chain: currentChain as any,\n wallet: {\n name: connectedWallet.label,\n },\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 account.chainId,\n unsupported,\n ]);\n\n // console.log(\"🔗 wallet state handle\", connectedWallet);\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()\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.info(\"🤝 connect wallet\", wallet);\n // account.address = wallet.accounts[0].address;\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: wallet.chains[0].namespace,\n },\n wallet: {\n name: wallet.label,\n },\n // label: ,\n });\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 { toast } from \"@orderly.network/ui\";\nimport { capitalizeString } from \"@orderly.network/utils\";\nimport { useEventEmitter, useWalletSubscription } from \"@orderly.network/hooks\";\n\nexport function useWalletEvent() {\n const ee = useEventEmitter();\n\n useWalletSubscription({\n onMessage: (data: any) => {\n const { side, transStatus } = data;\n\n if (transStatus === \"COMPLETED\") {\n let msg = `${capitalizeString(side)} completed`;\n toast.success(msg);\n } else if (transStatus === \"FAILED\") {\n let msg = `${capitalizeString(side)} failed`;\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\";\n\nexport function useSettleEvent() {\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(\"Settlement completed\");\n break;\n case \"FAILED\":\n toast.error(\"Settlement failed\");\n break;\n default:\n break;\n }\n },\n });\n}\n","import { ExtensionPosition } from \"@orderly.network/ui\";\nimport { createContext, PropsWithChildren, ReactNode, 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 // const { appIcons } = props;\n return (\n <AppConfigContext.Provider value={props}>\n {props.children}\n </AppConfigContext.Provider>\n );\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 } = useAppContext();\n const { state } = useAccount();\n /**\n * ignore\n */\n if (options?.skip) return data;\n\n if (wrongNetwork) {\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/provider/orderlyAppProvider.tsx","../src/hooks/useBootstrap.ts","../src/provider/appContext.tsx","../src/hooks/useWalletStateHandle.ts","../src/hooks/useWalletEvent.ts","../src/hooks/useSettleEvent.ts","../src/hooks/useWalletConnectError.ts","../src/provider/configContext.tsx","../src/hooks/useExecutionReport.tsx","../src/hooks/getOrderExecutionReportMsg.ts","../src/hooks/useDataTap.ts"],"names":["ModalProvider","OrderlyThemeProvider","Toaster","TooltipProvider","useEffect","useBootstrap","refCode","OrderlyConfigProvider","createContext","useContext","useState","useMemo","useRef","useConfig","useAccount","useChains","useKeyStore","useWalletConnector","parseChainIdToNumber","praseChainIdToNumber","windowGuard","AccountStatusEnum","SDKError","ChainNamespace","WALLET_KEY","useWalletStateHandle","options","connectedWallet","connect","connectedChain","disconnect","namespace","isManualConnect","account","accountState","keyStore","networkId","chains","checkChainSupport","unsupported","setUnsupported","currentWalletAddress","currentChain","id","isSupported","localAddress","walletInfo","res","error","walletState","wallet","chainId","status","toast","capitalizeString","useEventEmitter","useSessionStorage","useWalletSubscription","useWalletEvent","ee","recordRef","record","setRecord","data","side","transStatus","showToast","isPushOnce","msg","useSettleSubscription","useSettleEvent","useWalletConnectError","jsx","AppContext","useAppContext","AppStateProvider","props","currentChainId","setCurrentChainId","connectWallet","wrongNetwork","AppConfigContext","useAppConfig","AppConfigProvider","transSymbolformString","AlgoOrderRootType","parseNumber","getOrderExecutionReportMsg","symbolsInfo","symbol","quantity","total_executed_quantity","getSymbolInfo","base_dp","displaySide","displaySymbol","displayQuantity","title","displayTotalExecutedQuantity","useSymbolsInfo","useDebouncedCallback","jsxs","useExecutionReport","symbolsInfoRef","handler","OrderlyAppProvider","onChainChanged","components","appIcons","configProps","useDataTap","state"],"mappings":"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","sourcesContent":["import { PropsWithChildren } from \"react\";\nimport { OrderlyAppConfig } from \"../types\";\nimport {\n ModalProvider,\n OrderlyThemeProvider,\n Toaster,\n TooltipProvider,\n} from \"@orderly.network/ui\";\nimport { useBootstrap } from \"../hooks/useBootstrap\";\nimport {\n ConfigProviderProps,\n OrderlyConfigProvider,\n} from \"@orderly.network/hooks\";\nimport { AppStateProvider, AppStateProviderProps } from \"./appContext\";\nimport { AppConfigProvider } from \"./configContext\";\n\nimport { useExecutionReport } from \"../hooks/useExecutionReport\";\nimport { OrderlyThemeProviderProps } from \"@orderly.network/ui/src/provider/orderlyThemeProvider\";\n\nexport type OrderlyAppProviderProps = PropsWithChildren<\n OrderlyAppConfig & AppStateProviderProps & OrderlyThemeProviderProps\n>;\n\nconst OrderlyAppProvider = (props: OrderlyAppProviderProps) => {\n const {\n onChainChanged,\n // dateFormatting,\n components,\n appIcons,\n ...configProps\n } = props;\n\n useBootstrap();\n useExecutionReport();\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 onChainChanged={onChainChanged}>\n <TooltipProvider delayDuration={300}>\n <ModalProvider>{props.children}</ModalProvider>\n </TooltipProvider>\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 { FC, createContext, PropsWithChildren, useContext, useState } from \"react\";\nimport { useWalletStateHandle } from \"../hooks/useWalletStateHandle\";\nimport { useAppState } from \"../hooks/useAppState\";\nimport { useWalletEvent } from \"../hooks/useWalletEvent\";\nimport { useSettleEvent } from \"../hooks/useSettleEvent\";\nimport { useWalletConnectError } from \"../hooks/useWalletConnectError\";\n\ntype AppContextState = {\n connectWallet: ReturnType<typeof useWalletStateHandle>[\"connectWallet\"];\n /**\n * Whether the current network is not supported\n */\n wrongNetwork: 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};\n\nconst AppContext = createContext<AppContextState>({} as AppContextState);\n\nexport const useAppContext = () => {\n return useContext(AppContext);\n};\n\nexport type AppStateProviderProps = {\n onChainChanged?: (\n chainId: number,\n state: { isTestnet: boolean; isWalletConnected: boolean }\n ) => void;\n};\n\nexport const AppStateProvider: FC<PropsWithChildren<AppStateProviderProps>> = (\n props\n) => {\n const [currentChainId, setCurrentChainId] = useState<number | undefined>();\n\n const { connectWallet, wrongNetwork } = useWalletStateHandle({\n // onChainChanged: props.onChainChanged,\n currentChainId,\n });\n\n useWalletEvent();\n useSettleEvent();\n useWalletConnectError();\n\n // const { networkStatus } = useAppState();\n\n return (\n <AppContext.Provider\n value={{\n connectWallet,\n wrongNetwork,\n currentChainId,\n setCurrentChainId,\n onChainChanged: props.onChainChanged,\n }}\n >\n {props.children}\n </AppContext.Provider>\n );\n};\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useConfig, 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} from \"@orderly.network/types\";\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 isManualConnect = useRef<boolean>(false);\n\n const { account, state: accountState } = useAccount();\n const keyStore = useKeyStore();\n const networkId = useConfig(\"networkId\") as NetworkId;\n const [chains, { checkChainSupport }] = useChains();\n\n const [unsupported, setUnsupported] = useState(false);\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;\n if (typeof id === \"undefined\") return undefined;\n return {\n id: parseChainIdToNumber(id),\n namespace,\n };\n }, [connectedWallet]);\n\n useEffect(() => {\n if (!connectedChain) return;\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 // updateAccount(currentWalletAddress!, connectedWallet!, currentChainId!);\n /**\n * switch account\n */\n if (!!currentWalletAddress && currentWalletAddress !== account.address) {\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\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 // console.log(\"🔗 wallet state handle\", connectedWallet);\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 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 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 { 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\";\n\nexport function useWalletEvent() {\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 toast.success(msg);\n } else if (transStatus === \"FAILED\" && showToast) {\n let msg = `${capitalizeString(side)} failed`;\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\";\n\nexport function useSettleEvent() {\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(\"Settlement completed\");\n break;\n case \"FAILED\":\n toast.error(\"Settlement failed\");\n break;\n default:\n break;\n }\n },\n });\n}\n","import { useEventEmitter } from \"@orderly.network/hooks\";\nimport { useEffect } from \"react\";\nimport { toast } from \"@orderly.network/ui\";\n\nexport function useWalletConnectError() {\n const ee = useEventEmitter();\n\n useEffect(() => {\n ee.on('wallet:connect-error', (data) => {\n toast.error(data.message);\n\n })\n\n }, [ee])\n\n return {}\n}","import { ExtensionPosition } from \"@orderly.network/ui\";\nimport { createContext, PropsWithChildren, ReactNode, 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 // const { appIcons } = props;\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 useWS,\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 } from \"@orderly.network/types\";\nimport { AlgoOrderRootType } from \"@orderly.network/types\";\nimport { parseNumber } from \"@orderly.network/ui\";\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 = capitalizeString(side);\n const displaySymbol = transSymbolformString(symbol);\n const displayQuantity =\n \"algo_type\" in data && data.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL\n ? \"Entire position\"\n : base_dp === undefined\n ? quantity\n : parseNumber(quantity, { dp: base_dp });\n\n let title = \"\";\n let msg = \"\";\n switch (status) {\n case \"NEW\":\n title = \"Order opened\";\n msg = `${displaySide} ${displaySymbol} ${displayQuantity}`;\n break;\n case \"FILLED\":\n case \"PARTIAL_FILLED\":\n const displayTotalExecutedQuantity =\n base_dp === undefined\n ? total_executed_quantity\n : parseNumber(total_executed_quantity, { dp: base_dp });\n title = \"Order filled\";\n msg = `${displaySide} ${displaySymbol} ${displayTotalExecutedQuantity} / ${displayQuantity}`;\n break;\n case \"CANCELLED\":\n title = \"Order cancelled\";\n msg = `${displaySide} ${displaySymbol} ${displayQuantity}`;\n break;\n case \"REJECTED\":\n title = \"Order rejected\";\n msg = `${displaySide} ${displaySymbol} ${displayQuantity}`;\n break;\n case \"REPLACED\":\n title = \"Order edited\";\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 { 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 } = useAppContext();\n const { state } = useAccount();\n /**\n * ignore\n */\n if (options?.skip) return data;\n\n if (wrongNetwork) {\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"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,15 +1,12 @@
|
|
|
1
|
-
import { OrderlyThemeProvider, TooltipProvider, ModalProvider, Toaster, toast } from '@orderly.network/ui';
|
|
2
|
-
import { createContext, useContext, useEffect,
|
|
3
|
-
import { OrderlyConfigProvider, useAccount, useWalletConnector, useKeyStore,
|
|
4
|
-
import { parseChainIdToNumber, windowGuard, praseChainIdToNumber, capitalizeString } from '@orderly.network/utils';
|
|
5
|
-
import { SDKError } from '@orderly.network/types';
|
|
1
|
+
import { OrderlyThemeProvider, TooltipProvider, ModalProvider, Toaster, toast, parseNumber } from '@orderly.network/ui';
|
|
2
|
+
import { createContext, useContext, useEffect, useState, useRef, useMemo } from 'react';
|
|
3
|
+
import { OrderlyConfigProvider, useAccount, useEventEmitter, useSymbolsInfo, useDebouncedCallback, useWalletConnector, useKeyStore, useConfig, useChains, useSessionStorage, useWalletSubscription, useSettleSubscription } from '@orderly.network/hooks';
|
|
4
|
+
import { parseChainIdToNumber, windowGuard, praseChainIdToNumber, capitalizeString, transSymbolformString } from '@orderly.network/utils';
|
|
5
|
+
import { SDKError, ChainNamespace, AccountStatusEnum, AlgoOrderRootType } from '@orderly.network/types';
|
|
6
6
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
7
|
-
import { DefaultEVMAdapterWalletAdapter } from '@orderly.network/default-evm-adapter';
|
|
8
|
-
import { DefaultSolanaWalletAdapter } from '@orderly.network/default-solana-adapter';
|
|
9
|
-
import { EthersProvider } from '@orderly.network/web3-provider-ethers';
|
|
10
7
|
|
|
11
|
-
var
|
|
8
|
+
var x=()=>{useEffect(()=>{let e=new URLSearchParams(window.location.search).get("ref");e&&localStorage.setItem("referral_code",e);},[]);};var I="orderly:wallet-info";var T=t=>{let{wallet:e,connect:n,connectedChain:r,disconnect:c,namespace:f}=useWalletConnector();if(typeof n!="function")throw new SDKError("Please provide a wallet connector provider");let d=useRef(!1),{account:o,state:s}=useAccount(),a=useKeyStore(),m=useConfig("networkId"),[h,{checkChainSupport:p}]=useChains(),[u,y]=useState(!1),P=useMemo(()=>e?.accounts?.[0]?.address,[e]),g=useMemo(()=>{let i=e?.chains?.[0]?.id,l=e?.chains?.[0]?.namespace;if(!(typeof i>"u"))return {id:parseChainIdToNumber(i),namespace:l}},[e]);return useEffect(()=>{if(!r)return;let i=p(r.id,m);y(!i);},[r,h,p,m]),useEffect(()=>{windowGuard(()=>{let i=a.getAddress(),l=JSON.parse(localStorage.getItem(I)??"{}");r?.namespace!==ChainNamespace.solana&&i&&o.address!==i&&l.label&&n({autoSelect:{label:l.label,disableModals:!0}}).then(A=>{},A=>{});});},[e,o.address]),useEffect(()=>{if(e===null&&s.status>AccountStatusEnum.NotConnected&&!s.validating){o.disconnect();return}u||!r||d.current||(P&&P!==o.address&&(o.setAddress(P,{provider:e?.provider,chain:{id:praseChainIdToNumber(g.id),namespace:g.namespace.toUpperCase()},wallet:{name:e.label}}),windowGuard(()=>{localStorage.setItem(I,JSON.stringify({label:e.label}));})),g?.id!==o.chainId&&o.switchChainId(g?.id));},[e,r,P,g,o.address,s,o.chainId,u]),{connectWallet:async()=>(d.current=!0,n({chainId:t.currentChainId}).then(async i=>{if(Array.isArray(i)&&i.length>0&&i[0]&&i[0].accounts.length>0){let l=i[0],A=praseChainIdToNumber(l.chains[0].id);if(!p(A,m))return {wrongNetwork:!0};if(!o)throw new Error("account is not initialized");let K=await o.setAddress(l.accounts[0].address,{provider:l.provider,chain:{id:praseChainIdToNumber(l.chains[0].id),namespace:l.chains[0].namespace.toUpperCase()},wallet:{name:l.label}});return {wallet:l,status:K,wrongNetwork:!1}}return null}).finally(()=>{d.current=!1;})),wrongNetwork:u}};function W(){let t=useEventEmitter(),e=useRef({}),[n,r]=useSessionStorage("orderly_wallet_change_id",{});e.current=n,useWalletSubscription({onMessage:c=>{let{id:f,side:d,transStatus:o}=c,s=!0;if(["DEPOSIT","WITHDRAW"].includes(d)&&["COMPLETED","FAILED"].includes(o)){let a=e.current[f];r({...n,[f]:a?void 0:!0}),s=!a;}if(o==="COMPLETED"&&s){let a=`${capitalizeString(d)} completed`;toast.success(a);}else if(o==="FAILED"&&s){let a=`${capitalizeString(d)} failed`;toast.error(a);}t.emit("wallet:changed",c);}});}function D(){useSettleSubscription({onMessage:t=>{let{status:e}=t;switch(e){case"COMPLETED":toast.success("Settlement completed");break;case"FAILED":toast.error("Settlement failed");break;}}});}function L(){let t=useEventEmitter();return useEffect(()=>{t.on("wallet:connect-error",e=>{toast.error(e.message);});},[t]),{}}var R=createContext({}),v=()=>useContext(R),_=t=>{let[e,n]=useState(),{connectWallet:r,wrongNetwork:c}=T({currentChainId:e});return W(),D(),L(),jsx(R.Provider,{value:{connectWallet:r,wrongNetwork:c,currentChainId:e,setCurrentChainId:n,onChainChanged:t.onChainChanged},children:t.children})};var $=createContext({}),Pe=()=>useContext($),M=t=>jsx($.Provider,{value:t,children:t.children});function H(t,e){let{symbol:n,side:r,quantity:c}=t,f="total_executed_quantity"in t?t.total_executed_quantity:0,d="status"in t?t.status:t.algo_status,o=e[n],s=o("base_dp"),a=capitalizeString(r),m=transSymbolformString(n),h="algo_type"in t&&t.algo_type===AlgoOrderRootType.POSITIONAL_TP_SL?"Entire position":s===void 0?c:parseNumber(c,{dp:s}),p="",u="";switch(d){case"NEW":p="Order opened",u=`${a} ${m} ${h}`;break;case"FILLED":case"PARTIAL_FILLED":let y=s===void 0?f:parseNumber(f,{dp:s});p="Order filled",u=`${a} ${m} ${y} / ${h}`;break;case"CANCELLED":p="Order cancelled",u=`${a} ${m} ${h}`;break;case"REJECTED":p="Order rejected",u=`${a} ${m} ${h}`;break;case"REPLACED":p="Order edited",u=`${r} ${m} ${f} / ${h}`;break;}return {title:p,msg:u}}function z(){let t=useEventEmitter(),e=useSymbolsInfo(),n=useRef({});useEffect(()=>{n.current=e;},[e]);let r=useDebouncedCallback(c=>{(d=>{let{title:o,msg:s}=H(d,n.current);o&&s&&toast.success(jsxs("div",{children:[o,jsx("br",{}),jsx("div",{className:"orderly-text-white/[0.54] orderly-text-xs",children:s})]}));})(c);},100);useEffect(()=>(t.on("orders:changed",r),()=>{t.off("orders:changed",r);}),[]);}var J=t=>{let{onChainChanged:e,components:n,appIcons:r,...c}=t;return x(),z(),jsx(M,{appIcons:r,brokerName:t.brokerName,children:jsx(OrderlyThemeProvider,{components:n,overrides:t.overrides,children:jsxs(OrderlyConfigProvider,{...c,children:[jsx(_,{onChainChanged:e,children:jsx(TooltipProvider,{delayDuration:300,children:jsx(ModalProvider,{children:t.children})})}),jsx(Toaster,{})]})})})};J.displayName="OrderlyAppProvider";var _e=(t,e)=>{let{wrongNetwork:n}=v(),{state:r}=useAccount();return e?.skip?t:n||typeof e?.accountStatus<"u"&&r.status<e.accountStatus?typeof e?.fallbackData<"u"?e.fallbackData:null:t};
|
|
12
9
|
|
|
13
|
-
export {
|
|
10
|
+
export { J as OrderlyAppProvider, Pe as useAppConfig, v as useAppContext, _e as useDataTap };
|
|
14
11
|
//# sourceMappingURL=out.js.map
|
|
15
12
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/orderlyApp.tsx","../src/hooks/useBootstrap.ts","../src/provider/appContext.tsx","../src/hooks/useWalletStateHandle.ts","../src/hooks/useWalletEvent.ts","../src/hooks/useSettleEvent.ts","../src/provider/configContext.tsx","../src/hooks/useDataTap.ts"],"names":["ModalProvider","OrderlyThemeProvider","Toaster","TooltipProvider","useEffect","useBootstrap","refCode","OrderlyConfigProvider","createContext","useContext","useMemo","useRef","useState","OrderlyContext","useAccount","useChains","useKeyStore","useWalletConnector","parseChainIdToNumber","praseChainIdToNumber","windowGuard","SDKError","WALLET_KEY","useWalletStateHandle","options","connectedWallet","connect","connectedChain","isManualConnect","account","keyStore","networkId","chains","checkChainSupport","unsupported","setUnsupported","currentWalletAddress","currentChain","id","namespace","isSupported","localAddress","walletInfo","res","error","walletState","wallet","chainId","status","toast","capitalizeString","useEventEmitter","useWalletSubscription","useWalletEvent","ee","data","side","transStatus","msg","useSettleSubscription","useSettleEvent","jsx","AppContext","useAppContext","AppStateProvider","props","connectWallet","wrongNetwork","AppConfigContext","useAppConfig","AppConfigProvider","DefaultEVMAdapterWalletAdapter","DefaultSolanaWalletAdapter","EthersProvider","jsxs","evmWalletAdapter","solanaWalletAdapter","OrderlyApp","onChainChanged","dateFormatting","components","appIcons","configProps","useDataTap","state"],"mappings":"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","sourcesContent":["import { PropsWithChildren, useEffect } from \"react\";\nimport { OrderlyAppConfig } from \"./types\";\nimport {\n ModalProvider,\n OrderlyThemeProvider,\n Toaster,\n TooltipProvider,\n} from \"@orderly.network/ui\";\nimport { useBootstrap } from \"./hooks/useBootstrap\";\nimport { OrderlyConfigProvider } from \"@orderly.network/hooks\";\nimport { AppStateProvider, AppStateProviderProps } from \"./provider/appContext\";\nimport { AppConfigProvider } from \"./provider/configContext\";\nimport { DefaultEVMAdapterWalletAdapter } from \"@orderly.network/default-evm-adapter\";\nimport {DefaultSolanaWalletAdapter} from \"@orderly.network/default-solana-adapter\";\nimport { EthersProvider } from \"@orderly.network/web3-provider-ethers\";\n\ntype Optional<T, K extends keyof T> = Omit<T, K> & Partial<T>;\ntype OptionalConfig = Optional<OrderlyAppConfig, \"walletAdapters\">;\n\nconst evmWalletAdapter = new DefaultEVMAdapterWalletAdapter(\n new EthersProvider()\n);\nconst solanaWalletAdapter = new DefaultSolanaWalletAdapter();\n\nconst OrderlyApp = (\n props: PropsWithChildren<OptionalConfig & AppStateProviderProps>\n) => {\n const {\n onChainChanged,\n dateFormatting,\n components,\n appIcons,\n ...configProps\n } = props;\n\n useBootstrap();\n\n return (\n <AppConfigProvider appIcons={appIcons} brokerName={props.brokerName}>\n <OrderlyThemeProvider\n dateFormatting={dateFormatting}\n components={components}\n >\n <OrderlyConfigProvider\n {...configProps}\n walletAdapters={[evmWalletAdapter, solanaWalletAdapter]}\n >\n <AppStateProvider onChainChanged={onChainChanged}>\n <TooltipProvider>\n <ModalProvider>{props.children}</ModalProvider>\n </TooltipProvider>\n </AppStateProvider>\n <Toaster />\n </OrderlyConfigProvider>\n </OrderlyThemeProvider>\n </AppConfigProvider>\n );\n};\n\nOrderlyApp.displayName = \"OrderlyApp\";\n\nexport { OrderlyApp };\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 { FC, createContext, PropsWithChildren, useContext } from \"react\";\nimport { useWalletStateHandle } from \"../hooks/useWalletStateHandle\";\nimport { useAppState } from \"../hooks/useAppState\";\nimport { useWalletEvent } from \"../hooks/useWalletEvent\";\nimport { useSettleEvent } from \"../hooks/useSettleEvent\";\n\ntype AppContextState = {\n connectWallet: ReturnType<typeof useWalletStateHandle>[\"connectWallet\"];\n /**\n * Whether the current network is not supported\n */\n wrongNetwork: boolean;\n onChainChanged?: (\n chainId: number,\n state: { isTestnet: boolean; isWalletConnected: boolean }\n ) => void;\n // networkStatus: ReturnType<typeof useAppState>[\"networkStatus\"];\n};\n\nconst AppContext = createContext<AppContextState>({} as AppContextState);\n\nexport const useAppContext = () => {\n return useContext(AppContext);\n};\n\nexport type AppStateProviderProps = {\n onChainChanged?: (\n chainId: number,\n state: { isTestnet: boolean; isWalletConnected: boolean }\n ) => void;\n};\n\nexport const AppStateProvider: FC<PropsWithChildren<AppStateProviderProps>> = (\n props\n) => {\n const { connectWallet, wrongNetwork } = useWalletStateHandle({\n // onChainChanged: props.onChainChanged,\n });\n\n useWalletEvent();\n useSettleEvent();\n\n // const { networkStatus } = useAppState();\n\n return (\n <AppContext.Provider\n value={{\n connectWallet,\n wrongNetwork,\n onChainChanged: props.onChainChanged,\n }}\n >\n {props.children}\n </AppContext.Provider>\n );\n};\n","import { useContext, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n OrderlyContext,\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 { AccountStatusEnum, SDKError } from \"@orderly.network/types\";\nimport type { WalletState } from \"@orderly.network/hooks\";\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}) => {\n const {\n wallet: connectedWallet,\n connect,\n connectedChain,\n } = useWalletConnector();\n\n // console.log(\"🔗 wallet state handle\", connectedWallet);\n\n if (typeof connect !== \"function\") {\n throw new SDKError(\"Please provide a wallet connector provider\");\n }\n\n const isManualConnect = useRef<boolean>(false);\n\n const { account } = useAccount();\n const keyStore = useKeyStore();\n const { networkId } = useContext<any>(OrderlyContext);\n const [chains, { checkChainSupport }] = useChains();\n\n const [unsupported, setUnsupported] = useState(false);\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;\n if (typeof id === \"undefined\") return undefined;\n return {\n id: parseChainIdToNumber(id),\n namespace,\n };\n }, [connectedWallet]);\n\n useEffect(() => {\n if (!connectedChain) return;\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 (\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 // console.log(\"🔗 wallet state changed\", connectedWallet);\n //\n if (unsupported || !connectedChain) return;\n if (isManualConnect.current) return;\n\n // updateAccount(currentWalletAddress!, connectedWallet!, currentChainId!);\n /**\n * switch account\n */\n if (!!currentWalletAddress && currentWalletAddress !== account.address) {\n account.setAddress(currentWalletAddress, {\n provider: connectedWallet?.provider,\n chain: currentChain as any,\n wallet: {\n name: connectedWallet.label,\n },\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 account.chainId,\n unsupported,\n ]);\n\n // console.log(\"🔗 wallet state handle\", connectedWallet);\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()\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.info(\"🤝 connect wallet\", wallet);\n // account.address = wallet.accounts[0].address;\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: wallet.chains[0].namespace,\n },\n wallet: {\n name: wallet.label,\n },\n // label: ,\n });\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 { toast } from \"@orderly.network/ui\";\nimport { capitalizeString } from \"@orderly.network/utils\";\nimport { useEventEmitter, useWalletSubscription } from \"@orderly.network/hooks\";\n\nexport function useWalletEvent() {\n const ee = useEventEmitter();\n\n useWalletSubscription({\n onMessage: (data: any) => {\n const { side, transStatus } = data;\n\n if (transStatus === \"COMPLETED\") {\n let msg = `${capitalizeString(side)} completed`;\n toast.success(msg);\n } else if (transStatus === \"FAILED\") {\n let msg = `${capitalizeString(side)} failed`;\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\";\n\nexport function useSettleEvent() {\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(\"Settlement completed\");\n break;\n case \"FAILED\":\n toast.error(\"Settlement failed\");\n break;\n default:\n break;\n }\n },\n });\n}\n","import { ExtensionPosition } from \"@orderly.network/ui\";\nimport { createContext, PropsWithChildren, ReactNode, 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 // const { appIcons } = props;\n return (\n <AppConfigContext.Provider value={props}>\n {props.children}\n </AppConfigContext.Provider>\n );\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 } = useAppContext();\n const { state } = useAccount();\n /**\n * ignore\n */\n if (options?.skip) return data;\n\n if (wrongNetwork) {\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/provider/orderlyAppProvider.tsx","../src/hooks/useBootstrap.ts","../src/provider/appContext.tsx","../src/hooks/useWalletStateHandle.ts","../src/hooks/useWalletEvent.ts","../src/hooks/useSettleEvent.ts","../src/hooks/useWalletConnectError.ts","../src/provider/configContext.tsx","../src/hooks/useExecutionReport.tsx","../src/hooks/getOrderExecutionReportMsg.ts","../src/hooks/useDataTap.ts"],"names":["ModalProvider","OrderlyThemeProvider","Toaster","TooltipProvider","useEffect","useBootstrap","refCode","OrderlyConfigProvider","createContext","useContext","useState","useMemo","useRef","useConfig","useAccount","useChains","useKeyStore","useWalletConnector","parseChainIdToNumber","praseChainIdToNumber","windowGuard","AccountStatusEnum","SDKError","ChainNamespace","WALLET_KEY","useWalletStateHandle","options","connectedWallet","connect","connectedChain","disconnect","namespace","isManualConnect","account","accountState","keyStore","networkId","chains","checkChainSupport","unsupported","setUnsupported","currentWalletAddress","currentChain","id","isSupported","localAddress","walletInfo","res","error","walletState","wallet","chainId","status","toast","capitalizeString","useEventEmitter","useSessionStorage","useWalletSubscription","useWalletEvent","ee","recordRef","record","setRecord","data","side","transStatus","showToast","isPushOnce","msg","useSettleSubscription","useSettleEvent","useWalletConnectError","jsx","AppContext","useAppContext","AppStateProvider","props","currentChainId","setCurrentChainId","connectWallet","wrongNetwork","AppConfigContext","useAppConfig","AppConfigProvider","transSymbolformString","AlgoOrderRootType","parseNumber","getOrderExecutionReportMsg","symbolsInfo","symbol","quantity","total_executed_quantity","getSymbolInfo","base_dp","displaySide","displaySymbol","displayQuantity","title","displayTotalExecutedQuantity","useSymbolsInfo","useDebouncedCallback","jsxs","useExecutionReport","symbolsInfoRef","handler","OrderlyAppProvider","onChainChanged","components","appIcons","configProps","useDataTap","state"],"mappings":"AAEA,OACE,iBAAAA,GACA,wBAAAC,GACA,WAAAC,GACA,mBAAAC,OACK,sBCPP,OAAS,aAAAC,MAAiB,QAGnB,IAAMC,EAAe,IAAM,CAChCD,EAAU,IAAM,CAEd,IAAME,EADe,IAAI,gBAAgB,OAAO,SAAS,MAAM,EAClC,IAAI,KAAK,EAClCA,GACF,aAAa,QAAQ,gBAAiBA,CAAO,CAEjD,EAAG,CAAC,CAAC,CACP,EDFA,OAEE,yBAAAC,OACK,yBEZP,OAAa,iBAAAC,GAAkC,cAAAC,GAAY,YAAAC,OAAgB,QCA3E,OAAS,aAAAN,EAAW,WAAAO,EAAS,UAAAC,EAAQ,YAAAF,MAAgB,QACrD,OAAS,aAAAG,MAA8B,yBACvC,OACE,cAAAC,EACA,aAAAC,EACA,eAAAC,EACA,sBAAAC,MACK,yBACP,OACE,wBAAAC,GACA,wBAAAC,EACA,eAAAC,MACK,yBACP,OACE,qBAAAC,GACA,YAAAC,GACA,kBAAAC,OAEK,yBAEP,IAAMC,EAAa,sBAGZ,IAAMC,EAAwBC,GAG/B,CACJ,GAAM,CACJ,OAAQC,EACR,QAAAC,EACA,eAAAC,EACA,WAAAC,EACA,UAAAC,CACF,EAAId,EAAmB,EAQvB,GAAI,OAAOW,GAAY,WACrB,MAAM,IAAIN,GAAS,4CAA4C,EAGjE,IAAMU,EAAkBpB,EAAgB,EAAK,EAEvC,CAAE,QAAAqB,EAAS,MAAOC,CAAa,EAAIpB,EAAW,EAC9CqB,EAAWnB,EAAY,EACvBoB,EAAYvB,EAAU,WAAW,EACjC,CAACwB,EAAQ,CAAE,kBAAAC,CAAkB,CAAC,EAAIvB,EAAU,EAE5C,CAACwB,EAAaC,CAAc,EAAI9B,EAAS,EAAK,EAG9C+B,EAAuB9B,EAA4B,IAChDgB,GAAiB,WAAW,CAAC,GAAG,QACtC,CAACA,CAAe,CAAC,EAGde,EAAe/B,EAEnB,IAAM,CACN,IAAMgC,EAAKhB,GAAiB,SAAS,CAAC,GAAG,GACnCI,EAAYJ,GAAiB,SAAS,CAAC,GAAG,UAChD,GAAI,SAAOgB,EAAO,KAClB,MAAO,CACL,GAAIzB,GAAqByB,CAAE,EAC3B,UAAAZ,CACF,CACF,EAAG,CAACJ,CAAe,CAAC,EAEpB,OAAAvB,EAAU,IAAM,CACd,GAAI,CAACyB,EAAgB,OAErB,IAAIe,EAAcN,EAChBT,EAAe,GACfO,CAEF,EAEAI,EAAe,CAACI,CAAW,CAC7B,EAAG,CAACf,EAAgBQ,EAAQC,EAAmBF,CAAS,CAAC,EAEzDhC,EAAU,IAAM,CAGdgB,EAAY,IAAM,CAChB,IAAMyB,EAAeV,EAAS,WAAW,EACnCW,EAAa,KAAK,MAAM,aAAa,QAAQtB,CAAU,GAAK,IAAI,EAKlEK,GAAgB,YAAcN,GAAe,QAI/CsB,GACAZ,EAAQ,UAAYY,GACpBC,EAAW,OAEXlB,EAAQ,CACN,WAAY,CACV,MAAOkB,EAAW,MAClB,cAAe,EACjB,CACF,CAAC,EAAE,KACAC,GAAQ,CAET,EACCC,GAAO,EACV,CAEJ,CAAC,CACH,EAAG,CAACrB,EAAiBM,EAAQ,OAAO,CAAC,EAKrC7B,EAAU,IAAM,CACd,GACEuB,IAAoB,MACpBO,EAAa,OAASb,GAAkB,cACrC,CAACa,EAAa,WACjB,CACAD,EAAQ,WAAW,EACnB,MACF,CAEIM,GAAe,CAACV,GAChBG,EAAgB,UAMdS,GAAwBA,IAAyBR,EAAQ,UAC7DA,EAAQ,WAAWQ,EAAsB,CACvC,SAAUd,GAAiB,SAC3B,MAAO,CACL,GAAIR,EAAqBuB,EAAc,EAAE,EACzC,UAAWA,EAAc,UAAU,YAAY,CACjD,EACA,OAAQ,CACN,KAAMf,EAAgB,KACxB,CACF,CAAC,EAGDP,EAAY,IAAM,CAChB,aAAa,QACXI,EACA,KAAK,UAAU,CACb,MAAOG,EAAgB,KACzB,CAAC,CACH,CACF,CAAC,GAMCe,GAAc,KAAOT,EAAQ,SAC/BA,EAAQ,cAAcS,GAAc,EAAG,EAK3C,EAAG,CACDf,EACAE,EACAY,EACAC,EACAT,EAAQ,QACRC,EACAD,EAAQ,QACRM,CACF,CAAC,EA6DM,CACL,cAvDoB,UAKpBP,EAAgB,QAAU,GAGnBJ,EAAQ,CAAE,QAASF,EAAQ,cAAe,CAAC,EAC/C,KAAK,MAAOuB,GAAgB,CAC3B,GACE,MAAM,QAAQA,CAAW,GACzBA,EAAY,OAAS,GACrBA,EAAY,CAAC,GACbA,EAAY,CAAC,EAAE,SAAS,OAAS,EACjC,CACA,IAAMC,EAASD,EAAY,CAAC,EACtBE,EAAUhC,EAAqB+B,EAAO,OAAO,CAAC,EAAE,EAAE,EAExD,GAAI,CAACZ,EAAkBa,EAASf,CAAS,EACvC,MAAO,CACL,aAAc,EAChB,EAIF,GAAI,CAACH,EACH,MAAM,IAAI,MAAM,4BAA4B,EAG9C,IAAMmB,EAAS,MAAMnB,EAAQ,WAAWiB,EAAO,SAAS,CAAC,EAAE,QAAS,CAClE,SAAUA,EAAO,SACjB,MAAO,CACL,GAAI/B,EAAqB+B,EAAO,OAAO,CAAC,EAAE,EAAE,EAC5C,UACEA,EAAO,OAAO,CAAC,EAAE,UAAU,YAAY,CAC3C,EACA,OAAQ,CACN,KAAMA,EAAO,KACf,CAEF,CAAC,EAGD,MAAO,CAAE,OAAAA,EAAQ,OAAAE,EAAQ,aAAc,EAAM,CAC/C,CAEA,OAAO,IACT,CAAC,EACA,QAAQ,IAAM,CACbpB,EAAgB,QAAU,EAC5B,CAAC,GAKH,aAAcO,CAChB,CACF,ECnPA,OAAS,UAAA3B,OAAc,QACvB,OAAS,SAAAyC,MAAa,sBACtB,OAAS,oBAAAC,MAAwB,yBACjC,OACE,mBAAAC,GACA,qBAAAC,GACA,yBAAAC,OACK,yBAEA,SAASC,GAAiB,CAC/B,IAAMC,EAAKJ,GAAgB,EAErBK,EAAYhD,GAAgC,CAAC,CAAC,EAE9C,CAACiD,EAAQC,CAAS,EAAIN,GAC1B,2BACA,CAAC,CACH,EAEAI,EAAU,QAAUC,EAEpBJ,GAAsB,CACpB,UAAYM,GAAc,CAExB,GAAM,CAAE,GAAApB,EAAI,KAAAqB,EAAM,YAAAC,CAAY,EAAIF,EAC9BG,EAAY,GAGhB,GACE,CAAC,UAAW,UAAU,EAAE,SAASF,CAAI,GACrC,CAAC,YAAa,QAAQ,EAAE,SAASC,CAAW,EAC5C,CACA,IAAME,EAAaP,EAAU,QAAQjB,CAAE,EACvCmB,EAAU,CACR,GAAGD,EACH,CAAClB,CAAE,EAAGwB,EAAa,OAAY,EACjC,CAAC,EAEDD,EAAY,CAACC,CACf,CAEA,GAAIF,IAAgB,aAAeC,EAAW,CAC5C,IAAIE,EAAM,GAAGd,EAAiBU,CAAI,CAAC,aACnCX,EAAM,QAAQe,CAAG,CACnB,SAAWH,IAAgB,UAAYC,EAAW,CAChD,IAAIE,EAAM,GAAGd,EAAiBU,CAAI,CAAC,UACnCX,EAAM,MAAMe,CAAG,CACjB,CAEAT,EAAG,KAAK,iBAAkBI,CAAI,CAChC,CACF,CAAC,CACH,CCpDA,OAAS,yBAAAM,OAA6B,yBACtC,OAAS,SAAAhB,MAAa,sBAEf,SAASiB,GAAiB,CAC/BD,GAAsB,CACpB,UAAYN,GAAc,CACxB,GAAM,CAAE,OAAAX,CAAO,EAAIW,EAInB,OAAQX,EAAQ,CACd,IAAK,YACHC,EAAM,QAAQ,sBAAsB,EACpC,MACF,IAAK,SACHA,EAAM,MAAM,mBAAmB,EAC/B,MACF,QACE,KACJ,CACF,CACF,CAAC,CACH,CCtBA,OAAS,mBAAAE,OAAuB,yBAChC,OAAS,aAAAnD,OAAiB,QAC1B,OAAS,SAAAiD,OAAa,sBAEf,SAASkB,GAAwB,CACtC,IAAMZ,EAAKJ,GAAgB,EAE3B,OAAAnD,GAAU,IAAM,CACduD,EAAG,GAAG,uBAAyBI,GAAS,CACtCV,GAAM,MAAMU,EAAK,OAAO,CAE1B,CAAC,CAEH,EAAG,CAACJ,CAAE,CAAC,EAEA,CAAC,CACV,CJoCI,cAAAa,OAAA,oBA9BJ,IAAMC,EAAajE,GAA+B,CAAC,CAAoB,EAE1DkE,EAAgB,IACpBjE,GAAWgE,CAAU,EAUjBE,EACXC,GACG,CACH,GAAM,CAACC,EAAgBC,CAAiB,EAAIpE,GAA6B,EAEnE,CAAE,cAAAqE,EAAe,aAAAC,CAAa,EAAIvD,EAAqB,CAE3D,eAAAoD,CACF,CAAC,EAED,OAAAnB,EAAe,EACfY,EAAe,EACfC,EAAsB,EAKpBC,GAACC,EAAW,SAAX,CACC,MAAO,CACL,cAAAM,EACA,aAAAC,EACA,eAAAH,EACA,kBAAAC,EACA,eAAgBF,EAAM,cACxB,EAEC,SAAAA,EAAM,SACT,CAEJ,EK/DA,OAAS,iBAAApE,GAA6C,cAAAC,OAAkB,QAwBpE,cAAA+D,OAAA,oBAhBJ,IAAMS,EAAmBzE,GACvB,CAAC,CACH,EAEa0E,GAAe,IACnBzE,GAAWwE,CAAgB,EAGvBE,EACXP,GAOEJ,GAACS,EAAiB,SAAjB,CAA0B,MAAOL,EAC/B,SAAAA,EAAM,SACT,EC3BJ,OAAS,aAAAxE,EAAW,UAAAQ,OAAc,QCAlC,OACE,oBAAA0C,GACA,yBAAA8B,OACK,yBAEP,OAAS,qBAAAC,OAAyB,yBAClC,OAAS,eAAAC,MAAmB,sBAErB,SAASC,EACdxB,EACAyB,EACA,CACA,GAAM,CAAE,OAAAC,EAAQ,KAAAzB,EAAM,SAAA0B,CAAS,EAAI3B,EAC7B4B,EACJ,4BAA6B5B,EAAOA,EAAK,wBAA0B,EAC/DX,EAAS,WAAYW,EAAOA,EAAK,OAASA,EAAK,YAC/C6B,EAAgBJ,EAAYC,CAAM,EAClCI,EAAUD,EAAc,SAAS,EACjCE,EAAcxC,GAAiBU,CAAI,EACnC+B,EAAgBX,GAAsBK,CAAM,EAC5CO,EACJ,cAAejC,GAAQA,EAAK,YAAcsB,GAAkB,iBACxD,kBACAQ,IAAY,OACZH,EACAJ,EAAYI,EAAU,CAAE,GAAIG,CAAQ,CAAC,EAEvCI,EAAQ,GACR7B,EAAM,GACV,OAAQhB,EAAQ,CACd,IAAK,MACH6C,EAAQ,eACR7B,EAAM,GAAG0B,CAAW,IAAIC,CAAa,IAAIC,CAAe,GACxD,MACF,IAAK,SACL,IAAK,iBACH,IAAME,EACJL,IAAY,OACRF,EACAL,EAAYK,EAAyB,CAAE,GAAIE,CAAQ,CAAC,EAC1DI,EAAQ,eACR7B,EAAM,GAAG0B,CAAW,IAAIC,CAAa,IAAIG,CAA4B,MAAMF,CAAe,GAC1F,MACF,IAAK,YACHC,EAAQ,kBACR7B,EAAM,GAAG0B,CAAW,IAAIC,CAAa,IAAIC,CAAe,GACxD,MACF,IAAK,WACHC,EAAQ,iBACR7B,EAAM,GAAG0B,CAAW,IAAIC,CAAa,IAAIC,CAAe,GACxD,MACF,IAAK,WACHC,EAAQ,eACR7B,EAAM,GAAGJ,CAAI,IAAI+B,CAAa,IAAIJ,CAAuB,MAAMK,CAAe,GAC9E,MACF,QACE,KACJ,CAEA,MAAO,CACL,MAAAC,EACA,IAAA7B,CACF,CACF,CD7DA,OACE,kBAAA+B,GAEA,mBAAA5C,GACA,wBAAA6C,OACK,yBACP,OAAS,SAAA/C,OAAa,sBAqBZ,OAEE,OAAAmB,EAFF,QAAA6B,OAAA,oBAnBH,SAASC,GAAqB,CACnC,IAAM3C,EAAKJ,GAAgB,EAErBiC,EAAcW,GAAe,EAC7BI,EAAiB3F,GAAO,CAAC,CAAC,EAEhCR,EAAU,IAAM,CACdmG,EAAe,QAAUf,CAC3B,EAAG,CAACA,CAAW,CAAC,EAEhB,IAAMgB,EAAUJ,GAAsBrC,GAAc,EAC/BA,GAAc,CAC/B,GAAM,CAAE,MAAAkC,EAAO,IAAA7B,CAAI,EAAImB,EACrBxB,EACAwC,EAAe,OACjB,EAEIN,GAAS7B,GACXf,GAAM,QACJgD,GAAC,OACE,UAAAJ,EACDzB,EAAC,OAAG,EACJA,EAAC,OAAI,UAAU,4CACZ,SAAAJ,EACH,GACF,CACF,CAEJ,GAEUL,CAAI,CAChB,EAAG,GAAG,EAEN3D,EAAU,KACRuD,EAAG,GAAG,iBAAkB6C,CAAO,EAExB,IAAM,CACX7C,EAAG,IAAI,iBAAkB6C,CAAO,CAClC,GACC,CAAC,CAAC,CACP,CRRQ,OAGM,OAAAhC,EAHN,QAAA6B,OAAA,oBAnBR,IAAMI,EAAsB7B,GAAmC,CAC7D,GAAM,CACJ,eAAA8B,EAEA,WAAAC,EACA,SAAAC,EACA,GAAGC,CACL,EAAIjC,EAEJ,OAAAvE,EAAa,EACbiG,EAAmB,EAGjB9B,EAACW,EAAA,CAAkB,SAAUyB,EAAU,WAAYhC,EAAM,WACvD,SAAAJ,EAACvE,GAAA,CAEC,WAAY0G,EACZ,UAAW/B,EAAM,UAEjB,SAAAyB,GAAC9F,GAAA,CAAuB,GAAIsG,EAC1B,UAAArC,EAACG,EAAA,CAAiB,eAAgB+B,EAChC,SAAAlC,EAACrE,GAAA,CAAgB,cAAe,IAC9B,SAAAqE,EAACxE,GAAA,CAAe,SAAA4E,EAAM,SAAS,EACjC,EACF,EACAJ,EAACtE,GAAA,EAAQ,GACX,EACF,EACF,CAEJ,EAEAuG,EAAmB,YAAc,qBUrDjC,OAAS,cAAA3F,OAAkB,yBAEpB,IAAMgG,GAAa,CACxB/C,EACArC,IAKa,CACb,GAAM,CAAE,aAAAsD,CAAa,EAAIN,EAAc,EACjC,CAAE,MAAAqC,CAAM,EAAIjG,GAAW,EAI7B,OAAIY,GAAS,KAAaqC,EAEtBiB,GAMA,OAAOtD,GAAS,cAAkB,KAChCqF,EAAM,OAASrF,EAAQ,cAClB,OAAOA,GAAS,aAAiB,IACpCA,EAAQ,aACR,KAUDqC,CACT","sourcesContent":["import { PropsWithChildren } from \"react\";\nimport { OrderlyAppConfig } from \"../types\";\nimport {\n ModalProvider,\n OrderlyThemeProvider,\n Toaster,\n TooltipProvider,\n} from \"@orderly.network/ui\";\nimport { useBootstrap } from \"../hooks/useBootstrap\";\nimport {\n ConfigProviderProps,\n OrderlyConfigProvider,\n} from \"@orderly.network/hooks\";\nimport { AppStateProvider, AppStateProviderProps } from \"./appContext\";\nimport { AppConfigProvider } from \"./configContext\";\n\nimport { useExecutionReport } from \"../hooks/useExecutionReport\";\nimport { OrderlyThemeProviderProps } from \"@orderly.network/ui/src/provider/orderlyThemeProvider\";\n\nexport type OrderlyAppProviderProps = PropsWithChildren<\n OrderlyAppConfig & AppStateProviderProps & OrderlyThemeProviderProps\n>;\n\nconst OrderlyAppProvider = (props: OrderlyAppProviderProps) => {\n const {\n onChainChanged,\n // dateFormatting,\n components,\n appIcons,\n ...configProps\n } = props;\n\n useBootstrap();\n useExecutionReport();\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 onChainChanged={onChainChanged}>\n <TooltipProvider delayDuration={300}>\n <ModalProvider>{props.children}</ModalProvider>\n </TooltipProvider>\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 { FC, createContext, PropsWithChildren, useContext, useState } from \"react\";\nimport { useWalletStateHandle } from \"../hooks/useWalletStateHandle\";\nimport { useAppState } from \"../hooks/useAppState\";\nimport { useWalletEvent } from \"../hooks/useWalletEvent\";\nimport { useSettleEvent } from \"../hooks/useSettleEvent\";\nimport { useWalletConnectError } from \"../hooks/useWalletConnectError\";\n\ntype AppContextState = {\n connectWallet: ReturnType<typeof useWalletStateHandle>[\"connectWallet\"];\n /**\n * Whether the current network is not supported\n */\n wrongNetwork: 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};\n\nconst AppContext = createContext<AppContextState>({} as AppContextState);\n\nexport const useAppContext = () => {\n return useContext(AppContext);\n};\n\nexport type AppStateProviderProps = {\n onChainChanged?: (\n chainId: number,\n state: { isTestnet: boolean; isWalletConnected: boolean }\n ) => void;\n};\n\nexport const AppStateProvider: FC<PropsWithChildren<AppStateProviderProps>> = (\n props\n) => {\n const [currentChainId, setCurrentChainId] = useState<number | undefined>();\n\n const { connectWallet, wrongNetwork } = useWalletStateHandle({\n // onChainChanged: props.onChainChanged,\n currentChainId,\n });\n\n useWalletEvent();\n useSettleEvent();\n useWalletConnectError();\n\n // const { networkStatus } = useAppState();\n\n return (\n <AppContext.Provider\n value={{\n connectWallet,\n wrongNetwork,\n currentChainId,\n setCurrentChainId,\n onChainChanged: props.onChainChanged,\n }}\n >\n {props.children}\n </AppContext.Provider>\n );\n};\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useConfig, 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} from \"@orderly.network/types\";\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 isManualConnect = useRef<boolean>(false);\n\n const { account, state: accountState } = useAccount();\n const keyStore = useKeyStore();\n const networkId = useConfig(\"networkId\") as NetworkId;\n const [chains, { checkChainSupport }] = useChains();\n\n const [unsupported, setUnsupported] = useState(false);\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;\n if (typeof id === \"undefined\") return undefined;\n return {\n id: parseChainIdToNumber(id),\n namespace,\n };\n }, [connectedWallet]);\n\n useEffect(() => {\n if (!connectedChain) return;\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 // updateAccount(currentWalletAddress!, connectedWallet!, currentChainId!);\n /**\n * switch account\n */\n if (!!currentWalletAddress && currentWalletAddress !== account.address) {\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\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 // console.log(\"🔗 wallet state handle\", connectedWallet);\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 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 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 { 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\";\n\nexport function useWalletEvent() {\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 toast.success(msg);\n } else if (transStatus === \"FAILED\" && showToast) {\n let msg = `${capitalizeString(side)} failed`;\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\";\n\nexport function useSettleEvent() {\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(\"Settlement completed\");\n break;\n case \"FAILED\":\n toast.error(\"Settlement failed\");\n break;\n default:\n break;\n }\n },\n });\n}\n","import { useEventEmitter } from \"@orderly.network/hooks\";\nimport { useEffect } from \"react\";\nimport { toast } from \"@orderly.network/ui\";\n\nexport function useWalletConnectError() {\n const ee = useEventEmitter();\n\n useEffect(() => {\n ee.on('wallet:connect-error', (data) => {\n toast.error(data.message);\n\n })\n\n }, [ee])\n\n return {}\n}","import { ExtensionPosition } from \"@orderly.network/ui\";\nimport { createContext, PropsWithChildren, ReactNode, 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 // const { appIcons } = props;\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 useWS,\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 } from \"@orderly.network/types\";\nimport { AlgoOrderRootType } from \"@orderly.network/types\";\nimport { parseNumber } from \"@orderly.network/ui\";\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 = capitalizeString(side);\n const displaySymbol = transSymbolformString(symbol);\n const displayQuantity =\n \"algo_type\" in data && data.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL\n ? \"Entire position\"\n : base_dp === undefined\n ? quantity\n : parseNumber(quantity, { dp: base_dp });\n\n let title = \"\";\n let msg = \"\";\n switch (status) {\n case \"NEW\":\n title = \"Order opened\";\n msg = `${displaySide} ${displaySymbol} ${displayQuantity}`;\n break;\n case \"FILLED\":\n case \"PARTIAL_FILLED\":\n const displayTotalExecutedQuantity =\n base_dp === undefined\n ? total_executed_quantity\n : parseNumber(total_executed_quantity, { dp: base_dp });\n title = \"Order filled\";\n msg = `${displaySide} ${displaySymbol} ${displayTotalExecutedQuantity} / ${displayQuantity}`;\n break;\n case \"CANCELLED\":\n title = \"Order cancelled\";\n msg = `${displaySide} ${displaySymbol} ${displayQuantity}`;\n break;\n case \"REJECTED\":\n title = \"Order rejected\";\n msg = `${displaySide} ${displaySymbol} ${displayQuantity}`;\n break;\n case \"REPLACED\":\n title = \"Order edited\";\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 { 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 } = useAppContext();\n const { state } = useAccount();\n /**\n * ignore\n */\n if (options?.skip) return data;\n\n if (wrongNetwork) {\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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@orderly.network/react-app",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.1-alpha.0",
|
|
4
4
|
"description": "Create React App with Orderly Network components",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -17,13 +17,10 @@
|
|
|
17
17
|
"access": "public"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@orderly.network/
|
|
21
|
-
"@orderly.network/
|
|
22
|
-
"@orderly.network/
|
|
23
|
-
"@orderly.network/
|
|
24
|
-
"@orderly.network/default-evm-adapter": "2.0.0-alpha.2",
|
|
25
|
-
"@orderly.network/default-solana-adapter": "2.0.0-alpha.2",
|
|
26
|
-
"@orderly.network/web3-provider-ethers": "2.0.0-alpha.2"
|
|
20
|
+
"@orderly.network/types": "2.0.1-alpha.0",
|
|
21
|
+
"@orderly.network/ui": "2.0.1-alpha.0",
|
|
22
|
+
"@orderly.network/utils": "2.0.1-alpha.0",
|
|
23
|
+
"@orderly.network/hooks": "2.0.1-alpha.0"
|
|
27
24
|
},
|
|
28
25
|
"devDependencies": {
|
|
29
26
|
"@types/react": "^18.3.2",
|
|
@@ -32,7 +29,7 @@
|
|
|
32
29
|
"react-dom": "^18.2.0",
|
|
33
30
|
"tailwindcss": "^3.4.4",
|
|
34
31
|
"tsup": "^7.3.0",
|
|
35
|
-
"tsconfig": "0.3.
|
|
32
|
+
"tsconfig": "0.3.16"
|
|
36
33
|
},
|
|
37
34
|
"peerDependencies": {
|
|
38
35
|
"react": "^18.3.1",
|