Added dots to image carousel. Updated product SEO slug placements and setup redirects from old URLs.
This commit is contained in:
parent
e995509aac
commit
ade795afb9
|
@ -1,10 +1,23 @@
|
|||
import { defineConfig } from 'astro/config';
|
||||
import sitemap from '@astrojs/sitemap';
|
||||
import { loadEnv } from "vite";
|
||||
import { ALL_PRODUCTS } from './src/data/products';
|
||||
const { SITE_URL } = loadEnv(process.env.NODE_ENV, process.cwd(), "");
|
||||
|
||||
function generateRedirectsForAmazonProductIds() {
|
||||
let redirects = {};
|
||||
for (let p = 0; p < ALL_PRODUCTS.length; p++) {
|
||||
let product = ALL_PRODUCTS[p];
|
||||
if (product.amazonProductId && product.slug !== product.amazonProductId) {
|
||||
redirects[`/${product.amazonProductId}`] = `/${product.slug}`;
|
||||
}
|
||||
}
|
||||
return redirects;
|
||||
}
|
||||
|
||||
// https://astro.build/config
|
||||
export default defineConfig({
|
||||
site: SITE_URL||'http://localhost',
|
||||
integrations: [sitemap()],
|
||||
redirects: generateRedirectsForAmazonProductIds(),
|
||||
});
|
||||
|
|
|
@ -9,10 +9,10 @@ export interface Image {
|
|||
|
||||
interface Props {
|
||||
images: Image[];
|
||||
dots?: number;
|
||||
showDots?: boolean;
|
||||
}
|
||||
|
||||
const { images } = Astro.props;
|
||||
const { images, showDots } = Astro.props;
|
||||
let index = 1;
|
||||
---
|
||||
|
||||
|
@ -32,7 +32,6 @@ let index = 1;
|
|||
}
|
||||
</div>
|
||||
))}
|
||||
<!-- Next and previous buttons -->
|
||||
<div class="carousel-btn-prev">
|
||||
<div class="overlay"></div>
|
||||
<a>
|
||||
|
@ -47,16 +46,24 @@ let index = 1;
|
|||
<div class="dummy"></div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="carousel-dots">
|
||||
{showDots && images?.map(image => (
|
||||
<span class="carousel-dot"></span>
|
||||
))}
|
||||
</div>
|
||||
</image-carousel>
|
||||
|
||||
<script>
|
||||
class ImageCarousel extends HTMLElement {
|
||||
slideIndex: number;
|
||||
idleAdvance?: any;
|
||||
constructor() {
|
||||
super();
|
||||
this.slideIndex = 1;
|
||||
const prevButton = $(this).find('.carousel-btn-prev');
|
||||
const nextButton = $(this).find('.carousel-btn-next');
|
||||
// let slides = $(this).find('.carousel-slide');
|
||||
let dotButtons = $(this).find('.carousel-dot');
|
||||
prevButton.click((evt: Event) => {
|
||||
this.plusSlides(-1);
|
||||
evt.preventDefault();
|
||||
|
@ -65,8 +72,36 @@ class ImageCarousel extends HTMLElement {
|
|||
this.plusSlides(1);
|
||||
evt.preventDefault();
|
||||
});
|
||||
// slides.each((index: number) => {
|
||||
// let slide = $(slides[index]);
|
||||
// slide.swipe({
|
||||
// swipeLeft: () => {
|
||||
// this.plusSlides(1);
|
||||
// },
|
||||
// swipeRight: () => {
|
||||
// this.plusSlides(-1);
|
||||
// }
|
||||
// });
|
||||
// });
|
||||
dotButtons.each((index: number) => {
|
||||
let dotButton = $(dotButtons[index]);
|
||||
dotButton.click((evt: Event) => {
|
||||
this.showSlide(index+1);
|
||||
})
|
||||
});
|
||||
this.showSlide(this.slideIndex);
|
||||
}
|
||||
beginIdleAdvance() {
|
||||
this.clearIdleAdvance();
|
||||
this.idleAdvance = setInterval(() => {
|
||||
this.plusSlides(1);
|
||||
}, 10000);
|
||||
}
|
||||
clearIdleAdvance() {
|
||||
if (this.idleAdvance)
|
||||
clearTimeout(this.idleAdvance);
|
||||
this.idleAdvance = undefined;
|
||||
}
|
||||
slidesCount() {
|
||||
return $(this).find('.carousel-slide').length || 0;
|
||||
}
|
||||
|
@ -80,14 +115,13 @@ class ImageCarousel extends HTMLElement {
|
|||
if (slideIndex > slidesCount) slideIndex = 1;
|
||||
this.slideIndex = slideIndex;
|
||||
let slides = $(this).find('.carousel-slide');
|
||||
slides.each((index) => $(slides[index]).toggleClass('carousel-slide-current', false));
|
||||
let dots = $(this).find('.carousel-dot');
|
||||
slides.each((index: number) => $(slides[index]).toggleClass('carousel-slide-current', false));
|
||||
$(slides[slideIndex-1]).toggleClass('carousel-slide-current', true);
|
||||
dots.each((index: number) => $(dots[index]).toggleClass('carousel-dot-active', false));
|
||||
$(dots[slideIndex-1]).toggleClass("carousel-dot-active", true);
|
||||
console.log("Showing slide " + slideIndex + " of " + slidesCount + ".");
|
||||
// var dots = $(carousel).find('.carousel-dot');
|
||||
// for (var i = 0; i < dots.length; i++) {
|
||||
// dots[i].className = dots[i].className.replace(" active", "");
|
||||
// }
|
||||
// dots[slideIndex-1].className += " active";
|
||||
this.beginIdleAdvance();
|
||||
}
|
||||
}
|
||||
customElements.define('image-carousel', ImageCarousel);
|
||||
|
@ -230,18 +264,29 @@ image-carousel {
|
|||
filter: invert(1);
|
||||
mix-blend-mode: luminosity;
|
||||
}
|
||||
.carousel-dots {
|
||||
position: absolute;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
bottom: 1.5rem;
|
||||
text-align: center;
|
||||
}
|
||||
.carousel-dot {
|
||||
cursor: pointer;
|
||||
height: 15px;
|
||||
width: 15px;
|
||||
height: 1.2em;
|
||||
width: 1.2em;
|
||||
margin: 0 2px;
|
||||
background-color: #bbb;
|
||||
background-color: rgba(102, 102, 102, 0.8);
|
||||
border-radius: 50%;
|
||||
display: inline-block;
|
||||
transition: background-color 0.6s ease;
|
||||
filter: invert(1);
|
||||
mix-blend-mode: luminosity;
|
||||
}
|
||||
.active, .dot:hover {
|
||||
background-color: #717171;
|
||||
.carousel-dot-active, .carousel-dot:hover {
|
||||
background-color: #ccc;
|
||||
}
|
||||
.carousel-fade {
|
||||
animation-name: fade;
|
||||
|
|
|
@ -18,7 +18,7 @@ const { product } = Astro.props;
|
|||
<div class="card-body">
|
||||
<StarRating value={product?.amazonProductDetails?.reviewRating||0} max={5} overlayColor="#23262d" /> {product?.amazonProductDetails?.reviewCount} Reviews
|
||||
<h5 class="card-title">
|
||||
{product?.amazonProductDetails?.title} <span>→</span>
|
||||
{product?.title||product?.amazonProductDetails?.title} <span>→</span>
|
||||
</h5>
|
||||
</div>
|
||||
</a>
|
||||
|
|
|
@ -5,7 +5,7 @@ export const BRAND_STORE_SLUG = 'bell';
|
|||
|
||||
export const BellAutomotiveProductsStoreProducts: Product[] = [
|
||||
{
|
||||
slug: 'B000CC4O58',
|
||||
slug: 'bell-automotive-black-deer-warning',
|
||||
tags: ['deer', 'whistle', 'alerWt', 'warning', 'safety'],
|
||||
brandStoreSlug: BRAND_STORE_SLUG,
|
||||
name: 'Black Deer Warning',
|
||||
|
@ -33,6 +33,7 @@ deer-related collisions. Continue to drive safely and rest assured more deer wil
|
|||
Don't let deer-related accidents hold you back from delivering safely and efficiently. Get the Bell
|
||||
Automotive-22-1-01000-8 Black Deer Warning Unit today and enjoy peace of mind behind the wheel!
|
||||
`.trim(),
|
||||
amazonProductId: 'B000CC4O58',
|
||||
amazonLink: 'https://www.amazon.com/Bell-Automotive-22-1-01000-8-Black-Warning/dp/B000CC4O58?crid=38OWGTE3CGGTR&dib=eyJ2IjoiMSJ9.2hsaXGo5j3z_PO0DdSqY2dh0ERcaf1BLgOVM5jRO6_8YsWEDMVv1R9XYUsALRJPK7hWsylfyJucQttI1MRPR7YrBuBhDAJVzXue3BLjSRwHS3tzLix_0BMleTroTTDMtOyzuGpJGlkfq4ayiBl1HtOKN1HmSfUWnseEzDdmdYfiPGena7b4L1qIAz5AnMd0zdy0-YuddgQiHjM3Ha57GzK0w-HSTpHUeAIDrFQFEhcbCBnTRYPtrDEqvFlVd2E2-rmbQgqrb9YDaZo-zTNBGuHt2liqz_4hN6fwXQ9-BfPM.Atf0vKmCupgwmiW_lZj49dmQMkvMPIjQsfx3PqYlqIc&dib_tag=se&keywords=deer+alert&qid=1721016740&sprefix=deer+aler%2Caps%2C92&sr=8-17&linkCode=ll1&tag=dashersupply-20&linkId=623763eba9c22a3e4d3618007f6b13ae&language=en_US&ref_=as_li_ss_tl',
|
||||
amazonProductDetails: {
|
||||
"title": "Bell Automotive-22-1-01000-8 Bell Deer Warning Unit, Black, PR",
|
||||
|
@ -79,7 +80,7 @@ Automotive-22-1-01000-8 Black Deer Warning Unit today and enjoy peace of mind be
|
|||
}
|
||||
},
|
||||
{
|
||||
slug: 'B000IG5PVU',
|
||||
slug: 'bell-automotive-chrome-deer-warning',
|
||||
tags: ['deer', 'whistle', 'alerWt', 'warning', 'safety'],
|
||||
brandStoreSlug: BRAND_STORE_SLUG,
|
||||
name: 'Chrome Deer Warning',
|
||||
|
@ -107,6 +108,7 @@ deer-related collisions. Continue to drive safely and rest assured more deer wil
|
|||
Don't let deer-related accidents hold you back from delivering safely and efficiently. Get the Bell
|
||||
Automotive-22-1-01001-8 Chrome Deer Warning Unit today and enjoy peace of mind behind the wheel!
|
||||
`.trim(),
|
||||
amazonProductId: 'B000IG5PVU',
|
||||
amazonLink: 'https://www.amazon.com/Bell-Automotive-22-1-01001-8-Chrome-Warning/dp/B000IG5PVU?crid=292GBL5WF6BRS&dib=eyJ2IjoiMSJ9.bJ1O7X9g1iSFNRAATSwis8O-HyUVPobiDj9SFPCzloSL6FVx3V5odzkPH8plk5R-Y9JoWUFRYq8qwR-QjxRb6-9pCZYAnCaKv1I_GY6CMUP5F07CSo-gqPd2yMfr1YjiFHMB_CHwA7vs_eUSFT9jkEenaQtEp1_3yDHrjxTpSWUMiJGZwfzksmhStFE82p031qxt2LQxT9YpabM7XMguPc2ZFv4-PIrU55VbXxzqgf9CyVj3S_QSujOZmGuqBqgQQhVXzfL0TwQocB1xsTMVmiFepdozsBMuUFleATwNsyM.CCOSpzyeJTssD33Vns57cdSlHsXfWXPe2k1_lKfGT1M&dib_tag=se&keywords=bell+automotive+deer+alert&qid=1721018357&sprefix=bell+automotive+deer+alert%2Caps%2C69&sr=8-3&linkCode=ll1&tag=dashersupply-20&linkId=a26ad59d6d5109c7d46d43d8b1af4cad&language=en_US&ref_=as_li_ss_tl',
|
||||
amazonProductDetails: {
|
||||
"title": "Bell Automotive 22-1-01001-8 Chrome Deer Warning",
|
||||
|
|
|
@ -5,7 +5,7 @@ export const BRAND_STORE_SLUG = 'coast';
|
|||
|
||||
export const CoastStoreProducts: Product[] = [
|
||||
{
|
||||
slug: 'B00SJRDIN2',
|
||||
slug: 'coast-polysteel-600-led-flashlight',
|
||||
tags: ['flashlight', 'safety'],
|
||||
brandStoreSlug: BRAND_STORE_SLUG,
|
||||
name: 'Durable 8" Spot/Flood LED flashlight',
|
||||
|
@ -38,6 +38,7 @@ Whether you're navigating through dark alleys, driveways, signaling for help, or
|
|||
the COAST Polysteel 600 LED Flashlight has got your back. Its durable design and rechargeable options make it a reliable companion for
|
||||
delivery drivers like you.
|
||||
`.trim(),
|
||||
amazonProductId: 'B00SJRDIN2',
|
||||
amazonLink: 'https://www.amazon.com/Polysteel-600-Waterproof-Flashlight-Stainless/dp/B00SJRDIN2?crid=29BV6TGKIV7U4&dib=eyJ2IjoiMSJ9.z_qqGdUikpKLO62rjeDuDoQDki7kToAVTM2kBLri4vs25y739Ll_nFVMziV7A5ZnYGQQYNujGdg5igViybnULLsVCa_T6qCk9HUVk7GuD30Jp0FrydoVV9zm-m-E9Zhi7vGbjJdDxUmYXypCL_GaGT6O6K4gf2P94QITVfbbBrjNT74VL9ZdRfs9ucPUSjkoTNLCMXcAXf4fXnJqniXk4PyFks_YYcZ9K8IDN4Fp-puEBc5lhdIp2hY4ugsmMD2v9zYNTvaTD1EaAnXVA_UXIrGwSTdg3Q2cWoqWF6sw6mo.z0JvreFTZ58D14a2IuwCSDybpR9x_CTUBSRrNlP9aZs&dib_tag=se&keywords=coast+flash+light&qid=1720695258&s=sporting-goods&sprefix=coast+flash+light%2Csporting%2C83&sr=1-27&linkCode=ll1&tag=dashersupply-20&linkId=9cfd6086ba43fac649f6884f72c7c844&language=en_US&ref_=as_li_ss_tl',
|
||||
amazonProductDetails: {
|
||||
"title": "COAST POLYSTEEL 600 1000 Lumen LED Flashlight with Pure Beam Twist Focus, Stainless-Steel Core, Crushproof, Black",
|
||||
|
|
|
@ -6,7 +6,8 @@ export const BRAND_STORE_SLUG = 'first-aid-only';
|
|||
export const FirstAidOnlyStoreProducts: Product[] = [
|
||||
{
|
||||
amazonLink: 'https://www.amazon.com/First-Aid-Only-Weatherproof-Plastic/dp/B001SG76MU?crid=17746AVZ2R4TK&dib=eyJ2IjoiMSJ9.nehq12VwBTB17Vyx1YODXq7JYQbnOM8xv6AZRadSceLpsk33o-ES3M7UnJMkq0usrVmB1uKgdw9rxtPf7wcS1fHI_DhXIkjp7ujnBf0xvt-SjW3Xw__yU6NvYnSUmSfQzcqj49ZMu893KSypCAIPiLZ0gHo9HbRPicFsuJVBOCv5aOQoBqlLRymArai_8k9lUwtCxAfhfiDjUGk6K3s_S6IFWUP88Ff8mbyU5lkVRtbE4dRTCp-wNjM6HpxqZPSZ0A3_-PPl75PlgjsmUXIkxArreEPatqaHwyJ13X-DCQU.CWOEqmjYxSJ7yRXLCgtz9iGOSGJD53MSoPw6jzAWx7Q&dib_tag=se&keywords=first+aid+kit&qid=1720746463&sprefix=first+aid+kit%2Caps%2C95&sr=8-3-spons&sp_csd=d2lkZ2V0TmFtZT1zcF9hdGY&psc=1&linkCode=ll1&tag=dashersupply-20&linkId=385f21e08641ef9ce7ad55aebe2d30cf&language=en_US&ref_=as_li_ss_tl',
|
||||
slug: 'B001SG76MU',
|
||||
amazonProductId: 'B001SG76MU',
|
||||
slug: 'first-aid-only-57-pc-first-aid-kit',
|
||||
categoryId: getCategoryIdForSlug('safety-equipment')!,
|
||||
name: "57-pc First Aid Kit (small)",
|
||||
tags: ['safety','first-aid'],
|
||||
|
|
|
@ -5,7 +5,7 @@ export const BRAND_STORE_SLUG = 'invisible-glass';
|
|||
|
||||
export const InvisibleGlassProducts: Product[] = [
|
||||
{
|
||||
slug: 'B0007OWD2M',
|
||||
slug: 'invisible-glass-foaming-glass-cleaner',
|
||||
tags: ['glass', 'cleaner'],
|
||||
brandStoreSlug: BRAND_STORE_SLUG,
|
||||
name: 'Invisible Glass Foaming Glass Cleaner',
|
||||
|
@ -29,6 +29,7 @@ harsh chemicals behind, making it a true joy to work with.
|
|||
Experience the difference for yourself. With its powerful foaming action and guaranteed streak-free results, you'll be able to drive
|
||||
with confidence and clarity - no matter what the road throws your way.
|
||||
`.trim(),
|
||||
amazonProductId: 'B0007OWD2M',
|
||||
amazonLink: 'https://www.amazon.com/Invisible-Glass-91166-6PK-Premium-Cleaner/dp/B0007OWD2M?hvadid=80607997944702&hvnetw=o&hvqmt=e&hvbmt=be&hvdev=c&hvlocint=&hvlocphy=&hvtargid=pla-4584207585873841&th=1&linkCode=ll1&tag=dashersupply-20&linkId=a81b62e34ab769132cbe8076316b448d&language=en_US&ref_=as_li_ss_tl',
|
||||
amazonProductDetails: {
|
||||
"title": "Invisible Glass 91164 19-Ounce Cleaner for Auto and Home for a Streak-Free Shine, Deep Cleaning Foaming Action, Safe for Tinted and Non-Tinted Windows, Ammonia Free Foam Glass Cleaner",
|
||||
|
|
|
@ -5,7 +5,7 @@ export const BRAND_STORE_SLUG = 'nvision';
|
|||
|
||||
export const nVisionStoreProducts: Product[] = [
|
||||
{
|
||||
slug: 'B0000DYV3N',
|
||||
slug: 'nvision-electronic-deer-alert',
|
||||
tags: ['deer', 'whistle', 'alerWt', 'warning', 'safety'],
|
||||
brandStoreSlug: BRAND_STORE_SLUG,
|
||||
name: 'Electronic Deer Alert',
|
||||
|
@ -37,12 +37,12 @@ choose from a simulated rattle snake sound that takes advantage of nature's best
|
|||
|
||||
* Quarter mile warning range for increased reaction time
|
||||
* Activates from dash-mounted switch, ignition, or high beams for flexibility
|
||||
* Simulated rattle snake sound for added effectiveness
|
||||
* Easy to install and use with included instructions
|
||||
|
||||
Don't let deer-related accidents hold you back from delivering packages and efficiently. With the nVISION Trailblazer
|
||||
Deer Alert, the deer will hear you coming.
|
||||
`.trim(),
|
||||
amazonProductId: 'B0000DYV3N',
|
||||
amazonLink: 'https://www.amazon.com/Hopkins-27512VA-nVISION-Trailblazer-Electronic/dp/B0000DYV3N?crid=1OO1GL5ERA30E&dib=eyJ2IjoiMSJ9.zKSyNMASsuqR2JLuPICupB5N0gr3mV9rCY5mDLq0nteE_I7uA99eMpyrFMlp9Rmg8y29jHsu5CXS6D6rVQbf_9X5S1rixss014Om-mY44aaW9aDxw7c2k11jxYHDo9ta6vfjAUMLS_TJ-HKmB4ens05KFPYASmgh7OMturk8CsZFebU5Wl9u3RJ3msToyu4a2iozCQzToauDe_sEWZcsK3k_oPGAwotTRsG5musYpYlTlxxBgxwE3Sii0Z4T-uqDd-BNGp3DkSfu2ZtF6gn7XK1rip8COHws2H8D1C3DxqY.9gjHTeHUVufso-AO7nuU4Zys_CClKElR_HM7Y0WBmMM&dib_tag=se&keywords=trailblazer+electronic+deer+alert&qid=1721017663&sprefix=trailblazer+electronic+deer+alert%2Caps%2C69&sr=8-1&linkCode=ll1&tag=dashersupply-20&linkId=7023f7183f50617ff8e739b6eb4a427a&language=en_US&ref_=as_li_ss_tl',
|
||||
amazonProductDetails:{
|
||||
"title": "nVISION Hopkins 27512VA Trailblazer Electronic Deer Alert",
|
||||
|
|
|
@ -5,9 +5,7 @@ export const BRAND_STORE_SLUG = 'rubbermaid';
|
|||
|
||||
export const RubbermaidStoreProducts: Product[] = [
|
||||
{
|
||||
slug: 'B00006ICOT',
|
||||
amazonLink: 'https://www.amazon.com/Rubbermaid-Commercial-Deluxe-Cleaning-FG315488BLA/dp/B00006ICOT?crid=23IAS1CUMM6QG&dib=eyJ2IjoiMSJ9.WRH21whjlnubmVRL4HRNIccU9p3CC9B9pvd9LCCkzqxXQggwnV0UNwmgHs868sL9Jr_1cfUHxsHCU7sTT28EMZOCdxoGo-ylie7hWbrQ75ab9SFUJMawaE14LhyNFAQ69j45EtR9kd0njMvXY9WDrBWj61TMpe6K1vl0BC-kWFz8iQqZgrRsgLNN5jbuF83nWOddYMTMZFxQXuvyPUG13LwYmOe17iPUBa03FNecKl0.-fxaqjBgRSTfoIeqegQhb9rz9lE9LJTt475JTTi0J3A&dib_tag=se&keywords=drink+carrier&qid=1719716583&sprefix=drink+carrier%2Caps%2C162&sr=8-3&linkCode=ll1&tag=dashersupply-20&linkId=1a29425189155a3bbe240c193bd1589e&language=en_US&ref_=as_li_ss_tl',
|
||||
// amazonLink: 'https://www.amazon.com/Rubbermaid-Commercial-Deluxe-Cleaning-FG315488BLA/dp/B00006ICOT?crid=23IAS1CUMM6QG&dib=eyJ2IjoiMSJ9.WRH21whjlnubmVRL4HRNIccU9p3CC9B9pvd9LCCkzqxXQggwnV0UNwmgHs868sL9Jr_1cfUHxsHCU7sTT28EMZOCdxoGo-ylie7hWbrQ75ab9SFUJMawaE14LhyNFAQ69j45EtR9kd0njMvXY9WDrBWj61TMpe6K1vl0BC-kWFz8iQqZgrRsgLNN5jbuF83nWOddYMTMZFxQXuvyPUG13LwYmOe17iPUBa03FNecKl0.-fxaqjBgRSTfoIeqegQhb9rz9lE9LJTt475JTTi0J3A&dib_tag=se&keywords=drink+carrier&qid=1719716583&sprefix=drink+carrier%2Caps%2C162&sr=8-3&linkCode=ll1&tag=radspazzyspaz-20&linkId=50dbc148d6ed4c95a175ce34d86775f8&language=en_US&ref_=as_li_ss_tl',
|
||||
slug: 'rubbermaid-8-drink-carrier',
|
||||
tags: ['drink carrier'],
|
||||
categoryId: getCategoryIdForSlug('delivery-gear')!,
|
||||
name: 'Industrial Drink Carrier',
|
||||
|
@ -32,6 +30,8 @@ all-purpose caddy is designed to keep your essentials organized and within reach
|
|||
|
||||
**Get Organized:** With its 8 rounded sections and durable design, this caddy is perfect for transporting frequently used sports drink bottles or even coffee cups. This Rubbermaid Commercial Deluxe Carry Caddy has got you covered.
|
||||
`.trim(),
|
||||
amazonProductId: 'B00006ICOT',
|
||||
amazonLink: 'https://www.amazon.com/Rubbermaid-Commercial-Deluxe-Cleaning-FG315488BLA/dp/B00006ICOT?crid=23IAS1CUMM6QG&dib=eyJ2IjoiMSJ9.WRH21whjlnubmVRL4HRNIccU9p3CC9B9pvd9LCCkzqxXQggwnV0UNwmgHs868sL9Jr_1cfUHxsHCU7sTT28EMZOCdxoGo-ylie7hWbrQ75ab9SFUJMawaE14LhyNFAQ69j45EtR9kd0njMvXY9WDrBWj61TMpe6K1vl0BC-kWFz8iQqZgrRsgLNN5jbuF83nWOddYMTMZFxQXuvyPUG13LwYmOe17iPUBa03FNecKl0.-fxaqjBgRSTfoIeqegQhb9rz9lE9LJTt475JTTi0J3A&dib_tag=se&keywords=drink+carrier&qid=1719716583&sprefix=drink+carrier%2Caps%2C162&sr=8-3&linkCode=ll1&tag=dashersupply-20&linkId=1a29425189155a3bbe240c193bd1589e&language=en_US&ref_=as_li_ss_tl',
|
||||
amazonProductDetails: {
|
||||
"title": "Rubbermaid Commercial Products Deluxe Carry Caddy for Take-Out Coffee/Soft Drinks, Postmates/Uber Eats/Food Delivery, Cleaning Products, Sports/Water Bottles, Black",
|
||||
"description": "The Rubbermaid Commercial Deluxe Carry Cleaning Caddy is an all-purpose cleaning supply caddy with 8 rounded sections ideal for carrying and storing things such as tools, cleaning supplies, spray bottles, sports drink bottles, and other drinks. This products is ideal for those looking for a tool to transport their frequently used cleaning tools throughout their household or from job to job. This caddy is also ideal for Post mates or Uber Eats drivers who frequently need to carry multiple drinks such as coffee, smoothies, or large sodas. This caddy also works well as a holder for sports drinks and bottles and is therefore ideal for gyms, sports facilities, coaches, and others needing easy access and mobility to their drink bottles.",
|
||||
|
|
|
@ -5,7 +5,7 @@ export const BRAND_STORE_SLUG = 'vortex-optics';
|
|||
|
||||
export const VortexOpticsStoreProducts: Product[] = [
|
||||
{
|
||||
slug: 'B07V3LB5DN',
|
||||
slug: 'vortex-optics-crossfire-hd-10x42-binoculars',
|
||||
name: 'Rugged Binocular HD Optical System',
|
||||
callout: 'Out in the sticks? Are you in the right place or is this a wrong turn?',
|
||||
amazonLink: 'https://www.amazon.com/dp/B07V3LB5DN?social_share=cm_sw_r_cso_cp_apin_dp_1S8QG7ATMWQXHEPZZJMA&starsLeft=1&fbclid=IwZXh0bgNhZW0CMTEAAR0r1pSlSIglwL42EFH5z3urFfzpT1EnEmxsTc589_C-QjkKpQYBl0m10wc_aem_tfAE9o8HXXadzB6BWVN-Sg&th=1&linkCode=ll1&tag=dashersupply-20&linkId=418648d02fea89d3cf2fad9645fe9f6e&language=en_US&ref_=as_li_ss_tl',
|
||||
|
@ -33,6 +33,7 @@ clarity and confidence in a variety of environments.
|
|||
|
||||
The Crossfire HD binoculars bring HD optics, rugged performance and high end form-factor. Add in the included GlassPak binocular harness for quick optic deployment in the field and superior protection and comfort. The Crossfire HD truly is a rare find.
|
||||
`.trim(),
|
||||
amazonProductId: 'B07V3LB5DN',
|
||||
amazonProductDetails: {
|
||||
"title": "Vortex Optics Crossfire HD 10x42 Binoculars - HD Optical System, Tripod Adaptable, Rubber Armor, Waterproof, Fogproof, Shockproof, Included GlassPak - Unlimited, Unconditional Warranty",
|
||||
"description": "The Crossfire HD binoculars bring HD optics, rugged performance and high end form-factor. Add in the included GlassPak binocular harness for quick optic deployment in the field and superior protection and comfort - The Crossfire HD truly is a rare find.",
|
||||
|
|
|
@ -12,6 +12,10 @@ export interface Product {
|
|||
* Name of the product.
|
||||
*/
|
||||
name: string;
|
||||
/**
|
||||
* Title of the product.
|
||||
*/
|
||||
title?: string;
|
||||
/**
|
||||
* Brand of the product.
|
||||
*/
|
||||
|
@ -24,10 +28,6 @@ export interface Product {
|
|||
* Description of the product.
|
||||
*/
|
||||
description?: string;
|
||||
// /**
|
||||
// * Amazon link for the product.
|
||||
// */
|
||||
amazonLink: string;
|
||||
/**
|
||||
* Tags associated with the product.
|
||||
*/
|
||||
|
@ -36,6 +36,14 @@ export interface Product {
|
|||
* ID of the category this product belongs to.
|
||||
*/
|
||||
categoryId: number;
|
||||
/**
|
||||
* Amazon product ID for the product.
|
||||
*/
|
||||
amazonProductId?: string;
|
||||
/**
|
||||
* Amazon link for the product.
|
||||
*/
|
||||
amazonLink?: string;
|
||||
/**
|
||||
* Product Details.
|
||||
*/
|
||||
|
|
|
@ -55,12 +55,12 @@ const brand: Brand = ALL_BRANDS.find(b => b.slug === product.brandStoreSlug)!;
|
|||
}
|
||||
{product?.amazonProductDetails?.imageUrls !== undefined &&
|
||||
product?.amazonProductDetails?.imageUrls.length > 1 &&
|
||||
<ImageCarousel images={product?.amazonProductDetails?.imageUrls.map((productUrl: string) => { return { src: productUrl }; } )||[]} />
|
||||
<ImageCarousel showDots={true} images={product?.amazonProductDetails?.imageUrls.map((productUrl: string) => { return { src: productUrl }; } )||[]} />
|
||||
}
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6 col-lg-8">
|
||||
<h5 class="card-title">
|
||||
<a href={product?.amazonLink}>{product?.amazonProductDetails?.title}</a>
|
||||
<a href={product?.amazonLink}>{product?.title || product?.amazonProductDetails?.title}</a>
|
||||
</h5>
|
||||
<p>
|
||||
<StarRating value={product?.amazonProductDetails?.reviewRating||0} max={5} overlayColor="#13151a" /> {product?.amazonProductDetails?.reviewCount} Reviews
|
||||
|
|
Loading…
Reference in New Issue
Block a user