-
Notifications
You must be signed in to change notification settings - Fork 123
Expand file tree
/
Copy pathRoot.tsx
More file actions
59 lines (49 loc) · 1.59 KB
/
Copy pathRoot.tsx
File metadata and controls
59 lines (49 loc) · 1.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
'use client';
import { type PropsWithChildren, useEffect } from 'react';
import {
initData,
miniApp,
useLaunchParams,
useSignal,
} from '@tma.js/sdk-react';
import { TonConnectUIProvider } from '@tonconnect/ui-react';
import { AppRoot } from '@telegram-apps/telegram-ui';
import { ErrorBoundary } from '@/components/ErrorBoundary';
import { ErrorPage } from '@/components/ErrorPage';
import { useDidMount } from '@/hooks/useDidMount';
import { setLocale } from '@/core/i18n/locale';
import './styles.css';
function RootInner({ children }: PropsWithChildren) {
const lp = useLaunchParams();
const isDark = useSignal(miniApp.isDark);
const initDataUser = useSignal(initData.user);
// Set the user locale.
useEffect(() => {
initDataUser && setLocale(initDataUser.language_code);
}, [initDataUser]);
return (
<TonConnectUIProvider manifestUrl="https://telegram-mini-app-stars-payments-og.vercel.app/manifest.json">
<AppRoot
appearance={isDark ? 'dark' : 'light'}
platform={
['macos', 'ios'].includes(lp.tgWebAppPlatform) ? 'ios' : 'base'
}
>
{children}
</AppRoot>
</TonConnectUIProvider>
);
}
export function Root(props: PropsWithChildren) {
// Unfortunately, Telegram Mini Apps does not allow us to use all features of
// the Server Side Rendering. That's why we are showing loader on the server
// side.
const didMount = useDidMount();
return didMount ? (
<ErrorBoundary fallback={ErrorPage}>
<RootInner {...props} />
</ErrorBoundary>
) : (
<div className="root__loading">Loading</div>
);
}