import * as React from 'react'; import { Dimensions, ImageSourcePropType, ImageStyle, Pressable, StyleProp, View, ViewStyle, } from 'react-native'; import { useGetStyleProps } from '../../hook'; import { Image } from '../../ui/Image'; import { ImageZoom } from './__private__/image-zoom.component'; import { Draggable2 } from './Draggable'; import { Scalable } from './Scalable'; export type ImagePreviewProps = { source: ImageSourcePropType; containerStyle?: ViewStyle; onClicked?: () => void; onDupClicked?: () => void; onLongPress?: () => void; imageStyle?: StyleProp; onChange?: (params: { x: number; y: number; scale: number }) => void; }; /** * Image preview component. * * ** Under the android platform, scaling is not possible. ** */ export function ImagePreview(props: ImagePreviewProps) { const { source, containerStyle, onLongPress, onClicked, onDupClicked, imageStyle, onChange, } = props; const ref = React.useRef | null>(null); const scaleRef = React.useRef(1); const onChangeMoved = React.useCallback(() => { ref.current?.measure( ( _x: number, _y: number, _width: number, _height: number, pageX: number, pageY: number ) => { onChange?.({ x: pageX, y: pageY, scale: scaleRef.current }); } ); }, [onChange]); const onChangeSized = React.useCallback( (scale: number) => { scaleRef.current = scale; ref.current?.measure( ( _x: number, _y: number, _width: number, _height: number, pageX: number, pageY: number ) => { onChange?.({ x: pageX, y: pageY, scale: scaleRef.current }); } ); }, [onChange] ); return ( { onClicked?.(); }} onLongPress={() => { onLongPress?.(); }} > { console.log('ImagePreview Image onError', error.nativeEvent); }} onLoadEnd={() => { console.log('ImagePreview Image onLoadEnd'); }} /> ); } /** * Image preview component. */ export function ImagePreview2(props: ImagePreviewProps) { const { source, containerStyle, onLongPress, onClicked, onDupClicked, imageStyle, } = props; const { getStyleSize } = useGetStyleProps(); const { height, width } = getStyleSize(containerStyle); if (height === undefined || width === undefined) { throw new Error('ImagePreview2: height or width is undefined'); } return ( { console.log('ImagePreview Image onError', error.nativeEvent); }} onLoadEnd={() => { console.log('ImagePreview Image onLoadEnd'); }} /> ); }