@usereactify/search 5.0.0-beta.11 → 5.0.0-beta.14

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 (155) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +3 -21
  3. package/dist/package.json +1 -1
  4. package/dist/src/components/ClearAll/ClearAll.d.ts +8 -0
  5. package/dist/src/components/ClearAll/ClearAll.js +29 -0
  6. package/dist/src/components/ClearAll/ClearAll.js.map +1 -0
  7. package/dist/src/components/ClearAll/index.d.ts +1 -0
  8. package/dist/src/components/{ReactifySearchBase → ClearAll}/index.js +1 -1
  9. package/dist/src/components/ClearAll/index.js.map +1 -0
  10. package/dist/src/components/CustomComponent/CustomComponent.d.ts +4 -0
  11. package/dist/src/components/CustomComponent/CustomComponent.js +13 -0
  12. package/dist/src/components/CustomComponent/CustomComponent.js.map +1 -0
  13. package/dist/src/components/CustomComponent/index.d.ts +1 -0
  14. package/dist/src/components/CustomComponent/index.js +14 -0
  15. package/dist/src/components/CustomComponent/index.js.map +1 -0
  16. package/dist/src/components/Example/ExampleClearAll.d.ts +4 -0
  17. package/dist/src/components/Example/ExampleClearAll.js +12 -0
  18. package/dist/src/components/Example/ExampleClearAll.js.map +1 -0
  19. package/dist/src/components/Example/ExampleFilterList.d.ts +5 -0
  20. package/dist/src/components/Example/ExampleFilterList.js +80 -9
  21. package/dist/src/components/Example/ExampleFilterList.js.map +1 -1
  22. package/dist/src/components/Example/ExampleFilterRange.js +6 -11
  23. package/dist/src/components/Example/ExampleFilterRange.js.map +1 -1
  24. package/dist/src/components/Example/ExampleFilterSlider.js +8 -9
  25. package/dist/src/components/Example/ExampleFilterSlider.js.map +1 -1
  26. package/dist/src/components/Example/ExampleFilters.d.ts +4 -0
  27. package/dist/src/components/Example/{ExampleFilterStack.js → ExampleFilters.js} +6 -5
  28. package/dist/src/components/Example/ExampleFilters.js.map +1 -0
  29. package/dist/src/components/Example/ExampleFiltersActive.d.ts +4 -0
  30. package/dist/src/components/Example/ExampleFiltersActive.js +23 -0
  31. package/dist/src/components/Example/ExampleFiltersActive.js.map +1 -0
  32. package/dist/src/components/Example/ExampleSortBy.d.ts +4 -0
  33. package/dist/src/components/Example/{ExampleSortby.js → ExampleSortBy.js} +4 -4
  34. package/dist/src/components/Example/{ExampleSortby.js.map → ExampleSortBy.js.map} +1 -1
  35. package/dist/src/components/Example/ExampleStats.d.ts +4 -0
  36. package/dist/src/components/Example/ExampleStats.js +15 -0
  37. package/dist/src/components/Example/ExampleStats.js.map +1 -0
  38. package/dist/src/components/Example/index.d.ts +5 -2
  39. package/dist/src/components/Example/index.js +5 -2
  40. package/dist/src/components/Example/index.js.map +1 -1
  41. package/dist/src/components/Filter/Filter.d.ts +3 -3
  42. package/dist/src/components/Filter/Filter.js +22 -10
  43. package/dist/src/components/Filter/Filter.js.map +1 -1
  44. package/dist/src/components/Filter/{FilterStack.d.ts → Filters.d.ts} +2 -2
  45. package/dist/src/components/Filter/{FilterStack.js → Filters.js} +7 -7
  46. package/dist/src/components/Filter/Filters.js.map +1 -0
  47. package/dist/src/components/Filter/FiltersActive.d.ts +16 -0
  48. package/dist/src/components/Filter/FiltersActive.js +36 -0
  49. package/dist/src/components/Filter/FiltersActive.js.map +1 -0
  50. package/dist/src/components/Filter/index.d.ts +2 -1
  51. package/dist/src/components/Filter/index.js +2 -1
  52. package/dist/src/components/Filter/index.js.map +1 -1
  53. package/dist/src/components/{ReactifySearchBase/ReactifySearchBase.d.ts → ReactifySearchProvider/ReactifySearchProvider.d.ts} +5 -9
  54. package/dist/src/components/{ReactifySearchBase/ReactifySearchBase.js → ReactifySearchProvider/ReactifySearchProvider.js} +12 -11
  55. package/dist/src/components/ReactifySearchProvider/ReactifySearchProvider.js.map +1 -0
  56. package/dist/src/components/ReactifySearchProvider/index.d.ts +1 -0
  57. package/dist/src/components/ReactifySearchProvider/index.js +14 -0
  58. package/dist/src/components/ReactifySearchProvider/index.js.map +1 -0
  59. package/dist/src/components/Result/{ResultStack.d.ts → Results.d.ts} +2 -2
  60. package/dist/src/components/Result/{ResultStack.js → Results.js} +43 -26
  61. package/dist/src/components/Result/Results.js.map +1 -0
  62. package/dist/src/components/Result/index.d.ts +1 -1
  63. package/dist/src/components/Result/index.js +1 -1
  64. package/dist/src/components/Result/index.js.map +1 -1
  65. package/dist/src/components/Sensor/SensorCollection.js +2 -2
  66. package/dist/src/components/Sensor/SensorCollection.js.map +1 -1
  67. package/dist/src/components/Sensor/SensorInventoryAvailable.js +1 -1
  68. package/dist/src/components/Sensor/SensorInventoryAvailable.js.map +1 -1
  69. package/dist/src/components/Sensor/SensorSort.js +13 -13
  70. package/dist/src/components/Sensor/SensorSort.js.map +1 -1
  71. package/dist/src/components/Sensor/Sensors.d.ts +3 -0
  72. package/dist/src/components/Sensor/{SensorStack.js → Sensors.js} +4 -4
  73. package/dist/src/components/Sensor/Sensors.js.map +1 -0
  74. package/dist/src/components/Sensor/index.d.ts +1 -1
  75. package/dist/src/components/Sensor/index.js +1 -1
  76. package/dist/src/components/Sensor/index.js.map +1 -1
  77. package/dist/src/components/SortBy/SortBy.d.ts +7 -0
  78. package/dist/src/components/{Sortby/Sortby.js → SortBy/SortBy.js} +7 -7
  79. package/dist/src/components/SortBy/SortBy.js.map +1 -0
  80. package/dist/src/components/SortBy/index.d.ts +1 -0
  81. package/dist/src/components/{Sortby → SortBy}/index.js +1 -1
  82. package/dist/src/components/{Sortby → SortBy}/index.js.map +1 -1
  83. package/dist/src/components/Stats/Stats.d.ts +7 -0
  84. package/dist/src/components/Stats/Stats.js +15 -0
  85. package/dist/src/components/Stats/Stats.js.map +1 -0
  86. package/dist/src/components/Stats/index.d.ts +1 -0
  87. package/dist/src/components/Stats/index.js +14 -0
  88. package/dist/src/components/Stats/index.js.map +1 -0
  89. package/dist/src/components/index.d.ts +5 -2
  90. package/dist/src/components/index.js +5 -2
  91. package/dist/src/components/index.js.map +1 -1
  92. package/dist/src/hooks/index.d.ts +4 -3
  93. package/dist/src/hooks/index.js +4 -3
  94. package/dist/src/hooks/index.js.map +1 -1
  95. package/dist/src/hooks/reactivesearch/useReactiveFilterRangeProps.d.ts +6 -1
  96. package/dist/src/hooks/reactivesearch/useReactiveFilterRangeProps.js +12 -1
  97. package/dist/src/hooks/reactivesearch/useReactiveFilterRangeProps.js.map +1 -1
  98. package/dist/src/hooks/reactivesearch/useReactiveFilterSliderProps.d.ts +5 -0
  99. package/dist/src/hooks/reactivesearch/useReactiveFilterSliderProps.js +9 -2
  100. package/dist/src/hooks/reactivesearch/useReactiveFilterSliderProps.js.map +1 -1
  101. package/dist/src/hooks/reactivesearch/useReactiveReactProp.js +4 -4
  102. package/dist/src/hooks/reactivesearch/useReactiveReactProp.js.map +1 -1
  103. package/dist/src/hooks/reactivesearch/useReactiveReactiveListProps.js +1 -1
  104. package/dist/src/hooks/reactivesearch/useReactiveReactiveListProps.js.map +1 -1
  105. package/dist/src/hooks/useConfig.js +1 -1
  106. package/dist/src/hooks/useConfig.js.map +1 -1
  107. package/dist/src/hooks/useCuration.js +2 -6
  108. package/dist/src/hooks/useCuration.js.map +1 -1
  109. package/dist/src/hooks/useFilterListProps.d.ts +2 -2
  110. package/dist/src/hooks/useFilterListProps.js +32 -2
  111. package/dist/src/hooks/useFilterListProps.js.map +1 -1
  112. package/dist/src/hooks/useFilterRangeProps.d.ts +10 -0
  113. package/dist/src/hooks/useFilterRangeProps.js +52 -0
  114. package/dist/src/hooks/useFilterRangeProps.js.map +1 -0
  115. package/dist/src/hooks/useFilterSliderProps.d.ts +12 -0
  116. package/dist/src/hooks/useFilterSliderProps.js +49 -0
  117. package/dist/src/hooks/useFilterSliderProps.js.map +1 -0
  118. package/dist/src/hooks/useFilters.d.ts +3 -2
  119. package/dist/src/hooks/useFilters.js +45 -11
  120. package/dist/src/hooks/useFilters.js.map +1 -1
  121. package/dist/src/hooks/usePaginationLoadMore.js +1 -1
  122. package/dist/src/hooks/usePaginationLoadMore.js.map +1 -1
  123. package/dist/src/hooks/useReactifySearchContext.d.ts +4 -12
  124. package/dist/src/hooks/useReactifySearchContext.js.map +1 -1
  125. package/dist/src/hooks/useSearch.d.ts +1 -1
  126. package/dist/src/hooks/useSearch.js +25 -5
  127. package/dist/src/hooks/useSearch.js.map +1 -1
  128. package/dist/src/hooks/{useSortby.d.ts → useSortBy.d.ts} +1 -1
  129. package/dist/src/hooks/{useSortby.js → useSortBy.js} +5 -7
  130. package/dist/src/hooks/useSortBy.js.map +1 -0
  131. package/dist/src/types/firestore.d.ts +3 -0
  132. package/dist/src/types/firestore.js.map +1 -1
  133. package/dist/src/types/reactivesearch.d.ts +1 -1
  134. package/dist/src/types/reactivesearch.js.map +1 -1
  135. package/dist/src/utility/debug.d.ts +3 -1
  136. package/dist/src/utility/debug.js +6 -2
  137. package/dist/src/utility/debug.js.map +1 -1
  138. package/package.json +1 -1
  139. package/dist/src/components/Example/ExampleFilterStack.d.ts +0 -4
  140. package/dist/src/components/Example/ExampleFilterStack.js.map +0 -1
  141. package/dist/src/components/Example/ExampleSortby.d.ts +0 -4
  142. package/dist/src/components/Filter/FilterStack.js.map +0 -1
  143. package/dist/src/components/ReactifySearchBase/ReactifySearchBase.js.map +0 -1
  144. package/dist/src/components/ReactifySearchBase/index.d.ts +0 -1
  145. package/dist/src/components/ReactifySearchBase/index.js.map +0 -1
  146. package/dist/src/components/Result/ResultStack.js.map +0 -1
  147. package/dist/src/components/Sensor/SensorStack.d.ts +0 -3
  148. package/dist/src/components/Sensor/SensorStack.js.map +0 -1
  149. package/dist/src/components/Sortby/Sortby.d.ts +0 -7
  150. package/dist/src/components/Sortby/Sortby.js.map +0 -1
  151. package/dist/src/components/Sortby/index.d.ts +0 -1
  152. package/dist/src/hooks/useFilterStack.d.ts +0 -4
  153. package/dist/src/hooks/useFilterStack.js +0 -52
  154. package/dist/src/hooks/useFilterStack.js.map +0 -1
  155. package/dist/src/hooks/useSortby.js.map +0 -1
@@ -4,15 +4,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.useSearch = void 0;
7
+ const ahooks_1 = require("ahooks");
7
8
  const react_1 = __importDefault(require("react"));
8
9
  const hooks_1 = require("../hooks");
9
10
  const utility_1 = require("../utility");
10
11
  const useSearch = () => {
11
12
  const { options, config, search } = (0, hooks_1.useReactifySearchContext)();
12
- const handleSubmitSearch = react_1.default.useCallback((searchQuery = search.searchQuery) => {
13
+ const handleSubmitSearchQuery = react_1.default.useCallback((searchQuery = search.searchQuery) => {
13
14
  utility_1.debug.breadcrumb({
14
15
  category: "search",
15
- message: "search submitted",
16
+ message: "search submit",
16
17
  data: {
17
18
  searchQuery: searchQuery,
18
19
  },
@@ -37,11 +38,30 @@ const useSearch = () => {
37
38
  window.location.href = `/search?q=${searchQuery}`;
38
39
  }
39
40
  }, [search.searchQuery]);
40
- utility_1.debug.hook("useSearch", "searchQuery", search.searchQuery);
41
+ const { run: runDebouncedBreadcrumb, cancel: cancelDebouncedBreadcrumb } = (0, ahooks_1.useDebounceFn)((searchQuery = search.searchQuery) => {
42
+ utility_1.debug.breadcrumb({
43
+ category: "search",
44
+ message: "search query",
45
+ data: {
46
+ searchQuery: searchQuery,
47
+ },
48
+ });
49
+ }, {
50
+ wait: 300,
51
+ });
52
+ const handleSetSearchQuery = react_1.default.useCallback((searchQuery = search.searchQuery) => {
53
+ if (searchQuery) {
54
+ runDebouncedBreadcrumb(searchQuery);
55
+ }
56
+ else {
57
+ cancelDebouncedBreadcrumb();
58
+ }
59
+ search.setSearchQuery(searchQuery);
60
+ }, [search.searchQuery]);
41
61
  return {
42
62
  searchQuery: search.searchQuery,
43
- setSearchQuery: search.setSearchQuery,
44
- submitSearch: handleSubmitSearch,
63
+ setSearchQuery: handleSetSearchQuery,
64
+ submitSearch: handleSubmitSearchQuery,
45
65
  showInstantSearchResults: !!search.instantSearchVisible && !!search.searchQuery,
46
66
  setShowInstantSearchResults: search.setInstantSearchVisible,
47
67
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useSearch.js","sourceRoot":"","sources":["../../../src/hooks/useSearch.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,oCAAoD;AACpD,wCAAmC;AAE5B,MAAM,SAAS,GAAG,GAMvB,EAAE;IACF,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,gCAAwB,GAAE,CAAC;IAE/D,MAAM,kBAAkB,GAAG,eAAK,CAAC,WAAW,CAC1C,CAAC,cAAsB,MAAM,CAAC,WAAW,EAAE,EAAE;QAC3C,eAAK,CAAC,UAAU,CAAC;YACf,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,kBAAkB;YAC3B,IAAI,EAAE;gBACJ,WAAW,EAAE,WAAW;aACzB;SACF,CAAC,CAAC;QAEH,eAAK,CAAC,GAAG,CAAC,WAAW,EAAE,qBAAqB,EAAE,WAAW,CAAC,CAAC;QAE3D,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO;SACR;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CACpC,CAAC,QAAQ,EAAE,EAAE,CACX,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CACnC,CAAC;QAEF,IAAI,QAAQ,EAAE;YACZ,eAAK,CAAC,GAAG,CAAC,WAAW,EAAE,wBAAwB,EAAE,QAAQ,CAAC,CAAC;SAC5D;QAED,MAAM,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;QAEtC,IAAI,OAAO,CAAC,UAAU,EAAE;YACtB,OAAO,CAAC,UAAU,CAChB,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,EAChC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,WAAW,EAAE,CACrD,CAAC;SACH;aAAM,IAAI,QAAQ,EAAE;YACnB,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC;SACrC;aAAM;YACL,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,aAAa,WAAW,EAAE,CAAC;SACnD;IACH,CAAC,EACD,CAAC,MAAM,CAAC,WAAW,CAAC,CACrB,CAAC;IAEF,eAAK,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAE3D,OAAO;QACL,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,YAAY,EAAE,kBAAkB;QAChC,wBAAwB,EACtB,CAAC,CAAC,MAAM,CAAC,oBAAoB,IAAI,CAAC,CAAC,MAAM,CAAC,WAAW;QACvD,2BAA2B,EAAE,MAAM,CAAC,uBAAuB;KAC5D,CAAC;AACJ,CAAC,CAAC;AA7DW,QAAA,SAAS,aA6DpB","sourcesContent":["import React from \"react\";\n\nimport { useReactifySearchContext } from \"../hooks\";\nimport { debug } from \"../utility\";\n\nexport const useSearch = (): {\n searchQuery: string;\n setSearchQuery: React.Dispatch<React.SetStateAction<string>>;\n submitSearch: (searchQuery?: string) => void;\n showInstantSearchResults: boolean;\n setShowInstantSearchResults: React.Dispatch<React.SetStateAction<boolean>>;\n} => {\n const { options, config, search } = useReactifySearchContext();\n\n const handleSubmitSearch = React.useCallback(\n (searchQuery: string = search.searchQuery) => {\n debug.breadcrumb({\n category: \"search\",\n message: \"search submitted\",\n data: {\n searchQuery: searchQuery,\n },\n });\n\n debug.log(\"useSearch\", \"submitSearch[query]\", searchQuery);\n\n if (!searchQuery) {\n return;\n }\n\n const redirect = config.redirects.find(\n (redirect) =>\n redirect.query.trim().toLowerCase() ===\n searchQuery.trim().toLowerCase()\n );\n\n if (redirect) {\n debug.log(\"useSearch\", \"submitSearch[redirect]\", redirect);\n }\n\n search.setInstantSearchVisible(false);\n\n if (options.onRedirect) {\n options.onRedirect(\n redirect ? \"redirect\" : \"search\",\n redirect ? redirect.url : `/search?q=${searchQuery}`\n );\n } else if (redirect) {\n window.location.href = redirect.url;\n } else {\n window.location.href = `/search?q=${searchQuery}`;\n }\n },\n [search.searchQuery]\n );\n\n debug.hook(\"useSearch\", \"searchQuery\", search.searchQuery);\n\n return {\n searchQuery: search.searchQuery,\n setSearchQuery: search.setSearchQuery,\n submitSearch: handleSubmitSearch,\n showInstantSearchResults:\n !!search.instantSearchVisible && !!search.searchQuery,\n setShowInstantSearchResults: search.setInstantSearchVisible,\n };\n};\n"]}
1
+ {"version":3,"file":"useSearch.js","sourceRoot":"","sources":["../../../src/hooks/useSearch.ts"],"names":[],"mappings":";;;;;;AAAA,mCAAuC;AACvC,kDAA0B;AAE1B,oCAAoD;AACpD,wCAAmC;AAE5B,MAAM,SAAS,GAAG,GAMvB,EAAE;IACF,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,gCAAwB,GAAE,CAAC;IAE/D,MAAM,uBAAuB,GAAG,eAAK,CAAC,WAAW,CAC/C,CAAC,cAAsB,MAAM,CAAC,WAAW,EAAE,EAAE;QAC3C,eAAK,CAAC,UAAU,CAAC;YACf,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,eAAe;YACxB,IAAI,EAAE;gBACJ,WAAW,EAAE,WAAW;aACzB;SACF,CAAC,CAAC;QAEH,eAAK,CAAC,GAAG,CAAC,WAAW,EAAE,qBAAqB,EAAE,WAAW,CAAC,CAAC;QAE3D,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO;SACR;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CACpC,CAAC,QAAQ,EAAE,EAAE,CACX,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CACnC,CAAC;QAEF,IAAI,QAAQ,EAAE;YACZ,eAAK,CAAC,GAAG,CAAC,WAAW,EAAE,wBAAwB,EAAE,QAAQ,CAAC,CAAC;SAC5D;QAED,MAAM,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;QAEtC,IAAI,OAAO,CAAC,UAAU,EAAE;YACtB,OAAO,CAAC,UAAU,CAChB,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,EAChC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,WAAW,EAAE,CACrD,CAAC;SACH;aAAM,IAAI,QAAQ,EAAE;YACnB,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC;SACrC;aAAM;YACL,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,aAAa,WAAW,EAAE,CAAC;SACnD;IACH,CAAC,EACD,CAAC,MAAM,CAAC,WAAW,CAAC,CACrB,CAAC;IAEF,MAAM,EAAE,GAAG,EAAE,sBAAsB,EAAE,MAAM,EAAE,yBAAyB,EAAE,GACtE,IAAA,sBAAa,EACX,CAAC,cAAsB,MAAM,CAAC,WAAW,EAAE,EAAE;QAC3C,eAAK,CAAC,UAAU,CAAC;YACf,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,cAAc;YACvB,IAAI,EAAE;gBACJ,WAAW,EAAE,WAAW;aACzB;SACF,CAAC,CAAC;IACL,CAAC,EACD;QACE,IAAI,EAAE,GAAG;KACV,CACF,CAAC;IAEJ,MAAM,oBAAoB,GAAG,eAAK,CAAC,WAAW,CAC5C,CAAC,cAAsB,MAAM,CAAC,WAAW,EAAE,EAAE;QAC3C,IAAI,WAAW,EAAE;YACf,sBAAsB,CAAC,WAAW,CAAC,CAAC;SACrC;aAAM;YACL,yBAAyB,EAAE,CAAC;SAC7B;QAED,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC,EACD,CAAC,MAAM,CAAC,WAAW,CAAC,CACrB,CAAC;IAEF,OAAO;QACL,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,cAAc,EAAE,oBAAoB;QACpC,YAAY,EAAE,uBAAuB;QACrC,wBAAwB,EACtB,CAAC,CAAC,MAAM,CAAC,oBAAoB,IAAI,CAAC,CAAC,MAAM,CAAC,WAAW;QACvD,2BAA2B,EAAE,MAAM,CAAC,uBAAuB;KAC5D,CAAC;AACJ,CAAC,CAAC;AAxFW,QAAA,SAAS,aAwFpB","sourcesContent":["import { useDebounceFn } from \"ahooks\";\nimport React from \"react\";\n\nimport { useReactifySearchContext } from \"../hooks\";\nimport { debug } from \"../utility\";\n\nexport const useSearch = (): {\n searchQuery: string;\n setSearchQuery: (searchQuery?: string) => void;\n submitSearch: (searchQuery?: string) => void;\n showInstantSearchResults: boolean;\n setShowInstantSearchResults: React.Dispatch<React.SetStateAction<boolean>>;\n} => {\n const { options, config, search } = useReactifySearchContext();\n\n const handleSubmitSearchQuery = React.useCallback(\n (searchQuery: string = search.searchQuery) => {\n debug.breadcrumb({\n category: \"search\",\n message: \"search submit\",\n data: {\n searchQuery: searchQuery,\n },\n });\n\n debug.log(\"useSearch\", \"submitSearch[query]\", searchQuery);\n\n if (!searchQuery) {\n return;\n }\n\n const redirect = config.redirects.find(\n (redirect) =>\n redirect.query.trim().toLowerCase() ===\n searchQuery.trim().toLowerCase()\n );\n\n if (redirect) {\n debug.log(\"useSearch\", \"submitSearch[redirect]\", redirect);\n }\n\n search.setInstantSearchVisible(false);\n\n if (options.onRedirect) {\n options.onRedirect(\n redirect ? \"redirect\" : \"search\",\n redirect ? redirect.url : `/search?q=${searchQuery}`\n );\n } else if (redirect) {\n window.location.href = redirect.url;\n } else {\n window.location.href = `/search?q=${searchQuery}`;\n }\n },\n [search.searchQuery]\n );\n\n const { run: runDebouncedBreadcrumb, cancel: cancelDebouncedBreadcrumb } =\n useDebounceFn(\n (searchQuery: string = search.searchQuery) => {\n debug.breadcrumb({\n category: \"search\",\n message: \"search query\",\n data: {\n searchQuery: searchQuery,\n },\n });\n },\n {\n wait: 300,\n }\n );\n\n const handleSetSearchQuery = React.useCallback(\n (searchQuery: string = search.searchQuery) => {\n if (searchQuery) {\n runDebouncedBreadcrumb(searchQuery);\n } else {\n cancelDebouncedBreadcrumb();\n }\n\n search.setSearchQuery(searchQuery);\n },\n [search.searchQuery]\n );\n\n return {\n searchQuery: search.searchQuery,\n setSearchQuery: handleSetSearchQuery,\n submitSearch: handleSubmitSearchQuery,\n showInstantSearchResults:\n !!search.instantSearchVisible && !!search.searchQuery,\n setShowInstantSearchResults: search.setInstantSearchVisible,\n };\n};\n"]}
@@ -1,5 +1,5 @@
1
1
  import { ConfigSort } from "../types";
2
- export declare const useSortby: () => {
2
+ export declare const useSortBy: () => {
3
3
  sortOption: ConfigSort | undefined;
4
4
  sortOptions: Array<ConfigSort>;
5
5
  setSortOption: (sortOptionHandle: string, ignoreHistoryState?: boolean | undefined) => void;
@@ -3,11 +3,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.useSortby = void 0;
6
+ exports.useSortBy = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  const hooks_1 = require("../hooks");
9
9
  const utility_1 = require("../utility");
10
- const useSortby = () => {
10
+ const useSortBy = () => {
11
11
  const { options, config, sortby } = (0, hooks_1.useReactifySearchContext)();
12
12
  const { track } = (0, hooks_1.useAnalytics)();
13
13
  const sortOptions = react_1.default.useMemo(() => {
@@ -27,7 +27,7 @@ const useSortby = () => {
27
27
  sortOptionHandle: sortOptionHandle,
28
28
  },
29
29
  });
30
- utility_1.debug.log("useSortby", "setSortOption[sortOptionHandle]", sortOptionHandle);
30
+ utility_1.debug.log("useSortBy", "setSortOption[sortOptionHandle]", sortOptionHandle);
31
31
  sortby.setSortOption(sortOptionHandle);
32
32
  if (!ignoreHistoryState) {
33
33
  const url = new URL(window.location.href);
@@ -46,13 +46,11 @@ const useSortby = () => {
46
46
  },
47
47
  });
48
48
  }, [window.location.href]);
49
- utility_1.debug.hook("useSortBy", "sortOption", sortOption);
50
- utility_1.debug.hook("useSortBy", "sortOptions", sortOptions);
51
49
  return {
52
50
  sortOptions,
53
51
  sortOption,
54
52
  setSortOption,
55
53
  };
56
54
  };
57
- exports.useSortby = useSortby;
58
- //# sourceMappingURL=useSortby.js.map
55
+ exports.useSortBy = useSortBy;
56
+ //# sourceMappingURL=useSortBy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSortBy.js","sourceRoot":"","sources":["../../../src/hooks/useSortBy.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAG1B,oCAAkE;AAClE,wCAAmC;AAE5B,MAAM,SAAS,GAAG,GAOvB,EAAE;IACF,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,gCAAwB,GAAE,CAAC;IAC/D,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,oBAAY,GAAE,CAAC;IAEjC,MAAM,WAAW,GAAG,eAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACrC,OAAO,MAAM,CAAC,IAAI;aACf,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;aAC9D,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAC5E,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAE3B,MAAM,UAAU,GAAG,eAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACpC,OAAO,CACL,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,KAAK,MAAM,CAAC,UAAU,CAAC;YAC9D,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;IACJ,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IAErC,MAAM,aAAa,GAAG,eAAK,CAAC,WAAW,CACrC,CAAC,gBAAwB,EAAE,kBAAkB,GAAG,KAAK,EAAE,EAAE;QACvD,eAAK,CAAC,UAAU,CAAC;YACf,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,qBAAqB;YAC9B,IAAI,EAAE;gBACJ,gBAAgB,EAAE,gBAAgB;aACnC;SACF,CAAC,CAAC;QAEH,eAAK,CAAC,GAAG,CACP,WAAW,EACX,iCAAiC,EACjC,gBAAgB,CACjB,CAAC;QAEF,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;QAEvC,IAAI,CAAC,kBAAkB,EAAE;YACvB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;gBAChC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;aAChD;iBAAM;gBACL,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;aACnD;YACD,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;SAClD;QAED,KAAK,CAAC;YACJ,SAAS,EAAE,YAAY;YACvB,OAAO,EAAE;gBACP,IAAI,EAAE,gBAAgB;aACvB;SACF,CAAC,CAAC;IACL,CAAC,EACD,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CACvB,CAAC;IAEF,OAAO;QACL,WAAW;QACX,UAAU;QACV,aAAa;KACd,CAAC;AACJ,CAAC,CAAC;AAnEW,QAAA,SAAS,aAmEpB","sourcesContent":["import React from \"react\";\n\nimport { ConfigSort } from \"../types\";\nimport { useAnalytics, useReactifySearchContext } from \"../hooks\";\nimport { debug } from \"../utility\";\n\nexport const useSortBy = (): {\n sortOption: ConfigSort | undefined;\n sortOptions: Array<ConfigSort>;\n setSortOption: (\n sortOptionHandle: string,\n ignoreHistoryState?: boolean\n ) => void;\n} => {\n const { options, config, sortby } = useReactifySearchContext();\n const { track } = useAnalytics();\n\n const sortOptions = React.useMemo(() => {\n return config.sort\n .sort((a, b) => `${a.position}`.localeCompare(`${b.position}`))\n .filter(({ visibility }) => [\"all\", options.mode].includes(visibility));\n }, [options.mode, config]);\n\n const sortOption = React.useMemo(() => {\n return (\n sortOptions.find(({ handle }) => handle === sortby.sortOption) ||\n sortOptions[0]\n );\n }, [sortOptions, sortby.sortOption]);\n\n const setSortOption = React.useCallback(\n (sortOptionHandle: string, ignoreHistoryState = false) => {\n debug.breadcrumb({\n category: \"sort\",\n message: \"sort option changed\",\n data: {\n sortOptionHandle: sortOptionHandle,\n },\n });\n\n debug.log(\n \"useSortBy\",\n \"setSortOption[sortOptionHandle]\",\n sortOptionHandle\n );\n\n sortby.setSortOption(sortOptionHandle);\n\n if (!ignoreHistoryState) {\n const url = new URL(window.location.href);\n if (url.searchParams.has(\"sort\")) {\n url.searchParams.set(\"sort\", sortOptionHandle);\n } else {\n url.searchParams.append(\"sort\", sortOptionHandle);\n }\n window.history.pushState({}, \"\", url.toString());\n }\n\n track({\n eventName: \"sortChange\",\n payload: {\n type: sortOptionHandle,\n },\n });\n },\n [window.location.href]\n );\n\n return {\n sortOptions,\n sortOption,\n setSortOption,\n };\n};\n"]}
@@ -131,6 +131,9 @@ export interface FilterOption {
131
131
  displaySize: string;
132
132
  displaySliderInterval: string;
133
133
  displaySliderStep: string;
134
+ displaySliderPrefix?: string;
135
+ displaySliderSuffix?: string;
136
+ displayRangeOptions?: Array<string>;
134
137
  displayType: "multi" | "single" | "range" | "slider";
135
138
  displayView: "list" | "check" | "swatch" | "box";
136
139
  enabled: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"firestore.js","sourceRoot":"","sources":["../../../src/types/firestore.ts"],"names":[],"mappings":";;;AA+NA,IAAY,cAQX;AARD,WAAY,cAAc;IACxB,iCAAe,CAAA;IACf,2CAAyB,CAAA;IACzB,yCAAuB,CAAA;IACvB,+CAA6B,CAAA;IAC7B,yCAAuB,CAAA;IACvB,qCAAmB,CAAA;IACnB,qCAAmB,CAAA;AACrB,CAAC,EARW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAQzB;AAyBD,IAAY,OAGX;AAHD,WAAY,OAAO;IACjB,8BAAmB,CAAA;IACnB,8BAAmB,CAAA;AACrB,CAAC,EAHW,OAAO,GAAP,eAAO,KAAP,eAAO,QAGlB","sourcesContent":["// @todo this is so we don't need to import firebase\ntype Timestamp = string;\n\nimport { ShopifyProduct } from \"./shopify\";\nimport { ElasticDataType } from \"./elastic\";\n\nexport interface Log {\n id: string;\n keywords: string[];\n message: string;\n platform: \"reactify\" | \"shopify\" | \"elastic\";\n percentCompleted: number;\n action?: {\n type: \"retry\";\n label: string;\n task: Task[\"taskId\"];\n };\n step:\n | \"download\"\n | \"transform\"\n | \"merge\"\n | \"upload\"\n | \"cleanup\"\n | \"complete\"\n | \"sync\";\n title: string;\n type: \"bulk\";\n data?: string; // JSON sringified data\n progress: \"new\" | \"error\" | \"complete\" | \"partiallyComplete\";\n status: \"success\" | \"info\" | \"warning\" | \"critical\"; // polaris banner status\n createdAt: Timestamp;\n updatedAt?: Timestamp;\n finishedAt?: Timestamp;\n}\n\nexport interface Task {\n logId: string;\n taskId:\n | \"download\"\n | \"transform\"\n | \"merge\"\n | \"upload\"\n | \"cleanup\"\n | \"refreshDefinedFields\"\n | \"install\";\n firstRun: boolean;\n createdAt: Timestamp;\n updatedAt?: Timestamp;\n}\n\nexport interface TaskDownload extends Task {\n taskId: \"download\";\n type: \"collection\" | \"product\";\n productUrl?: string;\n collectionUrl?: string;\n}\n\nexport interface TaskTransform extends Task {\n taskId: \"transform\";\n productUrl: string;\n collectionUrl: string;\n}\n\nexport interface TaskMerge extends Task {\n taskId: \"merge\";\n productCount: number;\n collectionCount: number;\n startAfterId?: string;\n}\n\nexport interface TaskUpload extends Task {\n taskId: \"upload\";\n productCount: number;\n collectionCount: number;\n startAfterId?: string;\n}\n\nexport interface TaskCleanup extends Task {\n taskId: \"cleanup\";\n}\n\nexport interface TaskRefreshDefinedFields extends Task {\n taskId: \"refreshDefinedFields\";\n}\n\nexport interface TaskInstall extends Task {\n taskId: \"install\";\n}\n\nexport interface Lock {\n logId: string;\n taskType: \"sync\";\n createdAt: Timestamp;\n}\n\nexport interface SettingsInstance {\n index: string;\n cloudId: string;\n endpoint: string;\n password: string;\n username: string;\n syncFrequency: string;\n syncThreshold: number;\n provider: \"elastic\" | \"aws\";\n storefrontAccessToken: string;\n customMappings: string; // JSON sringified data\n}\n\nexport interface SettingsProduct {\n tagChild?: string;\n tagKeys?: string[];\n tagParent?: string;\n syncObjects: string[];\n tagExclude?: string[];\n tagSeparator?: string;\n metafieldWhitelist?: string[];\n}\n\nexport interface SettingsCurations {\n moreInfo?: boolean;\n pageSize?: number;\n gridColumns?: number;\n}\n\nexport interface Field {\n id: string;\n field: string;\n enabled: boolean;\n importance: number;\n searchType: \"always_search\" | \"search_page\" | \"instant_search\";\n}\n\nexport interface DefinedField {\n label: string;\n value: string;\n type: ElasticDataType;\n}\n\nexport interface Sort {\n id: string;\n name: string;\n handle: string;\n field: string;\n position: number;\n enabled: boolean;\n direction: \"desc\" | \"asc\";\n visibility: \"all\" | \"search\" | \"collection\";\n}\n\nexport interface Filter {\n id: string;\n name: string;\n handle: string;\n enabled: boolean;\n pageSize: number;\n keywords: string[];\n defaultSort: string;\n collections: string[];\n type: \"search\" | \"collection\";\n paginationType: \"pagination\" | \"load_more\" | \"next_prev\" | \"infinite_scroll\";\n inventoryVisibility:\n | \"show_all\"\n | \"hide_products\"\n | \"hide_variants\"\n | \"hide_all\";\n}\n\nexport interface FilterOption {\n displaySize: string;\n displaySliderInterval: string;\n displaySliderStep: string;\n displayType: \"multi\" | \"single\" | \"range\" | \"slider\";\n displayView: \"list\" | \"check\" | \"swatch\" | \"box\";\n enabled: boolean;\n field: string;\n id: string;\n name: string;\n handle: string;\n position: number;\n settingsCollapsedDesktop: boolean;\n settingsCollapsedMobile: boolean;\n settingsShowFilter: boolean;\n settingsShowMore: boolean;\n settingsShowSearch: boolean;\n settingsUppercase: boolean;\n settingsHideUnavailable: boolean;\n valuesExclude: Array<string>;\n valuesManual: Array<string>;\n valuesShow: \"all\" | \"manual\";\n}\n\nexport interface Redirect {\n id: string;\n url: string;\n query: string;\n enabled: boolean;\n keywords: string[];\n}\n\nexport interface Curation {\n id: string;\n title: string;\n status: CurationStatus;\n published: boolean;\n keywords: string[];\n searchTerm?: string;\n longRunningTask?: boolean;\n collectionHandle?: string;\n type: \"collection\" | \"search\";\n boosting?: {\n groupings?: BoostGrouping[];\n sortings?: BoostSorting[];\n };\n sort?: CurationSort;\n}\n\nexport interface CurationSort {\n sortTag?: string;\n sortOption: string;\n sortDirection: \"asc\" | \"desc\";\n sortVariantOption?: \"option1\" | \"option2\" | \"option3\";\n}\n\nexport enum CurationStatus {\n Draft = \"draft\",\n Publishing = \"publishing\",\n Published = \"published\",\n Unpublishing = \"unpublishing\",\n Resetting = \"resetting\",\n Pinning = \"pinning\",\n Sorting = \"sorting\",\n}\n\nexport interface CurationHiding {\n productId: number;\n productHandle: string;\n}\n\nexport interface BoostGrouping {\n key: string;\n value: string;\n field: string;\n position: number;\n operation: string;\n}\n\nexport interface BoostSorting {\n key: string;\n field: string;\n query?: string;\n position: number;\n direction: \"asc\" | \"desc\";\n}\n\nexport type Pin = PinProduct | PinCallout;\n\nexport enum PinType {\n Product = \"product\",\n Callout = \"callout\",\n}\n\nexport interface PinProduct {\n key: string;\n type: PinType.Product;\n position: number;\n productId: number;\n productHandle: string;\n}\n\nexport interface PinCallout {\n key: string;\n type: PinType.Callout;\n position: number;\n calloutId: string;\n}\n\nexport interface Callout {\n id: string;\n link: string;\n title: string;\n content: string;\n enabled: boolean;\n textColor: string;\n keywords: string[];\n mobileImage: string;\n mobileVideo: string;\n desktopVideo: string;\n desktopImage: string;\n backgroundColor: string;\n visibility: \"desktop\" | \"mobile\" | \"all\";\n displayColumns: string; // @todo this should be a number\n displayRows: string; // @todo this should be a number\n selectedDates?: {\n end: Timestamp;\n start: Timestamp;\n };\n}\n\nexport interface Synonym {\n id: string;\n name: string;\n enabled: boolean;\n keywords: string[];\n synonyms: string[];\n type: \"group\" | \"oneway\";\n}\n\nexport interface MergedValue {\n id: string;\n name: string;\n field: string;\n keywords: string[];\n values: string[];\n}\n\nexport interface Collection {\n title: string;\n handle: string;\n shopifyId: string;\n productIds: string[];\n storefrontId: string;\n legacyResourceId: number;\n}\n\n// product is the shopify product with edges and nodes normalised\nexport type Product = Omit<\n ShopifyProduct,\n \"variants\" | \"images\" | \"media\" | \"metafields\"\n> & {\n variants: (Omit<\n ShopifyProduct[\"variants\"][\"edges\"][0][\"node\"],\n \"presentmentPrices\"\n > & {\n images?: ShopifyProduct[\"images\"][\"edges\"][0][\"node\"][]; // from child product if this variant is from a child\n presentmentPrices: ShopifyProduct[\"variants\"][\"edges\"][0][\"node\"][\"presentmentPrices\"][\"edges\"][0][\"node\"][];\n })[];\n images: ShopifyProduct[\"images\"][\"edges\"][0][\"node\"][];\n media: ShopifyProduct[\"media\"][\"edges\"][0][\"node\"][];\n metafields: ShopifyProduct[\"metafields\"][\"edges\"][0][\"node\"][];\n};\n"]}
1
+ {"version":3,"file":"firestore.js","sourceRoot":"","sources":["../../../src/types/firestore.ts"],"names":[],"mappings":";;;AAkOA,IAAY,cAQX;AARD,WAAY,cAAc;IACxB,iCAAe,CAAA;IACf,2CAAyB,CAAA;IACzB,yCAAuB,CAAA;IACvB,+CAA6B,CAAA;IAC7B,yCAAuB,CAAA;IACvB,qCAAmB,CAAA;IACnB,qCAAmB,CAAA;AACrB,CAAC,EARW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAQzB;AAyBD,IAAY,OAGX;AAHD,WAAY,OAAO;IACjB,8BAAmB,CAAA;IACnB,8BAAmB,CAAA;AACrB,CAAC,EAHW,OAAO,GAAP,eAAO,KAAP,eAAO,QAGlB","sourcesContent":["// @todo this is so we don't need to import firebase\ntype Timestamp = string;\n\nimport { ShopifyProduct } from \"./shopify\";\nimport { ElasticDataType } from \"./elastic\";\n\nexport interface Log {\n id: string;\n keywords: string[];\n message: string;\n platform: \"reactify\" | \"shopify\" | \"elastic\";\n percentCompleted: number;\n action?: {\n type: \"retry\";\n label: string;\n task: Task[\"taskId\"];\n };\n step:\n | \"download\"\n | \"transform\"\n | \"merge\"\n | \"upload\"\n | \"cleanup\"\n | \"complete\"\n | \"sync\";\n title: string;\n type: \"bulk\";\n data?: string; // JSON sringified data\n progress: \"new\" | \"error\" | \"complete\" | \"partiallyComplete\";\n status: \"success\" | \"info\" | \"warning\" | \"critical\"; // polaris banner status\n createdAt: Timestamp;\n updatedAt?: Timestamp;\n finishedAt?: Timestamp;\n}\n\nexport interface Task {\n logId: string;\n taskId:\n | \"download\"\n | \"transform\"\n | \"merge\"\n | \"upload\"\n | \"cleanup\"\n | \"refreshDefinedFields\"\n | \"install\";\n firstRun: boolean;\n createdAt: Timestamp;\n updatedAt?: Timestamp;\n}\n\nexport interface TaskDownload extends Task {\n taskId: \"download\";\n type: \"collection\" | \"product\";\n productUrl?: string;\n collectionUrl?: string;\n}\n\nexport interface TaskTransform extends Task {\n taskId: \"transform\";\n productUrl: string;\n collectionUrl: string;\n}\n\nexport interface TaskMerge extends Task {\n taskId: \"merge\";\n productCount: number;\n collectionCount: number;\n startAfterId?: string;\n}\n\nexport interface TaskUpload extends Task {\n taskId: \"upload\";\n productCount: number;\n collectionCount: number;\n startAfterId?: string;\n}\n\nexport interface TaskCleanup extends Task {\n taskId: \"cleanup\";\n}\n\nexport interface TaskRefreshDefinedFields extends Task {\n taskId: \"refreshDefinedFields\";\n}\n\nexport interface TaskInstall extends Task {\n taskId: \"install\";\n}\n\nexport interface Lock {\n logId: string;\n taskType: \"sync\";\n createdAt: Timestamp;\n}\n\nexport interface SettingsInstance {\n index: string;\n cloudId: string;\n endpoint: string;\n password: string;\n username: string;\n syncFrequency: string;\n syncThreshold: number;\n provider: \"elastic\" | \"aws\";\n storefrontAccessToken: string;\n customMappings: string; // JSON sringified data\n}\n\nexport interface SettingsProduct {\n tagChild?: string;\n tagKeys?: string[];\n tagParent?: string;\n syncObjects: string[];\n tagExclude?: string[];\n tagSeparator?: string;\n metafieldWhitelist?: string[];\n}\n\nexport interface SettingsCurations {\n moreInfo?: boolean;\n pageSize?: number;\n gridColumns?: number;\n}\n\nexport interface Field {\n id: string;\n field: string;\n enabled: boolean;\n importance: number;\n searchType: \"always_search\" | \"search_page\" | \"instant_search\";\n}\n\nexport interface DefinedField {\n label: string;\n value: string;\n type: ElasticDataType;\n}\n\nexport interface Sort {\n id: string;\n name: string;\n handle: string;\n field: string;\n position: number;\n enabled: boolean;\n direction: \"desc\" | \"asc\";\n visibility: \"all\" | \"search\" | \"collection\";\n}\n\nexport interface Filter {\n id: string;\n name: string;\n handle: string;\n enabled: boolean;\n pageSize: number;\n keywords: string[];\n defaultSort: string;\n collections: string[];\n type: \"search\" | \"collection\";\n paginationType: \"pagination\" | \"load_more\" | \"next_prev\" | \"infinite_scroll\";\n inventoryVisibility:\n | \"show_all\"\n | \"hide_products\"\n | \"hide_variants\"\n | \"hide_all\";\n}\n\nexport interface FilterOption {\n displaySize: string;\n displaySliderInterval: string;\n displaySliderStep: string;\n displaySliderPrefix?: string;\n displaySliderSuffix?: string;\n displayRangeOptions?: Array<string>; // formatted like \"<label>:<start>:<end>\"\n displayType: \"multi\" | \"single\" | \"range\" | \"slider\";\n displayView: \"list\" | \"check\" | \"swatch\" | \"box\";\n enabled: boolean;\n field: string;\n id: string;\n name: string;\n handle: string;\n position: number;\n settingsCollapsedDesktop: boolean;\n settingsCollapsedMobile: boolean;\n settingsShowFilter: boolean;\n settingsShowMore: boolean;\n settingsShowSearch: boolean;\n settingsUppercase: boolean;\n settingsHideUnavailable: boolean;\n valuesExclude: Array<string>;\n valuesManual: Array<string>;\n valuesShow: \"all\" | \"manual\";\n}\n\nexport interface Redirect {\n id: string;\n url: string;\n query: string;\n enabled: boolean;\n keywords: string[];\n}\n\nexport interface Curation {\n id: string;\n title: string;\n status: CurationStatus;\n published: boolean;\n keywords: string[];\n searchTerm?: string;\n longRunningTask?: boolean;\n collectionHandle?: string;\n type: \"collection\" | \"search\";\n boosting?: {\n groupings?: BoostGrouping[];\n sortings?: BoostSorting[];\n };\n sort?: CurationSort;\n}\n\nexport interface CurationSort {\n sortTag?: string;\n sortOption: string;\n sortDirection: \"asc\" | \"desc\";\n sortVariantOption?: \"option1\" | \"option2\" | \"option3\";\n}\n\nexport enum CurationStatus {\n Draft = \"draft\",\n Publishing = \"publishing\",\n Published = \"published\",\n Unpublishing = \"unpublishing\",\n Resetting = \"resetting\",\n Pinning = \"pinning\",\n Sorting = \"sorting\",\n}\n\nexport interface CurationHiding {\n productId: number;\n productHandle: string;\n}\n\nexport interface BoostGrouping {\n key: string;\n value: string;\n field: string;\n position: number;\n operation: string;\n}\n\nexport interface BoostSorting {\n key: string;\n field: string;\n query?: string;\n position: number;\n direction: \"asc\" | \"desc\";\n}\n\nexport type Pin = PinProduct | PinCallout;\n\nexport enum PinType {\n Product = \"product\",\n Callout = \"callout\",\n}\n\nexport interface PinProduct {\n key: string;\n type: PinType.Product;\n position: number;\n productId: number;\n productHandle: string;\n}\n\nexport interface PinCallout {\n key: string;\n type: PinType.Callout;\n position: number;\n calloutId: string;\n}\n\nexport interface Callout {\n id: string;\n link: string;\n title: string;\n content: string;\n enabled: boolean;\n textColor: string;\n keywords: string[];\n mobileImage: string;\n mobileVideo: string;\n desktopVideo: string;\n desktopImage: string;\n backgroundColor: string;\n visibility: \"desktop\" | \"mobile\" | \"all\";\n displayColumns: string; // @todo this should be a number\n displayRows: string; // @todo this should be a number\n selectedDates?: {\n end: Timestamp;\n start: Timestamp;\n };\n}\n\nexport interface Synonym {\n id: string;\n name: string;\n enabled: boolean;\n keywords: string[];\n synonyms: string[];\n type: \"group\" | \"oneway\";\n}\n\nexport interface MergedValue {\n id: string;\n name: string;\n field: string;\n keywords: string[];\n values: string[];\n}\n\nexport interface Collection {\n title: string;\n handle: string;\n shopifyId: string;\n productIds: string[];\n storefrontId: string;\n legacyResourceId: number;\n}\n\n// product is the shopify product with edges and nodes normalised\nexport type Product = Omit<\n ShopifyProduct,\n \"variants\" | \"images\" | \"media\" | \"metafields\"\n> & {\n variants: (Omit<\n ShopifyProduct[\"variants\"][\"edges\"][0][\"node\"],\n \"presentmentPrices\"\n > & {\n images?: ShopifyProduct[\"images\"][\"edges\"][0][\"node\"][]; // from child product if this variant is from a child\n presentmentPrices: ShopifyProduct[\"variants\"][\"edges\"][0][\"node\"][\"presentmentPrices\"][\"edges\"][0][\"node\"][];\n })[];\n images: ShopifyProduct[\"images\"][\"edges\"][0][\"node\"][];\n media: ShopifyProduct[\"media\"][\"edges\"][0][\"node\"][];\n metafields: ShopifyProduct[\"metafields\"][\"edges\"][0][\"node\"][];\n};\n"]}
@@ -1,5 +1,5 @@
1
1
  import { ElasticDocument, ElasticHit } from "./elastic";
2
- export interface ReactivesearchFilterProps {
2
+ export interface ReactivesearchFilterListProps {
3
3
  loading: boolean;
4
4
  error: Error | null;
5
5
  handleChange: (value: string) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"reactivesearch.js","sourceRoot":"","sources":["../../../src/types/reactivesearch.ts"],"names":[],"mappings":"","sourcesContent":["import { ElasticDocument, ElasticHit } from \"./elastic\";\n\n// props passed to SingleList/MultiList.render\nexport interface ReactivesearchFilterProps {\n loading: boolean;\n error: Error | null;\n handleChange: (value: string) => void;\n data: { doc_count: number; key: string }[];\n value: string | { [key: string]: boolean };\n}\n\n// props passed to ReactiveList.renderPagination\nexport interface ReactivesearchPaginationProps {\n pages: number;\n showEndPage: false;\n totalPages: number;\n currentPage: number;\n setPage: (page: number) => void;\n}\n\n// props passed to ReactiveList.render\n// @todo complete missing types\nexport interface ReactivesearchResultProps {\n error?: ReactivesearchError;\n loading: boolean;\n data: (Omit<ElasticHit, \"_source\"> & ElasticDocument)[];\n loadMore: () => void;\n customData: unknown;\n promotedData: unknown;\n aggregationData: unknown;\n rawData?: {\n _shards: {\n failed: number;\n skipped: number;\n successful: number;\n total: number;\n };\n took: number;\n status: number;\n timed_out: boolean;\n hits: ElasticHit[];\n };\n resultStats: {\n time: number;\n hidden: number;\n promoted: number;\n currentPage: number;\n numberOfPages: number;\n numberOfResults?: number;\n displayedResults: number;\n };\n streamData: unknown;\n triggerAnalytics: unknown;\n triggerClickAnalytics: unknown;\n}\n\n// state for the \"page\" component returned by StateProvider when given the keys: [\"isLoading\", \"hits\", \"resultStats\", \"error\"]\nexport interface ReactivesearchSearchStatePage {\n isLoading: boolean;\n hits: {\n hidden: number;\n time: number;\n total: number;\n hits: ElasticHit[];\n };\n resultStats: {\n hidden: number;\n numberOfResults?: number;\n promoted: number;\n time: number;\n };\n error?: ReactivesearchError;\n}\n\nexport interface ReactivesearchError {\n status: number;\n statusText: string;\n}\n"]}
1
+ {"version":3,"file":"reactivesearch.js","sourceRoot":"","sources":["../../../src/types/reactivesearch.ts"],"names":[],"mappings":"","sourcesContent":["import { ElasticDocument, ElasticHit } from \"./elastic\";\n\n// props passed to SingleList/MultiList.render\nexport interface ReactivesearchFilterListProps {\n loading: boolean;\n error: Error | null;\n handleChange: (value: string) => void;\n data: { doc_count: number; key: string }[];\n value: string | { [key: string]: boolean };\n}\n\n// props passed to ReactiveList.renderPagination\nexport interface ReactivesearchPaginationProps {\n pages: number;\n showEndPage: false;\n totalPages: number;\n currentPage: number;\n setPage: (page: number) => void;\n}\n\n// props passed to ReactiveList.render\n// @todo complete missing types\nexport interface ReactivesearchResultProps {\n error?: ReactivesearchError;\n loading: boolean;\n data: (Omit<ElasticHit, \"_source\"> & ElasticDocument)[];\n loadMore: () => void;\n customData: unknown;\n promotedData: unknown;\n aggregationData: unknown;\n rawData?: {\n _shards: {\n failed: number;\n skipped: number;\n successful: number;\n total: number;\n };\n took: number;\n status: number;\n timed_out: boolean;\n hits: ElasticHit[];\n };\n resultStats: {\n time: number;\n hidden: number;\n promoted: number;\n currentPage: number;\n numberOfPages: number;\n numberOfResults?: number;\n displayedResults: number;\n };\n streamData: unknown;\n triggerAnalytics: unknown;\n triggerClickAnalytics: unknown;\n}\n\n// state for the \"page\" component returned by StateProvider when given the keys: [\"isLoading\", \"hits\", \"resultStats\", \"error\"]\nexport interface ReactivesearchSearchStatePage {\n isLoading: boolean;\n hits: {\n hidden: number;\n time: number;\n total: number;\n hits: ElasticHit[];\n };\n resultStats: {\n hidden: number;\n numberOfResults?: number;\n promoted: number;\n time: number;\n };\n error?: ReactivesearchError;\n}\n\nexport interface ReactivesearchError {\n status: number;\n statusText: string;\n}\n"]}
@@ -1,10 +1,12 @@
1
+ import Debug from "debug";
1
2
  import * as Sentry from "@sentry/react";
3
+ export declare const debuggers: Record<string, Debug.Debugger>;
2
4
  export declare const debug: {
3
5
  namespace: string;
4
6
  log: (namespace: string, formatter?: string | undefined, ...args: Array<any>) => void;
5
7
  breadcrumb: (breadcrumb: Partial<Sentry.Breadcrumb> & {
6
8
  message: string;
7
- category: "search" | "sort" | "pagination" | "filter" | "curation";
9
+ category: "result" | "search" | "sort" | "pagination" | "filter" | "curation";
8
10
  }) => void;
9
11
  hook: (namespace: string, message: string, value: unknown) => void;
10
12
  };
@@ -22,14 +22,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
22
22
  return (mod && mod.__esModule) ? mod : { "default": mod };
23
23
  };
24
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
- exports.debug = void 0;
25
+ exports.debug = exports.debuggers = void 0;
26
26
  const debug_1 = __importDefault(require("debug"));
27
27
  const Sentry = __importStar(require("@sentry/react"));
28
28
  const hooks_1 = require("../hooks");
29
+ exports.debuggers = {};
29
30
  exports.debug = {
30
31
  namespace: "reactify-search",
31
32
  log: (namespace, formatter, ...args) => {
32
- (0, debug_1.default)(`${exports.debug.namespace}:${namespace}`)(formatter, ...args);
33
+ if (!exports.debuggers[namespace]) {
34
+ exports.debuggers[namespace] = (0, debug_1.default)(`${exports.debug.namespace}:${namespace}`);
35
+ }
36
+ exports.debuggers[namespace](formatter, ...args);
33
37
  },
34
38
  breadcrumb: (breadcrumb) => {
35
39
  Sentry.addBreadcrumb(Object.assign(Object.assign({ level: "debug", type: "query" }, breadcrumb), { category: `${exports.debug.namespace}:${breadcrumb.category}` }));
@@ -1 +1 @@
1
- {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../../src/utility/debug.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,sDAAwC;AAExC,oCAAuC;AAE1B,QAAA,KAAK,GAAG;IACnB,SAAS,EAAE,iBAAiB;IAC5B,GAAG,EAAE,CAAC,SAAiB,EAAE,SAAkB,EAAE,GAAG,IAAgB,EAAE,EAAE;QAClE,IAAA,eAAK,EAAC,GAAG,aAAK,CAAC,SAAS,IAAI,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;IAC/D,CAAC;IACD,UAAU,EAAE,CACV,UAGC,EACD,EAAE;QACF,MAAM,CAAC,aAAa,+BAClB,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,OAAO,IACV,UAAU,KACb,QAAQ,EAAE,GAAG,aAAK,CAAC,SAAS,IAAI,UAAU,CAAC,QAAQ,EAAE,IACrD,CAAC;IACL,CAAC;IACD,IAAI,EAAE,mBAAW;CAClB,CAAC","sourcesContent":["import Debug from \"debug\";\nimport * as Sentry from \"@sentry/react\";\n\nimport { useDebugger } from \"../hooks\";\n\nexport const debug = {\n namespace: \"reactify-search\",\n log: (namespace: string, formatter?: string, ...args: Array<any>) => {\n Debug(`${debug.namespace}:${namespace}`)(formatter, ...args);\n },\n breadcrumb: (\n breadcrumb: Partial<Sentry.Breadcrumb> & {\n message: string;\n category: \"search\" | \"sort\" | \"pagination\" | \"filter\" | \"curation\";\n }\n ) => {\n Sentry.addBreadcrumb({\n level: \"debug\",\n type: \"query\",\n ...breadcrumb,\n category: `${debug.namespace}:${breadcrumb.category}`,\n });\n },\n hook: useDebugger,\n};\n"]}
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../../src/utility/debug.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,sDAAwC;AAExC,oCAAuC;AAE1B,QAAA,SAAS,GAAmC,EAAE,CAAC;AAE/C,QAAA,KAAK,GAAG;IACnB,SAAS,EAAE,iBAAiB;IAC5B,GAAG,EAAE,CAAC,SAAiB,EAAE,SAAkB,EAAE,GAAG,IAAgB,EAAE,EAAE;QAClE,IAAI,CAAC,iBAAS,CAAC,SAAS,CAAC,EAAE;YACzB,iBAAS,CAAC,SAAS,CAAC,GAAG,IAAA,eAAK,EAAC,GAAG,aAAK,CAAC,SAAS,IAAI,SAAS,EAAE,CAAC,CAAC;SACjE;QAED,iBAAS,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;IAC3C,CAAC;IACD,UAAU,EAAE,CACV,UASC,EACD,EAAE;QACF,MAAM,CAAC,aAAa,+BAClB,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,OAAO,IACV,UAAU,KACb,QAAQ,EAAE,GAAG,aAAK,CAAC,SAAS,IAAI,UAAU,CAAC,QAAQ,EAAE,IACrD,CAAC;IACL,CAAC;IACD,IAAI,EAAE,mBAAW;CAClB,CAAC","sourcesContent":["import Debug from \"debug\";\nimport * as Sentry from \"@sentry/react\";\n\nimport { useDebugger } from \"../hooks\";\n\nexport const debuggers: Record<string, Debug.Debugger> = {};\n\nexport const debug = {\n namespace: \"reactify-search\",\n log: (namespace: string, formatter?: string, ...args: Array<any>) => {\n if (!debuggers[namespace]) {\n debuggers[namespace] = Debug(`${debug.namespace}:${namespace}`);\n }\n\n debuggers[namespace](formatter, ...args);\n },\n breadcrumb: (\n breadcrumb: Partial<Sentry.Breadcrumb> & {\n message: string;\n category:\n | \"result\"\n | \"search\"\n | \"sort\"\n | \"pagination\"\n | \"filter\"\n | \"curation\";\n }\n ) => {\n Sentry.addBreadcrumb({\n level: \"debug\",\n type: \"query\",\n ...breadcrumb,\n category: `${debug.namespace}:${breadcrumb.category}`,\n });\n },\n hook: useDebugger,\n};\n"]}
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": "5.0.0-beta.11",
4
+ "version": "5.0.0-beta.14",
5
5
  "license": "MIT",
6
6
  "main": "dist/src/index.js",
7
7
  "types": "dist/src/index.d.ts",
@@ -1,4 +0,0 @@
1
- import React from "react";
2
- import { FilterStackProps } from "../../components";
3
- export declare type ExampleFilterStackProps = React.ComponentProps<NonNullable<FilterStackProps["renderFilters"]>>;
4
- export declare const ExampleFilterStack: React.FC<ExampleFilterStackProps>;
@@ -1 +0,0 @@
1
- {"version":3,"file":"ExampleFilterStack.js","sourceRoot":"","sources":["../../../../src/components/Example/ExampleFilterStack.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,iDAA4D;AAMrD,MAAM,kBAAkB,GAAsC,CACnE,KAAK,EACL,EAAE;IACF,OAAO,CACL,8DACG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC7B,8BAAC,mBAAM,kBAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,IAAM,KAAK,EAAI,CACtD,CAAC,CACD,CACJ,CAAC;AACJ,CAAC,CAAC;AAVW,QAAA,kBAAkB,sBAU7B","sourcesContent":["import React from \"react\";\n\nimport { Filter, FilterStackProps } from \"../../components\";\n\nexport type ExampleFilterStackProps = React.ComponentProps<\n NonNullable<FilterStackProps[\"renderFilters\"]>\n>;\n\nexport const ExampleFilterStack: React.FC<ExampleFilterStackProps> = (\n props\n) => {\n return (\n <>\n {props.filters.map((filter) => (\n <Filter key={filter.id} filter={filter} {...props} />\n ))}\n </>\n );\n};\n"]}
@@ -1,4 +0,0 @@
1
- import React from "react";
2
- import { SortbyProps } from "../../components";
3
- export declare type ExampleSortbyProps = React.ComponentProps<NonNullable<SortbyProps["renderSortOptions"]>>;
4
- export declare const ExampleSortby: React.FC<ExampleSortbyProps>;
@@ -1 +0,0 @@
1
- {"version":3,"file":"FilterStack.js","sourceRoot":"","sources":["../../../../src/components/Filter/FilterStack.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,uCAAyC;AACzC,iDAAsD;AAO/C,MAAM,WAAW,GAA+B,CAAC,KAAK,EAAE,EAAE;;IAC/D,MAAM,WAAW,GAAG,IAAA,kBAAU,GAAE,CAAC;IAEjC,MAAM,sBAAsB,GAAG,MAAA,KAAK,CAAC,aAAa,mCAAI,+BAAkB,CAAC;IAEzE,OAAO,CACL,8BAAC,sBAAsB,oBACjB,WAAW,EACf,CACH,CAAA;AACH,CAAC,CAAC;AAVW,QAAA,WAAW,eAUtB","sourcesContent":["import React from \"react\";\n\nimport { useFilters } from \"../../hooks\";\nimport { ExampleFilterStack } from \"../../components\";\n\nexport type FilterStackProps = {\n /** Render method called once for all filters */\n renderFilters?: React.FC<ReturnType<typeof useFilters>>\n};\n\nexport const FilterStack: React.FC<FilterStackProps> = (props) => {\n const filtersHook = useFilters();\n\n const RenderFiltersComponent = props.renderFilters ?? ExampleFilterStack;\n\n return (\n <RenderFiltersComponent\n {...filtersHook}\n />\n )\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ReactifySearchBase.js","sourceRoot":"","sources":["../../../../src/components/ReactifySearchBase/ReactifySearchBase.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\nimport * as Sentry from \"@sentry/react\";\n\nimport { ReactifySearchContext, useConfig } from \"../../hooks\";\nimport { UtilityAuthenticatedReactiveBase } from \"../../components\";\nimport { debug } from \"../../utility\";\n\nexport type ReactifySearchBaseProps = {\n /** The search area the provider will be used in */\n mode: \"search\" | \"collection\" | \"instant-search\";\n /** Shopify store domain used to resolve the site configuration */\n shopifyPermanentDomain: string;\n /** Specific filter group handle, used to override automated logic */\n filterStackHandle?: string;\n /** Callback function for redirects, suitable for headless sites to avoid full page refresh */\n onRedirect?: (type: \"redirect\" | \"search\", url: string) => void;\n /** Render method to display a component when the config is loading */\n renderBooting?: () => JSX.Element | null;\n /** Advanced usage: Allows you to wrap the ReactifySearchBase in your own ReactiveBase component */\n noReactiveBase?: boolean;\n /** Advanced usage: Array of additional component IDs managed outside of Reactify Search */\n additionalComponentHandles?: string[];\n /** Advanced usage: Override the default Elasticsearch index */\n index?: string;\n /** Advanced usage: Override the default Reactify Search config (for multi-instance stores) */\n configId?: string;\n /** Advanced usage: Override the default Elasticsearch credentials */\n credentials?: {\n username: string;\n password: string;\n endpoint: string;\n };\n /** Advanced usage: Override the default ReactiveBase theme */\n theme?: Record<string, unknown>;\n} & (\n | {\n mode: \"search\";\n }\n | {\n mode: \"collection\";\n /** Collection object that includes the handle, used to find curations */\n collection: {\n id: number;\n title: string;\n handle: string;\n };\n }\n | {\n mode: \"instant-search\";\n }\n);\n\nexport const ReactifySearchBase: React.FC<ReactifySearchBaseProps> = (\n props\n) => {\n React.useEffect(() => {\n debug.log(\"ReactifySearchBase\", \"props\", props);\n\n Sentry.setTags({\n \"reactifysearch.index\": props.index,\n \"reactifysearch.shop\": props.shopifyPermanentDomain,\n \"reactifysearch.mode\": props.mode,\n \"reactifysearch.collection\":\n props.mode === \"collection\" ? props.collection.handle : undefined,\n \"reactifysearch.filter\": props.filterStackHandle,\n });\n }, [props]);\n\n return (\n <Sentry.ErrorBoundary fallback={<p>An error has occurred</p>}>\n <ReactifySearchInner {...props} />\n </Sentry.ErrorBoundary>\n );\n};\n\nconst ReactifySearchInner: React.FC<ReactifySearchBaseProps> = (props) => {\n const { config } = useConfig(props.shopifyPermanentDomain, props.configId);\n\n const [searchQuery, setSearchQuery] = React.useState<string>(\"\");\n const [instantSearchVisible, setInstantSearchVisible] =\n React.useState<boolean>(false);\n const [sortOption, setSortOption] = React.useState<string>(\"\");\n\n const credentials = props.credentials ?? {\n username: \"guest\",\n password: \"password\",\n endpoint: \"https://api.search.reactify.app\",\n };\n\n const theme = props.theme ?? {\n typography: {\n fontFamily: \"inherit\",\n fontSize: \"inherit\",\n },\n };\n\n const searchQueryFromURL = React.useMemo(() => {\n if (typeof window === \"undefined\") {\n return;\n }\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(\"q\") ?? undefined;\n }, [typeof window !== \"undefined\" && window.location.search]);\n\n const searchSortFromURL = React.useMemo(() => {\n if (typeof window === \"undefined\") {\n return;\n }\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(\"sort\") ?? undefined;\n }, [typeof window !== \"undefined\" && window.location.search]);\n\n React.useEffect(() => {\n if (searchQueryFromURL && searchQuery !== searchQueryFromURL) {\n setSearchQuery(searchQueryFromURL);\n }\n }, [searchQueryFromURL]);\n\n React.useEffect(() => {\n if (searchSortFromURL && sortOption !== searchSortFromURL) {\n setSortOption(searchSortFromURL);\n }\n }, [searchSortFromURL]);\n\n React.useEffect(() => {\n if (typeof window == \"undefined\") {\n return;\n }\n\n if (window.location.search === \"\" && sortOption) {\n setSortOption(sortOption);\n }\n }, [typeof window !== \"undefined\" && window.location.search]);\n\n const contextValue = React.useMemo(() => {\n if (!config) {\n return;\n }\n\n const memoValue = {\n config: config,\n options: {\n ...props,\n index: props.index ?? config.index,\n filterStackHandle: props.filterStackHandle,\n credentials: credentials,\n theme: theme,\n },\n search: {\n searchQuery: searchQuery,\n setSearchQuery: setSearchQuery,\n instantSearchVisible: instantSearchVisible,\n setInstantSearchVisible: setInstantSearchVisible,\n },\n sortby: {\n sortOption: sortOption,\n setSortOption: setSortOption,\n },\n };\n\n debug.log(\"ReactifySearchBase\", \"context\", memoValue);\n\n return memoValue;\n }, [config, props, searchQuery, instantSearchVisible, sortOption]);\n\n if (!contextValue) {\n if (props.renderBooting) {\n return props.renderBooting();\n }\n return null;\n }\n\n if (props.noReactiveBase) {\n return (\n <ReactifySearchContext.Provider value={contextValue}>\n {props.children}\n </ReactifySearchContext.Provider>\n );\n }\n\n return (\n <ReactifySearchContext.Provider value={contextValue}>\n <UtilityAuthenticatedReactiveBase>\n {props.children}\n </UtilityAuthenticatedReactiveBase>\n </ReactifySearchContext.Provider>\n );\n};\n"]}
@@ -1 +0,0 @@
1
- export * from "./ReactifySearchBase";
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/ReactifySearchBase/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,uDAAqC","sourcesContent":["export * from \"./ReactifySearchBase\";"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ResultStack.js","sourceRoot":"","sources":["../../../../src/components/Result/ResultStack.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\nimport ReactiveList from \"@appbaseio/reactivesearch/lib/components/result/ReactiveList\";\n\nimport { ResultCardCallout } from \"./ResultCardCallout\";\nimport { ResultCardProduct } from \"./ResultCardProduct\";\nimport { ResultPaginationNumbered } from \"./ResultPaginationNumbered\";\nimport { ResultPaginationLoadMore } from \"./ResultPaginationLoadMore\";\nimport { ResultPaginationNextPrev } from \"./ResultPaginationNextPrev\";\n\nimport {\n useReactifySearchContext,\n useAnalytics,\n useSearch,\n useFilterStack,\n useReactiveReactiveListProps,\n} from \"../../hooks\";\n\nimport {\n ElasticCallout,\n ElasticProduct,\n ElasticDocumentType,\n ReactivesearchError,\n ReactivesearchResultProps,\n ReactivesearchPaginationProps,\n} from \"../../types\";\n\nexport type ResultProps = ReactivesearchResultProps & {\n callouts: ElasticCallout[];\n products: ElasticProduct[];\n};\n\nexport type ResultStackProps = {\n /** Style prop for the list wrapper */\n listStyle?: React.HTMLAttributes<HTMLElement>[\"style\"];\n /** Classname prop for the list wrapper */\n listClassName?: string;\n /** Render method called when an error occurs */\n renderError?: React.FC<{ error: ReactivesearchError }>;\n /** Render method called while loading for the first time */\n renderLoading?: React.FC;\n /** Render method called when no results are found */\n renderNoResults?: React.FC;\n /** Render method called once for each product result */\n renderResultCardProduct?: React.ComponentProps<\n typeof ResultCardProduct\n >[\"render\"];\n /** Render method called once for each callout result */\n renderResultCardCallout?: React.ComponentProps<\n typeof ResultCardCallout\n >[\"render\"];\n /** Render method called for pagination type \"pagination\" */\n renderPaginationNumbered?: React.ComponentProps<\n typeof ResultPaginationNumbered\n >[\"render\"];\n /** Render method called for pagination type \"next_prev\" */\n renderPaginationNextPrev?: React.ComponentProps<\n typeof ResultPaginationNextPrev\n >[\"render\"];\n /** Render method called for pagination type \"load_more\" */\n renderPaginationLoadMore?: React.ComponentProps<\n typeof ResultPaginationLoadMore\n >[\"render\"];\n /** Render method called for pagination type \"infinite_scroll\" */\n renderPaginationInfiniteScroll?: React.ComponentProps<\n typeof ResultPaginationLoadMore\n >[\"render\"];\n /** Advanced Usage: Override the default amount of results per page */\n pageSize?: number;\n};\n\nexport const ResultStack: React.FC<ResultStackProps> = (props) => {\n const reactiveReactiveListProps = useReactiveReactiveListProps({\n pageSize: props.pageSize,\n });\n\n return (\n <ReactiveList\n {...reactiveReactiveListProps}\n render={(reactivesearchResultProps: ReactivesearchResultProps) => (\n <ResultStackInner\n {...props}\n reactivesearchResultProps={reactivesearchResultProps}\n />\n )}\n renderPagination={(\n reactivesearchPaginationProps: ReactivesearchPaginationProps\n ) => (\n <ResultStackPaginationStack\n {...props}\n {...reactivesearchPaginationProps}\n />\n )}\n />\n );\n};\n\nconst ResultStackRenderErrorComponent: ResultStackProps[\"renderError\"] = (\n props\n) => {\n return (\n <div>\n {\"Error: \"}\n {props.error.statusText}\n </div>\n );\n};\n\nconst ResultStackRenderLoadingComponent: ResultStackProps[\"renderLoading\"] =\n () => {\n return <div>{\"Loading\"}</div>;\n };\n\nconst ResultStackRenderNoResultsComponent: ResultStackProps[\"renderNoResults\"] =\n () => {\n return <div>{\"No results\"}</div>;\n };\n\nconst ResultStackInner: React.FC<\n ResultStackProps & { reactivesearchResultProps: ReactivesearchResultProps }\n> = (props) => {\n const { track } = useAnalytics();\n const { searchQuery } = useSearch();\n\n const initialSearchHasRun = React.useMemo(\n () =>\n \"undefined\" !==\n typeof props.reactivesearchResultProps.resultStats.numberOfResults,\n [props.reactivesearchResultProps]\n );\n\n const listStyle = React.useMemo<React.HTMLAttributes<HTMLElement>[\"style\"]>(\n () =>\n props.listStyle ?? {\n display: \"grid\",\n gap: \"8px\",\n gridTemplateColumns: \"repeat(4, minmax(0, 1fr))\",\n },\n [props.listStyle]\n );\n\n if (props.reactivesearchResultProps.error) {\n const RenderErrorComponent =\n props.renderError ?? ResultStackRenderErrorComponent;\n\n return (\n <RenderErrorComponent error={props.reactivesearchResultProps.error} />\n );\n }\n\n if (!initialSearchHasRun) {\n const RenderLoadingComponent =\n props.renderLoading ?? ResultStackRenderLoadingComponent;\n return <RenderLoadingComponent />;\n }\n\n if (!props.reactivesearchResultProps.resultStats.numberOfResults) {\n if (searchQuery) {\n track({\n eventName: \"zeroResults\",\n payload: {\n searchTerm: searchQuery,\n },\n });\n }\n const RenderNoResultsComponent =\n props.renderNoResults ?? ResultStackRenderNoResultsComponent;\n return <RenderNoResultsComponent />;\n }\n\n return (\n <>\n <section style={listStyle} className={props.listClassName}>\n {props.reactivesearchResultProps.data.map((item, key) => {\n // @todo result.type is missing in v1 indexes, this check ensures that they are assumed to be products\n if (ElasticDocumentType.Product === item.type || !item.type) {\n return (\n <ResultCardProduct\n key={item._id}\n product={item}\n document={item}\n pagePosition={key + 1}\n render={props.renderResultCardProduct}\n />\n );\n }\n\n if (ElasticDocumentType.Callout === item.type) {\n return (\n <ResultCardCallout\n key={item._id}\n document={item}\n pagePosition={key + 1}\n callout={item.callout}\n render={props.renderResultCardCallout}\n />\n );\n }\n\n return null;\n })}\n </section>\n <ResultStackPaginationStackLoadMore\n {...props}\n {...props.reactivesearchResultProps}\n />\n </>\n );\n};\n\n/** Handles rendering pagination for types that use \"pagination props\" */\nconst ResultStackPaginationStack: React.FC<\n ResultStackProps & ReactivesearchPaginationProps\n> = (props) => {\n const { options } = useReactifySearchContext();\n const { filterStack } = useFilterStack();\n\n if (options.mode === \"instant-search\") {\n return null;\n }\n\n if (\"pagination\" === filterStack?.paginationType) {\n return (\n <ResultPaginationNumbered\n {...props}\n render={props.renderPaginationNumbered}\n />\n );\n }\n\n if (\"next_prev\" === filterStack?.paginationType) {\n return (\n <ResultPaginationNextPrev\n {...props}\n render={props.renderPaginationNextPrev}\n />\n );\n }\n\n return null;\n};\n\n/** Handles rendering pagination for types that use \"result props\" */\nconst ResultStackPaginationStackLoadMore: React.FC<\n ResultStackProps & { reactivesearchResultProps: ReactivesearchResultProps }\n> = (props) => {\n const { options } = useReactifySearchContext();\n const { filterStack } = useFilterStack();\n\n if (options.mode === \"instant-search\") {\n return null;\n }\n\n if (\"load_more\" === filterStack?.paginationType) {\n return (\n <ResultPaginationLoadMore\n {...props.reactivesearchResultProps}\n render={props.renderPaginationLoadMore}\n />\n );\n }\n\n return null;\n};\n"]}
@@ -1,3 +0,0 @@
1
- import React from "react";
2
- export declare type SensorStackProps = {};
3
- export declare const SensorStack: React.FC<SensorStackProps>;
@@ -1 +0,0 @@
1
- {"version":3,"file":"SensorStack.js","sourceRoot":"","sources":["../../../../src/components/Sensor/SensorStack.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,uCAAuD;AAEvD,6CAA0C;AAC1C,iDAA8C;AAC9C,uDAAoD;AACpD,uDAAoD;AACpD,yDAAsD;AACtD,yEAAsE;AAM/D,MAAM,WAAW,GAA+B,GAAG,EAAE;IAC1D,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,gCAAwB,GAAE,CAAC;IAE/C,sBAAsB;IACtB,IAAI,OAAO,CAAC,IAAI,KAAK,gBAAgB,EAAE;QACrC,OAAO,CACL;YACE,8BAAC,iCAAe,OAAG;YACnB,8BAAC,iCAAe,OAAG,CAClB,CACJ,CAAC;KACH;IAED,mBAAmB;IACnB,OAAO,CACL;QACE,8BAAC,uBAAU,OAAG;QACd,8BAAC,2BAAY,OAAG;QAChB,8BAAC,iCAAe,OAAG;QACnB,8BAAC,mCAAgB,OAAG;QACpB,8BAAC,mDAAwB,OAAG,CAC3B,CACJ,CAAC;AACJ,CAAC,CAAC;AAvBW,QAAA,WAAW,eAuBtB","sourcesContent":["import React from \"react\";\n\nimport { useReactifySearchContext } from \"../../hooks\";\n\nimport { SensorSort } from \"./SensorSort\";\nimport { SensorSearch } from \"./SensorSearch\";\nimport { SensorSortScore } from \"./SensorSortScore\";\nimport { SensorPublished } from \"./SensorPublished\";\nimport { SensorCollection } from \"./SensorCollection\";\nimport { SensorInventoryAvailable } from \"./SensorInventoryAvailable\";\n\nexport type SensorStackProps = {\n /** This component does not support any props */\n};\n\nexport const SensorStack: React.FC<SensorStackProps> = () => {\n const { options } = useReactifySearchContext();\n\n // instant search mode\n if (options.mode === \"instant-search\") {\n return (\n <>\n <SensorPublished />\n <SensorSortScore />\n </>\n );\n }\n\n // result grid mode\n return (\n <>\n <SensorSort />\n <SensorSearch />\n <SensorPublished />\n <SensorCollection />\n <SensorInventoryAvailable />\n </>\n );\n};\n"]}
@@ -1,7 +0,0 @@
1
- import React from "react";
2
- import { useSortby } from "../../hooks";
3
- export declare type SortbyProps = {
4
- /** Render method called once for all sort options */
5
- renderSortOptions?: React.FC<ReturnType<typeof useSortby>>;
6
- };
7
- export declare const Sortby: React.FC<SortbyProps>;
@@ -1 +0,0 @@
1
- {"version":3,"file":"Sortby.js","sourceRoot":"","sources":["../../../../src/components/Sortby/Sortby.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,uCAAwC;AACxC,iDAAiD;AAO1C,MAAM,MAAM,GAA0B,CAAC,KAAK,EAAE,EAAE;;IACrD,MAAM,UAAU,GAAG,IAAA,iBAAS,GAAE,CAAC;IAE/B,MAAM,0BAA0B,GAAG,MAAA,KAAK,CAAC,iBAAiB,mCAAI,0BAAa,CAAC;IAE5E,OAAO,CACL,8BAAC,0BAA0B,oBACrB,UAAU,EACd,CACH,CAAC;AACJ,CAAC,CAAC;AAVW,QAAA,MAAM,UAUjB","sourcesContent":["import React from \"react\";\n\nimport { useSortby } from \"../../hooks\";\nimport { ExampleSortby } from \"../../components\";\n\nexport type SortbyProps = {\n /** Render method called once for all sort options */\n renderSortOptions?: React.FC<ReturnType<typeof useSortby>>;\n};\n\nexport const Sortby: React.FC<SortbyProps> = (props) => {\n const sortbyData = useSortby();\n\n const RenderSortOptionsComponent = props.renderSortOptions ?? ExampleSortby;\n\n return (\n <RenderSortOptionsComponent\n {...sortbyData}\n />\n );\n};\n"]}
@@ -1 +0,0 @@
1
- export * from "./Sortby";
@@ -1,4 +0,0 @@
1
- import { ConfigFilter } from "../types";
2
- export declare const useFilterStack: () => {
3
- filterStack?: ConfigFilter | undefined;
4
- };
@@ -1,52 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.useFilterStack = void 0;
7
- const react_1 = __importDefault(require("react"));
8
- const hooks_1 = require("../hooks");
9
- const utility_1 = require("../utility");
10
- const useFilterStack = () => {
11
- const { options, config } = (0, hooks_1.useReactifySearchContext)();
12
- const filterStack = react_1.default.useMemo(() => {
13
- if (options.mode === "instant-search") {
14
- return undefined;
15
- }
16
- // select filters by type
17
- const matchingFilterStacks = config.filters.filter((filter) => filter.type === options.mode);
18
- // select filter stack by handle if provided
19
- if (options.filterStackHandle) {
20
- const matchingFilterStack = matchingFilterStacks.find((filterStack) => options.filterStackHandle === filterStack.handle);
21
- if (matchingFilterStack) {
22
- return matchingFilterStack;
23
- }
24
- }
25
- // select filter stack by collection if provided
26
- if (options.mode === "collection" && options.collection.handle) {
27
- const matchingFilterStack = matchingFilterStacks.find((filterStack) => { var _a; return (_a = filterStack.collections) === null || _a === void 0 ? void 0 : _a.includes(options.collection.handle); });
28
- if (matchingFilterStack) {
29
- return matchingFilterStack;
30
- }
31
- }
32
- // select filter with "default" handle
33
- let matchingFilterStack = matchingFilterStacks.find((filterStack) => filterStack.handle === "default");
34
- if (matchingFilterStack) {
35
- return matchingFilterStack;
36
- }
37
- // select any filter with "default" handle
38
- matchingFilterStack = config.filters.find((filterStack) => filterStack.handle === "default");
39
- if (matchingFilterStack) {
40
- return matchingFilterStack;
41
- }
42
- // select any available filter as a last resort
43
- matchingFilterStack = config.filters[0];
44
- return matchingFilterStack;
45
- }, [config, options.mode === "collection" ? options.collection : undefined]);
46
- utility_1.debug.hook("useFilterStack", "filterStack", filterStack);
47
- return {
48
- filterStack: filterStack,
49
- };
50
- };
51
- exports.useFilterStack = useFilterStack;
52
- //# sourceMappingURL=useFilterStack.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useFilterStack.js","sourceRoot":"","sources":["../../../src/hooks/useFilterStack.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAG1B,oCAAoD;AACpD,wCAAmC;AAE5B,MAAM,cAAc,GAAG,GAE5B,EAAE;IACF,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAA,gCAAwB,GAAE,CAAC;IAEvD,MAAM,WAAW,GAAG,eAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACrC,IAAI,OAAO,CAAC,IAAI,KAAK,gBAAgB,EAAE;YACrC,OAAO,SAAS,CAAC;SAClB;QAED,yBAAyB;QACzB,MAAM,oBAAoB,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAChD,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CACzC,CAAC;QAEF,4CAA4C;QAC5C,IAAI,OAAO,CAAC,iBAAiB,EAAE;YAC7B,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,IAAI,CACnD,CAAC,WAAW,EAAE,EAAE,CAAC,OAAO,CAAC,iBAAiB,KAAK,WAAW,CAAC,MAAM,CAClE,CAAC;YACF,IAAI,mBAAmB,EAAE;gBACvB,OAAO,mBAAmB,CAAC;aAC5B;SACF;QAED,gDAAgD;QAChD,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE;YAC9D,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,WACpE,OAAA,MAAA,WAAW,CAAC,WAAW,0CAAE,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA,EAAA,CAC7D,CAAC;YACF,IAAI,mBAAmB,EAAE;gBACvB,OAAO,mBAAmB,CAAC;aAC5B;SACF;QAED,sCAAsC;QACtC,IAAI,mBAAmB,GAAG,oBAAoB,CAAC,IAAI,CACjD,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,KAAK,SAAS,CAClD,CAAC;QACF,IAAI,mBAAmB,EAAE;YACvB,OAAO,mBAAmB,CAAC;SAC5B;QAED,0CAA0C;QAC1C,mBAAmB,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CACvC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,KAAK,SAAS,CAClD,CAAC;QACF,IAAI,mBAAmB,EAAE;YACvB,OAAO,mBAAmB,CAAC;SAC5B;QAED,+CAA+C;QAC/C,mBAAmB,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAExC,OAAO,mBAAmB,CAAC;IAC7B,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAE7E,eAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;IAEzD,OAAO;QACL,WAAW,EAAE,WAAW;KACzB,CAAC;AACJ,CAAC,CAAC;AA9DW,QAAA,cAAc,kBA8DzB","sourcesContent":["import React from \"react\";\n\nimport { ConfigFilter } from \"../types\";\nimport { useReactifySearchContext } from \"../hooks\";\nimport { debug } from \"../utility\";\n\nexport const useFilterStack = (): {\n filterStack?: ConfigFilter;\n} => {\n const { options, config } = useReactifySearchContext();\n\n const filterStack = React.useMemo(() => {\n if (options.mode === \"instant-search\") {\n return undefined;\n }\n\n // select filters by type\n const matchingFilterStacks = config.filters.filter(\n (filter) => filter.type === options.mode\n );\n\n // select filter stack by handle if provided\n if (options.filterStackHandle) {\n const matchingFilterStack = matchingFilterStacks.find(\n (filterStack) => options.filterStackHandle === filterStack.handle\n );\n if (matchingFilterStack) {\n return matchingFilterStack;\n }\n }\n\n // select filter stack by collection if provided\n if (options.mode === \"collection\" && options.collection.handle) {\n const matchingFilterStack = matchingFilterStacks.find((filterStack) =>\n filterStack.collections?.includes(options.collection.handle)\n );\n if (matchingFilterStack) {\n return matchingFilterStack;\n }\n }\n\n // select filter with \"default\" handle\n let matchingFilterStack = matchingFilterStacks.find(\n (filterStack) => filterStack.handle === \"default\"\n );\n if (matchingFilterStack) {\n return matchingFilterStack;\n }\n\n // select any filter with \"default\" handle\n matchingFilterStack = config.filters.find(\n (filterStack) => filterStack.handle === \"default\"\n );\n if (matchingFilterStack) {\n return matchingFilterStack;\n }\n\n // select any available filter as a last resort\n matchingFilterStack = config.filters[0];\n\n return matchingFilterStack;\n }, [config, options.mode === \"collection\" ? options.collection : undefined]);\n\n debug.hook(\"useFilterStack\", \"filterStack\", filterStack);\n\n return {\n filterStack: filterStack,\n };\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"useSortby.js","sourceRoot":"","sources":["../../../src/hooks/useSortby.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAG1B,oCAAkE;AAClE,wCAAmC;AAE5B,MAAM,SAAS,GAAG,GAOvB,EAAE;IACF,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,gCAAwB,GAAE,CAAC;IAC/D,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,oBAAY,GAAE,CAAC;IAEjC,MAAM,WAAW,GAAG,eAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACrC,OAAO,MAAM,CAAC,IAAI;aACf,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;aAC9D,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAC5E,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAE3B,MAAM,UAAU,GAAG,eAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACpC,OAAO,CACL,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,KAAK,MAAM,CAAC,UAAU,CAAC;YAC9D,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;IACJ,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IAErC,MAAM,aAAa,GAAG,eAAK,CAAC,WAAW,CACrC,CAAC,gBAAwB,EAAE,kBAAkB,GAAG,KAAK,EAAE,EAAE;QACvD,eAAK,CAAC,UAAU,CAAC;YACf,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,qBAAqB;YAC9B,IAAI,EAAE;gBACJ,gBAAgB,EAAE,gBAAgB;aACnC;SACF,CAAC,CAAC;QAEH,eAAK,CAAC,GAAG,CACP,WAAW,EACX,iCAAiC,EACjC,gBAAgB,CACjB,CAAC;QAEF,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;QAEvC,IAAI,CAAC,kBAAkB,EAAE;YACvB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;gBAChC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;aAChD;iBAAM;gBACL,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;aACnD;YACD,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;SAClD;QAED,KAAK,CAAC;YACJ,SAAS,EAAE,YAAY;YACvB,OAAO,EAAE;gBACP,IAAI,EAAE,gBAAgB;aACvB;SACF,CAAC,CAAC;IACL,CAAC,EACD,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CACvB,CAAC;IAEF,eAAK,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IAClD,eAAK,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;IAEpD,OAAO;QACL,WAAW;QACX,UAAU;QACV,aAAa;KACd,CAAC;AACJ,CAAC,CAAC;AAtEW,QAAA,SAAS,aAsEpB","sourcesContent":["import React from \"react\";\n\nimport { ConfigSort } from \"../types\";\nimport { useAnalytics, useReactifySearchContext } from \"../hooks\";\nimport { debug } from \"../utility\";\n\nexport const useSortby = (): {\n sortOption: ConfigSort | undefined;\n sortOptions: Array<ConfigSort>;\n setSortOption: (\n sortOptionHandle: string,\n ignoreHistoryState?: boolean\n ) => void;\n} => {\n const { options, config, sortby } = useReactifySearchContext();\n const { track } = useAnalytics();\n\n const sortOptions = React.useMemo(() => {\n return config.sort\n .sort((a, b) => `${a.position}`.localeCompare(`${b.position}`))\n .filter(({ visibility }) => [\"all\", options.mode].includes(visibility));\n }, [options.mode, config]);\n\n const sortOption = React.useMemo(() => {\n return (\n sortOptions.find(({ handle }) => handle === sortby.sortOption) ||\n sortOptions[0]\n );\n }, [sortOptions, sortby.sortOption]);\n\n const setSortOption = React.useCallback(\n (sortOptionHandle: string, ignoreHistoryState = false) => {\n debug.breadcrumb({\n category: \"sort\",\n message: \"sort option changed\",\n data: {\n sortOptionHandle: sortOptionHandle,\n },\n });\n\n debug.log(\n \"useSortby\",\n \"setSortOption[sortOptionHandle]\",\n sortOptionHandle\n );\n\n sortby.setSortOption(sortOptionHandle);\n\n if (!ignoreHistoryState) {\n const url = new URL(window.location.href);\n if (url.searchParams.has(\"sort\")) {\n url.searchParams.set(\"sort\", sortOptionHandle);\n } else {\n url.searchParams.append(\"sort\", sortOptionHandle);\n }\n window.history.pushState({}, \"\", url.toString());\n }\n\n track({\n eventName: \"sortChange\",\n payload: {\n type: sortOptionHandle,\n },\n });\n },\n [window.location.href]\n );\n\n debug.hook(\"useSortBy\", \"sortOption\", sortOption);\n debug.hook(\"useSortBy\", \"sortOptions\", sortOptions);\n\n return {\n sortOptions,\n sortOption,\n setSortOption,\n };\n};\n"]}