1
+ import { createDevLogger } from '@tloncorp/shared' ;
1
2
import { LoadingSpinner } from '@tloncorp/ui' ;
2
3
import {
3
4
memo ,
@@ -20,6 +21,8 @@ import { View, getTokenValue, useTheme } from 'tamagui';
20
21
import { useIsDarkTheme } from '../../utils' ;
21
22
import { EmbedProviderConfig } from './providers' ;
22
23
24
+ const logger = createDevLogger ( 'EmbedWebView' , false ) ;
25
+
23
26
const IS_ANDROID = Platform . OS === 'android' ;
24
27
const ANDROID_LAYER_TYPE = IS_ANDROID ? 'hardware' : undefined ;
25
28
const ANDROID_OVERSCROLL_MODE = IS_ANDROID ? 'never' : undefined ;
@@ -58,7 +61,7 @@ function webViewReducer(
58
61
) : WebViewState {
59
62
switch ( action . type ) {
60
63
case 'HIDE_MEDIA' :
61
- return { ...state , hideTweetMedia : true } ;
64
+ return { ...state , isLoading : false , hideTweetMedia : true } ;
62
65
case 'SET_HEIGHT' :
63
66
return { ...state , webViewHeight : action . height } ;
64
67
case 'LOADING_COMPLETE' :
@@ -168,15 +171,21 @@ export const EmbedWebView = memo<EmbedWebViewProps>(
168
171
( event : any ) => {
169
172
try {
170
173
const data = JSON . parse ( event . nativeEvent . data ) as WebViewMessageData ;
174
+ logger . log ( 'onMessageHandler' , data ) ;
171
175
if ( data . height && data . height > 0 ) {
172
176
// For Twitter's initial load
173
177
if ( provider . name === 'Twitter' && data . loaded ) {
174
178
// For tall tweets that need media hiding
175
179
if ( data . height > maxAllowedHeight ) {
180
+ logger . log (
181
+ 'Twitter height update, loaded, too tall' ,
182
+ data . height
183
+ ) ;
176
184
// Just set the flag, don't update height yet
177
185
dispatch ( { type : 'HIDE_MEDIA' } ) ;
178
186
} else {
179
187
// For normal sized tweets, update height and complete loading in one action
188
+ logger . log ( 'Twitter height update, loaded' , data . height ) ;
180
189
lastHeightRef . current = data . height ;
181
190
dispatch ( {
182
191
type : 'UPDATE_HEIGHT_AND_COMPLETE' ,
@@ -187,7 +196,15 @@ export const EmbedWebView = memo<EmbedWebViewProps>(
187
196
// For height updates from Twitter after media hiding
188
197
else if ( provider . name === 'Twitter' && ! data . loaded ) {
189
198
const heightDiff = Math . abs ( data . height - lastHeightRef . current ) ;
199
+ logger . log (
200
+ 'Twitter height update, not yet loaded, get diff' ,
201
+ heightDiff
202
+ ) ;
190
203
if ( heightDiff > 25 && data . height !== lastHeightRef . current ) {
204
+ logger . log (
205
+ 'Twitter height update, not yet loaded' ,
206
+ data . height
207
+ ) ;
191
208
lastHeightRef . current = data . height ;
192
209
dispatch ( { type : 'SET_HEIGHT' , height : data . height } ) ;
193
210
}
@@ -201,25 +218,26 @@ export const EmbedWebView = memo<EmbedWebViewProps>(
201
218
}
202
219
}
203
220
} catch ( e ) {
204
- console . warn ( 'Failed to parse WebView message:' , e ) ;
221
+ logger . crumb ( 'Failed to parse WebView message:' , e ) ;
205
222
}
206
223
} ,
207
224
[ provider . name , maxAllowedHeight ]
208
225
) ;
209
226
210
227
const onErrorHandler = useCallback (
211
228
( event : any ) => {
229
+ logger . log ( 'onErrorHandler' , event ) ;
212
230
dispatch ( { type : 'LOADING_COMPLETE' } ) ;
213
231
const { nativeEvent } = event ;
214
- console . warn ( 'WebView error: ' , nativeEvent ) ;
232
+ logger . crumb ( 'WebView error: ' , nativeEvent ) ;
215
233
onError ?.( nativeEvent ) ;
216
234
} ,
217
235
[ onError ]
218
236
) ;
219
237
220
238
const onHttpErrorHandler = useCallback ( ( event : any ) => {
221
239
const { nativeEvent } = event ;
222
- console . warn (
240
+ logger . crumb (
223
241
`WebView received error status code: ${ nativeEvent . statusCode } `
224
242
) ;
225
243
} , [ ] ) ;
@@ -256,7 +274,7 @@ export const EmbedWebView = memo<EmbedWebViewProps>(
256
274
) }
257
275
< View
258
276
width = { provider . defaultWidth }
259
- height = { webViewHeight }
277
+ height = { isLoading ? 0 : webViewHeight }
260
278
backgroundColor = { primaryBackground }
261
279
borderRadius = "$s"
262
280
style = { containerStyle }
0 commit comments