Skip to content

Commit fae3dba

Browse files
committed
fix: default currency
1 parent 39fc911 commit fae3dba

File tree

4 files changed

+95
-43
lines changed

4 files changed

+95
-43
lines changed

src/app/App.tsx

Lines changed: 2 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { initSurvicate } from '../public-path';
2-
import { Fragment, lazy, Suspense } from 'react';
2+
import { lazy, Suspense } from 'react';
33
import React from 'react';
44
import { createBrowserRouter, createRoutesFromElements, Route, RouterProvider } from 'react-router-dom';
55
import ChunkLoader from '@/components/loader/chunk-loader';
@@ -9,7 +9,6 @@ import CallbackPage from '@/pages/callback';
99
import Endpoint from '@/pages/endpoint';
1010
import { TAuthData } from '@/types/api-types';
1111
import { initializeI18n, localize, TranslationProvider } from '@deriv-com/translations';
12-
import { URLUtils } from '@deriv-com/utils';
1312
import CoreStoreProvider from './CoreStoreProvider';
1413
import './app-root.scss';
1514

@@ -49,37 +48,6 @@ const router = createBrowserRouter(
4948
);
5049

5150
function App() {
52-
const { loginInfo, paramsToDelete } = URLUtils.getLoginInfoFromURL();
53-
React.useEffect(() => {
54-
// Set login info to local storage and remove params from url
55-
if (loginInfo.length) {
56-
try {
57-
const defaultActiveAccount = URLUtils.getDefaultActiveAccount(loginInfo);
58-
if (!defaultActiveAccount) return;
59-
60-
const accountsList: Record<string, string> = {};
61-
const clientAccounts: Record<string, { loginid: string; token: string; currency: string }> = {};
62-
63-
loginInfo.forEach((account: { loginid: string; token: string; currency: string }) => {
64-
accountsList[account.loginid] = account.token;
65-
clientAccounts[account.loginid] = account;
66-
});
67-
68-
localStorage.setItem('accountsList', JSON.stringify(accountsList));
69-
localStorage.setItem('clientAccounts', JSON.stringify(clientAccounts));
70-
71-
URLUtils.filterSearchParams(paramsToDelete);
72-
73-
localStorage.setItem('authToken', loginInfo[0].token);
74-
localStorage.setItem('active_loginid', loginInfo[0].loginid);
75-
} catch (error) {
76-
console.error('Error setting up login info:', error);
77-
}
78-
}
79-
80-
URLUtils.filterSearchParams(['lang']);
81-
}, [loginInfo, paramsToDelete]);
82-
8351
React.useEffect(() => {
8452
initSurvicate();
8553
window?.dataLayer?.push({ event: 'page_load' });
@@ -181,11 +149,7 @@ function App() {
181149
}
182150
}, []);
183151

184-
return (
185-
<Fragment>
186-
<RouterProvider router={router} />
187-
</Fragment>
188-
);
152+
return <RouterProvider router={router} />;
189153
}
190154

191155
export default App;

src/app/AuthWrapper.tsx

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import React from 'react';
2+
import ChunkLoader from '@/components/loader/chunk-loader';
3+
import { generateDerivApiInstance } from '@/external/bot-skeleton/services/api/appId';
4+
import { localize } from '@deriv-com/translations';
5+
import { URLUtils } from '@deriv-com/utils';
6+
import App from './App';
7+
8+
const setLocalStorageToken = async (loginInfo: URLUtils.LoginInfo[], paramsToDelete: string[]) => {
9+
if (loginInfo.length) {
10+
try {
11+
const defaultActiveAccount = URLUtils.getDefaultActiveAccount(loginInfo);
12+
if (!defaultActiveAccount) return;
13+
14+
const accountsList: Record<string, string> = {};
15+
const clientAccounts: Record<string, { loginid: string; token: string; currency: string }> = {};
16+
17+
loginInfo.forEach((account: { loginid: string; token: string; currency: string }) => {
18+
accountsList[account.loginid] = account.token;
19+
clientAccounts[account.loginid] = account;
20+
});
21+
22+
localStorage.setItem('accountsList', JSON.stringify(accountsList));
23+
localStorage.setItem('clientAccounts', JSON.stringify(clientAccounts));
24+
URLUtils.filterSearchParams(paramsToDelete);
25+
const api = await generateDerivApiInstance();
26+
27+
if (api) {
28+
const { authorize, error } = await api.authorize(loginInfo[0].token);
29+
api.disconnect();
30+
if (!error) {
31+
const firstId = authorize?.account_list[0]?.loginid;
32+
const filteredTokens = loginInfo.filter(token => token.loginid === firstId);
33+
if (filteredTokens.length) {
34+
localStorage.setItem('authToken', filteredTokens[0].token);
35+
localStorage.setItem('active_loginid', filteredTokens[0].loginid);
36+
return;
37+
}
38+
}
39+
}
40+
41+
localStorage.setItem('authToken', loginInfo[0].token);
42+
localStorage.setItem('active_loginid', loginInfo[0].loginid);
43+
} catch (error) {
44+
console.error('Error setting up login info:', error);
45+
}
46+
}
47+
};
48+
49+
export const AuthWrapper = () => {
50+
const [isAuthComplete, setIsAuthComplete] = React.useState(false);
51+
const { loginInfo, paramsToDelete } = URLUtils.getLoginInfoFromURL();
52+
53+
React.useEffect(() => {
54+
const initializeAuth = async () => {
55+
await setLocalStorageToken(loginInfo, paramsToDelete);
56+
URLUtils.filterSearchParams(['lang']);
57+
setIsAuthComplete(true);
58+
};
59+
60+
initializeAuth();
61+
}, [loginInfo, paramsToDelete]);
62+
63+
if (!isAuthComplete) {
64+
return <ChunkLoader message={localize('Initializing...')} />;
65+
}
66+
67+
return <App />;
68+
};

src/main.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import ReactDOM from 'react-dom/client';
2-
import App from './app/App';
2+
import { AuthWrapper } from './app/AuthWrapper';
33
import { AnalyticsInitializer } from './utils/analytics';
44
import './styles/index.scss';
55

66
AnalyticsInitializer();
77

8-
ReactDOM.createRoot(document.getElementById('root')!).render(<App />);
8+
ReactDOM.createRoot(document.getElementById('root')!).render(<AuthWrapper />);

src/pages/callback/callback-page.tsx

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1+
import { generateDerivApiInstance } from '@/external/bot-skeleton/services/api/appId';
12
import { Callback } from '@deriv-com/auth-client';
23
import { Button } from '@deriv-com/ui';
34

45
const CallbackPage = () => {
56
return (
67
<Callback
7-
onSignInSuccess={(tokens: Record<string, string>) => {
8+
onSignInSuccess={async (tokens: Record<string, string>) => {
89
const accountsList: Record<string, string> = {};
910
const clientAccounts: Record<string, { loginid: string; token: string; currency: string }> = {};
1011

@@ -30,8 +31,27 @@ const CallbackPage = () => {
3031
localStorage.setItem('accountsList', JSON.stringify(accountsList));
3132
localStorage.setItem('clientAccounts', JSON.stringify(clientAccounts));
3233

33-
localStorage.setItem('authToken', tokens.token1);
34-
localStorage.setItem('active_loginid', tokens.acct1);
34+
let is_token_set = false;
35+
const api = await generateDerivApiInstance();
36+
if (api) {
37+
const { authorize, error } = await api.authorize(tokens.token1);
38+
localStorage.setItem('callback_token', authorize.toString());
39+
api.disconnect();
40+
if (!error) {
41+
const clientAccountsArray = Object.values(clientAccounts);
42+
const firstId = authorize?.account_list[0]?.loginid;
43+
const filteredTokens = clientAccountsArray.filter(account => account.loginid === firstId);
44+
if (filteredTokens.length) {
45+
localStorage.setItem('authToken', filteredTokens[0].token);
46+
localStorage.setItem('active_loginid', filteredTokens[0].loginid);
47+
is_token_set = true;
48+
}
49+
}
50+
}
51+
if (!is_token_set) {
52+
localStorage.setItem('authToken', tokens.token1);
53+
localStorage.setItem('active_loginid', tokens.acct1);
54+
}
3555

3656
window.location.assign('/');
3757
}}

0 commit comments

Comments
 (0)