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