lobe-chat
32 строки · 888.0 Байт
1'use client';
2
3import { Loader } from 'next/dist/shared/lib/dynamic';
4import dynamic from 'next/dynamic';
5import { FC, PropsWithChildren, memo } from 'react';
6
7import MobileSwitchLoading from '@/features/MobileSwitchLoading';
8import { useIsMobile } from '@/hooks/useIsMobile';
9
10interface ClientResponsiveLayoutProps {
11Desktop: FC<PropsWithChildren>;
12Mobile: Loader;
13}
14
15const ClientResponsiveLayout = ({ Desktop, Mobile }: ClientResponsiveLayoutProps) => {
16const MobileComponent = dynamic(Mobile, {
17loading: MobileSwitchLoading,
18ssr: false,
19}) as FC<PropsWithChildren>;
20
21const Layout = memo<PropsWithChildren>(({ children }) => {
22const mobile = useIsMobile();
23
24return mobile ? <MobileComponent>{children}</MobileComponent> : <Desktop>{children}</Desktop>;
25});
26
27Layout.displayName = 'ClientLayout';
28
29return Layout;
30};
31
32export default ClientResponsiveLayout;
33