@sledge-app/react-instant-search 1.0.80 → 1.0.81

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4397,7 +4397,7 @@ const createQueryFilter = ({ facets, facetsQueryStringObject, callback, addition
4397
4397
  if (!((detectClickedFacet == null ? void 0 : detectClickedFacet.length) && detectClickedFacet[1].length))
4398
4398
  continue;
4399
4399
  let isCustom = ["variants.inventory_quantity"].includes(detectClickedFacet[0]);
4400
- let isRange = ["variants.price"].includes(detectClickedFacet[0]);
4400
+ let isRange = ["variants.price", "variants.sale_percent"].includes(detectClickedFacet[0]);
4401
4401
  let isHierarchical = hierarchicalFacetAliases.includes(detectClickedFacet[0]);
4402
4402
  if (isHierarchical) {
4403
4403
  let arrItemHierarchicals = [];
@@ -4511,7 +4511,7 @@ const handleConditionNotUpdateFacetDistribution = ({ value, clickedFacets }) =>
4511
4511
  let isHasFacetSelected = arrFacetSelected == null ? void 0 : arrFacetSelected.length;
4512
4512
  let isNoneFacetSelected = !isHasFacetSelected;
4513
4513
  let isOnFacetSelectedOne = isHasFacetSelected && arrFacetSelected.includes(value) && isHasFacetSelected === 1;
4514
- let isSelectedFacetWithPrice = arrFacetSelected.includes("variants.price");
4514
+ let isSelectedFacetWithPrice = arrFacetSelected.includes("variants.price") || arrFacetSelected.includes("variants.sale_percent");
4515
4515
  let isPriorityFacet = isHasFacetSelected && !isOnFacetSelectedOne && arrPriorityFacet.includes(value) && !isSelectedFacetWithPrice;
4516
4516
  return isNoneFacetSelected || isOnFacetSelectedOne || isPriorityFacet;
4517
4517
  };
@@ -4528,6 +4528,8 @@ const FacetComponent = (props) => {
4528
4528
  defaultFacetStats,
4529
4529
  valueFilterPriceChange,
4530
4530
  setValueFilterPriceChange,
4531
+ valueFilterOnSaleChange,
4532
+ setValueFilterOnSaleChange,
4531
4533
  separatedFilterItem,
4532
4534
  setSeparatedFilterItem,
4533
4535
  settings,
@@ -4556,34 +4558,46 @@ const FacetComponent = (props) => {
4556
4558
  ...filter_option_font_weight && { fontWeight: filter_option_font_weight },
4557
4559
  ...filter_option_text_transform && { textTransform: filter_option_text_transform }
4558
4560
  };
4559
- let { value, label, display, items } = filter;
4561
+ let { value, label, display, indexFilter, items, settings: filterSettings } = filter;
4562
+ const { prefix, filter_list, delete_prefix, selected_filter } = filterSettings || {};
4560
4563
  if (isFirstLoading)
4561
4564
  return null;
4562
4565
  let blockComponent = null;
4563
4566
  const isShowNumberMatchingProduct = (_b = displaySettings == null ? void 0 : displaySettings.filter) == null ? void 0 : _b.show_number_matching_product;
4564
4567
  const isHideFacetWhenZeroValue = (_c = displaySettings == null ? void 0 : displaySettings.filter) == null ? void 0 : _c.hide_when_zero_value;
4565
4568
  const isDisplaySlider = display.toLowerCase() === "slider";
4569
+ const getValue = `${value}-${indexFilter}`;
4566
4570
  const handleFacetValues = (items2) => {
4567
4571
  var _a2;
4568
4572
  let facetValues = [];
4569
4573
  if (!(items2 == null ? void 0 : items2.length))
4570
4574
  return facetValues;
4571
4575
  for (const item of items2) {
4572
- if (!item)
4576
+ const isManualFilter = item && filter_list === "manual" && !(selected_filter == null ? void 0 : selected_filter.includes(item == null ? void 0 : item.value));
4577
+ const isPrefixFilter = item && filter_list === "prefix" && !(prefix == null ? void 0 : prefix.find((prefixItem) => {
4578
+ var _a3;
4579
+ return (_a3 = item == null ? void 0 : item.value) == null ? void 0 : _a3.startsWith(prefixItem);
4580
+ }));
4581
+ if (!item || isManualFilter || isPrefixFilter)
4573
4582
  continue;
4574
4583
  const isFacetHierarchical = Object.hasOwn(item, "children");
4575
4584
  let labelName = item.name;
4576
- let getValue = isFacetHierarchical ? `${value}.lvl${item.level}` : value;
4585
+ let getValue2 = isFacetHierarchical ? `${value}.lvl${item.level}` : value;
4577
4586
  if (languageSettings && (languageSettings[item.value] || languageSettings[item.name]))
4578
4587
  labelName = languageSettings[item.value] || languageSettings[item.name];
4579
4588
  let counter = handleConditionNotUpdateFacetDistribution({
4580
- value: getValue,
4589
+ value: getValue2,
4581
4590
  clickedFacets
4582
- }) ? (item == null ? void 0 : item.total) || 0 : (searchFacetDistribution == null ? void 0 : searchFacetDistribution[getValue]) && ((_a2 = searchFacetDistribution == null ? void 0 : searchFacetDistribution[getValue]) == null ? void 0 : _a2[item.value]) ? searchFacetDistribution[getValue][item.value] : 0;
4591
+ }) ? (item == null ? void 0 : item.total) || 0 : (searchFacetDistribution == null ? void 0 : searchFacetDistribution[getValue2]) && ((_a2 = searchFacetDistribution == null ? void 0 : searchFacetDistribution[getValue2]) == null ? void 0 : _a2[item.value]) ? searchFacetDistribution[getValue2][item.value] : 0;
4592
+ let getLabelName = aliases[labelName] || labelName;
4593
+ delete_prefix == null ? void 0 : delete_prefix.map((deletePrefix) => {
4594
+ if (String(getLabelName).startsWith(deletePrefix))
4595
+ getLabelName = String(getLabelName).replace(deletePrefix, "");
4596
+ });
4583
4597
  if (!(isHideFacetWhenZeroValue && !counter))
4584
4598
  facetValues.push({
4585
4599
  ...item,
4586
- labelName: aliases[labelName] || labelName,
4600
+ labelName: getLabelName,
4587
4601
  counter
4588
4602
  });
4589
4603
  }
@@ -4597,7 +4611,7 @@ const FacetComponent = (props) => {
4597
4611
  currentItems: arrFacetValues
4598
4612
  };
4599
4613
  }
4600
- const lastItemLimit = separatedFilterItem[value] || Number(item_pagination_limit);
4614
+ const lastItemLimit = separatedFilterItem[getValue] || Number(item_pagination_limit);
4601
4615
  let haveNextPage2 = Boolean(lastItemLimit < (arrFacetValues == null ? void 0 : arrFacetValues.length));
4602
4616
  let sliced = arrFacetValues;
4603
4617
  if (haveNextPage2)
@@ -4618,7 +4632,7 @@ const FacetComponent = (props) => {
4618
4632
  onClick: () => setSeparatedFilterItem == null ? void 0 : setSeparatedFilterItem((old) => {
4619
4633
  const fixState = {
4620
4634
  ...old,
4621
- [value]: (old[value] || Number(item_pagination_limit)) + Number(item_pagination_limit)
4635
+ [getValue]: (old[getValue] || Number(item_pagination_limit)) + Number(item_pagination_limit)
4622
4636
  };
4623
4637
  return fixState;
4624
4638
  }),
@@ -4647,7 +4661,7 @@ const FacetComponent = (props) => {
4647
4661
  const content = /* @__PURE__ */ jsxRuntimeExports.jsx(
4648
4662
  Checkbox,
4649
4663
  {
4650
- id: `${value}_${index}${isFacetHierarchical ? `_${stringToSlug(itemValue)}` : ""}`,
4664
+ id: `${getValue}_${index}${isFacetHierarchical ? `_${stringToSlug(itemValue)}` : ""}`,
4651
4665
  name: value,
4652
4666
  value: itemValue,
4653
4667
  label: /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
@@ -4690,12 +4704,18 @@ const FacetComponent = (props) => {
4690
4704
  });
4691
4705
  };
4692
4706
  let scrollElement = document.querySelector(
4693
- scrollElementSelector || `#filter-${layoutType}-${collectionId || "all"}-standard-${stringToSlug(value)} .sledge-instant-search__result-filter-item-list`
4707
+ scrollElementSelector || `#filter-${indexFilter}-${layoutType}-${collectionId || "all"}-standard-${stringToSlug(value)} .sledge-instant-search__result-filter-item-list`
4694
4708
  );
4695
4709
  if (isDisplaySlider) {
4696
4710
  items = (defaultFacetStats == null ? void 0 : defaultFacetStats[value]) && Object.keys(defaultFacetStats[value]).length ? defaultFacetStats[value] : {};
4697
- let defaultValueMin = valueFilterPriceChange[0] || (items == null ? void 0 : items.min);
4698
- let defaultValueMax = valueFilterPriceChange[1] || (items == null ? void 0 : items.max);
4711
+ let valueFilterSliderChange = [];
4712
+ if (value === "variants.price") {
4713
+ valueFilterSliderChange = valueFilterPriceChange;
4714
+ } else if (value === "variants.sale_percent") {
4715
+ valueFilterSliderChange = valueFilterOnSaleChange;
4716
+ }
4717
+ let defaultValueMin = (valueFilterSliderChange == null ? void 0 : valueFilterSliderChange[0]) || (items == null ? void 0 : items.min);
4718
+ let defaultValueMax = (valueFilterSliderChange == null ? void 0 : valueFilterSliderChange[1]) || (items == null ? void 0 : items.max);
4699
4719
  blockComponent = /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "sledge-instant-search__result-filter-item-list-slider", children: [
4700
4720
  /* @__PURE__ */ jsxRuntimeExports.jsx(
4701
4721
  Slider,
@@ -4710,7 +4730,13 @@ const FacetComponent = (props) => {
4710
4730
  parentId: value,
4711
4731
  value: valueCommit
4712
4732
  }),
4713
- setValueChange: (valueChange) => setValueFilterPriceChange(valueChange)
4733
+ setValueChange: (valueChange) => {
4734
+ if (value === "variants.price") {
4735
+ setValueFilterPriceChange(valueChange);
4736
+ } else if (value === "variants.sale_percent") {
4737
+ setValueFilterOnSaleChange(valueChange);
4738
+ }
4739
+ }
4714
4740
  }
4715
4741
  ),
4716
4742
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "sledge-instant-search__result-filter-item-list-slider-minmax", children: [
@@ -4739,11 +4765,11 @@ const FacetComponent = (props) => {
4739
4765
  blockComponent = /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: /* @__PURE__ */ jsxRuntimeExports.jsx(
4740
4766
  RadioGroup,
4741
4767
  {
4742
- id: value,
4743
- name: value,
4744
- onValueChange: (getValue) => handleFilterChange({
4768
+ id: getValue,
4769
+ name: getValue,
4770
+ onValueChange: (valueChange) => handleFilterChange({
4745
4771
  parentId: value,
4746
- value: getValue,
4772
+ value: valueChange,
4747
4773
  force: true
4748
4774
  }),
4749
4775
  items: currentItems == null ? void 0 : currentItems.map((item) => {
@@ -4768,9 +4794,9 @@ const FacetComponent = (props) => {
4768
4794
  {
4769
4795
  placeholder: `Select ${label}`,
4770
4796
  name: value,
4771
- onValueChange: (getValue) => handleFilterChange({
4797
+ onValueChange: (getValue2) => handleFilterChange({
4772
4798
  parentId: value,
4773
- value: getValue,
4799
+ value: getValue2,
4774
4800
  force: true
4775
4801
  }),
4776
4802
  items: currentItems == null ? void 0 : currentItems.map((item) => {
@@ -4790,7 +4816,7 @@ const FacetComponent = (props) => {
4790
4816
  return /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: /* @__PURE__ */ jsxRuntimeExports.jsx(
4791
4817
  ColorSwatch,
4792
4818
  {
4793
- id: `${value}_${index}`,
4819
+ id: `${getValue}_${index}`,
4794
4820
  name: value,
4795
4821
  value: item.value,
4796
4822
  rgb: getColorSwatch == null ? void 0 : getColorSwatch.rgb,
@@ -4819,17 +4845,21 @@ const FacetComponent = (props) => {
4819
4845
  const FilterVerticalComponent = (props) => {
4820
4846
  const { filter, filterSettings, indexFilter, filterTitleStyle = {}, handleOpenFilterVertical, clickedOpenFilters, filterLayoutType, layoutType, collectionId } = props;
4821
4847
  const { value, label } = filter;
4822
- const filterItemId = `filter-${layoutType}-${collectionId || "all"}-${filterLayoutType}-${stringToSlug(value)}`;
4848
+ const getValue = `${value}-${indexFilter}`;
4849
+ const filterItemId = `filter-${indexFilter}-${layoutType}-${collectionId || "all"}-${filterLayoutType}-${stringToSlug(getValue)}`;
4823
4850
  const { isRender, classesUlElement, getFacetComponent } = filterSettings({
4824
- filter,
4851
+ filter: {
4852
+ ...filter,
4853
+ indexFilter
4854
+ },
4825
4855
  scrollElementSelector: `#${filterItemId} .sledge-instant-search__result-filter-item-list`
4826
4856
  });
4827
4857
  return isRender ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "sledge-instant-search__result-filter-item", id: filterItemId, children: [
4828
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "sledge-instant-search__result-filter-item-title", onClick: () => handleOpenFilterVertical(value), children: [
4858
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "sledge-instant-search__result-filter-item-title", onClick: () => handleOpenFilterVertical(getValue), children: [
4829
4859
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "sledge-instant-search__result-filter-title", style: filterTitleStyle, children: label }),
4830
- /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { initial: false, animate: clickedOpenFilters.includes(value) ? "open" : "closed", variants: ROTATE_FILTER_ARROW_ANIMATION, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronArrowDownIcon, { width: 15, height: 15, color: "#000000" }) })
4860
+ /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { initial: false, animate: clickedOpenFilters.includes(getValue) ? "open" : "closed", variants: ROTATE_FILTER_ARROW_ANIMATION, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronArrowDownIcon, { width: 15, height: 15, color: "#000000" }) })
4831
4861
  ] }),
4832
- clickedOpenFilters.includes(value) && /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { className: classesUlElement.join(" "), children: getFacetComponent() })
4862
+ clickedOpenFilters.includes(getValue) && /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { className: classesUlElement.join(" "), children: getFacetComponent() })
4833
4863
  ] }, indexFilter) : null;
4834
4864
  };
4835
4865
  const FilterHorizontalComponent = (props) => {
@@ -4847,11 +4877,14 @@ const FilterHorizontalComponent = (props) => {
4847
4877
  collectionId
4848
4878
  } = props;
4849
4879
  const { value, label } = filter;
4850
- const filterItemId = `filter-${layoutType}-${collectionId || "all"}-${deviceType}-${stringToSlug(value)}`;
4880
+ const filterItemId = `filter-${indexFilter}-${layoutType}-${collectionId || "all"}-${deviceType}-${stringToSlug(value)}`;
4851
4881
  const getValueOpenFilterId = deviceType === "mobile" ? clickedOpenFilterHorizontalMobileId : clickedOpenFilterHorizontalId;
4852
4882
  const isOpenFilterHorizontal = getValueOpenFilterId === value;
4853
4883
  const { isRender, classesUlElement, getFacetComponent, isLastIndex } = filterSettings({
4854
- filter,
4884
+ filter: {
4885
+ ...filter,
4886
+ indexFilter
4887
+ },
4855
4888
  scrollElementSelector: `#${filterItemId} .sledge-instant-search__result-filter-item-list`
4856
4889
  });
4857
4890
  return isRender ? /* @__PURE__ */ jsxRuntimeExports.jsx(React__default.Fragment, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -4985,6 +5018,7 @@ const SearchResultWidget = (props) => {
4985
5018
  const [clickedOpenFilterHorizontalId, setClickedOpenFilterHorizontalId] = React__default.useState(null);
4986
5019
  const [clickedOpenFilterHorizontalMobileId, setClickedOpenFilterHorizontalMobileId] = React__default.useState(null);
4987
5020
  const [separatedFilterItem, setSeparatedFilterItem] = React__default.useState({});
5021
+ const [defaultFilterItems, setDefaultFilterItems] = React__default.useState([]);
4988
5022
  const debouncedKeyword = useDebounce(keyword, 500);
4989
5023
  let productCardsComponent = null;
4990
5024
  let collectionCardsComponent = null;
@@ -5075,31 +5109,30 @@ const SearchResultWidget = (props) => {
5075
5109
  setIsLoading(false);
5076
5110
  const { facetStats, totalHits, facetDistribution } = (results == null ? void 0 : results.find(({ indexUid }) => indexUid.includes(index_product))) || {};
5077
5111
  let valueHideFilterWhenOneValue = ((_a2 = display == null ? void 0 : display.filter) == null ? void 0 : _a2.hide_when_one_value) && totalHits <= 1;
5078
- setSearchResultFacets(
5079
- facetDistribution ? Object.fromEntries(
5080
- Object.entries(facetDistribution).map((facet) => {
5081
- let value = facet[0];
5082
- let items = [];
5083
- if (value === "variants.inventory_quantity") {
5084
- items = [
5085
- {
5086
- name: "In Stock",
5087
- value: "> 0"
5088
- }
5089
- ];
5090
- } else {
5091
- items = Object.keys(facetDistribution[value]).map((item) => {
5092
- return {
5093
- name: item,
5094
- value: item,
5095
- total: facetDistribution[value][item] || 0
5096
- };
5097
- });
5098
- }
5099
- return [value, items];
5100
- })
5101
- ) : {}
5102
- );
5112
+ let valueSearchResultFacets = facetDistribution ? Object.fromEntries(
5113
+ Object.entries(facetDistribution).map((facet) => {
5114
+ let value = facet[0];
5115
+ let items = [];
5116
+ if (value === "variants.inventory_quantity") {
5117
+ items = [
5118
+ {
5119
+ name: "In Stock",
5120
+ value: "> 0"
5121
+ }
5122
+ ];
5123
+ } else {
5124
+ items = Object.keys(facetDistribution[value]).map((item) => {
5125
+ return {
5126
+ name: item,
5127
+ value: item,
5128
+ total: facetDistribution[value][item] || 0
5129
+ };
5130
+ });
5131
+ }
5132
+ return [value, items];
5133
+ })
5134
+ ) : {};
5135
+ setSearchResultFacets(valueSearchResultFacets);
5103
5136
  setDefaultFacetStats(facetStats);
5104
5137
  setHideFilterWhenOneValue(valueHideFilterWhenOneValue);
5105
5138
  let allowedFilters = ((_c2 = (_b2 = sledgeSettings == null ? void 0 : sledgeSettings.instantsearch) == null ? void 0 : _b2.filters) == null ? void 0 : _c2.length) ? (_d2 = sledgeSettings == null ? void 0 : sledgeSettings.instantsearch) == null ? void 0 : _d2.filters : (filters == null ? void 0 : filters.length) ? filters : [];
@@ -5127,6 +5160,39 @@ const SearchResultWidget = (props) => {
5127
5160
  });
5128
5161
  if (isSetFilter)
5129
5162
  setAllowedFilter(valueAllowedFilter);
5163
+ if (valueAllowedFilter == null ? void 0 : valueAllowedFilter.length) {
5164
+ let valueDefaultFilterItems = valueAllowedFilter.map((filter) => {
5165
+ var _a3;
5166
+ const { value, label, display: display2, settings: settings2 } = filter;
5167
+ const { prefix, filter_list, selected_filter } = settings2 || {};
5168
+ const isDisplaySlider = display2.toLowerCase() === "slider";
5169
+ if (isDisplaySlider)
5170
+ return;
5171
+ let items = [];
5172
+ if (display2.toLowerCase() === "tree") {
5173
+ for (let level = 0; level < MAX_LIMIT_HIERARCHICAL; level++) {
5174
+ items = [...items, ...valueSearchResultFacets[`${value}.lvl${level}`]];
5175
+ }
5176
+ } else {
5177
+ items = valueSearchResultFacets[value];
5178
+ }
5179
+ return {
5180
+ label,
5181
+ settings: settings2,
5182
+ items: (_a3 = items == null ? void 0 : items.map((item) => {
5183
+ const isManualFilter = item && filter_list === "manual" && !(selected_filter == null ? void 0 : selected_filter.includes(item == null ? void 0 : item.value));
5184
+ const isPrefixFilter = item && filter_list === "prefix" && !(prefix == null ? void 0 : prefix.find((prefixItem) => {
5185
+ var _a4;
5186
+ return (_a4 = item == null ? void 0 : item.value) == null ? void 0 : _a4.startsWith(prefixItem);
5187
+ }));
5188
+ if (!item || isManualFilter || isPrefixFilter)
5189
+ return;
5190
+ return item.value;
5191
+ })) == null ? void 0 : _a3.filter((item) => item)
5192
+ };
5193
+ }).filter((item) => item);
5194
+ setDefaultFilterItems(valueDefaultFilterItems);
5195
+ }
5130
5196
  }
5131
5197
  setAllowedTabs(
5132
5198
  tabs == null ? void 0 : tabs.map((tab) => {
@@ -5566,7 +5632,8 @@ const SearchResultWidget = (props) => {
5566
5632
  clickedOpenFilterHorizontalId,
5567
5633
  setClickedOpenFilterHorizontalId,
5568
5634
  clickedOpenFilterHorizontalMobileId,
5569
- setClickedOpenFilterHorizontalMobileId
5635
+ setClickedOpenFilterHorizontalMobileId,
5636
+ defaultFilterItems
5570
5637
  })
5571
5638
  ] });
5572
5639
  };
@@ -5624,7 +5691,8 @@ const ResultProduct = (props) => {
5624
5691
  setClickedOpenFilterHorizontalId,
5625
5692
  clickedOpenFilterHorizontalMobileId,
5626
5693
  setClickedOpenFilterHorizontalMobileId,
5627
- isFirstLoading
5694
+ isFirstLoading,
5695
+ defaultFilterItems
5628
5696
  } = props || {};
5629
5697
  const querySortBy = (query == null ? void 0 : query.sortBy) ? query.sortBy : DEFAULT_QUERY_PARAM.SORT_BY;
5630
5698
  const queryPage = (query == null ? void 0 : query.page) ? query.page : DEFAULT_QUERY_PARAM.PAGE;
@@ -5635,7 +5703,13 @@ const ResultProduct = (props) => {
5635
5703
  const [isLoading, setIsLoading] = React__default.useState(!propsData);
5636
5704
  const [clickedSortId, setClickedSortId] = React__default.useState(defaultSort || "");
5637
5705
  const [clickedLimitId, setClickedLimitId] = React__default.useState(Number((searchParams == null ? void 0 : searchParams.get(queryLimit)) || defaultLimit || DEFAULT_LIMIT_VALUE[0]));
5638
- const [clickedOpenFilters, setClickedOpenFilters] = React__default.useState((allowedFilter == null ? void 0 : allowedFilter.length) ? allowedFilter.map(({ value }) => value) : []);
5706
+ const [clickedOpenFilters, setClickedOpenFilters] = React__default.useState(
5707
+ (allowedFilter == null ? void 0 : allowedFilter.length) ? allowedFilter.map((props2, index) => {
5708
+ const { value, settings: settings2 } = props2;
5709
+ const { collapse } = settings2 || {};
5710
+ return collapse ? null : `${value}-${index}`;
5711
+ }).filter((item) => item) : []
5712
+ );
5639
5713
  const [triggerClickedFacets, setTriggerClickedFacets] = React__default.useState(false);
5640
5714
  const [searchResult, setSearchResult] = React__default.useState(((_d = (_c = (_b = propsData == null ? void 0 : propsData.result) == null ? void 0 : _b.results) == null ? void 0 : _c[0]) == null ? void 0 : _d.hits) || []);
5641
5715
  const [searchProcessingTimeMs, setSearchProcessingTimeMs] = React__default.useState(0);
@@ -5643,6 +5717,7 @@ const ResultProduct = (props) => {
5643
5717
  const [totalPage, setTotalPage] = React__default.useState(0);
5644
5718
  const [totalSearchResult, setTotalSearchResult] = React__default.useState(((_g = (_f = (_e = propsData == null ? void 0 : propsData.result) == null ? void 0 : _e.results) == null ? void 0 : _f[0]) == null ? void 0 : _g.totalHits) || 0);
5645
5719
  const [valueFilterPriceChange, setValueFilterPriceChange] = React__default.useState([]);
5720
+ const [valueFilterOnSaleChange, setValueFilterOnSaleChange] = React__default.useState([]);
5646
5721
  const [handleSearchResultFirstTime, setHandleSearchResultFirstTime] = React__default.useState(true);
5647
5722
  const [searchFacetDistribution, setSearchFacetDistribution] = React__default.useState({});
5648
5723
  const [isLoadingButtonLoadMore, setIsLoadingButtonLoadMore] = React__default.useState(false);
@@ -5793,11 +5868,12 @@ const ResultProduct = (props) => {
5793
5868
  setTriggerClickedFacets(!triggerClickedFacets);
5794
5869
  handleQueryStringFilter({});
5795
5870
  setValueFilterPriceChange([]);
5871
+ setValueFilterOnSaleChange([]);
5796
5872
  };
5797
5873
  const handleFilterChange = ({ parentId, value, force = false }) => {
5798
5874
  var _a2;
5799
5875
  let facets2 = [value];
5800
- let isRange = ["variants.price"].includes(parentId);
5876
+ let isRange = ["variants.price", "variants.sale_percent"].includes(parentId);
5801
5877
  let isHierarchical = hierarchicalFacetAliases.includes(parentId);
5802
5878
  if (clickedFacets) {
5803
5879
  if (force) {
@@ -5811,7 +5887,11 @@ const ResultProduct = (props) => {
5811
5887
  if (isRange) {
5812
5888
  if (clickedFacets[parentId], clickedFacets[parentId] === value) {
5813
5889
  facets2 = [];
5814
- setValueFilterPriceChange([]);
5890
+ if (parentId === "variants.price") {
5891
+ setValueFilterPriceChange([]);
5892
+ } else if (parentId === "variants.sale_percent") {
5893
+ setValueFilterOnSaleChange([]);
5894
+ }
5815
5895
  } else {
5816
5896
  facets2 = value;
5817
5897
  }
@@ -5827,7 +5907,10 @@ const ResultProduct = (props) => {
5827
5907
  [parentId]: facets2
5828
5908
  }
5829
5909
  };
5830
- handleQueryStringFilter(valueClickedFacets);
5910
+ let handleQueryStringFilterProp = valueClickedFacets;
5911
+ if (Object.hasOwn(handleQueryStringFilterProp, "variants.inventory_quantity"))
5912
+ handleQueryStringFilterProp == null ? true : delete handleQueryStringFilterProp["variants.inventory_quantity"];
5913
+ handleQueryStringFilter(handleQueryStringFilterProp);
5831
5914
  setClickedFacets == null ? void 0 : setClickedFacets(valueClickedFacets);
5832
5915
  setTriggerClickedFacets(!triggerClickedFacets);
5833
5916
  };
@@ -5875,6 +5958,8 @@ const ResultProduct = (props) => {
5875
5958
  setClickedFacets == null ? void 0 : setClickedFacets(facetsQueryStringObject);
5876
5959
  if (facetsQueryStringObject["variants.price"])
5877
5960
  setValueFilterPriceChange(facetsQueryStringObject["variants.price"]);
5961
+ if (facetsQueryStringObject["variants.sale_percent"])
5962
+ setValueFilterOnSaleChange(facetsQueryStringObject["variants.sale_percent"]);
5878
5963
  },
5879
5964
  separator: hierarchical_separator,
5880
5965
  separatorCollection: hierarchical_collections_separator,
@@ -5953,7 +6038,7 @@ const ResultProduct = (props) => {
5953
6038
  let isAdditionalFilter = ["variants.inventory_quantity"].includes(getName);
5954
6039
  if (isAdditionalFilter)
5955
6040
  return;
5956
- let isRange = ["variants.price"].includes(getName);
6041
+ let isRange = ["variants.price", "variants.sale_percent"].includes(getName);
5957
6042
  let getAllowedFilterOne = allowedFilter == null ? void 0 : allowedFilter.filter(({ value }) => value == null ? void 0 : value.includes(getName));
5958
6043
  let getLabel = (getAllowedFilterOne == null ? void 0 : getAllowedFilterOne.length) ? getAllowedFilterOne[0].label : getName;
5959
6044
  let items = Array.isArray(facet[1]) && ((_a2 = facet[1]) == null ? void 0 : _a2.length) > 1 ? isRange ? dataClickedFacets.push({
@@ -5975,14 +6060,29 @@ const ResultProduct = (props) => {
5975
6060
  }
5976
6061
  });
5977
6062
  const facetBlockSelected = ({ label, name, value, index }) => {
5978
- var _a2, _b2;
6063
+ var _a2, _b2, _c2;
5979
6064
  let valueText = value;
5980
- let isRange = ["variants.price"].includes(name);
6065
+ let isRange = ["variants.price", "variants.sale_percent"].includes(name);
6066
+ let getLabel = label;
6067
+ let getSettings = {};
6068
+ if (defaultFilterItems == null ? void 0 : defaultFilterItems.length) {
6069
+ defaultFilterItems.map((defaultFilterItem) => {
6070
+ const { label: defaultFilterItemLabel, items, settings: defaultFilterItemSettings } = defaultFilterItem;
6071
+ if (items == null ? void 0 : items.includes(value)) {
6072
+ getLabel = defaultFilterItemLabel;
6073
+ getSettings = defaultFilterItemSettings;
6074
+ }
6075
+ });
6076
+ }
6077
+ (_a2 = getSettings == null ? void 0 : getSettings.delete_prefix) == null ? void 0 : _a2.map((deletePrefix) => {
6078
+ if (String(valueText).startsWith(deletePrefix))
6079
+ valueText = String(valueText).replace(deletePrefix, "");
6080
+ });
5981
6081
  if (isRange)
5982
6082
  valueText = value == null ? void 0 : value.join(" - ");
5983
6083
  else
5984
- valueText = (_a2 = String(valueText)) == null ? void 0 : _a2.replaceAll(hierarchical_collections_separator, " > ");
5985
- valueText = (_b2 = String(valueText)) == null ? void 0 : _b2.replaceAll("_", " ");
6084
+ valueText = (_b2 = String(valueText)) == null ? void 0 : _b2.replaceAll(hierarchical_collections_separator, " > ");
6085
+ valueText = (_c2 = String(valueText)) == null ? void 0 : _c2.replaceAll("_", " ");
5986
6086
  let aliases = {};
5987
6087
  let aliasValue = "";
5988
6088
  let aliasSeparator = "";
@@ -6004,7 +6104,7 @@ const ResultProduct = (props) => {
6004
6104
  }
6005
6105
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "sledge-instant-search__result-filter-item-refine-selected", style: filter_option_style, children: [
6006
6106
  /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "sledge-instant-search__result-filter-item-title-refine-list", children: [
6007
- label,
6107
+ getLabel,
6008
6108
  ": ",
6009
6109
  aliasValue || valueText
6010
6110
  ] }),
@@ -6050,8 +6150,14 @@ const ResultProduct = (props) => {
6050
6150
  let isRender = Boolean(display.toLowerCase() === "slider" ? items : items == null ? void 0 : items.length);
6051
6151
  if (display.toLowerCase() === "slider") {
6052
6152
  let defaultItemSlider = (defaultFacetStats == null ? void 0 : defaultFacetStats[value]) && Object.keys(defaultFacetStats[value]).length ? defaultFacetStats[value] : {};
6053
- let defaultValueMin = valueFilterPriceChange[0] || (defaultItemSlider == null ? void 0 : defaultItemSlider.min);
6054
- let defaultValueMax = valueFilterPriceChange[1] || (defaultItemSlider == null ? void 0 : defaultItemSlider.max);
6153
+ let valueFilterSliderChange = [];
6154
+ if (value === "variants.price") {
6155
+ valueFilterSliderChange = valueFilterPriceChange;
6156
+ } else if (value === "variants.sale_percent") {
6157
+ valueFilterSliderChange = valueFilterOnSaleChange;
6158
+ }
6159
+ let defaultValueMin = (valueFilterSliderChange == null ? void 0 : valueFilterSliderChange[0]) || (defaultItemSlider == null ? void 0 : defaultItemSlider.min);
6160
+ let defaultValueMax = (valueFilterSliderChange == null ? void 0 : valueFilterSliderChange[1]) || (defaultItemSlider == null ? void 0 : defaultItemSlider.max);
6055
6161
  isRender = !defaultValueMin && !defaultValueMax ? false : true;
6056
6162
  }
6057
6163
  let classesUlElement = ["sledge-instant-search__result-filter-item-list"];
@@ -6072,6 +6178,8 @@ const ResultProduct = (props) => {
6072
6178
  defaultFacetStats,
6073
6179
  valueFilterPriceChange,
6074
6180
  setValueFilterPriceChange,
6181
+ valueFilterOnSaleChange,
6182
+ setValueFilterOnSaleChange,
6075
6183
  separatedFilterItem,
6076
6184
  setSeparatedFilterItem,
6077
6185
  scrollElementSelector,