support aspect ratio in Image

This commit is contained in:
Pavel Prichodko 2023-01-17 16:02:43 +01:00
parent d04d4e4ed7
commit 1b340e7bc6
No known key found for this signature in database
GPG Key ID: 8E4C82D464215E83
1 changed files with 29 additions and 13 deletions

View File

@ -1,4 +1,4 @@
import React, { forwardRef } from 'react'
import { forwardRef } from 'react'
import { isWeb, setupReactNative, styled } from '@tamagui/core'
import { Image as RNImage } from 'react-native'
@ -16,32 +16,48 @@ setupReactNative({
const Base = styled(RNImage, {
name: 'Image',
position: 'relative',
source: { uri: '' },
zIndex: 1,
source: {
uri: '',
},
})
type InputProps = GetProps<typeof Image>
// type W = InputProps['width']
interface Props {
src: string
width: number
height: number
width: number | 'full'
height?: number
aspectRatio?: number
// onLoad?: InputProps['onLoad']
// onError?: InputProps['onError']
}
const Image = (props: Props, ref: Ref<HTMLImageElement>) => {
const { src } = props
const { src, aspectRatio, ...rest } = props
const source =
typeof src === 'string'
? {
const width = props.width === 'full' ? '100%' : props.width
const height = aspectRatio ? undefined : props.height
const source = {
uri: src,
...(isWeb && { width: props.width, height: props.height }),
...(isWeb && { width, height }),
}
: src
return <Base source={source} ref={ref} />
return (
<Base
{...rest}
ref={ref}
source={source}
width={width}
height={height}
style={{
aspectRatio,
}}
/>
)
}
// focusableInputHOC(Image)