Configuring JS layout
Fast Simon PLP uses advanced view rendering to bring the most optimized user experience. To adjust elements or logic we provide unique hooks you can use to edit the elements we generate.
Getting Started
PLP hook Flow
- Register a hook using a script tag located in the
<head>
- PLP will pickup the hook and will execute any code you write there
- Hook will run again on every life cycle update
Rules
- Registering a hook with the same event name will override the previous one and will update layout automatically.
- You can only manipulate the dom element provided by the hook.
- We only update the dom nodes that changed in each life cycle change, so make sure your code doesn't add the same elements twice (see examples)
- hook runs per item, data will contain the specific identifier
Register a new hook & execute it
<script>
function hooks() {
window.SerpOptions.registerHook('{{ customization_hook_name_1 }}', ({data, element}) => {
// logic here
});
window.SerpOptions.registerHook('{{ customization_hook_name_2 }}', ({data, element}) => {
// logic here
});
}
// execution here
if (window.SerpOptions) {
hooks();
} else {
window.addEventListener('fast-serp-ready', function () {
hooks();
});
}
</script>
Available Hooks
Event Name | Description | Hook Params | Return Params |
---|---|---|---|
"serp-product-grid" | Life cycle hook: every plp product grid update | object: {products: Products, element: HTMLElement} | void |
"serp-filters" | Life cycle hook: every plp filters update | object: {facets: Facet[], element: HTMLElement} | void |
"serp-quick-view" | Life cycle hook: every plp quick view pop up created | object: {product: Product, index: number, onClose: (reason: CloseQuickViewReason, event: [Event]) => void, mode: [Device], element: HTMLElement} | void |
"format-serp-size-variant-selector-options" | Format size selector options (display text only) | string | string |
"serp-fixed-narrow" | Life cycle hook: add a fixed narrow | void | HookNarrow |
"serp-product-swatches" | Life cycle hook: every plp product swatches update | object: {colors: [colors[]], swatchClick: [Event], showMoreClick: boolean, element: HTMLElement} | void |
"serp-removable-tags" | Life cycle hook: every plp removable tag filter update | object: {tags: [RemovableTags], element: HTMLElement} | void |
"serp-top-page" | Life cycle hook: every plp top page update | void | void |
"serp-main-block" | Life cycle hook: every plp main block update | void | void |
type references: Typescript Types
HookNarrow.ts
interface HookNarrow{
[FilterName: string]: FilterValues[]
}
type FilterValues = string