globalThis.spotler_search_templates = globalThis.spotler_search_templates || {}; globalThis.spotler_search_templates['4a586502-7a90-41ea-8d36-8d2983a4a3e4'] = (function (props) { const currencyFormatter = new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR', }); function formatCurrency(price) { return currencyFormatter.format(price); } function matchQueryInBold(str) { if (str === undefined) { return ''; } if (Array.isArray(str)) { str = str.join('') } const escapedQuery = props.spotler.getSearchTerm().replace(/([.?*+^$[\]\\(){}|-])/g, "\\$&"); return str.replace(new RegExp(escapedQuery, 'gi'), '$&'); } function triggerChangeView(event, view) { event.preventDefault(); props.spotler.triggerViewChange(view); } function revertToPreviousSuccessfulState() { props.spotler.revertToPreviousSuccessfulState(); } async function SooqrSuggestView(props) { const { products, content } = await props.spotler.fetchResults(); return `
Zoeksuggesties
Makita accu
Makita accuboormachine
Makita bithouder
Productsuggesties
${products.data?.map(product => `
${matchQueryInBold(product.properties.title)} ${product.properties.singlestring_ExtraData_Promotionalproductname}
★★★★☆53 reviews
€299
${formatCurrency(product.properties.price)}
`).join("")}
Meer informatie
${content.data?.map(content => `
${matchQueryInBold(content.properties.title)}
`).join('')}
`; } async function SooqrProductsView(props) { const { products } = await props.spotler.fetchResults(); props.state.datasets['products'].filterStates = products.facets.reduce((obj, f) => { obj[f.id] = { collapsed: f.is_default_collapsed, ...obj[f.id] }; return obj; }, props.state.datasets['products'].filterStates ?? {}); if (products.meta.total > (products.meta.offset + products.meta.limit)) { props.spotler.registerInfiniteScroll('products', '[data-sqr-infinite-scroll-item]:last-child', ({ products }) => Products(products.data)); } return `
${products.meta.total === 0 ? `
${Banner(products?.banners)}

Es tut uns leid...

Deine Anfrage "${props.spotler.getSearchTerm()}" hat keine Ergebnisse geliefert.

${props.spotler.hasPreviousSuccessfulState() ? `

` : ``}
` : `

${products.meta.total} ${products.meta.total === 1 ? ' Ergebnis' : ' Ergebnisse'}

${products?.meta?.total}${products.meta.total === 1 ? 'Ergebnis' : ' Ergebnisse'}

Filter zurücksetzen

Ergebnisse eingrenzen

${ActiveFilters(props.state.datasets['products'], products?.facets)} ${Filters(products?.facets)}

${products.meta.total} ${products.meta.total === 1 ? ' Ergebnis' : ' Ergebnisse'}

${Banner(products?.banners)}
${SpellcheckMessage(products?.spellcheck, products?.meta?.total)}
${Products(products?.data)}
`}
`; } function ActiveFilters(dataset, facets) { if (!dataset.filters || Object.keys(dataset.filters).length === 0) { return ''; } const filters = []; for (const [key, value] of Object.entries(dataset.filters)) { const facet = facets.find(f => Number(f.id) === Number(key)); if (!facet) { continue; } switch (facet.type) { case 'dualslider': filters.push({ id: key, label: facet.label, value: `${renderFilterLabel(value.start, facet.prefix, facet.suffix)} - ${renderFilterLabel(value.end, facet.prefix, facet.suffix)}` }); break; case 'multiselect': filters.push({ id: key, label: facet.label, value: facet.values.filter(v => value.includes(v.value)).map(v => renderFilterLabel(v.label, facet.prefix, facet.suffix)).join(', ') }); break; default: filters.push({ id: key, label: facet.label, value: renderFilterLabel(value, facet.prefix, facet.suffix) }); } } if (filters.length === 0) { return ''; } function clearFilters(event, dataset) { event.preventDefault(); props.spotler.clearAllFilters(dataset); } return `

Selected filters

${filters.map(ActiveFilter).join('')}
`; } function ActiveFilter(filter) { function removeFilter(event, dataset, filterId) { props.spotler.triggerFilterChange(dataset, filterId); } return ` ${filter.label}: ${filter.value} `; } function Filters(filters) { return filters?.map(facet => { switch (facet.type) { case 'select': return renderSelectFilter({ ...facet, dataset: 'products' }); case 'multiselect': return renderMultiSelectFilter({ ...facet, dataset: 'products' }); case 'radio': return renderRadioFilter({ ...facet, dataset: 'products' }); case 'slider': return renderSliderFilter({ ...facet, dataset: 'products' }); case 'dualslider': return renderDualSliderFilter({ ...facet, dataset: 'products' }); } }).join(''); } function SpellcheckMessage(spellcheck, total) { if (!spellcheck) { return ''; } return `
Du hast nach oben geschaut ${spellcheck.old}, aber wir haben keine Ergebnisse gefunden. Du hast nach oben geschaut ${spellcheck.new}, wir dachten ${total} Ergebnisse.
`; } function Banner(banners) { if (!Array.isArray(banners) || banners.length === 0) { return ''; } const banner = banners.pop(); if (banner.desktop.url) { return ` `; } return ``; } function Products(products) { return products?.map(Product).join(''); } function Product(product) { return `
${product.properties.price < product.properties.double_normal_price ? ` ${formatCurrency(product.properties.double_normal_price)} ` : ''} ${formatCurrency(product.properties.price)}
`; } function renderFilter(facet, children) { 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.nextElementSibling.classList.contains('sqr-active'); element.nextElementSibling.classList.toggle('sqr-active', !active); element.nextElementSibling.classList.toggle('sqr-hidden', active); filterState.collapsed = active; } //
return `
${children}
`; } function renderSelectFilter(facet) { return renderFilter(facet, `
`); } 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.innerHTML = filterState.showing_more ? 'Zusätzliche Optionen ausblenden' : 'Weitere Optionen anzeigen'; parentElement.querySelectorAll('[data-initially-hidden]').forEach(element => { element.classList.toggle('sqr-hidden', !filterState.showing_more); element.classList.toggle('searchFilterField', filterState.showing_more); element.classList.toggle('searchFilterFieldMultiselect', 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; return renderFilter(facet, ` ${facet.values.map((filterValue, index) => `
= facet.result_limit ? 'data-initially-hidden' : ''} class="${(!showingMore && index >= facet.result_limit) ? 'sqr-hidden' : 'searchFilterField searchFilterFieldMultiselect'}"> ${filterValue.count}
`).join("")} ${hasMoreValues ? `
${showingMore ? 'Zusätzliche Optionen ausblenden' : 'Weitere Optionen anzeigen'}
` : ''} `); } 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) => `
${filterValue.count}
`).join("")} ${hasMoreValues ? ` ` : ''}
`); } function renderSliderFilter(facet) { return renderFilter(facet, `
`); } function renderDualSliderFilter(facet) { return renderFilter(facet, `
${facet.use_input ? `
` : `
${facet.prefix ?? ''} ${facet.min} ${facet.suffix ?? ''}
${facet.prefix ?? ''} ${facet.max} ${facet.suffix ?? ''}
`}
`); } function renderFilterLabel(label, prefix, suffix) { return `${prefix ?? ''} ${label} ${suffix ?? ''}`.trim(); } if (props.state.view === 'products') { return SooqrProductsView(props); } return SooqrSuggestView(props); });