@sledge-app/react-instant-search 0.0.34 → 0.0.36

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.
@@ -2256,7 +2256,7 @@ const SearchIconWidget = (props) => {
2256
2256
  return /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "sledge-instant-search__icon-widget", onClick: handleShowWidget, children: /* @__PURE__ */ jsxRuntimeExports.jsx(SearchIcon, { ...sizing, color: "currentColor" }) });
2257
2257
  };
2258
2258
  const SearchIconWidgetPopup$1 = "";
2259
- const OtherIndexLists = ({ listsComponent, name, items, isComponentJsVersion = false }) => {
2259
+ const OtherIndexLists = ({ listsComponent, name, items, isComponentJsVersion }) => {
2260
2260
  const getListsComponent = listsComponent ? listsComponent({ name, items }) : null;
2261
2261
  return listsComponent ? isComponentJsVersion ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { dangerouslySetInnerHTML: { __html: getListsComponent } }) : getListsComponent : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
2262
2262
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "sledge-instant-search__icon-widget-search-form-result-title", children: name }),
@@ -3086,6 +3086,7 @@ const SearchResultWidget = (props) => {
3086
3086
  colorSwatches,
3087
3087
  defaultSort,
3088
3088
  showOutOfStock,
3089
+ query,
3089
3090
  data,
3090
3091
  separateJsVersionComponent,
3091
3092
  productCardsComponent,
@@ -3117,6 +3118,7 @@ const ResultProduct = (props) => {
3117
3118
  colorSwatches,
3118
3119
  defaultSort,
3119
3120
  showOutOfStock,
3121
+ query,
3120
3122
  data,
3121
3123
  separateJsVersionComponent,
3122
3124
  productCardsComponent,
@@ -3130,6 +3132,7 @@ const ResultProduct = (props) => {
3130
3132
  onAfterRemoveWishlist,
3131
3133
  onAfterRenderProduct
3132
3134
  } = props || {};
3135
+ const { keyword: queryKeyword = "" } = query || {};
3133
3136
  const { collectionId } = data || {};
3134
3137
  const [isFirstLoading, setIsFirstLoading] = React__default.useState(true);
3135
3138
  const [isLoading, setIsLoading] = React__default.useState(true);
@@ -3144,6 +3147,7 @@ const ResultProduct = (props) => {
3144
3147
  "variants.inventory_quantity": "> 0"
3145
3148
  } : {}
3146
3149
  });
3150
+ const [triggerClickedFacets, setTriggerClickedFacets] = React__default.useState(false);
3147
3151
  const [searchResult, setSearchResult] = React__default.useState([]);
3148
3152
  const [searchProcessingTimeMs, setSearchProcessingTimeMs] = React__default.useState(0);
3149
3153
  const [currentPage, setCurrentPage] = React__default.useState(1);
@@ -3199,6 +3203,39 @@ const ResultProduct = (props) => {
3199
3203
  ...filter_button_font_weight && { fontWeight: filter_button_font_weight },
3200
3204
  ...filter_button_text_transform && { textTransform: filter_button_text_transform }
3201
3205
  });
3206
+ const detectQueryStringFilter = (facetsQueryStringObject) => {
3207
+ const searchParams = new URLSearchParams(document.location.search);
3208
+ const searchParamsObject = Object.fromEntries(searchParams);
3209
+ for (const searchParamsKey in searchParamsObject) {
3210
+ let ifFacetsQueryStringObject = (facets == null ? void 0 : facets.length) && facets.includes(searchParamsKey);
3211
+ if (ifFacetsQueryStringObject)
3212
+ facetsQueryStringObject[searchParamsKey] = searchParamsObject[searchParamsKey].split(",");
3213
+ }
3214
+ if (Object.keys(facetsQueryStringObject).length)
3215
+ setClickedFacets(facetsQueryStringObject);
3216
+ return facetsQueryStringObject;
3217
+ };
3218
+ const handleQueryStringFilter = (valueClickedFacets) => {
3219
+ var _a2;
3220
+ const searchParams = new URLSearchParams(document.location.search);
3221
+ const searchParamsObject = Object.fromEntries(searchParams);
3222
+ let otherQueryStringObject = {};
3223
+ for (const searchParamsKey in searchParamsObject) {
3224
+ let ifOtherQueryStringObject = (facets == null ? void 0 : facets.length) && !facets.includes(searchParamsKey);
3225
+ if (ifOtherQueryStringObject)
3226
+ otherQueryStringObject[searchParamsKey] = searchParamsObject[searchParamsKey];
3227
+ }
3228
+ let facetQueryStringObject = {};
3229
+ for (const valueClickedFacetsKey in valueClickedFacets) {
3230
+ if ((_a2 = valueClickedFacets[valueClickedFacetsKey]) == null ? void 0 : _a2.length)
3231
+ otherQueryStringObject[valueClickedFacetsKey] = valueClickedFacets[valueClickedFacetsKey];
3232
+ }
3233
+ const newQueryString = new URLSearchParams({
3234
+ ...otherQueryStringObject,
3235
+ ...facetQueryStringObject
3236
+ }).toString();
3237
+ window.history.pushState(null, "", `${document.location.pathname}${(newQueryString == null ? void 0 : newQueryString.length) ? `?${newQueryString}` : ""}`);
3238
+ };
3202
3239
  const handleChangeSort = (label, value) => {
3203
3240
  setIsOpenSort(false);
3204
3241
  setClickedSortName(label);
@@ -3214,6 +3251,8 @@ const ResultProduct = (props) => {
3214
3251
  const handleFilterReset = () => {
3215
3252
  setIsFilterChanged(true);
3216
3253
  setClickedFacets({});
3254
+ setTriggerClickedFacets(!triggerClickedFacets);
3255
+ handleQueryStringFilter({});
3217
3256
  setValueFilterPriceChange([]);
3218
3257
  setTimeout(() => {
3219
3258
  setIsFilterChanged(false);
@@ -3244,12 +3283,15 @@ const ResultProduct = (props) => {
3244
3283
  }
3245
3284
  }
3246
3285
  }
3247
- setClickedFacets({
3286
+ let valueClickedFacets = {
3248
3287
  ...clickedFacets,
3249
3288
  ...{
3250
3289
  [parentId]: facets2
3251
3290
  }
3252
- });
3291
+ };
3292
+ handleQueryStringFilter(valueClickedFacets);
3293
+ setClickedFacets(valueClickedFacets);
3294
+ setTriggerClickedFacets(!triggerClickedFacets);
3253
3295
  setTimeout(() => {
3254
3296
  setIsFilterChanged(false);
3255
3297
  }, 10);
@@ -3293,8 +3335,9 @@ const ResultProduct = (props) => {
3293
3335
  if (isRefreshPage)
3294
3336
  setCurrentPage(1);
3295
3337
  setIsLoading(true);
3338
+ let detectClickedFacets = detectQueryStringFilter(clickedFacets);
3296
3339
  let response;
3297
- let filters = Object.entries(clickedFacets).map((facet) => {
3340
+ let filters = Object.entries(detectClickedFacets).map((facet) => {
3298
3341
  var _a2, _b2;
3299
3342
  if ((facet == null ? void 0 : facet.length) && facet[1].length) {
3300
3343
  let value = facet[0];
@@ -3345,6 +3388,12 @@ const ResultProduct = (props) => {
3345
3388
  const handlePageChange = (page) => {
3346
3389
  setCurrentPage(page);
3347
3390
  };
3391
+ const handleChangeKeyword = (value) => {
3392
+ const searchParams = new URLSearchParams(document.location.search);
3393
+ searchParams.set(queryKeyword, value);
3394
+ setKeyword && setKeyword(value);
3395
+ window.history.pushState(null, "", `${document.location.pathname}?${searchParams.toString()}`);
3396
+ };
3348
3397
  React__default.useEffect(() => {
3349
3398
  let isRefreshSearchResult = Boolean(
3350
3399
  previousState && ((previousState == null ? void 0 : previousState.keyword) !== keyword || (previousState == null ? void 0 : previousState.clickedLimitId) !== clickedLimitId || (previousState == null ? void 0 : previousState.clickedFacets) !== clickedFacets)
@@ -3357,7 +3406,7 @@ const ResultProduct = (props) => {
3357
3406
  } else {
3358
3407
  handleSearchResult(isRefreshSearchResult);
3359
3408
  }
3360
- }, [clickedSortId, clickedLimitId, clickedFacets, keyword, currentPage, clickedTabIndexId]);
3409
+ }, [clickedSortId, clickedLimitId, triggerClickedFacets, keyword, currentPage, clickedTabIndexId]);
3361
3410
  React__default.useEffect(() => {
3362
3411
  handleAllowedFilter();
3363
3412
  }, [allowedFilters, searchResultFacets, totalSearchResult]);
@@ -3608,8 +3657,8 @@ const ResultProduct = (props) => {
3608
3657
  icon: /* @__PURE__ */ jsxRuntimeExports.jsx(SearchIcon, { width: 18, height: 18, color: "#868686" }),
3609
3658
  placeholder: "Search products...",
3610
3659
  value: keyword,
3611
- onChange: ({ value }) => setKeyword && setKeyword(value),
3612
- onResetField: () => setKeyword && setKeyword(""),
3660
+ onChange: ({ value }) => handleChangeKeyword(value),
3661
+ onResetField: () => handleChangeKeyword(""),
3613
3662
  className: "sledge-instant-search__result-data-keyword-form",
3614
3663
  withClearField: true
3615
3664
  }