@orderly.network/ui-connector 2.0.0 → 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 CHANGED
@@ -3,7 +3,7 @@ import * as _orderly_network_types from '@orderly.network/types';
3
3
  import { AccountStatusEnum, NetworkId } from '@orderly.network/types';
4
4
  import * as react from 'react';
5
5
  import { PropsWithChildren, ReactElement } from 'react';
6
- import { ButtonProps, DataTableProps } from '@orderly.network/ui';
6
+ import { ButtonProps, DataTableProps, TableViewProps } from '@orderly.network/ui';
7
7
 
8
8
  type WalletConnectContentProps = {
9
9
  initAccountState: AccountStatusEnum;
@@ -67,16 +67,25 @@ declare const AuthGuard: {
67
67
  displayName: string;
68
68
  };
69
69
 
70
- declare const AuthGuardDataTable: <RecordType extends unknown>(props: PropsWithChildren<DataTableProps<RecordType> & Omit<GuardViewProps, "status"> & {
71
- status?: AccountStatusEnum | undefined;
72
- classNames?: ({
73
- root?: string | undefined;
74
- header?: string | undefined;
75
- body?: string | undefined;
76
- footer?: string | undefined;
77
- } & {
78
- authGuardDescription?: string | undefined;
79
- }) | undefined;
70
+ declare const AuthGuardDataTable: <RecordType extends unknown>(props: PropsWithChildren<DataTableProps<RecordType> & Omit<GuardViewProps$1, "status"> & {
71
+ status?: AccountStatusEnum;
72
+ classNames?: DataTableProps<RecordType>["classNames"] & {
73
+ authGuardDescription?: string;
74
+ };
75
+ }>) => react_jsx_runtime.JSX.Element;
76
+ type GuardViewProps$1 = {
77
+ status: AccountStatusEnum;
78
+ description?: alertMessages;
79
+ labels?: alertMessages;
80
+ className?: string;
81
+ visible?: boolean;
82
+ };
83
+
84
+ declare const AuthGuardTableView: <RecordType extends unknown>(props: PropsWithChildren<TableViewProps<RecordType> & Omit<GuardViewProps, "status"> & {
85
+ status?: AccountStatusEnum;
86
+ classNames?: DataTableProps<RecordType>["classNames"] & {
87
+ authGuardDescription?: string;
88
+ };
80
89
  }>) => react_jsx_runtime.JSX.Element;
81
90
  type GuardViewProps = {
82
91
  status: AccountStatusEnum;
@@ -129,4 +138,4 @@ declare const AuthGuardTooltip: {
129
138
  displayName: string;
130
139
  };
131
140
 
132
- export { AuthGuard, AuthGuardDataTable, AuthGuardEmpty, AuthGuardTooltip, WalletConnectContent, type WalletConnectContentProps, WalletConnectorModalId, WalletConnectorSheetId, WalletConnectorWidget, useWalletConnectorBuilder };
141
+ export { AuthGuard, AuthGuardDataTable, AuthGuardEmpty, AuthGuardTableView, AuthGuardTooltip, WalletConnectContent, type WalletConnectContentProps, WalletConnectorModalId, WalletConnectorSheetId, WalletConnectorWidget, useWalletConnectorBuilder };
package/dist/index.d.ts CHANGED
@@ -3,7 +3,7 @@ import * as _orderly_network_types from '@orderly.network/types';
3
3
  import { AccountStatusEnum, NetworkId } from '@orderly.network/types';
4
4
  import * as react from 'react';
5
5
  import { PropsWithChildren, ReactElement } from 'react';
6
- import { ButtonProps, DataTableProps } from '@orderly.network/ui';
6
+ import { ButtonProps, DataTableProps, TableViewProps } from '@orderly.network/ui';
7
7
 
8
8
  type WalletConnectContentProps = {
9
9
  initAccountState: AccountStatusEnum;
@@ -67,16 +67,25 @@ declare const AuthGuard: {
67
67
  displayName: string;
68
68
  };
69
69
 
70
- declare const AuthGuardDataTable: <RecordType extends unknown>(props: PropsWithChildren<DataTableProps<RecordType> & Omit<GuardViewProps, "status"> & {
71
- status?: AccountStatusEnum | undefined;
72
- classNames?: ({
73
- root?: string | undefined;
74
- header?: string | undefined;
75
- body?: string | undefined;
76
- footer?: string | undefined;
77
- } & {
78
- authGuardDescription?: string | undefined;
79
- }) | undefined;
70
+ declare const AuthGuardDataTable: <RecordType extends unknown>(props: PropsWithChildren<DataTableProps<RecordType> & Omit<GuardViewProps$1, "status"> & {
71
+ status?: AccountStatusEnum;
72
+ classNames?: DataTableProps<RecordType>["classNames"] & {
73
+ authGuardDescription?: string;
74
+ };
75
+ }>) => react_jsx_runtime.JSX.Element;
76
+ type GuardViewProps$1 = {
77
+ status: AccountStatusEnum;
78
+ description?: alertMessages;
79
+ labels?: alertMessages;
80
+ className?: string;
81
+ visible?: boolean;
82
+ };
83
+
84
+ declare const AuthGuardTableView: <RecordType extends unknown>(props: PropsWithChildren<TableViewProps<RecordType> & Omit<GuardViewProps, "status"> & {
85
+ status?: AccountStatusEnum;
86
+ classNames?: DataTableProps<RecordType>["classNames"] & {
87
+ authGuardDescription?: string;
88
+ };
80
89
  }>) => react_jsx_runtime.JSX.Element;
81
90
  type GuardViewProps = {
82
91
  status: AccountStatusEnum;
@@ -129,4 +138,4 @@ declare const AuthGuardTooltip: {
129
138
  displayName: string;
130
139
  };
131
140
 
132
- export { AuthGuard, AuthGuardDataTable, AuthGuardEmpty, AuthGuardTooltip, WalletConnectContent, type WalletConnectContentProps, WalletConnectorModalId, WalletConnectorSheetId, WalletConnectorWidget, useWalletConnectorBuilder };
141
+ export { AuthGuard, AuthGuardDataTable, AuthGuardEmpty, AuthGuardTableView, AuthGuardTooltip, WalletConnectContent, type WalletConnectContentProps, WalletConnectorModalId, WalletConnectorSheetId, WalletConnectorWidget, useWalletConnectorBuilder };
package/dist/index.js CHANGED
@@ -8,16 +8,17 @@ var hooks = require('@orderly.network/hooks');
8
8
  var reactApp = require('@orderly.network/react-app');
9
9
  var uiChainSelector = require('@orderly.network/ui-chain-selector');
10
10
 
11
- var z=e=>{let{title:t,description:n}=e;return jsxRuntime.jsxs(ui.Box,{position:"relative",className:"oui-pl-8",children:[jsxRuntime.jsxs(ui.Box,{children:[jsxRuntime.jsx(ui.Text,{as:"div",intensity:98,size:"sm",children:t}),jsxRuntime.jsx(ui.Text,{as:"div",intensity:54,size:"2xs",children:n})]}),jsxRuntime.jsx(ce,{...e})]})},ce=e=>{let{active:t,isLoading:n,isCompleted:s}=e;return jsxRuntime.jsx(ui.Match,{className:"oui-absolute oui-left-0 oui-top-1 oui-z-10",value:()=>s?"completed":n?"loading":t?"active":"normal",case:{loading:jsxRuntime.jsx("div",{children:jsxRuntime.jsx(ui.Spinner,{size:"sm",className:"oui-ml-1"})}),completed:jsxRuntime.jsx("div",{children:jsxRuntime.jsx(ui.CheckedCircleFillIcon,{opacity:1,className:"oui-text-[rgba(96,140,255,1)]"})})},default:jsxRuntime.jsx(ue,{active:!!t})})},ue=({active:e,className:t})=>jsxRuntime.jsx("div",{className:ui.cn("oui-w-[8.3px] oui-h-[8.3px] oui-rounded-full oui-ml-2 oui-mt-1",t,e?"oui-bg-primary-light":"oui-bg-base-2")});var R=e=>{let{initAccountState:t=types.AccountStatusEnum.NotConnected}=e,[n,s]=react.useState(!0),{state:o}=hooks.useAccount(),[u,m]=react.useState(t),[a,f]=react.useState(0),[c,r]=react.useState(!1),[w]=hooks.useLocalStorage("oui-first-show-wallet-connector-dialog",void 0);react.useEffect(()=>()=>{localStorage.setItem("oui-first-show-wallet-connector-dialog","1");},[]),react.useEffect(()=>{m(o.status);},[o]);let y=react.useMemo(()=>{let i=[];return t<types.AccountStatusEnum.SignedIn&&i.push({key:"signIn",title:"Sign In",description:"Confirm you are the owner of this wallet"}),t<types.AccountStatusEnum.EnableTrading&&i.push({key:"enableTrading",title:"Enable Trading",description:"Enable secure access to our API for lightning fast trading"}),i},[]),W=()=>(r(!0),e.enableTrading(n).then(async i=>{r(!1),f(d=>d+1);try{await e.enableTradingComplted?.();}catch{}typeof e.onCompleted=="function"?e.onCompleted():typeof e.close=="function"&&e.close();},i=>{r(!1),i!==-1&&ui.toast.error(i.message??"User rejected the request");}).catch(i=>{r(!1);})),v=()=>(r(!0),e.signIn().then(i=>{f(d=>d+1),W();},i=>{r(!1),i!==-1&&ui.toast.error("User rejected the request");}).catch(i=>{r(!1);}));return jsxRuntime.jsxs(ui.Box,{id:"oui-wallet-connect-dialog-content",className:"oui-font-semibold",children:[jsxRuntime.jsx(ui.Text,{intensity:54,size:"xs",children:"Your previous access has expired, you will receive a signature request to enable trading. Signing is free and will not send a transaction."}),jsxRuntime.jsxs(ui.Box,{p:4,my:6,intensity:600,r:"lg",className:"oui-space-y-5",position:"relative",children:[y.map((i,d)=>jsxRuntime.jsx(z,{title:i.title,description:i.description,isCompleted:a>d,active:a===d,isLoading:c&&a===d},i.key)),y.length>1&&jsxRuntime.jsx(ui.Box,{position:"absolute",height:"38px",left:28,top:18,zIndex:0,children:jsxRuntime.jsx(ui.Divider,{lineStyle:"dashed",direction:"vertical",intensity:16,className:"oui-h-full"})})]}),e.showRefCodeInput&&y.length==2&&jsxRuntime.jsx(Te,{...e}),w&&jsxRuntime.jsxs(ui.Flex,{justify:"between",itemAlign:"center",children:[jsxRuntime.jsx(Se,{}),jsxRuntime.jsx(ui.Switch,{color:"primary",checked:n,onCheckedChange:s,disabled:c,className:"data-[state=checked]:oui-bg-[#3347FD]"})]}),jsxRuntime.jsx(ui.Flex,{justify:"center",mt:8,children:jsxRuntime.jsx(ui.Box,{width:"45%",children:jsxRuntime.jsx(xe,{state:u,signIn:v,enableTrading:W,loading:c,disabled:u>=types.AccountStatusEnum.EnableTrading})})})]})},xe=({state:e,signIn:t,enableTrading:n,loading:s,disabled:o})=>jsxRuntime.jsx(ui.Match,{value:()=>e<=types.AccountStatusEnum.NotSignedIn?"signIn":"enableTrading",case:{signIn:jsxRuntime.jsx(ui.Button,{fullWidth:!0,onClick:()=>t(),loading:s,disabled:o,children:"Sign In"}),enableTrading:jsxRuntime.jsx(ui.Button,{fullWidth:!0,onClick:()=>n(),loading:s,disabled:o,children:"Enable Trading"})}}),Te=e=>jsxRuntime.jsx(ui.TextField,{placeholder:"Referral code (Optional)",fullWidth:!0,label:"",value:e.refCode,onChange:t=>{e.setRefCode(t.target.value);},classNames:{label:"oui-text-base-contrast-54 oui-text-xs",input:"placeholder:oui-text-base-contrast-20 placeholder:oui-text-sm"},formatters:[ui.inputFormatter.createRegexInputFormatter(/[^A-Z0-9]/g)],onClear:()=>{e.setRefCode("");},autoComplete:"off",helpText:e.helpText,className:"oui-mb-4",color:e.helpText?"danger":void 0}),Se=()=>jsxRuntime.jsx(ui.Tooltip,{content:"Toggle this option to skip these steps next time you want to trade.",className:"oui-max-w-[300px]",children:jsxRuntime.jsx("button",{onClick:()=>{window.innerWidth>768||ui.modal.alert({title:"Remember me",message:jsxRuntime.jsx("span",{className:"oui-text-2xs oui-text-base-contrast/60",children:"Toggle this option to skip these steps next time you want to trade."})});},children:jsxRuntime.jsx(ui.Text,{intensity:54,size:"xs",className:"oui-underline oui-underline-offset-4 oui-decoration-dashed oui-decoration-base-contrast-36",children:"Remember me"})})});var B=()=>{let{account:e,state:t,createOrderlyKey:n,createAccount:s}=hooks.useAccount(),[o,u]=react.useState(""),[m,a]=react.useState(""),{trigger:f}=hooks.useLazyQuery(`/v1/public/referral/verify_ref_code?referral_code=${o}`);react.useEffect(()=>{let h=localStorage.getItem("referral_code");h!=null&&u(h);},[]);let{referral_code:c,isLoading:r}=hooks.useGetReferralCode(e.accountId),[w,{error:y,isMutating:W}]=hooks.useMutation("/v1/referral/bind","POST");react.useEffect(()=>{o.length===0&&a("");},[o]);let v=()=>{ui.toast.success("Wallet connected"),o.length>=4&&o.length<=10&&w({referral_code:o}).finally(()=>{localStorage.removeItem("referral_code");});},i=async()=>{if(o.length===0)return Promise.resolve(void 0);if(o.length>0&&(o.length<4||o.length>10))return Promise.resolve("The referral_code must be 4 to 10 characters long, only accept upper case roman characters and numbers");let{exist:h}=await f();return h===!1?Promise.resolve("This referral code does not exist."):Promise.resolve(void 0)},d=(c?.length||0)===0&&!r,re=async()=>{if(d){let h=await i();if(typeof h<"u")return a(h),Promise.reject(-1)}return a(""),s()};return {enableTrading:async h=>{if(d){let L=await i();if(typeof L<"u")return a(L),Promise.reject(-1)}return a(""),n(h)},initAccountState:t.status,signIn:re,enableTradingComplted:v,refCode:o,setRefCode:u,helpText:m,showRefCodeInput:d}};var A="walletConnector",k="walletConnectorSheet",G=e=>{let t=B();return jsxRuntime.jsx(R,{...t,...e})};ui.registerSimpleDialog(A,G,{size:"sm",title:"Connect wallet"});ui.registerSimpleSheet(k,G,{title:"Connect wallet"});var Y={connectWallet:"Connect wallet",switchChain:"Switch network",enableTrading:"Enable trading",signin:"Sign in"},Z={connectWallet:"Please Connect wallet before starting to trade",switchChain:"Please switch to a supported network to continue",enableTrading:"Please Enable trading before starting to trade",signin:"Please sign in before starting to trade"};var x=e=>{let{status:t=types.AccountStatusEnum.EnableTrading,buttonProps:n,fallback:s,descriptions:o,classNames:u,networkId:m,id:a,bridgeLessOnly:f}=e,{state:c}=hooks.useAccount(),{wrongNetwork:r}=reactApp.useAppContext(),w={...Y,...e.labels},y=react.useMemo(()=>typeof s<"u"?s({validating:c.validating,status:c.status,wrongNetwork:r}):c.validating?jsxRuntime.jsx(S,{angle:45,disabled:!0,loading:!0,description:o?.connectWallet,id:a,type:"button",...n,children:w.connectWallet}):jsxRuntime.jsx(He,{bridgeLessOnly:f,status:c.status,buttonProps:{...n,id:a,type:"button"},wrongNetwork:r,networkId:e.networkId,labels:w,descriptions:o}),[c.status,c.validating,n,r]);return jsxRuntime.jsx(ui.Either,{value:c.status>=t&&!r,left:y,children:e.children})},He=e=>{let{buttonProps:t,labels:n,descriptions:s}=e,{connectWallet:o}=reactApp.useAppContext(),{account:u}=hooks.useAccount(),m=hooks.useMediaQuery(types.MEDIA_TABLET),a=()=>{ui.modal.show(m?k:A).then(r=>{},r=>{});},f=async()=>{let r=await o();r&&(r.wrongNetwork?c():(r?.status??types.AccountStatusEnum.NotConnected)<types.AccountStatusEnum.EnableTrading&&a());},c=()=>{u.once("validate:end",r=>{r<types.AccountStatusEnum.EnableTrading?a():ui.toast.success("Wallet connected");}),ui.modal.show(uiChainSelector.ChainSelectorId,{networkId:e.networkId,bridgeLessOnly:e.bridgeLessOnly}).then(r=>{r.wrongNetwork||e.status>=types.AccountStatusEnum.Connected&&(e.status<types.AccountStatusEnum.EnableTrading?a():ui.toast.success("Wallet connected"));},r=>{});};return e.wrongNetwork?jsxRuntime.jsx(S,{color:"warning",onClick:()=>{c();},description:s?.switchChain,...t,children:n.switchChain}):jsxRuntime.jsx(ui.Match,{value:e.status,case:r=>{if(r<=types.AccountStatusEnum.NotConnected)return jsxRuntime.jsx(S,{size:"lg",onClick:()=>{f();},variant:"gradient",angle:45,description:s?.connectWallet,...t,children:n.connectWallet});if(r<=types.AccountStatusEnum.NotSignedIn)return jsxRuntime.jsx(S,{size:"lg",onClick:()=>{a();},angle:45,description:s?.signin,...t,children:n.signin})},default:jsxRuntime.jsx(S,{size:"lg",description:s?.enableTrading,...t,onClick:()=>a(),children:n.enableTrading})})};x.displayName="AuthGuard";var S=e=>{let{description:t,...n}=e;return jsxRuntime.jsxs(ui.Flex,{direction:"column",children:[jsxRuntime.jsx(ui.Button,{...n}),!!t&&jsxRuntime.jsx(ui.Box,{mt:4,className:"oui-leading-none",style:{lineHeight:0},children:jsxRuntime.jsx(ui.Text,{size:"2xs",intensity:36,children:t})})]})};var je=e=>{let{status:t=types.AccountStatusEnum.EnableTrading,labels:n,description:s,dataSource:o,...u}=e,m=reactApp.useDataTap(o,{accountStatus:t}),{state:a}=hooks.useAccount(),{wrongNetwork:f}=reactApp.useAppContext();return jsxRuntime.jsx(ui.DataTable,{...u,dataSource:m,ignoreLoadingCheck:f||a.status<t||e.ignoreLoadingCheck,emptyView:jsxRuntime.jsx(Je,{status:t,description:s,labels:n,className:e.classNames?.authGuardDescription,visible:!a.validating})})},Je=e=>{let t={...Z,...e.description};return e.visible?jsxRuntime.jsx(ui.Flex,{py:8,children:jsxRuntime.jsx(x,{status:e.status,labels:e.labels,descriptions:t,buttonProps:{size:"md"},children:jsxRuntime.jsx(ui.ExtensionSlot,{position:"emptyDataState"})})}):null};var ee=e=>{let{hint:t={connectWallet:"Please connect wallet before starting to trade",signIn:"Please sign in before starting to trade",enableTrading:"Please sign in before starting to trade",wrongNetwork:"Please switch to a supported network to continue."},status:n}=e;return jsxRuntime.jsx(ui.Box,{my:8,children:jsxRuntime.jsx(x,{status:n,descriptions:{...t,switchChain:t.wrongNetwork},children:e.children||jsxRuntime.jsx(ui.EmptyDataState,{})})})};ee.displayName="AuthGuardEmpty";var oe=e=>{let{opactiy:t=90,tooltip:n={connectWallet:"Please connect wallet before set up",signIn:"Please sign in before set up",enableTrading:"Please enable trading before set up",wrongNetwork:"Please switch to a supported network to set up"}}=e,{state:s}=hooks.useAccount(),o=!0,{wrongNetwork:u}=reactApp.useAppContext(),m=react.useMemo(()=>{if(u)return n?.wrongNetwork;switch(s.status){case types.AccountStatusEnum.NotConnected:return n?.connectWallet;case types.AccountStatusEnum.NotSignedIn:return n?.signIn;case types.AccountStatusEnum.DisabledTrading:return n?.enableTrading;case types.AccountStatusEnum.EnableTrading:return "";default:return e.content}},[e.content,s,o,n]),a=react.useMemo(()=>{switch(s.status){case types.AccountStatusEnum.NotConnected:case types.AccountStatusEnum.NotSignedIn:return t;case types.AccountStatusEnum.EnableTrading:return void 0;default:return}},[e.opactiy,s,o]);return jsxRuntime.jsx(ui.Tooltip,{content:m,className:"oui-text-2xs",align:e.align,alignOffset:e.alignOffset,side:e.side,sideOffset:e.sideOffset,children:jsxRuntime.jsx("div",{style:{opacity:a},children:e.children})})};oe.displayName="AuthGuardTooltip";
11
+ var _=e=>{let{title:t,description:n}=e;return jsxRuntime.jsxs(ui.Box,{position:"relative",className:"oui-pl-8",children:[jsxRuntime.jsxs(ui.Box,{children:[jsxRuntime.jsx(ui.Text,{as:"div",intensity:98,size:"sm",children:t}),jsxRuntime.jsx(ui.Text,{as:"div",intensity:54,size:"2xs",children:n})]}),jsxRuntime.jsx(ue,{...e})]})},ue=e=>{let{active:t,isLoading:n,isCompleted:r}=e;return jsxRuntime.jsx(ui.Match,{className:"oui-absolute oui-left-0 oui-top-1 oui-z-10",value:()=>r?"completed":n?"loading":t?"active":"normal",case:{loading:jsxRuntime.jsx("div",{children:jsxRuntime.jsx(ui.Spinner,{size:"sm",className:"oui-ml-1"})}),completed:jsxRuntime.jsx("div",{children:jsxRuntime.jsx(ui.CheckedCircleFillIcon,{opacity:1,className:"oui-text-[rgba(96,140,255,1)]"})})},default:jsxRuntime.jsx(de,{active:!!t})})},de=({active:e,className:t})=>jsxRuntime.jsx("div",{className:ui.cn("oui-w-[8.3px] oui-h-[8.3px] oui-rounded-full oui-ml-2 oui-mt-1",t,e?"oui-bg-primary-light":"oui-bg-base-2")});var M=e=>{let{initAccountState:t=types.AccountStatusEnum.NotConnected}=e,[n,r]=react.useState(!0),{state:o}=hooks.useAccount(),[g,p]=react.useState(t),[s,d]=react.useState(0),[m,u]=react.useState(!1),[a]=hooks.useLocalStorage("orderly-first-show-wallet-connector-dialog",void 0);react.useEffect(()=>()=>{localStorage.setItem("orderly-first-show-wallet-connector-dialog","1");},[]),react.useEffect(()=>{p(o.status);},[o]);let S=react.useMemo(()=>{let i=[];return t<types.AccountStatusEnum.SignedIn&&i.push({key:"signIn",title:"Sign In",description:"Confirm you are the owner of this wallet"}),t<types.AccountStatusEnum.EnableTrading&&i.push({key:"enableTrading",title:"Enable Trading",description:"Enable secure access to our API for lightning fast trading"}),i},[]),E=()=>(u(!0),e.enableTrading(n).then(async i=>{u(!1),d(l=>l+1);try{await e.enableTradingComplted?.();}catch{}typeof e.onCompleted=="function"?e.onCompleted():typeof e.close=="function"&&e.close();},i=>{if(u(!1),i===-1)return;let l=i.toString();l.includes("rejected")&&(l="User rejected the request."),ui.toast.error(l);}).catch(i=>{u(!1);})),G=()=>(u(!0),e.signIn().then(i=>{d(l=>l+1),E();},i=>{if(u(!1),i===-1)return;let l=i.toString();l.includes("rejected")&&(l="User rejected the request."),ui.toast.error(l);}).catch(i=>{u(!1);}));return jsxRuntime.jsxs(ui.Box,{id:"oui-wallet-connect-dialog-content",className:"oui-font-semibold",children:[jsxRuntime.jsx(ui.Text,{intensity:54,size:"xs",children:"Your previous access has expired, you will receive a signature request to enable trading. Signing is free and will not send a transaction."}),jsxRuntime.jsxs(ui.Box,{p:4,my:6,intensity:600,r:"lg",className:"oui-space-y-5",position:"relative",children:[S.map((i,l)=>jsxRuntime.jsx(_,{title:i.title,description:i.description,isCompleted:s>l,active:s===l,isLoading:m&&s===l},i.key)),S.length>1&&jsxRuntime.jsx(ui.Box,{position:"absolute",height:"38px",left:28,top:18,zIndex:0,children:jsxRuntime.jsx(ui.Divider,{lineStyle:"dashed",direction:"vertical",intensity:16,className:"oui-h-full"})})]}),e.showRefCodeInput&&S.length==2&&jsxRuntime.jsx(xe,{...e}),a&&jsxRuntime.jsxs(ui.Flex,{justify:"between",itemAlign:"center",children:[jsxRuntime.jsx(Pe,{}),jsxRuntime.jsx(ui.Switch,{color:"primary",checked:n,onCheckedChange:r,disabled:m,className:"data-[state=checked]:oui-bg-[#3347FD]"})]}),jsxRuntime.jsx(ui.Flex,{justify:"center",mt:8,children:jsxRuntime.jsx(ui.Box,{width:"45%",children:jsxRuntime.jsx(Te,{state:g,signIn:G,enableTrading:E,loading:m,disabled:g>=types.AccountStatusEnum.EnableTrading})})})]})},Te=({state:e,signIn:t,enableTrading:n,loading:r,disabled:o})=>jsxRuntime.jsx(ui.Match,{value:()=>e<=types.AccountStatusEnum.NotSignedIn?"signIn":"enableTrading",case:{signIn:jsxRuntime.jsx(ui.Button,{fullWidth:!0,onClick:()=>t(),loading:r,disabled:o,children:"Sign In"}),enableTrading:jsxRuntime.jsx(ui.Button,{fullWidth:!0,onClick:()=>n(),loading:r,disabled:o,children:"Enable Trading"})}}),xe=e=>jsxRuntime.jsx(ui.TextField,{placeholder:"Referral code (Optional)",fullWidth:!0,label:"",value:e.refCode,onChange:t=>{e.setRefCode(t.target.value);},classNames:{label:"oui-text-base-contrast-54 oui-text-xs",input:"placeholder:oui-text-base-contrast-20 placeholder:oui-text-sm"},formatters:[ui.inputFormatter.createRegexInputFormatter(/[^A-Z0-9]/g)],onClear:()=>{e.setRefCode("");},autoComplete:"off",helpText:e.helpText,className:"oui-mb-4",color:e.helpText?"danger":void 0}),Pe=()=>jsxRuntime.jsx(ui.Tooltip,{content:"Toggle this option to skip these steps next time you want to trade.",className:"oui-max-w-[300px]",children:jsxRuntime.jsx("button",{onClick:()=>{window.innerWidth>768||ui.modal.alert({title:"Remember me",message:jsxRuntime.jsx("span",{className:"oui-text-2xs oui-text-base-contrast/60",children:"Toggle this option to skip these steps next time you want to trade."})});},children:jsxRuntime.jsx(ui.Text,{intensity:54,size:"xs",className:"oui-underline oui-underline-offset-4 oui-decoration-dashed oui-decoration-base-contrast-36",children:"Remember me"})})});var B=()=>{let{account:e,state:t,createOrderlyKey:n,createAccount:r}=hooks.useAccount(),[o,g]=react.useState(""),[p,s]=react.useState(""),{trigger:d}=hooks.useLazyQuery(`/v1/public/referral/verify_ref_code?referral_code=${o}`);react.useEffect(()=>{let b=localStorage.getItem("referral_code");b!=null&&g(b);},[]);let{referral_code:m,isLoading:u}=hooks.useGetReferralCode(e.accountId),[a,{error:S,isMutating:E}]=hooks.useMutation("/v1/referral/bind","POST");react.useEffect(()=>{o.length===0&&s("");},[o]);let G=()=>{ui.toast.success("Wallet connected"),o.length>=4&&o.length<=10&&a({referral_code:o}).finally(()=>{localStorage.removeItem("referral_code");});},i=async()=>{if(o.length===0)return Promise.resolve(void 0);if(o.length>0&&(o.length<4||o.length>10))return Promise.resolve("The referral_code must be 4 to 10 characters long, only accept upper case roman characters and numbers");let{exist:b}=await d();return b===!1?Promise.resolve("This referral code does not exist."):Promise.resolve(void 0)},l=(m?.length||0)===0&&!u,se=async()=>{if(l){let b=await i();if(typeof b<"u")return s(b),Promise.reject(-1)}return s(""),r()};return {enableTrading:async b=>{if(l){let O=await i();if(typeof O<"u")return s(O),Promise.reject(-1)}return s(""),n(b)},initAccountState:t.status,signIn:se,enableTradingComplted:G,refCode:o,setRefCode:g,helpText:p,showRefCodeInput:l}};var k="walletConnector",v="walletConnectorSheet",D=e=>{let t=B();return jsxRuntime.jsx(M,{...t,...e})};ui.registerSimpleDialog(k,D,{size:"sm",title:"Connect wallet"});ui.registerSimpleSheet(v,D,{title:"Connect wallet"});var $={connectWallet:"Connect wallet",switchChain:"Wrong network",enableTrading:"Enable trading",signin:"Sign in"},W={connectWallet:"Please Connect wallet before starting to trade",switchChain:"Please switch to a supported network to continue",enableTrading:"Please Enable trading before starting to trade",signin:"Please sign in before starting to trade"};var C=e=>{let{status:t=types.AccountStatusEnum.EnableTrading,buttonProps:n,fallback:r,descriptions:o,classNames:g,networkId:p,id:s,bridgeLessOnly:d}=e,{state:m}=hooks.useAccount(),{wrongNetwork:u}=reactApp.useAppContext(),a={...$,...e.labels},S=react.useMemo(()=>typeof r<"u"?r({validating:m.validating,status:m.status,wrongNetwork:u}):m.validating?jsxRuntime.jsx(x,{angle:45,disabled:!0,loading:!0,description:o?.connectWallet,id:s,type:"button",...n,children:a.connectWallet}):jsxRuntime.jsx(Qe,{bridgeLessOnly:d,status:m.status,buttonProps:{...n,id:s,type:"button"},wrongNetwork:u,networkId:e.networkId,labels:a,descriptions:o}),[m.status,m.validating,n,u]);return jsxRuntime.jsx(ui.Either,{value:m.status>=t&&!u,left:S,children:e.children})},Qe=e=>{let{buttonProps:t,labels:n,descriptions:r}=e,{connectWallet:o}=reactApp.useAppContext(),{account:g}=hooks.useAccount(),{isMobile:p}=ui.useScreen(),s=hooks.useMediaQuery(types.MEDIA_TABLET),d=()=>{ui.modal.show(s?v:k).then(a=>{},a=>{});},m=async()=>{let a=await o();a&&(a.wrongNetwork?u():(a?.status??types.AccountStatusEnum.NotConnected)<types.AccountStatusEnum.EnableTrading&&d());},u=()=>{g.once("validate:end",a=>{a<types.AccountStatusEnum.EnableTrading?d():ui.toast.success("Wallet connected");}),ui.modal.show(p?uiChainSelector.ChainSelectorSheetId:uiChainSelector.ChainSelectorId,{networkId:e.networkId,bridgeLessOnly:e.bridgeLessOnly}).then(a=>{a.wrongNetwork||e.status>=types.AccountStatusEnum.Connected&&(e.status<types.AccountStatusEnum.EnableTrading?d():ui.toast.success("Wallet connected"));},a=>{});};return e.wrongNetwork?jsxRuntime.jsx(x,{color:"warning",onClick:()=>{u();},description:r?.switchChain,...t,children:n.switchChain}):jsxRuntime.jsx(ui.Match,{value:e.status,case:a=>{if(a<=types.AccountStatusEnum.NotConnected)return jsxRuntime.jsx(x,{size:"lg",onClick:()=>{m();},variant:"gradient",angle:45,description:r?.connectWallet,...t,children:n.connectWallet});if(a<=types.AccountStatusEnum.NotSignedIn)return jsxRuntime.jsx(x,{size:"lg",onClick:()=>{d();},angle:45,description:r?.signin,...t,children:n.signin})},default:jsxRuntime.jsx(x,{size:"lg",description:r?.enableTrading,...t,onClick:()=>d(),children:n.enableTrading})})};C.displayName="AuthGuard";var x=e=>{let{description:t,...n}=e;return jsxRuntime.jsxs(ui.Flex,{direction:"column",children:[jsxRuntime.jsx(ui.Button,{...n}),!!t&&jsxRuntime.jsx(ui.Box,{mt:4,className:"oui-leading-none",style:{lineHeight:0},children:jsxRuntime.jsx(ui.Text,{size:"2xs",intensity:36,children:t})})]})};var et=e=>{let{status:t=types.AccountStatusEnum.EnableTrading,labels:n,description:r,dataSource:o,...g}=e,p=reactApp.useDataTap(o,{accountStatus:t}),{state:s}=hooks.useAccount(),{wrongNetwork:d}=reactApp.useAppContext();return jsxRuntime.jsx(ui.DataTable,{...g,dataSource:p,ignoreLoadingCheck:d||s.status<t||e.ignoreLoadingCheck,emptyView:jsxRuntime.jsx(tt,{status:t,description:r,labels:n,className:e.classNames?.authGuardDescription,visible:!s.validating})})},tt=e=>{let t={...W,...e.description};return e.visible?jsxRuntime.jsx(ui.Flex,{py:8,children:jsxRuntime.jsx(C,{status:e.status,labels:e.labels,descriptions:t,buttonProps:{size:"md"},children:jsxRuntime.jsx(ui.ExtensionSlot,{position:"emptyDataState"})})}):null};var ct=e=>{let{status:t=types.AccountStatusEnum.EnableTrading,labels:n,description:r,dataSource:o,...g}=e,p=reactApp.useDataTap(o,{accountStatus:t}),{state:s}=hooks.useAccount(),{wrongNetwork:d}=reactApp.useAppContext();return jsxRuntime.jsx(ui.TableView,{dataSource:p,ignoreLoadingCheck:d||s.status<t||e.ignoreLoadingCheck,emptyView:jsxRuntime.jsx(ut,{status:t,description:r,labels:n,className:e.classNames?.authGuardDescription,visible:!s.validating}),manualPagination:!0,...g})},ut=e=>{let t={...W,...e.description};return e.visible?jsxRuntime.jsx(ui.Flex,{py:8,children:jsxRuntime.jsx(C,{status:e.status,labels:e.labels,descriptions:t,buttonProps:{size:"md"},children:jsxRuntime.jsx(ui.ExtensionSlot,{position:"emptyDataState"})})}):null};var te=e=>{let{hint:t={connectWallet:"Please connect wallet before starting to trade",signIn:"Please sign in before starting to trade",enableTrading:"Please sign in before starting to trade",wrongNetwork:"Please switch to a supported network to continue."},status:n}=e;return jsxRuntime.jsx(ui.Box,{my:8,children:jsxRuntime.jsx(C,{status:n,descriptions:{...t,switchChain:t.wrongNetwork},children:e.children||jsxRuntime.jsx(ui.EmptyDataState,{})})})};te.displayName="AuthGuardEmpty";var re=e=>{let{opactiy:t=90,tooltip:n={connectWallet:"Please connect wallet before set up",signIn:"Please sign in before set up",enableTrading:"Please enable trading before set up",wrongNetwork:"Please switch to a supported network to set up"}}=e,{state:r}=hooks.useAccount(),o=!0,{wrongNetwork:g}=reactApp.useAppContext(),p=react.useMemo(()=>{if(g)return n?.wrongNetwork;switch(r.status){case types.AccountStatusEnum.NotConnected:return n?.connectWallet;case types.AccountStatusEnum.NotSignedIn:return n?.signIn;case types.AccountStatusEnum.DisabledTrading:return n?.enableTrading;case types.AccountStatusEnum.EnableTrading:return "";default:return e.content}},[e.content,r,o,n]),s=react.useMemo(()=>{switch(r.status){case types.AccountStatusEnum.NotConnected:case types.AccountStatusEnum.NotSignedIn:return t;case types.AccountStatusEnum.EnableTrading:return void 0;default:return}},[e.opactiy,r,o]);return jsxRuntime.jsx(ui.Tooltip,{content:p,className:"oui-text-2xs",align:e.align,alignOffset:e.alignOffset,side:e.side,sideOffset:e.sideOffset,children:jsxRuntime.jsx("div",{style:{opacity:s},children:e.children})})};re.displayName="AuthGuardTooltip";
12
12
 
13
- exports.AuthGuard = x;
14
- exports.AuthGuardDataTable = je;
15
- exports.AuthGuardEmpty = ee;
16
- exports.AuthGuardTooltip = oe;
17
- exports.WalletConnectContent = R;
18
- exports.WalletConnectorModalId = A;
19
- exports.WalletConnectorSheetId = k;
20
- exports.WalletConnectorWidget = G;
13
+ exports.AuthGuard = C;
14
+ exports.AuthGuardDataTable = et;
15
+ exports.AuthGuardEmpty = te;
16
+ exports.AuthGuardTableView = ct;
17
+ exports.AuthGuardTooltip = re;
18
+ exports.WalletConnectContent = M;
19
+ exports.WalletConnectorModalId = k;
20
+ exports.WalletConnectorSheetId = v;
21
+ exports.WalletConnectorWidget = D;
21
22
  exports.useWalletConnectorBuilder = B;
22
23
  //# sourceMappingURL=out.js.map
23
24
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/component/walletConnectorContent.tsx","../src/component/step.tsx","../src/component/walletConnector.tsx","../src/component/useWalletConnectorBuilder.ts","../src/component/authGuard.tsx","../src/constants/message.ts","../src/component/authGuardDataTable.tsx","../src/component/authGuardEmpty.tsx","../src/component/authGuardTooltip.tsx"],"names":["useEffect","useMemo","useState","Box","Button","Divider","Flex","inputFormatter","Match","modal","Switch","Text","TextField","toast","Tooltip","AccountStatusEnum","CheckedCircleFillIcon","cn","Spinner","jsx","jsxs","StepItem","props","title","description","Identifier","active","isLoading","isCompleted","Dot","className","useAccount","useLocalStorage","WalletConnectContent","initAccountState","remember","setRemember","accountState","state","setState","activeStep","setActiveStep","loading","setLoading","firstShowDialog","steps","onEnableTrading","res","step","reject","e","onSignIn","index","ReferralCode","RememberMe","ActionButton","signIn","enableTrading","disabled","registerSimpleDialog","registerSimpleSheet","useGetReferralCode","useLazyQuery","useMutation","useWalletConnectorBuilder","account","createOrderlyKey","createAccount","refCode","setRefCode","helpText","setHelpText","verifyRefCode","referral_code","bindRefCode","updateOrderError","updateMutating","enableTradingComplted","checkRefCode","exist","showRefCodeInput","info","WalletConnectorModalId","WalletConnectorSheetId","WalletConnectorWidget","useMediaQuery","MEDIA_TABLET","Either","useAppContext","ChainSelectorId","LABELS","DESCRIPTIONS","AuthGuard","status","buttonProps","fallback","descriptions","classNames","networkId","id","bridgeLessOnly","wrongNetwork","labels","Left","StatusInfo","DefaultFallback","connectWallet","matches","onConnectOrderly","error","onConnectWallet","switchChain","value","DataTable","ExtensionSlot","useDataTap","AuthGuardDataTable","dataSource","rest","data","GuardView","EmptyDataState","AuthGuardEmpty","hint","AuthGuardTooltip","opactiy","tooltip","isSupport","newOpacity"],"mappings":"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","sourcesContent":["import { FC, useEffect, useMemo, useState } from \"react\";\nimport {\n Box,\n Button,\n cn,\n Divider,\n Flex,\n Input,\n inputFormatter,\n Match,\n modal,\n Switch,\n Text,\n TextField,\n toast,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { StepItem } from \"./step\";\nimport { useAccount, useLocalStorage } from \"@orderly.network/hooks\";\n\nexport type WalletConnectContentProps = {\n initAccountState: AccountStatusEnum;\n signIn: () => Promise<any>;\n enableTrading: (remember: boolean) => Promise<any>;\n enableTradingComplted?: () => Promise<void>;\n onCompleted?: () => void;\n close?: () => void;\n refCode: string;\n setRefCode: React.Dispatch<React.SetStateAction<string>>;\n helpText?: string;\n showRefCodeInput: boolean;\n};\n\nexport const WalletConnectContent = (props: WalletConnectContentProps) => {\n const { initAccountState = AccountStatusEnum.NotConnected } = props;\n const [remember, setRemember] = useState(true);\n\n const { state: accountState } = useAccount();\n const [state, setState] = useState(initAccountState);\n const [activeStep, setActiveStep] = useState(0);\n const [loading, setLoading] = useState(false);\n const [firstShowDialog] = useLocalStorage(\n \"oui-first-show-wallet-connector-dialog\",\n undefined\n );\n useEffect(() => {\n return () => {\n localStorage.setItem(\"oui-first-show-wallet-connector-dialog\", \"1\");\n };\n }, []);\n\n useEffect(() => {\n setState(accountState.status);\n }, [accountState]);\n\n const steps = useMemo(() => {\n const steps = [];\n if (initAccountState < AccountStatusEnum.SignedIn) {\n steps.push({\n key: \"signIn\",\n title: \"Sign In\",\n description: \"Confirm you are the owner of this wallet\",\n });\n }\n\n if (initAccountState < AccountStatusEnum.EnableTrading) {\n steps.push({\n key: \"enableTrading\",\n title: \"Enable Trading\",\n description:\n \"Enable secure access to our API for lightning fast trading\",\n });\n }\n\n return steps;\n }, []);\n\n const onEnableTrading = () => {\n setLoading(true);\n return props\n .enableTrading(remember)\n .then(\n async (res) => {\n console.log(res);\n setLoading(false);\n setActiveStep((step) => step + 1);\n try {\n await props.enableTradingComplted?.();\n } catch (e) {}\n if (typeof props.onCompleted === \"function\") {\n props.onCompleted();\n } else if (typeof props.close === \"function\") {\n props.close();\n }\n // props.onCompleted?.();\n },\n (reject) => {\n console.log(\"enable trading reject\", reject);\n setLoading(false);\n if (reject === -1) return;\n toast.error(reject.message ?? \"User rejected the request\");\n }\n )\n .catch((e) => {\n console.log(\"enable trading catch error\", e);\n setLoading(false);\n });\n };\n\n const onSignIn = () => {\n setLoading(true);\n return props\n .signIn()\n .then(\n (res) => {\n setActiveStep((step) => step + 1);\n onEnableTrading();\n },\n (reject) => {\n setLoading(false);\n if (reject === -1) return;\n toast.error(\"User rejected the request\");\n }\n )\n .catch((e) => {\n setLoading(false);\n });\n };\n\n console.log(\"state\", state);\n\n return (\n <Box id=\"oui-wallet-connect-dialog-content\" className=\"oui-font-semibold\">\n <Text intensity={54} size=\"xs\">\n Your previous access has expired, you will receive a signature request\n to enable trading. Signing is free and will not send a transaction.\n </Text>\n <Box\n p={4}\n my={6}\n intensity={600}\n r=\"lg\"\n className=\"oui-space-y-5\"\n position={\"relative\"}\n >\n {steps.map((step, index) => {\n return (\n <StepItem\n title={step.title}\n description={step.description}\n isCompleted={activeStep > index}\n key={step.key}\n active={activeStep === index}\n isLoading={loading && activeStep === index}\n />\n );\n })}\n {steps.length > 1 && (\n <Box\n position={\"absolute\"}\n height={\"38px\"}\n left={28}\n top={18}\n zIndex={0}\n >\n <Divider\n lineStyle={\"dashed\"}\n direction={\"vertical\"}\n intensity={16}\n className=\"oui-h-full\"\n />\n </Box>\n )}\n </Box>\n {props.showRefCodeInput && steps.length == 2 && (\n <ReferralCode {...props} />\n )}\n {firstShowDialog && (\n <Flex justify={\"between\"} itemAlign={\"center\"}>\n <RememberMe />\n <Switch\n color={\"primary\"}\n checked={remember}\n onCheckedChange={setRemember}\n disabled={loading}\n className=\"data-[state=checked]:oui-bg-[#3347FD]\"\n />\n </Flex>\n )}\n <Flex justify={\"center\"} mt={8}>\n <Box width={\"45%\"}>\n <ActionButton\n state={state}\n signIn={onSignIn}\n enableTrading={onEnableTrading}\n loading={loading}\n disabled={state >= AccountStatusEnum.EnableTrading}\n />\n </Box>\n </Flex>\n </Box>\n );\n};\n\nconst ActionButton: FC<{\n state: AccountStatusEnum;\n signIn: () => Promise<any>;\n enableTrading: () => Promise<any>;\n loading: boolean;\n disabled?: boolean;\n}> = ({ state, signIn, enableTrading, loading, disabled }) => {\n return (\n <Match\n value={() => {\n if (state <= AccountStatusEnum.NotSignedIn) {\n return \"signIn\";\n }\n return \"enableTrading\";\n }}\n case={{\n signIn: (\n <Button\n fullWidth\n onClick={() => signIn()}\n loading={loading}\n disabled={disabled}\n >\n Sign In\n </Button>\n ),\n enableTrading: (\n <Button\n fullWidth\n onClick={() => enableTrading()}\n loading={loading}\n disabled={disabled}\n >\n Enable Trading\n </Button>\n ),\n }}\n />\n );\n};\n\nconst ReferralCode: FC<WalletConnectContentProps> = (props) => {\n return (\n <TextField\n placeholder=\"Referral code (Optional)\"\n fullWidth\n // label={\"Referral code (optional)\"}\n label=\"\"\n value={props.refCode}\n onChange={(e) => {\n props.setRefCode(e.target.value);\n }}\n classNames={{\n label: \"oui-text-base-contrast-54 oui-text-xs\",\n input: \"placeholder:oui-text-base-contrast-20 placeholder:oui-text-sm\",\n }}\n formatters={[inputFormatter.createRegexInputFormatter(/[^A-Z0-9]/g)]}\n onClear={() => {\n props.setRefCode(\"\");\n }}\n autoComplete=\"off\"\n helpText={props.helpText}\n className=\"oui-mb-4\"\n color={props.helpText ? \"danger\" : undefined}\n />\n );\n};\n\nconst RememberMe = () => {\n const showRememberHint = () => {\n if (window.innerWidth > 768) return;\n modal.alert({\n title: \"Remember me\",\n message: (\n <span className=\"oui-text-2xs oui-text-base-contrast/60\">\n Toggle this option to skip these steps next time you want to trade.\n </span>\n ),\n });\n };\n return (\n <Tooltip\n content={\n \"Toggle this option to skip these steps next time you want to trade.\"\n }\n className=\"oui-max-w-[300px]\"\n >\n <button onClick={showRememberHint}>\n <Text\n intensity={54}\n size={\"xs\"}\n className={\n \"oui-underline oui-underline-offset-4 oui-decoration-dashed oui-decoration-base-contrast-36\"\n }\n >\n Remember me\n </Text>\n </button>\n </Tooltip>\n );\n};\n","import { FC } from \"react\";\nimport {\n Box,\n CheckedCircleFillIcon,\n cn,\n Match,\n Spinner,\n Text,\n} from \"@orderly.network/ui\";\n\ntype StepItemProps = {\n active?: boolean;\n isLoading?: boolean;\n isCompleted?: boolean;\n title: string;\n description: string;\n};\n\nexport const StepItem = (props: StepItemProps) => {\n const { title, description } = props;\n\n // console.log(props);\n\n return (\n <Box position=\"relative\" className=\"oui-pl-8\">\n <Box>\n <Text as=\"div\" intensity={98} size={\"sm\"}>\n {title}\n </Text>\n <Text as=\"div\" intensity={54} size={\"2xs\"}>\n {description}\n </Text>\n </Box>\n <Identifier {...props} />\n </Box>\n );\n};\n\nconst Identifier = (props: {\n active?: boolean;\n isLoading?: boolean;\n isCompleted?: boolean;\n}) => {\n const { active, isLoading, isCompleted } = props;\n\n return (\n <Match\n className={\"oui-absolute oui-left-0 oui-top-1 oui-z-10\"}\n value={() => {\n if (isCompleted) {\n return \"completed\";\n }\n if (isLoading) {\n return \"loading\";\n }\n\n if (active) {\n return \"active\";\n }\n\n return \"normal\";\n }}\n case={{\n loading: (\n <div>\n <Spinner size={\"sm\"} className={\"oui-ml-1\"} />\n </div>\n ),\n completed: (\n <div>\n <CheckedCircleFillIcon opacity={1} className=\"oui-text-[rgba(96,140,255,1)]\"/>\n </div>\n ),\n }}\n default={<Dot active={!!active} />}\n />\n );\n};\n\nconst Dot: FC<{ active: boolean; className?: string }> = ({\n active,\n className,\n}) => {\n return (\n <div\n className={cn(\n \"oui-w-[8.3px] oui-h-[8.3px] oui-rounded-full oui-ml-2 oui-mt-1\",\n className,\n active ? \"oui-bg-primary-light\" : \"oui-bg-base-2\"\n )}\n />\n );\n};\n","import { registerSimpleDialog, registerSimpleSheet } from \"@orderly.network/ui\";\n\nimport { useWalletConnectorBuilder } from \"./useWalletConnectorBuilder\";\nimport { WalletConnectContent } from \"./walletConnectorContent\";\n\nexport const WalletConnectorModalId = \"walletConnector\" as const;\nexport const WalletConnectorSheetId = \"walletConnectorSheet\" as const;\n\nexport const WalletConnectorWidget = (props: any) => {\n const state = useWalletConnectorBuilder();\n return <WalletConnectContent {...state} {...props} />;\n};\n\nregisterSimpleDialog(WalletConnectorModalId, WalletConnectorWidget, {\n size: \"sm\",\n title: \"Connect wallet\",\n});\n\nregisterSimpleSheet(WalletConnectorSheetId, WalletConnectorWidget, {\n title: \"Connect wallet\",\n});\n","import {\n useAccount,\n useCheckReferralCode,\n useGetReferralCode,\n useLazyQuery,\n useMutation,\n} from \"@orderly.network/hooks\";\nimport { toast } from \"@orderly.network/ui\";\nimport { useEffect, useMemo, useState } from \"react\";\n\nexport const useWalletConnectorBuilder = () => {\n const { account, state, createOrderlyKey, createAccount } = useAccount();\n const [refCode, setRefCode] = useState(\"\");\n const [helpText, setHelpText] = useState(\"\");\n\n const { trigger: verifyRefCode } = useLazyQuery(\n `/v1/public/referral/verify_ref_code?referral_code=${refCode}`\n );\n\n useEffect(() => {\n const refCode = localStorage.getItem(\"referral_code\");\n if (refCode != null) {\n setRefCode(refCode);\n }\n }, []);\n\n const { referral_code, isLoading } = useGetReferralCode(account.accountId);\n\n const [bindRefCode, { error: updateOrderError, isMutating: updateMutating }] =\n useMutation(\"/v1/referral/bind\", \"POST\");\n\n useEffect(() => {\n if (refCode.length === 0) {\n setHelpText(\"\");\n }\n }, [refCode]);\n\n const enableTradingComplted = () => {\n toast.success(\"Wallet connected\");\n // validate ref code and bind referral code\n if (refCode.length >= 4 && refCode.length <= 10)\n bindRefCode({ referral_code: refCode }).finally(() => {\n localStorage.removeItem(\"referral_code\");\n });\n };\n\n const checkRefCode = async (): Promise<string | undefined> => {\n if (refCode.length === 0) return Promise.resolve(undefined);\n\n if (refCode.length > 0 && (refCode.length < 4 || refCode.length > 10)) {\n return Promise.resolve(\n \"The referral_code must be 4 to 10 characters long, only accept upper case roman characters and numbers\"\n );\n }\n\n const { exist } = await verifyRefCode();\n \n\n if (exist === false) {\n return Promise.resolve(\"This referral code does not exist.\");\n }\n\n return Promise.resolve(undefined);\n };\n\n\n const showRefCodeInput = (referral_code?.length || 0) === 0 && !isLoading;\n\n\n const signIn = async () => {\n if (showRefCodeInput) {\n const info = await checkRefCode();\n if (typeof info !== \"undefined\") {\n setHelpText(info);\n return Promise.reject(-1);\n }\n }\n setHelpText(\"\");\n return createAccount();\n };\n\n const enableTrading = async (remember: boolean) => {\n if (showRefCodeInput) {\n const info = await checkRefCode();\n if (typeof info !== \"undefined\") {\n setHelpText(info);\n return Promise.reject(-1);\n }\n }\n setHelpText(\"\");\n return createOrderlyKey(remember);\n };\n\n return {\n enableTrading,\n initAccountState: state.status,\n signIn,\n enableTradingComplted,\n refCode,\n setRefCode,\n helpText,\n showRefCodeInput,\n } as const;\n};\n","import { useAccount, useMediaQuery } from \"@orderly.network/hooks\";\nimport {\n AccountStatusEnum,\n MEDIA_TABLET,\n NetworkId,\n} from \"@orderly.network/types\";\nimport {\n Button,\n Either,\n Match,\n modal,\n Text,\n toast,\n type ButtonProps,\n} from \"@orderly.network/ui\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { PropsWithChildren, ReactElement, useMemo } from \"react\";\nimport {\n WalletConnectorModalId,\n WalletConnectorSheetId,\n} from \"./walletConnector\";\nimport { ChainSelectorId } from \"@orderly.network/ui-chain-selector\";\nimport { alertMessages, DESCRIPTIONS, LABELS } from \"../constants/message\";\nimport { Flex } from \"@orderly.network/ui\";\nimport { Box } from \"@orderly.network/ui\";\n\nexport type AuthGuardProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\n fallback?: (props: {\n validating: boolean;\n status: AccountStatusEnum;\n wrongNetwork: boolean;\n }) => ReactElement;\n // indicator?: ReactElement;\n /**\n * Required state to be satisfied\n * @default AccountStatusEnum.EnableTrading\n */\n status?: AccountStatusEnum;\n\n bridgeLessOnly?: boolean;\n\n buttonProps?: ButtonProps;\n\n descriptions?: alertMessages;\n\n labels?: alertMessages;\n\n classNames?: {\n root?: string;\n description?: string;\n // button?: string;\n };\n\n networkId?: NetworkId;\n\n // validatingIndicator?: ReactElement;\n};\n\nconst AuthGuard = (props: PropsWithChildren<AuthGuardProps>) => {\n const {\n status = AccountStatusEnum.EnableTrading,\n buttonProps,\n fallback,\n descriptions,\n classNames,\n networkId,\n id,\n bridgeLessOnly,\n // ...rest\n } = props;\n const { state } = useAccount();\n const { wrongNetwork } = useAppContext();\n\n const labels = { ...LABELS, ...props.labels };\n\n // return Match(state.status)\n // .with(AccountStatusEnum.EnableTrading, () => props.children)\n // .with(AccountStatusEnum.DisableTrading, () => props.fallback)\n // .with(AccountStatusEnum.Validating, () => props.validatingIndicator)\n // .otherwise(() => props.fallback);\n //\n\n const Left = useMemo<ReactElement>(() => {\n if (typeof fallback !== \"undefined\") {\n return fallback({\n validating: state.validating,\n status: state.status,\n wrongNetwork,\n });\n }\n\n if (state.validating) {\n return (\n <StatusInfo\n // variant={\"gradient\"}\n angle={45}\n // fullWidth\n disabled\n loading\n description={descriptions?.connectWallet}\n id={id}\n type=\"button\"\n {...buttonProps}\n >\n {labels.connectWallet}\n </StatusInfo>\n );\n }\n\n return (\n <DefaultFallback\n bridgeLessOnly={bridgeLessOnly}\n status={state.status}\n buttonProps={{ ...buttonProps, id, type: \"button\" }}\n wrongNetwork={wrongNetwork}\n networkId={props.networkId}\n labels={labels}\n descriptions={descriptions}\n />\n );\n }, [state.status, state.validating, buttonProps, wrongNetwork]);\n\n /**\n * **Important: The chldren component will be rendered only if the status is equal to the required status and the network is correct.**\n */\n\n return (\n <Either value={state.status >= status && !wrongNetwork} left={Left}>\n {props.children}\n </Either>\n );\n};\n\nconst DefaultFallback = (props: {\n status: AccountStatusEnum;\n wrongNetwork: boolean;\n buttonProps?: ButtonProps;\n networkId?: NetworkId;\n labels: alertMessages;\n bridgeLessOnly?: boolean;\n\n descriptions?: alertMessages;\n}) => {\n const { buttonProps, labels, descriptions } = props;\n const { connectWallet } = useAppContext();\n const { account } = useAccount();\n const matches = useMediaQuery(MEDIA_TABLET);\n // const { connect } = useWalletConnector();\n const onConnectOrderly = () => {\n modal.show(matches ? WalletConnectorSheetId : WalletConnectorModalId).then(\n (r) => console.log(r),\n (error) => console.log(error)\n );\n };\n\n const onConnectWallet = async () => {\n const res = await connectWallet();\n\n if (!res) return;\n\n if (res.wrongNetwork) {\n switchChain();\n } else {\n if (\n (res?.status ?? AccountStatusEnum.NotConnected) <\n AccountStatusEnum.EnableTrading\n ) {\n onConnectOrderly();\n }\n }\n };\n\n const switchChain = () => {\n account.once(\"validate:end\", (status) => {\n if (status < AccountStatusEnum.EnableTrading) {\n onConnectOrderly();\n } else {\n toast.success(\"Wallet connected\");\n }\n });\n\n modal\n .show<{\n wrongNetwork: boolean;\n }>(ChainSelectorId, {\n networkId: props.networkId,\n bridgeLessOnly: props.bridgeLessOnly,\n })\n .then(\n (r) => {\n if (!r.wrongNetwork) {\n if (props.status >= AccountStatusEnum.Connected) {\n if (props.status < AccountStatusEnum.EnableTrading) {\n onConnectOrderly();\n } else {\n toast.success(\"Wallet connected\");\n }\n }\n }\n },\n (error) => console.log(\"[switchChain error]\", error)\n );\n };\n\n if (props.wrongNetwork) {\n return (\n <StatusInfo\n color=\"warning\"\n // size=\"md\"\n // fullWidth\n onClick={() => {\n switchChain();\n }}\n description={descriptions?.switchChain}\n {...buttonProps}\n >\n {labels.switchChain}\n </StatusInfo>\n );\n }\n\n return (\n <Match\n value={props.status}\n case={(value: AccountStatusEnum) => {\n if (value <= AccountStatusEnum.NotConnected) {\n return (\n <StatusInfo\n size=\"lg\"\n onClick={() => {\n onConnectWallet();\n }}\n // fullWidth\n variant={\"gradient\"}\n angle={45}\n description={descriptions?.connectWallet}\n {...buttonProps}\n >\n {labels.connectWallet}\n </StatusInfo>\n );\n }\n if (value <= AccountStatusEnum.NotSignedIn) {\n return (\n <StatusInfo\n size=\"lg\"\n onClick={() => {\n onConnectOrderly();\n }}\n // fullWidth\n angle={45}\n description={descriptions?.signin}\n {...buttonProps}\n >\n {labels.signin}\n </StatusInfo>\n );\n }\n }}\n default={\n <StatusInfo\n size=\"lg\"\n // fullWidth\n description={descriptions?.enableTrading}\n {...buttonProps}\n onClick={() => onConnectOrderly()}\n >\n {labels.enableTrading}\n </StatusInfo>\n }\n />\n );\n};\n\nAuthGuard.displayName = \"AuthGuard\";\n\nconst StatusInfo = (\n props: ButtonProps & {\n description?: string;\n }\n) => {\n const { description, ...buttonProps } = props;\n return (\n <Flex direction={\"column\"}>\n <Button {...buttonProps}></Button>\n {!!description && (\n <Box mt={4} className=\"oui-leading-none\" style={{ lineHeight: 0 }}>\n <Text size=\"2xs\" intensity={36}>\n {description}\n </Text>\n </Box>\n )}\n </Flex>\n );\n};\n\nexport { AuthGuard };\n","export type alertMessages = {\n connectWallet?: string;\n switchChain?: string;\n enableTrading?: string;\n signin?: string;\n};\n\nexport const LABELS = {\n connectWallet: \"Connect wallet\",\n switchChain: \"Switch network\",\n enableTrading: \"Enable trading\",\n signin: \"Sign in\",\n};\n\nexport const DESCRIPTIONS: alertMessages = {\n connectWallet: \"Please Connect wallet before starting to trade\",\n switchChain: \"Please switch to a supported network to continue\",\n enableTrading: \"Please Enable trading before starting to trade\",\n signin: \"Please sign in before starting to trade\",\n};\n","import { PropsWithChildren } from \"react\";\nimport { DataTable, DataTableProps, ExtensionSlot } from \"@orderly.network/ui\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { alertMessages, DESCRIPTIONS } from \"../constants/message\";\nimport { useAppContext, useDataTap } from \"@orderly.network/react-app\";\nimport { Flex } from \"@orderly.network/ui\";\nimport { AuthGuard } from \"./authGuard\";\nimport { useAccount } from \"@orderly.network/hooks\";\n\nexport const AuthGuardDataTable = <RecordType extends unknown>(\n props: PropsWithChildren<\n DataTableProps<RecordType> &\n Omit<GuardViewProps, \"status\"> & {\n status?: AccountStatusEnum;\n classNames?: DataTableProps<RecordType>[\"classNames\"] & {\n authGuardDescription?: string;\n };\n }\n >\n) => {\n const {\n status = AccountStatusEnum.EnableTrading,\n // message,\n labels,\n description,\n dataSource,\n ...rest\n } = props;\n const data = useDataTap(dataSource, {\n accountStatus: status,\n });\n const { state } = useAccount();\n const { wrongNetwork } = useAppContext();\n\n return (\n <DataTable\n {...rest}\n dataSource={data}\n ignoreLoadingCheck={\n wrongNetwork || state.status < status || props.ignoreLoadingCheck\n }\n emptyView={\n <GuardView\n status={status}\n description={description}\n labels={labels}\n className={props.classNames?.authGuardDescription}\n visible={!state.validating}\n />\n }\n />\n );\n};\n\ntype GuardViewProps = {\n status: AccountStatusEnum;\n description?: alertMessages;\n labels?: alertMessages;\n className?: string;\n visible?: boolean;\n};\n\nconst GuardView = (props: GuardViewProps) => {\n const descriptions = { ...DESCRIPTIONS, ...props.description };\n if (!props.visible) return null;\n return (\n <Flex py={8}>\n <AuthGuard\n status={props.status}\n labels={props.labels}\n descriptions={descriptions}\n buttonProps={{\n size: \"md\",\n }}\n >\n <ExtensionSlot position={\"emptyDataState\"} />\n </AuthGuard>\n </Flex>\n );\n};\n","import { AccountStatusEnum } from \"@orderly.network/types\";\nimport {\n Box,\n EmptyDataState,\n} from \"@orderly.network/ui\";\nimport { PropsWithChildren } from \"react\";\nimport { AuthGuard } from \"./authGuard\";\n\ntype AuthGuardProps = {\n /** default value is\n * ```ts\n * {\n * connectWallet: \"Please connect wallet before starting to trade\",\n * signIn: \"Please sign in before starting to trade\",\n * enableTrading: \"Please sign in before starting to trade\",\n * wrongNetwork: \"Please switch to a supported network to continue.\",\n * }\n * ```\n */\n hint?: {\n connectWallet?: string;\n signIn?: string;\n enableTrading?: string;\n wrongNetwork?: string;\n };\n status?: AccountStatusEnum;\n};\n\nconst AuthGuardEmpty = (props: PropsWithChildren<AuthGuardProps>) => {\n const {\n hint = {\n connectWallet: \"Please connect wallet before starting to trade\",\n signIn: \"Please sign in before starting to trade\",\n enableTrading: \"Please sign in before starting to trade\",\n wrongNetwork: \"Please switch to a supported network to continue.\",\n },\n status,\n } = props;\n\n return (\n <Box my={8}>\n <AuthGuard status={status} descriptions={{...hint, switchChain: hint.wrongNetwork}}>\n {props.children || <EmptyDataState />}\n </AuthGuard>\n </Box>\n );\n};\n\nAuthGuardEmpty.displayName = \"AuthGuardEmpty\";\n\nexport { AuthGuardEmpty };\n","import { useAccount } from \"@orderly.network/hooks\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { Tooltip } from \"@orderly.network/ui\";\nimport { PropsWithChildren, useMemo } from \"react\";\n\ntype AuthGuardProps = {\n content?: string;\n align?: \"center\" | \"end\" | \"start\";\n alignOffset?: number;\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n sideOffset?: number;\n opactiy?: number;\n tooltip?: {\n connectWallet?: string;\n signIn?: string;\n enableTrading?: string;\n wrongNetwork?: string;\n };\n};\n\nconst AuthGuardTooltip = (props: PropsWithChildren<AuthGuardProps>) => {\n const {\n opactiy = 90,\n tooltip = {\n connectWallet: \"Please connect wallet before set up\",\n signIn: \"Please sign in before set up\",\n enableTrading: \"Please enable trading before set up\",\n wrongNetwork: \"Please switch to a supported network to set up\",\n },\n } = props;\n const { state } = useAccount();\n const isSupport = true;\n const { wrongNetwork } = useAppContext();\n\n const hint = useMemo(() => {\n if (wrongNetwork) {\n return tooltip?.wrongNetwork;\n }\n switch (state.status) {\n case AccountStatusEnum.NotConnected:\n return tooltip?.connectWallet;\n case AccountStatusEnum.NotSignedIn:\n return tooltip?.signIn;\n case AccountStatusEnum.DisabledTrading:\n return tooltip?.enableTrading;\n case AccountStatusEnum.EnableTrading: {\n if (!isSupport) return tooltip?.wrongNetwork;\n return \"\";\n }\n default:\n return props.content;\n }\n }, [props.content, state, isSupport, tooltip]);\n\n const newOpacity = useMemo(() => {\n switch (state.status) {\n case AccountStatusEnum.NotConnected:\n case AccountStatusEnum.NotSignedIn:\n return opactiy;\n case AccountStatusEnum.EnableTrading: {\n if (!isSupport) return opactiy;\n return undefined;\n }\n default:\n return undefined;\n }\n }, [props.opactiy, state, isSupport]);\n\n return (\n <Tooltip\n content={hint}\n className=\"oui-text-2xs\"\n align={props.align}\n alignOffset={props.alignOffset}\n side={props.side}\n sideOffset={props.sideOffset}\n >\n <div\n style={{\n opacity: newOpacity,\n }}\n >\n {props.children}\n </div>\n </Tooltip>\n );\n};\n\nAuthGuardTooltip.displayName = \"AuthGuardTooltip\";\n\nexport { AuthGuardTooltip };\n"]}
1
+ {"version":3,"sources":["../src/component/walletConnectorContent.tsx","../src/component/step.tsx","../src/component/walletConnector.tsx","../src/component/useWalletConnectorBuilder.ts","../src/component/authGuard.tsx","../src/constants/message.ts","../src/component/authGuardDataTable.tsx","../src/component/authGuardTableView.tsx","../src/component/authGuardEmpty.tsx","../src/component/authGuardTooltip.tsx"],"names":["useEffect","useMemo","useState","Box","Button","Divider","Flex","inputFormatter","Match","modal","Switch","Text","TextField","toast","Tooltip","AccountStatusEnum","CheckedCircleFillIcon","cn","Spinner","jsx","jsxs","StepItem","props","title","description","Identifier","active","isLoading","isCompleted","Dot","className","useAccount","useLocalStorage","WalletConnectContent","initAccountState","remember","setRemember","accountState","state","setState","activeStep","setActiveStep","loading","setLoading","firstShowDialog","steps","onEnableTrading","res","step","reject","msg","e","onSignIn","index","ReferralCode","RememberMe","ActionButton","signIn","enableTrading","disabled","registerSimpleDialog","registerSimpleSheet","useGetReferralCode","useLazyQuery","useMutation","useWalletConnectorBuilder","account","createOrderlyKey","createAccount","refCode","setRefCode","helpText","setHelpText","verifyRefCode","referral_code","bindRefCode","updateOrderError","updateMutating","enableTradingComplted","checkRefCode","exist","showRefCodeInput","info","WalletConnectorModalId","WalletConnectorSheetId","WalletConnectorWidget","useMediaQuery","MEDIA_TABLET","Either","useScreen","useAppContext","ChainSelectorId","ChainSelectorSheetId","LABELS","DESCRIPTIONS","AuthGuard","status","buttonProps","fallback","descriptions","classNames","networkId","id","bridgeLessOnly","wrongNetwork","labels","Left","StatusInfo","DefaultFallback","connectWallet","isMobile","matches","onConnectOrderly","r","error","onConnectWallet","switchChain","value","DataTable","ExtensionSlot","useDataTap","AuthGuardDataTable","dataSource","rest","data","GuardView","TableView","AuthGuardTableView","EmptyDataState","AuthGuardEmpty","hint","AuthGuardTooltip","opactiy","tooltip","isSupport","newOpacity"],"mappings":"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","sourcesContent":["import { FC, useEffect, useMemo, useState } from \"react\";\nimport {\n Box,\n Button,\n cn,\n Divider,\n Flex,\n Input,\n inputFormatter,\n Match,\n modal,\n Switch,\n Text,\n TextField,\n toast,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { StepItem } from \"./step\";\nimport { useAccount, useLocalStorage } from \"@orderly.network/hooks\";\n\nexport type WalletConnectContentProps = {\n initAccountState: AccountStatusEnum;\n signIn: () => Promise<any>;\n enableTrading: (remember: boolean) => Promise<any>;\n enableTradingComplted?: () => Promise<void>;\n onCompleted?: () => void;\n close?: () => void;\n refCode: string;\n setRefCode: React.Dispatch<React.SetStateAction<string>>;\n helpText?: string;\n showRefCodeInput: boolean;\n};\n\nexport const WalletConnectContent = (props: WalletConnectContentProps) => {\n const { initAccountState = AccountStatusEnum.NotConnected } = props;\n const [remember, setRemember] = useState(true);\n\n const { state: accountState } = useAccount();\n const [state, setState] = useState(initAccountState);\n const [activeStep, setActiveStep] = useState(0);\n const [loading, setLoading] = useState(false);\n const [firstShowDialog] = useLocalStorage(\n \"orderly-first-show-wallet-connector-dialog\",\n undefined\n );\n useEffect(() => {\n return () => {\n localStorage.setItem(\"orderly-first-show-wallet-connector-dialog\", \"1\");\n };\n }, []);\n\n useEffect(() => {\n setState(accountState.status);\n }, [accountState]);\n\n const steps = useMemo(() => {\n const steps = [];\n if (initAccountState < AccountStatusEnum.SignedIn) {\n steps.push({\n key: \"signIn\",\n title: \"Sign In\",\n description: \"Confirm you are the owner of this wallet\",\n });\n }\n\n if (initAccountState < AccountStatusEnum.EnableTrading) {\n steps.push({\n key: \"enableTrading\",\n title: \"Enable Trading\",\n description:\n \"Enable secure access to our API for lightning fast trading\",\n });\n }\n\n return steps;\n }, []);\n\n const onEnableTrading = () => {\n setLoading(true);\n return props\n .enableTrading(remember)\n .then(\n async (res) => {\n console.log(res);\n setLoading(false);\n setActiveStep((step) => step + 1);\n try {\n await props.enableTradingComplted?.();\n } catch (e) {}\n if (typeof props.onCompleted === \"function\") {\n props.onCompleted();\n } else if (typeof props.close === \"function\") {\n props.close();\n }\n // props.onCompleted?.();\n },\n (reject) => {\n console.log(\"enable trading reject\", reject);\n setLoading(false);\n if (reject === -1) return;\n let msg = reject.toString();\n if (msg.includes(\"rejected\")) {\n msg = \"User rejected the request.\";\n }\n toast.error(msg);\n }\n )\n .catch((e) => {\n console.log(\"enable trading catch error\", e);\n setLoading(false);\n });\n };\n\n const onSignIn = () => {\n setLoading(true);\n return props\n .signIn()\n .then(\n (res) => {\n setActiveStep((step) => step + 1);\n onEnableTrading();\n },\n (reject) => {\n setLoading(false);\n\n if (reject === -1) return;\n let msg = reject.toString();\n if (msg.includes(\"rejected\")) {\n msg = \"User rejected the request.\";\n }\n toast.error(msg);\n }\n )\n .catch((e) => {\n setLoading(false);\n });\n };\n\n console.log(\"state\", state);\n\n return (\n <Box id=\"oui-wallet-connect-dialog-content\" className=\"oui-font-semibold\">\n <Text intensity={54} size=\"xs\">\n Your previous access has expired, you will receive a signature request\n to enable trading. Signing is free and will not send a transaction.\n </Text>\n <Box\n p={4}\n my={6}\n intensity={600}\n r=\"lg\"\n className=\"oui-space-y-5\"\n position={\"relative\"}\n >\n {steps.map((step, index) => {\n return (\n <StepItem\n title={step.title}\n description={step.description}\n isCompleted={activeStep > index}\n key={step.key}\n active={activeStep === index}\n isLoading={loading && activeStep === index}\n />\n );\n })}\n {steps.length > 1 && (\n <Box\n position={\"absolute\"}\n height={\"38px\"}\n left={28}\n top={18}\n zIndex={0}\n >\n <Divider\n lineStyle={\"dashed\"}\n direction={\"vertical\"}\n intensity={16}\n className=\"oui-h-full\"\n />\n </Box>\n )}\n </Box>\n {props.showRefCodeInput && steps.length == 2 && (\n <ReferralCode {...props} />\n )}\n {firstShowDialog && (\n <Flex justify={\"between\"} itemAlign={\"center\"}>\n <RememberMe />\n <Switch\n color={\"primary\"}\n checked={remember}\n onCheckedChange={setRemember}\n disabled={loading}\n className=\"data-[state=checked]:oui-bg-[#3347FD]\"\n />\n </Flex>\n )}\n <Flex justify={\"center\"} mt={8}>\n <Box width={\"45%\"}>\n <ActionButton\n state={state}\n signIn={onSignIn}\n enableTrading={onEnableTrading}\n loading={loading}\n disabled={state >= AccountStatusEnum.EnableTrading}\n />\n </Box>\n </Flex>\n </Box>\n );\n};\n\nconst ActionButton: FC<{\n state: AccountStatusEnum;\n signIn: () => Promise<any>;\n enableTrading: () => Promise<any>;\n loading: boolean;\n disabled?: boolean;\n}> = ({ state, signIn, enableTrading, loading, disabled }) => {\n return (\n <Match\n value={() => {\n if (state <= AccountStatusEnum.NotSignedIn) {\n return \"signIn\";\n }\n return \"enableTrading\";\n }}\n case={{\n signIn: (\n <Button\n fullWidth\n onClick={() => signIn()}\n loading={loading}\n disabled={disabled}\n >\n Sign In\n </Button>\n ),\n enableTrading: (\n <Button\n fullWidth\n onClick={() => enableTrading()}\n loading={loading}\n disabled={disabled}\n >\n Enable Trading\n </Button>\n ),\n }}\n />\n );\n};\n\nconst ReferralCode: FC<WalletConnectContentProps> = (props) => {\n return (\n <TextField\n placeholder=\"Referral code (Optional)\"\n fullWidth\n // label={\"Referral code (optional)\"}\n label=\"\"\n value={props.refCode}\n onChange={(e) => {\n props.setRefCode(e.target.value);\n }}\n classNames={{\n label: \"oui-text-base-contrast-54 oui-text-xs\",\n input: \"placeholder:oui-text-base-contrast-20 placeholder:oui-text-sm\",\n }}\n formatters={[inputFormatter.createRegexInputFormatter(/[^A-Z0-9]/g)]}\n onClear={() => {\n props.setRefCode(\"\");\n }}\n autoComplete=\"off\"\n helpText={props.helpText}\n className=\"oui-mb-4\"\n color={props.helpText ? \"danger\" : undefined}\n />\n );\n};\n\nconst RememberMe = () => {\n const showRememberHint = () => {\n if (window.innerWidth > 768) return;\n modal.alert({\n title: \"Remember me\",\n message: (\n <span className=\"oui-text-2xs oui-text-base-contrast/60\">\n Toggle this option to skip these steps next time you want to trade.\n </span>\n ),\n });\n };\n return (\n <Tooltip\n content={\n \"Toggle this option to skip these steps next time you want to trade.\"\n }\n className=\"oui-max-w-[300px]\"\n >\n <button onClick={showRememberHint}>\n <Text\n intensity={54}\n size={\"xs\"}\n className={\n \"oui-underline oui-underline-offset-4 oui-decoration-dashed oui-decoration-base-contrast-36\"\n }\n >\n Remember me\n </Text>\n </button>\n </Tooltip>\n );\n};\n","import { FC } from \"react\";\nimport {\n Box,\n CheckedCircleFillIcon,\n cn,\n Match,\n Spinner,\n Text,\n} from \"@orderly.network/ui\";\n\ntype StepItemProps = {\n active?: boolean;\n isLoading?: boolean;\n isCompleted?: boolean;\n title: string;\n description: string;\n};\n\nexport const StepItem = (props: StepItemProps) => {\n const { title, description } = props;\n\n // console.log(props);\n\n return (\n <Box position=\"relative\" className=\"oui-pl-8\">\n <Box>\n <Text as=\"div\" intensity={98} size={\"sm\"}>\n {title}\n </Text>\n <Text as=\"div\" intensity={54} size={\"2xs\"}>\n {description}\n </Text>\n </Box>\n <Identifier {...props} />\n </Box>\n );\n};\n\nconst Identifier = (props: {\n active?: boolean;\n isLoading?: boolean;\n isCompleted?: boolean;\n}) => {\n const { active, isLoading, isCompleted } = props;\n\n return (\n <Match\n className={\"oui-absolute oui-left-0 oui-top-1 oui-z-10\"}\n value={() => {\n if (isCompleted) {\n return \"completed\";\n }\n if (isLoading) {\n return \"loading\";\n }\n\n if (active) {\n return \"active\";\n }\n\n return \"normal\";\n }}\n case={{\n loading: (\n <div>\n <Spinner size={\"sm\"} className={\"oui-ml-1\"} />\n </div>\n ),\n completed: (\n <div>\n <CheckedCircleFillIcon opacity={1} className=\"oui-text-[rgba(96,140,255,1)]\"/>\n </div>\n ),\n }}\n default={<Dot active={!!active} />}\n />\n );\n};\n\nconst Dot: FC<{ active: boolean; className?: string }> = ({\n active,\n className,\n}) => {\n return (\n <div\n className={cn(\n \"oui-w-[8.3px] oui-h-[8.3px] oui-rounded-full oui-ml-2 oui-mt-1\",\n className,\n active ? \"oui-bg-primary-light\" : \"oui-bg-base-2\"\n )}\n />\n );\n};\n","import { registerSimpleDialog, registerSimpleSheet } from \"@orderly.network/ui\";\n\nimport { useWalletConnectorBuilder } from \"./useWalletConnectorBuilder\";\nimport { WalletConnectContent } from \"./walletConnectorContent\";\n\nexport const WalletConnectorModalId = \"walletConnector\" as const;\nexport const WalletConnectorSheetId = \"walletConnectorSheet\" as const;\n\nexport const WalletConnectorWidget = (props: any) => {\n const state = useWalletConnectorBuilder();\n return <WalletConnectContent {...state} {...props} />;\n};\n\nregisterSimpleDialog(WalletConnectorModalId, WalletConnectorWidget, {\n size: \"sm\",\n title: \"Connect wallet\",\n});\n\nregisterSimpleSheet(WalletConnectorSheetId, WalletConnectorWidget, {\n title: \"Connect wallet\",\n});\n","import {\n useAccount,\n useCheckReferralCode,\n useGetReferralCode,\n useLazyQuery,\n useMutation,\n} from \"@orderly.network/hooks\";\nimport { toast } from \"@orderly.network/ui\";\nimport { useEffect, useMemo, useState } from \"react\";\n\nexport const useWalletConnectorBuilder = () => {\n const { account, state, createOrderlyKey, createAccount } = useAccount();\n const [refCode, setRefCode] = useState(\"\");\n const [helpText, setHelpText] = useState(\"\");\n\n const { trigger: verifyRefCode } = useLazyQuery(\n `/v1/public/referral/verify_ref_code?referral_code=${refCode}`\n );\n\n useEffect(() => {\n const refCode = localStorage.getItem(\"referral_code\");\n if (refCode != null) {\n setRefCode(refCode);\n }\n }, []);\n\n const { referral_code, isLoading } = useGetReferralCode(account.accountId);\n\n const [bindRefCode, { error: updateOrderError, isMutating: updateMutating }] =\n useMutation(\"/v1/referral/bind\", \"POST\");\n\n useEffect(() => {\n if (refCode.length === 0) {\n setHelpText(\"\");\n }\n }, [refCode]);\n\n const enableTradingComplted = () => {\n toast.success(\"Wallet connected\");\n // validate ref code and bind referral code\n if (refCode.length >= 4 && refCode.length <= 10)\n bindRefCode({ referral_code: refCode }).finally(() => {\n localStorage.removeItem(\"referral_code\");\n });\n };\n\n const checkRefCode = async (): Promise<string | undefined> => {\n if (refCode.length === 0) return Promise.resolve(undefined);\n\n if (refCode.length > 0 && (refCode.length < 4 || refCode.length > 10)) {\n return Promise.resolve(\n \"The referral_code must be 4 to 10 characters long, only accept upper case roman characters and numbers\"\n );\n }\n\n const { exist } = await verifyRefCode();\n \n\n if (exist === false) {\n return Promise.resolve(\"This referral code does not exist.\");\n }\n\n return Promise.resolve(undefined);\n };\n\n\n const showRefCodeInput = (referral_code?.length || 0) === 0 && !isLoading;\n\n\n const signIn = async () => {\n if (showRefCodeInput) {\n const info = await checkRefCode();\n if (typeof info !== \"undefined\") {\n setHelpText(info);\n return Promise.reject(-1);\n }\n }\n setHelpText(\"\");\n return createAccount();\n };\n\n const enableTrading = async (remember: boolean) => {\n if (showRefCodeInput) {\n const info = await checkRefCode();\n if (typeof info !== \"undefined\") {\n setHelpText(info);\n return Promise.reject(-1);\n }\n }\n setHelpText(\"\");\n return createOrderlyKey(remember);\n };\n\n return {\n enableTrading,\n initAccountState: state.status,\n signIn,\n enableTradingComplted,\n refCode,\n setRefCode,\n helpText,\n showRefCodeInput,\n } as const;\n};\n","import { useAccount, useMediaQuery } from \"@orderly.network/hooks\";\nimport {\n AccountStatusEnum,\n MEDIA_TABLET,\n NetworkId,\n} from \"@orderly.network/types\";\nimport {\n Button,\n Either,\n Match,\n modal,\n Text,\n toast,\n useScreen,\n type ButtonProps,\n} from \"@orderly.network/ui\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { PropsWithChildren, ReactElement, useMemo } from \"react\";\nimport {\n WalletConnectorModalId,\n WalletConnectorSheetId,\n} from \"./walletConnector\";\nimport { ChainSelectorId, ChainSelectorSheetId } from \"@orderly.network/ui-chain-selector\";\nimport { alertMessages, DESCRIPTIONS, LABELS } from \"../constants/message\";\nimport { Flex } from \"@orderly.network/ui\";\nimport { Box } from \"@orderly.network/ui\";\n\ntype ChainProps = {\n networkId?: NetworkId;\n bridgeLessOnly?: boolean;\n}\n\nexport type AuthGuardProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\n fallback?: (props: {\n validating: boolean;\n status: AccountStatusEnum;\n wrongNetwork: boolean;\n }) => ReactElement;\n // indicator?: ReactElement;\n /**\n * Required state to be satisfied\n * @default AccountStatusEnum.EnableTrading\n */\n status?: AccountStatusEnum;\n\n bridgeLessOnly?: boolean;\n\n buttonProps?: ButtonProps;\n\n descriptions?: alertMessages;\n\n labels?: alertMessages;\n\n classNames?: {\n root?: string;\n description?: string;\n // button?: string;\n };\n\n networkId?: NetworkId;\n\n // validatingIndicator?: ReactElement;\n};\n\nconst AuthGuard = (props: PropsWithChildren<AuthGuardProps>) => {\n const {\n status = AccountStatusEnum.EnableTrading,\n buttonProps,\n fallback,\n descriptions,\n classNames,\n networkId,\n id,\n bridgeLessOnly,\n // ...rest\n } = props;\n const { state } = useAccount();\n const { wrongNetwork } = useAppContext();\n\n const labels = { ...LABELS, ...props.labels };\n\n // return Match(state.status)\n // .with(AccountStatusEnum.EnableTrading, () => props.children)\n // .with(AccountStatusEnum.DisableTrading, () => props.fallback)\n // .with(AccountStatusEnum.Validating, () => props.validatingIndicator)\n // .otherwise(() => props.fallback);\n //\n\n const Left = useMemo<ReactElement>(() => {\n if (typeof fallback !== \"undefined\") {\n return fallback({\n validating: state.validating,\n status: state.status,\n wrongNetwork,\n });\n }\n\n if (state.validating) {\n return (\n <StatusInfo\n // variant={\"gradient\"}\n angle={45}\n // fullWidth\n disabled\n loading\n description={descriptions?.connectWallet}\n id={id}\n type=\"button\"\n {...buttonProps}\n >\n {labels.connectWallet}\n </StatusInfo>\n );\n }\n\n return (\n <DefaultFallback\n bridgeLessOnly={bridgeLessOnly}\n status={state.status}\n buttonProps={{ ...buttonProps, id, type: \"button\" }}\n wrongNetwork={wrongNetwork}\n networkId={props.networkId}\n labels={labels}\n descriptions={descriptions}\n />\n );\n }, [state.status, state.validating, buttonProps, wrongNetwork]);\n\n /**\n * **Important: The chldren component will be rendered only if the status is equal to the required status and the network is correct.**\n */\n\n return (\n <Either value={state.status >= status && !wrongNetwork} left={Left}>\n {props.children}\n </Either>\n );\n};\n\nconst DefaultFallback = (props: {\n status: AccountStatusEnum;\n wrongNetwork: boolean;\n buttonProps?: ButtonProps;\n networkId?: NetworkId;\n labels: alertMessages;\n bridgeLessOnly?: boolean;\n\n descriptions?: alertMessages;\n}) => {\n const { buttonProps, labels, descriptions } = props;\n const { connectWallet } = useAppContext();\n const { account } = useAccount();\n const { isMobile } = useScreen();\n const matches = useMediaQuery(MEDIA_TABLET);\n // const { connect } = useWalletConnector();\n const onConnectOrderly = () => {\n modal.show(matches ? WalletConnectorSheetId : WalletConnectorModalId).then(\n (r) => console.log(r),\n (error) => console.log(error)\n );\n };\n\n const onConnectWallet = async () => {\n const res = await connectWallet();\n\n if (!res) return;\n\n if (res.wrongNetwork) {\n switchChain();\n } else {\n if (\n (res?.status ?? AccountStatusEnum.NotConnected) <\n AccountStatusEnum.EnableTrading\n ) {\n onConnectOrderly();\n }\n }\n };\n\n const switchChain = () => {\n account.once(\"validate:end\", (status) => {\n if (status < AccountStatusEnum.EnableTrading) {\n onConnectOrderly();\n } else {\n toast.success(\"Wallet connected\");\n }\n });\n\n modal\n .show<{\n wrongNetwork: boolean;\n }>(isMobile ? ChainSelectorSheetId : ChainSelectorId, {\n networkId: props.networkId,\n bridgeLessOnly: props.bridgeLessOnly,\n })\n .then(\n (r) => {\n if (!r.wrongNetwork) {\n if (props.status >= AccountStatusEnum.Connected) {\n if (props.status < AccountStatusEnum.EnableTrading) {\n onConnectOrderly();\n } else {\n toast.success(\"Wallet connected\");\n }\n }\n }\n },\n (error) => console.log(\"[switchChain error]\", error)\n );\n };\n\n if (props.wrongNetwork) {\n return (\n <StatusInfo\n color=\"warning\"\n // size=\"md\"\n // fullWidth\n onClick={() => {\n switchChain();\n }}\n description={descriptions?.switchChain}\n {...buttonProps}\n >\n {labels.switchChain}\n </StatusInfo>\n );\n }\n\n return (\n <Match\n value={props.status}\n case={(value: AccountStatusEnum) => {\n if (value <= AccountStatusEnum.NotConnected) {\n return (\n <StatusInfo\n size=\"lg\"\n onClick={() => {\n onConnectWallet();\n }}\n // fullWidth\n variant={\"gradient\"}\n angle={45}\n description={descriptions?.connectWallet}\n {...buttonProps}\n >\n {labels.connectWallet}\n </StatusInfo>\n );\n }\n if (value <= AccountStatusEnum.NotSignedIn) {\n return (\n <StatusInfo\n size=\"lg\"\n onClick={() => {\n onConnectOrderly();\n }}\n // fullWidth\n angle={45}\n description={descriptions?.signin}\n {...buttonProps}\n >\n {labels.signin}\n </StatusInfo>\n );\n }\n }}\n default={\n <StatusInfo\n size=\"lg\"\n // fullWidth\n description={descriptions?.enableTrading}\n {...buttonProps}\n onClick={() => onConnectOrderly()}\n >\n {labels.enableTrading}\n </StatusInfo>\n }\n />\n );\n};\n\nAuthGuard.displayName = \"AuthGuard\";\n\nconst StatusInfo = (\n props: ButtonProps & {\n description?: string;\n }\n) => {\n const { description, ...buttonProps } = props;\n return (\n <Flex direction={\"column\"}>\n <Button {...buttonProps}></Button>\n {!!description && (\n <Box mt={4} className=\"oui-leading-none\" style={{ lineHeight: 0 }}>\n <Text size=\"2xs\" intensity={36}>\n {description}\n </Text>\n </Box>\n )}\n </Flex>\n );\n};\n\nexport { AuthGuard };\n","export type alertMessages = {\n connectWallet?: string;\n switchChain?: string;\n enableTrading?: string;\n signin?: string;\n};\n\nexport const LABELS = {\n connectWallet: \"Connect wallet\",\n switchChain: \"Wrong network\",\n enableTrading: \"Enable trading\",\n signin: \"Sign in\",\n};\n\nexport const DESCRIPTIONS: alertMessages = {\n connectWallet: \"Please Connect wallet before starting to trade\",\n switchChain: \"Please switch to a supported network to continue\",\n enableTrading: \"Please Enable trading before starting to trade\",\n signin: \"Please sign in before starting to trade\",\n};\n","import { PropsWithChildren } from \"react\";\nimport { DataTable, DataTableProps, ExtensionSlot } from \"@orderly.network/ui\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { alertMessages, DESCRIPTIONS } from \"../constants/message\";\nimport { useAppContext, useDataTap } from \"@orderly.network/react-app\";\nimport { Flex } from \"@orderly.network/ui\";\nimport { AuthGuard } from \"./authGuard\";\nimport { useAccount } from \"@orderly.network/hooks\";\n\nexport const AuthGuardDataTable = <RecordType extends unknown>(\n props: PropsWithChildren<\n DataTableProps<RecordType> &\n Omit<GuardViewProps, \"status\"> & {\n status?: AccountStatusEnum;\n classNames?: DataTableProps<RecordType>[\"classNames\"] & {\n authGuardDescription?: string;\n };\n }\n >\n) => {\n const {\n status = AccountStatusEnum.EnableTrading,\n // message,\n labels,\n description,\n dataSource,\n ...rest\n } = props;\n const data = useDataTap(dataSource, {\n accountStatus: status,\n });\n const { state } = useAccount();\n const { wrongNetwork } = useAppContext();\n\n return (\n <DataTable\n {...rest}\n dataSource={data}\n ignoreLoadingCheck={\n wrongNetwork || state.status < status || props.ignoreLoadingCheck\n }\n emptyView={\n <GuardView\n status={status}\n description={description}\n labels={labels}\n className={props.classNames?.authGuardDescription}\n visible={!state.validating}\n />\n }\n />\n );\n};\n\ntype GuardViewProps = {\n status: AccountStatusEnum;\n description?: alertMessages;\n labels?: alertMessages;\n className?: string;\n visible?: boolean;\n};\n\nconst GuardView = (props: GuardViewProps) => {\n const descriptions = { ...DESCRIPTIONS, ...props.description };\n if (!props.visible) return null;\n return (\n <Flex py={8}>\n <AuthGuard\n status={props.status}\n labels={props.labels}\n descriptions={descriptions}\n buttonProps={{\n size: \"md\",\n }}\n >\n <ExtensionSlot position={\"emptyDataState\"} />\n </AuthGuard>\n </Flex>\n );\n};\n","import { PropsWithChildren } from \"react\";\nimport {\n DataTableProps,\n ExtensionSlot,\n TableView,\n TableViewProps,\n} from \"@orderly.network/ui\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { alertMessages, DESCRIPTIONS } from \"../constants/message\";\nimport { useAppContext, useDataTap } from \"@orderly.network/react-app\";\nimport { Flex } from \"@orderly.network/ui\";\nimport { AuthGuard } from \"./authGuard\";\nimport { useAccount } from \"@orderly.network/hooks\";\n\nexport const AuthGuardTableView = <RecordType extends unknown>(\n props: PropsWithChildren<\n TableViewProps<RecordType> &\n Omit<GuardViewProps, \"status\"> & {\n status?: AccountStatusEnum;\n classNames?: DataTableProps<RecordType>[\"classNames\"] & {\n authGuardDescription?: string;\n };\n }\n >\n) => {\n const {\n status = AccountStatusEnum.EnableTrading,\n // message,\n labels,\n description,\n dataSource,\n ...rest\n } = props;\n const data = useDataTap(dataSource, {\n accountStatus: status,\n });\n const { state } = useAccount();\n const { wrongNetwork } = useAppContext();\n\n return (\n <TableView\n dataSource={data}\n ignoreLoadingCheck={\n wrongNetwork || state.status < status || props.ignoreLoadingCheck\n }\n emptyView={\n <GuardView\n status={status}\n description={description}\n labels={labels}\n className={props.classNames?.authGuardDescription}\n visible={!state.validating}\n />\n }\n manualPagination\n {...rest}\n />\n );\n};\n\ntype GuardViewProps = {\n status: AccountStatusEnum;\n description?: alertMessages;\n labels?: alertMessages;\n className?: string;\n visible?: boolean;\n};\n\nconst GuardView = (props: GuardViewProps) => {\n const descriptions = { ...DESCRIPTIONS, ...props.description };\n if (!props.visible) return null;\n return (\n <Flex py={8}>\n <AuthGuard\n status={props.status}\n labels={props.labels}\n descriptions={descriptions}\n buttonProps={{\n size: \"md\",\n }}\n >\n <ExtensionSlot position={\"emptyDataState\"} />\n </AuthGuard>\n </Flex>\n );\n};\n","import { AccountStatusEnum } from \"@orderly.network/types\";\nimport {\n Box,\n EmptyDataState,\n} from \"@orderly.network/ui\";\nimport { PropsWithChildren } from \"react\";\nimport { AuthGuard } from \"./authGuard\";\n\ntype AuthGuardProps = {\n /** default value is\n * ```ts\n * {\n * connectWallet: \"Please connect wallet before starting to trade\",\n * signIn: \"Please sign in before starting to trade\",\n * enableTrading: \"Please sign in before starting to trade\",\n * wrongNetwork: \"Please switch to a supported network to continue.\",\n * }\n * ```\n */\n hint?: {\n connectWallet?: string;\n signIn?: string;\n enableTrading?: string;\n wrongNetwork?: string;\n };\n status?: AccountStatusEnum;\n};\n\nconst AuthGuardEmpty = (props: PropsWithChildren<AuthGuardProps>) => {\n const {\n hint = {\n connectWallet: \"Please connect wallet before starting to trade\",\n signIn: \"Please sign in before starting to trade\",\n enableTrading: \"Please sign in before starting to trade\",\n wrongNetwork: \"Please switch to a supported network to continue.\",\n },\n status,\n } = props;\n\n return (\n <Box my={8}>\n <AuthGuard status={status} descriptions={{...hint, switchChain: hint.wrongNetwork}}>\n {props.children || <EmptyDataState />}\n </AuthGuard>\n </Box>\n );\n};\n\nAuthGuardEmpty.displayName = \"AuthGuardEmpty\";\n\nexport { AuthGuardEmpty };\n","import { useAccount } from \"@orderly.network/hooks\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { Tooltip } from \"@orderly.network/ui\";\nimport { PropsWithChildren, useMemo } from \"react\";\n\ntype AuthGuardProps = {\n content?: string;\n align?: \"center\" | \"end\" | \"start\";\n alignOffset?: number;\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n sideOffset?: number;\n opactiy?: number;\n tooltip?: {\n connectWallet?: string;\n signIn?: string;\n enableTrading?: string;\n wrongNetwork?: string;\n };\n};\n\nconst AuthGuardTooltip = (props: PropsWithChildren<AuthGuardProps>) => {\n const {\n opactiy = 90,\n tooltip = {\n connectWallet: \"Please connect wallet before set up\",\n signIn: \"Please sign in before set up\",\n enableTrading: \"Please enable trading before set up\",\n wrongNetwork: \"Please switch to a supported network to set up\",\n },\n } = props;\n const { state } = useAccount();\n const isSupport = true;\n const { wrongNetwork } = useAppContext();\n\n const hint = useMemo(() => {\n if (wrongNetwork) {\n return tooltip?.wrongNetwork;\n }\n switch (state.status) {\n case AccountStatusEnum.NotConnected:\n return tooltip?.connectWallet;\n case AccountStatusEnum.NotSignedIn:\n return tooltip?.signIn;\n case AccountStatusEnum.DisabledTrading:\n return tooltip?.enableTrading;\n case AccountStatusEnum.EnableTrading: {\n if (!isSupport) return tooltip?.wrongNetwork;\n return \"\";\n }\n default:\n return props.content;\n }\n }, [props.content, state, isSupport, tooltip]);\n\n const newOpacity = useMemo(() => {\n switch (state.status) {\n case AccountStatusEnum.NotConnected:\n case AccountStatusEnum.NotSignedIn:\n return opactiy;\n case AccountStatusEnum.EnableTrading: {\n if (!isSupport) return opactiy;\n return undefined;\n }\n default:\n return undefined;\n }\n }, [props.opactiy, state, isSupport]);\n\n return (\n <Tooltip\n content={hint}\n className=\"oui-text-2xs\"\n align={props.align}\n alignOffset={props.alignOffset}\n side={props.side}\n sideOffset={props.sideOffset}\n >\n <div\n style={{\n opacity: newOpacity,\n }}\n >\n {props.children}\n </div>\n </Tooltip>\n );\n};\n\nAuthGuardTooltip.displayName = \"AuthGuardTooltip\";\n\nexport { AuthGuardTooltip };\n"]}
package/dist/index.mjs CHANGED
@@ -1,13 +1,13 @@
1
1
  import { useState, useEffect, useMemo } from 'react';
2
- import { registerSimpleDialog, registerSimpleSheet, Box, Text, Divider, Flex, Switch, Match, Button, TextField, inputFormatter, Tooltip, modal, Either, DataTable, ExtensionSlot, EmptyDataState, Spinner, CheckedCircleFillIcon, cn, toast } from '@orderly.network/ui';
2
+ import { registerSimpleDialog, registerSimpleSheet, Box, Text, Divider, Flex, Switch, Match, Button, TextField, inputFormatter, Tooltip, modal, Either, useScreen, DataTable, ExtensionSlot, TableView, EmptyDataState, Spinner, CheckedCircleFillIcon, cn, toast } from '@orderly.network/ui';
3
3
  import { AccountStatusEnum, MEDIA_TABLET } from '@orderly.network/types';
4
4
  import { jsxs, jsx } from 'react/jsx-runtime';
5
5
  import { useAccount, useLocalStorage, useLazyQuery, useGetReferralCode, useMutation, useMediaQuery } from '@orderly.network/hooks';
6
6
  import { useAppContext, useDataTap } from '@orderly.network/react-app';
7
- import { ChainSelectorId } from '@orderly.network/ui-chain-selector';
7
+ import { ChainSelectorSheetId, ChainSelectorId } from '@orderly.network/ui-chain-selector';
8
8
 
9
- var z=e=>{let{title:t,description:n}=e;return jsxs(Box,{position:"relative",className:"oui-pl-8",children:[jsxs(Box,{children:[jsx(Text,{as:"div",intensity:98,size:"sm",children:t}),jsx(Text,{as:"div",intensity:54,size:"2xs",children:n})]}),jsx(ce,{...e})]})},ce=e=>{let{active:t,isLoading:n,isCompleted:s}=e;return jsx(Match,{className:"oui-absolute oui-left-0 oui-top-1 oui-z-10",value:()=>s?"completed":n?"loading":t?"active":"normal",case:{loading:jsx("div",{children:jsx(Spinner,{size:"sm",className:"oui-ml-1"})}),completed:jsx("div",{children:jsx(CheckedCircleFillIcon,{opacity:1,className:"oui-text-[rgba(96,140,255,1)]"})})},default:jsx(ue,{active:!!t})})},ue=({active:e,className:t})=>jsx("div",{className:cn("oui-w-[8.3px] oui-h-[8.3px] oui-rounded-full oui-ml-2 oui-mt-1",t,e?"oui-bg-primary-light":"oui-bg-base-2")});var R=e=>{let{initAccountState:t=AccountStatusEnum.NotConnected}=e,[n,s]=useState(!0),{state:o}=useAccount(),[u,m]=useState(t),[a,f]=useState(0),[c,r]=useState(!1),[w]=useLocalStorage("oui-first-show-wallet-connector-dialog",void 0);useEffect(()=>()=>{localStorage.setItem("oui-first-show-wallet-connector-dialog","1");},[]),useEffect(()=>{m(o.status);},[o]);let y=useMemo(()=>{let i=[];return t<AccountStatusEnum.SignedIn&&i.push({key:"signIn",title:"Sign In",description:"Confirm you are the owner of this wallet"}),t<AccountStatusEnum.EnableTrading&&i.push({key:"enableTrading",title:"Enable Trading",description:"Enable secure access to our API for lightning fast trading"}),i},[]),W=()=>(r(!0),e.enableTrading(n).then(async i=>{r(!1),f(d=>d+1);try{await e.enableTradingComplted?.();}catch{}typeof e.onCompleted=="function"?e.onCompleted():typeof e.close=="function"&&e.close();},i=>{r(!1),i!==-1&&toast.error(i.message??"User rejected the request");}).catch(i=>{r(!1);})),v=()=>(r(!0),e.signIn().then(i=>{f(d=>d+1),W();},i=>{r(!1),i!==-1&&toast.error("User rejected the request");}).catch(i=>{r(!1);}));return jsxs(Box,{id:"oui-wallet-connect-dialog-content",className:"oui-font-semibold",children:[jsx(Text,{intensity:54,size:"xs",children:"Your previous access has expired, you will receive a signature request to enable trading. Signing is free and will not send a transaction."}),jsxs(Box,{p:4,my:6,intensity:600,r:"lg",className:"oui-space-y-5",position:"relative",children:[y.map((i,d)=>jsx(z,{title:i.title,description:i.description,isCompleted:a>d,active:a===d,isLoading:c&&a===d},i.key)),y.length>1&&jsx(Box,{position:"absolute",height:"38px",left:28,top:18,zIndex:0,children:jsx(Divider,{lineStyle:"dashed",direction:"vertical",intensity:16,className:"oui-h-full"})})]}),e.showRefCodeInput&&y.length==2&&jsx(Te,{...e}),w&&jsxs(Flex,{justify:"between",itemAlign:"center",children:[jsx(Se,{}),jsx(Switch,{color:"primary",checked:n,onCheckedChange:s,disabled:c,className:"data-[state=checked]:oui-bg-[#3347FD]"})]}),jsx(Flex,{justify:"center",mt:8,children:jsx(Box,{width:"45%",children:jsx(xe,{state:u,signIn:v,enableTrading:W,loading:c,disabled:u>=AccountStatusEnum.EnableTrading})})})]})},xe=({state:e,signIn:t,enableTrading:n,loading:s,disabled:o})=>jsx(Match,{value:()=>e<=AccountStatusEnum.NotSignedIn?"signIn":"enableTrading",case:{signIn:jsx(Button,{fullWidth:!0,onClick:()=>t(),loading:s,disabled:o,children:"Sign In"}),enableTrading:jsx(Button,{fullWidth:!0,onClick:()=>n(),loading:s,disabled:o,children:"Enable Trading"})}}),Te=e=>jsx(TextField,{placeholder:"Referral code (Optional)",fullWidth:!0,label:"",value:e.refCode,onChange:t=>{e.setRefCode(t.target.value);},classNames:{label:"oui-text-base-contrast-54 oui-text-xs",input:"placeholder:oui-text-base-contrast-20 placeholder:oui-text-sm"},formatters:[inputFormatter.createRegexInputFormatter(/[^A-Z0-9]/g)],onClear:()=>{e.setRefCode("");},autoComplete:"off",helpText:e.helpText,className:"oui-mb-4",color:e.helpText?"danger":void 0}),Se=()=>jsx(Tooltip,{content:"Toggle this option to skip these steps next time you want to trade.",className:"oui-max-w-[300px]",children:jsx("button",{onClick:()=>{window.innerWidth>768||modal.alert({title:"Remember me",message:jsx("span",{className:"oui-text-2xs oui-text-base-contrast/60",children:"Toggle this option to skip these steps next time you want to trade."})});},children:jsx(Text,{intensity:54,size:"xs",className:"oui-underline oui-underline-offset-4 oui-decoration-dashed oui-decoration-base-contrast-36",children:"Remember me"})})});var B=()=>{let{account:e,state:t,createOrderlyKey:n,createAccount:s}=useAccount(),[o,u]=useState(""),[m,a]=useState(""),{trigger:f}=useLazyQuery(`/v1/public/referral/verify_ref_code?referral_code=${o}`);useEffect(()=>{let h=localStorage.getItem("referral_code");h!=null&&u(h);},[]);let{referral_code:c,isLoading:r}=useGetReferralCode(e.accountId),[w,{error:y,isMutating:W}]=useMutation("/v1/referral/bind","POST");useEffect(()=>{o.length===0&&a("");},[o]);let v=()=>{toast.success("Wallet connected"),o.length>=4&&o.length<=10&&w({referral_code:o}).finally(()=>{localStorage.removeItem("referral_code");});},i=async()=>{if(o.length===0)return Promise.resolve(void 0);if(o.length>0&&(o.length<4||o.length>10))return Promise.resolve("The referral_code must be 4 to 10 characters long, only accept upper case roman characters and numbers");let{exist:h}=await f();return h===!1?Promise.resolve("This referral code does not exist."):Promise.resolve(void 0)},d=(c?.length||0)===0&&!r,re=async()=>{if(d){let h=await i();if(typeof h<"u")return a(h),Promise.reject(-1)}return a(""),s()};return {enableTrading:async h=>{if(d){let L=await i();if(typeof L<"u")return a(L),Promise.reject(-1)}return a(""),n(h)},initAccountState:t.status,signIn:re,enableTradingComplted:v,refCode:o,setRefCode:u,helpText:m,showRefCodeInput:d}};var A="walletConnector",k="walletConnectorSheet",G=e=>{let t=B();return jsx(R,{...t,...e})};registerSimpleDialog(A,G,{size:"sm",title:"Connect wallet"});registerSimpleSheet(k,G,{title:"Connect wallet"});var Y={connectWallet:"Connect wallet",switchChain:"Switch network",enableTrading:"Enable trading",signin:"Sign in"},Z={connectWallet:"Please Connect wallet before starting to trade",switchChain:"Please switch to a supported network to continue",enableTrading:"Please Enable trading before starting to trade",signin:"Please sign in before starting to trade"};var x=e=>{let{status:t=AccountStatusEnum.EnableTrading,buttonProps:n,fallback:s,descriptions:o,classNames:u,networkId:m,id:a,bridgeLessOnly:f}=e,{state:c}=useAccount(),{wrongNetwork:r}=useAppContext(),w={...Y,...e.labels},y=useMemo(()=>typeof s<"u"?s({validating:c.validating,status:c.status,wrongNetwork:r}):c.validating?jsx(S,{angle:45,disabled:!0,loading:!0,description:o?.connectWallet,id:a,type:"button",...n,children:w.connectWallet}):jsx(He,{bridgeLessOnly:f,status:c.status,buttonProps:{...n,id:a,type:"button"},wrongNetwork:r,networkId:e.networkId,labels:w,descriptions:o}),[c.status,c.validating,n,r]);return jsx(Either,{value:c.status>=t&&!r,left:y,children:e.children})},He=e=>{let{buttonProps:t,labels:n,descriptions:s}=e,{connectWallet:o}=useAppContext(),{account:u}=useAccount(),m=useMediaQuery(MEDIA_TABLET),a=()=>{modal.show(m?k:A).then(r=>{},r=>{});},f=async()=>{let r=await o();r&&(r.wrongNetwork?c():(r?.status??AccountStatusEnum.NotConnected)<AccountStatusEnum.EnableTrading&&a());},c=()=>{u.once("validate:end",r=>{r<AccountStatusEnum.EnableTrading?a():toast.success("Wallet connected");}),modal.show(ChainSelectorId,{networkId:e.networkId,bridgeLessOnly:e.bridgeLessOnly}).then(r=>{r.wrongNetwork||e.status>=AccountStatusEnum.Connected&&(e.status<AccountStatusEnum.EnableTrading?a():toast.success("Wallet connected"));},r=>{});};return e.wrongNetwork?jsx(S,{color:"warning",onClick:()=>{c();},description:s?.switchChain,...t,children:n.switchChain}):jsx(Match,{value:e.status,case:r=>{if(r<=AccountStatusEnum.NotConnected)return jsx(S,{size:"lg",onClick:()=>{f();},variant:"gradient",angle:45,description:s?.connectWallet,...t,children:n.connectWallet});if(r<=AccountStatusEnum.NotSignedIn)return jsx(S,{size:"lg",onClick:()=>{a();},angle:45,description:s?.signin,...t,children:n.signin})},default:jsx(S,{size:"lg",description:s?.enableTrading,...t,onClick:()=>a(),children:n.enableTrading})})};x.displayName="AuthGuard";var S=e=>{let{description:t,...n}=e;return jsxs(Flex,{direction:"column",children:[jsx(Button,{...n}),!!t&&jsx(Box,{mt:4,className:"oui-leading-none",style:{lineHeight:0},children:jsx(Text,{size:"2xs",intensity:36,children:t})})]})};var je=e=>{let{status:t=AccountStatusEnum.EnableTrading,labels:n,description:s,dataSource:o,...u}=e,m=useDataTap(o,{accountStatus:t}),{state:a}=useAccount(),{wrongNetwork:f}=useAppContext();return jsx(DataTable,{...u,dataSource:m,ignoreLoadingCheck:f||a.status<t||e.ignoreLoadingCheck,emptyView:jsx(Je,{status:t,description:s,labels:n,className:e.classNames?.authGuardDescription,visible:!a.validating})})},Je=e=>{let t={...Z,...e.description};return e.visible?jsx(Flex,{py:8,children:jsx(x,{status:e.status,labels:e.labels,descriptions:t,buttonProps:{size:"md"},children:jsx(ExtensionSlot,{position:"emptyDataState"})})}):null};var ee=e=>{let{hint:t={connectWallet:"Please connect wallet before starting to trade",signIn:"Please sign in before starting to trade",enableTrading:"Please sign in before starting to trade",wrongNetwork:"Please switch to a supported network to continue."},status:n}=e;return jsx(Box,{my:8,children:jsx(x,{status:n,descriptions:{...t,switchChain:t.wrongNetwork},children:e.children||jsx(EmptyDataState,{})})})};ee.displayName="AuthGuardEmpty";var oe=e=>{let{opactiy:t=90,tooltip:n={connectWallet:"Please connect wallet before set up",signIn:"Please sign in before set up",enableTrading:"Please enable trading before set up",wrongNetwork:"Please switch to a supported network to set up"}}=e,{state:s}=useAccount(),o=!0,{wrongNetwork:u}=useAppContext(),m=useMemo(()=>{if(u)return n?.wrongNetwork;switch(s.status){case AccountStatusEnum.NotConnected:return n?.connectWallet;case AccountStatusEnum.NotSignedIn:return n?.signIn;case AccountStatusEnum.DisabledTrading:return n?.enableTrading;case AccountStatusEnum.EnableTrading:return "";default:return e.content}},[e.content,s,o,n]),a=useMemo(()=>{switch(s.status){case AccountStatusEnum.NotConnected:case AccountStatusEnum.NotSignedIn:return t;case AccountStatusEnum.EnableTrading:return void 0;default:return}},[e.opactiy,s,o]);return jsx(Tooltip,{content:m,className:"oui-text-2xs",align:e.align,alignOffset:e.alignOffset,side:e.side,sideOffset:e.sideOffset,children:jsx("div",{style:{opacity:a},children:e.children})})};oe.displayName="AuthGuardTooltip";
9
+ var _=e=>{let{title:t,description:n}=e;return jsxs(Box,{position:"relative",className:"oui-pl-8",children:[jsxs(Box,{children:[jsx(Text,{as:"div",intensity:98,size:"sm",children:t}),jsx(Text,{as:"div",intensity:54,size:"2xs",children:n})]}),jsx(ue,{...e})]})},ue=e=>{let{active:t,isLoading:n,isCompleted:r}=e;return jsx(Match,{className:"oui-absolute oui-left-0 oui-top-1 oui-z-10",value:()=>r?"completed":n?"loading":t?"active":"normal",case:{loading:jsx("div",{children:jsx(Spinner,{size:"sm",className:"oui-ml-1"})}),completed:jsx("div",{children:jsx(CheckedCircleFillIcon,{opacity:1,className:"oui-text-[rgba(96,140,255,1)]"})})},default:jsx(de,{active:!!t})})},de=({active:e,className:t})=>jsx("div",{className:cn("oui-w-[8.3px] oui-h-[8.3px] oui-rounded-full oui-ml-2 oui-mt-1",t,e?"oui-bg-primary-light":"oui-bg-base-2")});var M=e=>{let{initAccountState:t=AccountStatusEnum.NotConnected}=e,[n,r]=useState(!0),{state:o}=useAccount(),[g,p]=useState(t),[s,d]=useState(0),[m,u]=useState(!1),[a]=useLocalStorage("orderly-first-show-wallet-connector-dialog",void 0);useEffect(()=>()=>{localStorage.setItem("orderly-first-show-wallet-connector-dialog","1");},[]),useEffect(()=>{p(o.status);},[o]);let S=useMemo(()=>{let i=[];return t<AccountStatusEnum.SignedIn&&i.push({key:"signIn",title:"Sign In",description:"Confirm you are the owner of this wallet"}),t<AccountStatusEnum.EnableTrading&&i.push({key:"enableTrading",title:"Enable Trading",description:"Enable secure access to our API for lightning fast trading"}),i},[]),E=()=>(u(!0),e.enableTrading(n).then(async i=>{u(!1),d(l=>l+1);try{await e.enableTradingComplted?.();}catch{}typeof e.onCompleted=="function"?e.onCompleted():typeof e.close=="function"&&e.close();},i=>{if(u(!1),i===-1)return;let l=i.toString();l.includes("rejected")&&(l="User rejected the request."),toast.error(l);}).catch(i=>{u(!1);})),G=()=>(u(!0),e.signIn().then(i=>{d(l=>l+1),E();},i=>{if(u(!1),i===-1)return;let l=i.toString();l.includes("rejected")&&(l="User rejected the request."),toast.error(l);}).catch(i=>{u(!1);}));return jsxs(Box,{id:"oui-wallet-connect-dialog-content",className:"oui-font-semibold",children:[jsx(Text,{intensity:54,size:"xs",children:"Your previous access has expired, you will receive a signature request to enable trading. Signing is free and will not send a transaction."}),jsxs(Box,{p:4,my:6,intensity:600,r:"lg",className:"oui-space-y-5",position:"relative",children:[S.map((i,l)=>jsx(_,{title:i.title,description:i.description,isCompleted:s>l,active:s===l,isLoading:m&&s===l},i.key)),S.length>1&&jsx(Box,{position:"absolute",height:"38px",left:28,top:18,zIndex:0,children:jsx(Divider,{lineStyle:"dashed",direction:"vertical",intensity:16,className:"oui-h-full"})})]}),e.showRefCodeInput&&S.length==2&&jsx(xe,{...e}),a&&jsxs(Flex,{justify:"between",itemAlign:"center",children:[jsx(Pe,{}),jsx(Switch,{color:"primary",checked:n,onCheckedChange:r,disabled:m,className:"data-[state=checked]:oui-bg-[#3347FD]"})]}),jsx(Flex,{justify:"center",mt:8,children:jsx(Box,{width:"45%",children:jsx(Te,{state:g,signIn:G,enableTrading:E,loading:m,disabled:g>=AccountStatusEnum.EnableTrading})})})]})},Te=({state:e,signIn:t,enableTrading:n,loading:r,disabled:o})=>jsx(Match,{value:()=>e<=AccountStatusEnum.NotSignedIn?"signIn":"enableTrading",case:{signIn:jsx(Button,{fullWidth:!0,onClick:()=>t(),loading:r,disabled:o,children:"Sign In"}),enableTrading:jsx(Button,{fullWidth:!0,onClick:()=>n(),loading:r,disabled:o,children:"Enable Trading"})}}),xe=e=>jsx(TextField,{placeholder:"Referral code (Optional)",fullWidth:!0,label:"",value:e.refCode,onChange:t=>{e.setRefCode(t.target.value);},classNames:{label:"oui-text-base-contrast-54 oui-text-xs",input:"placeholder:oui-text-base-contrast-20 placeholder:oui-text-sm"},formatters:[inputFormatter.createRegexInputFormatter(/[^A-Z0-9]/g)],onClear:()=>{e.setRefCode("");},autoComplete:"off",helpText:e.helpText,className:"oui-mb-4",color:e.helpText?"danger":void 0}),Pe=()=>jsx(Tooltip,{content:"Toggle this option to skip these steps next time you want to trade.",className:"oui-max-w-[300px]",children:jsx("button",{onClick:()=>{window.innerWidth>768||modal.alert({title:"Remember me",message:jsx("span",{className:"oui-text-2xs oui-text-base-contrast/60",children:"Toggle this option to skip these steps next time you want to trade."})});},children:jsx(Text,{intensity:54,size:"xs",className:"oui-underline oui-underline-offset-4 oui-decoration-dashed oui-decoration-base-contrast-36",children:"Remember me"})})});var B=()=>{let{account:e,state:t,createOrderlyKey:n,createAccount:r}=useAccount(),[o,g]=useState(""),[p,s]=useState(""),{trigger:d}=useLazyQuery(`/v1/public/referral/verify_ref_code?referral_code=${o}`);useEffect(()=>{let b=localStorage.getItem("referral_code");b!=null&&g(b);},[]);let{referral_code:m,isLoading:u}=useGetReferralCode(e.accountId),[a,{error:S,isMutating:E}]=useMutation("/v1/referral/bind","POST");useEffect(()=>{o.length===0&&s("");},[o]);let G=()=>{toast.success("Wallet connected"),o.length>=4&&o.length<=10&&a({referral_code:o}).finally(()=>{localStorage.removeItem("referral_code");});},i=async()=>{if(o.length===0)return Promise.resolve(void 0);if(o.length>0&&(o.length<4||o.length>10))return Promise.resolve("The referral_code must be 4 to 10 characters long, only accept upper case roman characters and numbers");let{exist:b}=await d();return b===!1?Promise.resolve("This referral code does not exist."):Promise.resolve(void 0)},l=(m?.length||0)===0&&!u,se=async()=>{if(l){let b=await i();if(typeof b<"u")return s(b),Promise.reject(-1)}return s(""),r()};return {enableTrading:async b=>{if(l){let O=await i();if(typeof O<"u")return s(O),Promise.reject(-1)}return s(""),n(b)},initAccountState:t.status,signIn:se,enableTradingComplted:G,refCode:o,setRefCode:g,helpText:p,showRefCodeInput:l}};var k="walletConnector",v="walletConnectorSheet",D=e=>{let t=B();return jsx(M,{...t,...e})};registerSimpleDialog(k,D,{size:"sm",title:"Connect wallet"});registerSimpleSheet(v,D,{title:"Connect wallet"});var $={connectWallet:"Connect wallet",switchChain:"Wrong network",enableTrading:"Enable trading",signin:"Sign in"},W={connectWallet:"Please Connect wallet before starting to trade",switchChain:"Please switch to a supported network to continue",enableTrading:"Please Enable trading before starting to trade",signin:"Please sign in before starting to trade"};var C=e=>{let{status:t=AccountStatusEnum.EnableTrading,buttonProps:n,fallback:r,descriptions:o,classNames:g,networkId:p,id:s,bridgeLessOnly:d}=e,{state:m}=useAccount(),{wrongNetwork:u}=useAppContext(),a={...$,...e.labels},S=useMemo(()=>typeof r<"u"?r({validating:m.validating,status:m.status,wrongNetwork:u}):m.validating?jsx(x,{angle:45,disabled:!0,loading:!0,description:o?.connectWallet,id:s,type:"button",...n,children:a.connectWallet}):jsx(Qe,{bridgeLessOnly:d,status:m.status,buttonProps:{...n,id:s,type:"button"},wrongNetwork:u,networkId:e.networkId,labels:a,descriptions:o}),[m.status,m.validating,n,u]);return jsx(Either,{value:m.status>=t&&!u,left:S,children:e.children})},Qe=e=>{let{buttonProps:t,labels:n,descriptions:r}=e,{connectWallet:o}=useAppContext(),{account:g}=useAccount(),{isMobile:p}=useScreen(),s=useMediaQuery(MEDIA_TABLET),d=()=>{modal.show(s?v:k).then(a=>{},a=>{});},m=async()=>{let a=await o();a&&(a.wrongNetwork?u():(a?.status??AccountStatusEnum.NotConnected)<AccountStatusEnum.EnableTrading&&d());},u=()=>{g.once("validate:end",a=>{a<AccountStatusEnum.EnableTrading?d():toast.success("Wallet connected");}),modal.show(p?ChainSelectorSheetId:ChainSelectorId,{networkId:e.networkId,bridgeLessOnly:e.bridgeLessOnly}).then(a=>{a.wrongNetwork||e.status>=AccountStatusEnum.Connected&&(e.status<AccountStatusEnum.EnableTrading?d():toast.success("Wallet connected"));},a=>{});};return e.wrongNetwork?jsx(x,{color:"warning",onClick:()=>{u();},description:r?.switchChain,...t,children:n.switchChain}):jsx(Match,{value:e.status,case:a=>{if(a<=AccountStatusEnum.NotConnected)return jsx(x,{size:"lg",onClick:()=>{m();},variant:"gradient",angle:45,description:r?.connectWallet,...t,children:n.connectWallet});if(a<=AccountStatusEnum.NotSignedIn)return jsx(x,{size:"lg",onClick:()=>{d();},angle:45,description:r?.signin,...t,children:n.signin})},default:jsx(x,{size:"lg",description:r?.enableTrading,...t,onClick:()=>d(),children:n.enableTrading})})};C.displayName="AuthGuard";var x=e=>{let{description:t,...n}=e;return jsxs(Flex,{direction:"column",children:[jsx(Button,{...n}),!!t&&jsx(Box,{mt:4,className:"oui-leading-none",style:{lineHeight:0},children:jsx(Text,{size:"2xs",intensity:36,children:t})})]})};var et=e=>{let{status:t=AccountStatusEnum.EnableTrading,labels:n,description:r,dataSource:o,...g}=e,p=useDataTap(o,{accountStatus:t}),{state:s}=useAccount(),{wrongNetwork:d}=useAppContext();return jsx(DataTable,{...g,dataSource:p,ignoreLoadingCheck:d||s.status<t||e.ignoreLoadingCheck,emptyView:jsx(tt,{status:t,description:r,labels:n,className:e.classNames?.authGuardDescription,visible:!s.validating})})},tt=e=>{let t={...W,...e.description};return e.visible?jsx(Flex,{py:8,children:jsx(C,{status:e.status,labels:e.labels,descriptions:t,buttonProps:{size:"md"},children:jsx(ExtensionSlot,{position:"emptyDataState"})})}):null};var ct=e=>{let{status:t=AccountStatusEnum.EnableTrading,labels:n,description:r,dataSource:o,...g}=e,p=useDataTap(o,{accountStatus:t}),{state:s}=useAccount(),{wrongNetwork:d}=useAppContext();return jsx(TableView,{dataSource:p,ignoreLoadingCheck:d||s.status<t||e.ignoreLoadingCheck,emptyView:jsx(ut,{status:t,description:r,labels:n,className:e.classNames?.authGuardDescription,visible:!s.validating}),manualPagination:!0,...g})},ut=e=>{let t={...W,...e.description};return e.visible?jsx(Flex,{py:8,children:jsx(C,{status:e.status,labels:e.labels,descriptions:t,buttonProps:{size:"md"},children:jsx(ExtensionSlot,{position:"emptyDataState"})})}):null};var te=e=>{let{hint:t={connectWallet:"Please connect wallet before starting to trade",signIn:"Please sign in before starting to trade",enableTrading:"Please sign in before starting to trade",wrongNetwork:"Please switch to a supported network to continue."},status:n}=e;return jsx(Box,{my:8,children:jsx(C,{status:n,descriptions:{...t,switchChain:t.wrongNetwork},children:e.children||jsx(EmptyDataState,{})})})};te.displayName="AuthGuardEmpty";var re=e=>{let{opactiy:t=90,tooltip:n={connectWallet:"Please connect wallet before set up",signIn:"Please sign in before set up",enableTrading:"Please enable trading before set up",wrongNetwork:"Please switch to a supported network to set up"}}=e,{state:r}=useAccount(),o=!0,{wrongNetwork:g}=useAppContext(),p=useMemo(()=>{if(g)return n?.wrongNetwork;switch(r.status){case AccountStatusEnum.NotConnected:return n?.connectWallet;case AccountStatusEnum.NotSignedIn:return n?.signIn;case AccountStatusEnum.DisabledTrading:return n?.enableTrading;case AccountStatusEnum.EnableTrading:return "";default:return e.content}},[e.content,r,o,n]),s=useMemo(()=>{switch(r.status){case AccountStatusEnum.NotConnected:case AccountStatusEnum.NotSignedIn:return t;case AccountStatusEnum.EnableTrading:return void 0;default:return}},[e.opactiy,r,o]);return jsx(Tooltip,{content:p,className:"oui-text-2xs",align:e.align,alignOffset:e.alignOffset,side:e.side,sideOffset:e.sideOffset,children:jsx("div",{style:{opacity:s},children:e.children})})};re.displayName="AuthGuardTooltip";
10
10
 
11
- export { x as AuthGuard, je as AuthGuardDataTable, ee as AuthGuardEmpty, oe as AuthGuardTooltip, R as WalletConnectContent, A as WalletConnectorModalId, k as WalletConnectorSheetId, G as WalletConnectorWidget, B as useWalletConnectorBuilder };
11
+ export { C as AuthGuard, et as AuthGuardDataTable, te as AuthGuardEmpty, ct as AuthGuardTableView, re as AuthGuardTooltip, M as WalletConnectContent, k as WalletConnectorModalId, v as WalletConnectorSheetId, D as WalletConnectorWidget, B as useWalletConnectorBuilder };
12
12
  //# sourceMappingURL=out.js.map
13
13
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/component/walletConnectorContent.tsx","../src/component/step.tsx","../src/component/walletConnector.tsx","../src/component/useWalletConnectorBuilder.ts","../src/component/authGuard.tsx","../src/constants/message.ts","../src/component/authGuardDataTable.tsx","../src/component/authGuardEmpty.tsx","../src/component/authGuardTooltip.tsx"],"names":["useEffect","useMemo","useState","Box","Button","Divider","Flex","inputFormatter","Match","modal","Switch","Text","TextField","toast","Tooltip","AccountStatusEnum","CheckedCircleFillIcon","cn","Spinner","jsx","jsxs","StepItem","props","title","description","Identifier","active","isLoading","isCompleted","Dot","className","useAccount","useLocalStorage","WalletConnectContent","initAccountState","remember","setRemember","accountState","state","setState","activeStep","setActiveStep","loading","setLoading","firstShowDialog","steps","onEnableTrading","res","step","reject","e","onSignIn","index","ReferralCode","RememberMe","ActionButton","signIn","enableTrading","disabled","registerSimpleDialog","registerSimpleSheet","useGetReferralCode","useLazyQuery","useMutation","useWalletConnectorBuilder","account","createOrderlyKey","createAccount","refCode","setRefCode","helpText","setHelpText","verifyRefCode","referral_code","bindRefCode","updateOrderError","updateMutating","enableTradingComplted","checkRefCode","exist","showRefCodeInput","info","WalletConnectorModalId","WalletConnectorSheetId","WalletConnectorWidget","useMediaQuery","MEDIA_TABLET","Either","useAppContext","ChainSelectorId","LABELS","DESCRIPTIONS","AuthGuard","status","buttonProps","fallback","descriptions","classNames","networkId","id","bridgeLessOnly","wrongNetwork","labels","Left","StatusInfo","DefaultFallback","connectWallet","matches","onConnectOrderly","error","onConnectWallet","switchChain","value","DataTable","ExtensionSlot","useDataTap","AuthGuardDataTable","dataSource","rest","data","GuardView","EmptyDataState","AuthGuardEmpty","hint","AuthGuardTooltip","opactiy","tooltip","isSupport","newOpacity"],"mappings":"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","sourcesContent":["import { FC, useEffect, useMemo, useState } from \"react\";\nimport {\n Box,\n Button,\n cn,\n Divider,\n Flex,\n Input,\n inputFormatter,\n Match,\n modal,\n Switch,\n Text,\n TextField,\n toast,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { StepItem } from \"./step\";\nimport { useAccount, useLocalStorage } from \"@orderly.network/hooks\";\n\nexport type WalletConnectContentProps = {\n initAccountState: AccountStatusEnum;\n signIn: () => Promise<any>;\n enableTrading: (remember: boolean) => Promise<any>;\n enableTradingComplted?: () => Promise<void>;\n onCompleted?: () => void;\n close?: () => void;\n refCode: string;\n setRefCode: React.Dispatch<React.SetStateAction<string>>;\n helpText?: string;\n showRefCodeInput: boolean;\n};\n\nexport const WalletConnectContent = (props: WalletConnectContentProps) => {\n const { initAccountState = AccountStatusEnum.NotConnected } = props;\n const [remember, setRemember] = useState(true);\n\n const { state: accountState } = useAccount();\n const [state, setState] = useState(initAccountState);\n const [activeStep, setActiveStep] = useState(0);\n const [loading, setLoading] = useState(false);\n const [firstShowDialog] = useLocalStorage(\n \"oui-first-show-wallet-connector-dialog\",\n undefined\n );\n useEffect(() => {\n return () => {\n localStorage.setItem(\"oui-first-show-wallet-connector-dialog\", \"1\");\n };\n }, []);\n\n useEffect(() => {\n setState(accountState.status);\n }, [accountState]);\n\n const steps = useMemo(() => {\n const steps = [];\n if (initAccountState < AccountStatusEnum.SignedIn) {\n steps.push({\n key: \"signIn\",\n title: \"Sign In\",\n description: \"Confirm you are the owner of this wallet\",\n });\n }\n\n if (initAccountState < AccountStatusEnum.EnableTrading) {\n steps.push({\n key: \"enableTrading\",\n title: \"Enable Trading\",\n description:\n \"Enable secure access to our API for lightning fast trading\",\n });\n }\n\n return steps;\n }, []);\n\n const onEnableTrading = () => {\n setLoading(true);\n return props\n .enableTrading(remember)\n .then(\n async (res) => {\n console.log(res);\n setLoading(false);\n setActiveStep((step) => step + 1);\n try {\n await props.enableTradingComplted?.();\n } catch (e) {}\n if (typeof props.onCompleted === \"function\") {\n props.onCompleted();\n } else if (typeof props.close === \"function\") {\n props.close();\n }\n // props.onCompleted?.();\n },\n (reject) => {\n console.log(\"enable trading reject\", reject);\n setLoading(false);\n if (reject === -1) return;\n toast.error(reject.message ?? \"User rejected the request\");\n }\n )\n .catch((e) => {\n console.log(\"enable trading catch error\", e);\n setLoading(false);\n });\n };\n\n const onSignIn = () => {\n setLoading(true);\n return props\n .signIn()\n .then(\n (res) => {\n setActiveStep((step) => step + 1);\n onEnableTrading();\n },\n (reject) => {\n setLoading(false);\n if (reject === -1) return;\n toast.error(\"User rejected the request\");\n }\n )\n .catch((e) => {\n setLoading(false);\n });\n };\n\n console.log(\"state\", state);\n\n return (\n <Box id=\"oui-wallet-connect-dialog-content\" className=\"oui-font-semibold\">\n <Text intensity={54} size=\"xs\">\n Your previous access has expired, you will receive a signature request\n to enable trading. Signing is free and will not send a transaction.\n </Text>\n <Box\n p={4}\n my={6}\n intensity={600}\n r=\"lg\"\n className=\"oui-space-y-5\"\n position={\"relative\"}\n >\n {steps.map((step, index) => {\n return (\n <StepItem\n title={step.title}\n description={step.description}\n isCompleted={activeStep > index}\n key={step.key}\n active={activeStep === index}\n isLoading={loading && activeStep === index}\n />\n );\n })}\n {steps.length > 1 && (\n <Box\n position={\"absolute\"}\n height={\"38px\"}\n left={28}\n top={18}\n zIndex={0}\n >\n <Divider\n lineStyle={\"dashed\"}\n direction={\"vertical\"}\n intensity={16}\n className=\"oui-h-full\"\n />\n </Box>\n )}\n </Box>\n {props.showRefCodeInput && steps.length == 2 && (\n <ReferralCode {...props} />\n )}\n {firstShowDialog && (\n <Flex justify={\"between\"} itemAlign={\"center\"}>\n <RememberMe />\n <Switch\n color={\"primary\"}\n checked={remember}\n onCheckedChange={setRemember}\n disabled={loading}\n className=\"data-[state=checked]:oui-bg-[#3347FD]\"\n />\n </Flex>\n )}\n <Flex justify={\"center\"} mt={8}>\n <Box width={\"45%\"}>\n <ActionButton\n state={state}\n signIn={onSignIn}\n enableTrading={onEnableTrading}\n loading={loading}\n disabled={state >= AccountStatusEnum.EnableTrading}\n />\n </Box>\n </Flex>\n </Box>\n );\n};\n\nconst ActionButton: FC<{\n state: AccountStatusEnum;\n signIn: () => Promise<any>;\n enableTrading: () => Promise<any>;\n loading: boolean;\n disabled?: boolean;\n}> = ({ state, signIn, enableTrading, loading, disabled }) => {\n return (\n <Match\n value={() => {\n if (state <= AccountStatusEnum.NotSignedIn) {\n return \"signIn\";\n }\n return \"enableTrading\";\n }}\n case={{\n signIn: (\n <Button\n fullWidth\n onClick={() => signIn()}\n loading={loading}\n disabled={disabled}\n >\n Sign In\n </Button>\n ),\n enableTrading: (\n <Button\n fullWidth\n onClick={() => enableTrading()}\n loading={loading}\n disabled={disabled}\n >\n Enable Trading\n </Button>\n ),\n }}\n />\n );\n};\n\nconst ReferralCode: FC<WalletConnectContentProps> = (props) => {\n return (\n <TextField\n placeholder=\"Referral code (Optional)\"\n fullWidth\n // label={\"Referral code (optional)\"}\n label=\"\"\n value={props.refCode}\n onChange={(e) => {\n props.setRefCode(e.target.value);\n }}\n classNames={{\n label: \"oui-text-base-contrast-54 oui-text-xs\",\n input: \"placeholder:oui-text-base-contrast-20 placeholder:oui-text-sm\",\n }}\n formatters={[inputFormatter.createRegexInputFormatter(/[^A-Z0-9]/g)]}\n onClear={() => {\n props.setRefCode(\"\");\n }}\n autoComplete=\"off\"\n helpText={props.helpText}\n className=\"oui-mb-4\"\n color={props.helpText ? \"danger\" : undefined}\n />\n );\n};\n\nconst RememberMe = () => {\n const showRememberHint = () => {\n if (window.innerWidth > 768) return;\n modal.alert({\n title: \"Remember me\",\n message: (\n <span className=\"oui-text-2xs oui-text-base-contrast/60\">\n Toggle this option to skip these steps next time you want to trade.\n </span>\n ),\n });\n };\n return (\n <Tooltip\n content={\n \"Toggle this option to skip these steps next time you want to trade.\"\n }\n className=\"oui-max-w-[300px]\"\n >\n <button onClick={showRememberHint}>\n <Text\n intensity={54}\n size={\"xs\"}\n className={\n \"oui-underline oui-underline-offset-4 oui-decoration-dashed oui-decoration-base-contrast-36\"\n }\n >\n Remember me\n </Text>\n </button>\n </Tooltip>\n );\n};\n","import { FC } from \"react\";\nimport {\n Box,\n CheckedCircleFillIcon,\n cn,\n Match,\n Spinner,\n Text,\n} from \"@orderly.network/ui\";\n\ntype StepItemProps = {\n active?: boolean;\n isLoading?: boolean;\n isCompleted?: boolean;\n title: string;\n description: string;\n};\n\nexport const StepItem = (props: StepItemProps) => {\n const { title, description } = props;\n\n // console.log(props);\n\n return (\n <Box position=\"relative\" className=\"oui-pl-8\">\n <Box>\n <Text as=\"div\" intensity={98} size={\"sm\"}>\n {title}\n </Text>\n <Text as=\"div\" intensity={54} size={\"2xs\"}>\n {description}\n </Text>\n </Box>\n <Identifier {...props} />\n </Box>\n );\n};\n\nconst Identifier = (props: {\n active?: boolean;\n isLoading?: boolean;\n isCompleted?: boolean;\n}) => {\n const { active, isLoading, isCompleted } = props;\n\n return (\n <Match\n className={\"oui-absolute oui-left-0 oui-top-1 oui-z-10\"}\n value={() => {\n if (isCompleted) {\n return \"completed\";\n }\n if (isLoading) {\n return \"loading\";\n }\n\n if (active) {\n return \"active\";\n }\n\n return \"normal\";\n }}\n case={{\n loading: (\n <div>\n <Spinner size={\"sm\"} className={\"oui-ml-1\"} />\n </div>\n ),\n completed: (\n <div>\n <CheckedCircleFillIcon opacity={1} className=\"oui-text-[rgba(96,140,255,1)]\"/>\n </div>\n ),\n }}\n default={<Dot active={!!active} />}\n />\n );\n};\n\nconst Dot: FC<{ active: boolean; className?: string }> = ({\n active,\n className,\n}) => {\n return (\n <div\n className={cn(\n \"oui-w-[8.3px] oui-h-[8.3px] oui-rounded-full oui-ml-2 oui-mt-1\",\n className,\n active ? \"oui-bg-primary-light\" : \"oui-bg-base-2\"\n )}\n />\n );\n};\n","import { registerSimpleDialog, registerSimpleSheet } from \"@orderly.network/ui\";\n\nimport { useWalletConnectorBuilder } from \"./useWalletConnectorBuilder\";\nimport { WalletConnectContent } from \"./walletConnectorContent\";\n\nexport const WalletConnectorModalId = \"walletConnector\" as const;\nexport const WalletConnectorSheetId = \"walletConnectorSheet\" as const;\n\nexport const WalletConnectorWidget = (props: any) => {\n const state = useWalletConnectorBuilder();\n return <WalletConnectContent {...state} {...props} />;\n};\n\nregisterSimpleDialog(WalletConnectorModalId, WalletConnectorWidget, {\n size: \"sm\",\n title: \"Connect wallet\",\n});\n\nregisterSimpleSheet(WalletConnectorSheetId, WalletConnectorWidget, {\n title: \"Connect wallet\",\n});\n","import {\n useAccount,\n useCheckReferralCode,\n useGetReferralCode,\n useLazyQuery,\n useMutation,\n} from \"@orderly.network/hooks\";\nimport { toast } from \"@orderly.network/ui\";\nimport { useEffect, useMemo, useState } from \"react\";\n\nexport const useWalletConnectorBuilder = () => {\n const { account, state, createOrderlyKey, createAccount } = useAccount();\n const [refCode, setRefCode] = useState(\"\");\n const [helpText, setHelpText] = useState(\"\");\n\n const { trigger: verifyRefCode } = useLazyQuery(\n `/v1/public/referral/verify_ref_code?referral_code=${refCode}`\n );\n\n useEffect(() => {\n const refCode = localStorage.getItem(\"referral_code\");\n if (refCode != null) {\n setRefCode(refCode);\n }\n }, []);\n\n const { referral_code, isLoading } = useGetReferralCode(account.accountId);\n\n const [bindRefCode, { error: updateOrderError, isMutating: updateMutating }] =\n useMutation(\"/v1/referral/bind\", \"POST\");\n\n useEffect(() => {\n if (refCode.length === 0) {\n setHelpText(\"\");\n }\n }, [refCode]);\n\n const enableTradingComplted = () => {\n toast.success(\"Wallet connected\");\n // validate ref code and bind referral code\n if (refCode.length >= 4 && refCode.length <= 10)\n bindRefCode({ referral_code: refCode }).finally(() => {\n localStorage.removeItem(\"referral_code\");\n });\n };\n\n const checkRefCode = async (): Promise<string | undefined> => {\n if (refCode.length === 0) return Promise.resolve(undefined);\n\n if (refCode.length > 0 && (refCode.length < 4 || refCode.length > 10)) {\n return Promise.resolve(\n \"The referral_code must be 4 to 10 characters long, only accept upper case roman characters and numbers\"\n );\n }\n\n const { exist } = await verifyRefCode();\n \n\n if (exist === false) {\n return Promise.resolve(\"This referral code does not exist.\");\n }\n\n return Promise.resolve(undefined);\n };\n\n\n const showRefCodeInput = (referral_code?.length || 0) === 0 && !isLoading;\n\n\n const signIn = async () => {\n if (showRefCodeInput) {\n const info = await checkRefCode();\n if (typeof info !== \"undefined\") {\n setHelpText(info);\n return Promise.reject(-1);\n }\n }\n setHelpText(\"\");\n return createAccount();\n };\n\n const enableTrading = async (remember: boolean) => {\n if (showRefCodeInput) {\n const info = await checkRefCode();\n if (typeof info !== \"undefined\") {\n setHelpText(info);\n return Promise.reject(-1);\n }\n }\n setHelpText(\"\");\n return createOrderlyKey(remember);\n };\n\n return {\n enableTrading,\n initAccountState: state.status,\n signIn,\n enableTradingComplted,\n refCode,\n setRefCode,\n helpText,\n showRefCodeInput,\n } as const;\n};\n","import { useAccount, useMediaQuery } from \"@orderly.network/hooks\";\nimport {\n AccountStatusEnum,\n MEDIA_TABLET,\n NetworkId,\n} from \"@orderly.network/types\";\nimport {\n Button,\n Either,\n Match,\n modal,\n Text,\n toast,\n type ButtonProps,\n} from \"@orderly.network/ui\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { PropsWithChildren, ReactElement, useMemo } from \"react\";\nimport {\n WalletConnectorModalId,\n WalletConnectorSheetId,\n} from \"./walletConnector\";\nimport { ChainSelectorId } from \"@orderly.network/ui-chain-selector\";\nimport { alertMessages, DESCRIPTIONS, LABELS } from \"../constants/message\";\nimport { Flex } from \"@orderly.network/ui\";\nimport { Box } from \"@orderly.network/ui\";\n\nexport type AuthGuardProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\n fallback?: (props: {\n validating: boolean;\n status: AccountStatusEnum;\n wrongNetwork: boolean;\n }) => ReactElement;\n // indicator?: ReactElement;\n /**\n * Required state to be satisfied\n * @default AccountStatusEnum.EnableTrading\n */\n status?: AccountStatusEnum;\n\n bridgeLessOnly?: boolean;\n\n buttonProps?: ButtonProps;\n\n descriptions?: alertMessages;\n\n labels?: alertMessages;\n\n classNames?: {\n root?: string;\n description?: string;\n // button?: string;\n };\n\n networkId?: NetworkId;\n\n // validatingIndicator?: ReactElement;\n};\n\nconst AuthGuard = (props: PropsWithChildren<AuthGuardProps>) => {\n const {\n status = AccountStatusEnum.EnableTrading,\n buttonProps,\n fallback,\n descriptions,\n classNames,\n networkId,\n id,\n bridgeLessOnly,\n // ...rest\n } = props;\n const { state } = useAccount();\n const { wrongNetwork } = useAppContext();\n\n const labels = { ...LABELS, ...props.labels };\n\n // return Match(state.status)\n // .with(AccountStatusEnum.EnableTrading, () => props.children)\n // .with(AccountStatusEnum.DisableTrading, () => props.fallback)\n // .with(AccountStatusEnum.Validating, () => props.validatingIndicator)\n // .otherwise(() => props.fallback);\n //\n\n const Left = useMemo<ReactElement>(() => {\n if (typeof fallback !== \"undefined\") {\n return fallback({\n validating: state.validating,\n status: state.status,\n wrongNetwork,\n });\n }\n\n if (state.validating) {\n return (\n <StatusInfo\n // variant={\"gradient\"}\n angle={45}\n // fullWidth\n disabled\n loading\n description={descriptions?.connectWallet}\n id={id}\n type=\"button\"\n {...buttonProps}\n >\n {labels.connectWallet}\n </StatusInfo>\n );\n }\n\n return (\n <DefaultFallback\n bridgeLessOnly={bridgeLessOnly}\n status={state.status}\n buttonProps={{ ...buttonProps, id, type: \"button\" }}\n wrongNetwork={wrongNetwork}\n networkId={props.networkId}\n labels={labels}\n descriptions={descriptions}\n />\n );\n }, [state.status, state.validating, buttonProps, wrongNetwork]);\n\n /**\n * **Important: The chldren component will be rendered only if the status is equal to the required status and the network is correct.**\n */\n\n return (\n <Either value={state.status >= status && !wrongNetwork} left={Left}>\n {props.children}\n </Either>\n );\n};\n\nconst DefaultFallback = (props: {\n status: AccountStatusEnum;\n wrongNetwork: boolean;\n buttonProps?: ButtonProps;\n networkId?: NetworkId;\n labels: alertMessages;\n bridgeLessOnly?: boolean;\n\n descriptions?: alertMessages;\n}) => {\n const { buttonProps, labels, descriptions } = props;\n const { connectWallet } = useAppContext();\n const { account } = useAccount();\n const matches = useMediaQuery(MEDIA_TABLET);\n // const { connect } = useWalletConnector();\n const onConnectOrderly = () => {\n modal.show(matches ? WalletConnectorSheetId : WalletConnectorModalId).then(\n (r) => console.log(r),\n (error) => console.log(error)\n );\n };\n\n const onConnectWallet = async () => {\n const res = await connectWallet();\n\n if (!res) return;\n\n if (res.wrongNetwork) {\n switchChain();\n } else {\n if (\n (res?.status ?? AccountStatusEnum.NotConnected) <\n AccountStatusEnum.EnableTrading\n ) {\n onConnectOrderly();\n }\n }\n };\n\n const switchChain = () => {\n account.once(\"validate:end\", (status) => {\n if (status < AccountStatusEnum.EnableTrading) {\n onConnectOrderly();\n } else {\n toast.success(\"Wallet connected\");\n }\n });\n\n modal\n .show<{\n wrongNetwork: boolean;\n }>(ChainSelectorId, {\n networkId: props.networkId,\n bridgeLessOnly: props.bridgeLessOnly,\n })\n .then(\n (r) => {\n if (!r.wrongNetwork) {\n if (props.status >= AccountStatusEnum.Connected) {\n if (props.status < AccountStatusEnum.EnableTrading) {\n onConnectOrderly();\n } else {\n toast.success(\"Wallet connected\");\n }\n }\n }\n },\n (error) => console.log(\"[switchChain error]\", error)\n );\n };\n\n if (props.wrongNetwork) {\n return (\n <StatusInfo\n color=\"warning\"\n // size=\"md\"\n // fullWidth\n onClick={() => {\n switchChain();\n }}\n description={descriptions?.switchChain}\n {...buttonProps}\n >\n {labels.switchChain}\n </StatusInfo>\n );\n }\n\n return (\n <Match\n value={props.status}\n case={(value: AccountStatusEnum) => {\n if (value <= AccountStatusEnum.NotConnected) {\n return (\n <StatusInfo\n size=\"lg\"\n onClick={() => {\n onConnectWallet();\n }}\n // fullWidth\n variant={\"gradient\"}\n angle={45}\n description={descriptions?.connectWallet}\n {...buttonProps}\n >\n {labels.connectWallet}\n </StatusInfo>\n );\n }\n if (value <= AccountStatusEnum.NotSignedIn) {\n return (\n <StatusInfo\n size=\"lg\"\n onClick={() => {\n onConnectOrderly();\n }}\n // fullWidth\n angle={45}\n description={descriptions?.signin}\n {...buttonProps}\n >\n {labels.signin}\n </StatusInfo>\n );\n }\n }}\n default={\n <StatusInfo\n size=\"lg\"\n // fullWidth\n description={descriptions?.enableTrading}\n {...buttonProps}\n onClick={() => onConnectOrderly()}\n >\n {labels.enableTrading}\n </StatusInfo>\n }\n />\n );\n};\n\nAuthGuard.displayName = \"AuthGuard\";\n\nconst StatusInfo = (\n props: ButtonProps & {\n description?: string;\n }\n) => {\n const { description, ...buttonProps } = props;\n return (\n <Flex direction={\"column\"}>\n <Button {...buttonProps}></Button>\n {!!description && (\n <Box mt={4} className=\"oui-leading-none\" style={{ lineHeight: 0 }}>\n <Text size=\"2xs\" intensity={36}>\n {description}\n </Text>\n </Box>\n )}\n </Flex>\n );\n};\n\nexport { AuthGuard };\n","export type alertMessages = {\n connectWallet?: string;\n switchChain?: string;\n enableTrading?: string;\n signin?: string;\n};\n\nexport const LABELS = {\n connectWallet: \"Connect wallet\",\n switchChain: \"Switch network\",\n enableTrading: \"Enable trading\",\n signin: \"Sign in\",\n};\n\nexport const DESCRIPTIONS: alertMessages = {\n connectWallet: \"Please Connect wallet before starting to trade\",\n switchChain: \"Please switch to a supported network to continue\",\n enableTrading: \"Please Enable trading before starting to trade\",\n signin: \"Please sign in before starting to trade\",\n};\n","import { PropsWithChildren } from \"react\";\nimport { DataTable, DataTableProps, ExtensionSlot } from \"@orderly.network/ui\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { alertMessages, DESCRIPTIONS } from \"../constants/message\";\nimport { useAppContext, useDataTap } from \"@orderly.network/react-app\";\nimport { Flex } from \"@orderly.network/ui\";\nimport { AuthGuard } from \"./authGuard\";\nimport { useAccount } from \"@orderly.network/hooks\";\n\nexport const AuthGuardDataTable = <RecordType extends unknown>(\n props: PropsWithChildren<\n DataTableProps<RecordType> &\n Omit<GuardViewProps, \"status\"> & {\n status?: AccountStatusEnum;\n classNames?: DataTableProps<RecordType>[\"classNames\"] & {\n authGuardDescription?: string;\n };\n }\n >\n) => {\n const {\n status = AccountStatusEnum.EnableTrading,\n // message,\n labels,\n description,\n dataSource,\n ...rest\n } = props;\n const data = useDataTap(dataSource, {\n accountStatus: status,\n });\n const { state } = useAccount();\n const { wrongNetwork } = useAppContext();\n\n return (\n <DataTable\n {...rest}\n dataSource={data}\n ignoreLoadingCheck={\n wrongNetwork || state.status < status || props.ignoreLoadingCheck\n }\n emptyView={\n <GuardView\n status={status}\n description={description}\n labels={labels}\n className={props.classNames?.authGuardDescription}\n visible={!state.validating}\n />\n }\n />\n );\n};\n\ntype GuardViewProps = {\n status: AccountStatusEnum;\n description?: alertMessages;\n labels?: alertMessages;\n className?: string;\n visible?: boolean;\n};\n\nconst GuardView = (props: GuardViewProps) => {\n const descriptions = { ...DESCRIPTIONS, ...props.description };\n if (!props.visible) return null;\n return (\n <Flex py={8}>\n <AuthGuard\n status={props.status}\n labels={props.labels}\n descriptions={descriptions}\n buttonProps={{\n size: \"md\",\n }}\n >\n <ExtensionSlot position={\"emptyDataState\"} />\n </AuthGuard>\n </Flex>\n );\n};\n","import { AccountStatusEnum } from \"@orderly.network/types\";\nimport {\n Box,\n EmptyDataState,\n} from \"@orderly.network/ui\";\nimport { PropsWithChildren } from \"react\";\nimport { AuthGuard } from \"./authGuard\";\n\ntype AuthGuardProps = {\n /** default value is\n * ```ts\n * {\n * connectWallet: \"Please connect wallet before starting to trade\",\n * signIn: \"Please sign in before starting to trade\",\n * enableTrading: \"Please sign in before starting to trade\",\n * wrongNetwork: \"Please switch to a supported network to continue.\",\n * }\n * ```\n */\n hint?: {\n connectWallet?: string;\n signIn?: string;\n enableTrading?: string;\n wrongNetwork?: string;\n };\n status?: AccountStatusEnum;\n};\n\nconst AuthGuardEmpty = (props: PropsWithChildren<AuthGuardProps>) => {\n const {\n hint = {\n connectWallet: \"Please connect wallet before starting to trade\",\n signIn: \"Please sign in before starting to trade\",\n enableTrading: \"Please sign in before starting to trade\",\n wrongNetwork: \"Please switch to a supported network to continue.\",\n },\n status,\n } = props;\n\n return (\n <Box my={8}>\n <AuthGuard status={status} descriptions={{...hint, switchChain: hint.wrongNetwork}}>\n {props.children || <EmptyDataState />}\n </AuthGuard>\n </Box>\n );\n};\n\nAuthGuardEmpty.displayName = \"AuthGuardEmpty\";\n\nexport { AuthGuardEmpty };\n","import { useAccount } from \"@orderly.network/hooks\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { Tooltip } from \"@orderly.network/ui\";\nimport { PropsWithChildren, useMemo } from \"react\";\n\ntype AuthGuardProps = {\n content?: string;\n align?: \"center\" | \"end\" | \"start\";\n alignOffset?: number;\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n sideOffset?: number;\n opactiy?: number;\n tooltip?: {\n connectWallet?: string;\n signIn?: string;\n enableTrading?: string;\n wrongNetwork?: string;\n };\n};\n\nconst AuthGuardTooltip = (props: PropsWithChildren<AuthGuardProps>) => {\n const {\n opactiy = 90,\n tooltip = {\n connectWallet: \"Please connect wallet before set up\",\n signIn: \"Please sign in before set up\",\n enableTrading: \"Please enable trading before set up\",\n wrongNetwork: \"Please switch to a supported network to set up\",\n },\n } = props;\n const { state } = useAccount();\n const isSupport = true;\n const { wrongNetwork } = useAppContext();\n\n const hint = useMemo(() => {\n if (wrongNetwork) {\n return tooltip?.wrongNetwork;\n }\n switch (state.status) {\n case AccountStatusEnum.NotConnected:\n return tooltip?.connectWallet;\n case AccountStatusEnum.NotSignedIn:\n return tooltip?.signIn;\n case AccountStatusEnum.DisabledTrading:\n return tooltip?.enableTrading;\n case AccountStatusEnum.EnableTrading: {\n if (!isSupport) return tooltip?.wrongNetwork;\n return \"\";\n }\n default:\n return props.content;\n }\n }, [props.content, state, isSupport, tooltip]);\n\n const newOpacity = useMemo(() => {\n switch (state.status) {\n case AccountStatusEnum.NotConnected:\n case AccountStatusEnum.NotSignedIn:\n return opactiy;\n case AccountStatusEnum.EnableTrading: {\n if (!isSupport) return opactiy;\n return undefined;\n }\n default:\n return undefined;\n }\n }, [props.opactiy, state, isSupport]);\n\n return (\n <Tooltip\n content={hint}\n className=\"oui-text-2xs\"\n align={props.align}\n alignOffset={props.alignOffset}\n side={props.side}\n sideOffset={props.sideOffset}\n >\n <div\n style={{\n opacity: newOpacity,\n }}\n >\n {props.children}\n </div>\n </Tooltip>\n );\n};\n\nAuthGuardTooltip.displayName = \"AuthGuardTooltip\";\n\nexport { AuthGuardTooltip };\n"]}
1
+ {"version":3,"sources":["../src/component/walletConnectorContent.tsx","../src/component/step.tsx","../src/component/walletConnector.tsx","../src/component/useWalletConnectorBuilder.ts","../src/component/authGuard.tsx","../src/constants/message.ts","../src/component/authGuardDataTable.tsx","../src/component/authGuardTableView.tsx","../src/component/authGuardEmpty.tsx","../src/component/authGuardTooltip.tsx"],"names":["useEffect","useMemo","useState","Box","Button","Divider","Flex","inputFormatter","Match","modal","Switch","Text","TextField","toast","Tooltip","AccountStatusEnum","CheckedCircleFillIcon","cn","Spinner","jsx","jsxs","StepItem","props","title","description","Identifier","active","isLoading","isCompleted","Dot","className","useAccount","useLocalStorage","WalletConnectContent","initAccountState","remember","setRemember","accountState","state","setState","activeStep","setActiveStep","loading","setLoading","firstShowDialog","steps","onEnableTrading","res","step","reject","msg","e","onSignIn","index","ReferralCode","RememberMe","ActionButton","signIn","enableTrading","disabled","registerSimpleDialog","registerSimpleSheet","useGetReferralCode","useLazyQuery","useMutation","useWalletConnectorBuilder","account","createOrderlyKey","createAccount","refCode","setRefCode","helpText","setHelpText","verifyRefCode","referral_code","bindRefCode","updateOrderError","updateMutating","enableTradingComplted","checkRefCode","exist","showRefCodeInput","info","WalletConnectorModalId","WalletConnectorSheetId","WalletConnectorWidget","useMediaQuery","MEDIA_TABLET","Either","useScreen","useAppContext","ChainSelectorId","ChainSelectorSheetId","LABELS","DESCRIPTIONS","AuthGuard","status","buttonProps","fallback","descriptions","classNames","networkId","id","bridgeLessOnly","wrongNetwork","labels","Left","StatusInfo","DefaultFallback","connectWallet","isMobile","matches","onConnectOrderly","r","error","onConnectWallet","switchChain","value","DataTable","ExtensionSlot","useDataTap","AuthGuardDataTable","dataSource","rest","data","GuardView","TableView","AuthGuardTableView","EmptyDataState","AuthGuardEmpty","hint","AuthGuardTooltip","opactiy","tooltip","isSupport","newOpacity"],"mappings":"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","sourcesContent":["import { FC, useEffect, useMemo, useState } from \"react\";\nimport {\n Box,\n Button,\n cn,\n Divider,\n Flex,\n Input,\n inputFormatter,\n Match,\n modal,\n Switch,\n Text,\n TextField,\n toast,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { StepItem } from \"./step\";\nimport { useAccount, useLocalStorage } from \"@orderly.network/hooks\";\n\nexport type WalletConnectContentProps = {\n initAccountState: AccountStatusEnum;\n signIn: () => Promise<any>;\n enableTrading: (remember: boolean) => Promise<any>;\n enableTradingComplted?: () => Promise<void>;\n onCompleted?: () => void;\n close?: () => void;\n refCode: string;\n setRefCode: React.Dispatch<React.SetStateAction<string>>;\n helpText?: string;\n showRefCodeInput: boolean;\n};\n\nexport const WalletConnectContent = (props: WalletConnectContentProps) => {\n const { initAccountState = AccountStatusEnum.NotConnected } = props;\n const [remember, setRemember] = useState(true);\n\n const { state: accountState } = useAccount();\n const [state, setState] = useState(initAccountState);\n const [activeStep, setActiveStep] = useState(0);\n const [loading, setLoading] = useState(false);\n const [firstShowDialog] = useLocalStorage(\n \"orderly-first-show-wallet-connector-dialog\",\n undefined\n );\n useEffect(() => {\n return () => {\n localStorage.setItem(\"orderly-first-show-wallet-connector-dialog\", \"1\");\n };\n }, []);\n\n useEffect(() => {\n setState(accountState.status);\n }, [accountState]);\n\n const steps = useMemo(() => {\n const steps = [];\n if (initAccountState < AccountStatusEnum.SignedIn) {\n steps.push({\n key: \"signIn\",\n title: \"Sign In\",\n description: \"Confirm you are the owner of this wallet\",\n });\n }\n\n if (initAccountState < AccountStatusEnum.EnableTrading) {\n steps.push({\n key: \"enableTrading\",\n title: \"Enable Trading\",\n description:\n \"Enable secure access to our API for lightning fast trading\",\n });\n }\n\n return steps;\n }, []);\n\n const onEnableTrading = () => {\n setLoading(true);\n return props\n .enableTrading(remember)\n .then(\n async (res) => {\n console.log(res);\n setLoading(false);\n setActiveStep((step) => step + 1);\n try {\n await props.enableTradingComplted?.();\n } catch (e) {}\n if (typeof props.onCompleted === \"function\") {\n props.onCompleted();\n } else if (typeof props.close === \"function\") {\n props.close();\n }\n // props.onCompleted?.();\n },\n (reject) => {\n console.log(\"enable trading reject\", reject);\n setLoading(false);\n if (reject === -1) return;\n let msg = reject.toString();\n if (msg.includes(\"rejected\")) {\n msg = \"User rejected the request.\";\n }\n toast.error(msg);\n }\n )\n .catch((e) => {\n console.log(\"enable trading catch error\", e);\n setLoading(false);\n });\n };\n\n const onSignIn = () => {\n setLoading(true);\n return props\n .signIn()\n .then(\n (res) => {\n setActiveStep((step) => step + 1);\n onEnableTrading();\n },\n (reject) => {\n setLoading(false);\n\n if (reject === -1) return;\n let msg = reject.toString();\n if (msg.includes(\"rejected\")) {\n msg = \"User rejected the request.\";\n }\n toast.error(msg);\n }\n )\n .catch((e) => {\n setLoading(false);\n });\n };\n\n console.log(\"state\", state);\n\n return (\n <Box id=\"oui-wallet-connect-dialog-content\" className=\"oui-font-semibold\">\n <Text intensity={54} size=\"xs\">\n Your previous access has expired, you will receive a signature request\n to enable trading. Signing is free and will not send a transaction.\n </Text>\n <Box\n p={4}\n my={6}\n intensity={600}\n r=\"lg\"\n className=\"oui-space-y-5\"\n position={\"relative\"}\n >\n {steps.map((step, index) => {\n return (\n <StepItem\n title={step.title}\n description={step.description}\n isCompleted={activeStep > index}\n key={step.key}\n active={activeStep === index}\n isLoading={loading && activeStep === index}\n />\n );\n })}\n {steps.length > 1 && (\n <Box\n position={\"absolute\"}\n height={\"38px\"}\n left={28}\n top={18}\n zIndex={0}\n >\n <Divider\n lineStyle={\"dashed\"}\n direction={\"vertical\"}\n intensity={16}\n className=\"oui-h-full\"\n />\n </Box>\n )}\n </Box>\n {props.showRefCodeInput && steps.length == 2 && (\n <ReferralCode {...props} />\n )}\n {firstShowDialog && (\n <Flex justify={\"between\"} itemAlign={\"center\"}>\n <RememberMe />\n <Switch\n color={\"primary\"}\n checked={remember}\n onCheckedChange={setRemember}\n disabled={loading}\n className=\"data-[state=checked]:oui-bg-[#3347FD]\"\n />\n </Flex>\n )}\n <Flex justify={\"center\"} mt={8}>\n <Box width={\"45%\"}>\n <ActionButton\n state={state}\n signIn={onSignIn}\n enableTrading={onEnableTrading}\n loading={loading}\n disabled={state >= AccountStatusEnum.EnableTrading}\n />\n </Box>\n </Flex>\n </Box>\n );\n};\n\nconst ActionButton: FC<{\n state: AccountStatusEnum;\n signIn: () => Promise<any>;\n enableTrading: () => Promise<any>;\n loading: boolean;\n disabled?: boolean;\n}> = ({ state, signIn, enableTrading, loading, disabled }) => {\n return (\n <Match\n value={() => {\n if (state <= AccountStatusEnum.NotSignedIn) {\n return \"signIn\";\n }\n return \"enableTrading\";\n }}\n case={{\n signIn: (\n <Button\n fullWidth\n onClick={() => signIn()}\n loading={loading}\n disabled={disabled}\n >\n Sign In\n </Button>\n ),\n enableTrading: (\n <Button\n fullWidth\n onClick={() => enableTrading()}\n loading={loading}\n disabled={disabled}\n >\n Enable Trading\n </Button>\n ),\n }}\n />\n );\n};\n\nconst ReferralCode: FC<WalletConnectContentProps> = (props) => {\n return (\n <TextField\n placeholder=\"Referral code (Optional)\"\n fullWidth\n // label={\"Referral code (optional)\"}\n label=\"\"\n value={props.refCode}\n onChange={(e) => {\n props.setRefCode(e.target.value);\n }}\n classNames={{\n label: \"oui-text-base-contrast-54 oui-text-xs\",\n input: \"placeholder:oui-text-base-contrast-20 placeholder:oui-text-sm\",\n }}\n formatters={[inputFormatter.createRegexInputFormatter(/[^A-Z0-9]/g)]}\n onClear={() => {\n props.setRefCode(\"\");\n }}\n autoComplete=\"off\"\n helpText={props.helpText}\n className=\"oui-mb-4\"\n color={props.helpText ? \"danger\" : undefined}\n />\n );\n};\n\nconst RememberMe = () => {\n const showRememberHint = () => {\n if (window.innerWidth > 768) return;\n modal.alert({\n title: \"Remember me\",\n message: (\n <span className=\"oui-text-2xs oui-text-base-contrast/60\">\n Toggle this option to skip these steps next time you want to trade.\n </span>\n ),\n });\n };\n return (\n <Tooltip\n content={\n \"Toggle this option to skip these steps next time you want to trade.\"\n }\n className=\"oui-max-w-[300px]\"\n >\n <button onClick={showRememberHint}>\n <Text\n intensity={54}\n size={\"xs\"}\n className={\n \"oui-underline oui-underline-offset-4 oui-decoration-dashed oui-decoration-base-contrast-36\"\n }\n >\n Remember me\n </Text>\n </button>\n </Tooltip>\n );\n};\n","import { FC } from \"react\";\nimport {\n Box,\n CheckedCircleFillIcon,\n cn,\n Match,\n Spinner,\n Text,\n} from \"@orderly.network/ui\";\n\ntype StepItemProps = {\n active?: boolean;\n isLoading?: boolean;\n isCompleted?: boolean;\n title: string;\n description: string;\n};\n\nexport const StepItem = (props: StepItemProps) => {\n const { title, description } = props;\n\n // console.log(props);\n\n return (\n <Box position=\"relative\" className=\"oui-pl-8\">\n <Box>\n <Text as=\"div\" intensity={98} size={\"sm\"}>\n {title}\n </Text>\n <Text as=\"div\" intensity={54} size={\"2xs\"}>\n {description}\n </Text>\n </Box>\n <Identifier {...props} />\n </Box>\n );\n};\n\nconst Identifier = (props: {\n active?: boolean;\n isLoading?: boolean;\n isCompleted?: boolean;\n}) => {\n const { active, isLoading, isCompleted } = props;\n\n return (\n <Match\n className={\"oui-absolute oui-left-0 oui-top-1 oui-z-10\"}\n value={() => {\n if (isCompleted) {\n return \"completed\";\n }\n if (isLoading) {\n return \"loading\";\n }\n\n if (active) {\n return \"active\";\n }\n\n return \"normal\";\n }}\n case={{\n loading: (\n <div>\n <Spinner size={\"sm\"} className={\"oui-ml-1\"} />\n </div>\n ),\n completed: (\n <div>\n <CheckedCircleFillIcon opacity={1} className=\"oui-text-[rgba(96,140,255,1)]\"/>\n </div>\n ),\n }}\n default={<Dot active={!!active} />}\n />\n );\n};\n\nconst Dot: FC<{ active: boolean; className?: string }> = ({\n active,\n className,\n}) => {\n return (\n <div\n className={cn(\n \"oui-w-[8.3px] oui-h-[8.3px] oui-rounded-full oui-ml-2 oui-mt-1\",\n className,\n active ? \"oui-bg-primary-light\" : \"oui-bg-base-2\"\n )}\n />\n );\n};\n","import { registerSimpleDialog, registerSimpleSheet } from \"@orderly.network/ui\";\n\nimport { useWalletConnectorBuilder } from \"./useWalletConnectorBuilder\";\nimport { WalletConnectContent } from \"./walletConnectorContent\";\n\nexport const WalletConnectorModalId = \"walletConnector\" as const;\nexport const WalletConnectorSheetId = \"walletConnectorSheet\" as const;\n\nexport const WalletConnectorWidget = (props: any) => {\n const state = useWalletConnectorBuilder();\n return <WalletConnectContent {...state} {...props} />;\n};\n\nregisterSimpleDialog(WalletConnectorModalId, WalletConnectorWidget, {\n size: \"sm\",\n title: \"Connect wallet\",\n});\n\nregisterSimpleSheet(WalletConnectorSheetId, WalletConnectorWidget, {\n title: \"Connect wallet\",\n});\n","import {\n useAccount,\n useCheckReferralCode,\n useGetReferralCode,\n useLazyQuery,\n useMutation,\n} from \"@orderly.network/hooks\";\nimport { toast } from \"@orderly.network/ui\";\nimport { useEffect, useMemo, useState } from \"react\";\n\nexport const useWalletConnectorBuilder = () => {\n const { account, state, createOrderlyKey, createAccount } = useAccount();\n const [refCode, setRefCode] = useState(\"\");\n const [helpText, setHelpText] = useState(\"\");\n\n const { trigger: verifyRefCode } = useLazyQuery(\n `/v1/public/referral/verify_ref_code?referral_code=${refCode}`\n );\n\n useEffect(() => {\n const refCode = localStorage.getItem(\"referral_code\");\n if (refCode != null) {\n setRefCode(refCode);\n }\n }, []);\n\n const { referral_code, isLoading } = useGetReferralCode(account.accountId);\n\n const [bindRefCode, { error: updateOrderError, isMutating: updateMutating }] =\n useMutation(\"/v1/referral/bind\", \"POST\");\n\n useEffect(() => {\n if (refCode.length === 0) {\n setHelpText(\"\");\n }\n }, [refCode]);\n\n const enableTradingComplted = () => {\n toast.success(\"Wallet connected\");\n // validate ref code and bind referral code\n if (refCode.length >= 4 && refCode.length <= 10)\n bindRefCode({ referral_code: refCode }).finally(() => {\n localStorage.removeItem(\"referral_code\");\n });\n };\n\n const checkRefCode = async (): Promise<string | undefined> => {\n if (refCode.length === 0) return Promise.resolve(undefined);\n\n if (refCode.length > 0 && (refCode.length < 4 || refCode.length > 10)) {\n return Promise.resolve(\n \"The referral_code must be 4 to 10 characters long, only accept upper case roman characters and numbers\"\n );\n }\n\n const { exist } = await verifyRefCode();\n \n\n if (exist === false) {\n return Promise.resolve(\"This referral code does not exist.\");\n }\n\n return Promise.resolve(undefined);\n };\n\n\n const showRefCodeInput = (referral_code?.length || 0) === 0 && !isLoading;\n\n\n const signIn = async () => {\n if (showRefCodeInput) {\n const info = await checkRefCode();\n if (typeof info !== \"undefined\") {\n setHelpText(info);\n return Promise.reject(-1);\n }\n }\n setHelpText(\"\");\n return createAccount();\n };\n\n const enableTrading = async (remember: boolean) => {\n if (showRefCodeInput) {\n const info = await checkRefCode();\n if (typeof info !== \"undefined\") {\n setHelpText(info);\n return Promise.reject(-1);\n }\n }\n setHelpText(\"\");\n return createOrderlyKey(remember);\n };\n\n return {\n enableTrading,\n initAccountState: state.status,\n signIn,\n enableTradingComplted,\n refCode,\n setRefCode,\n helpText,\n showRefCodeInput,\n } as const;\n};\n","import { useAccount, useMediaQuery } from \"@orderly.network/hooks\";\nimport {\n AccountStatusEnum,\n MEDIA_TABLET,\n NetworkId,\n} from \"@orderly.network/types\";\nimport {\n Button,\n Either,\n Match,\n modal,\n Text,\n toast,\n useScreen,\n type ButtonProps,\n} from \"@orderly.network/ui\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { PropsWithChildren, ReactElement, useMemo } from \"react\";\nimport {\n WalletConnectorModalId,\n WalletConnectorSheetId,\n} from \"./walletConnector\";\nimport { ChainSelectorId, ChainSelectorSheetId } from \"@orderly.network/ui-chain-selector\";\nimport { alertMessages, DESCRIPTIONS, LABELS } from \"../constants/message\";\nimport { Flex } from \"@orderly.network/ui\";\nimport { Box } from \"@orderly.network/ui\";\n\ntype ChainProps = {\n networkId?: NetworkId;\n bridgeLessOnly?: boolean;\n}\n\nexport type AuthGuardProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\n fallback?: (props: {\n validating: boolean;\n status: AccountStatusEnum;\n wrongNetwork: boolean;\n }) => ReactElement;\n // indicator?: ReactElement;\n /**\n * Required state to be satisfied\n * @default AccountStatusEnum.EnableTrading\n */\n status?: AccountStatusEnum;\n\n bridgeLessOnly?: boolean;\n\n buttonProps?: ButtonProps;\n\n descriptions?: alertMessages;\n\n labels?: alertMessages;\n\n classNames?: {\n root?: string;\n description?: string;\n // button?: string;\n };\n\n networkId?: NetworkId;\n\n // validatingIndicator?: ReactElement;\n};\n\nconst AuthGuard = (props: PropsWithChildren<AuthGuardProps>) => {\n const {\n status = AccountStatusEnum.EnableTrading,\n buttonProps,\n fallback,\n descriptions,\n classNames,\n networkId,\n id,\n bridgeLessOnly,\n // ...rest\n } = props;\n const { state } = useAccount();\n const { wrongNetwork } = useAppContext();\n\n const labels = { ...LABELS, ...props.labels };\n\n // return Match(state.status)\n // .with(AccountStatusEnum.EnableTrading, () => props.children)\n // .with(AccountStatusEnum.DisableTrading, () => props.fallback)\n // .with(AccountStatusEnum.Validating, () => props.validatingIndicator)\n // .otherwise(() => props.fallback);\n //\n\n const Left = useMemo<ReactElement>(() => {\n if (typeof fallback !== \"undefined\") {\n return fallback({\n validating: state.validating,\n status: state.status,\n wrongNetwork,\n });\n }\n\n if (state.validating) {\n return (\n <StatusInfo\n // variant={\"gradient\"}\n angle={45}\n // fullWidth\n disabled\n loading\n description={descriptions?.connectWallet}\n id={id}\n type=\"button\"\n {...buttonProps}\n >\n {labels.connectWallet}\n </StatusInfo>\n );\n }\n\n return (\n <DefaultFallback\n bridgeLessOnly={bridgeLessOnly}\n status={state.status}\n buttonProps={{ ...buttonProps, id, type: \"button\" }}\n wrongNetwork={wrongNetwork}\n networkId={props.networkId}\n labels={labels}\n descriptions={descriptions}\n />\n );\n }, [state.status, state.validating, buttonProps, wrongNetwork]);\n\n /**\n * **Important: The chldren component will be rendered only if the status is equal to the required status and the network is correct.**\n */\n\n return (\n <Either value={state.status >= status && !wrongNetwork} left={Left}>\n {props.children}\n </Either>\n );\n};\n\nconst DefaultFallback = (props: {\n status: AccountStatusEnum;\n wrongNetwork: boolean;\n buttonProps?: ButtonProps;\n networkId?: NetworkId;\n labels: alertMessages;\n bridgeLessOnly?: boolean;\n\n descriptions?: alertMessages;\n}) => {\n const { buttonProps, labels, descriptions } = props;\n const { connectWallet } = useAppContext();\n const { account } = useAccount();\n const { isMobile } = useScreen();\n const matches = useMediaQuery(MEDIA_TABLET);\n // const { connect } = useWalletConnector();\n const onConnectOrderly = () => {\n modal.show(matches ? WalletConnectorSheetId : WalletConnectorModalId).then(\n (r) => console.log(r),\n (error) => console.log(error)\n );\n };\n\n const onConnectWallet = async () => {\n const res = await connectWallet();\n\n if (!res) return;\n\n if (res.wrongNetwork) {\n switchChain();\n } else {\n if (\n (res?.status ?? AccountStatusEnum.NotConnected) <\n AccountStatusEnum.EnableTrading\n ) {\n onConnectOrderly();\n }\n }\n };\n\n const switchChain = () => {\n account.once(\"validate:end\", (status) => {\n if (status < AccountStatusEnum.EnableTrading) {\n onConnectOrderly();\n } else {\n toast.success(\"Wallet connected\");\n }\n });\n\n modal\n .show<{\n wrongNetwork: boolean;\n }>(isMobile ? ChainSelectorSheetId : ChainSelectorId, {\n networkId: props.networkId,\n bridgeLessOnly: props.bridgeLessOnly,\n })\n .then(\n (r) => {\n if (!r.wrongNetwork) {\n if (props.status >= AccountStatusEnum.Connected) {\n if (props.status < AccountStatusEnum.EnableTrading) {\n onConnectOrderly();\n } else {\n toast.success(\"Wallet connected\");\n }\n }\n }\n },\n (error) => console.log(\"[switchChain error]\", error)\n );\n };\n\n if (props.wrongNetwork) {\n return (\n <StatusInfo\n color=\"warning\"\n // size=\"md\"\n // fullWidth\n onClick={() => {\n switchChain();\n }}\n description={descriptions?.switchChain}\n {...buttonProps}\n >\n {labels.switchChain}\n </StatusInfo>\n );\n }\n\n return (\n <Match\n value={props.status}\n case={(value: AccountStatusEnum) => {\n if (value <= AccountStatusEnum.NotConnected) {\n return (\n <StatusInfo\n size=\"lg\"\n onClick={() => {\n onConnectWallet();\n }}\n // fullWidth\n variant={\"gradient\"}\n angle={45}\n description={descriptions?.connectWallet}\n {...buttonProps}\n >\n {labels.connectWallet}\n </StatusInfo>\n );\n }\n if (value <= AccountStatusEnum.NotSignedIn) {\n return (\n <StatusInfo\n size=\"lg\"\n onClick={() => {\n onConnectOrderly();\n }}\n // fullWidth\n angle={45}\n description={descriptions?.signin}\n {...buttonProps}\n >\n {labels.signin}\n </StatusInfo>\n );\n }\n }}\n default={\n <StatusInfo\n size=\"lg\"\n // fullWidth\n description={descriptions?.enableTrading}\n {...buttonProps}\n onClick={() => onConnectOrderly()}\n >\n {labels.enableTrading}\n </StatusInfo>\n }\n />\n );\n};\n\nAuthGuard.displayName = \"AuthGuard\";\n\nconst StatusInfo = (\n props: ButtonProps & {\n description?: string;\n }\n) => {\n const { description, ...buttonProps } = props;\n return (\n <Flex direction={\"column\"}>\n <Button {...buttonProps}></Button>\n {!!description && (\n <Box mt={4} className=\"oui-leading-none\" style={{ lineHeight: 0 }}>\n <Text size=\"2xs\" intensity={36}>\n {description}\n </Text>\n </Box>\n )}\n </Flex>\n );\n};\n\nexport { AuthGuard };\n","export type alertMessages = {\n connectWallet?: string;\n switchChain?: string;\n enableTrading?: string;\n signin?: string;\n};\n\nexport const LABELS = {\n connectWallet: \"Connect wallet\",\n switchChain: \"Wrong network\",\n enableTrading: \"Enable trading\",\n signin: \"Sign in\",\n};\n\nexport const DESCRIPTIONS: alertMessages = {\n connectWallet: \"Please Connect wallet before starting to trade\",\n switchChain: \"Please switch to a supported network to continue\",\n enableTrading: \"Please Enable trading before starting to trade\",\n signin: \"Please sign in before starting to trade\",\n};\n","import { PropsWithChildren } from \"react\";\nimport { DataTable, DataTableProps, ExtensionSlot } from \"@orderly.network/ui\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { alertMessages, DESCRIPTIONS } from \"../constants/message\";\nimport { useAppContext, useDataTap } from \"@orderly.network/react-app\";\nimport { Flex } from \"@orderly.network/ui\";\nimport { AuthGuard } from \"./authGuard\";\nimport { useAccount } from \"@orderly.network/hooks\";\n\nexport const AuthGuardDataTable = <RecordType extends unknown>(\n props: PropsWithChildren<\n DataTableProps<RecordType> &\n Omit<GuardViewProps, \"status\"> & {\n status?: AccountStatusEnum;\n classNames?: DataTableProps<RecordType>[\"classNames\"] & {\n authGuardDescription?: string;\n };\n }\n >\n) => {\n const {\n status = AccountStatusEnum.EnableTrading,\n // message,\n labels,\n description,\n dataSource,\n ...rest\n } = props;\n const data = useDataTap(dataSource, {\n accountStatus: status,\n });\n const { state } = useAccount();\n const { wrongNetwork } = useAppContext();\n\n return (\n <DataTable\n {...rest}\n dataSource={data}\n ignoreLoadingCheck={\n wrongNetwork || state.status < status || props.ignoreLoadingCheck\n }\n emptyView={\n <GuardView\n status={status}\n description={description}\n labels={labels}\n className={props.classNames?.authGuardDescription}\n visible={!state.validating}\n />\n }\n />\n );\n};\n\ntype GuardViewProps = {\n status: AccountStatusEnum;\n description?: alertMessages;\n labels?: alertMessages;\n className?: string;\n visible?: boolean;\n};\n\nconst GuardView = (props: GuardViewProps) => {\n const descriptions = { ...DESCRIPTIONS, ...props.description };\n if (!props.visible) return null;\n return (\n <Flex py={8}>\n <AuthGuard\n status={props.status}\n labels={props.labels}\n descriptions={descriptions}\n buttonProps={{\n size: \"md\",\n }}\n >\n <ExtensionSlot position={\"emptyDataState\"} />\n </AuthGuard>\n </Flex>\n );\n};\n","import { PropsWithChildren } from \"react\";\nimport {\n DataTableProps,\n ExtensionSlot,\n TableView,\n TableViewProps,\n} from \"@orderly.network/ui\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { alertMessages, DESCRIPTIONS } from \"../constants/message\";\nimport { useAppContext, useDataTap } from \"@orderly.network/react-app\";\nimport { Flex } from \"@orderly.network/ui\";\nimport { AuthGuard } from \"./authGuard\";\nimport { useAccount } from \"@orderly.network/hooks\";\n\nexport const AuthGuardTableView = <RecordType extends unknown>(\n props: PropsWithChildren<\n TableViewProps<RecordType> &\n Omit<GuardViewProps, \"status\"> & {\n status?: AccountStatusEnum;\n classNames?: DataTableProps<RecordType>[\"classNames\"] & {\n authGuardDescription?: string;\n };\n }\n >\n) => {\n const {\n status = AccountStatusEnum.EnableTrading,\n // message,\n labels,\n description,\n dataSource,\n ...rest\n } = props;\n const data = useDataTap(dataSource, {\n accountStatus: status,\n });\n const { state } = useAccount();\n const { wrongNetwork } = useAppContext();\n\n return (\n <TableView\n dataSource={data}\n ignoreLoadingCheck={\n wrongNetwork || state.status < status || props.ignoreLoadingCheck\n }\n emptyView={\n <GuardView\n status={status}\n description={description}\n labels={labels}\n className={props.classNames?.authGuardDescription}\n visible={!state.validating}\n />\n }\n manualPagination\n {...rest}\n />\n );\n};\n\ntype GuardViewProps = {\n status: AccountStatusEnum;\n description?: alertMessages;\n labels?: alertMessages;\n className?: string;\n visible?: boolean;\n};\n\nconst GuardView = (props: GuardViewProps) => {\n const descriptions = { ...DESCRIPTIONS, ...props.description };\n if (!props.visible) return null;\n return (\n <Flex py={8}>\n <AuthGuard\n status={props.status}\n labels={props.labels}\n descriptions={descriptions}\n buttonProps={{\n size: \"md\",\n }}\n >\n <ExtensionSlot position={\"emptyDataState\"} />\n </AuthGuard>\n </Flex>\n );\n};\n","import { AccountStatusEnum } from \"@orderly.network/types\";\nimport {\n Box,\n EmptyDataState,\n} from \"@orderly.network/ui\";\nimport { PropsWithChildren } from \"react\";\nimport { AuthGuard } from \"./authGuard\";\n\ntype AuthGuardProps = {\n /** default value is\n * ```ts\n * {\n * connectWallet: \"Please connect wallet before starting to trade\",\n * signIn: \"Please sign in before starting to trade\",\n * enableTrading: \"Please sign in before starting to trade\",\n * wrongNetwork: \"Please switch to a supported network to continue.\",\n * }\n * ```\n */\n hint?: {\n connectWallet?: string;\n signIn?: string;\n enableTrading?: string;\n wrongNetwork?: string;\n };\n status?: AccountStatusEnum;\n};\n\nconst AuthGuardEmpty = (props: PropsWithChildren<AuthGuardProps>) => {\n const {\n hint = {\n connectWallet: \"Please connect wallet before starting to trade\",\n signIn: \"Please sign in before starting to trade\",\n enableTrading: \"Please sign in before starting to trade\",\n wrongNetwork: \"Please switch to a supported network to continue.\",\n },\n status,\n } = props;\n\n return (\n <Box my={8}>\n <AuthGuard status={status} descriptions={{...hint, switchChain: hint.wrongNetwork}}>\n {props.children || <EmptyDataState />}\n </AuthGuard>\n </Box>\n );\n};\n\nAuthGuardEmpty.displayName = \"AuthGuardEmpty\";\n\nexport { AuthGuardEmpty };\n","import { useAccount } from \"@orderly.network/hooks\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { Tooltip } from \"@orderly.network/ui\";\nimport { PropsWithChildren, useMemo } from \"react\";\n\ntype AuthGuardProps = {\n content?: string;\n align?: \"center\" | \"end\" | \"start\";\n alignOffset?: number;\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n sideOffset?: number;\n opactiy?: number;\n tooltip?: {\n connectWallet?: string;\n signIn?: string;\n enableTrading?: string;\n wrongNetwork?: string;\n };\n};\n\nconst AuthGuardTooltip = (props: PropsWithChildren<AuthGuardProps>) => {\n const {\n opactiy = 90,\n tooltip = {\n connectWallet: \"Please connect wallet before set up\",\n signIn: \"Please sign in before set up\",\n enableTrading: \"Please enable trading before set up\",\n wrongNetwork: \"Please switch to a supported network to set up\",\n },\n } = props;\n const { state } = useAccount();\n const isSupport = true;\n const { wrongNetwork } = useAppContext();\n\n const hint = useMemo(() => {\n if (wrongNetwork) {\n return tooltip?.wrongNetwork;\n }\n switch (state.status) {\n case AccountStatusEnum.NotConnected:\n return tooltip?.connectWallet;\n case AccountStatusEnum.NotSignedIn:\n return tooltip?.signIn;\n case AccountStatusEnum.DisabledTrading:\n return tooltip?.enableTrading;\n case AccountStatusEnum.EnableTrading: {\n if (!isSupport) return tooltip?.wrongNetwork;\n return \"\";\n }\n default:\n return props.content;\n }\n }, [props.content, state, isSupport, tooltip]);\n\n const newOpacity = useMemo(() => {\n switch (state.status) {\n case AccountStatusEnum.NotConnected:\n case AccountStatusEnum.NotSignedIn:\n return opactiy;\n case AccountStatusEnum.EnableTrading: {\n if (!isSupport) return opactiy;\n return undefined;\n }\n default:\n return undefined;\n }\n }, [props.opactiy, state, isSupport]);\n\n return (\n <Tooltip\n content={hint}\n className=\"oui-text-2xs\"\n align={props.align}\n alignOffset={props.alignOffset}\n side={props.side}\n sideOffset={props.sideOffset}\n >\n <div\n style={{\n opacity: newOpacity,\n }}\n >\n {props.children}\n </div>\n </Tooltip>\n );\n};\n\nAuthGuardTooltip.displayName = \"AuthGuardTooltip\";\n\nexport { AuthGuardTooltip };\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orderly.network/ui-connector",
3
- "version": "2.0.0",
3
+ "version": "2.0.1-alpha.0",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -17,11 +17,11 @@
17
17
  "access": "public"
18
18
  },
19
19
  "dependencies": {
20
- "@orderly.network/hooks": "2.0.0",
21
- "@orderly.network/ui": "2.0.0",
22
- "@orderly.network/types": "2.0.0",
23
- "@orderly.network/react-app": "2.0.0",
24
- "@orderly.network/ui-chain-selector": "2.0.0"
20
+ "@orderly.network/types": "2.0.1-alpha.0",
21
+ "@orderly.network/react-app": "2.0.1-alpha.0",
22
+ "@orderly.network/ui": "2.0.1-alpha.0",
23
+ "@orderly.network/ui-chain-selector": "2.0.1-alpha.0",
24
+ "@orderly.network/hooks": "2.0.1-alpha.0"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/react": "^18.3.2",
@@ -30,12 +30,12 @@
30
30
  "react-dom": "^18.2.0",
31
31
  "tailwindcss": "^3.4.4",
32
32
  "tsup": "^7.3.0",
33
- "tsconfig": "0.3.12"
33
+ "tsconfig": "0.3.16"
34
34
  },
35
35
  "peerDependencies": {
36
36
  "react": "^18.3.1",
37
37
  "react-dom": "^18.2.0",
38
- "@orderly.network/ui": "2.0.0"
38
+ "@orderly.network/ui": "2.0.1-alpha.0"
39
39
  },
40
40
  "scripts": {
41
41
  "build": "tsup && pnpm run build:css",