gatsby#navigateTo JavaScript Examples
The following examples show how to use
gatsby#navigateTo.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: ProductInfo.js From web with MIT License | 4 votes |
ProductInfo = ({ product, home, reviews, variant, setVariant }) => {
const [isVisible, setIsVisible] = useState(false);
const location = useStoreState(state => state.user.location);
const addToCart = useStoreActions(actions => actions.cart.add);
// console.log('product', product);
useEffect(() => {
setTimeout(() => {
setIsVisible(true);
}, 400);
}, []);
const metaUrl = `${config.siteUrl}/product/${product.slug.current}`;
const metaTitle = `Checkout ${product.title} at ${config.siteName}`;
const handleAddToCart = () => {
const price = getPrice(variant.pricing, true, location);
ReactGA.plugin.execute('ecommerce', 'addItem', {
id: product._id,
title: product.title,
sku: variant.sku || '-',
price,
// category: 'Cases',
quantity: '1',
});
const itemData = {
itemId: makeId(5),
id: product._id,
title: product.title,
slug: product.slug.current,
shippingCost: getPrice(product.shippingCost, false, location),
sku: variant.sku,
price,
image: variant.featuredImage.asset.fluid.src,
color: variant.color ? variant.color.hex : '',
quantity: 1,
};
addToCart(itemData);
setTimeout(() => navigateTo('/cart'), 600);
};
return (
<>
<RatingContainer>
<i className="fas fa-star" />
<i className="fas fa-star" />
<i className="fas fa-star" />
<i className="fas fa-star" />
<i className="fas fa-star" />
<span>{reviews.length} Reviews</span>
</RatingContainer>
<Heading centered>{product.title}</Heading>
<Price className="has-text-weight-semibold has-text-centered">
<CurrencyFormat pricing={variant.pricing} isDiscount />{' '}
{variant.discountPrice < variant.price && (
<span>
<CurrencyFormat pricing={variant.pricing} />
</span>
)}
</Price>
<Spring native from={{ opacity: 0 }} to={{ opacity: isVisible ? 1 : 0 }}>
{stylesProps => (
<animated.div style={stylesProps}>
<Variants>
{product.otherVariants &&
product.otherVariants.map(variantItem => {
return variantItem.color ? (
<VariantColor
key={variantItem.color.hex}
color={variantItem.color.hex}
active={
variant.color
? variant.color.hex === variantItem.color.hex
: false
}
onClick={() => setVariant(variantItem)}
/>
) : null;
})}
</Variants>
<BuyBtn
className="product-info-btn button is-dark is-medium is-radiusless is-uppercase"
// eslint-disable-next-line prettier/prettier
onClick={() => handleAddToCart()}
>
Add to cart
</BuyBtn>
<ShippingInfo>Free Shipping to {location.country}.</ShippingInfo>
<AccordionStyled>
<AccordionItem expanded>
<AccordionItemTitle>
<h3>Product Details</h3>
</AccordionItemTitle>
<AccordionItemBody>
{product._rawBody && (
<BlockContent blocks={product._rawBody.en || []} />
)}
<p>Made in India</p>
<p>All prices include sales taxes.</p>
</AccordionItemBody>
</AccordionItem>
<AccordionItem>
<AccordionItemTitle>
<h3>Delivery & Returns</h3>
</AccordionItemTitle>
<AccordionItemBody>
<ReactMarkdown source={home.productDeliveryInfo} />
<br />
<ReactMarkdown source={home.productShippingReturns} />
</AccordionItemBody>
</AccordionItem>
</AccordionStyled>
<ShareContainer>
<h3>Share</h3>
<div className="share-icons">
<div className="level">
<div className="level-item">
<FacebookShareButton
url={metaUrl}
quote={metaTitle}
hashtag="#ecommerce"
>
<i className="fab fa-facebook-square" />
</FacebookShareButton>
</div>
<div className="level-item">
<TwitterShareButton
url={metaUrl}
title={metaTitle}
hashtags={['ecommerce']}
>
<i className="fab fa-twitter-square" />
</TwitterShareButton>
</div>
<div className="level-item">
<EmailShareButton url={metaUrl} subject={metaTitle}>
<i className="fas fa-envelope" />
</EmailShareButton>
</div>
</div>
</div>
</ShareContainer>
</animated.div>
)}
</Spring>
</>
);
}