Skip to content

Commit 8016d2a

Browse files
committed
Add animation support
1 parent 7143bc7 commit 8016d2a

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

example/src/App.tsx

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,31 @@
11
import { LinkPreview } from '@flyerhq/react-native-link-preview'
22
import React from 'react'
3-
import { SafeAreaView, ScrollView, StyleSheet } from 'react-native'
3+
import {
4+
Platform,
5+
SafeAreaView,
6+
ScrollView,
7+
StyleSheet,
8+
UIManager,
9+
} from 'react-native'
10+
11+
if (
12+
Platform.OS === 'android' &&
13+
UIManager.setLayoutAnimationEnabledExperimental
14+
) {
15+
UIManager.setLayoutAnimationEnabledExperimental(true)
16+
}
417

518
const App = () => (
619
<SafeAreaView style={styles.container}>
720
<ScrollView contentContainerStyle={styles.contentContainer}>
821
<LinkPreview
922
containerStyle={styles.previewContainer}
23+
enableAnimation
1024
text='https://flyer.chat'
1125
/>
1226
<LinkPreview
1327
containerStyle={styles.previewContainer}
28+
enableAnimation
1429
text='github.com/flyerhq'
1530
/>
1631
</ScrollView>

src/LinkPreview.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import * as React from 'react'
22
import {
33
Image,
4+
LayoutAnimation,
45
LayoutChangeEvent,
56
Linking,
67
StyleProp,
@@ -18,6 +19,7 @@ import { getPreviewData, oneOf } from './utils'
1819

1920
export interface LinkPreviewProps {
2021
containerStyle?: StyleProp<ViewStyle>
22+
enableAnimation?: boolean
2123
metadataContainerStyle?: StyleProp<ViewStyle>
2224
metadataTextContainerStyle?: StyleProp<ViewStyle>
2325
onPreviewDataFetched?: (previewData: PreviewData) => void
@@ -40,6 +42,7 @@ export interface LinkPreviewProps {
4042
export const LinkPreview = React.memo(
4143
({
4244
containerStyle,
45+
enableAnimation,
4346
metadataContainerStyle,
4447
metadataTextContainerStyle,
4548
onPreviewDataFetched,
@@ -69,6 +72,11 @@ export const LinkPreview = React.memo(
6972
// Set data only if component is still mounted
7073
/* istanbul ignore next */
7174
if (!isCancelled) {
75+
// No need to cover LayoutAnimation
76+
/* istanbul ignore next */
77+
if (enableAnimation) {
78+
LayoutAnimation.easeInEaseOut()
79+
}
7280
setData(newData)
7381
onPreviewDataFetched?.(newData)
7482
}
@@ -78,7 +86,7 @@ export const LinkPreview = React.memo(
7886
return () => {
7987
isCancelled = true
8088
}
81-
}, [onPreviewDataFetched, previewData, text])
89+
}, [enableAnimation, onPreviewDataFetched, previewData, text])
8290

8391
const handleContainerLayout = React.useCallback(
8492
(event: LayoutChangeEvent) => {

0 commit comments

Comments
 (0)