in client/src/components/product-item.js [153:320]
render() {
const { AVOCANO_PURCHASE_MODE } = config.getConfig();
const {
count,
testimonials,
openDialog,
openCartDialog,
openSoldOutDialog,
} = this.state;
const {
name,
price,
discount_price,
discount_percent,
image,
description,
} = this.productItem || {};
return html`
<div class="productItemContainer">
<div class="productItemWrapper">
<div class="productimageWrapper">
<img
class="productimage"
alt="product logo"
src=${image}
loading="lazy"
onerror=${`this.src='${noimage}';`}
/>
</div>
<div class="productItemContent">
<h2 class="itemTitle">${name}</h2>
${discount_percent > 0
? html`<div class="price">
<div class="retailPrice">RRP $${price}</div>
<div class="discountPrice">Now $${discount_price}</div>
<div class="discountRate">Save ${discount_percent}%</div>
</div>`
: html`<div class="price">
<div class="discountPrice">$${discount_price}</div>
</div>`}
<div class="inventory">
${count > 0 ? `Only ${count} left!` : `Sold Out!`}
</div>
${count > 0
? AVOCANO_PURCHASE_MODE === 'cart'
? html`<a
href="#"
class="cartButton"
label="Add to Cart"
@click="${this.addToCart}"
>Add to Cart</a
>`
: html`<a
href="#"
class="buyButton"
label="Buy"
@click="${this.buyProduct}"
>Buy</a
>`
: ''}
</div>
</div>
<div class="productDescription">${description}</div>
<div class="testimonialsWrapper">
<div class="testimonialsHeader">
<h3>Testimonials</h3>
</div>
<div class="testimonialsContent">
${testimonials?.length
? testimonials.map(
(item) => html`
<div class="testimonialsItem">
<div class="testimonialItemContent">
<div class="rating">
${`★`.repeat(item.rating)}${`☆`.repeat(
5 - item.rating,
)}
</div>
<div class="reviewerDetails">
${item.reviewer_name} from ${item.reviewer_location}
</div>
<div class="reviewSummary">${item.summary}</div>
<div class="reviewDescription">${item.description}</div>
</div>
</div>
`,
)
: html`<p>No testimonials ... yet</p>`}
</div>
</div>
${openCartDialog
? html`
<mwc-dialog open>
<div class="dialogWrapper">
<div>
<h2>Wonderful news!</h2>
<div>"${name}" has been added to your cart.</div>
<img
class="productimage"
alt="product logo"
src=${image}
style="height: 210px; width: auto;"
loading="lazy"
onerror=${`this.src='${noimage}';`}
/>
</div>
</div>
<mwc-button
label="Close"
slot="primaryAction"
@click="${this.hideCartDialog}"
></mwc-button>
</mwc-dialog>
`
: ''}
${openDialog
? html`
<mwc-dialog open>
<div class="dialogWrapper">
<img class="oopsAvocado" src=${oopsAvocado} />
<div>
<h2>Oops!</h2>
<div>Sorry! This is not a real product.</div>
<div>
<br />
There isn't such thing as a ${name}, at least in this
storefront. But thank you for your interest in this
product!
</div>
</div>
</div>
<mwc-button
label="Oh no! 😭"
slot="primaryAction"
@click="${this.toggleDialog}"
></mwc-button>
</mwc-dialog>
`
: ''}
${openSoldOutDialog
? html`
<mwc-dialog open>
<div class="dialogWrapper">
<div>
<h2>Sold out!</h2>
<div>This is product is no longer available.</div>
<div>
Lucas ipsum dolor sit amet solo sidious hutt jade wampa
darth leia yavin vader tatooine. Jawa yoda amidala wedge
chewbacca. Qui-gon jinn qui-gon hutt yavin mon solo anakin
hutt. Darth darth organa luke. Leia c-3po calamari lando
boba palpatine mandalore boba.
</div>
</div>
</div>
<mwc-button
label="Close"
slot="primaryAction"
@click="${this.toggleSoldOutDialog}"
></mwc-button>
</mwc-dialog>
`
: ''}
</div>
`;
}