@usereactify/search 3.10.1 → 3.10.2

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.
Files changed (2) hide show
  1. package/dist/provider.js +28 -4
  2. package/package.json +1 -1
package/dist/provider.js CHANGED
@@ -63,11 +63,29 @@ const ConfiguredProvider = (props) => {
63
63
  const urlParams = new URLSearchParams(window.location.search);
64
64
  return (_a = urlParams.get("q")) !== null && _a !== void 0 ? _a : undefined;
65
65
  }, [window.location.search]);
66
+ const searchSortFromURL = react_1.default.useMemo(() => {
67
+ var _a;
68
+ if (typeof window === "undefined")
69
+ return undefined;
70
+ const urlParams = new URLSearchParams(window.location.search);
71
+ return (_a = urlParams.get("sort")) !== null && _a !== void 0 ? _a : undefined;
72
+ }, [window.location.search]);
66
73
  const [searchQuery, setSearchQuery] = react_1.default.useState(searchQueryFromURL);
74
+ const { sortOption, sortOptions, setSortOption } = useSortState(config, collection);
67
75
  react_1.default.useEffect(() => {
68
- if (searchQuery !== searchQueryFromURL)
76
+ if (searchQueryFromURL && searchQuery !== searchQueryFromURL)
69
77
  setSearchQuery(searchQueryFromURL);
70
78
  }, [searchQueryFromURL]);
79
+ react_1.default.useEffect(() => {
80
+ if (searchSortFromURL && (sortOption === null || sortOption === void 0 ? void 0 : sortOption.id) !== searchSortFromURL) {
81
+ setSortOption(searchSortFromURL, true);
82
+ }
83
+ }, [searchSortFromURL]);
84
+ react_1.default.useEffect(() => {
85
+ if (window.location.search === "" && (sortOption === null || sortOption === void 0 ? void 0 : sortOption.id)) {
86
+ setSortOption(sortOptions[0].id, true);
87
+ }
88
+ }, [window.location.href]);
71
89
  const [showInstantSearchResults, setShowInstantSearchResults] = react_1.default.useState(false);
72
90
  const submitSearch = react_1.default.useCallback((localSearchQuery) => {
73
91
  const actualSearchQuery = localSearchQuery !== null && localSearchQuery !== void 0 ? localSearchQuery : searchQuery;
@@ -86,7 +104,6 @@ const ConfiguredProvider = (props) => {
86
104
  window.location.href = `/search?q=${actualSearchQuery}`;
87
105
  }
88
106
  }, [searchQuery]);
89
- const { sortOption, sortOptions, setSortOption } = useSortState(config, collection);
90
107
  // do not attempt to resolve a filter stack if in instantSearch mode
91
108
  const filterStack = instantSearch
92
109
  ? undefined
@@ -152,9 +169,16 @@ const useSortState = (config, collection) => {
152
169
  }, [config, collection]);
153
170
  const [sortOptionState, setSortOptionState] = react_1.default.useState((_a = sortOptions[0]) === null || _a === void 0 ? void 0 : _a.id);
154
171
  const sortOption = react_1.default.useMemo(() => sortOptions.find(({ id }) => id === sortOptionState) || sortOptions[0], [sortOptions, sortOptionState]);
155
- const setSortOption = react_1.default.useCallback((sortOptionId) => {
172
+ const setSortOption = react_1.default.useCallback((sortOptionId, ignoreHistoryState = false) => {
156
173
  setSortOptionState(sortOptionId);
157
- }, []);
174
+ if (!ignoreHistoryState) {
175
+ const url = new URL(window.location.href);
176
+ url.searchParams.has("sort")
177
+ ? url.searchParams.set("sort", sortOptionId)
178
+ : url.searchParams.append("sort", sortOptionId);
179
+ window.history.pushState({}, "", url.toString());
180
+ }
181
+ }, [window.location.href]);
158
182
  return react_1.default.useMemo(() => ({ sortOptions, sortOption, setSortOption }), [sortOption, sortOptions, setSortOption]);
159
183
  };
160
184
  // resolve the "filter" in use for this view
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@usereactify/search",
3
3
  "description": "React UI library for Reactify Search",
4
- "version": "3.10.1",
4
+ "version": "3.10.2",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",