UNPKG

@orderly.network/react-app

Version:

Create React App with Orderly Network components

20 lines (17 loc) 11.9 kB
'use strict'; var ui = require('@orderly.network/ui'); var react = require('react'); var hooks = require('@orderly.network/hooks'); var utils = require('@orderly.network/utils'); var types = require('@orderly.network/types'); var i18n = require('@orderly.network/i18n'); var jsxRuntime = require('react/jsx-runtime'); var locale = require('date-fns/locale'); var O=()=>{react.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}=hooks.useWalletConnector(),[s,o]=hooks.useLocalStorage("orderly_link_device",{}),{account:n}=hooks.useAccount(),{isMobile:t}=ui.useScreen(),d=hooks.useConfig(),i=async a=>{localStorage.removeItem(N),await n.disconnect(),await r({label:a});};react.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);};react.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 react.useEffect(()=>{c();},[n,t,e]),{linkDevice:l}}function he(){try{let e=localStorage.getItem("orderly_link_device");return e?hooks.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}=hooks.useWalletConnector();if(typeof s!="function")throw new types.SDKError("Please provide a wallet connector provider");hooks.useEventEmitter();let i=react.useRef(false);hooks.useConfig("brokerId");let {account:c,state:a}=hooks.useAccount(),u=hooks.useKeyStore(),p=hooks.useConfig("networkId"),[g,{checkChainSupport:h}]=hooks.useChains(),[k,S]=react.useState(false),{track:w,setTrackUserId:ie}=hooks.useTrack(),E=react.useMemo(()=>r?.accounts?.[0]?.address,[r]),P=react.useMemo(()=>{let m=r?.chains?.[0]?.id,f=r?.chains?.[0]?.namespace;if(!(typeof m>"u"))return {id:utils.parseChainIdToNumber(m),namespace:f}},[r]);return react.useEffect(()=>{a.status>=types.AccountStatusEnum.EnableTrading&&c.accountId&&ie(c.accountId);},[c,a]),react.useEffect(()=>{if(!o){S(false);return}let m=h(o.id,p);S(!m);},[o,g,h,p]),react.useEffect(()=>{utils.windowGuard(()=>{let m=u.getAddress(),f=JSON.parse(localStorage.getItem(U)??"{}");o?.namespace!==types.ChainNamespace.solana&&m&&c.address!==m&&f.label&&s({autoSelect:{label:f.label,disableModals:true}}).then(x=>{},x=>{});});},[r,c.address]),react.useEffect(()=>{if(r===null&&a.status>types.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:utils.praseChainIdToNumber(P.id),namespace:P.namespace.toUpperCase()},wallet:{name:r?.label??""}}),w(types.EnumTrackerKeys.walletConnect,{wallet:r?.label??"",network:P.namespace.toUpperCase()}),utils.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=utils.praseChainIdToNumber(f.chains[0].id);if(!h(x,p))return {wrongNetwork:true};if(!c)throw new Error("account is not initialized");a.status===types.AccountStatusEnum.EnableTradingWithoutConnected&&(localStorage.removeItem("orderly_link_device"),await c.disconnect());let ce=await c.setAddress(f.accounts[0].address,{provider:f.provider,chain:{id:utils.praseChainIdToNumber(f.chains[0].id),namespace:f.chains[0].namespace.toUpperCase()},wallet:{name:f.label}});return w(types.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}=i18n.useTranslation(),r=hooks.useEventEmitter(),s=react.useRef({}),[o,n]=hooks.useSessionStorage("orderly_wallet_change_id",{});s.current=o,hooks.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=`${utils.capitalizeString(i)} completed`;i==="DEPOSIT"?a=e("transfer.deposit.completed"):i==="WITHDRAW"&&(a=e("transfer.withdraw.completed")),ui.toast.success(a);}else if(l==="FAILED"&&c){let a=`${utils.capitalizeString(i)} failed`;i==="DEPOSIT"?a=e("transfer.deposit.failed"):i==="WITHDRAW"&&(a=e("transfer.withdraw.failed")),ui.toast.error(a);}r.emit("wallet:changed",t);}});}function z(){let{t:e}=i18n.useTranslation();hooks.useSettleSubscription({onMessage:r=>{let{status:s}=r;switch(s){case "COMPLETED":ui.toast.success(e("settle.settlement.completed"));break;case "FAILED":ui.toast.error(e("settle.settlement.failed"));break;}}});}function B(){let{t:e}=i18n.useTranslation(),r=hooks.useEventEmitter(),{setLedgerAddress:s}=hooks.useStorageLedgerAddress();return react.useEffect(()=>{r.on("wallet:connect-error",o=>{ui.toast.error(o.message);}),r.on("wallet:sign-message-with-ledger-error",o=>{window.setTimeout(()=>{ui.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()=>(ui.toast.error(o.message),Promise.resolve()),cancelLabel:e("common.no")}).then(n=>{});});});},[r,e]),{}}function V(e){let{storageChain:r,setStorageChain:s}=hooks.useStorageChain(),[o,n]=react.useState(),[t]=hooks.useChains(),d=hooks.useConfig("networkId"),{connectedChain:i}=hooks.useWalletConnector();return react.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=react.createContext({}),L=()=>react.useContext(Y),j=e=>{let[r,s]=react.useState(false),[o,n]=V(e.defaultChain);_(),hooks.useTrackingInstance();let{connectWallet:t,wrongNetwork:d}=q({currentChainId:o});Q(),z(),B();let i=hooks.useRestrictedInfo(e.restrictedInfo),l=i.restrictedOpen;return jsxRuntime.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=react.createContext({}),rr=()=>react.useContext(G),X=e=>jsxRuntime.jsx(G.Provider,{value:e,children:e.children});function sr(e){return e==="BUY"?i18n.i18n.t("common.buy"):e==="SELL"?i18n.i18n.t("common.sell"):utils.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=utils.transSymbolformString(s),u="algo_type"in e&&e.algo_type===types.AlgoOrderRootType.POSITIONAL_TP_SL?i18n.i18n.t("tpsl.entirePosition"):l===void 0?n:ui.parseNumber(n,{dp:l}),p="",g="";switch(d){case types.OrderStatus.NEW:p=i18n.i18n.t("orders.status.opened.toast.title"),g=`${c} ${a} ${u}`;break;case types.OrderStatus.FILLED:case types.OrderStatus.PARTIAL_FILLED:let h=l===void 0?t:ui.parseNumber(t,{dp:l});p=i18n.i18n.t("orders.status.filled.toast.title"),g=`${c} ${a} ${h} / ${u}`;break;case types.OrderStatus.CANCELLED:p=i18n.i18n.t("orders.status.canceled.toast.title"),g=`${c} ${a} ${u}`;break;case types.OrderStatus.REJECTED:p=i18n.i18n.t("orders.status.rejected.toast.title"),g=`${c} ${a} ${u}`;break;case types.OrderStatus.REPLACED:p=i18n.i18n.t("orders.status.replaced.toast.title"),g=`${o} ${a} ${t} / ${u}`;break;}return {title:p,msg:g}}function oe(){let e=hooks.useEventEmitter(),r=hooks.useSymbolsInfo(),s=react.useRef({});react.useEffect(()=>{s.current=r;},[r]);let o=hooks.useDebouncedCallback(n=>{(d=>{let{title:i,msg:l}=ee(d,s.current);i&&l&&ui.toast.success(jsxRuntime.jsxs("div",{children:[i,jsxRuntime.jsx("br",{}),jsxRuntime.jsx("div",{className:"orderly-text-white/[0.54] orderly-text-xs",children:l})]}));})(n);},100);react.useEffect(()=>(e.on("orders:changed",o),()=>{e.off("orders:changed",o);}),[]);}function ae(){let{t:e}=i18n.useTranslation(),r=i18n.useLocaleCode();return react.useMemo(()=>{let s={[i18n.LocaleEnum.en]:locale.enUS,[i18n.LocaleEnum.zh]:locale.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;hooks.useTrack(),O(),oe();let d=ae();return jsxRuntime.jsx(X,{appIcons:s,brokerName:e.brokerName,children:jsxRuntime.jsx(ui.OrderlyThemeProvider,{components:r,overrides:e.overrides,children:jsxRuntime.jsxs(hooks.OrderlyConfigProvider,{...t,children:[jsxRuntime.jsx(j,{onChainChanged:o,defaultChain:n,restrictedInfo:e.restrictedInfo,children:jsxRuntime.jsx(ui.LocaleProvider,{locale:d,children:jsxRuntime.jsx(ui.TooltipProvider,{delayDuration:300,children:jsxRuntime.jsx(ui.ModalProvider,{children:e.children})})})}),jsxRuntime.jsx(ui.Toaster,{})]})})})};se.displayName="OrderlyAppProvider";var xr=(e,r)=>{let{wrongNetwork:s,disabledConnect:o}=L(),{state:n}=hooks.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}=i18n.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):""}}} exports.OrderlyAppProvider = se; exports.useAppConfig = rr; exports.useAppContext = L; exports.useDataTap = xr; exports.useOrderEntryFormErrorMsg = Tr; //# sourceMappingURL=out.js.map //# sourceMappingURL=index.js.map