UNPKG

instantsearch.js

Version:

InstantSearch.js is a JavaScript library for building performant and instant search experiences with Algolia.

83 lines (63 loc) 2.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _preact = require("preact"); var _index = require("../utils/index.js"); var _insights = require("../../helpers/insights.js"); /** @jsx h */ var findInsightsTarget = function findInsightsTarget(startElement, endElement, validator) { var element = startElement; while (element && !validator(element)) { if (element === endElement) { return null; } element = element.parentElement; } return element; }; var parseInsightsEvent = function parseInsightsEvent(element) { var serializedPayload = element.getAttribute('data-insights-event'); if (typeof serializedPayload !== 'string') { throw new Error('The insights middleware expects `data-insights-event` to be a base64-encoded JSON string.'); } try { return (0, _index.deserializePayload)(serializedPayload); } catch (error) { throw new Error('The insights middleware was unable to parse `data-insights-event`.'); } }; var insightsListener = function insightsListener(BaseComponent) { function WithInsightsListener(props) { var handleClick = function handleClick(event) { if (props.sendEvent) { // new way with insights middleware var targetWithEvent = findInsightsTarget(event.target, event.currentTarget, function (element) { return element.hasAttribute('data-insights-event'); }); if (targetWithEvent) { var payload = parseInsightsEvent(targetWithEvent); payload.forEach(function (single) { return props.sendEvent(single); }); } } // old way, e.g. instantsearch.insights("clickedObjectIDsAfterSearch", { .. }) var insightsTarget = findInsightsTarget(event.target, event.currentTarget, function (element) { return (0, _insights.hasDataAttributes)(element); }); if (insightsTarget) { var _readDataAttributes = (0, _insights.readDataAttributes)(insightsTarget), method = _readDataAttributes.method, _payload = _readDataAttributes.payload; props.insights(method, _payload); } }; return (0, _preact.h)("div", { onClick: handleClick }, (0, _preact.h)(BaseComponent, props)); } return WithInsightsListener; }; var _default = insightsListener; exports.default = _default;