Layout.tsx 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. 'use client';
  2. import Link from 'next/link';
  3. import Styles from '../styles/common.module.scss';
  4. import useAuth from '@/hooks/useAuth';
  5. export default function Layout({ children }: { children: React.ReactNode })
  6. {
  7. const { isAuthenticated, isLoading, logout } = useAuth();
  8. if (isLoading) {
  9. return <></>;
  10. }
  11. return (
  12. <>
  13. <div id='container' className={Styles.container}>
  14. {/* 상단 내용 */}
  15. <header id='header' className={`${Styles.header} flex items-center justify-between w-full px-4`}>
  16. <Link href='/' className='font-bold text-xl'>
  17. <picture>
  18. <source src="image.webp" type="image/webp" />
  19. <img src="/resources/m-logo.webp" alt="bitforum logo" />
  20. </picture>
  21. </Link>
  22. <nav className='flex grow items-center justify-between'>
  23. <ul className='flex gap-4'>
  24. <li>
  25. <Link href='/'>
  26. 코인
  27. </Link>
  28. </li>
  29. <li>
  30. <Link href='/latest'>
  31. 토론
  32. </Link>
  33. </li>
  34. <li>
  35. <Link href='/news'>
  36. 뉴스
  37. </Link>
  38. </li>
  39. <li>
  40. <Link href='/board/notice'>
  41. 공지사항
  42. </Link>
  43. </li>
  44. </ul>
  45. {!isAuthenticated ? (
  46. <ul className='flex gap-4'>
  47. <li>
  48. <a href='/login'>
  49. 로그인
  50. </a>
  51. </li>
  52. <li>
  53. <a href='/register'>
  54. 회원가입
  55. </a>
  56. </li>
  57. </ul>
  58. ) : (
  59. <ul className='flex gap-4'>
  60. <li>
  61. <Link href='/profile'>
  62. 내 정보
  63. </Link>
  64. </li>
  65. <li>
  66. <button type='button' onClick={logout}>
  67. 로그아웃
  68. </button>
  69. </li>
  70. </ul>
  71. )}
  72. </nav>
  73. </header>
  74. {/* 전광판 */}
  75. <p id='ticker' className={Styles.panel}></p>
  76. {/* 좌측 내용 */}
  77. <main id='main' className={`${Styles.main} relative`}>
  78. {children}
  79. </main>
  80. {/* 우측 내용 */}
  81. <aside id='aside' className={Styles.aside}></aside>
  82. {/* 하단 내용 */}
  83. <footer id='footer' className={`${Styles.footer} px-4`}>
  84. <ol>
  85. {/* 최신글 표시 ▼ */}
  86. <li>111111</li>
  87. {/* 공지사항 표시 ▲ */}
  88. <li>222222</li>
  89. {/* 저작권 표시 */}
  90. <li>© 2025 PLAYR. All rights reserved.</li>
  91. </ol>
  92. </footer>
  93. </div>
  94. </>
  95. );
  96. }