import * as React from 'react' import classnames from 'classnames' import { Link } from 'react-router-dom' import { Product } from '@dollarshaveclub/types' import { PriceAddButton } from '../Buttons/PriceAddButton' import Imgix from 'react-imgix' import { Tray } from '../Tray' import { TileOverlay } from '../ProductTileOverlay' type Props = Readonly<{ className?: string product: Product priceData?: PriceData onClickAdd?: (product: Product) => void handleShouldUpdateToRestock?: ( product: Product, shouldRestock: boolean ) => Promise onClickRemove?: (sku: string) => void onImgClick?: (product: Product) => void viewDetailsLink?: string framed?: boolean recommended?: string showAddAnimation?: boolean isAdded?: boolean isLoading?: boolean isShowingOverlay?: boolean isLoadingOverlay?: boolean isAutoRestock?: boolean isSoldOut?: boolean showSize?: boolean showPriceComparison?: boolean showBaseNameOnly?: boolean dataTestId?: string childrenMiddle?: JSX.Element childrenBottom?: JSX.Element additionalButtonClasses?: string }> type PriceData = { formattedRetailPrice: string formattedPrice: string } const noop = () => {} const ProductTileInline: React.FunctionComponent = ({ className, product, priceData, onClickAdd, handleShouldUpdateToRestock, onClickRemove, onImgClick, showAddAnimation = false, isAdded = false, isLoading = false, isSoldOut = false, isShowingOverlay = false, isLoadingOverlay = false, isAutoRestock = false, viewDetailsLink, framed, showSize, showPriceComparison = false, showBaseNameOnly = false, recommended = false, dataTestId = 'product-button', childrenMiddle, childrenBottom, additionalButtonClasses, }) => { const inlineProductTileClasses = classnames( 'ui-product-tile--inline ui-bg__paper--lightest ui-position--relative ui-text--center', className, { 'ui-product-tile--inline__framed': framed, 'ui-product-tile--inline--recommended': recommended, } ) const productImage = product.assets.productTile.file.url const price = priceData?.formattedPrice const retailPrice = priceData?.formattedRetailPrice const buttonClasses = classnames('ui-price-btn--mb', additionalButtonClasses) const { newBadge = false } = product const handleShouldUpdateToRestockSubmit = (shouldRestock: boolean) => { if (!handleShouldUpdateToRestock) return handleShouldUpdateToRestock(product, shouldRestock) } const renderFrequencyText = () => { if (isAutoRestock) { return (
Auto-restock
) } else { return (
Get this once
) } } return (
{recommended && (
{recommended}
)}
{newBadge && New} onImgClick(product) : noop, }} />
{showBaseNameOnly ? product.basename : [product.modifier, product.basename].join(' ')}
{product.scent && (
{product.scent}
)} {showSize && (
{product.sizeNumber} {product.abbrSizeUnit}
)} {viewDetailsLink && ( View Details )} {childrenBottom}
{childrenMiddle || (price && onClickAdd && ( ))} {(!isAdded || isLoading || showAddAnimation) && showPriceComparison && (
Regular: {retailPrice}
)} {product.planEligible && handleShouldUpdateToRestock && isAdded && !showAddAnimation && !isLoading && renderFrequencyText()}
) } export default ProductTileInline