@sledge-app/react-instant-search 1.0.86 → 1.0.88
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.
- package/dist/components/SearchResultWidget/Atoms.d.ts +13 -2
- package/dist/components/SearchResultWidget/Atoms.d.ts.map +1 -1
- package/dist/sledge-react-instant-search.cjs +1 -1
- package/dist/sledge-react-instant-search.cjs.map +1 -1
- package/dist/sledge-react-instant-search.js +167 -36
- package/dist/sledge-react-instant-search.js.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +1 -1
|
@@ -170,6 +170,7 @@ const OBJECT_DATA_STRING_KEY = {
|
|
|
170
170
|
CURRENT_PAGE: "{{ current_page }}",
|
|
171
171
|
TOTAL_PAGE: "{{ total_page }}",
|
|
172
172
|
TOTAL_RESULT: "{{ total_result }}",
|
|
173
|
+
TOTAL_FILTER_ITEM: "{{ total_filter_item }}",
|
|
173
174
|
COLLECTION_ID: "{{ collection_id }}",
|
|
174
175
|
COLLECTION_NAME: "{{ collection_name }}",
|
|
175
176
|
TOTAL_WISHLIST: "{{ total_wishlist }}",
|
|
@@ -298,6 +299,15 @@ const sanitizeDataId = (id) => {
|
|
|
298
299
|
return getId;
|
|
299
300
|
}
|
|
300
301
|
};
|
|
302
|
+
const getTextBetween = (params) => {
|
|
303
|
+
const { start, end, text } = params;
|
|
304
|
+
if (start && text.includes(start) && end && text.includes(end)) {
|
|
305
|
+
let getText = text.indexOf(start) + start.length;
|
|
306
|
+
return text.substring(getText, text.indexOf(end, getText));
|
|
307
|
+
} else {
|
|
308
|
+
return text;
|
|
309
|
+
}
|
|
310
|
+
};
|
|
301
311
|
const isFunction = (data) => typeof data === "function";
|
|
302
312
|
const scrollToElement = (params) => {
|
|
303
313
|
const { element, headerOffset } = params;
|
|
@@ -4571,6 +4581,7 @@ const FacetComponent = (props) => {
|
|
|
4571
4581
|
generalDataSettings,
|
|
4572
4582
|
searchFacetDistribution,
|
|
4573
4583
|
clickedFacets,
|
|
4584
|
+
setClickedFacets,
|
|
4574
4585
|
handleFilterChange,
|
|
4575
4586
|
defaultFacetStats,
|
|
4576
4587
|
valueFilterPriceChange,
|
|
@@ -4583,15 +4594,25 @@ const FacetComponent = (props) => {
|
|
|
4583
4594
|
scrollElementSelector,
|
|
4584
4595
|
layoutType,
|
|
4585
4596
|
collectionId,
|
|
4586
|
-
colorSwatches
|
|
4597
|
+
colorSwatches,
|
|
4598
|
+
ulClasses = "",
|
|
4599
|
+
languageSettings,
|
|
4600
|
+
triggerClickedFacets,
|
|
4601
|
+
setTriggerClickedFacets,
|
|
4602
|
+
handleQueryStringFilter,
|
|
4603
|
+
previousStateFromOutside
|
|
4587
4604
|
} = props;
|
|
4605
|
+
const [keywordFacet, setKeywordFacet] = React__default.useState("");
|
|
4606
|
+
const [showFacet, setShowFacet] = React__default.useState(false);
|
|
4607
|
+
const searchFacetRef = React__default.useRef(null);
|
|
4608
|
+
const previousState = usePrevious({ keywordFacet });
|
|
4588
4609
|
let aliases = {};
|
|
4589
4610
|
if (filter.value === "hierarchicalProductType")
|
|
4590
4611
|
aliases = settings.productTypeAliases || {};
|
|
4591
4612
|
if (filter.value === "hierarchicalCollections")
|
|
4592
4613
|
aliases = settings.collectionAliases || {};
|
|
4593
4614
|
const { button_load_more } = (generalDataSettings == null ? void 0 : generalDataSettings.languages) || {};
|
|
4594
|
-
const {
|
|
4615
|
+
const { search_filter_placeholder, search_filter_show_more_result, search_filter_no_result } = languageSettings || {};
|
|
4595
4616
|
const {
|
|
4596
4617
|
color: filter_option_color,
|
|
4597
4618
|
font_size: filter_option_font_size,
|
|
@@ -4606,7 +4627,8 @@ const FacetComponent = (props) => {
|
|
|
4606
4627
|
...filter_option_text_transform && { textTransform: filter_option_text_transform }
|
|
4607
4628
|
};
|
|
4608
4629
|
let { value, label, display, indexFilter, items, settings: filterSettings } = filter;
|
|
4609
|
-
const { prefix, filter_list, delete_prefix, selected_filter } = filterSettings || {};
|
|
4630
|
+
const { prefix, filter_list, delete_prefix, selected_filter, show_search, auto_select_search, hide_filter_list } = filterSettings || {};
|
|
4631
|
+
const show_filter_list_when_search = !hide_filter_list;
|
|
4610
4632
|
if (isFirstLoading)
|
|
4611
4633
|
return null;
|
|
4612
4634
|
let blockComponent = null;
|
|
@@ -4614,6 +4636,11 @@ const FacetComponent = (props) => {
|
|
|
4614
4636
|
const isHideFacetWhenZeroValue = (_c = displaySettings == null ? void 0 : displaySettings.filter) == null ? void 0 : _c.hide_when_zero_value;
|
|
4615
4637
|
const isDisplaySlider = display.toLowerCase() === "slider";
|
|
4616
4638
|
const getValue = `${value}-${indexFilter}`;
|
|
4639
|
+
if (show_search && keywordFacet && !isDisplaySlider)
|
|
4640
|
+
items = items == null ? void 0 : items.filter(({ name }) => {
|
|
4641
|
+
var _a2, _b2;
|
|
4642
|
+
return (_b2 = (_a2 = String(name)) == null ? void 0 : _a2.toLowerCase()) == null ? void 0 : _b2.includes(keywordFacet == null ? void 0 : keywordFacet.toLowerCase());
|
|
4643
|
+
});
|
|
4617
4644
|
const handleFacetValues = (items2) => {
|
|
4618
4645
|
var _a2;
|
|
4619
4646
|
let facetValues = [];
|
|
@@ -4666,12 +4693,56 @@ const FacetComponent = (props) => {
|
|
|
4666
4693
|
let currentItems2 = sliced;
|
|
4667
4694
|
return {
|
|
4668
4695
|
haveNextPage: haveNextPage2,
|
|
4669
|
-
currentItems: currentItems2
|
|
4696
|
+
currentItems: currentItems2,
|
|
4697
|
+
totalItems: Number(arrFacetValues == null ? void 0 : arrFacetValues.length)
|
|
4670
4698
|
};
|
|
4671
4699
|
};
|
|
4672
|
-
const
|
|
4700
|
+
const handleSearchShowMore = () => {
|
|
4701
|
+
var _a2, _b2;
|
|
4702
|
+
setShowFacet(true);
|
|
4703
|
+
(searchFacetRef == null ? void 0 : searchFacetRef.current) && ((_b2 = (_a2 = searchFacetRef == null ? void 0 : searchFacetRef.current) == null ? void 0 : _a2.focus) == null ? void 0 : _b2.call(_a2));
|
|
4704
|
+
};
|
|
4705
|
+
const { haveNextPage, currentItems, totalItems } = handleFacetLoadMore({
|
|
4673
4706
|
facetItems: items
|
|
4674
4707
|
});
|
|
4708
|
+
const filterSearchShowMoreId = stringToSlug(`filter-search-show-more-${getValue}`);
|
|
4709
|
+
React__default.useEffect(() => {
|
|
4710
|
+
if (!show_search)
|
|
4711
|
+
return;
|
|
4712
|
+
setTimeout(() => {
|
|
4713
|
+
var _a2;
|
|
4714
|
+
return (_a2 = document.querySelector(`#${filterSearchShowMoreId}`)) == null ? void 0 : _a2.addEventListener("click", () => handleSearchShowMore());
|
|
4715
|
+
}, 100);
|
|
4716
|
+
let isKeywordFacetChanged = Boolean(previousState && previousState.keywordFacet !== keywordFacet);
|
|
4717
|
+
let isPreviousStateFromOutsideChanged = Boolean(previousStateFromOutside && (previousStateFromOutside == null ? void 0 : previousStateFromOutside.clickedFacets) !== clickedFacets);
|
|
4718
|
+
if (keywordFacet && isKeywordFacetChanged) {
|
|
4719
|
+
const delayDebounceFn = setTimeout(() => {
|
|
4720
|
+
var _a2, _b2;
|
|
4721
|
+
const isAutoSelectFacet = Boolean(auto_select_search && totalItems && Number(totalItems) === 1);
|
|
4722
|
+
let autoSelectFacets = (_a2 = currentItems == null ? void 0 : currentItems.map(({ value: itemValue }) => {
|
|
4723
|
+
var _a3, _b3;
|
|
4724
|
+
return ((_b3 = (_a3 = clickedFacets == null ? void 0 : clickedFacets[value]) == null ? void 0 : _a3.includes) == null ? void 0 : _b3.call(_a3, itemValue)) ? null : itemValue;
|
|
4725
|
+
})) == null ? void 0 : _a2.filter((item) => item);
|
|
4726
|
+
if (isAutoSelectFacet && (autoSelectFacets == null ? void 0 : autoSelectFacets.length)) {
|
|
4727
|
+
let valueClickedFacets = {
|
|
4728
|
+
...clickedFacets,
|
|
4729
|
+
...{
|
|
4730
|
+
[value]: [.../* @__PURE__ */ new Set([...((_b2 = clickedFacets == null ? void 0 : clickedFacets[value]) == null ? void 0 : _b2.length) ? clickedFacets == null ? void 0 : clickedFacets[value] : [], ...autoSelectFacets])]
|
|
4731
|
+
}
|
|
4732
|
+
};
|
|
4733
|
+
let handleQueryStringFilterProp = valueClickedFacets;
|
|
4734
|
+
if (Object.hasOwn(handleQueryStringFilterProp, "variants.inventory_quantity"))
|
|
4735
|
+
handleQueryStringFilterProp == null ? true : delete handleQueryStringFilterProp["variants.inventory_quantity"];
|
|
4736
|
+
handleQueryStringFilter == null ? void 0 : handleQueryStringFilter(handleQueryStringFilterProp);
|
|
4737
|
+
setClickedFacets == null ? void 0 : setClickedFacets(valueClickedFacets);
|
|
4738
|
+
setTriggerClickedFacets == null ? void 0 : setTriggerClickedFacets(!triggerClickedFacets);
|
|
4739
|
+
}
|
|
4740
|
+
}, 500);
|
|
4741
|
+
return () => clearTimeout(delayDebounceFn);
|
|
4742
|
+
}
|
|
4743
|
+
if (!(showFacet && isPreviousStateFromOutsideChanged))
|
|
4744
|
+
setShowFacet(false);
|
|
4745
|
+
}, [keywordFacet, clickedFacets]);
|
|
4675
4746
|
const loadMoreComponent = /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
4676
4747
|
"div",
|
|
4677
4748
|
{
|
|
@@ -4753,6 +4824,33 @@ const FacetComponent = (props) => {
|
|
|
4753
4824
|
let scrollElement = document.querySelector(
|
|
4754
4825
|
scrollElementSelector || `#filter-${indexFilter}-${layoutType}-${collectionId || "all"}-standard-${stringToSlug(value)} .sledge-instant-search__result-filter-item-list`
|
|
4755
4826
|
);
|
|
4827
|
+
const isShowSearch = Boolean(
|
|
4828
|
+
show_search && (display.toLowerCase() === "checkbox" || display.toLowerCase() === "tree" || display.toLowerCase() === "radio") && (totalItems || keywordFacet && !totalItems)
|
|
4829
|
+
);
|
|
4830
|
+
const defaultSearchShowMoreFilter = /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
4831
|
+
totalItems,
|
|
4832
|
+
" items found,",
|
|
4833
|
+
" ",
|
|
4834
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "sledge-instant-search__result-filter-search-text-action", id: filterSearchShowMoreId, onClick: () => setShowFacet(true), children: "click here" }),
|
|
4835
|
+
" ",
|
|
4836
|
+
"to show"
|
|
4837
|
+
] });
|
|
4838
|
+
let searchFilterShowMoreResult = search_filter_show_more_result;
|
|
4839
|
+
if (searchFilterShowMoreResult) {
|
|
4840
|
+
const getActionText = getTextBetween({
|
|
4841
|
+
start: "<action>",
|
|
4842
|
+
end: "</action>",
|
|
4843
|
+
text: search_filter_show_more_result
|
|
4844
|
+
});
|
|
4845
|
+
searchFilterShowMoreResult = searchFilterShowMoreResult.replaceAll(OBJECT_DATA_STRING_KEY.TOTAL_FILTER_ITEM, String(Number(totalItems)));
|
|
4846
|
+
searchFilterShowMoreResult = searchFilterShowMoreResult.replaceAll(
|
|
4847
|
+
`<action>${getActionText}</action>`,
|
|
4848
|
+
`
|
|
4849
|
+
<span class="sledge-instant-search__result-filter-search-text-action" id="${filterSearchShowMoreId}">
|
|
4850
|
+
${getActionText}
|
|
4851
|
+
</span>`
|
|
4852
|
+
);
|
|
4853
|
+
}
|
|
4756
4854
|
if (isDisplaySlider) {
|
|
4757
4855
|
items = (defaultFacetStats == null ? void 0 : defaultFacetStats[value]) && Object.keys(defaultFacetStats[value]).length ? defaultFacetStats[value] : {};
|
|
4758
4856
|
let valueFilterSliderChange = [];
|
|
@@ -4877,7 +4975,7 @@ const FacetComponent = (props) => {
|
|
|
4877
4975
|
) }, index);
|
|
4878
4976
|
}) });
|
|
4879
4977
|
} else {
|
|
4880
|
-
blockComponent = /* @__PURE__ */ jsxRuntimeExports.jsx("li", { className: "sledge-instant-search__result-filter-item-no-result", style: filter_option_style, children: "No result..." });
|
|
4978
|
+
blockComponent = /* @__PURE__ */ jsxRuntimeExports.jsx("li", { className: "sledge-instant-search__result-filter-item-no-result", style: filter_option_style, children: search_filter_no_result || "No result..." });
|
|
4881
4979
|
}
|
|
4882
4980
|
if (haveNextPage) {
|
|
4883
4981
|
blockComponent = React__default.cloneElement(
|
|
@@ -4887,7 +4985,26 @@ const FacetComponent = (props) => {
|
|
|
4887
4985
|
] })
|
|
4888
4986
|
);
|
|
4889
4987
|
}
|
|
4890
|
-
return
|
|
4988
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
4989
|
+
isShowSearch ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "sledge-instant-search__result-filter-search-wrapper", children: [
|
|
4990
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
4991
|
+
SearchInputField,
|
|
4992
|
+
{
|
|
4993
|
+
type: "text",
|
|
4994
|
+
icon: /* @__PURE__ */ jsxRuntimeExports.jsx(SearchIcon, { width: 18, height: 18, color: "#868686" }),
|
|
4995
|
+
placeholder: search_filter_placeholder || "Search filters...",
|
|
4996
|
+
fieldRef: searchFacetRef,
|
|
4997
|
+
value: keywordFacet,
|
|
4998
|
+
onChange: ({ value: value2 }) => setKeywordFacet(value2),
|
|
4999
|
+
onResetField: () => setKeywordFacet(""),
|
|
5000
|
+
className: "sledge-instant-search__result-filter-search-form",
|
|
5001
|
+
withClearField: true
|
|
5002
|
+
}
|
|
5003
|
+
),
|
|
5004
|
+
keywordFacet && totalItems && Number(totalItems) > 1 && !show_filter_list_when_search && !showFacet ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "sledge-instant-search__result-filter-search-text", style: filter_option_style, children: searchFilterShowMoreResult ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { dangerouslySetInnerHTML: { __html: searchFilterShowMoreResult } }) : defaultSearchShowMoreFilter }) : null
|
|
5005
|
+
] }) : null,
|
|
5006
|
+
!show_search || show_search && (show_filter_list_when_search || !show_filter_list_when_search && (!totalItems || Number(totalItems) === 1 && keywordFacet) || showFacet) ? /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { className: ulClasses, children: blockComponent }) : null
|
|
5007
|
+
] });
|
|
4891
5008
|
};
|
|
4892
5009
|
const FilterVerticalComponent = (props) => {
|
|
4893
5010
|
const { filter, filterSettings, indexFilter, filterTitleStyle = {}, handleOpenFilterVertical, clickedOpenFilters, filterLayoutType, layoutType, collectionId } = props;
|
|
@@ -4906,7 +5023,9 @@ const FilterVerticalComponent = (props) => {
|
|
|
4906
5023
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "sledge-instant-search__result-filter-title", style: filterTitleStyle, children: label }),
|
|
4907
5024
|
/* @__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" }) })
|
|
4908
5025
|
] }),
|
|
4909
|
-
clickedOpenFilters.includes(getValue) && /* @__PURE__ */ jsxRuntimeExports.jsx("
|
|
5026
|
+
clickedOpenFilters.includes(getValue) && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "sledge-instant-search__result-filter-item-wrapper", children: getFacetComponent({
|
|
5027
|
+
ulClasses: classesUlElement.join(" ")
|
|
5028
|
+
}) })
|
|
4910
5029
|
] }, indexFilter) : null;
|
|
4911
5030
|
};
|
|
4912
5031
|
const FilterHorizontalComponent = (props) => {
|
|
@@ -4955,7 +5074,9 @@ const FilterHorizontalComponent = (props) => {
|
|
|
4955
5074
|
]
|
|
4956
5075
|
}
|
|
4957
5076
|
),
|
|
4958
|
-
content: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "sledge-instant-search__result-filter-horizontal-facet", id: filterItemId, children: isOpenFilterHorizontal && /* @__PURE__ */ jsxRuntimeExports.jsx("
|
|
5077
|
+
content: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "sledge-instant-search__result-filter-horizontal-facet", id: filterItemId, children: isOpenFilterHorizontal && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "sledge-instant-search__result-filter-item-wrapper", children: getFacetComponent({
|
|
5078
|
+
ulClasses: classesUlElement.join(" ")
|
|
5079
|
+
}) }) }),
|
|
4959
5080
|
withOpenState: true,
|
|
4960
5081
|
isOpen: isOpenFilterHorizontal,
|
|
4961
5082
|
setIsOpen: (open) => {
|
|
@@ -6233,33 +6354,43 @@ const ResultProduct = (props) => {
|
|
|
6233
6354
|
isRender = !defaultValueMin && !defaultValueMax ? false : true;
|
|
6234
6355
|
}
|
|
6235
6356
|
let classesUlElement = ["sledge-instant-search__result-filter-item-list"];
|
|
6236
|
-
const getFacetComponent = () =>
|
|
6237
|
-
|
|
6238
|
-
|
|
6239
|
-
|
|
6240
|
-
|
|
6241
|
-
|
|
6242
|
-
|
|
6243
|
-
|
|
6244
|
-
|
|
6245
|
-
|
|
6246
|
-
|
|
6247
|
-
|
|
6248
|
-
|
|
6249
|
-
|
|
6250
|
-
|
|
6251
|
-
|
|
6252
|
-
|
|
6253
|
-
|
|
6254
|
-
|
|
6255
|
-
|
|
6256
|
-
|
|
6257
|
-
|
|
6258
|
-
|
|
6259
|
-
|
|
6260
|
-
|
|
6261
|
-
|
|
6262
|
-
|
|
6357
|
+
const getFacetComponent = (props2) => {
|
|
6358
|
+
const { ulClasses = "" } = props2 || {};
|
|
6359
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
6360
|
+
FacetComponent,
|
|
6361
|
+
{
|
|
6362
|
+
filter: {
|
|
6363
|
+
...filter,
|
|
6364
|
+
items
|
|
6365
|
+
},
|
|
6366
|
+
isFirstLoading,
|
|
6367
|
+
displaySettings,
|
|
6368
|
+
generalDataSettings,
|
|
6369
|
+
settings,
|
|
6370
|
+
searchFacetDistribution,
|
|
6371
|
+
clickedFacets,
|
|
6372
|
+
setClickedFacets,
|
|
6373
|
+
handleFilterChange,
|
|
6374
|
+
defaultFacetStats,
|
|
6375
|
+
valueFilterPriceChange,
|
|
6376
|
+
setValueFilterPriceChange,
|
|
6377
|
+
valueFilterOnSaleChange,
|
|
6378
|
+
setValueFilterOnSaleChange,
|
|
6379
|
+
separatedFilterItem,
|
|
6380
|
+
setSeparatedFilterItem,
|
|
6381
|
+
scrollElementSelector,
|
|
6382
|
+
layoutType,
|
|
6383
|
+
collectionId,
|
|
6384
|
+
colorSwatches,
|
|
6385
|
+
ulClasses,
|
|
6386
|
+
languageSettings,
|
|
6387
|
+
triggerClickedFacets,
|
|
6388
|
+
setTriggerClickedFacets,
|
|
6389
|
+
handleQueryStringFilter,
|
|
6390
|
+
previousStateFromOutside: previousState
|
|
6391
|
+
}
|
|
6392
|
+
);
|
|
6393
|
+
};
|
|
6263
6394
|
if (display.toLowerCase() === "swatch" && (items == null ? void 0 : items.length))
|
|
6264
6395
|
classesUlElement.push("sledge-instant-search__result-filter-item-color-swatches");
|
|
6265
6396
|
if (display.toLowerCase() === "tree")
|