@usereactify/search 2.1.0-beta.2 → 2.1.0-beta.3

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 (98) hide show
  1. package/README.md +5 -0
  2. package/dist/filter/Filter.d.ts +12 -0
  3. package/dist/filter/Filter.js +58 -0
  4. package/dist/filter/FilterList.d.ts +4 -0
  5. package/dist/filter/FilterList.js +15 -0
  6. package/dist/filter/FilterStack.d.ts +11 -0
  7. package/dist/filter/FilterStack.js +25 -0
  8. package/dist/filter/index.d.ts +3 -0
  9. package/dist/filter/index.js +15 -0
  10. package/dist/hooks/index.d.ts +14 -0
  11. package/dist/hooks/index.js +26 -0
  12. package/dist/hooks/reactivesearch/index.d.ts +5 -0
  13. package/dist/hooks/reactivesearch/index.js +17 -0
  14. package/dist/hooks/reactivesearch/useReactiveBaseProps.d.ts +7 -0
  15. package/dist/hooks/reactivesearch/useReactiveBaseProps.js +43 -0
  16. package/dist/hooks/reactivesearch/useReactiveDataSearchProps.d.ts +24 -0
  17. package/dist/hooks/reactivesearch/useReactiveDataSearchProps.js +87 -0
  18. package/dist/hooks/reactivesearch/useReactiveFilterListProps.d.ts +68 -0
  19. package/dist/hooks/reactivesearch/useReactiveFilterListProps.js +106 -0
  20. package/dist/hooks/reactivesearch/useReactiveReactProp.d.ts +3 -0
  21. package/dist/hooks/reactivesearch/useReactiveReactProp.js +25 -0
  22. package/dist/hooks/reactivesearch/useReactiveResultListProps.d.ts +20 -0
  23. package/dist/hooks/reactivesearch/useReactiveResultListProps.js +32 -0
  24. package/dist/hooks/useAnalytics.d.ts +14 -0
  25. package/dist/hooks/useAnalytics.js +47 -0
  26. package/dist/hooks/useCollection.d.ts +1 -0
  27. package/dist/hooks/useCollection.js +6 -0
  28. package/dist/hooks/useCombinedResults.d.ts +7 -0
  29. package/dist/hooks/useCombinedResults.js +25 -0
  30. package/dist/hooks/useConfig.d.ts +1 -0
  31. package/dist/hooks/useConfig.js +6 -0
  32. package/dist/hooks/useCuration.d.ts +1 -0
  33. package/dist/hooks/useCuration.js +6 -0
  34. package/dist/hooks/useFilterCollapsedState.d.ts +8 -0
  35. package/dist/hooks/useFilterCollapsedState.js +27 -0
  36. package/dist/hooks/useFilterListProps.d.ts +21 -0
  37. package/dist/hooks/useFilterListProps.js +35 -0
  38. package/dist/hooks/useFilterStack.d.ts +1 -0
  39. package/dist/hooks/useFilterStack.js +6 -0
  40. package/dist/hooks/useFilters.d.ts +1 -0
  41. package/dist/hooks/useFilters.js +17 -0
  42. package/dist/hooks/usePages.d.ts +10 -0
  43. package/dist/hooks/usePages.js +82 -0
  44. package/dist/hooks/useProductPrice.d.ts +12 -0
  45. package/dist/hooks/useProductPrice.js +61 -0
  46. package/dist/hooks/useSearch.d.ts +8 -0
  47. package/dist/hooks/useSearch.js +16 -0
  48. package/dist/hooks/useSort.d.ts +5 -0
  49. package/dist/hooks/useSort.js +9 -0
  50. package/dist/index.d.ts +7 -0
  51. package/dist/index.js +19 -0
  52. package/dist/provider.d.ts +44 -0
  53. package/dist/provider.js +165 -0
  54. package/dist/result/ResultCard.d.ts +10 -0
  55. package/dist/result/ResultCard.js +45 -0
  56. package/dist/result/ResultCardCallout.d.ts +9 -0
  57. package/dist/result/ResultCardCallout.js +38 -0
  58. package/dist/result/ResultList.d.ts +30 -0
  59. package/dist/result/ResultList.js +99 -0
  60. package/dist/result/ResultLoadMoreButton.d.ts +9 -0
  61. package/dist/result/ResultLoadMoreButton.js +27 -0
  62. package/dist/result/ResultPagination.d.ts +8 -0
  63. package/dist/result/ResultPagination.js +50 -0
  64. package/dist/result/ResultPaginationNextPrev.d.ts +8 -0
  65. package/dist/result/ResultPaginationNextPrev.js +30 -0
  66. package/dist/result/ResultStateProvider.d.ts +7 -0
  67. package/dist/result/ResultStateProvider.js +10 -0
  68. package/dist/result/index.d.ts +5 -0
  69. package/dist/result/index.js +17 -0
  70. package/dist/search/SearchInput.d.ts +8 -0
  71. package/dist/search/SearchInput.js +19 -0
  72. package/dist/search/index.d.ts +1 -0
  73. package/dist/search/index.js +13 -0
  74. package/dist/sensor/SensorCollection.d.ts +2 -0
  75. package/dist/sensor/SensorCollection.js +41 -0
  76. package/dist/sensor/SensorInventoryAvailable.d.ts +2 -0
  77. package/dist/sensor/SensorInventoryAvailable.js +25 -0
  78. package/dist/sensor/SensorPublished.d.ts +2 -0
  79. package/dist/sensor/SensorPublished.js +16 -0
  80. package/dist/sensor/SensorSearch.d.ts +2 -0
  81. package/dist/sensor/SensorSearch.js +81 -0
  82. package/dist/sensor/SensorSort.d.ts +2 -0
  83. package/dist/sensor/SensorSort.js +144 -0
  84. package/dist/sensor/SensorSortScore.d.ts +2 -0
  85. package/dist/sensor/SensorSortScore.js +12 -0
  86. package/dist/sensor/SensorStack.d.ts +2 -0
  87. package/dist/sensor/SensorStack.js +31 -0
  88. package/dist/sensor/index.d.ts +8 -0
  89. package/dist/sensor/index.js +29 -0
  90. package/dist/types/config.d.ts +130 -0
  91. package/dist/types/config.js +2 -0
  92. package/dist/types/index.d.ts +79 -0
  93. package/dist/types/index.js +14 -0
  94. package/dist/types/results.d.ts +48 -0
  95. package/dist/types/results.js +2 -0
  96. package/dist/utility/UtilityAuthenticatedReactiveBase.d.ts +2 -0
  97. package/dist/utility/UtilityAuthenticatedReactiveBase.js +14 -0
  98. package/package.json +1 -1
package/README.md CHANGED
@@ -38,4 +38,9 @@ npm run storybook
38
38
 
39
39
  # release a version
40
40
  npm run release
41
+
42
+ # release a beta version
43
+ change the version in package.json or npm version prerelease --preid beta or npm version prerelease
44
+
45
+ publish-beta
41
46
  ```
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ import type { ConfigFilterOption } from "../types";
3
+ import { useFilterListProps, useFilterCollapsedState } from "../hooks";
4
+ declare type Props = {
5
+ noWrapper?: boolean;
6
+ filter: ConfigFilterOption;
7
+ renderFilterList?: (props: Omit<Props, "renderFilterList"> & {
8
+ filterListProps: ReturnType<typeof useFilterListProps>;
9
+ }) => JSX.Element;
10
+ } & Partial<ReturnType<typeof useFilterCollapsedState>>;
11
+ export declare const Filter: React.FC<Props>;
12
+ export {};
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.Filter = void 0;
18
+ const react_1 = __importDefault(require("react"));
19
+ const MultiList_1 = __importDefault(require("@appbaseio/reactivesearch/lib/components/list/MultiList"));
20
+ const SingleList_1 = __importDefault(require("@appbaseio/reactivesearch/lib/components/list/SingleList"));
21
+ const FilterList_1 = require("./FilterList");
22
+ const hooks_1 = require("../hooks");
23
+ const Filter = (props) => {
24
+ const { filter } = props;
25
+ const reactiveFilterListProps = (0, hooks_1.useReactiveFilterListProps)(filter);
26
+ if ("single" === filter.displayType) {
27
+ return (react_1.default.createElement(SingleList_1.default, Object.assign({}, reactiveFilterListProps, { render: (reactivesearchFilterProps) => (react_1.default.createElement(FilterListInner, Object.assign({}, props, { reactivesearchFilterProps: reactivesearchFilterProps }))) })));
28
+ }
29
+ if ("multi" === filter.displayType) {
30
+ return (react_1.default.createElement(MultiList_1.default, Object.assign({ showCheckbox: false }, reactiveFilterListProps, { render: (reactivesearchFilterProps) => (react_1.default.createElement(FilterListInner, Object.assign({}, props, { reactivesearchFilterProps: reactivesearchFilterProps }))) })));
31
+ }
32
+ console.error(`filter with display type "${filter.displayType}" not yet supported`);
33
+ return null;
34
+ };
35
+ exports.Filter = Filter;
36
+ // inner component exists only so we can use memos in reactivesearch render functions
37
+ const FilterListInner = (props) => {
38
+ const { filter, noWrapper, renderFilterList, reactivesearchFilterProps } = props, otherProps = __rest(props, ["filter", "noWrapper", "renderFilterList", "reactivesearchFilterProps"]);
39
+ const filterListProps = (0, hooks_1.useFilterListProps)(filter, reactivesearchFilterProps);
40
+ // hide entire filter when no options available
41
+ if (0 === filterListProps.options.length)
42
+ return null;
43
+ if (renderFilterList) {
44
+ return renderFilterList(Object.assign({ filterListProps, filter }, otherProps));
45
+ }
46
+ if (noWrapper) {
47
+ return react_1.default.createElement(FilterList_1.FilterList, Object.assign({}, filterListProps));
48
+ }
49
+ return (react_1.default.createElement(FilterWrapper, Object.assign({}, props),
50
+ react_1.default.createElement(FilterList_1.FilterList, Object.assign({}, filterListProps))));
51
+ };
52
+ // wrap the filter with a clickable title
53
+ const FilterWrapper = ({ filter, children, collapsed, shouldRender, collapsedToggle }) => {
54
+ return (react_1.default.createElement("div", null,
55
+ react_1.default.createElement("h1", { onClick: () => collapsedToggle && collapsedToggle() }, filter.name),
56
+ ("undefined" === typeof shouldRender || !!shouldRender) && (react_1.default.createElement("div", { style: { display: collapsed ? "none" : "block" } }, children)),
57
+ "undefined" !== typeof collapsed && !!collapsed && (react_1.default.createElement("div", null, "Filter is collapsed."))));
58
+ };
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import { useFilterListProps } from "../hooks";
3
+ export declare type Props = ReturnType<typeof useFilterListProps>;
4
+ export declare const FilterList: React.FC<Props>;
@@ -0,0 +1,15 @@
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.FilterList = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const FilterList = ({ options, handleChange }) => (react_1.default.createElement("ul", null, options.map(({ key, doc_count, checked }) => (react_1.default.createElement("li", { key: key },
9
+ react_1.default.createElement("label", null,
10
+ react_1.default.createElement("input", { value: key, type: "checkbox", checked: checked, onChange: handleChange }),
11
+ key,
12
+ " (",
13
+ doc_count,
14
+ ")"))))));
15
+ exports.FilterList = FilterList;
@@ -0,0 +1,11 @@
1
+ import React from "react";
2
+ import type { ConfigFilterOption } from "../types";
3
+ import { useFilterCollapsedState } from "../hooks";
4
+ declare type Props = {
5
+ render?: (filters: ConfigFilterOption[]) => JSX.Element;
6
+ renderFilter?: (props: {
7
+ filter: ConfigFilterOption;
8
+ } & ReturnType<typeof useFilterCollapsedState>) => JSX.Element;
9
+ };
10
+ export declare const FilterStack: React.FC<Props>;
11
+ export {};
@@ -0,0 +1,25 @@
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.FilterStack = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const Filter_1 = require("./Filter");
9
+ const hooks_1 = require("../hooks");
10
+ const FilterStack = (props) => {
11
+ const { render } = props;
12
+ const filters = (0, hooks_1.useFilters)();
13
+ if (0 === filters.length)
14
+ return null;
15
+ if (render)
16
+ return render(filters);
17
+ return (react_1.default.createElement(react_1.default.Fragment, null, filters.map((filter) => (react_1.default.createElement(FilterWithState, Object.assign({ key: filter.id, filter: filter }, props))))));
18
+ };
19
+ exports.FilterStack = FilterStack;
20
+ const FilterWithState = ({ filter, renderFilter, }) => {
21
+ const collapsedProps = (0, hooks_1.useFilterCollapsedState)(filter);
22
+ if (renderFilter)
23
+ return renderFilter(Object.assign({ filter }, collapsedProps));
24
+ return react_1.default.createElement(Filter_1.Filter, Object.assign({ filter: filter }, collapsedProps));
25
+ };
@@ -0,0 +1,3 @@
1
+ export * from "./Filter";
2
+ export * from "./FilterList";
3
+ export * from "./FilterStack";
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./Filter"), exports);
14
+ __exportStar(require("./FilterList"), exports);
15
+ __exportStar(require("./FilterStack"), exports);
@@ -0,0 +1,14 @@
1
+ export * from "./reactivesearch";
2
+ export * from "./useSort";
3
+ export * from "./usePages";
4
+ export * from "./useConfig";
5
+ export * from "./useSearch";
6
+ export * from "./useFilters";
7
+ export * from "./useCuration";
8
+ export * from "./useAnalytics";
9
+ export * from "./useCollection";
10
+ export * from "./useFilterStack";
11
+ export * from "./useProductPrice";
12
+ export * from "./useFilterListProps";
13
+ export * from "./useCombinedResults";
14
+ export * from "./useFilterCollapsedState";
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./reactivesearch"), exports);
14
+ __exportStar(require("./useSort"), exports);
15
+ __exportStar(require("./usePages"), exports);
16
+ __exportStar(require("./useConfig"), exports);
17
+ __exportStar(require("./useSearch"), exports);
18
+ __exportStar(require("./useFilters"), exports);
19
+ __exportStar(require("./useCuration"), exports);
20
+ __exportStar(require("./useAnalytics"), exports);
21
+ __exportStar(require("./useCollection"), exports);
22
+ __exportStar(require("./useFilterStack"), exports);
23
+ __exportStar(require("./useProductPrice"), exports);
24
+ __exportStar(require("./useFilterListProps"), exports);
25
+ __exportStar(require("./useCombinedResults"), exports);
26
+ __exportStar(require("./useFilterCollapsedState"), exports);
@@ -0,0 +1,5 @@
1
+ export * from "./useReactiveBaseProps";
2
+ export * from "./useReactiveReactProp";
3
+ export * from "./useReactiveFilterListProps";
4
+ export * from "./useReactiveResultListProps";
5
+ export * from "./useReactiveDataSearchProps";
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./useReactiveBaseProps"), exports);
14
+ __exportStar(require("./useReactiveReactProp"), exports);
15
+ __exportStar(require("./useReactiveFilterListProps"), exports);
16
+ __exportStar(require("./useReactiveResultListProps"), exports);
17
+ __exportStar(require("./useReactiveDataSearchProps"), exports);
@@ -0,0 +1,7 @@
1
+ export declare const useReactiveBaseProps: () => {
2
+ app: string;
3
+ url: string;
4
+ credentials: string;
5
+ theme: import("../..").ConfigTheme | undefined;
6
+ transformResponse: (response: any) => Promise<any>;
7
+ };
@@ -0,0 +1,43 @@
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.useReactiveBaseProps = void 0;
16
+ const react_1 = __importDefault(require("react"));
17
+ const provider_1 = require("../../provider");
18
+ const useReactiveBaseProps = () => {
19
+ const { index, credentials, theme } = (0, provider_1.useContext)();
20
+ return react_1.default.useMemo(() => ({
21
+ app: index,
22
+ url: credentials.endpoint,
23
+ credentials: `${credentials.username}:${credentials.password}`,
24
+ theme,
25
+ transformResponse: (response) => __awaiter(void 0, void 0, void 0, function* () {
26
+ var _a, _b, _c, _d;
27
+ // support filtering inside nested aggregations by moving the inner aggregation
28
+ // up one level such that reactivesearch understands it
29
+ //
30
+ // see useReactiveFilterListProps > defaultQuery to see how a filter is being applied
31
+ // to variant aggregations to ensure that only in stock sizes are displayed as filter
32
+ // options, this involves a nested filter, which requires this fix
33
+ //
34
+ // https://github.com/appbaseio/reactivesearch/issues/1530
35
+ if ((_b = (_a = response === null || response === void 0 ? void 0 : response.aggregations) === null || _a === void 0 ? void 0 : _a.reactivesearch_nested) === null || _b === void 0 ? void 0 : _b.reactify_nested_outer) {
36
+ response.aggregations.reactivesearch_nested =
37
+ (_d = (_c = response === null || response === void 0 ? void 0 : response.aggregations) === null || _c === void 0 ? void 0 : _c.reactivesearch_nested) === null || _d === void 0 ? void 0 : _d.reactify_nested_outer;
38
+ }
39
+ return response;
40
+ }),
41
+ }), [credentials, theme]);
42
+ };
43
+ exports.useReactiveBaseProps = useReactiveBaseProps;
@@ -0,0 +1,24 @@
1
+ declare type Props = {
2
+ debounce?: number;
3
+ placeholder?: string;
4
+ inputClassName?: string;
5
+ };
6
+ export declare const useReactiveDataSearchProps: (props?: Props) => {
7
+ showIcon: boolean;
8
+ fuzziness: 0 | 1 | 2 | "AUTO";
9
+ queryFormat: "and" | "or";
10
+ autosuggest: boolean;
11
+ value: string;
12
+ onKeyUp: (e: any) => void;
13
+ componentId: string;
14
+ placeholder: string;
15
+ dataField: string[];
16
+ fieldWeights: number[];
17
+ onChange: (value: string, triggerQuery: () => {}) => void;
18
+ onBlur: () => void;
19
+ onFocus: () => void;
20
+ innerClass: {
21
+ input: string | undefined;
22
+ };
23
+ };
24
+ export {};
@@ -0,0 +1,87 @@
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.useReactiveDataSearchProps = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const ahooks_1 = require("ahooks");
9
+ const useAnalytics_1 = require("../useAnalytics");
10
+ const debug = require("debug")("reactify-search:useReactiveDataSearchProps");
11
+ const __1 = require("../");
12
+ // default field for when zero search fields have been configured in Reactify
13
+ const defaultSearchField = {
14
+ id: "title",
15
+ field: "title",
16
+ importance: 0,
17
+ searchType: "instant_search",
18
+ };
19
+ const useReactiveDataSearchProps = (props = {}) => {
20
+ const { debounce, placeholder, inputClassName } = props;
21
+ react_1.default.useEffect(() => {
22
+ debug("props", props);
23
+ }, [props]);
24
+ const { fields } = (0, __1.useConfig)();
25
+ const { searchQuery, submitSearch, setSearchQuery, setShowInstantSearchResults, } = (0, __1.useSearch)();
26
+ const searchFields = react_1.default.useMemo(() => 0 < fields.length
27
+ ? fields.filter((field) => ["always_search", "instant_search"].includes(field.searchType))
28
+ : [defaultSearchField], []);
29
+ react_1.default.useEffect(() => {
30
+ debug("searchFields", searchFields);
31
+ }, [searchFields]);
32
+ const handleKeyPress = react_1.default.useCallback((e) => {
33
+ if ("Enter" !== e.key)
34
+ return;
35
+ submitSearch();
36
+ }, [submitSearch]);
37
+ const { track } = (0, useAnalytics_1.useAnalytics)();
38
+ const trackQuery = react_1.default.useCallback(() => {
39
+ if (!searchQuery)
40
+ return;
41
+ track({ eventName: "search", searchTerm: searchQuery });
42
+ }, [searchQuery, track]);
43
+ const { run: runDebouncedTriggerQuery, cancel: cancelDebouncedTriggerQuery } = (0, ahooks_1.useDebounceFn)((triggerQuery) => {
44
+ triggerQuery();
45
+ trackQuery();
46
+ }, {
47
+ wait: debounce !== null && debounce !== void 0 ? debounce : 300,
48
+ });
49
+ return react_1.default.useMemo(() => ({
50
+ showIcon: false,
51
+ fuzziness: 1,
52
+ queryFormat: "and",
53
+ autosuggest: false,
54
+ value: searchQuery !== null && searchQuery !== void 0 ? searchQuery : "",
55
+ onKeyUp: handleKeyPress,
56
+ componentId: "SearchInput",
57
+ placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : "Search for a product...",
58
+ dataField: searchFields.map((field) => field.field),
59
+ fieldWeights: searchFields.map((field) => field.importance),
60
+ onChange: (value, triggerQuery) => {
61
+ setSearchQuery(value);
62
+ if (!!value)
63
+ runDebouncedTriggerQuery(triggerQuery);
64
+ else
65
+ cancelDebouncedTriggerQuery();
66
+ },
67
+ onBlur: () => {
68
+ // requestAnimationFrame ensures that results are still clickable before close
69
+ window.requestAnimationFrame(() => setShowInstantSearchResults(false));
70
+ },
71
+ onFocus: () => {
72
+ setShowInstantSearchResults(true);
73
+ },
74
+ innerClass: {
75
+ input: inputClassName,
76
+ },
77
+ }), [
78
+ searchQuery,
79
+ handleKeyPress,
80
+ placeholder,
81
+ searchFields,
82
+ setSearchQuery,
83
+ runDebouncedTriggerQuery,
84
+ cancelDebouncedTriggerQuery,
85
+ ]);
86
+ };
87
+ exports.useReactiveDataSearchProps = useReactiveDataSearchProps;
@@ -0,0 +1,68 @@
1
+ import type { ConfigFilterOption } from "../../types";
2
+ export declare const useReactiveFilterListProps: (filter: ConfigFilterOption) => {
3
+ nestedField: string | undefined;
4
+ customQuery: ((value?: string | string[] | undefined) => {
5
+ query?: undefined;
6
+ } | {
7
+ query: {
8
+ nested: {
9
+ path: string;
10
+ query: {
11
+ bool: {
12
+ must: ({
13
+ match: {
14
+ "variants.available": string;
15
+ };
16
+ terms?: undefined;
17
+ } | {
18
+ terms: {
19
+ [x: string]: string[];
20
+ };
21
+ match?: undefined;
22
+ })[];
23
+ };
24
+ };
25
+ };
26
+ };
27
+ }) | undefined;
28
+ defaultQuery: (() => {
29
+ aggs: {
30
+ reactivesearch_nested: {
31
+ nested: {
32
+ path: string;
33
+ };
34
+ aggs: {
35
+ reactify_nested_outer: {
36
+ filter: {
37
+ match: {
38
+ "variants.available": string;
39
+ };
40
+ };
41
+ aggs: {
42
+ [x: string]: {
43
+ terms: {
44
+ field: string;
45
+ size: number;
46
+ order: {
47
+ _count: string;
48
+ };
49
+ };
50
+ };
51
+ };
52
+ };
53
+ };
54
+ };
55
+ };
56
+ }) | undefined;
57
+ URLParams: boolean;
58
+ componentId: string;
59
+ dataField: string;
60
+ filterLabel: string;
61
+ react: {
62
+ and: string[];
63
+ };
64
+ size: number | undefined;
65
+ showFilter: true;
66
+ showLoadMore: boolean;
67
+ showSearch: boolean;
68
+ };
@@ -0,0 +1,106 @@
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.useReactiveFilterListProps = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const useReactiveReactProp_1 = require("./useReactiveReactProp");
9
+ const useReactiveFilterListProps = (filter) => {
10
+ const reactiveReactProp = (0, useReactiveReactProp_1.useReactiveReactProp)(filter.id);
11
+ const nestedField = react_1.default.useMemo(() => {
12
+ const nestedFields = ["variants"];
13
+ const topField = filter.field.split(".")[0];
14
+ if (nestedFields.includes(topField))
15
+ return topField;
16
+ return undefined;
17
+ }, [filter]);
18
+ // define a custom query for when settingsHideUnavailable is enabled and the target field is inside variants
19
+ // customQuery defines how this filter affects *other* components like the results component
20
+ const customQuery = react_1.default.useMemo(() => {
21
+ if (!filter.settingsHideUnavailable ||
22
+ !filter.field.startsWith("variants."))
23
+ return undefined;
24
+ return (value) => {
25
+ if (!value)
26
+ return {};
27
+ // reactivesearch sometimes returns string, sometimes string[]
28
+ const valueArray = "string" === typeof value ? [value] : value;
29
+ if (0 === valueArray.length)
30
+ return {};
31
+ return {
32
+ query: {
33
+ nested: {
34
+ path: "variants",
35
+ query: {
36
+ bool: {
37
+ must: [
38
+ {
39
+ match: {
40
+ "variants.available": "true",
41
+ },
42
+ },
43
+ {
44
+ terms: {
45
+ [filter.field]: valueArray,
46
+ },
47
+ },
48
+ ],
49
+ },
50
+ },
51
+ },
52
+ },
53
+ };
54
+ };
55
+ }, [filter]);
56
+ // define a default query for when settingsHideUnavailable is enabled and the target field is inside variants
57
+ // defaultQuery defines how this filter affects itself i.e. the options displayed
58
+ const defaultQuery = react_1.default.useMemo(() => {
59
+ if (!filter.settingsHideUnavailable ||
60
+ !filter.field.startsWith("variants."))
61
+ return undefined;
62
+ // override the aggregation query to filter the results by the variants.available attribute
63
+ return () => {
64
+ return {
65
+ aggs: {
66
+ reactivesearch_nested: {
67
+ nested: { path: "variants" },
68
+ aggs: {
69
+ reactify_nested_outer: {
70
+ filter: {
71
+ match: {
72
+ "variants.available": "true",
73
+ },
74
+ },
75
+ aggs: {
76
+ [filter.field]: {
77
+ terms: {
78
+ field: filter.field,
79
+ size: 100,
80
+ order: { _count: "desc" },
81
+ },
82
+ },
83
+ },
84
+ },
85
+ },
86
+ },
87
+ },
88
+ };
89
+ };
90
+ }, [filter]);
91
+ return react_1.default.useMemo(() => ({
92
+ nestedField,
93
+ customQuery,
94
+ defaultQuery,
95
+ URLParams: true,
96
+ componentId: filter.id,
97
+ dataField: filter.field,
98
+ filterLabel: filter.name,
99
+ react: reactiveReactProp,
100
+ size: parseInt(filter.displaySize) || undefined,
101
+ showFilter: filter.settingsShowFilter || true,
102
+ showLoadMore: filter.settingsShowMore || false,
103
+ showSearch: (filter === null || filter === void 0 ? void 0 : filter.settingsShowSearch) || false,
104
+ }), [filter, reactiveReactProp]);
105
+ };
106
+ exports.useReactiveFilterListProps = useReactiveFilterListProps;
@@ -0,0 +1,3 @@
1
+ export declare const useReactiveReactProp: (currentId?: string | undefined) => {
2
+ and: string[];
3
+ };
@@ -0,0 +1,25 @@
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.useReactiveReactProp = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const sensor_1 = require("../../sensor");
9
+ const useFilters_1 = require("../useFilters");
10
+ const provider_1 = require("../../provider");
11
+ const useReactiveReactProp = (currentId) => {
12
+ const filters = (0, useFilters_1.useFilters)();
13
+ const { additionalComponentIds } = (0, provider_1.useContext)();
14
+ return react_1.default.useMemo(() => {
15
+ return {
16
+ and: [
17
+ "SearchInput",
18
+ ...sensor_1.SENSOR_IDS,
19
+ ...(additionalComponentIds !== null && additionalComponentIds !== void 0 ? additionalComponentIds : []),
20
+ ...filters.map((filter) => filter.id),
21
+ ].filter((id) => id !== currentId),
22
+ };
23
+ }, [filters, currentId]);
24
+ };
25
+ exports.useReactiveReactProp = useReactiveReactProp;
@@ -0,0 +1,20 @@
1
+ declare type Props = {
2
+ pageSize?: number;
3
+ pageSizeAdjust?: number;
4
+ };
5
+ export declare const useReactiveResultListProps: (props?: Props) => {
6
+ size: number;
7
+ URLParams: boolean;
8
+ showLoader: boolean;
9
+ dataField: string;
10
+ showResultStats: boolean;
11
+ react: {
12
+ and: string[];
13
+ };
14
+ componentId: string;
15
+ scrollOnChange: boolean;
16
+ pagination: boolean;
17
+ infiniteScroll: boolean;
18
+ renderNoResults: () => null;
19
+ };
20
+ export {};