globalThis.spotler_search_templates = globalThis.spotler_search_templates || {};
globalThis.spotler_search_templates['5bb4d3a4-64f7-40bc-951a-9090e8448761'] = (function (props) {
const currencyFormatter = new Intl.NumberFormat('nl-NL', {
style: 'currency',
currency: props.spotler.getConfig('currency') || 'EUR',
});
function formatCurrency(price) {
return currencyFormatter.format(price);
}
function matchQueryInBold(str) {
if (str === undefined) {
return '';
}
const escapedSearchTerm = props.spotler.getSearchTerm().replace(/([.?*+^$[\]\\(){}|-])/g, "\\$&");
return str.replace(new RegExp(escapedSearchTerm, 'gi'), '$& ');
}
function triggerChangeView(event, view) {
event.preventDefault();
props.spotler.triggerViewChange(view);
}
function revertToPreviousSuccessfulState() {
props.spotler.revertToPreviousSuccessfulState();
}
async function SuggestView(props) {
const { items, content } = await props.spotler.fetchResults();
return `
${items.meta.total === 0 ? `
${Banners(items?.banners)}
We hebben geen resultaten gevonden
${props.spotler.hasPreviousSuccessfulState() ? `
Toon eerdere resultaten
` : ``}
` : `
${ActiveFilters(props.state.datasets['items'], items?.facets)}
${Filters(items?.facets)}
${items?.meta?.total} Producten
Sortering:
${items?.sort_fields?.map(sortField => `
${sortField.label}
`).join('')}
${items?.meta?.total} ${items?.meta?.total === 1 ? 'product' : 'producten'}
${Banners(items?.banners)}
${SpellcheckMessage(items?.spellcheck, items?.meta?.total)}
${Items(items?.data)}
`}
`;
}
function ActiveFilters(dataset, facets) {
if (!Array.isArray(dataset.filters) || dataset.filters.length === 0) {
return '';
}
const filters = [];
for (const filter of dataset.filters) {
const facet = facets.find(f => f.name === filter.field);
if (!facet) {
continue;
}
switch (facet.type) {
case 'dualslider':
filters.push({ name: facet.name, label: facet.label, value: `${renderFilterLabel(filter.start, facet.prefix, facet.suffix)} - ${renderFilterLabel(filter.end, facet.prefix, facet.suffix)}` });
break;
case 'multiselect':
filters.push({ name: facet.name, label: facet.label, value: facet.values.filter(v => filter.values.includes(v.value)).map(v => renderFilterLabel(v.label, facet.prefix, facet.suffix)).join(', ') });
break;
default:
filters.push({ name: facet.name, label: facet.label, value: renderFilterLabel(filter.value, facet.prefix, facet.suffix) });
}
}
if (filters.length === 0) {
return '';
}
function clearFilters(event, dataset) {
event.preventDefault();
props.spotler.clearAllFilters(dataset);
}
return `
Gekozen filters
${filters.map(ActiveFilter).join('')}
`;
}
function ActiveFilter(filter) {
function removeFilter(event, dataset, filterId) {
props.spotler.triggerFilterChange(dataset, filterId);
}
return `
${filter.value}
Remove badge
`;
}
function Filters(filters) {
return filters?.map(facet => {
switch (facet.type) {
case 'select':
return renderSelectFilter({ ...facet, dataset: 'items' });
case 'multiselect':
return renderMultiSelectFilter({ ...facet, dataset: 'items' });
case 'radio':
return renderRadioFilter({ ...facet, dataset: 'items' });
case 'slider':
return renderSliderFilter({ ...facet, dataset: 'items' });
case 'dualslider':
return renderDualSliderFilter({ ...facet, dataset: 'items' });
}
}).join('');
}
function SpellcheckMessage(spellcheck, total) {
if (!spellcheck) {
return '';
}
return `
Je zocht naar ${spellcheck.old} , maar wij vonden geen resultaten. Bedoel je misschien ${spellcheck.new} Hiervoor vonden we ${total} ${total === 1 ? 'resultaat' : 'resultaten'}.
`;
}
function Banners(banners) {
if (!Array.isArray(banners) || banners.length === 0) {
return '';
}
const banner = banners.pop();
const bannerTypes = Object.keys(banner);
let bannerHtml = '';
for (let i = 0, l = bannerTypes.length; i < l; i++) {
const bannerType = bannerTypes[i];
switch (bannerType) {
case 'mobile':
bannerHtml += Banner(banner, bannerType, 'sqr-block tablet:sqr-hidden');
break;
case 'tablet':
bannerHtml += Banner(banner, bannerType, 'sqr-hidden tablet:sqr-block desktop:sqr-hidden');
break;
case 'desktop':
bannerHtml += Banner(banner, bannerType, 'sqr-hidden desktop:sqr-block');
break;
}
}
return bannerHtml;
}
function Banner(banner, type, mediaClasses) {
if (!(type in banner)) {
return '';
}
if (banner[type].url) {
return `
`;
}
return `
`;
}
function Items(items) {
return items?.map(Item).join('');
}
function calculateDiscountPercentage(originalPrice, discountedPrice) {
if (originalPrice <= 0 || discountedPrice <= 0 || discountedPrice >= originalPrice) {
return null; // Handle invalid cases gracefully
}
let discountAmount = originalPrice - discountedPrice;
let discountPercentage = (discountAmount / originalPrice) * 100;
return Math.floor(discountPercentage);
}
function Item(item) {
let discountPercentage = null;
if (item.properties.double_normal_price && item.properties.double_normal_price !== item.properties.price) {
discountPercentage = calculateDiscountPercentage(item.properties.double_normal_price, item.properties.price);
}
return `
${discountPercentage ? `
${discountPercentage}%
korting
`:``}
${item.properties.attributes_usps_usp_1}
${item.properties.attributes_usps_usp_2}
${item.properties.attributes_usps_usp_3}
${item.properties.price || item.properties.double_normal_price ? `
${formatCurrency(item.properties.price)}
${item.properties.double_normal_price ? `
${formatCurrency(item.properties.double_normal_price)}
`:``}
${parseInt(item.properties.stock) >= 1 ? '
Op voorraad
' : '
Binnenkort beschikbaar
'}
`:``}
${getButton(item)}
`;
}
function getButton(item) {
if(parseInt(item.properties.stock) >= 1 ) {
return `
`
} else if (item.properties.content_type && item.properties.content_type[0] === 'content') {
return `
`
}
else {
return `
`
}
}
function renderFilter(facet, children) {
// if (facet.id === 206205 && ['bbq','barbeque','barbecue'].indexOf(props.spotler.getSearchTerm().toLowerCase()) !== -1) {
// return
// }
const filterState = props.state.datasets[facet.dataset].filterStates?.[facet.id];
const collapsed = filterState?.collapsed ?? facet.is_default_collapsed;
function collapse(e, dataset, filterId) {
e.preventDefault();
const element = e.currentTarget;
const filterState = props.state.datasets[dataset].filterStates?.[filterId];
const active = element.classList.contains('sqr-active');
element.classList.toggle('sqr-active', !active);
element.nextElementSibling.classList.toggle('sqr-hidden', active);
filterState.collapsed = active;
}
return `
${facet.label}
${children}
`;
}
function renderSelectFilter(facet) {
return renderFilter(facet, `
Choose
${facet.values.map((filterValue) => `
${renderFilterLabel(filterValue.label, facet.prefix, facet.suffix)} (${filterValue.count})
`).join("")}
`);
}
function showMore(e, dataset, filterId) {
e.preventDefault();
const element = e.currentTarget;
const parentElement = element.closest('[data-sqr-filter]');
const filterState = props.state.datasets[dataset].filterStates?.[filterId];
filterState.showing_more = !filterState.showing_more;
element.textContent = filterState.showing_more ? 'Bekijk minder' : 'Bekijk meer';
parentElement.dataset.sqrFilterShowingMore = filterState.showing_more;
parentElement.querySelectorAll('[data-initially-hidden]').forEach(element => {
element.classList.toggle('sqr-hidden', !filterState.showing_more);
});
}
function renderMultiSelectFilter(facet) {
const hasMoreValues = facet.values.length > facet.result_limit;
const filterState = props.state.datasets[facet.dataset].filterStates?.[facet.id];
const showingMore = filterState.showing_more ?? false;
const excludeFilters = ["Angus & Oink","Bad Byron’s","Barebones","BBQ","Benegas","Biolite","Bison","Blues Hog","BonFeu","Bowls and Dishes","Butler","Don Marco’s","Excellent Housewar","Feuerhand","Fire & Smoke Society","Fire up","Forged","Goeie Dingen","Grill Fanatics","Heath Riles","Hit","Homey’s","Intco","Jack Daniels","Jealous Devil","Killer Hogs","Koopman","Kosmo’s","Laguiole","Laguiole,Premium Line","Loods Roden","Loot n’ Booty BBQ","Louisiana Grills","Luxury Line","Madame Jeanette Hote Sauce","Madison","Meat Church","Meater","Nachtmann","NomadiQ","Noskos","Noviplast","Outlaw BBQ","Petromax","Pitmaster X","Premium Line","Rijngas","Rock’n’Rubs","Ronneby","Rub Some","Saus.Guru","SenS-Line","Skulls","Smokey Goodness","Smokey Olive Wood","Smokin’ Flavours","Special Shit Big Cock Ranch","Style de vie","Sucklebusters","Sunware","The Spit on Fire","Three Little Pigs","Vaggan","Victorinox","Zeeuwsche Zoute","Smokin' Flavours","Don Marco's","Rock'n' Rubs","Style de Vie","Kosmo’s Q","Bad Byron's","Madame Jeanette Hot Sauce","Homey's","Fire Up","Omnia"];
const searchTerm = props.spotler.getSearchTerm().toLowerCase();
const isExcludedTerm = ['bbq', 'barbeque', 'barbecue'].some(term => searchTerm.includes(term));
return renderFilter(facet, `
${facet.label !== "Kleur" ?
facet.values.map((filterValue, index) => `
${facet.id === 206205 && isExcludedTerm && excludeFilters.some(filter => filterValue.label.includes(filter)) ? `` :`
= facet.result_limit ? 'data-initially-hidden' : ''} class="sqr-flex sqr-items-center ${(!showingMore && index >= facet.result_limit) ? 'sqr-hidden' : ''}">
${renderFilterLabel(filterValue.label, facet.prefix, facet.suffix)}
`}
`).join("")
:
facet.values.map((filterValue, index) => `
= facet.result_limit ? 'data-initially-hidden' : ''} class="sqr-flex sqr-items-center ${(!showingMore && index >= facet.result_limit) ? 'sqr-hidden' : ''}">
${renderFilterLabel(filterValue.label, facet.prefix, facet.suffix)}
`).join("")
}
${hasMoreValues ? `
${showingMore ? 'Bekijk minder' : 'Bekijk meer'}
` : ''}
`);
}
function renderRadioFilter(facet) {
const hasMoreValues = facet.values.length > facet.result_limit;
const filterState = props.state.datasets[facet.dataset].filterStates?.[facet.id];
const showingMore = filterState.showing_more ?? false;
return renderFilter(facet, `
${facet.values.map((filterValue) => `
${renderFilterLabel(filterValue.label, facet.prefix, facet.suffix)}
${filterValue.count}
`).join("")}
${hasMoreValues ? `
${showingMore ? 'Bekijk minder' : 'Bekijk meer'}
` : ''}
`);
}
function renderSliderFilter(facet) {
return renderFilter(facet, `
`);
}
function renderDualSliderFilter(facet) {
const filterState = props.state.datasets[facet.dataset].filters?.[facet.id];
return renderFilter(facet, `
`);
}
function renderFilterLabel(label, prefix, suffix) {
const colors = {
Beige: "#e8dcca",
Antraciet: "#383e42",
Blauw: "#6891E8",
Bruin: "#674630",
Donkerblauw: "#00008B",
Donkergroen: "#013220",
Geel: "#EADDCA",
Grijs: "#959595",
Groen: "#689f69",
Lichtblauw: "#add8e6",
Oranje: "#ffa500",
Paars: "#800080",
Rood: "#ff0000",
Roze: "#ffc0cb",
Wit: "#ffffff",
Zilver: "#c0c0c0",
Zwart: "#000000",
Creme: "#f5f5dc",
Bordeaux: "#800020",
Goud: "#ffd700",
Grafietzwart: "#1c1c1c",
Khaki: "#f0e68c",
Lichtbruin: "#a67b5b",
Lichtgrijs: "#d3d3d3",
Lichtgroen: "#90ee90",
Lichtroze: "#ffb6c1",
Mediumblauw: "#0000cd",
Taupe: "#483c32",
Turquoise: "#40e0d0",
"Diverse kleuren": "#ffffff",
Donkerbruin: "#654321",
Doorzichtig: "#ffffff",
Multicolour: "#ffffff",
Transparant: "#ffffff",
Brons: "#774f2e"
};
function getColorValue(colorName) {
if (colors.hasOwnProperty(colorName)) {
return `
`;
}
return label;
}
return `${prefix ?? ''} ${getColorValue(label)} ${suffix ?? ''}`.trim();
}
if (props.state.view === 'items') {
return ItemsView(props);
}
return SuggestView(props);
});