@@ -18,6 +18,7 @@ import { useEffect, useState } from 'react';
1818import { BridgeCommand , COMMAND_TYPE , CommandType } from '@/types/bridge' ;
1919import useInAppBrowserDetect from '@/hooks/useInAppBrowserDetect' ;
2020import MemeShareSheet from './components/MemeShareSheet' ;
21+ import MemeDetailSkeleton from './components/MemeDetailSkeleton' ;
2122
2223// 전역에서 함수 정의
2324if ( typeof window !== 'undefined' ) {
@@ -35,7 +36,7 @@ const MemeDetailPage = () => {
3536 const [ isWebview , setIsWebview ] = useState ( false ) ;
3637 const { memeId } = useParams ( ) ;
3738 const { moveToStore } = useInAppBrowserDetect ( ) ;
38- const { data : memeDetail } = useMemeDetailQuery ( memeId ! ) ;
39+ const { data : memeDetail , isLoading } = useMemeDetailQuery ( memeId ! ) ;
3940 const { mutate : shareMeme } = useShareMemeMutation ( ) ;
4041 const { mutate : customMeme } = useMemeCustomMutation ( ) ;
4142 const [ shareSheetOpen , setShareSheetOpen ] = useState ( false ) ;
@@ -71,63 +72,69 @@ const MemeDetailPage = () => {
7172 backgroundColor : theme . palette . gray [ 'gray-10' ] ,
7273 } }
7374 >
74- < S . Container >
75- < S . ImageContainer >
76- < S . Image
77- src = { memeDetail ?. success . imgUrl }
78- alt = { memeDetail ?. success . title }
79- />
80- </ S . ImageContainer >
81- < S . ContentContainer >
82- < S . Title > { memeDetail ?. success . title } </ S . Title >
83- < S . HashTags >
84- { memeDetail ?. success . hashtags . map ( ( tag ) => `${ tag } ` ) }
85- </ S . HashTags >
86- < S . SectionTitle >
87- < SymbolTwoIcon width = { 18 } height = { 18 } />
88- 이럴 때 쓰세요
89- </ S . SectionTitle >
90- < S . SectionText > { memeDetail ?. success . usageContext } </ S . SectionText >
91- < S . SectionTitle >
92- < SymbolThreeIcon width = { 18 } height = { 18 } />
93- 이렇게 시작됐어요
94- </ S . SectionTitle >
95- < S . SectionText > { memeDetail ?. success . origin } </ S . SectionText >
96- </ S . ContentContainer >
97- </ S . Container >
98- < S . ButtonContainer >
99- < S . ActionButton
100- isPrimary
101- onClick = { ( ) => {
102- // 밈 꾸미기 mutation
103- customMeme ( { id : memeId ! } ) ;
75+ { isLoading ? (
76+ < MemeDetailSkeleton />
77+ ) : (
78+ < >
79+ < S . Container >
80+ < S . ImageContainer >
81+ < S . Image
82+ src = { memeDetail ?. success . imgUrl }
83+ alt = { memeDetail ?. success . title }
84+ />
85+ </ S . ImageContainer >
86+ < S . ContentContainer >
87+ < S . Title > { memeDetail ?. success . title } </ S . Title >
88+ < S . HashTags >
89+ { memeDetail ?. success . hashtags . map ( ( tag ) => `${ tag } ` ) }
90+ </ S . HashTags >
91+ < S . SectionTitle >
92+ < SymbolTwoIcon width = { 18 } height = { 18 } />
93+ 이럴 때 쓰세요
94+ </ S . SectionTitle >
95+ < S . SectionText > { memeDetail ?. success . usageContext } </ S . SectionText >
96+ < S . SectionTitle >
97+ < SymbolThreeIcon width = { 18 } height = { 18 } />
98+ 이렇게 시작됐어요
99+ </ S . SectionTitle >
100+ < S . SectionText > { memeDetail ?. success . origin } </ S . SectionText >
101+ </ S . ContentContainer >
102+ </ S . Container >
103+ < S . ButtonContainer >
104+ < S . ActionButton
105+ isPrimary
106+ onClick = { ( ) => {
107+ // 밈 꾸미기 mutation
108+ customMeme ( { id : memeId ! } ) ;
104109
105- if ( isWebview ) {
106- nativeBridge . customMeme ( {
107- title : memeDetail ?. success . title ?? '' ,
108- image : memeDetail ?. success . imgUrl ?? '' ,
109- } ) ;
110- } else {
111- moveToStore ( ) ;
112- }
113- } }
114- >
115- < MemeDesignPenIcon />
116- < span > 밈 꾸미기</ span >
117- </ S . ActionButton >
118- < S . ActionButton
119- onClick = { ( ) => {
120- // 밈 공유하기 mutation
121- shareMeme ( { id : memeId ! } ) ;
110+ if ( isWebview ) {
111+ nativeBridge . customMeme ( {
112+ title : memeDetail ?. success . title ?? '' ,
113+ image : memeDetail ?. success . imgUrl ?? '' ,
114+ } ) ;
115+ } else {
116+ moveToStore ( ) ;
117+ }
118+ } }
119+ >
120+ < MemeDesignPenIcon />
121+ < span > 밈 꾸미기</ span >
122+ </ S . ActionButton >
123+ < S . ActionButton
124+ onClick = { ( ) => {
125+ // 밈 공유하기 mutation
126+ shareMeme ( { id : memeId ! } ) ;
122127
123- // 공유 시트 열기
124- setShareSheetOpen ( true ) ;
125- } }
126- >
127- < ShareIcon />
128- < span > 공유하기</ span >
129- </ S . ActionButton >
130- </ S . ButtonContainer >
128+ // 공유 시트 열기
129+ setShareSheetOpen ( true ) ;
130+ } }
131+ >
132+ < ShareIcon />
133+ < span > 공유하기</ span >
134+ </ S . ActionButton >
135+ </ S . ButtonContainer >
136+ </ >
137+ ) }
131138 < MemeShareSheet
132139 isOpen = { shareSheetOpen }
133140 onClose = { ( ) => setShareSheetOpen ( false ) }
0 commit comments