File tree Expand file tree Collapse file tree 4 files changed +36
-23
lines changed Expand file tree Collapse file tree 4 files changed +36
-23
lines changed Original file line number Diff line number Diff line change 1+ 'use client'
2+
3+ import { type MessageData , isValidEventOrigin } from '@hamsurang/utils'
4+ import { useEffect } from 'react'
5+
6+ export const EventListener = ( ) => {
7+ useEffect ( ( ) => {
8+ const handleIncomingMessage = ( { origin, data } : MessageEvent < MessageData > ) => {
9+ if ( ! isValidEventOrigin ( origin ) ) {
10+ return
11+ }
12+
13+ if ( data . type === 'routeChange' ) {
14+ history . replaceState ( { } , '' , data . route )
15+ }
16+ }
17+
18+ addEventListener ( 'message' , handleIncomingMessage )
19+
20+ return ( ) => {
21+ removeEventListener ( 'message' , handleIncomingMessage )
22+ }
23+ } , [ ] )
24+
25+ return null
26+ }
Original file line number Diff line number Diff line change 1+ export * from './EventListener'
2+ export * from './Header'
Original file line number Diff line number Diff line change 1- 'use client'
2-
31import '@hamsurang/ui/globals.css'
4- import { type MessageData , isValidEventOrigin } from '@hamsurang/utils '
2+ import type { Metadata } from 'next '
53import { Inter } from 'next/font/google'
64import type { PropsWithChildren } from 'react'
7- import { useEffect } from 'react'
8- import { Header } from './_shared/components/Header'
5+ import { EventListener , Header } from './_shared/components'
96
107const inter = Inter ( { subsets : [ 'latin' ] } )
118
12- export default function RootLayout ( { children } : PropsWithChildren ) : JSX . Element {
13- useEffect ( ( ) => {
14- const handleIncomingMessage = ( { origin, data } : MessageEvent < MessageData > ) => {
15- if ( ! isValidEventOrigin ( origin ) ) {
16- return
17- }
18-
19- if ( data . type === 'routeChange' ) {
20- history . replaceState ( { } , '' , data . route )
21- }
22- }
23-
24- addEventListener ( 'message' , handleIncomingMessage )
25-
26- return ( ) => {
27- removeEventListener ( 'message' , handleIncomingMessage )
28- }
29- } , [ ] )
9+ export const metadata : Metadata = {
10+ title : '함수랑산악회' ,
11+ description : '함수랑산악회의 공식 홈페이지입니다.' ,
12+ }
3013
14+ export default function RootLayout ( { children } : PropsWithChildren ) : JSX . Element {
3115 return (
3216 < html lang = "ko" >
3317 < body className = { inter . className } >
3418 < Header />
19+ < EventListener />
3520 { children }
3621 </ body >
3722 </ html >
You can’t perform that action at this time.
0 commit comments