@usereactify/search 5.26.1 → 5.26.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 (118) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/dist/package.json +10 -11
  3. package/dist/src/components/ClearAll/ClearAll.js +31 -3
  4. package/dist/src/components/ClearAll/ClearAll.js.map +1 -1
  5. package/dist/src/components/Example/ExampleFilterRange.js +3 -1
  6. package/dist/src/components/Example/ExampleFilterRange.js.map +1 -1
  7. package/dist/src/components/Example/ExampleFilterSlider.js +24 -7
  8. package/dist/src/components/Example/ExampleFilterSlider.js.map +1 -1
  9. package/dist/src/components/Example/ExampleFilters.d.ts +1 -3
  10. package/dist/src/components/Example/ExampleFilters.js +8 -4
  11. package/dist/src/components/Example/ExampleFilters.js.map +1 -1
  12. package/dist/src/components/Example/ExampleFiltersSelected.js +24 -10
  13. package/dist/src/components/Example/ExampleFiltersSelected.js.map +1 -1
  14. package/dist/src/components/Example/ExampleHookUseResults.d.ts +2 -0
  15. package/dist/src/components/Example/ExampleHookUseResults.js +25 -0
  16. package/dist/src/components/Example/ExampleHookUseResults.js.map +1 -0
  17. package/dist/src/components/Example/ExampleSuggestions.d.ts +4 -0
  18. package/dist/src/components/Example/ExampleSuggestions.js +16 -0
  19. package/dist/src/components/Example/ExampleSuggestions.js.map +1 -0
  20. package/dist/src/components/Example/index.d.ts +3 -0
  21. package/dist/src/components/Example/index.js +3 -0
  22. package/dist/src/components/Example/index.js.map +1 -1
  23. package/dist/src/components/Filter/Filter.d.ts +2 -2
  24. package/dist/src/components/Filter/Filter.js +91 -18
  25. package/dist/src/components/Filter/Filter.js.map +1 -1
  26. package/dist/src/components/Filter/Filters.d.ts +17 -3
  27. package/dist/src/components/Filter/Filters.js +1 -2
  28. package/dist/src/components/Filter/Filters.js.map +1 -1
  29. package/dist/src/components/Filter/FiltersSelected.d.ts +7 -2
  30. package/dist/src/components/Filter/FiltersSelected.js +45 -2
  31. package/dist/src/components/Filter/FiltersSelected.js.map +1 -1
  32. package/dist/src/components/ReactifySearchProvider/ReactifySearchProvider.d.ts +5 -7
  33. package/dist/src/components/ReactifySearchProvider/ReactifySearchProvider.js +42 -24
  34. package/dist/src/components/ReactifySearchProvider/ReactifySearchProvider.js.map +1 -1
  35. package/dist/src/components/Result/Results.js +24 -9
  36. package/dist/src/components/Result/Results.js.map +1 -1
  37. package/dist/src/components/Sensor/SensorCollection.js +4 -0
  38. package/dist/src/components/Sensor/SensorCollection.js.map +1 -1
  39. package/dist/src/components/Sensor/SensorInventoryAvailable.js +6 -1
  40. package/dist/src/components/Sensor/SensorInventoryAvailable.js.map +1 -1
  41. package/dist/src/components/Sensor/SensorPublished.js +13 -6
  42. package/dist/src/components/Sensor/SensorPublished.js.map +1 -1
  43. package/dist/src/components/Sensor/SensorSearchTerm.js +92 -66
  44. package/dist/src/components/Sensor/SensorSearchTerm.js.map +1 -1
  45. package/dist/src/components/Sensor/SensorSort.js +75 -65
  46. package/dist/src/components/Sensor/SensorSort.js.map +1 -1
  47. package/dist/src/components/Sensor/index.d.ts +0 -1
  48. package/dist/src/components/Sensor/index.js +0 -2
  49. package/dist/src/components/Sensor/index.js.map +1 -1
  50. package/dist/src/components/Suggestions/Suggestions.d.ts +12 -0
  51. package/dist/src/components/Suggestions/Suggestions.js +44 -0
  52. package/dist/src/components/Suggestions/Suggestions.js.map +1 -0
  53. package/dist/src/components/Suggestions/index.d.ts +1 -0
  54. package/dist/src/components/Suggestions/index.js +14 -0
  55. package/dist/src/components/Suggestions/index.js.map +1 -0
  56. package/dist/src/components/index.d.ts +1 -0
  57. package/dist/src/components/index.js +1 -0
  58. package/dist/src/components/index.js.map +1 -1
  59. package/dist/src/hooks/index.d.ts +3 -0
  60. package/dist/src/hooks/index.js +3 -0
  61. package/dist/src/hooks/index.js.map +1 -1
  62. package/dist/src/hooks/react-slider/useReactSliderProps.d.ts +4 -0
  63. package/dist/src/hooks/react-slider/useReactSliderProps.js +28 -0
  64. package/dist/src/hooks/react-slider/useReactSliderProps.js.map +1 -0
  65. package/dist/src/hooks/reactivesearch/useReactiveBaseProps.d.ts +2 -7
  66. package/dist/src/hooks/reactivesearch/useReactiveBaseProps.js +10 -3
  67. package/dist/src/hooks/reactivesearch/useReactiveBaseProps.js.map +1 -1
  68. package/dist/src/hooks/reactivesearch/useReactiveFilterListProps.d.ts +1 -0
  69. package/dist/src/hooks/reactivesearch/useReactiveFilterListProps.js +3 -5
  70. package/dist/src/hooks/reactivesearch/useReactiveFilterListProps.js.map +1 -1
  71. package/dist/src/hooks/reactivesearch/useReactiveFilterRangeProps.d.ts +1 -0
  72. package/dist/src/hooks/reactivesearch/useReactiveFilterRangeProps.js +3 -5
  73. package/dist/src/hooks/reactivesearch/useReactiveFilterRangeProps.js.map +1 -1
  74. package/dist/src/hooks/reactivesearch/useReactiveFilterSharedProps.js +1 -1
  75. package/dist/src/hooks/reactivesearch/useReactiveFilterSharedProps.js.map +1 -1
  76. package/dist/src/hooks/reactivesearch/useReactiveFilterSliderProps.js +1 -3
  77. package/dist/src/hooks/reactivesearch/useReactiveFilterSliderProps.js.map +1 -1
  78. package/dist/src/hooks/reactivesearch/useReactiveReactProp.d.ts +2 -1
  79. package/dist/src/hooks/reactivesearch/useReactiveReactProp.js +8 -3
  80. package/dist/src/hooks/reactivesearch/useReactiveReactProp.js.map +1 -1
  81. package/dist/src/hooks/useAnalytics.js +23 -3
  82. package/dist/src/hooks/useAnalytics.js.map +1 -1
  83. package/dist/src/hooks/useConfig.js +9 -27
  84. package/dist/src/hooks/useConfig.js.map +1 -1
  85. package/dist/src/hooks/useCuration.js +12 -1
  86. package/dist/src/hooks/useCuration.js.map +1 -1
  87. package/dist/src/hooks/useFilterListProps.js +15 -2
  88. package/dist/src/hooks/useFilterListProps.js.map +1 -1
  89. package/dist/src/hooks/useFilterRangeProps.d.ts +1 -10
  90. package/dist/src/hooks/useFilterRangeProps.js +36 -47
  91. package/dist/src/hooks/useFilterRangeProps.js.map +1 -1
  92. package/dist/src/hooks/useFilterSliderProps.d.ts +6 -8
  93. package/dist/src/hooks/useFilterSliderProps.js +31 -10
  94. package/dist/src/hooks/useFilterSliderProps.js.map +1 -1
  95. package/dist/src/hooks/useFlags.d.ts +21 -0
  96. package/dist/src/hooks/useFlags.js +49 -0
  97. package/dist/src/hooks/useFlags.js.map +1 -0
  98. package/dist/src/hooks/useIndices.d.ts +5 -0
  99. package/dist/src/hooks/useIndices.js +49 -0
  100. package/dist/src/hooks/useIndices.js.map +1 -0
  101. package/dist/src/hooks/useReactifySearchContext.d.ts +19 -11
  102. package/dist/src/hooks/useReactifySearchContext.js.map +1 -1
  103. package/dist/src/hooks/useResults.d.ts +21 -0
  104. package/dist/src/hooks/useResults.js +19 -0
  105. package/dist/src/hooks/useResults.js.map +1 -0
  106. package/dist/src/hooks/useSearch.js +4 -2
  107. package/dist/src/hooks/useSearch.js.map +1 -1
  108. package/dist/src/hooks/useSortBy.js +5 -1
  109. package/dist/src/hooks/useSortBy.js.map +1 -1
  110. package/dist/src/types/config.d.ts +11 -5
  111. package/dist/src/types/config.js.map +1 -1
  112. package/dist/src/types/elastic.d.ts +53 -17
  113. package/dist/src/types/elastic.js.map +1 -1
  114. package/dist/src/types/firestore.d.ts +3 -0
  115. package/dist/src/types/firestore.js.map +1 -1
  116. package/dist/src/types/reactivesearch.d.ts +1 -1
  117. package/dist/src/types/reactivesearch.js.map +1 -1
  118. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"useFilterRangeProps.js","sourceRoot":"","sources":["../../../src/hooks/useFilterRangeProps.ts"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\n\nimport { ConfigFilterOption } from \"../types/config\";\nimport { useAnalytics } from \"../hooks\";\nimport { debug } from \"../utility\";\n\nexport const useFilterRangeProps = (\n filter: ConfigFilterOption\n): {\n filter: ConfigFilterOption;\n options: Array<{\n key: string;\n label: string;\n checked: boolean;\n }>;\n value: string;\n handleChange: (key: string) => void;\n} => {\n const { track } = useAnalytics();\n const [filterValue, setFilterValue] = React.useState<string>(\"\");\n\n const handleChange = React.useCallback(\n (key: string) => {\n debug.breadcrumb({\n category: \"filter\",\n message: \"filter option changed\",\n data: {\n filter: filter.name,\n field: filter.field,\n value: key,\n },\n });\n\n debug.log(\"useFilterRangeProps\", \"handleChange[key]\", key);\n\n setFilterValue(key);\n\n track({\n eventName: \"filterChange\",\n payload: {\n name: filter.name,\n value: key,\n },\n });\n },\n [filter]\n );\n\n const filterRangeProps = React.useMemo(() => {\n const options =\n filter.displayRangeOptions?.map((option) => {\n const [key] = option.split(\":\");\n return {\n key: key,\n label: filter.settingsUppercase ? key.toUpperCase() : key,\n checked: filterValue === key,\n };\n }) ?? [];\n\n return {\n handleChange,\n filter,\n value: filterValue,\n options,\n };\n }, [filter, filterValue, handleChange]);\n\n return filterRangeProps;\n};\n\nexport const useFilterRangeMultiProps = (\n filter: ConfigFilterOption\n): {\n filter: ConfigFilterOption;\n options: Array<{\n key: string;\n label: string;\n checked: boolean;\n }>;\n values: string[];\n handleChange: (key: string) => void;\n} => {\n const { track } = useAnalytics();\n const [filterValues, setFilterValues] = React.useState<string[]>([\"\"]);\n\n const handleChange = React.useCallback(\n (key: string) => {\n debug.breadcrumb({\n category: \"filter\",\n message: \"filter option changed\",\n data: {\n filter: filter.name,\n field: filter.field,\n value: key,\n },\n });\n\n debug.log(\"useFilterRangeMultiProps\", \"handleChange[key]\", key);\n\n setFilterValues([...filterValues, key]);\n\n track({\n eventName: \"filterChange\",\n payload: {\n name: filter.name,\n value: key,\n },\n });\n },\n [filter, filterValues]\n );\n\n const filterRangeProps = React.useMemo(() => {\n const options =\n filter.displayRangeOptions?.map((option) => {\n const [key] = option.split(\":\");\n return {\n key: key,\n label: filter.settingsUppercase ? key.toUpperCase() : key,\n checked: filterValues.includes(key),\n };\n }) ?? [];\n\n return {\n handleChange,\n filter,\n values: filterValues,\n options,\n };\n }, [filter, filterValues, handleChange]);\n\n return filterRangeProps;\n};\n"]}
1
+ {"version":3,"file":"useFilterRangeProps.js","sourceRoot":"","sources":["../../../src/hooks/useFilterRangeProps.ts"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\n\nimport { ConfigFilterOption } from \"../types/config\";\nimport { useAnalytics } from \"../hooks\";\nimport { debug } from \"../utility\";\n\nexport const useFilterRangeProps = (\n filter: ConfigFilterOption\n): {\n filter: ConfigFilterOption;\n options: Array<{\n key: string;\n label: string;\n checked: boolean;\n }>;\n values: string[];\n handleChange: (key: string) => void;\n handleClear: () => void;\n} => {\n const { track } = useAnalytics();\n const [filterValues, setFilterValues] = React.useState<string[]>([]);\n\n const handleChange = React.useCallback(\n (key: string) => {\n debug.breadcrumb({\n category: \"filter\",\n message: \"filter option changed\",\n data: {\n filter: filter.name,\n field: filter.field,\n value: key,\n },\n });\n\n debug.log(\"useFilterRangeMultiProps\", \"handleChange[key]\", key);\n\n if (filter.displayType === \"multi\") {\n const selected = filterValues.find((item: string) => item === key)\n ? filterValues.filter((value) => value !== key)\n : [...filterValues, key];\n\n setFilterValues(selected);\n }\n if (filter.displayType === \"single\") {\n setFilterValues([key]);\n }\n\n track({\n eventName: \"filterChange\",\n payload: {\n name: filter.name,\n value: key,\n },\n });\n },\n [filter, filterValues]\n );\n\n const handleClear = React.useCallback(() => {\n setFilterValues([]);\n }, []);\n\n React.useEffect(() => {\n try {\n if (filter.displayView === \"range\") {\n const url = new URL(window.location.href);\n const value = JSON.parse(url.searchParams.get(filter.handle) ?? \"[]\");\n setFilterValues(value);\n }\n } catch (error) {\n console.error(error);\n }\n }, []);\n\n React.useEffect(() => {\n const handler = (\n event: CustomEvent<{ handle: string; value: Array<string> }>\n ) => {\n setFilterValues(event.detail.value);\n };\n window.addEventListener(\n `@usereactify/search:filter:${filter.handle}:update`,\n handler as EventListener\n );\n\n return () =>\n window.removeEventListener(\n `@usereactify/search:filter:${filter.handle}:update`,\n handler as EventListener\n );\n }, []);\n\n const filterRangeProps = React.useMemo(() => {\n const options =\n filter.displayRangeOptions?.map((option) => {\n const [key] = option.split(\":\");\n return {\n key: key,\n label: filter.settingsUppercase ? key.toUpperCase() : key,\n checked: filterValues.includes(key),\n };\n }) ?? [];\n\n return {\n handleChange,\n handleClear,\n filter,\n values: filterValues,\n options,\n };\n }, [filter, filterValues, handleChange]);\n\n return filterRangeProps;\n};\n"]}
@@ -1,12 +1,10 @@
1
1
  import { ConfigFilterOption } from "../types/config";
2
+ import { useReactSliderProps } from "./react-slider/useReactSliderProps";
2
3
  export declare const useFilterSliderProps: (filter: ConfigFilterOption) => {
3
4
  filter: ConfigFilterOption;
4
- value: {
5
- start: number;
6
- end: number;
7
- };
8
- handleChange: (value: {
9
- start: number | string;
10
- end: number | string;
11
- }) => void;
5
+ value: [number, number];
6
+ range: [number, number];
7
+ handleChange: (value: [number | string, number | string]) => void;
8
+ handleRange: (value: [number, number]) => void;
9
+ reactSliderProps: ReturnType<typeof useReactSliderProps>;
12
10
  };
@@ -7,12 +7,15 @@ exports.useFilterSliderProps = 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 useReactSliderProps_1 = require("./react-slider/useReactSliderProps");
10
11
  const useFilterSliderProps = (filter) => {
12
+ var _a;
11
13
  const { track } = (0, hooks_1.useAnalytics)();
12
- const [filterValue, setFilterValue] = react_1.default.useState({
13
- start: 0,
14
- end: 0,
15
- });
14
+ const urlSearchParam = new URLSearchParams(window.location.search);
15
+ const [filterValue, setFilterValue] = react_1.default.useState(JSON.parse((_a = urlSearchParam.get(filter.handle)) !== null && _a !== void 0 ? _a : "[0,0]"));
16
+ const [filterRange, setFilterRange] = react_1.default.useState([
17
+ 0, 0,
18
+ ]);
16
19
  const handleChange = react_1.default.useCallback((value) => {
17
20
  utility_1.debug.breadcrumb({
18
21
  category: "filter",
@@ -24,25 +27,43 @@ const useFilterSliderProps = (filter) => {
24
27
  },
25
28
  });
26
29
  utility_1.debug.log("useFilterSliderProps", "handleChange[value]", value);
27
- setFilterValue({
28
- start: parseInt(`${value.start}`),
29
- end: parseInt(`${value.end}`),
30
- });
30
+ setFilterValue([parseInt(`${value[0]}`), parseInt(`${value[1]}`)]);
31
31
  track({
32
32
  eventName: "filterChange",
33
33
  payload: {
34
34
  name: filter.name,
35
- value: `${value.start}:${value.end}`,
35
+ value: `${value[0]}:${value[1]}`,
36
36
  },
37
37
  });
38
38
  }, [filter]);
39
+ const handleRange = react_1.default.useCallback((value) => {
40
+ setFilterRange([parseInt(`${value[0]}`), parseInt(`${value[1]}`)]);
41
+ }, [filter]);
42
+ react_1.default.useEffect(() => {
43
+ const handler = (event) => {
44
+ setFilterValue(event.detail.value);
45
+ };
46
+ window.addEventListener(`@usereactify/search:filter:${filter.handle}:update`, handler);
47
+ return () => window.removeEventListener(`@usereactify/search:filter:${filter.handle}:update`, handler);
48
+ }, []);
49
+ const reactSliderProps = (0, useReactSliderProps_1.useReactSliderProps)(filter, filterValue, filterRange, handleChange);
39
50
  const filterSliderProps = react_1.default.useMemo(() => {
40
51
  return {
41
52
  handleChange,
53
+ handleRange,
42
54
  filter,
43
55
  value: filterValue,
56
+ range: filterRange,
57
+ reactSliderProps,
44
58
  };
45
- }, [filter, filterValue, handleChange]);
59
+ }, [
60
+ handleChange,
61
+ handleRange,
62
+ filter,
63
+ filterValue,
64
+ filterRange,
65
+ reactSliderProps,
66
+ ]);
46
67
  return filterSliderProps;
47
68
  };
48
69
  exports.useFilterSliderProps = useFilterSliderProps;
@@ -1 +1 @@
1
- {"version":3,"file":"useFilterSliderProps.js","sourceRoot":"","sources":["../../../src/hooks/useFilterSliderProps.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAG1B,oCAAwC;AACxC,wCAAmC;AAE5B,MAAM,oBAAoB,GAAG,CAClC,MAA0B,EAW1B,EAAE;IACF,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,oBAAY,GAAE,CAAC;IACjC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,eAAK,CAAC,QAAQ,CAGjD;QACD,KAAK,EAAE,CAAC;QACR,GAAG,EAAE,CAAC;KACP,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,eAAK,CAAC,WAAW,CACpC,CAAC,KAAuD,EAAE,EAAE;QAC1D,eAAK,CAAC,UAAU,CAAC;YACf,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,uBAAuB;YAChC,IAAI,EAAE;gBACJ,MAAM,EAAE,MAAM,CAAC,IAAI;gBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,KAAK,EAAE,KAAK;aACb;SACF,CAAC,CAAC;QAEH,eAAK,CAAC,GAAG,CAAC,sBAAsB,EAAE,qBAAqB,EAAE,KAAK,CAAC,CAAC;QAEhE,cAAc,CAAC;YACb,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;YACjC,GAAG,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;SAC9B,CAAC,CAAC;QAEH,KAAK,CAAC;YACJ,SAAS,EAAE,cAAc;YACzB,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE;aACrC;SACF,CAAC,CAAC;IACL,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,iBAAiB,GAAG,eAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAC3C,OAAO;YACL,YAAY;YACZ,MAAM;YACN,KAAK,EAAE,WAAW;SACnB,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IAExC,OAAO,iBAAiB,CAAC;AAC3B,CAAC,CAAC;AA7DW,QAAA,oBAAoB,wBA6D/B","sourcesContent":["import React from \"react\";\n\nimport { ConfigFilterOption } from \"../types/config\";\nimport { useAnalytics } from \"../hooks\";\nimport { debug } from \"../utility\";\n\nexport const useFilterSliderProps = (\n filter: ConfigFilterOption\n): {\n filter: ConfigFilterOption;\n value: {\n start: number;\n end: number;\n };\n handleChange: (value: {\n start: number | string;\n end: number | string;\n }) => void;\n} => {\n const { track } = useAnalytics();\n const [filterValue, setFilterValue] = React.useState<{\n start: number;\n end: number;\n }>({\n start: 0,\n end: 0,\n });\n\n const handleChange = React.useCallback(\n (value: { start: number | string; end: number | string }) => {\n debug.breadcrumb({\n category: \"filter\",\n message: \"filter option changed\",\n data: {\n filter: filter.name,\n field: filter.field,\n value: value,\n },\n });\n\n debug.log(\"useFilterSliderProps\", \"handleChange[value]\", value);\n\n setFilterValue({\n start: parseInt(`${value.start}`),\n end: parseInt(`${value.end}`),\n });\n\n track({\n eventName: \"filterChange\",\n payload: {\n name: filter.name,\n value: `${value.start}:${value.end}`,\n },\n });\n },\n [filter]\n );\n\n const filterSliderProps = React.useMemo(() => {\n return {\n handleChange,\n filter,\n value: filterValue,\n };\n }, [filter, filterValue, handleChange]);\n\n return filterSliderProps;\n};\n"]}
1
+ {"version":3,"file":"useFilterSliderProps.js","sourceRoot":"","sources":["../../../src/hooks/useFilterSliderProps.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,oCAAwC;AACxC,wCAAmC;AACnC,4EAAyE;AAElE,MAAM,oBAAoB,GAAG,CAClC,MAA0B,EAQ1B,EAAE;;IACF,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,oBAAY,GAAE,CAAC;IAEjC,MAAM,cAAc,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,eAAK,CAAC,QAAQ,CAClD,IAAI,CAAC,KAAK,CAAC,MAAA,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,mCAAI,OAAO,CAAC,CACzD,CAAC;IACF,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAmB;QACrE,CAAC,EAAE,CAAC;KACL,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,eAAK,CAAC,WAAW,CACpC,CAAC,KAAyC,EAAE,EAAE;QAC5C,eAAK,CAAC,UAAU,CAAC;YACf,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,uBAAuB;YAChC,IAAI,EAAE;gBACJ,MAAM,EAAE,MAAM,CAAC,IAAI;gBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,KAAK,EAAE,KAAK;aACb;SACF,CAAC,CAAC;QAEH,eAAK,CAAC,GAAG,CAAC,sBAAsB,EAAE,qBAAqB,EAAE,KAAK,CAAC,CAAC;QAEhE,cAAc,CAAC,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEnE,KAAK,CAAC;YACJ,SAAS,EAAE,cAAc;YACzB,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;aACjC;SACF,CAAC,CAAC;IACL,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,WAAW,GAAG,eAAK,CAAC,WAAW,CACnC,CAAC,KAAyC,EAAE,EAAE;QAC5C,cAAc,CAAC,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,eAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,OAAO,GAAG,CACd,KAA+D,EAC/D,EAAE;YACF,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CACrB,8BAA8B,MAAM,CAAC,MAAM,SAAS,EACpD,OAAwB,CACzB,CAAC;QAEF,OAAO,GAAG,EAAE,CACV,MAAM,CAAC,mBAAmB,CACxB,8BAA8B,MAAM,CAAC,MAAM,SAAS,EACpD,OAAwB,CACzB,CAAC;IACN,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,gBAAgB,GAAG,IAAA,yCAAmB,EAC1C,MAAM,EACN,WAAW,EACX,WAAW,EACX,YAAY,CACb,CAAC;IAEF,MAAM,iBAAiB,GAAG,eAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAC3C,OAAO;YACL,YAAY;YACZ,WAAW;YACX,MAAM;YACN,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,WAAW;YAClB,gBAAgB;SACjB,CAAC;IACJ,CAAC,EAAE;QACD,YAAY;QACZ,WAAW;QACX,MAAM;QACN,WAAW;QACX,WAAW;QACX,gBAAgB;KACjB,CAAC,CAAC;IAEH,OAAO,iBAAiB,CAAC;AAC3B,CAAC,CAAC;AAlGW,QAAA,oBAAoB,wBAkG/B","sourcesContent":["import React from \"react\";\nimport { ConfigFilterOption } from \"../types/config\";\nimport { useAnalytics } from \"../hooks\";\nimport { debug } from \"../utility\";\nimport { useReactSliderProps } from \"./react-slider/useReactSliderProps\";\n\nexport const useFilterSliderProps = (\n filter: ConfigFilterOption\n): {\n filter: ConfigFilterOption;\n value: [number, number];\n range: [number, number];\n handleChange: (value: [number | string, number | string]) => void;\n handleRange: (value: [number, number]) => void;\n reactSliderProps: ReturnType<typeof useReactSliderProps>;\n} => {\n const { track } = useAnalytics();\n\n const urlSearchParam = new URLSearchParams(window.location.search);\n const [filterValue, setFilterValue] = React.useState<[number, number]>(\n JSON.parse(urlSearchParam.get(filter.handle) ?? \"[0,0]\")\n );\n const [filterRange, setFilterRange] = React.useState<[number, number]>([\n 0, 0,\n ]);\n\n const handleChange = React.useCallback(\n (value: [number | string, number | string]) => {\n debug.breadcrumb({\n category: \"filter\",\n message: \"filter option changed\",\n data: {\n filter: filter.name,\n field: filter.field,\n value: value,\n },\n });\n\n debug.log(\"useFilterSliderProps\", \"handleChange[value]\", value);\n\n setFilterValue([parseInt(`${value[0]}`), parseInt(`${value[1]}`)]);\n\n track({\n eventName: \"filterChange\",\n payload: {\n name: filter.name,\n value: `${value[0]}:${value[1]}`,\n },\n });\n },\n [filter]\n );\n\n const handleRange = React.useCallback(\n (value: [number | string, number | string]) => {\n setFilterRange([parseInt(`${value[0]}`), parseInt(`${value[1]}`)]);\n },\n [filter]\n );\n\n React.useEffect(() => {\n const handler = (\n event: CustomEvent<{ handle: string; value: [number, number] }>\n ) => {\n setFilterValue(event.detail.value);\n };\n window.addEventListener(\n `@usereactify/search:filter:${filter.handle}:update`,\n handler as EventListener\n );\n\n return () =>\n window.removeEventListener(\n `@usereactify/search:filter:${filter.handle}:update`,\n handler as EventListener\n );\n }, []);\n\n const reactSliderProps = useReactSliderProps(\n filter,\n filterValue,\n filterRange,\n handleChange\n );\n\n const filterSliderProps = React.useMemo(() => {\n return {\n handleChange,\n handleRange,\n filter,\n value: filterValue,\n range: filterRange,\n reactSliderProps,\n };\n }, [\n handleChange,\n handleRange,\n filter,\n filterValue,\n filterRange,\n reactSliderProps,\n ]);\n\n return filterSliderProps;\n};\n"]}
@@ -0,0 +1,21 @@
1
+ export declare enum Flags {
2
+ SENSOR_SORT = "reactify-search:flag_sensor_sort",
3
+ SENSOR_COLLECTION = "reactify-search:flag_sensor_collection",
4
+ SENSOR_PUBLISHED = "reactify-search:flag_sensor_published",
5
+ SENSOR_INVENTORYAVAILABLE = "reactify-search:flag_sensor_inventoryavailable",
6
+ SENSOR_SEARCHTERM = "reactify-search:flag_sensor_searchterm",
7
+ SENSOR_SEARCHTERM_VALUE = "reactify-search:flag_sensor_searchterm_value",
8
+ SENSOR_SEARCHTERM_PHRASE = "reactify-search:flag_sensor_searchterm_phrase",
9
+ SENSOR_SEARCHTERM_PHRASE_SYNONYMS = "reactify-search:flag_sensor_searchterm_phrase_synonyms",
10
+ SENSOR_SEARCHTERM_PHRASE_PREFIX = "reactify-search:flag_sensor_searchterm_phrase_prefix",
11
+ SENSOR_SEARCHTERM_PHRASE_PREFIX_SYNONYMS = "reactify-search:flag_sensor_searchterm_phrase_prefix_synonyms",
12
+ SENSOR_SEARCHTERM_CROSS_FIELDS = "reactify-search:flag_sensor_searchterm_cross_fields",
13
+ SENSOR_SEARCHTERM_CROSS_FIELDS_SYNONYMS = "reactify-search:flag_sensor_searchterm_cross_fields_synonyms",
14
+ SENSOR_SEARCHTERM_SPAN_FIRST = "reactify-search:flag_sensor_searchterm_span_first",
15
+ SENSOR_SEARCHTERM_SPAN_FIRST_SYNONYMS = "reactify-search:flag_sensor_searchterm_span_first_synonyms"
16
+ }
17
+ export declare const useFlags: () => {
18
+ flags: Record<Flags, boolean>;
19
+ setFlag: (flag: Flags, value: boolean) => void;
20
+ getFlag: (flag: Flags) => boolean;
21
+ };
@@ -0,0 +1,49 @@
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.useFlags = exports.Flags = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ var Flags;
9
+ (function (Flags) {
10
+ Flags["SENSOR_SORT"] = "reactify-search:flag_sensor_sort";
11
+ Flags["SENSOR_COLLECTION"] = "reactify-search:flag_sensor_collection";
12
+ Flags["SENSOR_PUBLISHED"] = "reactify-search:flag_sensor_published";
13
+ Flags["SENSOR_INVENTORYAVAILABLE"] = "reactify-search:flag_sensor_inventoryavailable";
14
+ Flags["SENSOR_SEARCHTERM"] = "reactify-search:flag_sensor_searchterm";
15
+ Flags["SENSOR_SEARCHTERM_VALUE"] = "reactify-search:flag_sensor_searchterm_value";
16
+ Flags["SENSOR_SEARCHTERM_PHRASE"] = "reactify-search:flag_sensor_searchterm_phrase";
17
+ Flags["SENSOR_SEARCHTERM_PHRASE_SYNONYMS"] = "reactify-search:flag_sensor_searchterm_phrase_synonyms";
18
+ Flags["SENSOR_SEARCHTERM_PHRASE_PREFIX"] = "reactify-search:flag_sensor_searchterm_phrase_prefix";
19
+ Flags["SENSOR_SEARCHTERM_PHRASE_PREFIX_SYNONYMS"] = "reactify-search:flag_sensor_searchterm_phrase_prefix_synonyms";
20
+ Flags["SENSOR_SEARCHTERM_CROSS_FIELDS"] = "reactify-search:flag_sensor_searchterm_cross_fields";
21
+ Flags["SENSOR_SEARCHTERM_CROSS_FIELDS_SYNONYMS"] = "reactify-search:flag_sensor_searchterm_cross_fields_synonyms";
22
+ Flags["SENSOR_SEARCHTERM_SPAN_FIRST"] = "reactify-search:flag_sensor_searchterm_span_first";
23
+ Flags["SENSOR_SEARCHTERM_SPAN_FIRST_SYNONYMS"] = "reactify-search:flag_sensor_searchterm_span_first_synonyms";
24
+ })(Flags = exports.Flags || (exports.Flags = {}));
25
+ const useFlags = () => {
26
+ const [delta, setDelta] = react_1.default.useState(Date.now());
27
+ const getFlag = react_1.default.useCallback((flag) => {
28
+ return sessionStorage.getItem(flag) === "false" ? false : true;
29
+ }, [delta]);
30
+ const setFlag = react_1.default.useCallback((flag, value) => {
31
+ sessionStorage.setItem(flag, `${value}`);
32
+ setDelta(Date.now());
33
+ }, [delta]);
34
+ const flags = react_1.default.useMemo(() => {
35
+ return Object.values(Flags).reduce((acc, flag) => (Object.assign(Object.assign({}, acc), { [flag]: getFlag(flag) })), {});
36
+ }, [delta]);
37
+ react_1.default.useEffect(() => {
38
+ for (const flag of Object.values(Flags)) {
39
+ setFlag(flag, getFlag(flag));
40
+ }
41
+ }, [flags]);
42
+ return {
43
+ flags: flags,
44
+ setFlag: setFlag,
45
+ getFlag: getFlag,
46
+ };
47
+ };
48
+ exports.useFlags = useFlags;
49
+ //# sourceMappingURL=useFlags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFlags.js","sourceRoot":"","sources":["../../../src/hooks/useFlags.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,IAAY,KAeX;AAfD,WAAY,KAAK;IACf,yDAAgD,CAAA;IAChD,qEAA4D,CAAA;IAC5D,mEAA0D,CAAA;IAC1D,qFAA4E,CAAA;IAC5E,qEAA4D,CAAA;IAC5D,iFAAwE,CAAA;IACxE,mFAA0E,CAAA;IAC1E,qGAA4F,CAAA;IAC5F,iGAAwF,CAAA;IACxF,mHAA0G,CAAA;IAC1G,+FAAsF,CAAA;IACtF,iHAAwG,CAAA;IACxG,2FAAkF,CAAA;IAClF,6GAAoG,CAAA;AACtG,CAAC,EAfW,KAAK,GAAL,aAAK,KAAL,aAAK,QAehB;AAEM,MAAM,QAAQ,GAAG,GAAG,EAAE;IAC3B,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAS,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAE7D,MAAM,OAAO,GAAG,eAAK,CAAC,WAAW,CAC/B,CAAC,IAAW,EAAW,EAAE;QACvB,OAAO,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACjE,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAC;IAEF,MAAM,OAAO,GAAG,eAAK,CAAC,WAAW,CAC/B,CAAC,IAAW,EAAE,KAAc,EAAE,EAAE;QAC9B,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QACzC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACvB,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAC;IAEF,MAAM,KAAK,GAAG,eAAK,CAAC,OAAO,CAAyB,GAAG,EAAE;QACvD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAChC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,iCACV,GAAG,KACN,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,IACrB,EACF,EAA4B,CAC7B,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,eAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YACvC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;SAC9B;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,OAAO;QACL,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,OAAO;KACjB,CAAC;AACJ,CAAC,CAAC;AAvCW,QAAA,QAAQ,YAuCnB","sourcesContent":["import React from \"react\";\n\nexport enum Flags {\n SENSOR_SORT = \"reactify-search:flag_sensor_sort\",\n SENSOR_COLLECTION = \"reactify-search:flag_sensor_collection\",\n SENSOR_PUBLISHED = \"reactify-search:flag_sensor_published\",\n SENSOR_INVENTORYAVAILABLE = \"reactify-search:flag_sensor_inventoryavailable\",\n SENSOR_SEARCHTERM = \"reactify-search:flag_sensor_searchterm\",\n SENSOR_SEARCHTERM_VALUE = \"reactify-search:flag_sensor_searchterm_value\",\n SENSOR_SEARCHTERM_PHRASE = \"reactify-search:flag_sensor_searchterm_phrase\",\n SENSOR_SEARCHTERM_PHRASE_SYNONYMS = \"reactify-search:flag_sensor_searchterm_phrase_synonyms\",\n SENSOR_SEARCHTERM_PHRASE_PREFIX = \"reactify-search:flag_sensor_searchterm_phrase_prefix\",\n SENSOR_SEARCHTERM_PHRASE_PREFIX_SYNONYMS = \"reactify-search:flag_sensor_searchterm_phrase_prefix_synonyms\",\n SENSOR_SEARCHTERM_CROSS_FIELDS = \"reactify-search:flag_sensor_searchterm_cross_fields\",\n SENSOR_SEARCHTERM_CROSS_FIELDS_SYNONYMS = \"reactify-search:flag_sensor_searchterm_cross_fields_synonyms\",\n SENSOR_SEARCHTERM_SPAN_FIRST = \"reactify-search:flag_sensor_searchterm_span_first\",\n SENSOR_SEARCHTERM_SPAN_FIRST_SYNONYMS = \"reactify-search:flag_sensor_searchterm_span_first_synonyms\",\n}\n\nexport const useFlags = () => {\n const [delta, setDelta] = React.useState<number>(Date.now());\n\n const getFlag = React.useCallback(\n (flag: Flags): boolean => {\n return sessionStorage.getItem(flag) === \"false\" ? false : true;\n },\n [delta]\n );\n\n const setFlag = React.useCallback(\n (flag: Flags, value: boolean) => {\n sessionStorage.setItem(flag, `${value}`);\n setDelta(Date.now());\n },\n [delta]\n );\n\n const flags = React.useMemo<Record<Flags, boolean>>(() => {\n return Object.values(Flags).reduce<Record<Flags, boolean>>(\n (acc, flag) => ({\n ...acc,\n [flag]: getFlag(flag),\n }),\n {} as Record<Flags, boolean>\n );\n }, [delta]);\n\n React.useEffect(() => {\n for (const flag of Object.values(Flags)) {\n setFlag(flag, getFlag(flag));\n }\n }, [flags]);\n\n return {\n flags: flags,\n setFlag: setFlag,\n getFlag: getFlag,\n };\n};\n"]}
@@ -0,0 +1,5 @@
1
+ export declare type UseIndices = {
2
+ indices: Array<string>;
3
+ indexNameFormat: (indexName: string) => string;
4
+ };
5
+ export declare const useIndices: () => UseIndices;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.useIndices = void 0;
16
+ const react_1 = __importDefault(require("react"));
17
+ const useReactifySearchContext_1 = require("./useReactifySearchContext");
18
+ const useIndices = () => {
19
+ const { config, options } = (0, useReactifySearchContext_1.useReactifySearchContext)();
20
+ const shopName = options.shopifyPermanentDomain.replace(".myshopify.com", "");
21
+ const [indices, setIndices] = react_1.default.useState([]);
22
+ const indexNameFormat = (indexName) => {
23
+ let indexNameFormatted = indexName;
24
+ try {
25
+ const indexDate = indexName.split(`${shopName}-`)[1];
26
+ indexNameFormatted = `${shopName} ${new Date(parseInt(indexDate)).toLocaleString()} (${indexDate})`;
27
+ }
28
+ catch (error) {
29
+ console.error(error);
30
+ }
31
+ return indexNameFormatted;
32
+ };
33
+ react_1.default.useEffect(() => {
34
+ (() => __awaiter(void 0, void 0, void 0, function* () {
35
+ const response = yield fetch(`https://${config.endpoint}/_cat/indices?format=json`).then((response) => response.json());
36
+ const regexp = new RegExp(`${shopName}-[0-9]`);
37
+ setIndices(response
38
+ .map((item) => item.index)
39
+ .filter((item) => regexp.test(item))
40
+ .sort((a, b) => (a > b ? -1 : 1)));
41
+ }))();
42
+ }, [config.endpoint]);
43
+ return {
44
+ indices: indices,
45
+ indexNameFormat: indexNameFormat,
46
+ };
47
+ };
48
+ exports.useIndices = useIndices;
49
+ //# sourceMappingURL=useIndices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIndices.js","sourceRoot":"","sources":["../../../src/hooks/useIndices.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,yEAAsE;AAO/D,MAAM,UAAU,GAAG,GAAe,EAAE;IACzC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,mDAAwB,GAAE,CAAC;IACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,sBAAsB,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;IAE9E,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAwB,EAAE,CAAC,CAAC;IAExE,MAAM,eAAe,GAAkC,CAAC,SAAS,EAAE,EAAE;QACnE,IAAI,kBAAkB,GAAG,SAAS,CAAC;QACnC,IAAI;YACF,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAErD,kBAAkB,GAAG,GAAG,QAAQ,IAAI,IAAI,IAAI,CAC1C,QAAQ,CAAC,SAAS,CAAC,CACpB,CAAC,cAAc,EAAE,KAAK,SAAS,GAAG,CAAC;SACrC;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SACtB;QAED,OAAO,kBAAkB,CAAC;IAC5B,CAAC,CAAC;IAEF,eAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,CAAC,GAAS,EAAE;YACV,MAAM,QAAQ,GAA6B,MAAM,KAAK,CACpD,WAAW,MAAM,CAAC,QAAQ,2BAA2B,CACtD,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YAEtC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,GAAG,QAAQ,QAAQ,CAAC,CAAC;YAE/C,UAAU,CACR,QAAQ;iBACL,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;iBACzB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACnC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACpC,CAAC;QACJ,CAAC,CAAA,CAAC,EAAE,CAAC;IACP,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEtB,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,eAAe,EAAE,eAAe;KACjC,CAAC;AACJ,CAAC,CAAC;AA1CW,QAAA,UAAU,cA0CrB","sourcesContent":["import React from \"react\";\nimport { useReactifySearchContext } from \"./useReactifySearchContext\";\n\nexport type UseIndices = {\n indices: Array<string>;\n indexNameFormat: (indexName: string) => string;\n};\n\nexport const useIndices = (): UseIndices => {\n const { config, options } = useReactifySearchContext();\n const shopName = options.shopifyPermanentDomain.replace(\".myshopify.com\", \"\");\n\n const [indices, setIndices] = React.useState<UseIndices[\"indices\"]>([]);\n\n const indexNameFormat: UseIndices[\"indexNameFormat\"] = (indexName) => {\n let indexNameFormatted = indexName;\n try {\n const indexDate = indexName.split(`${shopName}-`)[1];\n\n indexNameFormatted = `${shopName} ${new Date(\n parseInt(indexDate)\n ).toLocaleString()} (${indexDate})`;\n } catch (error) {\n console.error(error);\n }\n\n return indexNameFormatted;\n };\n\n React.useEffect(() => {\n (async () => {\n const response: Array<{ index: string }> = await fetch(\n `https://${config.endpoint}/_cat/indices?format=json`\n ).then((response) => response.json());\n\n const regexp = new RegExp(`${shopName}-[0-9]`);\n\n setIndices(\n response\n .map((item) => item.index)\n .filter((item) => regexp.test(item))\n .sort((a, b) => (a > b ? -1 : 1))\n );\n })();\n }, [config.endpoint]);\n\n return {\n indices: indices,\n indexNameFormat: indexNameFormat,\n };\n};\n"]}
@@ -1,18 +1,16 @@
1
1
  import React from "react";
2
- import { Config } from "../types";
2
+ import { Config, ReactivesearchResultProps } from "../types";
3
3
  export declare type ReactifySearchMode = "search" | "collection" | "instant-search";
4
4
  export declare const ReactifySearchContext: React.Context<{
5
5
  config: Config;
6
6
  options: {
7
+ clientId: string;
7
8
  mode: ReactifySearchMode;
8
9
  index: string;
9
10
  shopifyPermanentDomain: string;
10
11
  filtersHandle?: string | undefined;
11
- credentials: {
12
- username: string;
13
- password: string;
14
- endpoint: string;
15
- };
12
+ credentials?: string | undefined;
13
+ endpoint: string;
16
14
  onRedirect?: ((type: "redirect" | "search", url: string) => void) | undefined;
17
15
  theme: Record<string, unknown>;
18
16
  additionalComponentIds?: string[] | undefined;
@@ -36,19 +34,23 @@ export declare const ReactifySearchContext: React.Context<{
36
34
  sortOption: string;
37
35
  setSortOption: React.Dispatch<React.SetStateAction<string>>;
38
36
  };
37
+ results: {
38
+ results: ReactivesearchResultProps["data"];
39
+ setResults: React.Dispatch<React.SetStateAction<ReactivesearchResultProps["data"]>>;
40
+ resultStats?: ReactivesearchResultProps["resultStats"];
41
+ setResultStats: React.Dispatch<React.SetStateAction<ReactivesearchResultProps["resultStats"] | undefined>>;
42
+ };
39
43
  } | undefined>;
40
44
  export declare const useReactifySearchContext: () => {
41
45
  config: Config;
42
46
  options: {
47
+ clientId: string;
43
48
  mode: ReactifySearchMode;
44
49
  index: string;
45
50
  shopifyPermanentDomain: string;
46
51
  filtersHandle?: string | undefined;
47
- credentials: {
48
- username: string;
49
- password: string;
50
- endpoint: string;
51
- };
52
+ credentials?: string | undefined;
53
+ endpoint: string;
52
54
  onRedirect?: ((type: "redirect" | "search", url: string) => void) | undefined;
53
55
  theme: Record<string, unknown>;
54
56
  additionalComponentIds?: string[] | undefined;
@@ -72,4 +74,10 @@ export declare const useReactifySearchContext: () => {
72
74
  sortOption: string;
73
75
  setSortOption: React.Dispatch<React.SetStateAction<string>>;
74
76
  };
77
+ results: {
78
+ results: ReactivesearchResultProps["data"];
79
+ setResults: React.Dispatch<React.SetStateAction<ReactivesearchResultProps["data"]>>;
80
+ resultStats?: ReactivesearchResultProps["resultStats"];
81
+ setResultStats: React.Dispatch<React.SetStateAction<ReactivesearchResultProps["resultStats"] | undefined>>;
82
+ };
75
83
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useReactifySearchContext.js","sourceRoot":"","sources":["../../../src/hooks/useReactifySearchContext.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAMb,QAAA,qBAAqB,GAAG,eAAK,CAAC,aAAa,CA4CtD,SAAS,CAAC,CAAC;AAEN,MAAM,wBAAwB,GAAG,GAAG,EAAE,CAC3C,eAAK,CAAC,UAAU,CAAC,6BAAqB,CAAE,CAAC;AAD9B,QAAA,wBAAwB,4BACM","sourcesContent":["import React from \"react\";\n\nimport { Config } from \"../types\";\n\nexport type ReactifySearchMode = \"search\" | \"collection\" | \"instant-search\";\n\nexport const ReactifySearchContext = React.createContext<\n | {\n config: Config;\n options: {\n mode: ReactifySearchMode;\n index: string;\n shopifyPermanentDomain: string;\n filtersHandle?: string;\n credentials: {\n username: string;\n password: string;\n endpoint: string;\n };\n onRedirect?: (type: \"redirect\" | \"search\", url: string) => void;\n theme: Record<string, unknown>;\n additionalComponentIds?: Array<string>;\n includeFields?: Array<string>;\n excludeFields?: Array<string>;\n } & (\n | {\n mode: \"search\";\n }\n | {\n mode: \"collection\";\n collectionHandle: string;\n }\n | {\n mode: \"instant-search\";\n }\n );\n search: {\n searchTerm: string;\n setSearchTerm: React.Dispatch<React.SetStateAction<string>>;\n showInstantSearchResults: boolean;\n setShowInstantSearchResults: React.Dispatch<\n React.SetStateAction<boolean>\n >;\n };\n sortby: {\n sortOption: string;\n setSortOption: React.Dispatch<React.SetStateAction<string>>;\n };\n }\n | undefined\n>(undefined);\n\nexport const useReactifySearchContext = () =>\n React.useContext(ReactifySearchContext)!;\n"]}
1
+ {"version":3,"file":"useReactifySearchContext.js","sourceRoot":"","sources":["../../../src/hooks/useReactifySearchContext.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAMb,QAAA,qBAAqB,GAAG,eAAK,CAAC,aAAa,CAsDtD,SAAS,CAAC,CAAC;AAEN,MAAM,wBAAwB,GAAG,GAAG,EAAE,CAC3C,eAAK,CAAC,UAAU,CAAC,6BAAqB,CAAE,CAAC;AAD9B,QAAA,wBAAwB,4BACM","sourcesContent":["import React from \"react\";\n\nimport { Config, ReactivesearchResultProps } from \"../types\";\n\nexport type ReactifySearchMode = \"search\" | \"collection\" | \"instant-search\";\n\nexport const ReactifySearchContext = React.createContext<\n | {\n config: Config;\n options: {\n clientId: string;\n mode: ReactifySearchMode;\n index: string;\n shopifyPermanentDomain: string;\n filtersHandle?: string;\n credentials?: string;\n endpoint: string;\n onRedirect?: (type: \"redirect\" | \"search\", url: string) => void;\n theme: Record<string, unknown>;\n additionalComponentIds?: Array<string>;\n includeFields?: Array<string>;\n excludeFields?: Array<string>;\n } & (\n | {\n mode: \"search\";\n }\n | {\n mode: \"collection\";\n collectionHandle: string;\n }\n | {\n mode: \"instant-search\";\n }\n );\n search: {\n searchTerm: string;\n setSearchTerm: React.Dispatch<React.SetStateAction<string>>;\n showInstantSearchResults: boolean;\n setShowInstantSearchResults: React.Dispatch<\n React.SetStateAction<boolean>\n >;\n };\n sortby: {\n sortOption: string;\n setSortOption: React.Dispatch<React.SetStateAction<string>>;\n };\n results: {\n results: ReactivesearchResultProps[\"data\"];\n setResults: React.Dispatch<\n React.SetStateAction<ReactivesearchResultProps[\"data\"]>\n >;\n resultStats?: ReactivesearchResultProps[\"resultStats\"];\n setResultStats: React.Dispatch<\n React.SetStateAction<\n ReactivesearchResultProps[\"resultStats\"] | undefined\n >\n >;\n };\n }\n | undefined\n>(undefined);\n\nexport const useReactifySearchContext = () =>\n React.useContext(ReactifySearchContext)!;\n"]}
@@ -0,0 +1,21 @@
1
+ import React from "react";
2
+ import { ReactivesearchResultProps } from "../types";
3
+ /** This hook must never be used to render results */
4
+ export declare const useResults: () => {
5
+ /** All of the current results */
6
+ results: ReactivesearchResultProps["data"];
7
+ /** Function for setting the current results */
8
+ setResults: React.Dispatch<React.SetStateAction<ReactivesearchResultProps["data"]>>;
9
+ /** All of the current result stats */
10
+ resultStats?: {
11
+ time: number;
12
+ hidden: number;
13
+ promoted: number;
14
+ currentPage: number;
15
+ numberOfPages: number;
16
+ numberOfResults?: number | undefined;
17
+ displayedResults: number;
18
+ } | undefined;
19
+ /** Function for setting the current result stats */
20
+ setResultStats: React.Dispatch<React.SetStateAction<ReactivesearchResultProps["resultStats"] | undefined>>;
21
+ };
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useResults = void 0;
4
+ const hooks_1 = require("../hooks");
5
+ const utility_1 = require("../utility");
6
+ /** This hook must never be used to render results */
7
+ const useResults = () => {
8
+ const { results } = (0, hooks_1.useReactifySearchContext)();
9
+ utility_1.debug.hook("useResults", "results", results.results);
10
+ utility_1.debug.hook("useResults", "resultStats", results.resultStats);
11
+ return {
12
+ results: results.results,
13
+ setResults: results.setResults,
14
+ resultStats: results.resultStats,
15
+ setResultStats: results.setResultStats,
16
+ };
17
+ };
18
+ exports.useResults = useResults;
19
+ //# sourceMappingURL=useResults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useResults.js","sourceRoot":"","sources":["../../../src/hooks/useResults.ts"],"names":[],"mappings":";;;AAGA,oCAAoD;AACpD,wCAAmC;AAEnC,qDAAqD;AAC9C,MAAM,UAAU,GAAG,GAaxB,EAAE;IACF,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,gCAAwB,GAAE,CAAC;IAE/C,eAAK,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,eAAK,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAE7D,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,cAAc,EAAE,OAAO,CAAC,cAAc;KACvC,CAAC;AACJ,CAAC,CAAC;AAzBW,QAAA,UAAU,cAyBrB","sourcesContent":["import React from \"react\";\n\nimport { ReactivesearchResultProps } from \"../types\";\nimport { useReactifySearchContext } from \"../hooks\";\nimport { debug } from \"../utility\";\n\n/** This hook must never be used to render results */\nexport const useResults = (): {\n /** All of the current results */\n results: ReactivesearchResultProps[\"data\"];\n /** Function for setting the current results */\n setResults: React.Dispatch<\n React.SetStateAction<ReactivesearchResultProps[\"data\"]>\n >;\n /** All of the current result stats */\n resultStats?: ReactivesearchResultProps[\"resultStats\"];\n /** Function for setting the current result stats */\n setResultStats: React.Dispatch<\n React.SetStateAction<ReactivesearchResultProps[\"resultStats\"] | undefined>\n >;\n} => {\n const { results } = useReactifySearchContext();\n\n debug.hook(\"useResults\", \"results\", results.results);\n debug.hook(\"useResults\", \"resultStats\", results.resultStats);\n\n return {\n results: results.results,\n setResults: results.setResults,\n resultStats: results.resultStats,\n setResultStats: results.setResultStats,\n };\n};\n"]}
@@ -28,13 +28,15 @@ const useSearch = () => {
28
28
  }
29
29
  search.setShowInstantSearchResults(false);
30
30
  if (options.onRedirect) {
31
- options.onRedirect(redirect ? "redirect" : "search", redirect ? redirect.url : `/search?q=${searchTerm}`);
31
+ options.onRedirect(redirect ? "redirect" : "search", redirect
32
+ ? redirect.url
33
+ : `/search?q=${encodeURIComponent(searchTerm)}`);
32
34
  }
33
35
  else if (redirect) {
34
36
  window.location.href = redirect.url;
35
37
  }
36
38
  else {
37
- window.location.href = `/search?q=${searchTerm}`;
39
+ window.location.href = `/search?q=${encodeURIComponent(searchTerm)}`;
38
40
  }
39
41
  }, [search.searchTerm]);
40
42
  const handleSetSearchTerm = react_1.default.useCallback((searchTerm = "") => {
@@ -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,GAWvB,EAAE;IACF,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,gCAAwB,GAAE,CAAC;IAE/D,MAAM,sBAAsB,GAAG,eAAK,CAAC,WAAW,CAC9C,CAAC,aAAqB,MAAM,CAAC,UAAU,EAAE,EAAE;QACzC,eAAK,CAAC,UAAU,CAAC;YACf,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,eAAe;YACxB,IAAI,EAAE;gBACJ,UAAU,EAAE,UAAU;aACvB;SACF,CAAC,CAAC;QAEH,eAAK,CAAC,GAAG,CAAC,WAAW,EAAE,yBAAyB,EAAE,UAAU,CAAC,CAAC;QAE9D,IAAI,CAAC,UAAU,EAAE;YACf,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,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAClC,CAAC;QAEF,IAAI,QAAQ,EAAE;YACZ,eAAK,CAAC,GAAG,CAAC,WAAW,EAAE,4BAA4B,EAAE,QAAQ,CAAC,CAAC;SAChE;QAED,MAAM,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;QAE1C,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,UAAU,EAAE,CACpD,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,UAAU,EAAE,CAAC;SAClD;IACH,CAAC,EACD,CAAC,MAAM,CAAC,UAAU,CAAC,CACpB,CAAC;IAEF,MAAM,mBAAmB,GAAG,eAAK,CAAC,WAAW,CAC3C,CAAC,aAAqB,EAAE,EAAE,EAAE;QAC1B,eAAK,CAAC,GAAG,CAAC,WAAW,EAAE,2BAA2B,EAAE,UAAU,CAAC,CAAC;QAChE,eAAK,CAAC,UAAU,CAAC;YACf,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,cAAc;YACvB,IAAI,EAAE;gBACJ,UAAU,EAAE,UAAU;aACvB;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC,EACD,CAAC,MAAM,CAAC,UAAU,CAAC,CACpB,CAAC;IAEF,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,aAAa,EAAE,mBAAmB;QAClC,gBAAgB,EAAE,sBAAsB;QACxC,wBAAwB,EACtB,CAAC,CAAC,MAAM,CAAC,wBAAwB,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU;QAC1D,2BAA2B,EAAE,MAAM,CAAC,2BAA2B;KAChE,CAAC;AACJ,CAAC,CAAC;AAhFW,QAAA,SAAS,aAgFpB","sourcesContent":["import React from \"react\";\n\nimport { useReactifySearchContext } from \"../hooks\";\nimport { debug } from \"../utility\";\n\nexport const useSearch = (): {\n /** The current search term */\n searchTerm: string;\n /** Function for changing the current search term */\n setSearchTerm: (searchTerm?: string) => void;\n /** Function for navigating to the search page, includes logic for redirects */\n submitSearchTerm: (searchTerm?: string) => void;\n /** Used to determine if instant search results should be displayed */\n showInstantSearchResults: boolean;\n /** Used to manually set the \"showInstantSearchResults\" value */\n setShowInstantSearchResults: React.Dispatch<React.SetStateAction<boolean>>;\n} => {\n const { options, config, search } = useReactifySearchContext();\n\n const handleSubmitSearchTerm = React.useCallback(\n (searchTerm: string = search.searchTerm) => {\n debug.breadcrumb({\n category: \"search\",\n message: \"search submit\",\n data: {\n searchTerm: searchTerm,\n },\n });\n\n debug.log(\"useSearch\", \"submitSearchTerm[query]\", searchTerm);\n\n if (!searchTerm) {\n return;\n }\n\n const redirect = config.redirects.find(\n (redirect) =>\n redirect.query.trim().toLowerCase() ===\n searchTerm.trim().toLowerCase()\n );\n\n if (redirect) {\n debug.log(\"useSearch\", \"submitSearchTerm[redirect]\", redirect);\n }\n\n search.setShowInstantSearchResults(false);\n\n if (options.onRedirect) {\n options.onRedirect(\n redirect ? \"redirect\" : \"search\",\n redirect ? redirect.url : `/search?q=${searchTerm}`\n );\n } else if (redirect) {\n window.location.href = redirect.url;\n } else {\n window.location.href = `/search?q=${searchTerm}`;\n }\n },\n [search.searchTerm]\n );\n\n const handleSetSearchTerm = React.useCallback(\n (searchTerm: string = \"\") => {\n debug.log(\"useSearch\", \"setSearchTerm[searchTerm]\", searchTerm);\n debug.breadcrumb({\n category: \"search\",\n message: \"search query\",\n data: {\n searchTerm: searchTerm,\n },\n });\n\n search.setSearchTerm(searchTerm);\n },\n [search.searchTerm]\n );\n\n return {\n searchTerm: search.searchTerm,\n setSearchTerm: handleSetSearchTerm,\n submitSearchTerm: handleSubmitSearchTerm,\n showInstantSearchResults:\n !!search.showInstantSearchResults && !!search.searchTerm,\n setShowInstantSearchResults: search.setShowInstantSearchResults,\n };\n};\n"]}
1
+ {"version":3,"file":"useSearch.js","sourceRoot":"","sources":["../../../src/hooks/useSearch.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,oCAAoD;AACpD,wCAAmC;AAE5B,MAAM,SAAS,GAAG,GAWvB,EAAE;IACF,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,gCAAwB,GAAE,CAAC;IAE/D,MAAM,sBAAsB,GAAG,eAAK,CAAC,WAAW,CAC9C,CAAC,aAAqB,MAAM,CAAC,UAAU,EAAE,EAAE;QACzC,eAAK,CAAC,UAAU,CAAC;YACf,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,eAAe;YACxB,IAAI,EAAE;gBACJ,UAAU,EAAE,UAAU;aACvB;SACF,CAAC,CAAC;QAEH,eAAK,CAAC,GAAG,CAAC,WAAW,EAAE,yBAAyB,EAAE,UAAU,CAAC,CAAC;QAE9D,IAAI,CAAC,UAAU,EAAE;YACf,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,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAClC,CAAC;QAEF,IAAI,QAAQ,EAAE;YACZ,eAAK,CAAC,GAAG,CAAC,WAAW,EAAE,4BAA4B,EAAE,QAAQ,CAAC,CAAC;SAChE;QAED,MAAM,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;QAE1C,IAAI,OAAO,CAAC,UAAU,EAAE;YACtB,OAAO,CAAC,UAAU,CAChB,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,EAChC,QAAQ;gBACN,CAAC,CAAC,QAAQ,CAAC,GAAG;gBACd,CAAC,CAAC,aAAa,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAClD,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,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC;SACtE;IACH,CAAC,EACD,CAAC,MAAM,CAAC,UAAU,CAAC,CACpB,CAAC;IAEF,MAAM,mBAAmB,GAAG,eAAK,CAAC,WAAW,CAC3C,CAAC,aAAqB,EAAE,EAAE,EAAE;QAC1B,eAAK,CAAC,GAAG,CAAC,WAAW,EAAE,2BAA2B,EAAE,UAAU,CAAC,CAAC;QAChE,eAAK,CAAC,UAAU,CAAC;YACf,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,cAAc;YACvB,IAAI,EAAE;gBACJ,UAAU,EAAE,UAAU;aACvB;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC,EACD,CAAC,MAAM,CAAC,UAAU,CAAC,CACpB,CAAC;IAEF,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,aAAa,EAAE,mBAAmB;QAClC,gBAAgB,EAAE,sBAAsB;QACxC,wBAAwB,EACtB,CAAC,CAAC,MAAM,CAAC,wBAAwB,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU;QAC1D,2BAA2B,EAAE,MAAM,CAAC,2BAA2B;KAChE,CAAC;AACJ,CAAC,CAAC;AAlFW,QAAA,SAAS,aAkFpB","sourcesContent":["import React from \"react\";\n\nimport { useReactifySearchContext } from \"../hooks\";\nimport { debug } from \"../utility\";\n\nexport const useSearch = (): {\n /** The current search term */\n searchTerm: string;\n /** Function for changing the current search term */\n setSearchTerm: (searchTerm?: string) => void;\n /** Function for navigating to the search page, includes logic for redirects */\n submitSearchTerm: (searchTerm?: string) => void;\n /** Used to determine if instant search results should be displayed */\n showInstantSearchResults: boolean;\n /** Used to manually set the \"showInstantSearchResults\" value */\n setShowInstantSearchResults: React.Dispatch<React.SetStateAction<boolean>>;\n} => {\n const { options, config, search } = useReactifySearchContext();\n\n const handleSubmitSearchTerm = React.useCallback(\n (searchTerm: string = search.searchTerm) => {\n debug.breadcrumb({\n category: \"search\",\n message: \"search submit\",\n data: {\n searchTerm: searchTerm,\n },\n });\n\n debug.log(\"useSearch\", \"submitSearchTerm[query]\", searchTerm);\n\n if (!searchTerm) {\n return;\n }\n\n const redirect = config.redirects.find(\n (redirect) =>\n redirect.query.trim().toLowerCase() ===\n searchTerm.trim().toLowerCase()\n );\n\n if (redirect) {\n debug.log(\"useSearch\", \"submitSearchTerm[redirect]\", redirect);\n }\n\n search.setShowInstantSearchResults(false);\n\n if (options.onRedirect) {\n options.onRedirect(\n redirect ? \"redirect\" : \"search\",\n redirect\n ? redirect.url\n : `/search?q=${encodeURIComponent(searchTerm)}`\n );\n } else if (redirect) {\n window.location.href = redirect.url;\n } else {\n window.location.href = `/search?q=${encodeURIComponent(searchTerm)}`;\n }\n },\n [search.searchTerm]\n );\n\n const handleSetSearchTerm = React.useCallback(\n (searchTerm: string = \"\") => {\n debug.log(\"useSearch\", \"setSearchTerm[searchTerm]\", searchTerm);\n debug.breadcrumb({\n category: \"search\",\n message: \"search query\",\n data: {\n searchTerm: searchTerm,\n },\n });\n\n search.setSearchTerm(searchTerm);\n },\n [search.searchTerm]\n );\n\n return {\n searchTerm: search.searchTerm,\n setSearchTerm: handleSetSearchTerm,\n submitSearchTerm: handleSubmitSearchTerm,\n showInstantSearchResults:\n !!search.showInstantSearchResults && !!search.searchTerm,\n setShowInstantSearchResults: search.setShowInstantSearchResults,\n };\n};\n"]}
@@ -12,7 +12,11 @@ const useSortBy = () => {
12
12
  const { track } = (0, hooks_1.useAnalytics)();
13
13
  const sortOptions = react_1.default.useMemo(() => {
14
14
  return config.sort
15
- .sort((a, b) => `${a.position}`.localeCompare(`${b.position}`))
15
+ .sort((a, b) => {
16
+ const aInt = (typeof a.position === "string") ? parseInt(a.position, 10) : a.position;
17
+ const bInt = (typeof b.position === "string") ? parseInt(b.position, 10) : b.position;
18
+ return aInt - bInt;
19
+ })
16
20
  .filter(({ visibility }) => ["all", options.mode].includes(visibility));
17
21
  }, [options.mode, config]);
18
22
  const sortOption = react_1.default.useMemo(() => {
@@ -1 +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,GAUvB,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;AAzEW,QAAA,SAAS,aAyEpB","sourcesContent":["import React from \"react\";\n\nimport { ConfigSort } from \"../types\";\nimport { useAnalytics, useReactifySearchContext } from \"../hooks\";\nimport { debug } from \"../utility\";\n\nexport const useSortBy = (): {\n /** The currently selected sort option */\n sortOption?: ConfigSort;\n /** All of the available sort options */\n sortOptions: Array<ConfigSort>;\n /** Function for changing the current sort option */\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"]}
1
+ {"version":3,"file":"useSortBy.js","sourceRoot":"","sources":["../../../src/hooks/useSortBy.ts"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\n\nimport { ConfigSort } from \"../types\";\nimport { useAnalytics, useReactifySearchContext } from \"../hooks\";\nimport { debug } from \"../utility\";\n\nexport const useSortBy = (): {\n /** The currently selected sort option */\n sortOption?: ConfigSort;\n /** All of the available sort options */\n sortOptions: Array<ConfigSort>;\n /** Function for changing the current sort option */\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) => {\n const aInt = (typeof a.position === \"string\") ? parseInt(a.position, 10) : a.position;\n const bInt = (typeof b.position === \"string\") ? parseInt(b.position, 10) : b.position;\n return aInt - bInt;\n })\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"]}
@@ -1,11 +1,17 @@
1
1
  import { Sort, Filter, FilterOption, Redirect, Field, Curation } from "./firestore";
2
2
  export interface Config {
3
3
  index: string;
4
- sort: ConfigSort[];
5
- fields: ConfigField[];
6
- filters: ConfigFilter[];
7
- redirects: ConfigRedirect[];
8
- curations: ConfigCuration[];
4
+ endpoint: string;
5
+ version: string;
6
+ cache: {
7
+ enabled: boolean;
8
+ seconds: number;
9
+ };
10
+ sort: Array<ConfigSort>;
11
+ fields: Array<ConfigField>;
12
+ filters: Array<ConfigFilter>;
13
+ redirects: Array<ConfigRedirect>;
14
+ curations: Array<ConfigCuration>;
9
15
  }
10
16
  export declare type ConfigSort = Omit<Sort, "enabled">;
11
17
  export declare type ConfigField = Omit<Field, "enabled">;
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/types/config.ts"],"names":[],"mappings":"","sourcesContent":["import {\n Sort,\n Filter,\n FilterOption,\n Redirect,\n Field,\n Curation,\n} from \"./firestore\";\n\n// when exposed as config, most resources have the `enabled` and `keywords` attributes removed\n// curation boosting groupings and sortings both have a json encoded elastic query added to them\nexport interface Config {\n index: string;\n sort: ConfigSort[];\n fields: ConfigField[];\n filters: ConfigFilter[];\n redirects: ConfigRedirect[];\n curations: ConfigCuration[];\n}\n\nexport type ConfigSort = Omit<Sort, \"enabled\">;\nexport type ConfigField = Omit<Field, \"enabled\">;\nexport type ConfigRedirect = Omit<Redirect, \"enabled\" | \"keywords\">;\nexport type ConfigFilter = Omit<Filter, \"enabled\" | \"keywords\"> & {\n options: Omit<FilterOption, \"enabled\">[];\n};\nexport type ConfigFilterOption = Omit<FilterOption, \"enabled\">;\nexport type ConfigCuration = Omit<\n Curation,\n \"keywords\" | \"boosting\" | \"longRunningTask\" | \"callouts\"\n> & {\n boosting: {\n groupings: (NonNullable<\n NonNullable<Curation[\"boosting\"]>[\"groupings\"]\n >[0] & { query: string })[];\n sortings: (NonNullable<NonNullable<Curation[\"boosting\"]>[\"sortings\"]>[0] & {\n query: string;\n })[];\n };\n};\n"]}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/types/config.ts"],"names":[],"mappings":"","sourcesContent":["import {\n Sort,\n Filter,\n FilterOption,\n Redirect,\n Field,\n Curation,\n} from \"./firestore\";\n\n// when exposed as config, most resources have the `enabled` and `keywords` attributes removed\n// curation boosting groupings and sortings both have a json encoded elastic query added to them\nexport interface Config {\n index: string;\n endpoint: string;\n version: string;\n cache: {\n enabled: boolean;\n seconds: number;\n };\n sort: Array<ConfigSort>;\n fields: Array<ConfigField>;\n filters: Array<ConfigFilter>;\n redirects: Array<ConfigRedirect>;\n curations: Array<ConfigCuration>;\n}\n\nexport type ConfigSort = Omit<Sort, \"enabled\">;\nexport type ConfigField = Omit<Field, \"enabled\">;\nexport type ConfigRedirect = Omit<Redirect, \"enabled\" | \"keywords\">;\nexport type ConfigFilter = Omit<Filter, \"enabled\" | \"keywords\"> & {\n options: Omit<FilterOption, \"enabled\">[];\n};\nexport type ConfigFilterOption = Omit<FilterOption, \"enabled\">;\nexport type ConfigCuration = Omit<\n Curation,\n \"keywords\" | \"boosting\" | \"longRunningTask\" | \"callouts\"\n> & {\n boosting: {\n groupings: (NonNullable<\n NonNullable<Curation[\"boosting\"]>[\"groupings\"]\n >[0] & { query: string })[];\n sortings: (NonNullable<NonNullable<Curation[\"boosting\"]>[\"sortings\"]>[0] & {\n query: string;\n })[];\n };\n};\n"]}