UNPKG

@orderly.network/react-app

Version:

Create React App with Orderly Network components

14 lines (12 loc) 11.8 kB
import { OrderlyThemeProvider, LocaleProvider, TooltipProvider, ModalProvider, Toaster, toast, parseNumber, useScreen, modal } from '@orderly.network/ui'; import { createContext, useContext, useEffect, useRef, useMemo, useState } from 'react'; import { useTrack, OrderlyConfigProvider, useAccount, useEventEmitter, useSymbolsInfo, useDebouncedCallback, useTrackingInstance, useRestrictedInfo, useStorageChain, useChains, useConfig, useWalletConnector, useLocalStorage, useKeyStore, useSessionStorage, useWalletSubscription, useSettleSubscription, useStorageLedgerAddress, parseJSON } from '@orderly.network/hooks'; import { transSymbolformString, parseChainIdToNumber, windowGuard, praseChainIdToNumber, capitalizeString } from '@orderly.network/utils'; import { AlgoOrderRootType, OrderStatus, SDKError, AccountStatusEnum, ChainNamespace, EnumTrackerKeys } from '@orderly.network/types'; import { useTranslation, useLocaleCode, LocaleEnum, i18n } from '@orderly.network/i18n'; import { jsx, jsxs } from 'react/jsx-runtime'; import { zhCN, enUS } from 'date-fns/locale'; var O=()=>{useEffect(()=>{let r=new URLSearchParams(window.location.search).get("ref");r&&localStorage.setItem("referral_code",r);},[]);};var N="orderly:wallet-info";function _(){let{connectedChain:e,disconnect:r}=useWalletConnector(),[s,o]=useLocalStorage("orderly_link_device",{}),{account:n}=useAccount(),{isMobile:t}=useScreen(),d=useConfig(),i=async a=>{localStorage.removeItem(N),await n.disconnect(),await r({label:a});};useEffect(()=>{let a=b(),u=JSON.parse(localStorage.getItem(N)??"{}");a&&u&&i(u.label);},[]);let l=async()=>{let a=b();if(!a)return;let{address:u,secretKey:p,chainId:g,chainNamespace:h}=a;if(!await n.importOrderlyKey({address:u,secretKey:p,chainNamespace:h}))return;o({chainId:g,chainNamespace:h});let S=new URL(window.location.href);S.searchParams.delete("link");let w=decodeURIComponent(S.toString());history.replaceState(null,"",w);};useEffect(()=>{t&&!e&&l();},[n,e,t]);let c=async()=>{let{chainId:a,chainNamespace:u}=he()||{};if(t&&!e&&a&&u){let p=n.keyStore.getAddress(),g=n.keyStore.getOrderlyKey(),h=n.keyStore.getAccountId(p);await n.checkOrderlyKey(p,g,h)&&d.set("chainNamespace",u);}};return useEffect(()=>{c();},[n,t,e]),{linkDevice:l}}function he(){try{let e=localStorage.getItem("orderly_link_device");return e?parseJSON(e):null}catch{}}function b(){let r=new URL(window.location.href).searchParams.get("link");if(!r)return;let{a:s,k:o,i:n,n:t}=ye(r)||{};if(s&&o&&n&&t)return {address:s,secretKey:o,chainId:n,chainNamespace:t}}function ye(e){try{let r=JSON.parse(window.atob(e)),s=Math.floor(Date.now()/1e3),o=r.t;return !o||s>o?void 0:r}catch{}}var U="orderly:wallet-info";var q=e=>{let{wallet:r,connect:s,connectedChain:o,disconnect:n,namespace:t}=useWalletConnector();if(typeof s!="function")throw new SDKError("Please provide a wallet connector provider");useEventEmitter();let i=useRef(false);useConfig("brokerId");let {account:c,state:a}=useAccount(),u=useKeyStore(),p=useConfig("networkId"),[g,{checkChainSupport:h}]=useChains(),[k,S]=useState(false),{track:w,setTrackUserId:ie}=useTrack(),E=useMemo(()=>r?.accounts?.[0]?.address,[r]),P=useMemo(()=>{let m=r?.chains?.[0]?.id,f=r?.chains?.[0]?.namespace;if(!(typeof m>"u"))return {id:parseChainIdToNumber(m),namespace:f}},[r]);return useEffect(()=>{a.status>=AccountStatusEnum.EnableTrading&&c.accountId&&ie(c.accountId);},[c,a]),useEffect(()=>{if(!o){S(false);return}let m=h(o.id,p);S(!m);},[o,g,h,p]),useEffect(()=>{windowGuard(()=>{let m=u.getAddress(),f=JSON.parse(localStorage.getItem(U)??"{}");o?.namespace!==ChainNamespace.solana&&m&&c.address!==m&&f.label&&s({autoSelect:{label:f.label,disableModals:true}}).then(x=>{},x=>{});});},[r,c.address]),useEffect(()=>{if(r===null&&a.status>AccountStatusEnum.NotConnected&&!a.validating){c.disconnect();return}if(k||!o||i.current)return;let m=b();E&&E!==c.address&&!m&&(c.setAddress(E,{provider:r?.provider,chain:{id:praseChainIdToNumber(P.id),namespace:P.namespace.toUpperCase()},wallet:{name:r?.label??""}}),w(EnumTrackerKeys.walletConnect,{wallet:r?.label??"",network:P.namespace.toUpperCase()}),windowGuard(()=>{localStorage.setItem(U,JSON.stringify({label:r?.label??""}));})),P?.id!==c.chainId&&c.switchChainId(P?.id);},[r,o,E,P,c.address,a,c.chainId,k]),{connectWallet:async()=>(i.current=true,s({chainId:e.currentChainId}).then(async m=>{if(Array.isArray(m)&&m.length>0&&m[0]&&m[0].accounts.length>0){let f=m[0],x=praseChainIdToNumber(f.chains[0].id);if(!h(x,p))return {wrongNetwork:true};if(!c)throw new Error("account is not initialized");a.status===AccountStatusEnum.EnableTradingWithoutConnected&&(localStorage.removeItem("orderly_link_device"),await c.disconnect());let ce=await c.setAddress(f.accounts[0].address,{provider:f.provider,chain:{id:praseChainIdToNumber(f.chains[0].id),namespace:f.chains[0].namespace.toUpperCase()},wallet:{name:f.label}});return w(EnumTrackerKeys.walletConnect,{wallet:f.label,network:f.chains[0].namespace.toUpperCase()}),{wallet:f,status:ce,wrongNetwork:false}}return null}).finally(()=>{i.current=false;})),wrongNetwork:k}};function Q(){let{t:e}=useTranslation(),r=useEventEmitter(),s=useRef({}),[o,n]=useSessionStorage("orderly_wallet_change_id",{});s.current=o,useWalletSubscription({onMessage:t=>{let{id:d,side:i,transStatus:l}=t,c=true;if(["DEPOSIT","WITHDRAW"].includes(i)&&["COMPLETED","FAILED"].includes(l)){let a=s.current[d];n({...o,[d]:a?void 0:true}),c=!a;}if(l==="COMPLETED"&&c){let a=`${capitalizeString(i)} completed`;i==="DEPOSIT"?a=e("transfer.deposit.completed"):i==="WITHDRAW"&&(a=e("transfer.withdraw.completed")),toast.success(a);}else if(l==="FAILED"&&c){let a=`${capitalizeString(i)} failed`;i==="DEPOSIT"?a=e("transfer.deposit.failed"):i==="WITHDRAW"&&(a=e("transfer.withdraw.failed")),toast.error(a);}r.emit("wallet:changed",t);}});}function z(){let{t:e}=useTranslation();useSettleSubscription({onMessage:r=>{let{status:s}=r;switch(s){case "COMPLETED":toast.success(e("settle.settlement.completed"));break;case "FAILED":toast.error(e("settle.settlement.failed"));break;}}});}function B(){let{t:e}=useTranslation(),r=useEventEmitter(),{setLedgerAddress:s}=useStorageLedgerAddress();return useEffect(()=>{r.on("wallet:connect-error",o=>{toast.error(o.message);}),r.on("wallet:sign-message-with-ledger-error",o=>{window.setTimeout(()=>{modal.confirm({title:e("connector.ledger.signMessageFailed"),content:e("connector.ledger.signMessageFailed.description"),size:"sm",onOk:async()=>(s(o.userAddress),Promise.resolve()),okLabel:e("common.ok"),onCancel:async()=>(toast.error(o.message),Promise.resolve()),cancelLabel:e("common.no")}).then(n=>{});});});},[r,e]),{}}function V(e){let{storageChain:r,setStorageChain:s}=useStorageChain(),[o,n]=useState(),[t]=useChains(),d=useConfig("networkId"),{connectedChain:i}=useWalletConnector();return useEffect(()=>{if(i)n?.(typeof i.id=="number"?i.id:parseInt(i.id));else {if(o)return;let l,c=d==="mainnet"?t.mainnet?.[0]:t.testnet?.[0];typeof e=="function"?l=e(d,t):typeof e=="object"&&(l=d==="mainnet"?e?.mainnet:e?.testnet);let a=l?.id||c?.network_infos?.chain_id;if(!a)return;r?n?.(r.chainId):(s(a),n?.(a));}},[i,t,o,d,n,e]),[o,n]}var Y=createContext({}),L=()=>useContext(Y),j=e=>{let[r,s]=useState(false),[o,n]=V(e.defaultChain);_(),useTrackingInstance();let{connectWallet:t,wrongNetwork:d}=q({currentChainId:o});Q(),z(),B();let i=useRestrictedInfo(e.restrictedInfo),l=i.restrictedOpen;return jsx(Y.Provider,{value:{connectWallet:t,wrongNetwork:d,currentChainId:o,setCurrentChainId:n,onChainChanged:e.onChainChanged,disabledConnect:l,restrictedInfo:i,showAnnouncement:r,setShowAnnouncement:s},children:e.children})};var G=createContext({}),rr=()=>useContext(G),X=e=>jsx(G.Provider,{value:e,children:e.children});function sr(e){return e==="BUY"?i18n.t("common.buy"):e==="SELL"?i18n.t("common.sell"):capitalizeString(e)}function ee(e,r){let{symbol:s,side:o,quantity:n}=e,t="total_executed_quantity"in e?e.total_executed_quantity:0,d="status"in e?e.status:e.algo_status,i=r[s],l=i("base_dp"),c=sr(o),a=transSymbolformString(s),u="algo_type"in e&&e.algo_type===AlgoOrderRootType.POSITIONAL_TP_SL?i18n.t("tpsl.entirePosition"):l===void 0?n:parseNumber(n,{dp:l}),p="",g="";switch(d){case OrderStatus.NEW:p=i18n.t("orders.status.opened.toast.title"),g=`${c} ${a} ${u}`;break;case OrderStatus.FILLED:case OrderStatus.PARTIAL_FILLED:let h=l===void 0?t:parseNumber(t,{dp:l});p=i18n.t("orders.status.filled.toast.title"),g=`${c} ${a} ${h} / ${u}`;break;case OrderStatus.CANCELLED:p=i18n.t("orders.status.canceled.toast.title"),g=`${c} ${a} ${u}`;break;case OrderStatus.REJECTED:p=i18n.t("orders.status.rejected.toast.title"),g=`${c} ${a} ${u}`;break;case OrderStatus.REPLACED:p=i18n.t("orders.status.replaced.toast.title"),g=`${o} ${a} ${t} / ${u}`;break;}return {title:p,msg:g}}function oe(){let e=useEventEmitter(),r=useSymbolsInfo(),s=useRef({});useEffect(()=>{s.current=r;},[r]);let o=useDebouncedCallback(n=>{(d=>{let{title:i,msg:l}=ee(d,s.current);i&&l&&toast.success(jsxs("div",{children:[i,jsx("br",{}),jsx("div",{className:"orderly-text-white/[0.54] orderly-text-xs",children:l})]}));})(n);},100);useEffect(()=>(e.on("orders:changed",o),()=>{e.off("orders:changed",o);}),[]);}function ae(){let{t:e}=useTranslation(),r=useLocaleCode();return useMemo(()=>{let s={[LocaleEnum.en]:enUS,[LocaleEnum.zh]:zhCN};return {locale:r,dialog:{ok:e("common.ok"),cancel:e("common.cancel")},modal:{confirm:e("common.confirm"),cancel:e("common.cancel")},pagination:{morePages:e("ui.pagination.morePages"),rowsPerPage:e("ui.pagination.rowsPerPage")},picker:{selectDate:e("ui.picker.selectDate"),dayPicker:s[r]},empty:{description:e("ui.empty.description")}}},[e,r])}var se=e=>{let{components:r,appIcons:s,onChainChanged:o,defaultChain:n,...t}=e;useTrack(),O(),oe();let d=ae();return jsx(X,{appIcons:s,brokerName:e.brokerName,children:jsx(OrderlyThemeProvider,{components:r,overrides:e.overrides,children:jsxs(OrderlyConfigProvider,{...t,children:[jsx(j,{onChainChanged:o,defaultChain:n,restrictedInfo:e.restrictedInfo,children:jsx(LocaleProvider,{locale:d,children:jsx(TooltipProvider,{delayDuration:300,children:jsx(ModalProvider,{children:e.children})})})}),jsx(Toaster,{})]})})})};se.displayName="OrderlyAppProvider";var xr=(e,r)=>{let{wrongNetwork:s,disabledConnect:o}=L(),{state:n}=useAccount();return r?.skip?e:s||o||typeof r?.accountStatus<"u"&&n.status<r.accountStatus?typeof r?.fallbackData<"u"?r.fallbackData:null:e};function Tr(e){let{t:r}=useTranslation(),s=(n,t,d)=>({quantity:{required:r("orderEntry.orderQuantity.error.required"),min:r("orderEntry.orderQuantity.error.min",{value:t}),max:r("orderEntry.orderQuantity.error.max",{value:t})},order_quantity:{required:r("orderEntry.orderQuantity.error.required"),min:r("orderEntry.orderQuantity.error.min",{value:t}),max:r("orderEntry.orderQuantity.error.max",{value:t})},order_price:{required:r("orderEntry.orderPrice.error.required"),min:r("orderEntry.orderPrice.error.min",{value:t}),max:r("orderEntry.orderPrice.error.max",{value:t})},trigger_price:{required:r("orderEntry.triggerPrice.error.required"),min:r("orderEntry.triggerPrice.error.min",{value:t}),max:r("orderEntry.triggerPrice.error.max",{value:t})},tp_trigger_price:{min:r("orderEntry.tpTriggerPrice.error.min",{value:t}),max:r("orderEntry.tpTriggerPrice.error.max",{value:t})},sl_trigger_price:{min:r("orderEntry.slTriggerPrice.error.min",{value:t}),max:r("orderEntry.slTriggerPrice.error.max",{value:t})},total:{min:r("orderEntry.total.error.min",{value:t})}})[n]?.[d];return {parseErrorMsg:n=>{let{type:t,value:d}=e?.[n]||{};return t?s(n,d,t):""}}} export { se as OrderlyAppProvider, rr as useAppConfig, L as useAppContext, xr as useDataTap, Tr as useOrderEntryFormErrorMsg }; //# sourceMappingURL=out.js.map //# sourceMappingURL=index.mjs.map