layout.tsx 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import './style.scss';
  2. import { redirect } from 'next/navigation';
  3. import { fetchJson, getTokenData } from '@/lib/utils/server';
  4. import { SidebarProvider, SidebarInset, SidebarTrigger } from '@/components/ui/sidebar';
  5. import { StudioProvider } from './context';
  6. import Sidebar from './Sidebar';
  7. import type { DropdownData } from '@/types/response/mypage/dropdown';
  8. export default async function StudioLayout({ children }: { children: React.ReactNode })
  9. {
  10. const [res, tokenData] = await Promise.all([
  11. fetchJson<DropdownData>('/api/mypage/dropdown'),
  12. getTokenData()
  13. ]);
  14. if (!res.success) {
  15. redirect('/');
  16. }
  17. const channelID = res.data?.channelID ?? null;
  18. const memberID = parseInt(tokenData?.id ?? '0');
  19. return (
  20. <StudioProvider channelID={channelID} memberID={memberID}>
  21. <SidebarProvider>
  22. <Sidebar />
  23. <SidebarInset>
  24. <div className="studio__topbar">
  25. <SidebarTrigger />
  26. </div>
  27. <main className="studio__content">
  28. {children}
  29. </main>
  30. </SidebarInset>
  31. </SidebarProvider>
  32. </StudioProvider>
  33. );
  34. }