@@ -21,16 +21,31 @@ import {
2121} from './MemeQuizResult.styles' ;
2222import useInAppBrowserDetect from '@/hooks/useInAppBrowserDetect' ;
2323import { useMemeQuizMutation } from '@meme_wiki/apis' ;
24+ import { nativeBridge } from '@/utils/bridge' ;
25+ import { BridgeCommand , COMMAND_TYPE , CommandType } from '@/types/bridge' ;
2426
2527interface MemeQuizResultPageProps {
2628 rightCount : number ;
2729}
2830
31+ // 전역에서 함수 정의
32+ if ( typeof window !== 'undefined' ) {
33+ window . onNativeEntered = ( command : BridgeCommand < CommandType > ) => {
34+ // MemeDetailPage 컴포넌트의 setIsWebview를 호출하기 위한 커스텀 이벤트
35+ window . dispatchEvent (
36+ new CustomEvent ( 'webviewStateChange' , {
37+ detail : command . type === COMMAND_TYPE . APP_ENTERED ,
38+ } ) ,
39+ ) ;
40+ } ;
41+ }
42+
2943const MemeQuizResult = ( { rightCount } : MemeQuizResultPageProps ) => {
3044 const { moveToStore } = useInAppBrowserDetect ( ) ;
3145 const [ showToast , setShowToast ] = useState ( false ) ;
3246 const { mutate : quizResult } = useMemeQuizMutation ( ) ;
3347 const isFirstRender = useRef ( true ) ;
48+ const [ isWebview , setIsWebview ] = useState ( false ) ;
3449
3550 useEffect ( ( ) => {
3651 if ( isFirstRender . current ) {
@@ -39,6 +54,29 @@ const MemeQuizResult = ({ rightCount }: MemeQuizResultPageProps) => {
3954 }
4055 } , [ rightCount , quizResult ] ) ;
4156
57+ useEffect ( ( ) => {
58+ // 웹뷰 상태 변경 이벤트 리스너
59+ const handleWebviewState = ( event : CustomEvent < boolean > ) => {
60+ setIsWebview ( event . detail ) ;
61+ } ;
62+
63+ // 이벤트 리스너 등록
64+ window . addEventListener (
65+ 'webviewStateChange' ,
66+ handleWebviewState as EventListener ,
67+ ) ;
68+
69+ // 웹뷰 진입 알림
70+ nativeBridge . webEntered ( ) ;
71+
72+ return ( ) => {
73+ window . removeEventListener (
74+ 'webviewStateChange' ,
75+ handleWebviewState as EventListener ,
76+ ) ;
77+ } ;
78+ } , [ ] ) ;
79+
4280 return (
4381 < Container >
4482 < ResultCard >
@@ -82,7 +120,17 @@ const MemeQuizResult = ({ rightCount }: MemeQuizResultPageProps) => {
82120 링크 복사하고 공유하기
83121 </ ShareButton >
84122 </ ToastContainer >
85- < MoreButton onClick = { moveToStore } > 더 많은 밈 보러가기</ MoreButton >
123+ < MoreButton
124+ onClick = { ( ) => {
125+ if ( isWebview ) {
126+ nativeBridge . showMoreMemes ( ) ;
127+ } else {
128+ moveToStore ( ) ;
129+ }
130+ } }
131+ >
132+ 더 많은 밈 보러가기
133+ </ MoreButton >
86134 </ ButtonContainer >
87135 </ Container >
88136 ) ;
0 commit comments