separate blurview

This commit is contained in:
Reinaldo Neto 2023-07-03 19:15:58 -03:00
parent b6ae55e57f
commit b88603173f
3 changed files with 39 additions and 23 deletions

View File

@ -0,0 +1,35 @@
import React from 'react';
import { StyleProp, View, ViewStyle } from 'react-native';
import { BlurView } from '@react-native-community/blur';
import styles from '../../styles';
import { useTheme } from '../../../../theme';
import RCActivityIndicator from '../../../ActivityIndicator';
import { CustomIcon, TIconsName } from '../../../CustomIcon';
const BlurComponent = ({
loading = false,
style = {},
iconName
}: {
loading: boolean;
style: StyleProp<ViewStyle>;
iconName: TIconsName;
}) => {
const { theme, colors } = useTheme();
return (
<>
<BlurView
style={[style, styles.blurView]}
blurType={theme === 'light' ? 'light' : 'dark'}
blurAmount={10}
reducedTransparencyFallbackColor='white'
/>
<View style={[style, styles.blurIndicator]}>
{loading ? <RCActivityIndicator /> : <CustomIcon color={colors.buttonText} name={iconName} size={54} />}
</View>
</>
);
};
export default BlurComponent;

View File

@ -2,7 +2,6 @@ import React, { useContext, useLayoutEffect, useRef, useState } from 'react';
import { StyleProp, TextStyle, View } from 'react-native'; import { StyleProp, TextStyle, View } from 'react-native';
import FastImage from 'react-native-fast-image'; import FastImage from 'react-native-fast-image';
import { dequal } from 'dequal'; import { dequal } from 'dequal';
import { BlurView } from '@react-native-community/blur';
import Touchable from './Touchable'; import Touchable from './Touchable';
import Markdown from '../markdown'; import Markdown from '../markdown';
@ -14,8 +13,7 @@ import { useTheme } from '../../theme';
import { formatAttachmentUrl } from '../../lib/methods/helpers/formatAttachmentUrl'; import { formatAttachmentUrl } from '../../lib/methods/helpers/formatAttachmentUrl';
import { cancelDownload, downloadMediaFile, isDownloadActive, getMediaCache } from '../../lib/methods/handleMediaDownload'; import { cancelDownload, downloadMediaFile, isDownloadActive, getMediaCache } from '../../lib/methods/handleMediaDownload';
import { fetchAutoDownloadEnabled } from '../../lib/methods/autoDownloadPreference'; import { fetchAutoDownloadEnabled } from '../../lib/methods/autoDownloadPreference';
import RCActivityIndicator from '../ActivityIndicator'; import BlurComponent from './Components/BlurComponent';
import { CustomIcon } from '../CustomIcon';
interface IMessageButton { interface IMessageButton {
children: React.ReactElement; children: React.ReactElement;
@ -47,23 +45,6 @@ const Button = React.memo(({ children, onPress, disabled }: IMessageButton) => {
); );
}); });
const BlurComponent = ({ loading = false }: { loading: boolean }) => {
const { theme, colors } = useTheme();
return (
<>
<BlurView
style={[styles.image, styles.imageBlur]}
blurType={theme === 'light' ? 'light' : 'dark'}
blurAmount={10}
reducedTransparencyFallbackColor='white'
/>
<View style={[styles.image, styles.imageIndicator]}>
{loading ? <RCActivityIndicator /> : <CustomIcon color={colors.buttonText} name='arrow-down-circle' size={54} />}
</View>
</>
);
};
export const MessageImage = React.memo(({ imgUri, cached, loading }: { imgUri: string; cached: boolean; loading: boolean }) => { export const MessageImage = React.memo(({ imgUri, cached, loading }: { imgUri: string; cached: boolean; loading: boolean }) => {
const { colors } = useTheme(); const { colors } = useTheme();
return ( return (
@ -73,7 +54,7 @@ export const MessageImage = React.memo(({ imgUri, cached, loading }: { imgUri: s
source={{ uri: encodeURI(imgUri) }} source={{ uri: encodeURI(imgUri) }}
resizeMode={FastImage.resizeMode.cover} resizeMode={FastImage.resizeMode.cover}
/> />
{!cached ? <BlurComponent loading={loading} /> : null} {!cached ? <BlurComponent loading={loading} style={styles.image} iconName='arrow-down-circle' /> : null}
</> </>
); );
}); });

View File

@ -171,7 +171,7 @@ export default StyleSheet.create({
flex: 1, flex: 1,
marginLeft: 12 marginLeft: 12
}, },
imageBlur: { blurView: {
position: 'absolute', position: 'absolute',
borderWidth: 0, borderWidth: 0,
top: 0, top: 0,
@ -179,7 +179,7 @@ export default StyleSheet.create({
bottom: 0, bottom: 0,
right: 0 right: 0
}, },
imageIndicator: { blurIndicator: {
position: 'absolute', position: 'absolute',
justifyContent: 'center', justifyContent: 'center',
alignItems: 'center', alignItems: 'center',