Products
Show products
shopifyproductslist
import React from 'react'; import { Actionable, Flexbox, Button, Text, View, Swiper, Image } from '@evlop/native-components'; import { Money, ShopifyProduct, ShopifyImage } from '@evlop/shopify'; const ProductListItemBlock: NativeAppBlock = function ({data}) { const product: ShopifyProduct = data.product const [containerWidth, setContainerWidth] = React.useState(0); if (!product || product.isLoading) return <View style={{aspectRatio: 1}} width="100%" bg="gray-100" />; const images: ShopifyImage[] = product.images! const renderImage = ({ item }: { item: ShopifyImage }) => { return ( <View key={item.id} style={{ width: containerWidth }}> <Image src={item} aspectRatio={1} borderTopRightRadius={10} borderTopLeftRadius={10} resizeMode="cover" /> </View> ); }; return ( <Flexbox flexDirection="column" gap={10}> <Flexbox flexDirection="column" style={{ width: '100%' }} onLayout={(e) => { const w = e.nativeEvent.layout.width; if (w && w !== containerWidth) setContainerWidth(w); }} > {images.length > 0 && containerWidth > 0 ? ( <Swiper data={images} renderItem={renderImage} itemWidth={containerWidth} autoplay={false} paginationType="dash" /> ) : null} <Button borderRadius={0} borderBottomRightRadius={10} borderBottomLeftRadius={10} py={8} variant="filled" color="black" icon="entypo:plus" label="Add to cart" size="sm" action={product?.actions?.addToCart} > Add to cart </Button> </Flexbox> <Actionable action={(product.actions && product.actions.openDetailsPage) || null}> <Flexbox flexDirection="column" gap={4}> <Text fontWeight="Bold" color="primary"> <Money fontSize="2xl" color="primary" fontWeight="Bold" price={product?.priceRange?.minVariantPrice} /> </Text> <Text fontWeight="bold" numberOfLines={1}> {product.vendor} </Text> <Text numberOfLines={2} fontSize="sm"> {product.title} </Text> </Flexbox> </Actionable> </Flexbox> ); } export default ProductListItemBlock;
{}
Loading...