modal transition

This commit is contained in:
2025-10-23 16:07:52 +02:00
parent bd26a2fb29
commit 7501b818c6
11 changed files with 227 additions and 162 deletions
+65
View File
@@ -0,0 +1,65 @@
import { Image } from "expo-image";
import { memo } from "react";
import { Platform, StyleSheet, View } from "react-native";
import { Palette } from "../styles";
const DEFAULT_INTENSITY = Platform.select({ ios: 22, default: 14 });
const ProfilePicture = ({
uri = null,
size = 48,
style,
blurIntensity = DEFAULT_INTENSITY,
blurTint = "dark",
imageProps = {},
transitionDuration = 120,
cachePolicy = "memory-disk",
contentFit = "cover",
accessibilityLabel,
...rest
}) => {
const dimensionStyle = {
width: size,
height: size,
borderRadius: size / 2,
};
return (
<View
accessible
accessibilityRole="image"
accessibilityLabel={accessibilityLabel}
style={[styles.container, dimensionStyle, style]}
{...rest}
>
{uri ? (
<Image
source={{ uri: uri }}
contentFit={contentFit}
cachePolicy={cachePolicy}
transition={transitionDuration}
style={StyleSheet.absoluteFill}
{...imageProps}
/>
) : (
<>
<View style={[styles.fallback, dimensionStyle]} />
</>
)}
</View>
);
};
const styles = StyleSheet.create({
container: {
overflow: "hidden",
backgroundColor: "transparent",
},
fallback: {
backgroundColor: Palette.glass,
borderColor: Palette.ultraLightWhite,
borderWidth: 2,
},
});
export default memo(ProfilePicture);
@@ -6,7 +6,6 @@ import {
BottomSheetTextInput,
} from '@gorhom/bottom-sheet';
import { BlurView } from 'expo-blur';
import { Image as ExpoImage } from 'expo-image';
import React, {
useCallback,
useEffect,
@@ -30,7 +29,7 @@ import { useUser } from '../../providers/UserDataProvider';
import { getArtistDisplayName } from '../../utils/artistName';
import { Palette } from '../../styles';
import { FONT_FAMILY } from '../../styles/Fonts';
import { size } from '../../styles/Style';
import ProfilePicture from '../ProfilePicture';
let externalOpen;
let externalClose;
@@ -273,24 +272,7 @@ const CommentsBottomSheet = () => {
<View
key={c.id}
style={{ flexDirection: 'row', gap: 12, marginBottom: 14 }}>
{c?.profilePicture ? (
<ExpoImage
source={{ uri: c.profilePicture }}
cachePolicy='memory-disk'
priority='high'
contentFit='cover'
transition={100}
style={{ ...size({ size: 42 }), borderRadius: 100 }}
/>
) : (
<View
style={{
...size({ size: 42 }),
borderRadius: 100,
backgroundColor: '#FFFFFF22',
}}
/>
)}
<ProfilePicture uri={c?.profilePicture || null} size={42} />
<View style={{ flex: 1 }}>
<View
style={{