var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
  if (kind === "a" && !f)
    throw new TypeError("Private accessor was defined without a getter");
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
    throw new TypeError("Cannot read private member from an object whose class did not declare it");
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
  if (kind === "m")
    throw new TypeError("Private method is not writable");
  if (kind === "a" && !f)
    throw new TypeError("Private accessor was defined without a setter");
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
    throw new TypeError("Cannot write private member to an object whose class did not declare it");
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
};
var _KlevuSearchLandingPage_instances, _KlevuSearchLandingPage_resultObject, _KlevuSearchLandingPage_clickEvent, _KlevuSearchLandingPage_viewportUtil, _KlevuSearchLandingPage_layoutElement, _KlevuSearchLandingPage_initialFetch, _KlevuSearchLandingPage_internalRenderProductSlot, _KlevuSearchLandingPage_sizeChange, _KlevuSearchLandingPage_sortChanged, _KlevuSearchLandingPage_applyFilters;
import { applyFilterWithManager, FilterManager, KlevuFetch, listFilters, search, sendSearchEvent, } from "@klevu/core";
import { h, Host } from "@stencil/core";
import { parts } from "../../utils/parts";
import { globalExportedParts } from "../../utils/utils";
import { KlevuInit } from "../klevu-init/klevu-init";
/**
 * Full app component for search landing page
 */
export class KlevuSearchLandingPage {
  constructor() {
    _KlevuSearchLandingPage_instances.add(this);
    _KlevuSearchLandingPage_resultObject.set(this, void 0);
    _KlevuSearchLandingPage_clickEvent.set(this, void 0);
    _KlevuSearchLandingPage_viewportUtil.set(this, void 0);
    _KlevuSearchLandingPage_layoutElement.set(this, void 0);
    this.limit = 24;
    this.term = undefined;
    this.sort = undefined;
    this.filterCount = undefined;
    this.filterCustomOrder = undefined;
    this.usePagination = undefined;
    this.results = [
      undefined,
      undefined,
      undefined,
      undefined,
      undefined,
      undefined,
      undefined,
      undefined,
      undefined,
    ];
    this.manager = new FilterManager();
    this.currentViewPortSize = undefined;
    this.renderProductSlot = undefined;
  }
  async connectedCallback() {
    await KlevuInit.ready();
    await __classPrivateFieldGet(this, _KlevuSearchLandingPage_instances, "m", _KlevuSearchLandingPage_initialFetch).call(this);
  }
  termChanged(oldValue, newValue) {
    __classPrivateFieldGet(this, _KlevuSearchLandingPage_instances, "m", _KlevuSearchLandingPage_initialFetch).call(this);
  }
  async loadMore() {
    var _a, _b, _c, _d, _e;
    if (!((_a = __classPrivateFieldGet(this, _KlevuSearchLandingPage_resultObject, "f")) === null || _a === void 0 ? void 0 : _a.next)) {
      return;
    }
    const nextResultObject = await __classPrivateFieldGet(this, _KlevuSearchLandingPage_resultObject, "f").next();
    __classPrivateFieldSet(this, _KlevuSearchLandingPage_resultObject, nextResultObject.queriesById("search"), "f");
    this.results = [...this.results, ...((_c = (_b = __classPrivateFieldGet(this, _KlevuSearchLandingPage_resultObject, "f")) === null || _b === void 0 ? void 0 : _b.records) !== null && _c !== void 0 ? _c : [])];
    __classPrivateFieldSet(this, _KlevuSearchLandingPage_clickEvent, (_e = (_d = __classPrivateFieldGet(this, _KlevuSearchLandingPage_resultObject, "f")).getSearchClickSendEvent) === null || _e === void 0 ? void 0 : _e.call(_d), "f");
  }
  async paginationChange(event) {
    var _a, _b, _c, _d, _e;
    if (!((_a = __classPrivateFieldGet(this, _KlevuSearchLandingPage_resultObject, "f")) === null || _a === void 0 ? void 0 : _a.getPage)) {
      return;
    }
    const nextResultObject = await __classPrivateFieldGet(this, _KlevuSearchLandingPage_resultObject, "f").getPage({ pageIndex: event.detail - 1 });
    __classPrivateFieldSet(this, _KlevuSearchLandingPage_resultObject, nextResultObject.queriesById("search"), "f");
    this.results = (_c = (_b = __classPrivateFieldGet(this, _KlevuSearchLandingPage_resultObject, "f")) === null || _b === void 0 ? void 0 : _b.records) !== null && _c !== void 0 ? _c : [];
    __classPrivateFieldSet(this, _KlevuSearchLandingPage_clickEvent, (_e = (_d = __classPrivateFieldGet(this, _KlevuSearchLandingPage_resultObject, "f")) === null || _d === void 0 ? void 0 : _d.getSearchClickSendEvent) === null || _e === void 0 ? void 0 : _e.call(_d), "f");
  }
  productClickHandler(event) {
    if (__classPrivateFieldGet(this, _KlevuSearchLandingPage_clickEvent, "f") && event.detail.product.id) {
      __classPrivateFieldGet(this, _KlevuSearchLandingPage_clickEvent, "f").call(this, event.detail.product.id, event.detail.product.itemGroupId || event.detail.product.id);
    }
  }
  filterSelectionUpdate() {
    __classPrivateFieldGet(this, _KlevuSearchLandingPage_instances, "m", _KlevuSearchLandingPage_initialFetch).call(this);
  }
  async componentDidLoad() {
    this.currentViewPortSize = await __classPrivateFieldGet(this, _KlevuSearchLandingPage_viewportUtil, "f").getCurrentSize();
  }
  render() {
    var _a, _b, _c, _d;
    const isMobile = ((_a = this.currentViewPortSize) === null || _a === void 0 ? void 0 : _a.name) === "xs" || ((_b = this.currentViewPortSize) === null || _b === void 0 ? void 0 : _b.name) === "sm";
    return (h(Host, null, h("klevu-util-viewport", { onSizeChanged: __classPrivateFieldGet(this, _KlevuSearchLandingPage_instances, "m", _KlevuSearchLandingPage_sizeChange).bind(this), ref: (el) => (__classPrivateFieldSet(this, _KlevuSearchLandingPage_viewportUtil, el, "f")) }), h("klevu-layout-results", { exportparts: globalExportedParts, ref: (el) => (__classPrivateFieldSet(this, _KlevuSearchLandingPage_layoutElement, el, "f")) }, h("klevu-facet-list", { slot: "sidebar", customOrder: this.filterCustomOrder, exportparts: globalExportedParts, manager: this.manager, useApplyButton: isMobile, onKlevuApplyFilters: __classPrivateFieldGet(this, _KlevuSearchLandingPage_instances, "m", _KlevuSearchLandingPage_applyFilters).bind(this) }), h("div", { slot: "header", class: "header" }, h("klevu-typography", { slot: "header", variant: "h1" }, "Searching term \"", this.term, "\""), h("klevu-sort", { variant: "inline", exportparts: globalExportedParts, onKlevuSortChanged: __classPrivateFieldGet(this, _KlevuSearchLandingPage_instances, "m", _KlevuSearchLandingPage_sortChanged).bind(this) })), h("klevu-product-grid", { slot: "content" }, (_c = this.results) === null || _c === void 0 ? void 0 : _c.map((p) => (h("klevu-product", { product: p, fixedWidth: true, exportparts: parts["klevu-product"] }, __classPrivateFieldGet(this, _KlevuSearchLandingPage_instances, "m", _KlevuSearchLandingPage_internalRenderProductSlot).call(this, p, "top"), __classPrivateFieldGet(this, _KlevuSearchLandingPage_instances, "m", _KlevuSearchLandingPage_internalRenderProductSlot).call(this, p, "image"), __classPrivateFieldGet(this, _KlevuSearchLandingPage_instances, "m", _KlevuSearchLandingPage_internalRenderProductSlot).call(this, p, "info"), __classPrivateFieldGet(this, _KlevuSearchLandingPage_instances, "m", _KlevuSearchLandingPage_internalRenderProductSlot).call(this, p, "bottom"))))), h("div", { slot: "footer", class: "footer" }, this.usePagination && __classPrivateFieldGet(this, _KlevuSearchLandingPage_resultObject, "f") ? (h("klevu-pagination", { queryResult: __classPrivateFieldGet(this, _KlevuSearchLandingPage_resultObject, "f"), onKlevuPaginationChange: this.paginationChange.bind(this) })) : ((_d = __classPrivateFieldGet(this, _KlevuSearchLandingPage_resultObject, "f")) === null || _d === void 0 ? void 0 : _d.next) ? (h("klevu-button", { onClick: this.loadMore.bind(this) }, "Load more")) : null))));
  }
  static get is() { return "klevu-search-landing-page"; }
  static get encapsulation() { return "shadow"; }
  static get originalStyleUrls() {
    return {
      "$": ["klevu-search-landing-page.css"]
    };
  }
  static get styleUrls() {
    return {
      "$": ["klevu-search-landing-page.css"]
    };
  }
  static get properties() {
    return {
      "limit": {
        "type": "number",
        "mutable": false,
        "complexType": {
          "original": "number",
          "resolved": "number",
          "references": {}
        },
        "required": false,
        "optional": false,
        "docs": {
          "tags": [],
          "text": "How many results to display on a page"
        },
        "attribute": "limit",
        "reflect": false,
        "defaultValue": "24"
      },
      "term": {
        "type": "string",
        "mutable": false,
        "complexType": {
          "original": "string",
          "resolved": "string",
          "references": {}
        },
        "required": true,
        "optional": false,
        "docs": {
          "tags": [],
          "text": "What term was used for search"
        },
        "attribute": "term",
        "reflect": false
      },
      "sort": {
        "type": "string",
        "mutable": false,
        "complexType": {
          "original": "KlevuSearchSorting",
          "resolved": "KlevuSearchSorting.AdvancedSorting | KlevuSearchSorting.NameAsc | KlevuSearchSorting.NameDesc | KlevuSearchSorting.NewArrivalAsc | KlevuSearchSorting.NewArrivalDesc | KlevuSearchSorting.PriceAsc | KlevuSearchSorting.PriceDesc | KlevuSearchSorting.RatingAsc | KlevuSearchSorting.RatingDesc | KlevuSearchSorting.Relevance | undefined",
          "references": {
            "KlevuSearchSorting": {
              "location": "import",
              "path": "@klevu/core"
            }
          }
        },
        "required": false,
        "optional": true,
        "docs": {
          "tags": [],
          "text": "In which order to set the products"
        },
        "attribute": "sort",
        "reflect": false
      },
      "filterCount": {
        "type": "number",
        "mutable": false,
        "complexType": {
          "original": "number",
          "resolved": "number | undefined",
          "references": {}
        },
        "required": false,
        "optional": true,
        "docs": {
          "tags": [],
          "text": "How many products to display in filters"
        },
        "attribute": "filter-count",
        "reflect": false
      },
      "filterCustomOrder": {
        "type": "unknown",
        "mutable": false,
        "complexType": {
          "original": "{ [key: string]: string[] }",
          "resolved": "undefined | { [key: string]: string[]; }",
          "references": {}
        },
        "required": false,
        "optional": true,
        "docs": {
          "tags": [],
          "text": "Order filters in a customer order"
        }
      },
      "usePagination": {
        "type": "boolean",
        "mutable": false,
        "complexType": {
          "original": "boolean",
          "resolved": "boolean | undefined",
          "references": {}
        },
        "required": false,
        "optional": true,
        "docs": {
          "tags": [],
          "text": "Use pagination instead of loading more"
        },
        "attribute": "use-pagination",
        "reflect": false
      },
      "renderProductSlot": {
        "type": "unknown",
        "mutable": false,
        "complexType": {
          "original": "(product: KlevuRecord, productSlot: KlevuProductSlots) => HTMLElement | string | null",
          "resolved": "((product: KlevuRecord, productSlot: KlevuProductSlots) => string | HTMLElement | null) | undefined",
          "references": {
            "KlevuRecord": {
              "location": "import",
              "path": "@klevu/core"
            },
            "KlevuProductSlots": {
              "location": "import",
              "path": "../klevu-product/klevu-product"
            },
            "HTMLElement": {
              "location": "global"
            }
          }
        },
        "required": false,
        "optional": true,
        "docs": {
          "tags": [],
          "text": "Rendering function created to put custom content to klevu-product slots. Provides a product being rendered.\nThis function is called for each slot (top, image, info and bottom) of the component. Second parameter provides\nslot requested. Return null for slots that you do not want to render."
        }
      }
    };
  }
  static get states() {
    return {
      "results": {},
      "manager": {},
      "currentViewPortSize": {}
    };
  }
  static get watchers() {
    return [{
        "propName": "term",
        "methodName": "termChanged"
      }];
  }
  static get listeners() {
    return [{
        "name": "productClick",
        "method": "productClickHandler",
        "target": undefined,
        "capture": false,
        "passive": false
      }, {
        "name": "klevu-filter-selection-updates",
        "method": "filterSelectionUpdate",
        "target": "document",
        "capture": false,
        "passive": false
      }];
  }
}
_KlevuSearchLandingPage_resultObject = new WeakMap(), _KlevuSearchLandingPage_clickEvent = new WeakMap(), _KlevuSearchLandingPage_viewportUtil = new WeakMap(), _KlevuSearchLandingPage_layoutElement = new WeakMap(), _KlevuSearchLandingPage_instances = new WeakSet(), _KlevuSearchLandingPage_initialFetch = async function _KlevuSearchLandingPage_initialFetch() {
  var _a, _b, _c, _d;
  const result = await KlevuFetch(search(this.term, { limit: this.limit, sort: this.sort }, sendSearchEvent(), listFilters({
    filterManager: this.manager,
    limit: this.filterCount,
    rangeFilterSettings: [
      {
        key: "klevu_price",
        minMax: true,
      },
    ],
  }), applyFilterWithManager(this.manager)));
  __classPrivateFieldSet(this, _KlevuSearchLandingPage_resultObject, result.queriesById("search"), "f");
  this.results = (_b = (_a = __classPrivateFieldGet(this, _KlevuSearchLandingPage_resultObject, "f")) === null || _a === void 0 ? void 0 : _a.records) !== null && _b !== void 0 ? _b : [];
  __classPrivateFieldSet(this, _KlevuSearchLandingPage_clickEvent, (_d = (_c = __classPrivateFieldGet(this, _KlevuSearchLandingPage_resultObject, "f")) === null || _c === void 0 ? void 0 : _c.getSearchClickSendEvent) === null || _d === void 0 ? void 0 : _d.call(_c), "f");
}, _KlevuSearchLandingPage_internalRenderProductSlot = function _KlevuSearchLandingPage_internalRenderProductSlot(product, slot) {
  if (!this.renderProductSlot || !product) {
    return null;
  }
  const content = this.renderProductSlot(product, slot);
  if (content === null) {
    return null;
  }
  if (typeof content === "string") {
    return h("div", { slot: slot, innerHTML: content });
  }
  return (h("div", { slot: slot, ref: (el) => {
      if (!el) {
        return;
      }
      el.innerHTML = "";
      el.appendChild(content);
    } }));
}, _KlevuSearchLandingPage_sizeChange = function _KlevuSearchLandingPage_sizeChange(event) {
  this.currentViewPortSize = event.detail;
}, _KlevuSearchLandingPage_sortChanged = async function _KlevuSearchLandingPage_sortChanged(event) {
  this.sort = event.detail;
  await __classPrivateFieldGet(this, _KlevuSearchLandingPage_instances, "m", _KlevuSearchLandingPage_initialFetch).call(this);
}, _KlevuSearchLandingPage_applyFilters = function _KlevuSearchLandingPage_applyFilters() {
  __classPrivateFieldGet(this, _KlevuSearchLandingPage_instances, "m", _KlevuSearchLandingPage_initialFetch).call(this);
  __classPrivateFieldGet(this, _KlevuSearchLandingPage_layoutElement, "f").closeDrawer();
};
//# sourceMappingURL=klevu-search-landing-page.js.map
